안녕하세요, 여러분~
오늘은 인공신경망 학습 원리를 다뤄볼 것입니다. 인공신경망 그 자체는 기계학습의 대표적인 기술 중 하나입니다. 기계가 지식을 스스로 학습하는 컴퓨터 알고리즘은 기계학습이라고 했습니다. 잠깐 인공 신경망의 구조를 복습하겠습니다. (아래 그림 참고)
Remind: 인공신경망이란?
(출처 http://tcpschool.com/deep2018/deep2018_deeplearning_intro)
입력 데이터를 입력층(input layer)로 인공신경망이 인지하고, 이것을 기반으로 다수의 은닉층(hidden layer)을 통과해 새롭게 생성된 출력층(output layer)를 만들어 출력 데이터를 만드는 알고리즘이였습니다. 그림 속 원을 node, 선을 edge라고 불렀습니다. 신경망 속 node 사이의 이동은 아래처럼 이루어진다고 했습니다. 각 선의 가중치(weight)를 기반으로 이전 층의 node 값과의 선형 합과 활성함수를 거쳐 다음 node의 값이 결정됩니다.
위의 과정으로 얻은 출력값은 처음부터 유효한 것이 아닙니다. 굉장히 많은 데이터를 보고 거치면서 인공신경망 스스로 학습(train)을 해야 정확하고 유효한 출력값을 얻을 수 있습니다. 인공신경망을 학습할 때 우리는 "최적화(Optimization)"를 한다고 표현합니다.
인공신경망의 최적화
최적화는 기계학습에서 알고리즘을 고도화 시키는 학습의 방법을 일컫는 말입니다. 정해진 목적(objective)을 만족하기 위해 계속해서 알고리즘(algorithm)의 파라미터(parameter; e.g., edge의 weight과 bias)들의 값을 입력 데이터를 통해 **학습(train)**하는 것입니다. 이런 과정은 학생들의 시험 대비과정에 빗대어 이해할 수 있습니다. 학생들은 "A+"를 받는 것을 목적으로 합니다. A+를 받기 위해서는 다양한 문제들(data)를 직접 학습(train)합니다. midterm과 final exam의 점수를 최대(maximization) 혹은 틀린 개수를 최소화(minimization)하기 위함입니다. 이런 과정을 기계 학습에서는 최적화라고 부릅니다.기계학습에는 많은 알고리즘들이 있고, 이것의 최적화 방법은 서로 다릅니다. 인공신경망은 최적화를 위해 gradient descent라는 방법을 사용합니다.
Gradient Descent(경사하강법)
수학적인 의미를 살펴보면, 위의 그림과 같이 함수 값이 낮아지는 방향으로 알고리즘 속의 파라미터(weight, bias)들을 변형시켜가면서 최종적으로는 최소 함수 값을 갖도록 하는 파라미터를 찾는 방법입니다.
인공신경망을 학습할 때, 해결해야할 문제의 목적(objective)은 목적값의 최대화(maximiazation) 혹은 틀린 개수의 최소화(minimization)으로 볼 수 있습니다. 일반적으로 최소화(minimization)로 더 많이 사용합니다. 목적값을 예측 정확도(accuracy)로 할 것인지, 예측 에러(error = 100 - accuracy(%))로 하느냐의 차이입니다. minimization 문제로 바꾼다면, error를 파라미터(w)에 대한 함수로 해석할 수 있고, gradietn descent 방법을 적용할 수 있습니다.
더욱 명확하게, gradient descent는 함수의 접선(tangent)의 기울기를 이용해 x의 값을 어떻게 이동시켰을 때 최소가 되는지를 아는 방법입니다. 현재의 점에서의 기울기($\frac{dL(w)}{dw})$의 절대치에 이동거리(step size; $\gamma$)를 곱하여서 검정색의 점을 주황색의 점으로 이동시킵니다. 이것을 계속 지속해서 반복하여서, 결국 파라미터를 학습시켜 위처럼 아래로 볼록한 함수(objective function)의 최소값(minimization)으로 갈 것을 기대합니다.이 논리를 더욱 정확하게 수식으로 표현하면 아래와 갔습니다.
$x_{i+1} = x_{i} - (이동 거리) \times (기울기의 부호)$
여기서 $x_i$는 i번째 계산된 $x$의 좌표입니다. 점화식의 개념이 사용된 것입니다.
이동거리($\gamma$)의 값은 학습하는 값이 아닙니다. 우리가 임의로 정해주는 값입니다. 만약에 이동거리 값이 굉장히 크면, 최소값에 도달을 못할 것입니다. 적절한 어떤 지점에서부터 수렴을 못하고 아래로 볼록한 점의 근처 어딘가에서 좌우 진동을 하고 있습니다. 반면, 이동거리 값이 굉장히 작으면, 결국에는 최소값에 수렴하겠지만, 굉장히 많이 학습을 해야 겨우 최소값에 도달하기 때문에 효율성 측면에서 나쁩니다. 그래서 우리는 이 이동거리도 적절하게 잘 주는 것이 중요합니다. 이런 측면 때문에, 이동거리는 함수의 학습 정도를 조절하기에 learning rate라고 부르기도 합니다.
최종적으로 수식으로 정리하면,
$w_{i+1} = w_{i} - \gamma \times |\frac{dL(w_{i})}{dw_{i}}|$ 입니다. $w_i$는 i번째 계산된 weight $w$의 좌표입니다. 사실 인공 신경망 속의 파라미터는 굉장히 많은 weight와 bias로 구성되어 있습니다. 이것들을 모두 묶어서 하나의 vector로 표현해 $\vec{w}$라고 합시다. vector에 대한 gradient descent는 $\vec{w}{i+1} = \vec{w}{i} - \gamma \times \nabla L(\vec{w}_i)$으로 표현할 수 있습니다.
(출처 https://angeloyeo.github.io/2020/08/16/gradient_descent.html)
Gradient Descent의 문제 - Local minima
Gradient descent는 굉장히 강력한 최적화 방법이지만, 심각한 문제 역시도 가지고 있습니다. Local minima 문제 입니다.
(출처 https://angeloyeo.github.io/2020/08/16/gradient_descent.html)
처음 설명했던 그림처럼 아래로 볼록한 지점이 하나만 있다면, 명확하게 최소값을 잘 찾을 수 있습니다. 하지만, 위의 그림과 같은 문제에 직면하면 이동거리를 이동하던 중 노란색 hall에 빠질 수도 있습니다. 이것 역시는 지역적으로(locally) 최소값이기 때문에 분명 목적값은 수렴할 것입니다. 이런 해(solution)을 local minima라고 부릅니다. 이런 문제를 해결하기 위해서 다양한 방향으로 많은 알고리즘이 연구되었습니다. 그 결과 최근에는 적응형 최적화(adaptive optimization) 방법들이 굉장히 많이 나왔습니다. 해당 내용은 다음 번에 다루겠습니다.
Gradient descent 방법은 neural network를 이해하는 것에 있어, 굉장히 중요한 부분입니다. 수학적인 내용이 많은 것처럼 보여 어렵게 느껴질 수 있지만, 원리는 굉장히 쉽습니다. 잘 이해하고, 다음 글에서 심화의 적응형 최적화(adaptive optimization)으로 만나겠습니다.
감사합니다~
'입문자를 위한 AI 개론' 카테고리의 다른 글
Overfitting과 Underfitting (0) | 2021.07.20 |
---|---|
지도학습과 비지도학습이란 무엇일까요? (0) | 2021.07.20 |
인공신경망이란 무엇일까요? (0) | 2021.07.12 |
인공지능(AI) [머릿말] (0) | 2021.07.05 |