오차 역전파(Back propagation)

미남로그·2022년 1월 22일
4

참고 자료

📒 모두의 딥러닝
💻 But what is a neural network? | Chapter 1, Deep learning

저는 위의 자료를 바탕으로 해당 포스팅을 정리하였습니다. 이미지 출처도 동일합니다.

사실 이전에 오차 역전파를 정리한 적이 있습니다.

🔗역전파 알고리즘(backpropagation algorithm)

같은 주제로 또 정리하는 이유는 이때 계산 과정에 집중해서 보아서 개념에 대한 이해가 완벽히 안 된 것 같고, 계산 과정을 간단하게 복습하기 위함입니다.

기초 개념을 보고 싶다면 해당 포스팅, 수식 과정을 더 자세히 보고 싶다면 이 포스팅(위와 같음)을 추천 드립니다!


선형 회귀를 배웠다면

가중치(weight)와 바이어스(bias)

의 개념을 알고 있을 겁니다.

우리는 임의의 가중치를 선언하고 결괏값을 이용해 오차를 구합니다.

이 오차가 최소인 지점으로 계속해서 조금씩 이동 시킵니다. 오차가 최소가 되는 점이 미분했을 때 기울기가 0이 되는 지점이고 그것이 찾고자 하는 답입니다.

이게 경사 하강법인데요. 단일 퍼셉트론일 경우와 다층 퍼셉트론일 경우 가중치를 조정하는 방식은 결국 같습니다. 결괏값의 오차를 구해서 하나씩 앞으로 가중치를 거슬러 올라가며 조정하는 방식입니다.

위의 사진을 통해 최적화의 계산 방향이 출력층에서 시작해 앞으로 진행되는 것을 알 수 있는데요.

그래서 다층 퍼셉트론에서의 최적화 과정을 오차 역전파(back propagation)라고 부릅니다.


오차 역전파(back propagation)

오차 역전파의 방식은 아래와 같이 정리할 수 있습니다.

  1. 임의의 초기 가중치(W)를 준 뒤 결과(youty_out)를 계산한다.
  2. 계산 결과와 우리가 원하는 값 사이의 오차를 구한다.
  3. 경사 하강법을 이용해 바로 앞 가중치를 오차가 작아지는 방향으로 업데이트한다.
  4. 위 과정을 더이상 오차가 줄어들지 않을 때까지 반복한다.

3번의 ‘오차가 작아지는 방향으로 업데이트한다’의 의미는 미분 값이 0에 가까워지는 방향으로 나아간다는 뜻입니다.

‘기울기가 0이 되는 방향’의 의미: 가중치에서 기울기를 뺐을 때 가중치의 변화가 전혀 없는 상태를 말함

따라서 오차 역전파가중치에서 기울기를 빼도 값의 변화가 없을 때까지 계속해서 가중치 수정 작업을 반복하는 것이라 표현할 수 있습니다.

수식으로 표현하면 W(t+1)=Wt오차WW(t+1) = W_t-\frac{∂오차}{∂W} 입니다.

새로운 가중치(W(t+1)W(t+1))는 현재 가중치(WW)에서 기울기(오차W\frac{∂오차}{∂W})를 뺀 값입니다.

이렇게 오차가 수정되는 과정의 계산을 살펴보겠습니다.


계산 과정

출력층의 오차 업데이트

은닉층의 오차 업데이트

오차 공식과 편미분 과정 유도

chain rule


과정 한 눈에 보기

그림으로 위의 과정을 나타내면 이렇습니다.

  1. 환경 변수 지정
    환경 변수에는 입력 값(input data)과 타깃 결괏값(target)이 포함된 dataset, learning rate 등이 포함됩니다.

    또한, activation function과 weight 등도 선언되어야 합니다.

  2. 신경망 실행
    초깃값을 설정하여 activation function과 weight를 거쳐 결괏값이 나오게 합니다.

  3. 결과를 실제 값과 비교
    결괏값과 실제값을 비교한 오차를 측정합니다.

  4. 역전파 실행
    output layer와 hidden layer의 weight를 수정합니다.

  5. 결과를 출력합니다.


오차 역전파의 문제점

오차 역전파는 출력층으로부터 앞으로 하나씩 되돌아갑니다.

그러면서 미분 값(기울기)을 구해 각 층의 가중치를 수정하는데요.

그런데 문제점은 층이 늘어나면서 역전파를 통해 전달되는 각 기울기의 값이 점점 작아진다는 점이었습니다.

기울기가 맨 처음 층까지 전달되지 않는 경우가 발생하고, 이를 기울기 소실(vanishing gradient) 이라 부릅니다.

이 원인은 활성화 함수로 사용한 sigmoidsigmoid 함수의 특성 때문입니다.

