[딥러닝]/[밑바닥부터 시작하는 딥러닝]

밑바닥부터 시작하는 딥러닝 1 - 4 신경망 학습

딥러닝 도전기 2021. 6. 26. 02:07
신경망 학습이란 훈련 데이터로부터 가중치 매개변수의 최적값을
자동으로 획득하는 것을 뜻합니다.

기계학습 문제는 데이터를 훈련 데이터와 시험 데이터로 나누어 학습과 실험을 수행합니다.

이는 과적합(overfitting)을피하기 위함입니다.

 

과적합이란 우리가 학습시킨 데이터가 어느 특정한 데이터에 대해서만 적절한 매개변수를 찾은 경우를 의미합니다.

이런 과적합 상태에서는 범용적으로 사용할 수 없기 때문에 올바르게 학습시키지 못한 것 입니다.

 

손실함수

손실함수란 신경망 성능의 "나쁨" 상태를 나타내는 지표로, 현재 신경망이 훈련 데이터를 얼마나 잘 처리하지 못하는지를 나타냅니다.

손실함수는 일반적으로 오차제곱합과 교차 엔트로피 오차를 사용합니다.

  • 오차제곱합(sum of squared for error, SSE)

$E = \frac{1}{2}\Sigma_k{(y_k-t_k)^2}$

$y_k$ : 신경망의 출력 (신경망이 추정한 값)

$t_k$ : 정답 레이블

$k$   : 데이터의 차원 수

 

  • 교차 엔트로피 오차(cross entropy error, CEE)

$E = -\Sigma_k{t_k}\ln{y_k}$

$y_k$ : 신경망의 출력

$t_k$ : 정답 레이블


 

미니배치

엄청나게 많은 데이터를 모두 사용하여 일일이 손실함수를 계산하는 것은 현실적이지 않습니다.

이 문제를 해결하기 위해 많은 데이터 중 일부만을 사용하여 손실함수를 계산하는 미니배치 학습방법을 사용합니다.

from dataset.mnist import load_mnist

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)

print(x_train.shape) #(60000, 784)
print(t_train.shape) #(60000, )
print(x_test.shape)  #(10000, 784)
print(t_test.shape)  #(10000, )

위 코드에서 MNIST 데이터를 읽은 결과 훈련 데이터는 60000개 이고, 입력 데이터는 784(28*28)열입니다.

 

train_size = x_train.shape[0]
batch_size = 10
batch_mask = np.random.choice(train_size, batch_size)
x_batch = x_train[batch_mask]
t_batch = t_train[batch_mask]

np.random.choice()를 사용하여 이 훈련 데이터 중 10장을 무작위로 뽑는 작업입니다. 여기에서는 batch size 를 10으로 정하고 mini batch를 생성한 것 입니다.


손실 함수를 사용하는 이유

신경망을 학습할 때 정확도를 지표로 삼아서는 안 된다. 정확도를 지표로 하면 매개변수의 미분이 대부분의 장소에서 0이 되기 때문이다.

최적의 매개변수를 구하기 위해서는 미분을 이용하여 손실 함수의 값을 가능한 한 작게 하는 매개변수 값을 찾습니다.

하지만 정확도는 미분 값이 대부분의 장소에서 0이 되어 매개변수를 갱신할 수 없습니다.

이러한 이유로 손실 함수를 사용합니다.

 

 

반응형