재귀와 합성곱 part 5 of 13

창을 공짜로 넓혔더니 나빠졌다

guide / / 9 sections

4편에서 합성곱 모형이 왼쪽으로 열일곱 자까지만 본다는 것을 봤다. 다른 넷은 128자를 다 본다. 그러면 창을 넓히면 따라잡아야 한다.

넓혀 봤다.

창 넓이는 계산으로 나온다

커널 k 짜리 층을 팽창 d 로 쌓으면 수용장은

1 + Σ d_i · (k - 1)

이다. 커널 5짜리 4층이면 1 + 4·4 = 17 이고, 팽창을 1, 2, 4, 8 로 주면 1 + 4·(1+2+4+8) = 61 이다.

식이 맞는지는 재 보면 된다. 마지막 자리의 출력을 받아 두고, 뒤로 d 자 떨어진 글자를 다른 글자로 바꿔 다시 돌린다. 출력 차이가 정확히 0.0 이 되는 첫 d 가 수용장이다.

                  채널    파라미터    식      실측
k5 x4              171   639,273     17      17
k5 x8              122   639,370     33      33
k9 x4              128   633,828     33      33
k5 팽창 1-8         171   639,273     61      61
k5 팽창 1-16        153   635,763    125     125

다섯 다 식과 한 자도 안 틀린다. 4편에서 “그래프에 없으니 작은 게 아니라 없다” 고 한 것이 이것이다.

넓히는 세 가지 방법

층을 더 쌓거나, 커널을 키우거나, 팽창을 주는 것이다. 앞의 둘은 파라미터를 먹으므로 같은 예산에서는 채널을 줄여야 한다. 팽창은 아무것도 안 먹는다.

팽창 없이 쌓으면 수용장 7자 1-2-4 로 벌리면 수용장 15자 수용장에 따른 최소 검증 손실 1.65 1.75 1.85 1.95 2.05 GRU 1.6449 트랜스포머 1.7679 k5 x4 k5 x8 k9 x4 k5 팽창 1-8 k5 팽창 1-16 17 33 61 125 수용장 (자, 로그)
위: 그리기 좋게 커널 3 으로 세 층을 쌓았을 때 마지막 자리가 닿는 입력들. 팽창 없이 쌓으면 7자, 1-2-4 로 벌리면 15자인데 선 개수는 같다. 실제 모형은 커널 5 다. 아래: 수용장만 17에서 125까지 바꿔 같은 예산으로 학습한 결과. 넓힐수록 나빠지고, 어느 것도 GRU 나 트랜스포머 근처에 못 간다.

그림 위쪽이 그 차이다. 팽창을 주면 선 개수는 그대로인데 닿는 자리가 넓어진다.

넓힐수록 나빠진다

              수용장   채널    파라미터   최소 검증 (시드 3개)          중앙값
k5 x4            17    171   639,273   1.8748 1.8709 1.8695    1.8709
k5 x8            33    122   639,370   1.9437 1.9346 1.9326    1.9346
k9 x4            33    128   633,828   2.0592 2.0652 2.0621    2.0621
k5 팽창 1-8       61    171   639,273   1.9716 1.9795 1.9556    1.9716
k5 팽창 1-16     125    153   635,763   1.9967 2.0020 1.9907    1.9967

제일 좁은 것이 제일 낫다. 17 자짜리가 1.8709, 125 자짜리가 1.9967 이다. 그리고 어느 것도 GRU 의 1.6449 나 트랜스포머의 1.7679 근처에 못 간다.

층을 쌓거나 커널을 키우는 쪽은 설명이 있다. 예산이 고정이라 채널을 171 에서 122128 로 줄여야 했으니, 창을 넓힌 값을 채널로 낸 것이다.

공짜로 넓혀도 나빠진다

팽창 쪽은 그 설명이 안 통한다. k5 팽창 1-8k5 x4 와 채널 171, 파라미터 639,273, 층 4, 커널 5 가 전부 같다. 다른 것은 창이 17 이 아니라 61 이라는 것뿐이다.

그런데 1.97161.87090.10 나쁘다. 시드 범위가 1.9556~1.97951.8695~1.8748 로 겹치지도 않는다.

공짜로 넓혔는데 손해다.

팽창은 넓히는 게 아니라 성기게 한다