sigmoidsigmoid 함수는 0부터 1까지의 값을 가지고, 이 함수를 미분하면 최대값이 0.3이 됩니다.

이 값들을 계속해서 곱하다 보면 0에 가까워지며 층을 거칠수록 기울기가 사라져 가중치 수정이 어려워집니다.

sigmoidsigmoid 함수는 초기 네트워크에서 가중치가 적용된 합들을 0부터 1 사이의 값으로 압축하기 위해 사용했습니다.

이건 뉴런이 활성화 되거나 비활성화 되는 생물학적인 현상을 모방한 방식입니다.

이러한 이유로 현재의 네트워크들은 sigmoidsigmoid 함수를 잘 안 쓰고, 다른 여러 함수로 대체하기 시작했습니다.

현재 가장 많이 사용되는 활성화 함수는 ReLUReLU이며 더 훈련시키기 쉽습니다.

ReLU의 특징

  • ReLU(a) = max(0,a)
  • a는 뉴런의 활성치를 나타내는 함수이다.
  • ReLU는 생물학적으로 어떻게 활성화되고 비활성화 되는지 모방한 것과 같음
  • 임계값을 넘기면 항등함수를 출력하고 임계값을 넘기지 못하면 0을 출력합니다.
  • ReLU의 미분 값은 a가 0보다 크면 1의 미분 값을 가집니다.

따라서 많은 은닉층을 거치더라도 기울기가 소실하는 상황은 발생하지 않습니다.


최적화 알고리즘

그 뒤는 이제 속도정확도 문제를 해결하는 더 고급진 경사 하강법이 나옵니다. 최적화 알고리즘 또는 optimizer라고 부릅니다.

경사 하강법은 정확하게 가중치를 찾아가지만, 한 번 업데이트 할 때마다 전체 데이터를 미분해야 하므로 계산량이 매우 많습니다.

이러한 점을 보완하며 다양한 최적화 알고리즘이 등장했습니다.

이전에 이 최적화 알고리즘을 정리한 글이 있습니다.

📕 최적화 알고리즘 - SGD, Momentum, Nesterov momentum, AdaGrad
📙 최적화 알고리즘 - RMSProp, Adam

더 자세히 이해하고 싶으면 위 두 포스팅을 참고 부탁드립니다.

모두의 딥러닝 책이 정리가 정말 잘 되어 있어서, 간단하게 정리만 하고 넘어가겠습니다.

그림을 통해 더 잘 이해하셨으면 합니다.

확률적 경사 하강법(Stochastic Gradient Descent, SGD)

경사하강법은 불필요한 계산까지 가져가므로 속도도 느리고, 최적해를 찾기 전에 최적화 과정이 멈출 수 있습니다.

확률적 경사 하강법(Stochastic Gradient Descent, SGD)은 경사 하강법의 이러한 단점을 보완한 방법이빈다.

랜덤한 일부 데이터를 사용하는 방법인데요. 속도가 확실히 빠르지만 랜덤한 데이터를 사용하기 때문에 진폭이 꽤 큰 편입니다.

하지만 최적해에 근사한 값을 빨리 찾아낸다는 장점이 있습니다.

모멘텀(momentum)

확률적 경사 하강법은 속도가 빨라서 최적해에 근삿값으로 빠르게 가까워지지만, 최적해를 빗겨 나갈 수 있습니다.

모멘텀의 뜻은 '관성, 탄력, 가속도'인데요. 경사 하강법과 같이 기울기를 구하지만, 오차를 수정하기 전 바로 앞의 수정 값과 방향을 참고하여 같은 방향으로 일정한 비율만 수정합니다.

따라서 양수(+), 음수(-) 방향으로 지그재그하는 현상이 줄어들고 이전 이동 값을 고려하여 일정 비율만큼 다음 값을 결정하므로 관성 효과를 줄 수 있습니다.

표 참고

위에서부터 나온 순서이며, 현재는 가장 최근 알고리즘인 'Adam'을 많이 사용합니다.

보통 'Adam'과 'RMSProp'을 번갈아가며 확인한다고 합니다.

여기까지가 사실 딥러닝의 기본적인 필수 이론이라 볼 수 있습니다.

해당 내용이 많이 도움 되었으면 좋겠습니다.


시리즈 추천

현재 두 교재의 흐름을 바탕으로 머신러닝, 딥러닝의 개념을 정리 중입니다. 필요하신 분은 참고해보세요.

📚 혼자 공부하는 머신러닝
📚 딥러닝 교과서

감사합니다.👏

profile
미남이 귀엽죠

1개의 댓글

comment-user-thumbnail
2023년 1월 16일

You can choose words supercuts prices for hair color with three vowels and all five different letters.

답글 달기