훈련이 끝난 뒤 part 6 of 13

캐시를 자르면 맨 앞을 남겨야 한다

guide / / 5 sections

2편은 캐시가 가중치보다 커진 채로 끝났다. n=1024 에서 캐시 3.00 MB 대 가중치 2.43 MB, 실제 규모로는 4.0 GB 였다. 문맥이 길어질수록 이 값은 계속 자란다.

가장 단순한 해법은 버리는 것이다. 최근 W 개만 남기고 나머지를 지운다. 문제는 얼마나 망가지느냐다.

창만 남기면

13편 모델로, 자리 t[t-W+1, t] 만 볼 수 있게 막고 검증 손실을 잰다.

창 W    검증 손실
   4      2.7566
   8      2.4575
  16      2.2905
  32      2.1989
  64      2.0770
 전체     2.0272

W=16 이면 2.2905 다. 1편의 바이그램이 2.6501 이었으니 그보다는 낫지만, 전체 캐시의 2.0272 에서 많이 밀렸다.

맨 앞 몇 개를 같이 남기면

여기서 한 가지를 더 해 본다. 창에 더해 맨 앞 몇 자리를 항상 남긴다.

창 W=16 에 더해   검증 손실
안 남김            2.2905
앞 1개             2.2068
앞 2개             2.1631
앞 4개             2.1111
앞 8개             2.0905
앞 16개            2.1446

앞 8개를 남기면 2.0905 다. 전체 캐시가 2.0272 이니 차이가 0.063 이고, 저장하는 항목은 24 개로 128 개의 19% 다.

전체       항목 128    0.38 MB
창16+앞8   항목  24    0.07 MB

앞 16개를 남기면 오히려 2.1446 으로 나빠지는 것도 적어 둔다. 더 남긴다고 계속 좋아지지 않는다.

맨 앞이라서 좋은가, 그냥 네 개가 더 있어서 좋은가

이 질문을 안 하면 안 된다. 네 자리를 남긴 것이 좋았던 게 위치 때문인지 개수 때문인지 갈라야 한다.

창 W=16 에 더해        검증 손실
아무것도 안 남김        2.2905
맨 앞 4개 (0~3)        2.1111
중간 4개 (30~33)       2.2049
중간 4개 (60~63)       2.2759
창을 그냥 20으로       2.2655

맨 앞이라서 좋다. 같은 개수를 중간에서 남기면 2.2759 로 거의 효과가 없고, 창을 4 늘려 준 것도 2.2655 로 마찬가지다. 위치를 훑으면 이렇게 나온다.

2.0 2.1 2.2 2.3 0 4 16 32 96 남긴 블록의 시작 자리 검증 손실 아무것도 안 남김 2.2905 전체 캐시 2.0272 남긴 네 자리
창 16 에 더해 네 자리를 항상 남길 때, 그 네 자리를 어디에 두느냐에 따른 검증 손실. 맨 앞이 가장 좋고 뒤로 갈수록 나빠지며, 96 부터는 아무것도 안 남기는 것보다 못하다. 가로선 두 개는 아무것도 안 남겼을 때와 전체 캐시일 때다.
남긴 블록 시작   검증 손실
      0          2.1111
      1          2.1203
      4          2.1258
     16          2.1493
     32          2.2100
     60          2.2759
     96          2.2971

이른 자리일수록 좋고, 충분히 늦으면 아무것도 안 남기는 것보다 나쁘다 (2.29712.2905).

어텐션 질량으로는 설명이 안 된다

여기서 흔히 나오는 설명이 “어텐션 싱크” 다. 맨 앞 자리가 어텐션 질량을 크게 빨아들이니 그것을 버리면 안 된다는 이야기다. 재 보면 이 모델에는 그런 게 없다.

정상 동작에서 뒤쪽 자리들이 자리 0에 준 평균 질량은

블록 0   0.0035     같은 자리에서 균등이면 0.0108   비 0.3배
블록 1   0.0000                                   0.0배
블록 2   0.0000                                   0.0배

균등보다 적게 받는다. 자리 0은 이 모델에서 특별히 주목받는 자리가 아니다.

창을 씌운 상태에서 재도 마찬가지다.

뒤쪽 자리에서 그 네 개에 준 질량
맨 앞 (0~3)      0.0155
중간 (60~63)     0.0336

질량은 중간 쪽이 두 배 넘게 많은데 손실은 맨 앞 쪽이 훨씬 낫다. 즉 “많이 받는 자리를 남겨야 한다” 는 설명은 이 측정과 맞지 않는다.

그럼 왜 맨 앞이 좋은가. 모른다. 위치라는 것까지는 갈랐고 질량이 아니라는 것까지는 갈랐지만, 그 자리들이 무엇을 나르는지는 이 실험이 답하지 않는다. 그럴듯한 이야기를 붙일 수는 있지만 재지 않은 것을 적지는 않겠다.

이 모델에 싱크가 없다는 것도 큰 모델 이야기를 부정하지는 않는다. 어휘 100에 블록 3개, 6만 자로 5000걸음 돌린 모델이다. 큰 모델에서 보고되는 현상이 여기서 안 보이는 게 자연스럽고, 그래서 이 편의 결론은 이 모델에서 맨 앞이 값을 한다는 데까지다.

그래서

  • 캐시를 창으로 자르면 손실이 오른다. W=16 에서 2.2905, 전체는 2.0272
  • 창에 더해 맨 앞 여덟 자리를 남기면 2.0905 다. 항목 24 개로 128 개의 19%, 손실 차이는 0.063
  • 더 남긴다고 계속 좋아지지 않는다. 앞 16개는 2.1446 으로 뒤로 간다
  • 위치 때문이지 개수 때문이 아니다. 같은 네 개를 중간에서 남기면 2.2759, 창을 4 늘리면 2.2655
  • 어텐션 질량으로는 설명이 안 된다. 이 모델에는 싱크가 없고, 맨 앞 네 개가 받는 질량은 중간 네 개의 절반이다
  • 왜 그런지는 재지 않았다. 위치라는 것과 질량이 아니라는 것까지만 쟀다

다음 편에서는 아직 안 잰 시간 하나를 잰다. 지금까지 글자를 뽑는 값만 봤는데, 그 앞에 프롬프트를 읽는 단계가 있다.

Comments