[6/18] 인공신경망 구현: 모델 학습

해당 시리즈는 프로그래밍 언어 중 하나인 줄리아(Julia)로 딥러닝(Deep learning)을 구현하면서 원리를 설명합니다.


이전 글에서는 신경망이 작동하는 과정을 수학식을 사용하여 살펴보았다. 신경망은 입력값에 가중치를 곱하고 편향을 더한 후 활성화 함수를 거쳐 예측값을 도출한다. 즉, 가중치와 편향은 입력값에서 올바른 예측값을 제공하는데 중요한 변수라는 것이다. 그렇다면 해당 입력 데이터에 알맞는 가중치와 편향은 어떻게 찾을까? 이번 글에서는 가중치와 편향이 가지는 의미는 정확히 무엇이며, 적절한 가중치와 편향을 찾는 방법은 무엇인지를 살펴볼 것이다.

적절한 가중치와 편향

실제 신경망은 우리가 태어난 이후 경험한 데이터를 바탕으로 신경세포 안에 적절한 가중치와 편향을 셋팅한다. 그에 따라 입력값을 받으면 세포체에서 변환되어 신호를 다른 신경세포로 전달할지를 결정한다. 하지만 우리가 만든 인공신경망은 적절한 가중치와 편향이 존재하지 않는다. 그렇기에 인공신경망 모델을 구성할 때 가중치와 편향의 초기값을 랜덤으로 설정한다. 물론 그 랜덤 값은 대부분 적절한 가중치와 편향은 아니다. 결국 우리는 '인간'이 학습하는 것처럼 인공신경망도 학습해야 한다. 즉, 인공신경망은 매개 변수인 가중치와 편향의 적절한 값을 찾기 위해 학습해야 한다.

인공신경망 학습이란

처음 만들어진 인공신경망은 매개 변수인 가중치와 편향을 랜덤으로 설정했기 때문에 엉망이다. 즉, 바보와 같아서 예측을 제대로 하지 못한다. 따라서 적절한 가중치와 편향을 찾아주어야 한다. 이 과정을 신경망 학습이라고 한다. 신경망 학습은 학습데이터를 기반으로 진행된다. 학습데이터에는 입력값과 정답이 있다. 입력값을 투입했을 때, 가중치와 편향을 계산한 후 나온 예측값을 정답과 비교하여 신경망의 오류 정도를 파악한다. 지금까지 배웠던 블럭들을 조합해보면 다음과 같다.

  • 활성화 함수: 가중치와 편향을 추가한 입력값을 받아 신호를 전달할지 결정한다.

  • 손실 함수: 예측값과 정답의 오차를 나타낸다.

  • 편미분: 가중치와 편향을 기준으로 각각의 순간변화량(기울기)을 측정한다.

  • 경사하강법: 신경망 모델을 학습시키는 알고리즘으로서 가중치와 편향 갱신을 반복하는 과정을 거쳐 적절한 가중치와 편향을 찾는다.

인공신경망 학습 과정

인공신경망은 네트워크 그래프의 형식을 취한다. 네트워크 그래프란 요소인 노드(node)와 노드들의 관계를 나타내는 엣지(edge)로 구성하여 만든 그래프이다. 여기서 노드는 변화하는 주체를 의미하며, 엣지는 그 변화의 정도를 나타낸다. 인공신경망을 네트워크 그래프 관점에서 설명한다면 입력데이터와 은닉층의 중간값, 출력값은 모두 노드이며 데이터에 변화를 야기하는 가중치와 편향은 엣지이다. 네트워크 그래프로 도식화한 신경망은 아래와 같다.

신경망 구조

결국 우리가 학습을 통해 찾아야 하는 것은 엣지(edge)인 가중치와 편향의 값인 것을 확인할 수 있다. 지금부터 진행되는 학습 과정에 대한 설명은 경사하강법을 기반으로 한다.

학습 과정을 세분화하여 설명하기 위해 위의 인공신경망 도식을 바탕으로 설명하고자 한다. 먼저 위의 인공신경망은 2층 구조이며, 입력값은 \([x_1, x_2, x_3, x_4]\)로 총 4개이다. 또한 은닉층 \([h_1, h_2]\)을 거쳐 예측값 \([y_1, y_2, y_3]\)을 출력한다.

  1. 인공신경망 매개 변수 셋팅

위의 도식만 설정되면 가중치와 편향의 크기는 자동으로 결정된다. 먼저 입력층에서 은닉층으로 가는 1층 구간의 W1은 \(1 \times 4\)행렬인 입력값과 곱해서 \(1 \times 2\)행렬이 결과로 나와야 하기에 \(4 \times 2\)의 행렬이며, 편향은 \(1 \times 2\) 행렬이다. 은닉층과 출력층 사이의 2층 구간 W2 또한 이와 같은 원리로 자동 설정된다.

