재귀와 합성곱 part 11 of 13

어디서부터 못 하나

guide / / 10 sections

10편은 복사 과제를 만들어 놓고 두 가지를 안 잰 채로 끝냈다. 복사 길이를 낮춰 가며 재귀가 어디서부터 되는지 보는 것, 그리고 5편이 만들어 둔 수용장 125 짜리 CNN 을 이 과제에 붙여 보는 것.

둘 다 했다. 그리고 재기 전에 예측을 하나 적어 두었는데 틀렸고, 틀린 이유로 세운 설명도 이어서 반증됐다.

거리만 바꾼다

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

이 과제에서 채점하는 자리는 전부 정확히 L 자 전을 되짚는다. 출력 자리 L + j 가 맞혀야 하는 것은 j 번째 글자이고, 그 글자는 입력 자리 j 에 있다. 거리는 (L + j) - j = Lj 와 무관하다. 그래서 L 을 바꾸는 것이 되짚는 거리를 바꾸는 것과 같다.

L4, 8, 16, 32, 60 으로 두고 다섯 구조를 각각 시드 2개로 돌렸다. 1000걸음, 100걸음마다 검증, 제일 좋았던 지점의 손실을 쓴다. 찍으면 ln(20) = 2.9957 이다.

복사 거리에 따른 최소 검증 손실 0 1 2 3 찍으면 2.9957 CNN RNN LSTM GRU 트랜스포머 수용장 125 CNN 평범한 4층 CNN 하나: 거리별 경로 수와 실제 결과 1 10 100 수용장 한계 0 4 8 12 16 복사 거리 (자) 풀었다 못 풀었다 안 쟀다
위: 복사 거리를 4에서 60까지 바꿔 가며 잰 최소 검증 손실. 아래: 같은 CNN 을 거리마다 따로 학습시킨 결과를 그 거리로 가는 경로 수 막대에 얹은 것. 수용장 한계는 16인데 실제로 푸는 것은 12까지고, 막대가 좌우 대칭이라 거리 3과 13, 2와 14 는 경로 수가 같은데 가까운 쪽만 풀린다.
             L=4       L=8       L=16      L=32      L=60
트랜스포머      0.0020    0.0021    0.0021    0.0021    0.0021
GRU          0.0036    0.1500    0.8320    1.7090    2.3369
LSTM         0.0058    0.1434    2.3183    2.9984    2.9980
RNN          0.0002    3.0029    3.0027    2.9984    2.9985
CNN          0.0006    0.0007    3.0003    2.9995    2.9988

절벽이 있는 것과 없는 것

RNN 은 4와 8 사이에서 끊긴다. 거리 4 에서 0.0002 로 완전히 푸는데 - 트랜스포머의 0.0020 보다 낮다 - 거리 8 에서 바로 3.0029 다. 그 사이에 중간값이 없다.

1편에서 재귀 상태의 기억이 네 자 남짓이라고 했다. 그때는 상태 섭동이 몇 걸음 만에 사라지는지를 쟀고, 여기서는 그 네 자가 할 수 있는 과제와 없는 과제의 경계로 나온다. 같은 숫자가 두 가지 방법으로 나왔다.

LSTM 은 한 칸 더 간다. 거리 8 에서 0.1434 로 되긴 되는데 완전하지는 않고, 16 에서 2.3183 으로 무너진다. 이 자리는 시드 폭이 1.9728~2.6639 로 넓다 - 무너지는 중이라 어느 시드는 조금 더 붙잡고 어느 시드는 놓는다. 32 부터는 둘 다 찍기다.

GRU 만 절벽이 없다. 0.0036, 0.1500, 0.8320, 1.7090, 2.3369 으로 거리가 두 배씩 늘 때마다 손실이 꾸준히 오르고, 60 에서도 찍기 아래다.

3편의 측정으로는 이걸 설명 못 한다. 거기서는 글자 예측으로 학습한 GRU 의 유닛별 반감기가 LSTM 보다 오히려 짧았다. 설명은 10편에 있다 - 같은 GRU 를 복사 과제로 학습시키면 갱신 게이트 중앙값이 0.405 에서 0.921 로, 반감기 중앙이 0.75 자에서 7.75 자로 간다. 붙잡는 길이는 구조가 정해 둔 값이 아니라 과제가 밀어 넣은 값이다. LSTM 이 같은 조정을 하는지는 안 쟀다.

트랜스포머는 평평하다. 다섯 값이 0.0020, 0.0021, 0.0021, 0.0021, 0.0021 이다. 폭이 0.0001 이고 이건 같은 거리 안에서 시드를 바꾼 폭과 같다. 거리 4 와 거리 60 이 이 구조에게는 구별되지 않는다.

