밑바닥부터 시작하는 딥러닝 1 - 미니배치, 수치 미분, 경사 하강법
사람에게는 정확도가 가장 직관적이다. 100개 중 90개를 맞히면 90%라고 말하면 된다. 그런데 신경망 학습에서는 정확도보다 손실 함수를 더 중요하게 쓴다.
이유는 미분 때문이다. 신경망은 매개변수를 어느 방향으로 바꿔야 좋아지는지 알아야 하고, 그 단서를 손실 함수의 변화에서 얻는다.
이번 글에서 잡을 것
- 미니배치는 전체 데이터 중 일부를 뽑아 학습하는 방식이다.
- 정확도는 값이 뚝뚝 끊겨 미분 단서로 쓰기 어렵다.
- 손실 함수는 연속적으로 변해서 매개변수 조정 방향을 알려준다.
- 기울기는 각 매개변수를 어느 방향으로 바꿔야 손실이 줄어드는지 알려준다.
미니배치는 표본 조사다
훈련 데이터가 6만 장이라면 매번 전체 데이터를 모두 채점하는 것은 비효율적이다. 그래서 무작위로 100장 정도를 뽑아 전체의 대표처럼 사용한다. 이것이 미니배치다.
왜 정확도는 학습 지표로 불리한가
정확도는 매개변수를 조금 바꿔도 그대로인 경우가 많다. 32%가 32.001%처럼 매끄럽게 변하지 않고, 어느 순간 33%처럼 점프한다. 이러면 대부분의 위치에서 기울기가 0처럼 보여 학습 방향을 잡기 어렵다.
정확도
직관적이지만 변화가 불연속적이다.
손실 함수
조금 바꾸면 값도 조금 변한다.
학습
연속적인 변화가 있어야 미분으로 방향을 잡을 수 있다.
수치 미분은 작은 변화로 기울기를 구한다
수치 미분은 매개변수를 아주 조금 바꿔보고 함수값이 얼마나 변했는지 계산한다. 다만 너무 작은 값은 컴퓨터가 0으로 뭉갤 수 있으므로 보통 `1e-4` 정도를 사용한다.
def numerical_diff(f, x):
h = 1e-4
return (f(x + h) - f(x - h)) / (2 * h)
중심 차분
`x+h`와 `x-h` 양쪽을 사용하면 한쪽만 보는 전방 차분보다 오차를 줄일 수 있다.
기울기와 경사 하강법
변수가 여러 개라면 각 변수에 대해 편미분을 구하고, 그 값들을 묶어 기울기라고 부른다. 경사 하강법은 이 기울기를 단서로 손실 함수가 줄어드는 방향으로 조금씩 이동하는 방법이다.
정확도가 왜 뚝뚝 끊기는지
예를 들어 100개 중 32개를 맞힌 모델이 있다고 하자. 가중치를 아주 조금 바꿔도 맞힌 개수가 그대로 32개라면 정확도는 계속 32%다. 어느 순간 한 문제가 더 맞으면 33%로 점프한다. 이 점프형 변화는 미분으로 방향을 잡기 어렵다.
| 매개변수 변화 | 맞힌 개수 | 정확도 | 학습 단서 |
|---|---|---|---|
| 아주 조금 변경 | 32개 | 32% | 변화 없음 |
| 조금 더 변경 | 32개 | 32% | 여전히 변화 없음 |
| 경계 통과 | 33개 | 33% | 갑자기 점프 |
수치 미분 예시 하나
책에서 사용하는 예처럼 `f(x)=0.01x^2+0.1x`를 보면 수치 미분이 실제 미분값에 가까운 값을 내는 것을 확인할 수 있다.
| x | 수치 미분 결과 | 해석적 미분 0.02x+0.1 |
|---|---|---|
| 5 | 약 0.2 | 0.2 |
| 10 | 약 0.3 | 0.3 |
학습에서의 의미
이 작은 기울기 값이 매개변수를 어느 방향으로 움직여야 손실이 줄어드는지 알려주는 나침반 역할을 한다.
def f(x):
return 0.01*x*x + 0.1*x
def numerical_diff(f, x):
h = 1e-4
return (f(x+h) - f(x-h)) / (2*h)
print(numerical_diff(f, 5))
print(numerical_diff(f, 10))
예상 출력
0.199999999999...
0.299999999999...
스스로 점검
- 미니배치를 여론조사에 비유할 수 있는 이유를 설명할 수 있는가?
- 정확도가 미분 지표로 불리한 이유를 말할 수 있는가?
- 학습률이 너무 크거나 작으면 어떤 문제가 생기는지 설명할 수 있는가?
이번 글에서 기억할 것
- 미니배치는 전체 데이터 중 일부를 뽑아 학습하는 방식이다.
- 정확도는 값이 뚝뚝 끊겨 미분 단서로 쓰기 어렵다.
- 손실 함수는 연속적으로 변해서 매개변수 조정 방향을 알려준다.
- 기울기는 각 매개변수를 어느 방향으로 바꿔야 손실이 줄어드는지 알려준다.
다음 글로 이어지는 질문
다음 글에서는 이 재료들이 실제 학습 루프 안에서 어떻게 조립되는지 본다.
한 줄 정리: 신경망은 정확도를 바로 높이는 것이 아니라, 미분 가능한 손실을 줄이는 방향으로 조금씩 매개변수를 바꾼다.