저번 포스팅에서는 인공신경망이란 거대한 함수와 같다는 것을 설명했습니다.
이번 포스팅에서는 컴퓨터가 그 거대한 함수가 우리가 원하는 함수가 되도록 만드는 지에 대한 기법과 과정을 살펴보도록 하겠습니다.
우선, 거대한 함수의 입력값과 그에 따른 우리가 원하는 출력값을 정해주어야 합니다. 이전 포스팅의 예시를 이어서 가져오면, 함수의 입력값은 이미지, 출력값은 0~9 사이의 숫자가 될 것입니다.
즉, 왼쪽 그림과 같은 쌍으로 이미지를 만들어서 컴퓨터가 학습해야 할 정답을 알려주는 것입니다. 출력에 해당하는 정답들을 라벨(label)이라 하고, 학습에 필요한 정답이 있는 데이터를 labeled data, labeled data로 학습시키는 것을 지도학습(supervised learning)이라고 합니다.
가지고 있는 모든 데이터에 대하여 모두 라벨을 붙여주고, 입력값에 대한 출력값을 얼마나 잘 맞췄는지 평가하게 됩니다.
평가의 기준이 되는 것이 손실함수(loss function or cost function)입니다.
평가 하기 전에, 데이터셋을 세개로 나눠주어야 합니다: 훈련 데이터셋(train dataset), 평가 데이터셋(validation dataset), 테스트 데이터셋(test dataset). 인공신경망의 성능이 좋더라도, 이것이 우리가 학습한 데이터에 대해서만 성능이 좋은 것인지 혹은 다른 데이터에 대해서도 정답을 잘 맞출 수 있을 것인지 확인하기 위한 과정입니다. 이를 나눌 때, sklearn에서 제공하는 train_test_data_split을 쓰면 편리합니다.
손실함수란, 모델이 우리가 원하는 방향으로 가도록 설정해 주는 것입니다. 그림 1의 예시는 아래 그림 같은 출력값이 나오게 해야 할 것입니다.
마지막 레이어의 뉴런들을 벡터로 나타내면 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ] 이 정답입니다. 하지만, 784개의 픽셀값에 13,002개의 가중치와 편향을 계산한 값이 [ 0.0, 0.2, 0.0, 0.1, 0.0, 0.1, 0.2, 0.1, 0.0, 0.3 ] 이 나왔다고 해봅시다.
이 경우에, 모델은 6을 9라고 분류하게 됩니다. 정답 벡터와 예측 벡터의 각 원소별로 차이로 모델이 얼마나 틀렸는지 측정할 수 있게 됩니다. 각 자리의 차이의 제곱의 평균을 구하면, 이 모델은 [(0.2)^2+(0.1)^2+(0.1)^2+(1-0.2)^2+(0.1)^2+(0.3)^2]/10 = 0.08만큼 실수했다고 할 수 있습니다. 이 신경망은 손실값이 0.0에 가까워지도록 가중치와 편향값을 조절해야 할 것입니다.
이런 식으로, 모델이 얼마나 실수했는 지를 정해주는 것이 손실함수(loss function)이고, 위에서 사용한 편차 제곱의 평균은 범용되는 손실 함수 중 하나인 MSE입니다.
즉, 신경망이 손실함수의 출력인 loss를 줄이는 방향으로 Weights & Bias를 조절하도록 해야 합니다.
이를 조절하는 알고리즘이 오차역전파(Backpropagation)입니다.
❖ 본 포스팅에 나오는 그림은 3Blue1Brown 채널의 그림을 이해를 목적으로 사용 또는 편집하였습니다.
https://www.youtube.com/watch?v=IHZwWFHWa-w&list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi&index=2&t=144s
'머신러닝' 카테고리의 다른 글
인공신경망(Artificial Neural Network)에 관하여 (0) | 2021.08.05 |
---|