예측이 틀렸다

CNN 에 대해서는 재기 전에 이렇게 적어 두었다. 5편에서 커널 5짜리 4층의 수용장을 1 + 4·4 = 17 자로 쟀으니, 거리 16 은 되고 거리 32 는 안 돼야 한다.

수용장 17 은 닿는 자리가 17개라는 뜻이고, 자리 번호로는 0 부터 16 까지다. 그러니 되짚을 수 있는 제일 먼 거리가 정확히 16 이다.

결과는 거리 8 에서 0.0007, 거리 16 에서 3.0003 이다. 예측은 틀렸다.

어디서 끊기는지 보려고 같은 CNN 을 거리 2, 3, 12, 13, 14, 15 에서도 같은 규약으로 돌렸다.

거리     2      3      4      8      12     13     14     15     16
경로    10     20     35     85     35     20     10      4      1
손실  0.0005 0.0005 0.0006 0.0007 0.0020 3.0009 3.0007 3.0001 3.0003

거리 12 까지 풀고 13 부터 못 푼다. 수용장은 16 까지 닿는데 실제로 쓰는 것은 12 까지고, 네 자가 남는다.

그리고 중간이 없다. 0.0020 아니면 3.00 이다. GRU 는 거리가 늘수록 기울어 졌는데 CNN 은 되거나 안 되거나다.

셀 수 있는 설명 하나

5편이 쓰던 도구가 있다. 출력에서 각 입력 자리로 가는 경로가 몇 개인지 세는 것이다. 위 표의 둘째 줄이 그것이고, 625 개가 종 모양으로 퍼져 있다. 거리 8 이 꼭대기로 85 개고 양 끝은 1 개씩이다.

거리 16 에 닿는 경로가 왜 하나뿐인지는 세면 나온다. 층마다 커널 탭을 0 에서 4 까지 고르고 네 층의 합이 16 이어야 하니 4+4+4+4 말고는 없다. 네 층이 전부 제일 왼쪽 탭을 골라야만 거리 16 에 닿는다.

그러면 끊기는 자리가 경로가 35 에서 20 으로 떨어지는 자리라는 것이 눈에 들어온다. 수용장이 아니라 경로 수가 한계를 정한다는 설명이 여기서 나온다.

그리고 이 설명은 틀렸다.

같은 경로 수, 반대 결과

경로 분포가 좌우 대칭이라는 것이 그대로 시험이 된다. 거리 3 은 거리 13 과 경로가 똑같이 20 개고, 거리 2 는 거리 14 와 똑같이 10 개다. 경로 수가 원인이면 짝지은 둘의 결과가 같아야 한다.

경로 수    가까운 쪽              먼 쪽
20개     거리 3   0.0005      거리 13  3.0009
10개     거리 2   0.0005      거리 14  3.0007

같은 경로 수인데 한쪽은 완전히 풀고 한쪽은 한 발도 못 움직인다. 같은 구조, 같은 파라미터, 같은 규약이다.

다른 구조에서도 같다. 5편의 팽창판 (커널 5, 5층, 팽창 1, 2, 4, 8, 16) 은 거리 4 로 가는 경로가 4 개뿐인데 0.0006 으로 푼다. 평범한 CNN 은 거리 15 로 가는 경로가 똑같이 4 개인데 3.0001 이다.

경로 수는 셀 수 있고 거리 16 이 왜 특이한지도 설명하지만, 어디서 끊기는지를 정하지는 않는다. 그럴듯하게 맞아떨어지는 숫자를 원인으로 읽은 것이다.

그럼 왜 12인가

모른다.

아는 것은 두 가지다. 수용장 17 은 상한이고 실제로는 12 에서 끊긴다는 것, 그리고 그 차이가 경로 수로 설명되지 않는다는 것.

123 x 4 라 “층 하나 몫이 안 쓰인다” 로 읽고 싶어지는데, 이건 방금 반증된 것과 같은 종류의 읽기다. 4층에서는 “층 하나 모자란다” 와 “상한의 75%” 가 같은 값이라 구별이 안 된다. 갈라 보려면 층 수를 바꿔야 한다 - 5편의 k5 x8 은 수용장이 33 (상한 32) 인데, 앞쪽 읽기는 28, 뒤쪽 읽기는 24 를 예측한다. 안 쟀다.

성긴 창이 여기서는 이긴다

