역전파(Back Propagation)란 무엇일까?
역전파의 의미
우선 역전파의 정의에 대해서 알아보자. 역전파는 신경망의 각 노드가 가지고 있는 가중치(Weight)와 편향(Bias)을 학습시키기 위한 알고리즘으로, 딥러닝에 있어서 가장 핵심적인 부분이라고 할 수 있다. 목표(Target)와 모델의 예측 결과(Output)가 얼마나 차이가 나는지 확인하고 그 오차를 바탕으로 가중치와 편향을 뒤에서부터 앞으로 갱신해가는 것을 의미한다. 역전파란 명칭도 바로 이처럼 뒤에서부터 다시 앞으로 거슬러 올라간다는 것에서 나온 것이다.
비결이 뭐야?
역전파가 딥러닝에 있어서 중요하다는 점은 알겠다. 도대체 어떤 방법으로 학습을 진행하고 또 가중치를 갱신하기 위해 어떤 방법으로 이 복잡한 신경망을 계산할 수 있는 것일까? 역전파는 경사하강법(Gradient Descent)을 통해서 오차가 최소화되는 방향으로 진행하고 복잡한 계산은 미분의 연쇄법칙(Chain Rule)을 통해서 그 값을 계산한다. 경사하강법을 통해서 오차가 최소화되는 이유는 무엇이고, 연쇄법칙은 역전파에서 왜 중요한 것일까 한번 살펴보자.
잠깐 경사하강법(Gradient Descent)은 또 뭐야?
경사하강법이 필요한 이유?
일단, 경사하강법은 계산이 어려운 함수의 극값의 근삿값을 1차 미분계수를 이용해 찾아가는 방법이다. 이런 방법이 왜 필요할까? 예를 한번 들어보자. 다음 수식의 최솟값을 구해보자. 중학교 수학에서 배우는 간단한 이차함수라서 대부분 간단하게 계산기나, 복잡한 연산 없이 쉽게 최솟값을 구할 수 있을 것이다.
그렇다면, 사차함수의 최솟값을 구해보자. 아까보다는 복잡하지만 고심해서 열심히 그래프를 그려보면 최솟값을 구할 수 있을 것이다.
겨우 이차함수에서 사차함수로 바뀌었을 뿐인데, 계산이 매우 복잡해진다. 그래도 여전히 계산이 가능하기는 하다. 하지만, 딥러닝에서는 신경망을 거치면서 만들어진 복잡한 고차원의 합성함수를 계산해야 한다. 계산할 수 있을까? 아마도 매우 힘들 것이다. 또한, 계산이 가능하다고 해도 상대적으로 많은 계산량을 필요로 할 것이다. 경사하강법은 이처럼 딥러닝에서 다루는 고차원 함수들의 최솟값을 구하기 위해서 고안된 방법이다.
경사하강법의 원리
경사하강법은 함수의 기울기(Gradient)를 이용해 x의 값을 어디로 옮겼을 때 함수가 최솟값을 갖는지 알아보는 방법이다.
기울기가 양수라는 것은 x값이 커질수록 함숫값이 커진다는 것을 의미하고 반대로 기울기가 음수일 때 x값이 커질수록 함숫값이 작아진다는 것을 의미한다. 또한, 기울기의 절댓값이 클수록(경사가 가파를수록) 극값에서 멀리 떨어져 있다는 것을 의미한다.
이를 활용해서 기울기가 양수인 경우에는 x를 줄이고 기울기가 음수인 경우에는 x를 키우면 함수의 최솟값을 향해서 나아갈 수 있다.
딥러닝에 경사하강법을 사용해보자
그렇다면, 경사하강법을 딥러닝에 사용하기 위해서 무엇을 고려해야 할까? 딥러닝에서는 비용 함수(Cost Function)/손실 함수(Loss Function)를 이용하여 가중치를 갱신하고자 경사하강법을 사용한다. 경사하강법을 이용하여 비용 함수/손실 함수가 최솟값을 갖는, 다시 말해서 오차가 최소화되도록 하는 가중치를 계산한다.
경사하강법을 제대로 사용하려면, Optimizer
최솟값을 찾기 위해서 x값이 얼마나 이동할지는 x에 대해서 편미분해서 나온 기울기와 학습률(Step Size/Learning Rate)으로 결정한다. 이때 학습률이 너무 크면 최적값을 지나 발산하여 최솟값을 찾지 못하거나, 반대로 너무 작으면 최적값을 찾기까지 너무 오랜 시간이 걸릴 수 있다. 따라서 최적의 학습률을 정하는 것도 굉장히 중요한 부분이라고 할 수 있다.
경사하강법으로 가중치를 갱신할 때, 얼마나 조절할지 알려주는 알고리즘이 바로 Optimizer이다. 한마디로 학습의 방향을 잡아주는 내비게이션의 역할이라고 생각하면 된다. 적절한 Optimizer를 사용하면, 학습시간도 단축하고 학습과정에서 생기는 여러 문제를 해결하는데 도움이 된다. (자세한 부분은 나중에 자세히 다루자)
잘 모르겠으면, 대부분 Adam을 사용하는 것을 권장한다. 하지만 꼭 Adam을 사용할 이유는 없으며, 다양한 모델을 실험하듯 다양한 Optimizer를 사용하는 것도 성능 향상에 도움이 된다.
Local Minima 문제, 해결방법은?
경사하강법의 또 다른 문제는 바로 최솟값(Global Minimum)을 찾지 못하고 지역적인 극솟값에 빠져버리는 문제이다. 왼쪽의 그래프처럼 최솟값을 찾기 위해 진행하던 중 극솟값에 빠져서 넘어가지 못하는 현상을 말한다.
이 문제를 해결하기 위해서는 좋은 초기값을 주는 방법이 있다. 하지만, 적절한 초기값을 누가 알 수 있을까? 또 다른 방법은 바로 위에서 언급한 Optimizer를 사용하는 것이다. 적절한 Optimizer를 사용하면, 최솟값을 넘어가는 것에 도움을 주곤 한다.
또 다른 방법은 바로 정규화(Batch Normalization)다. 정규화는 학습 과정에서 기울기(Gradient)가 너무 커지거나(Exploding), 사라지는(Vanishing) 문제를 해결하면서 학습 속도를 높이기 위해 도입된 개념이다. 정규화를 사용하게 되면, 아래의 그림처럼 경사를 완만하게 만들어, 극솟값에 빠지는 가능성을 낮춰줄 수 있다.
역전파의 핵심 Chain Rule
지금까지 경사하강법이 왜 딥러닝에서 중요한지 그리고 잘 사용하기 위해서는 어떤 방법이 있는지 살펴봤다. 그런데 왜 딥러닝에서 가중치를 갱신할 때, 뒤에서 앞으로 전파되는 것일까? 그 핵심은 바로 미분의 연쇄법칙에 있다.
신경망을 통과하면서 만들어진 굉장히 복잡한 고차원의 합성함수의 기울기(Gradient)를 계산하기 위해서는 미분의 연쇄법칙을 활용해야 한다. 미분의 연쇄법칙이란, 합성 함수의 미분은 합성 함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있다. 즉, 편미분을 활용해서 더 쉽게 기울기를 구할 수 있다는 것이다.
합성함수의 기울기를 계산하려면, 이전의 함수의 미분값이 필요하고 그리고 이전의 함수의 미분값을 구하기 위해서는 그 이전의 미분값이 필요하다. 이런식으로 이전의 값이 다음에 구하는 값에 필요하게 된다. 딥러닝에서는 기울기를 계산하기 위해서, 미분의 연쇄법칙의 계산을 따라 뒤에서부터 하나씩 계산하면서 계산한 값을 다음의 값을 구하기 위해 사용하며 나아가게 된다. 이것이 바로 뒤에서 앞으로 전파하는 역전파라는 말이 나온 이유다.
의견과 질문은 언제나 감사합니다.
'Study > AI' 카테고리의 다른 글
Quantization은 무엇일까? (1) | 2023.10.31 |
---|---|
Inductive Bias란 무엇일까? (10) | 2022.02.21 |
모델의 평가지표란? (0) | 2022.02.06 |
데이터가 충분하다고 말하려면 얼마나 있어야 할까? (0) | 2022.01.24 |
딥러닝이란 무엇일까? (0) | 2022.01.15 |