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