Series · 13 parts
보이는 딥러닝
딥러닝 기초를 그림으로 다시 본다. 매 편이 눈에 안 보이던 것 하나 - 메모리 위의 텐서, 손실 지형 위의 한 걸음, 그래프를 거슬러 흐르는 미분 - 를 그려서 확인한다.
Assumed 파이썬과 NumPy 를 읽을 수 있으면 충분하다. 미적분은 필요한 만큼만 그 자리에서 짚는다.
- 01 텐서는 사실 1차원이다 reshape 은 왜 공짜이고 transpose 는 왜 데이터를 옮기지 않는가. 배열이 메모리에 어떻게 놓여 있는지 한 번 보고 나면, 나중에 만날 에러 메시지 절반이 미리 설명된다.
- 02 학습률에는 넘으면 안 되는 선이 있다 경사하강법이 손실 지형 위에서 걷는 걸음을 그려본다. 학습률을 올리다 보면 어느 순간 발산하는데, 그 경계는 감이 아니라 계산으로 나오는 값이다.
- 03 역전파는 장부다 노드 세 개짜리 그래프에서 미분을 손으로 따라가 보고, 수치미분과 대조한다. 역전파는 새로운 미분법이 아니라 곱한 값을 잊지 않고 적어두는 방법이다.
- 04 20층을 쌓으면 기울기가 사라진다 초기값을 0.01 로 두면 20층 뒤 활성은 1e-16 이 되고, 1.0 으로 두면 첫 층 기울기가 1e8 이 된다. 층마다 재서 그려 보면 초기화가 왜 하이퍼파라미터가 아니라 조건인지 보인다.
- 05 미니배치는 왜 더 시끄러운데 더 빨리 도착하나 전체 데이터로 정확한 한 걸음을 걷는 대신, 일부만 보고 부정확한 여러 걸음을 걷는다. 같은 데이터를 한 번 보는 동안 어느 쪽이 더 내려가는지 재 본다.
- 06 정규화는 초기값을 지운다 4편에서 초기값 세 개가 만든 20층의 결과는 1e-16 과 0.97 과 0.15 로 갈렸다. 층마다 정규화를 한 줄 넣으면 셋이 소수점 넷째 자리까지 같은 값이 된다. 그 대신 무엇을 내주는지도 재 본다.
- 07 훈련 오차를 0으로 만드는 법과 그 대가 점 18개에 17차 다항식을 맞추면 훈련 오차가 3e-17 이 된다. 완벽하게 맞혔다는 뜻이고, 같은 분포에서 새로 뽑은 점에서는 오차가 3.9e10 이 된다. 그 사이에 무슨 일이 있는지 차수를 하나씩 올려 가며 본다.
- 08 어텐션 가중치를 직접 꺼내 본다 어텐션은 가중평균인데, 그 가중치를 데이터가 정한다. 토큰 여섯 개로 행렬을 실제로 계산해 그려 보고, sqrt(d) 로 나누는 한 줄이 없으면 무슨 일이 벌어지는지 잰다.
- 09 위치 인코딩은 순서를 어떻게 집어넣나 8편에서 어텐션은 순서를 몰랐다. 위치를 그냥 숫자로 붙이면 왜 망가지는지, 사인파가 대신 무엇을 보장하는지, 그리고 흔히 말하는 '거리가 멀수록 덜 닮는다'가 왜 사실이 아닌지 재 본다.
- 10 머리를 여덟으로 쪼개면 무엇이 달라지나 파라미터 수가 똑같은데 왜 헤드를 나누나. 평균 하나로는 두 가지를 못 나른다는 것을 재고, 헤드 하나에 걸린 랭크 상한이 실제로 무엇을 막는지 - 그리고 내가 처음에 그걸 어떻게 잘못 읽었는지 - 본다.
- 11 파라미터의 3분의 2가 있는 층 트랜스포머 블록에서 어텐션이 아니라 피드포워드가 파라미터의 2/3 를 쓴다. 비선형을 빼면 4배 확장이 정확히 아무것도 사지 못한다는 것과, 폭이 실제로 무엇을 늘리는지 재 본다.
- 12 블록을 96개 쌓아 보면 무엇이 무너지나 잔차 연결과 정규화 위치 중 무엇이 깊이를 버티게 하나. 6층부터 96층까지 쌓아 가며 층별 기울기를 재면, 둘의 무게가 같지 않다는 것이 숫자로 나온다.
- 13 63만 개짜리로 글자를 예측해 본다 열두 편의 부품을 다 이어 붙여 실제로 돌린다. 손실이 왜 ln(어휘수) 에서 시작하는지, 인과 마스크를 빼면 무슨 일이 벌어지는지, 그리고 헤드 하나가 무엇을 배웠는지 꺼내 본다.