수용장을 넓히면 실제로 멀리 간다는 것은 확인된다. 5편이 만들어 둔 팽창판은 최대 오프셋이 (1+2+4+8+16)·4 = 124 라 수용장이 125 다.

거리 60 에서 0.0010 이다. 완전히 푼다.

                   수용장   채널   파라미터    L=60 손실
평범한 4층            17    171   639,273     2.9988
팽창 1-2-4-8-16     125    153   635,763     0.0010

예산은 같다. 파라미터가 0.6% 차이고 둘 다 커널 5짜리다. 그러니 평범한 CNN 이 거리 13 에서 무너지는 것은 “CNN 이라 멀리 못 본다” 가 아니라 이 CNN 의 수용장이 좁아서다.

5편은 여전히 맞다

5편은 팽창을 두고 “넓히는 게 아니라 성기게 한다” 로 정리했고, 언어 모형에서는 같은 파라미터로 팽창을 준 쪽이 0.10 나빴다. 그 판단은 그대로 맞다.

여기서는 같은 성김이 유일하게 되는 이유다. 뒤집힌 것은 성김의 좋고 나쁨이 아니라 과제다.

  • 언어에서는 가까운 자리가 거의 전부라, 경로를 앞쪽 네댓 자에 몰아 주는 것이 이득이다. 팽창은 그 계산을 멀리 가져가니 손해다
  • 복사에서는 정확히 한 자리만 필요한데 그게 60 자 전이라, 거기까지 닿느냐가 전부다. 몰아 준 것은 아무 데도 안 쓰인다

성김은 좋은 것도 나쁜 것도 아니다. 계산을 어디에 놓느냐이고, 어디가 필요한 지는 과제가 정한다. 5편은 언어에서 쟀고 11편은 복사에서 쟀다.

남는 것

여기 표는 1000걸음이다. 10편은 3000걸음이었고 거기서 GRU 의 L=601.8966 이었는데 여기서는 2.3369 다. 두 숫자를 나란히 놓으면 안 된다. 이 표의 GRU 열은 “1000걸음 안에 어디까지” 이지 “끝까지 가면 어디까지” 가 아니다. 절벽이 있는 구조들은 걸음을 늘려도 안 움직일 것 같지만, 그건 안 잰 것이다.

팽창판이 어디서 끊기는지는 이 문맥에서 못 잰다. 과제가 2L + 1 자리를 쓰는데 문맥이 128 자라 L63 을 못 넘는다. 상한 124 의 절반쯤까지만 확인한 셈이다.

RNN 과 LSTM 의 절벽은 두 배씩 뛰는 격자에서만 봤다. CNN 은 한 자씩 좁혀서 1213 사이를 짚었는데 재귀 쪽은 48 사이, 816 사이로만 안다.

시드는 2개다. LSTM 의 L=16 처럼 무너지는 중인 자리는 폭이 0.69 나 된다. 절벽의 위치는 이 정도로도 보이지만 절벽 위의 은 아니다.

그래서

  • 복사 거리를 바꿔 가며 다섯 구조를 시드 2개씩, 1000걸음 한 규약으로 돌렸다. 찍으면 ln(20) = 2.9957 이다
  • RNN 은 4 에서 0.0002, 8 에서 3.0029 다. 절벽이 4와 8 사이고, 1편이 상태 섭동으로 쟀던 네 자가 여기서 과제 경계로 나온다
  • LSTM 은 8 까지 0.1434, 16 에서 2.3183 이다. 한 칸 더 간다
  • GRU 만 절벽이 없다. 60 에서도 2.3369 로 찍기 아래다. 3편이 아니라 10편이 설명한다 - 게이트가 붙잡는 길이는 과제가 밀어 넣는 값이다
  • 트랜스포머는 다섯 거리 전부 0.0020~0.0021 이다. 거리가 안 보인다
  • CNN 예측이 틀렸다. 수용장 17 이니 16 은 될 줄 알았는데 12 까지만 풀고 13 부터 3.0009 다. 상한보다 네 자 짧다
  • 경로 수로 설명하려다 반증됐다. 거리 313 은 경로가 똑같이 20 개인데 0.00053.0009 다. 경로 수는 어디서 끊기는지를 정하지 않는다
  • 12 인지는 못 밝혔다. 층 수를 바꿔서 갈라 볼 수 있는데 안 쟀다
  • 수용장 125 짜리 팽창 CNN 은 거리 600.0010 으로 푼다. 예산이 같으니, 평범한 CNN 이 무너지는 것은 CNN 이라서가 아니라 그 CNN 의 창이 좁아서다

Comments