\[ X(1 \times 4) \cdot W1(4 \times 2) + B(1 \times 2) = H(1 \times 2)\]

  1. 인공신경망 계산

위 식의 결과를 활성화 값이라고 한다. 이 값을 활성화 함수의 입력값으로 투입하여 다음 층으로의 전달 여부를 결정한다. 위의 계산들을 층(layer)이라고 표현한다. 도식에 나타난 신경망 구조는 층 단위 계산이 2번 반복되기에 2층 신경망인 것이다. 이런 층 단위 계산을 반복할수록 더 깊은 신경망을 구축할 수 있다.

  1. 손실 함수 값 계산

위의 신겸망 계산을 가중치와 편향을 갱신하면서 반복하여 손실 함수 값을 줄인다. 손실 함수는 예측값 \(\hat{y}\)와 정답 \(t\)의 오차를 계산한다. 보통 평균 제곱 오차와 교차 엔트로피 오차를 이용한다.

  1. 매개 변수의 편미분 구하기

그렇다면 손실 함수의 값을 어떻게 줄이는가? 이때 사용되는 것이 편미분이다. 편미분은 분자의 \(f(x)\)를 분모의 변수를 기준으로 미분한 것이며, 함수 \(f(x)\)에서 변수가 순간적으로 얼마나 변하는가를 나타낸다. 즉, 기울기를 나타내는 것이다. 편미분 값을 통해서 가중치와 편향이 어느 방향으로 변해야 하는지를 파악할 수 있다. 이 파트에서 순전파나 역전파 알고리즘을 사용한다.

  1. 편미분 값에 학습률 곱하여 매개 변수 갱신

편미분 값을 저장한 후 학습률을 곱해준다. 학습률은 기존 가중치에 얼만큼 영향을 줄 것인가를 나타낸다. 학습률은 보통 0.1이나 0.01을 사용한다. 학습률이 너무 크면 학습폭이 커서 최솟값을 못찾을 수도 있다. 즉, 신경망이 도착지까지 가는데 너무 큰 걸음으로 걷는 것이다. 멀리 있을 때는 좋을 수 있지만 가까워지면 도착지에 딱 맞게 가는 것은 어려워진다. 학습률을 곱한 편미분 값을 기존 가중치와 편향에서 뺀 후, 그 결과를 다시 가중치와 편향으로 갱신한다.

  1. 손실 함수 값 계산

갱신된 가중치와 편향을 가지고 손실 함수를 다시 계산한 후, 나온 결과를 바탕으로 모델의 성능이 더 좋아졌는지 판단할 수 있다. 손실 함수 값이 이전의 결과보다 0에 가까워졌다면 학습이 잘 되고 있다고 평가할 수 있다.

  1. 4 ~ 6 지정된 횟수만큼 반복하기

위의 과정을 반복하면 손실 함수 값은 0에 가까워지고 인공신경망의 예측 정확도가 올라간다. 보통 사용하는 학습 알고리즘마다 적절한 횟수는 다르지만 '에폭(epoch)'을 기준으로 삼는다. 에폭은 학습데이터의 갯수를 나타낸다. 만약 사용하는 학습 입력데이터가 500개라면 해당 신경망의 1에폭은 500번이다. 만약 한번 학습을 시킬 때 10개 단위의 배치데이터를 사용한다면 1에폭의 수는 50번이 된다.

  1. 학습된 모델의 정확도 확인하기

정확도는 학습된 모델이 실제 데이터를 얼만큼 맞추는가로 평가된다. 학습된 인공신경망은 97%~98%의 정확도까지도 보인다.

결론

지금까지 인공신경망이 어떻게 학습되는지 그 과정을 살펴보았다. 신경망 학습은 인공신경망 구현에 있어 매우 중요한 부분이다. 신경망이 어떤 방식으로 학습되는지에 따라서 성능이 제각각이기 때문이다. 학습에 있어 다양한 기술적인 튜닝이 있지만 핵심 원리는 이 글을 벗어나지 않는다. 다음 글에서 순전파 알고리즘 기반의 경사하강법을 구현해보고, 이후 역전파에 대해서 살펴볼 것이다.


[6/18] 인공신경망 구현: 모델 학습
https://dev-bearabbit.github.io/ko/DeeplearningJulia/Deeplearning-6/
Author
Jess
Posted on
2020년 4월 2일
Licensed under