writing

Series · 13 parts

재귀와 합성곱

어텐션 전에 있던 것들을 하나씩 열어 본다. 재귀 한 걸음이 실제로 하는 계산, 게이트가 무엇을 여닫는지, 합성곱 커널이 어디를 보는지, 풀링이 무엇을 버리는지 - 그리고 마지막에 같은 예산으로 붙여 본다.

Assumed 앞 시리즈 '보이는 딥러닝' 을 읽었거나, 트랜스포머가 무엇을 계산하는지 알면 된다.

  1. 01 재귀 한 걸음이 하는 계산 은닉 상태 하나로 글을 읽는다는 게 무슨 뜻인지 열어 본다. 파라미터 63만 개 중 73%가 상태를 상태로 옮기는 행렬 하나에 있고, 683개 유닛 중 546번은 띄어쓰기를 볼 때마다 켜진다. 그리고 글자 하나를 바꾸면 네 자 만에 절반이 사라진다.
  2. 02 게이트를 꺼내 보니 망각 게이트가 안 움직였다 LSTM 이 무엇을 여닫는지 학습된 가중치에서 직접 꺼낸다. 망각 게이트 평균이 0.495 로 초기값 sigmoid(0)=0.5 에서 거의 안 움직였고, 유닛 325개 중 반감기가 3자를 넘는 것이 하나도 없다. 그런데 상태는 그보다 오래 기억한다.
  3. 03 게이트 하나를 없앤 쪽이 이겼다 GRU 는 LSTM 의 입력 게이트와 망각 게이트를 하나로 묶는다. 묶어도 되는 이유가 LSTM 이 원래 둘을 안 따로 쓰기 때문일 거라 봤는데, 재 보니 따로 쓴다 - 상관 0.071. 그런데도 진다. 같은 폭에서 파라미터를 23% 덜 쓰고도 GRU 가 앞선다.
  4. 04 첫 층 커널이 배운 것은 줄 끝이었다 합성곱은 상태를 이고 가지 않는다. 자리마다 다섯 글자를 보는 커널 하나가 미끄러질 뿐이다. 학습된 첫 층에서 채널마다 제일 크게 반응하는 다섯 글자를 찾아 보면, 개행·소수점·백틱·쉼표를 잡는 것들이 나온다.
  5. 05 창을 공짜로 넓혔더니 나빠졌다 합성곱의 수용장을 17자에서 125자까지 넓혀 같은 예산으로 학습시켰다. 넓힐수록 손실이 오른다. 파라미터도 채널도 층도 그대로 두고 팽창으로만 17을 61로 넓힌 경우조차 0.10 나빠진다 - 팽창은 넓히는 게 아니라 성기게 하기 때문이다.
  6. 06 풀링은 위치 3비트를 버린다 풀링이 사는 것과 내는 것을 따로 쟀다. 창 8이면 한 글자 밀어도 표현이 1.16 에서 0.22 로 덜 바뀌는 대신, 창 안 어느 자리였는지 3.00비트를 통째로 버린다. 다음 글자 맞히기에서는 그 거래가 손해다.
  7. 07 같은 예산이면 GRU 가 이긴다 - 700걸음 동안만 앞 시리즈 13편의 트랜스포머와 같은 파라미터 예산, 같은 코퍼스, 같은 최적화로 RNN·LSTM·GRU·1D 합성곱을 학습했다. GRU 의 최저 검증 손실 1.6449 가 트랜스포머의 1.7679 를 이긴다. 그런데 앞서는 구간이 500걸음에서 1200걸음까지뿐이고, 4000걸음에서는 3.4170 으로 무너진다.
  8. 08 기울기를 멀리 보내면 손실이 나빠졌다 마지막 자리의 손실이 뒤로 몇 자까지 닿는지 다섯 구조에서 쟀다. 게이트는 도달을 거의 안 늘린다 - 파이토치 망각 게이트 바이어스가 0 이라 걸음마다 절반이 죽기 때문이다. 열면 문맥 전체에 닿는데, 그러면 손실이 단조롭게 나빠진다.
  9. 09 걸음으로 견준 것이 트랜스포머에 유리했다 7편이 남긴 빚을 갚는다. 재귀는 순서대로 가야 하니 느릴 줄 알았는데 LSTM 이 트랜스포머의 0.82배다. 순차성의 값은 융합 커널이 숨기고 있었고, 트랜스포머를 비싸게 만드는 것은 걸음당 값이 아니라 걸음 수였다.
  10. 10 과제를 바꾸니 순서가 뒤집혔다 2편·5편·8편이 세 번 같은 단서를 달았다 - 이 결론은 앞쪽 글자가 안 중요한 과제에 붙어 있다고. 그래서 반드시 필요한 과제를 만들었다. 트랜스포머가 0.0002 로 완전히 풀고 RNN·LSTM·CNN 은 찍기에서 한 발도 못 움직인다.
  11. 11 어디서부터 못 하나 복사 거리를 2에서 60까지 바꿔 가며 다섯 구조를 같은 규약으로 돌렸다. RNN 은 4와 8 사이, LSTM 은 8과 16 사이에서 끊긴다. CNN 은 수용장이 17인데 거리 12까지만 풀고, 왜 그런지에 대한 내 설명은 세워 보자마자 반증됐다.
  12. 12 층을 쌓아도 안 늘었다 11편이 남긴 '왜 12인가' 를 여섯 구성으로 쟀다. 커널 5 는 층이 4든 6든 8이든, 수용장 상한이 16이든 24든 32든 정확히 12에서 끊긴다. 세워 둔 후보 두 개가 다 틀렸고, 실제로 늘어나는 것은 커널을 키울 때뿐이다.
  13. 13 얕은 스택은 상한을 다 쓴다 12편은 상한을 늘려도 쓸 수 있는 거리가 안 는다고 했다. 층을 둘셋으로 줄여 보니 그 구간에서는 상한을 한 자도 안 남기고 다 쓴다. 그리고 층을 4로 맞춰 다시 재니 12편이 그은 직선이 커널 3 에서 1.5 자 어긋난다 - 깊이가 섞인 점을 커널 축에 올렸었다.