과제를 바꾸니 순서가 뒤집혔다
이 시리즈는 같은 말을 여러 번 했다. 재귀 상태의 기억은 네 자 남짓이고 (1편), 게이트를 열면 손실이 나빠지고 (8편), 합성곱의 창을 넓히면 나빠지고 (5편), 도달은 성능을 예측하지 않는다고.
그리고 매번 같은 단서를 달았다 - 이건 앞쪽 글자가 별로 안 중요한 과제 이야기다. 2편, 5편, 8편이 각각 “정말 필요한 일이었다면 정반대일 것이다” 라고 적고 넘어갔다. 세 번 미뤘으면 만들어야 한다.
앞쪽이 정말 필요한 과제
글자 20개짜리 알파벳에서 무작위로 60자를 뽑고, 구분자를 하나 넣고, 같은 60자를 다시 붙인다. 두 번째 복사만 채점한다.
자리 60 에서 맞혀야 하는 것은 자리 0 의 글자다. 거리가 정확히 60 이고, 그
뒤로도 자리 60+j 에서 자리 j 를 맞히니 거리는 내내 60 이다. 무작위 열이라
앞을 안 보면 찍는 수밖에 없고, 찍으면 ln(20) = 2.9957 이다.
모형도 예산도 최적화도 앞 편들과 같다. 바꾼 것은 데이터뿐이다.
셋은 아예 못 한다
최소 검증 (시드 3개) 중앙값
트랜스포머 0.0002 0.0002 0.0002 0.0002
GRU 1.8907 1.9005 1.8966 1.8966
LSTM 2.9967 2.9974 2.9966 2.9967
CNN 2.9974 2.9975 2.9974 2.9974
RNN 2.9980 2.9982 2.9975 2.9980
RNN, LSTM, CNN 이 2.9957 에서 소수점 셋째 자리까지 안 움직인다. 아무것도
못 배웠다는 뜻이다.
CNN 은 당연하다. 5편에서 수용장이 17 자이고 그 밖은 계산 그래프에 없다는 것을
확인했다. 60 자 전은 존재하지 않는 것과 같다. 창을 125 로 넓힌 설정도 있지만
여기서는 안 돌렸다 - 그건 뒤에 적는다.
재귀 둘은 구조적으로는 볼 수 있다. 그런데 못 한다. 1편에서 글자 하나를 바꾸면
네 자 만에 절반이 사라지고 서른두 자 뒤에 1% 미만이 남는다고 쟀다. 그 상태로
60 자를 되짚는 것은 불가능하다.
트랜스포머는 완전히 푼다
0.0002 다. 시드 셋이 같은 값이다. 손실이 0.0002 면 60자를 다 맞힌다는 뜻
이고, 찍기 대비 15,000 배다.
어텐션은 자리와 자리를 직접 잇는다. 8편에서 잰 것이 그것이었다 - 127자 뒤에서도
기울기가 1.19e-02 로, 같은 자리 GRU 의 39,145 배였다. 거기서는 그 도달이
쓸모없었다. 여기서는 그것이 과제 전부다.
8편의 “도달은 성능을 예측하지 않는다” 는 문장이 여기서 뒤집힌다. 정확히는, 뒤집히는 조건을 이제 안다.
GRU 는 절반쯤 한다
1.8966 으로 찍기보다 한참 낫고 트랜스포머보다 한참 못하다. 자리별로 보면
첫 글자가 1.237 로 제일 쉽고 뒤로 갈수록 1.77 근처로 나빠진다.
첫 글자가 더 쉬운 것이 이상해서 가설을 하나 세웠다 - 첫 입력은 빈 상태에 쓰이니
경쟁 없이 크게 남는 것 아닌가. 재 봤다. 학습 전 GRU 에서 자리 j 를 바꾸고
60번째 걸음의 상태가 얼마나 달라지는지 보면
바꾼 자리 j=0 j=20 j=40 j=58 j=59
상태 변화 0.0000 0.0000 0.0001 0.5809 1.1070
j = 40 까지 전부 0 이다. 첫 입장 효과 같은 것은 없다. 가설이 틀렸고 이유는
아직 모른다.
게이트는 필요하면 움직인다
GRU 가 어떻게든 해낸 것이 있으니, 게이트가 어디로 갔는지 보면 된다. 3편에서 쓴 방식 그대로 갱신 게이트를 꺼내면
z 평균 유닛 중앙 반감기 중앙 10자 이상
복사 과제로 학습 0.921 0.914 7.75자 381개 중 131개
글자 예측으로 학습 (3편) 0.405 0.398 0.75자 0개
같은 구조, 같은 폭, 같은 최적화인데 갱신 게이트가 0.405 에서 0.921 로
갔다. 반감기 중앙값이 0.75 자에서 7.75 자로 열 배가 되고, 3편에서 하나도
없던 “열 자 이상 붙드는 유닛” 이 131 개 생긴다.
2편과 3편이 틀린 게 아니었다. 2편은 망각 게이트가 초기값 0.5 에서 거의 안
움직였다고 했고 3편은 긴 기억을 맡은 유닛이 없다고 했다. 둘 다 맞았고, 둘 다
글자 예측이 그것을 안 시켰기 때문이다. 시키면 움직인다.
앞 편들이 틀린 게 아니다
이 편이 뒤집는 것은 앞 편의 숫자가 아니라 그 숫자가 붙어 있던 조건이다.
- 1편의 “기억은 네 자 남짓” 은 여전히 맞다. 여기서 RNN 과 LSTM 이 못 하는 이유가 바로 그것이다
- 2편의 “게이트가 안 움직였다” 도 맞다. 과제를 바꾸니 움직였다
- 5편의 “창을 넓히면 나빠진다” 도 맞다. 거기서는 넓힐 이유가 없었다
- 8편의 “도달은 성능을 예측하지 않는다” 도 맞다. 여기서는 도달이 성능 전부다
세 편이 단서를 달아 둔 것이 맞았다는 것이 이 편의 결과다.
남는 것
CNN 을 수용장 125 로 놓고 돌리지 않았다. 5편 설정이 있으니 할 수 있는데, 창이
60 을 넘어도 복사를 할 수 있는지는 안 봤다. 할 것 같기는 하다 - 안 잰 것은
안 잰 것이다.
복사 길이도 60 하나만 썼다. 길이를 4, 8, 16 으로 낮춰 가며 재귀가 어디서
부터 되는지 보면 1편의 “네 자” 와 직접 이어지는데, 안 했다.
그리고 트랜스포머의 0.0002 는 3000걸음짜리다. 복사는 문법이 하나뿐인 과제라
외울 것이 없고, 그래서 앞 편들과 달리 과적합이 안 보인다. 실제 글과 다른 종류의
쉬움이다.
그래서
- 앞쪽 글자가 반드시 필요한 과제를 만들었다. 무작위 60자를 구분자 뒤에 다시
쓰는 것이고, 찍으면
ln(20) = 2.9957이다 - RNN
2.9980, LSTM2.9967, CNN2.9974- 셋 다 찍기에서 한 발도 못 움직인다. 1편의 네 자짜리 기억과 5편의 17자짜리 창이 여기서 값을 치른다 - 트랜스포머는
0.0002로 완전히 푼다. 찍기 대비15,000배다 - GRU 만
1.8966으로 중간에 있다. 첫 글자가1.237로 제일 쉬운데 이유는 못 밝혔다 - 첫 입장 효과 가설은 재 보고 기각했다 - GRU 의 갱신 게이트가
0.405에서0.921로, 반감기 중앙이0.75자에서7.75자로 갔다. 3편에서 0개였던 “열 자 이상” 유닛이131개다 - 앞 편들의 숫자는 그대로 맞다. 뒤집힌 것은 그 숫자가 붙어 있던 조건이고, 그 조건은 세 편이 이미 적어 두었다
Comments