얼릴 층과 훈련할 층
가중치 1억 2,400만 개를 전부 다시 고쳐야 할까요?
얼린다는 것
고치지 않을 곳은 잠급니다
훈련은 가중치를 조금씩 고치는 일입니다. 잠근 층의 가중치는 훈련해도 바뀌지 않습니다. 이것을 층을 얼린다고 합니다.
가중치는 모델 안에 든 숫자이고, 파라미터라고도 부릅니다. 그림의 숫자는 예시 값입니다.
첫째
먼저 전부 얼립니다
전부 얼린 다음 출력 층을 새것으로 바꿉니다. 새로 만든 층은 풀린 채로 들어옵니다. 이대로 훈련하면 새 출력 층만 고쳐집니다.
둘째
뒤쪽 두 곳을 더 풉니다
마지막 트랜스포머 블록과 그 위의 층 정규화입니다. 이 둘을 함께 훈련하면 출력 층만 훈련할 때보다 눈에 띄게 잘 맞힙니다.
왜 뒤쪽인가
앞쪽은 기본기, 뒤쪽은 맡은 일
글이 들어오는 쪽의 층은 어느 글에나 통하는 언어의 기본을 잡아냅니다. 그래서 스팸을 가려낼 때에도 그대로 쓸 수 있습니다.
세어 보면
전체의 5.7%만 훈련합니다
1억 2,444만 개 가운데 709만 개입니다. 고칠 가중치가 적으니 계산이 줄고 훈련이 빨라집니다.
7강에서 센 1억 6,300만 개보다 적은 것은, 출력 층의 큰 표(약 3,860만 개)를 떼고 작은 층을 달았기 때문입니다.
코드로는
스위치 하나입니다
층마다 '훈련할 때 고칠 것인가'를 켜고 끕니다. 전부 끈 다음 세 곳만 다시 켰습니다.
param은 층에 든 가중치를 가리키는 이름이고, requires_grad는 '고칠 방향을 계산해 둘 것인가'라는 설정입니다. False는 끔, True는 켬입니다.
다음 편