얼릴 층과 훈련할 층

가중치 1억 2,400만 개를 전부 다시 고쳐야 할까요?

얼린다는 것

고치지 않을 곳은 잠급니다

훈련은 가중치를 조금씩 고치는 일입니다. 잠근 층의 가중치는 훈련해도 바뀌지 않습니다. 이것을 층을 얼린다고 합니다.

가중치는 모델 안에 든 숫자이고, 파라미터라고도 부릅니다. 그림의 숫자는 예시 값입니다.

첫째

먼저 전부 얼립니다

전부 얼린 다음 출력 층을 새것으로 바꿉니다. 새로 만든 층은 풀린 채로 들어옵니다. 이대로 훈련하면 새 출력 층만 고쳐집니다.

둘째

뒤쪽 두 곳을 더 풉니다

마지막 트랜스포머 블록과 그 위의 층 정규화입니다. 이 둘을 함께 훈련하면 출력 층만 훈련할 때보다 눈에 띄게 잘 맞힙니다.

왜 뒤쪽인가

앞쪽은 기본기, 뒤쪽은 맡은 일

글이 들어오는 쪽의 층은 어느 글에나 통하는 언어의 기본을 잡아냅니다. 그래서 스팸을 가려낼 때에도 그대로 쓸 수 있습니다.

세어 보면

전체의 5.7%만 훈련합니다

1억 2,444만 개 가운데 709만 개입니다. 고칠 가중치가 적으니 계산이 줄고 훈련이 빨라집니다.

7강에서 센 1억 6,300만 개보다 적은 것은, 출력 층의 큰 표(약 3,860만 개)를 떼고 작은 층을 달았기 때문입니다.

코드로는

스위치 하나입니다

층마다 '훈련할 때 고칠 것인가'를 켜고 끕니다. 전부 끈 다음 세 곳만 다시 켰습니다.

param은 층에 든 가중치를 가리키는 이름이고, requires_grad는 '고칠 방향을 계산해 둘 것인가'라는 설정입니다. False는 끔, True는 켬입니다.

다음 편

훈련하기 전에, 잘하는지 재는 법부터 정합니다

5편몇 통이나 맞혔을까? 11강 목록