재귀와 합성곱 part 10 of 13

과제를 바꾸니 순서가 뒤집혔다

guide / / 8 sections

이 시리즈는 같은 말을 여러 번 했다. 재귀 상태의 기억은 네 자 남짓이고 (1편), 게이트를 열면 손실이 나빠지고 (8편), 합성곱의 창을 넓히면 나빠지고 (5편), 도달은 성능을 예측하지 않는다고.

그리고 매번 같은 단서를 달았다 - 이건 앞쪽 글자가 별로 안 중요한 과제 이야기다. 2편, 5편, 8편이 각각 “정말 필요한 일이었다면 정반대일 것이다” 라고 적고 넘어갔다. 세 번 미뤘으면 만들어야 한다.

앞쪽이 정말 필요한 과제

글자 20개짜리 알파벳에서 무작위로 60자를 뽑고, 구분자를 하나 넣고, 같은 60자를 다시 붙인다. 두 번째 복사만 채점한다.

복사 과제 무작위 60자 같은 60자 60자 되짚기 복사 자리별 손실 0 1 2 3 찍으면 2.9957 RNN CNN LSTM GRU 트랜스포머 0 10 20 30 40 50 59 복사한 몇 번째 글자
위: 무작위 60자, 구분자, 같은 60자. 복사의 첫 글자를 맞히려면 60자 전을 되짚어야 하고, 그 뒤로도 거리는 계속 60이다. 아래: 복사 자리마다의 손실. 트랜스포머만 바닥에 붙어 있고 RNN·LSTM·CNN 은 찍기 선에서 안 움직인다. GRU 만 그 사이에 있다.

자리 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, LSTM 2.9967, CNN 2.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