왜 그런지는 셀 수 있다. 출력에서 각 입력 자리로 가는 경로가 몇 개인지 세면 된다. 경로가 많을수록 그 자리에 배정된 계산이 많다는 뜻이다.

                수용장   경로 총수   닿는 자리   가까운 4자가 가진 몫
팽창 없이 x4        17       625        17개              11.2%
팽창 1-8           61       625        61개               1.6%

경로 총수가 625 로 같다. 팽창은 계산을 안 늘린다. 같은 625 개를 17자에 뿌리던 것을 61자에 뿌릴 뿐이다.

자리별로 보면 더 분명하다.

뒤로       0    1    2    3    4    5    6
팽창 없음   1    4   10   20   35   52   68
팽창 1-8   1    1    2    2    4    3    5

바로 앞 글자에 가는 경로가 4 개에서 1 개로, 네 배 줄었다. 1편에서 상태의 기억이 네 자 남짓이었고 2편에서 게이트도 그랬다. 그 네 자가 중요한 자리인데, 팽창은 거기 쓰던 계산을 멀리 가져가 버린다.

넓히는 게 아니라 옮기는 것이다.

같은 33자라도 만드는 법이 다르다

k5 x8k9 x4 는 수용장이 둘 다 33 인데 1.93462.06210.13 차이가 난다. 층을 여덟 개 쌓는 쪽이 커널을 아홉으로 키우는 쪽보다 훨씬 낫다.

커널 하나를 키우면 파라미터가 k 에 비례해 늘고, 그만큼 채널이 깎인다. 층을 쌓으면 층마다 비선형이 하나씩 더 붙는다. 수용장이 같아도 그것을 어떻게 만드는 지가 손실을 가른다.

7편의 문장 하나를 고친다

7편은 “CNN 은 왼쪽으로 17자만 본다. 예산이 아니라 시야에서 진다” 로 끝난다. 그 문장의 앞쪽은 맞고 뒤쪽은 틀렸다.

시야를 125 자로 넓혀도 1.9967 로 더 나빠진다. CNN 이 지는 것은 시야가 좁아서가 아니다. 이 과제에서 필요한 것이 좁은 시야이고, 넓히는 데 쓴 것은 어디서 빼 온 것이기 때문이다.

7편의 그 대목은 고쳐 두었다.

남는 것

여기서 비교한 것은 전부 1200걸음까지다. 다섯 설정이 모두 300~900걸음에서 바닥을 찍으므로 문제는 없지만, 더 긴 학습에서 순서가 그대로인지는 안 봤다.

그리고 “넓히면 나빠진다” 는 이 코퍼스, 이 과제 이야기다. 앞쪽 글자가 실제로 필요한 일 - 괄호 맞추기, 긴 복사 - 이라면 정반대일 것이다. 8편에서 재귀 쪽으로 같은 얘기를 한 번 더 한다.

팽창 조합도 1-2-4-81-2-4-8-16 둘만 봤다. 1-1-2-2 처럼 가까운 데를 남기면서 조금만 벌리는 조합은 안 재 봤다.

그래서

  • 수용장은 1 + Σ d·(k-1) 이고, 밖의 글자를 바꿔도 출력이 정확히 0 만큼 달라지는 것으로 확인된다. 다섯 설정 다 식과 일치
  • 넓힐수록 나빠진다. 171.8709 에서 1251.9967 까지
  • 층·커널로 넓히면 채널을 깎아야 하니 그럴 만하다. 그런데 팽창은 공짜인데도 1.8709 에서 1.9716 으로 나빠진다. 시드 범위가 안 겹친다
  • 팽창은 경로를 안 늘린다. 625 개를 17자에 뿌리던 것을 61자에 뿌릴 뿐이고, 가까운 4자의 몫이 11.2% 에서 1.6% 로 준다
  • 바로 앞 글자로 가는 경로가 4 개에서 1 개가 된다. 1편의 “기억은 네 자 남짓” 이 중요한 자리인데 거기서 계산을 빼 간다
  • 수용장이 같아도 만드는 법이 다르면 결과가 다르다. 33 자를 층으로 만들면 1.9346, 커널로 만들면 2.0621
  • 7편의 “예산이 아니라 시야에서 진다” 는 틀렸다. 고쳤다

Comments