이번 포스팅에서는 신경망 학습에 관련한 내용을 다룰 것이다. 학습이란 훈련 데이터를 이용하여 매개변수인 가중치의 최적값을 자동으로 구하는 것을 의미한다. 신경망이 학습할 때 손실 함수(Loss function)를 지표로 하는데, 손실 함수의 결과값을 가장 작게하는 가중치를 구하는 것이 학습하는 것의 목표이다.
기존에는 데이터가 주어지면 사람이 모든 규칙을 만들거나 특징을 설계하였지만, 신경망은 데이터로부터 스스로 학습하여 규칙을 찾아낸다.
딥러닝을 종단간 기계학습(end-to-end learning)이라고도 한다. '처음부터 끝까지'라는 의미로, 데이터 입력에서 결과 출력까지 사람의 개입없이 얻는다는 것을 뜻한다.
1. 훈련 데이터와 시험 데이터
Machine Learning은 훈련 데이터(training data)와 시험 데이터(test data)로 나눠 학습과 실험을 수행한다. 훈련 데이터를 통해 학습하며 최적의 매개변수를 찾고, 그 후 시험 데이터를 통해 모델의 성능을 평가한다.
시험 데이터를 사용하는 이유는 범용 능력을 평가하기 위함인데, 훈련 데이터에 대해서만 올바르게 문제를 해결하고, 처음 접하는 데이터에 대해서는 문제가 있을 수 있기 때문이다. 이렇게 한 데이터셋에만 지나치게 최적화된 상태를 오버피팅(overfitting)이라 한다. 오버피팅을 피하는 것은 Machine Learning의 중요한 과제 중 하나이다.
2. 손실 함수
신경망에서 최적의 매개변수 값을 찾기 위한 지표는 손실 함수가 사용된다. 일반적으로는 손실함수로 오차제곱합과 교차 엔트로피 오차를 사용한다.
3. 오차제곱합(sum of squares for error, SSE)
이전 포스팅의 MNIST 손글씨 숫자 인식에서 추정 값과 정답 레이블의 예를 들면 다음과 같다.
y는 신경망의 출력층 결과인 소프트맥스 함수의 출력이고, t는 원-핫 인코딩으로 표현된 정답 레이블이다.
오차제곱합은 각 원소의 추정 값과 정답 레이블의 차를 제곱하여 총합을 구한 값이다. 이를 구현하면 다음과 같다.
y와 t값을 오차제곱합 식에 적용하면 다음과 같다.
오차제곱합이 더 작은 y가(첫 번째 결과) 정답에 가까운 추정 값이 된다.
4. 교차 엔트로피 오차(cross entropy error, CEE)
교차 엔트로피 오차의 수식에서 log는 밑이 e인 자연로그이다. t는 원-핫 인코딩으로 표현된 정답 레이블이므로, 결국 실제로 정답일 때 (t=1)의 softmax 추정 값에 대한 자연로그를 계산하는 식이 된다. 예를 들어, 정답 레이블이 2이고, 신경망의 softmax 출력 값이 0.6이면 교차 엔트로피 오차는 -log0.6=0.51이 된다. 같은 조건에서 신경망의 출력 값이 0.1이면 -log0.1=2.30이 된다. 결론적으로, 교차 엔트로피 오차는 정답일 때의 신경망 출력 값이 전체 값이 된다.
x=1일 때 y=0이고, x가 0에 가까워 질수록 y는 작아진다. 이것을 교차 엔트로피 오차의 수식에 적용하여 마이너스를 붙이면 반대가 된다. 즉, 예측 값이 커질수록 오차는0에 가까워지고, 예측 값이 작아질수록 오차는 오차는 커진다.
위의 교차 엔트로피 함수의 return값을 보면, 예측 값 y에 아주 작은 값 delta를 더한 것을 볼 수 있다. 이는 np.log( ) 함수에 0을 입력하면 마이너스 무한대를 뜻하는 -inf가 되므로 이러한 문제를 보완하기 위해 아주 작은 값을 더한 것이다.
오차제곱합의 결과와 마찬가지로 교차 엔트로피 오차가 더 작은 y가(첫 번째 결과) 정답에 가까운 추정 값이 된다.
5. 미니배치 학습
손실 함수는 훈련 데이터가 100개가 있으면, 그 100개의 손실 함수 값들의 합으로 이루어진다. 즉, 손실 함수는 모든 훈련 데이터를 대상으로 구해야 한다. 위에서는 데이터 1개에 대한 손실 함수를 고려하였고, 이제는 모든 데이터에 대한 손실 함수를 구할 것이다.
하지만, 데이터 개수가 매우 많으면 모든 데이터을 학습하는 데 오랜 시간이 걸린다. 따라서 전체 데이터에서 일부를 랜덤으로 선별하여 근사치 값을 구한다. 선별된 일부 데이터를 미니배치(mini-batch)라 한다. 예를 들어, 손글씨 숫자 인식 문제에서 60,000개의 훈련 데이터 중 100개를 무작위로 뽑아 학습하는 것이다. 이를 미니배치 학습이라 한다.
무작위로 추출한 이 인덱스를 사용하여 미니배치를 뽑아내어 손실 함수를 계산하면 된다.
6. 배치용 교차 엔트로피 구현
아래는 정답 레이블이 one-hot encoding이 아니라 '2'와 같은 숫자 레이블로 주어진 경우의 교차 엔트로피 오차를 구현하는 방법이다.
7. 손실 함수를 설정하는 이유
적절한 매개변수를 찾기위한 지표로 왜 '정확도'를 사용하지 않고, '손실 함수'를 설정할까?
그 이유는 신경망 학습에서의 '미분' 역할에 있다.
신경망 학습에서 최적의 매개변수를 탐색할 때, 매개변수에 대해 미분(기울기)을 계산하고 미분 값을 갱신하는 과정을 반복함으로써 손실 함수의 값을 가능한 작게 하는 매개변수를 찾는다. 미분 값이 양수이면 매개변수를 음의 방향으로 갱신하고, 음수이면 양의 방향으로 갱신한다. 얼만큼 갱신하는지 등의 구체적인 것은 다음 포스팅에서 작성할 것이다.
반면, 정확도를 지표로 삼으면 대부분의 미분 값이 0이 이므로 갱신할 수 없다. 예를 들어, 100장의 데이터 중 30장을 제대로 인식한다고 가정하면, 정확도는 30%이다. 이때 매개변수 값을 미세하게만 조정한다면 정확도가 개선되지 않고 일정할 것이다. 왜냐하면 30%, 31%, 32%와 같이 불연속적으로 개선되고 30.0133%와 같이 조정되지는 않기 때문이다. 즉, 손실함수는 매개변수의 값이 조금 변하면 그에 연속적인 값으로 반응하지만, 정확도는 거의 반응을 보이지 않는다. 이러한 성질은 계단 함수를 사용하지 않는 이유와도 일맥상통한다.
★신경망 학습에서는 기울기가 0이 되지 않는 덕분에 올바르게 학습할 수 있으며, 이것은 아주 중요한 성질이다.
출처: 사이토 고키, 『밑바닥부터 시작하는 딥러닝』, 한빛미디어(2017), p107-120.
'AI > 밑딥' 카테고리의 다른 글
딥러닝) 기울기 , 경사하강법 , gradient descent , learning rate (0) | 2021.02.27 |
---|---|
딥러닝) 수치 미분 , 해석적 미분 , 편미분 (0) | 2021.02.25 |
딥러닝) 손글씨 숫자 인식 MNIST 신경망 , 배치 batch 처리 (0) | 2021.02.18 |
딥러닝) 소프트맥스 함수로 출력층 설계 (0) | 2021.02.14 |
딥러닝) 다차원 배열, 신경망 구현 (0) | 2021.02.13 |
댓글