자주 하는 실수와 요약
자주 하는 실수
| 실수 | 나온 문제 | 바로잡는 법 |
|---|---|---|
| 꺾인 점에도 「한 단위 더」의 값이 하나 있다고 봄 | 1 | 꺾인 점에서는 왼쪽과 오른쪽 기울기가 다르다. 어느 쪽으로 움직이는지 알아야 값이 정해진다 |
| 식에 절댓값이 있으면 미분 가능하지 않다고 봄 | 2 | 직선 어림의 오차가 움직인 거리보다 빨리 줄어드는지 숫자로 확인한다. x|x| 는 0에서 미분 가능하다 |
| 미분 가능하지 않은 모양은 꺾임 하나뿐이라고 봄 | 2 | 양쪽 할선의 기울기가 끝없이 커지는 수직 벽(√|x|)도 있다 |
| 꺾인 점의 미분값은 어느 것을 골라도 학습에 상관없다고 봄 | 3 | 입력이 정확히 0에 놓이면(모두 0으로 초기화, 자릿수가 모자란 계산) 약속 하나가 학습을 멈추게 할 수 있다 |
| 가장 높은 곳을 향하는 방향이 가장 가파른 오르막이라고 봄 | 4 | 가장 가파른 방향은 그래디언트 방향이고, 등고선에 수직이다. 등고선이 길쭉하면 꼭대기 방향과 다르다 |
| 방향이 무한히 많으니 두 방향만 재서는 나머지를 모른다고 봄 | 5 | 미분 가능하면 방향 미분이 방향에 대한 일차식이라 두 방향으로 그래디언트가 정해진다 |
| 원뿔 꼭짓점에서도 두 방향으로 그래디언트를 정할 수 있다고 봄 | 5 | 미분 가능하지 않은 점에서는 방향 미분이 일차식이 아니다. 반대 방향의 방향 미분이 부호만 바뀌는지 본다 |
| 1차 어림이 실제 줄어듦과 다르면 그래디언트 계산이 틀렸다고 봄 | 6 | 평면 어림은 움직임이 작을수록 맞는다. 유한한 스텝에서는 휜 만큼 어긋난다 |
| 소프트맥스의 자코비안이 대각 행렬이라고 봄 | 9 | 분모에 모든 로짓이 들어 있어 대각선 밖도 0이 아니다. diag(p) − ppᵀ |
| 변화율을 이을 때 더한다고 봄 | 10 | 이어지는 변화율은 곱한다. 단위가 약분되는지 본다 |
| 뒤 함수의 미분을 입력 점에서 잼 | 11 | 뒤 함수 f의 미분은 앞 함수 g를 지난 자리 g(p)에서 잰다 |
| 정사각 자코비안이면 전치하지 않고 곱해도 된다고 봄 | 11 | 그래디언트에는 Jᵀ 를 곱한다. 입력과 출력 수가 다른 경우로 줄과 칸을 맞춰 본다 |
| 전체 자코비안을 먼저 만드는 것이 낫다고 봄 | 12 | 출력이 숫자 하나면 그 쪽의 가로줄부터 곱해 나가는 것이 층마다 n² 번으로 훨씬 싸다 |
요약
이 장에서 한 일을 정리해 보자. 한 점에서 함수를 직선 하나로 어림했을 때 그 오차가 움직인 거리보다 빨리 0으로 줄어들면 미분 가능하다. 확대할수록 곡선이 직선과 구별되지 않는다는 뜻이다. 19세기 초까지는 연속이면 거의 어디서나 미분할 수 있다고 믿었지만, 1872년 바이어슈트라스가 어디서도 미분할 수 없는 연속 함수를 보였다. ReLU는 0에서 꺾여 미분 가능하지 않고, 자동 미분 라이브러리는 꺾인 점에 약속한 값 하나(파이토치는 0)를 돌려준다. 그 약속은 입력이 정확히 0에 놓일 때만 결과를 바꾸지만, 32비트 계산에서는 그런 일이 생각보다 자주 생긴다는 보고가 있다.
변수가 여럿이면 편미분을 모은 벡터가 그래디언트 ∇f다. 미분 가능한 점에서는 어느 방향 e의 방향 미분도 ∇f · e로 정해지므로, 그래디언트 방향이 가장 가파른 오르막이고 그 방향의 방향 미분값은 |∇f|다. 그래디언트는 등고선에 수직이고, 등고선이 길쭉하면 꼭대기를 곧장 가리키지 않는다. 기호 ∇는 해밀턴의 누운 삼각형에서 시작해 테이트가 굳혔고, 하프에서 온 이름 「나블라」가 붙었다. 신경망에서 그래디언트의 칸 수는 파라미터 수와 같다.
출력이 여럿이면 출력마다의 그래디언트를 한 줄씩 쌓은 자코비안 J가 미분이다. J는 입력의 작은 움직임을 출력의 움직임으로 옮기고, 작은 네모를 평행사변형으로 바꾸며, 그 넓이 배율인 행렬식이 0이면 출력들이 서로 기대어 움직인다. 야코비가 1841년에 이 행렬식을 정리했고 실베스터가 그 이름을 붙였다. tanh 층의 자코비안은 diag(1 − h²)W, 소프트맥스의 자코비안은 diag(p) − ppᵀ다.
합성 함수의 자코비안은 합성에 들어간 함수마다의 자코비안을 그 함수가 받는 입력 자리에서 재어 차례로 곱한 것이다. 이 규칙이 연쇄법칙이고, 그래디언트로 적으면 앞 함수 자코비안의 전치를 곱한다. 넓이 배율도 곱해지며, 신경망 전체의 자코비안은 층 자코비안들의 곱이다. 손실이 숫자 하나일 때는 손실 쪽의 가로줄부터 곱해 나가는 편이 자코비안 행렬을 만드는 것보다 훨씬 싸기 때문에, 파이토치는 「벡터와 자코비안의 곱」만 계산한다.
막힌 곳
이 장은 미분을 직선, 평면, 평행사변형 같은 일차 어림으로만 보았는데, 일차 어림은 움직임이 작을 때만 맞았다. 한 샘플의 로지스틱 회귀에서도 학습률 0.1의 한 스텝은 1차 어림이 말한 0.125만큼이 아니라 0.1172만큼만 손실을 줄였다. 2차 미분(그래디언트가 자리에 따라 바뀌는 정도)까지 넣어 어림하면 얼마나 더 정확해질까? 그리고 2차 미분을 알면 한 스텝을 얼마나 멀리 내디뎌도 되는지 미리 말할 수 있을까?
연쇄법칙은 층마다의 자코비안을 곱하라고 했다. tanh가 1 가까이 차오르면 그 출력에 해당하는 자코비안의 줄이 0.19배로 작아지는 것도 보았다. 층이 수십 개면 그런 배율이 수십 번 곱해질 텐데, 맨 앞 층에 닿는 그래디언트는 사라지지 않고 남아 있을까? 남게 하려면 무엇을 조심해야 할까?