6.딥러닝이 학습하는 방법 : 역전파(Backpropagation), 경사하강법(Gradient Descent)

This entry is part 6 of 7 in the series 딥러닝 이야기

1. 들어가며

지난 글에서는 딥러닝에 대해 살펴봤습니다.
딥러닝은 머신러닝의 다양한 방법 중 하나입니다. 그 많은 방법 중 인공신경망에 해당하는 방법론이죠. 인공신경망과 딥러닝은 사실상 같은 개념입니다. 재야에 묻혀 있던 인공신경망이 득도하여 세상으로 나오면서 새롭게 브랜딩 한 이름이 딥러닝입니다.

이러한 딥러닝의 굵직한 개념들에 대해 살펴봤었는데요.
먼저 기존 머신러닝 방법들과 차별화되는 딥러닝의 철학을 살펴봤습니다. 인공신경망은 쉽게 말해 데이터셋을 표현할 수 있는 구불구불한 울타리를 만드는 방법이었죠. 딥러닝은 그러한 울타리를 아주 여러 번 연속으로 만드는 방법이었습니다. 구불구불한 울타리를 여러번 사용할 수 있기에 아주 복잡한 데이터셋도 설명할 수 있었죠. 따라서 기존 방법들보다 성능이 매우 좋았고, 그런 이유로 현재 AI의 대세로 자리매김할 수 있었습니다.

이번 글에서는 이러한 딥러닝의 학습 방법에 대해 넓고 얕게 살펴보겠습니다.
딥러닝의 학습 방법을 자세히 들어가려면 복잡한 수식 전개가 제법 필요합니다. 이번 글에서는 최소한의 수식만을 사용하여 핵심 개념만 이해하는 데에 초점을 맞췄습니다.
먼저 결정 경계라는 개념에 대해 살펴볼 겁니다. 결정 경계는 그동안 우리가 구불구불한 울타리라고 불렀던 개념입니다. 딥러닝을 학습한다는 것은 결정경계 모양을 원하는 형태가 되도록 조정하는 작업입니다.
이렇게 조정하기 위해서는 컴퓨터에게 설명을 해줘야겠죠? 이를 위해 컴퓨터의 언어인 사칙연산으로 우리의 의도를 표현한 함수를 목적함수라고 합니다.
이제 컴퓨터에게 우리의 목표를 설명해 주었으니 컴퓨터를 움직이게 해야 하는데요. 컴퓨터에게 어느 방향으로 움직일지 알려주는 방법을 경사하강법이라고 합니다. 그리고 컴퓨터가 움직이는 방법은 역전파라고 하죠.
지금까지 언급한 개념들은 딥러닝 학습 방법을 설명하는 데 있어서 가장 핵심이 되는 개념들입니다.

이번 글의 순서는 다음과 같습니다.

  1. 결정경계와 딥러닝 모델 학습의 개념을 설명합니다.
  2. 목적함수가 무엇이고 어떻게 컴퓨터에게 우리의 의도를 전달하는 것인지 설명합니다.
  3. 경사하강법이 무엇인지 설명합니다.
  4. 역전파와 순전파를 구분하고 설명합니다.

이제부터 하나씩 자세히 살펴보겠습니다.

2. 딥러닝이 학습하는 방법

2-1. 결정 경계 (Decision Boundary) 

이전 글에서 딥러닝의 기본 개념에 대해 살펴봤습니다.
계속해서 강아지와 고양이 이미지를 구분하는 문제를 예시로 들어왔죠. 강아지와 고양이 이미지는 특정 공간에서의 점으로 표현됩니다. 따라서 쉽게 바닥에 놓인 구슬이라고 생각할 수 있죠.

1.초록구슬과 주황구슬 구분하기
1.초록구슬과 주황구슬 구분하기

위 그림과 같이 초록색 구슬과 주황색 구슬이 어지러이 분포되어 있다고 상상해 보겠습니다.
우리는 이 구슬을 색깔별로 구분하고 싶어요. 이를 위해 파란 실을 사용해서 구불구불 움직여가며 초록 구슬과 주황 구슬을 구분하려고 할 겁니다. 이는 다시 말하면 강아지 이미지와 고양이 이미지를 구분하는 경계를 찾는 것과 같다고 할 수 있죠.

이렇게 데이터 공간상의 점들을 종류별로 구분하는 경계를 결정 경계(Decision Boundary)라고 합니다.
이는 2차원 공간상에서는 선이 될 거고, 3차원에서는 면, 고차원에서는 초평면(HyperPlane)으로 표현될 겁니다. 그럼 결국 우리가 원하는 건 이 결정 경계를 찾는 것인데요. 그중 초록 구슬과 주황 구슬을 아주 잘 구분해 주는 결정 경계를 찾는 것이죠.

무한가지에 가까운 모양의 결정경계가 존재할 텐데, 정확히 우리가 원하는 결정 경계는 어떻게 찾을 수 있을까요?
이 대답을 하려면 우선 결정 경계가 어떻게 생기는지 알아야겠죠. 정확히는 결정 경계의 모양에 영향을 미치는 변수가 무엇인지 알아야겠죠.

2.함수 조합에 따른 결정경계 모양
2.함수 조합에 따른 결정경계 모양

2-2. 딥러닝 모델의 학습

딥러닝 모델을 다시 한번 생각해 보겠습니다.
딥러닝 모델은 깊은 층으로 구성되어 있다고 했습니다. 그리고 각 층은 퍼셉트론과 비선형 활성함수 등으로 구성되어 있었죠. 물론 최신 딥러닝 모델들은 훨씬 더 복잡하게 구성되지만, 큰 흐름에서는 동일하므로 그렇다고 하고 넘어가겠습니다.
이때 퍼셉트론을 구성하고 있는 함수들이 있는데요. 이 함수들에 의해 각 층의 결정 경계 모양이 결정될 겁니다. 왜냐하면 이 함수들에 의해 연산 결과가 달라지기 때문이죠. 위 그림에서 보면 동일한 딥러닝 모델일지라도 함수 조합에 따라서 결정 경계의 모양이 달라지는 모습을 볼 수 있습니다.

그럼 함수 모양을 결정하는 변수는 무엇일까요?
함수의 가중치입니다.

3.가중치 조합에 따라 달라지는 함수 모양
3.가중치 조합에 따라 달라지는 함수 모양

위 그림은 일차함수에서 가중치에 따른 함수 모양을 표현한 그림입니다.
생각해 보면 일차함수에서 가중치란 기울기와 y절편을 의미하잖아요? 이 둘에 의해서 함수의 모양이 결정되죠. 이때 함수의 가중치란 무엇일까요?

4.그래프 표현에서의 함수 가중치
4.그래프 표현에서의 함수 가중치

위 그림은 동일한 연산을 그래프 형태로 표현한 그림입니다.
딥러닝에서는 위와 같은 그래프 형태의 표현을 자주 사용한다고 했었죠. 이때 함수의 가중치는 형광색 값들에 해당합니다. 즉 그래프의 선(edge) 부분들에 해당하죠.
여기까지 정리해 보겠습니다.

5.가중치 조합에 따른 결정경계 모양
5.가중치 조합에 따른 결정경계 모양

초록 구슬과 주황 구슬을 잘 구분하려면 파란색 경계실을 구불구불하게 잘 배치해줘야 합니다. 이때 이 구슬들을 구분하는 파란실을 결정경계라고 했죠. 이 결정경계의 모양은 딥러닝 모델을 구성하고 있는 함수들에 의해 결정됩니다. 그리고 이 함수들의 모양은 함수들의 가중치에 의해 결정되죠.

이러한 가중치들을 딥러닝에서는 가중치(weight) 또는 파라미터(parameter)라고 부릅니다. 그리고 이렇게 가중치들을 변화시켜 가며 적절한 결정경계를 찾아가는 작업을 ‘학습’이라고 합니다.

6.학습에 따른 결정 경계 모양의 변화
6.학습에 따른 결정 경계 모양의 변화

위 그림처럼 학습의 목표는 지금보다 초록 구슬과 주황 구슬을 더 잘 구분하는 결정 경계로 바꿔주는 것이죠.

2-3. 데이터를 잘 설명하는 결정경계 찾기

자 여기까지는 좋습니다.
초록 구슬과 주황 구슬을 잘 구분하는 결정 경계를 찾으면 되겠군요. 어떻게요? 컴퓨터한테 ‘초록 구슬과 주황 구슬을 잘 구분하는 결정 경계를 찾아줘’라고 하면 컴퓨터가 잘 찾을 수 있을까요?

문제는 컴퓨터는 이러한 주관적인 표현을 이해하지 못한다는 것입니다.
‘잘 구분하는’은 인간에게만 쉽게 이해되는 주관적인 표현이죠. 컴퓨터와 대화하려면 모든 표현은 사칙연산으로 해주어야 합니다. 따라서 이제 ‘잘 구분하는’을 사칙연산으로 어떻게 표현할 수 있을지 고민해봐야 합니다.

사칙연산은 단순합니다.
그저 곱하고 더해서 무엇이 나왔는가를 의미하죠. 우리가 원하는 건 강아지와 고양이가 잘 구분되는 것입니다. 이걸 사칙연산답게 표현하면 이렇게 할 수 있을 것 같습니다. ‘강아지와 고양이를 각각 입력으로 넣었을 때의 결괏값이 달라야 한다.’

딥러닝 모델을 아주 단순하게 구성해 보죠.
입력값에 대해 한 번의 퍼셉트론 연산과 한 번의 활성함수만 거쳐 결괏값이 나온다고 해볼게요.

7.사칙연산으로 우리의 목표 표현하기
7.사칙연산으로 우리의 목표 표현하기

그럼 위와 같이 구성되겠죠.
이때 그림 위쪽은 입력으로 강아지 데이터가 들어갔을 때의 연산이고요. 아래쪽은 입력으로 고양이 데이터가 들어갔을 때의 연산을 표현한 겁니다. 우리의 목표는 강아지랑 고양이, 단 두 개로만 구분하는 거죠.

그럼 마지막 결괏값이 각각 강아지와 고양이에 대한 확률값으로 나온다고 가정해 볼게요.
이번 글에서는 어떻게 확률값으로 나오게 하는지에 대해서는 다루지 않겠습니다. 그럼 강아지가 입력으로 들어갔을 때의 결괏값은 (1,0)으로, 고양이가 입력으로 들어갔을 때의 결괏값은 (0,1)로 나오면 되겠군요. 컴퓨터에게 이렇게 말하면 이해할 수 있을까요? 이 과정이 사칙연산만으로 이루어졌는지를 확인해 보면 되겠네요.

8.딥러닝 모델의 구성
8.딥러닝 모델의 구성

현재 연산은 크게 퍼셉트론과 비선형 활성함수로 구성되어 있는데요.
퍼셉트론은 입력값에 대해 가중치를 곱해서 더해주는 연산이죠. 따라서 사칙연산만으로 구성되어 있습니다. 비선형 활성함수는 다양한 종류의 함수들이 있는데요, 모두 사칙연산만으로 표현이 됩니다. 이번 글에서 이 내용을 자세히 다루지는 않을게요. 지금 중요한 건 이 과정이 모두 사칙연산으로 표현되었고 따라서 컴퓨터가 이해할 수 있는 표현이라는 겁니다.

2-4. 목적 함수 (Objective Function)

좋아요, 그럼 우리가 컴퓨터에게 위와 같이 명령하면 컴퓨터에게는 무슨 일이 벌어질까요?
다시 말하면 딥러닝 모델에게는 무슨 변화가 생길까요?

9.결과값을 변화하기 위해 딥러닝 모델에게서 일어나는 일
9.결과값을 변화하기 위해 딥러닝 모델에게서 일어나는 일

위 그래프를 보며 연산 과정을 따라가 보죠.

우리의 목표는 강아지 입력값에 대해서 (1,0)의 결괏값이 나오게 하는 겁니다.
이는 위 그림에서 분홍색 형광펜으로 표현된 부분이죠. 그리고 학습을 하기 전에는 주황색 형광펜 부분과 같이 결괏값이 (0.5,0.5)로 나오고 있는 모습입니다. 우리는 이 결괏값이 (1,0)이 나오길 원하죠.

결괏값을 이렇게 바꾸기 위해서는 딥러닝 모델의 함수 가중치를 변경해주어야 합니다.
위 그림에서 초록 형관펜 부분에 해당하죠. 딥러닝의 학습이란 결정경계를 변경하는 작업이라고 했었죠. 그리고 그 작업은 함수의 가중치를 변경하여 수행된다고 했고요. 바로 이와 같은 연산 과정을 거치기 때문에 그렇습니다. 결괏값을 우리가 원하는 방향으로 변경할 수 있는 유일한 방법은 함수의 가중치를 변경하는 것이죠. 지금은 그냥 임의의 값을 사용해서 우리가 원하는 방향대로 함수 가중치가 변경되었다고 가정했습니다.

실제 딥러닝 모델은 어떻게 가중치를 바꿀까요?
물론 강아지 입력에는 (1,0)으로, 고양이 입력에는 (0,1)로 대답하라고는 말해줬죠. 하지만 이렇게 문장이 아닌 컴퓨터가 좋아하는 사칙연산으로 계산할 수 있는 하나의 숫자값으로 표현해 줄 수 있을까요? 우리가 원하는 건 강아지와 고양이를 잘 구분하는 것이죠.이는 강아지와 고양이 이미지 입력에 대해 우리가 원하는 결괏값을 내는 것이고요. 따라서 딥러닝 모델의 출력값과 우리가 원하는 정답값의 차이가 작아야겠네요.

10.틀린 정도를 사칙연산으로 표현하기
10.틀린 정도를 사칙연산으로 표현하기

위 그림은 입력 데이터에 대한 출력값과 정답, 그리고 이 둘의 차이를 나타낸 표입니다.
세 개 데이터에 대해 정답과 출력 결과의 차이를 틀린 정도로 표시하고 있죠. 최종적으로는 틀린 정도의 평균값을 구했습니다. 이렇게 구한 평균값은 딥러닝 모델이 우리가 원하는바에서 얼마나 벗어나 있는지를 나타내는 ‘값’이죠. 이 과정은 모두 사칙연산으로 표현되었고요. 따라서 딥러닝 모델이 이해할 수 있는 표현입니다.

이렇게 사칙연산만으로 구성한 함수를 목적함수(Objective Function)라고 합니다.
목적함수는 딥러닝 모델에게 우리가 원하는 바를 명확하게 표현해 주죠. 위에서는 정답과 출력값과의 차이를 목적함수로 구성해 주었죠. 하지만 반드시 이렇게 구성해야만 하는 것은 아닙니다. 상황에 따라 얼마든지 다양한 목적함수를 만들어줄 수 있습니다. 논리적으로 일리가 있고 사칙연산만으로 표현할 수 있다면 말이죠.

2-5. 오차가 작아지는 방향으로 가중치 업데이트하기

이제 컴퓨터에게 우리가 원하는 바를 이해시킬 수 있게 되었습니다.
강아지랑 고양이를 구분하라는 쉬운 문장을 이해시키기 위해 참 많이 돌아왔네요. 하지만 아직 끝나지 않았습니다. 딥러닝 모델에게 우리가 원하는 게 무엇인지는 설명해 줬는데요. 이제 이 녀석이 어떻게 우리가 원하는 곳까지 갈 수 있는지 알려줘야 합니다.

위에서 정의한 목적함수는 우리가 원하는 곳과 현재 딥러닝 모델 상태와의 오차라고 할 수 있죠.
따라서 이제부터는 목적함수를 오차라고 부르겠습니다. 결과적으로 생각해 보면 우리가 원하는 건 단순하죠. 그저 오차가 작아지는 방향으로 딥러닝 모델이 변하는 겁니다. 즉 딥러닝 모델의 가중치를 변화시켜 오차가 작아지도록 하는 것이죠.

11.틀린 정도가 줄어들도록 학습하기
11.틀린 정도가 줄어들도록 학습하기

위 그림처럼 가중치를 잘 바꿔서 그저 오차의 평균값이 작아지기를 원합니다.
그런데 생각해 보면 이때의 오차는 정답과 출력 결과의 차이잖아요? 따라서 이렇게 표현할 수 있습니다.

12.틀린 정도를 사칙연산으로 표현하기
12.틀린 정도를 사칙연산으로 표현하기

즉 오차는 위 표와 같이 딥러닝 모델을 구성하고 있는 가중치들에 대한 함수라고 할 수 있습니다.
오차는 가중치에 대한 함수이기 때문에 다음과 같이 그래프를 그려볼 수 있겠죠.

13.오차를 가중치의 함수로 표현하기
13.오차를 가중치의 함수로 표현하기

위 그래프는 그저 각각의 가중치값을 전부 넣어서 오차를 계산해 본 뒤 점을 찍어 연결하면 위와 같이 그려질 겁니다.
그런데 우리가 원하는 건 그저 오차를 가장 작게 만드는 가중치를 찾는 거라고 했잖아요? 그래프를 다 그렸으니 찾았네요.

14.가장 작은 오차값을 갖는 가중치
14.가장 작은 오차값을 갖는 가중치

각 가중치별로 오차값을 가장 작게 만드는 가중치값을 선택하면 되겠네요.
이렇게 각 가중치별 가장 작은 오차값을 만드는 값을 선택하면 최종적으로 전체 오차값은 가장 작을 겁니다. 이 말은 딥러닝 모델의 학습을 성공적으로 마쳤다는 말이고요.

그런데 역시 문제가 이렇게 간단하지 않습니다.
위의 논리 전개에 문제가 있는 건 아닌데요. 현실적으로 문제가 있습니다. 위와 같은 방법으로는 거의 대부분 상황에서 학습할 수 없을 겁니다. 왜냐하면 실제 딥러닝 모델의 가중치는 수십억 개가 넘어가기 때문이죠. 그것도 제법 작은 모델들이 그렇습니다. 게다가 계산해야 될 데이터 개수도 수십억 개가 넘죠. 이를 각 가중치별로 대충 1000개씩만 계산해 본다고 해도 엄청난 계산량이 될 겁니다.

15.계산해야 하는 오차값의 개수
15.계산해야 하는 오차값의 개수

2-6. 경사하강법 (Gradient Descent) 

모델 하나 학습할 때마다 이 많은 계산을 수행하는 건 현실적으로 불가능하죠.
그럼 이제 어떻게 해야 할까요? 지금의 상황을 정리해 보면 이렇습니다.

  1. 현재 가중치값에서의 오차값은 알고 있음.
  2. 모든 가중치값에 대한 오차값을 계산해 볼 수는 없음.

위 두 조건을 만족하면서 최대한 작은 오차값을 갖도록 하는 가중치 조합을 찾을 것.
이 상황은 안개가 자욱한 산에서 내려가야 하는 상황으로 비유할 수 있겠는데요.

16.안개 쌓인 오차산 내려가기
16.안개 쌓인 오차산 내려가기

이 산 이름은 오차산입니다. 가중치에 대한 오차값으로 이루어진 산이죠.
우린 이 산에서 내려가고 싶은데요. 유일하게 알고 있는 정보는 나의 현재 위치입니다. 잘 내려가서 어딘가에 있을 목적지까지 가고 싶은 거죠. 하지만 문제는 안개가 너무 자욱해서 아무것도 안 보이니 어디로 움직여야 할지를 알 수 없다는 겁니다. 이런 상황에서 아래에 있는 목적지까지 가려면 어떻게 해야 할까요?

사방이 안 보이지만 우리가 알고 있는 확실한 정보는 목적지는 우리보다 아래에 있다는 것이죠.
그럼 그저 내리막길로만 내려가는 방법은 어떨까요?

17.기울기를 구해서 오차산 내려가기
17.기울기를 구해서 오차산 내려가기

목적지가 오른쪽일지 왼쪽일지는 모르겠지만 지금보다는 아래에 있다고 하니 무조건 내리막길로만 내려가는 겁니다.
그렇게 계속 내려가다 보면 언젠가는 아래에 있는 목적지에 도착하지 않겠어요?

컴퓨터에게 이렇게 내리막길로만 내려가라는 말은 어떻게 표현할 수 있을까요?
간단합니다. 현재 위치에서 기울기를 구하면 됩니다. 이 부분은 아래에서 조금 더 자세히 살펴볼게요. 실제로 딥러닝 모델은 학습 과정에서 이렇게 오차값이 작아지는 방향으로 가중치를 업데이트합니다. 이렇게 그저 오차값의 내리막길 방향으로 가중치를 업데이트하며 모델을 학습하는 방법을 경사하강법(Gradient Descent)라고 합니다. Gradient는 경사를 의미하고요, Descent는 내려감을 의미합니다.

경사하강법에는 다양한 알고리즘이 존재합니다.
이번 글에서는 단순히 오차값이 줄어드는 방향으로만 가중치를 번경한다고 설명했는데요. 큰 틀에서는 맞는 말이지만, 세부적으로는 다양한 아이디어를 적용하여 많은 경사하강법 알고리즘들이 존재합니다.

이번 글에서는 딥러닝 학습 방법을 큰 틀에서 살펴보는 것이 목표입니다. 따라서 이러한 상세 알고리즘들에 대한 내용은 다른 글에서 다루도록 하겠습니다.

2-7. 오차(Loss)산 내려가기 

딥러닝 모델이 학습하기 위해서는 오차 함수의 기울기가 내려가는 방향으로 가중치를 업데이트하면 된다는 것을 알았습니다.
그럼 컴퓨터에게 ‘오차 함수가 작아지는 방향으로 가중치를 업데이트해’라고 하면 알아들을까요?

18.기울기에 따라 가중치 변경하기
18.기울기에 따라 가중치 변경하기

아니겠죠.
역시 컴퓨터에게는 사칙연산으로 표현해주어야 합니다. 사칙연산을 사용해서 함수의 특정 지점 기울기를 구하는 방법이 있습니다. 바로 함수를 미분하는 것입니다.

19.오차함수를 미분하여 가중치 변경하기
19.오차함수를 미분하여 가중치 변경하기

함수를 미분하여 기울기를 구하는 과정은 이번 글에서 다루지 않겠습니다.
이번 글에서는 함수를 미분하면 기울기를 구할 수 있다고만 알고 넘어가도록 하겠습니다. 우리는 오차함수를 알고 있죠. 오차함수는 딥러닝 모델 가중치로 표현되는 함수입니다. 따라서 오차함수를 각 가중치에 대해 미분할 수 있습니다. 그 말은 각 가중치에 대한 기울기를 구할 수 있다는 말이고요. 따라서 각 가중치에 대해 오차함수를 미분한 뒤 내리막 방향으로 가중치를 업데이트할 수 있습니다.

이 과정을 계속 반복하는 겁니다. 언제까지요? 오르막길이 나올 때 까지요.

20.오르막길이 나올때까지 내려가기
20.오르막길이 나올때까지 내려가기

한 방향으로 내려가다가 기울기가 오르막으로 바뀔 때 멈추면 가장 밑에서 멈출 수 있겠죠? 이 과정을 아까 살펴본 오차산 상황으로 보면 이렇습니다.

21.경사하강법으로 오차산 내려가기
21.경사하강법으로 오차산 내려가기

시작 위치는 꽤 높은 곳이었죠. 목적지가 어딘지는 모르겠지만, 현재 위치에서 기울기를 구하고 그저 내리막길 방향으로만 내려가는 겁니다. 그리고 가던 길이 오르막으로 바뀌면 멈추는 거죠. 이렇게 단순한 방법으로 목적지를 잘 찾아온 모습을 볼 수 있습니다.

2-8. 역전파 (Backpropagation) 

이번에는 지금까지 살펴본 딥러닝 모델의 연산 과정을 그래프로 표현하여 생각해 볼까요?

22.순전파 과정
22.순전파 과정

학습 과정을 살펴보기 전 입력값에 대해 추론값을 내는 과정을 살펴봤는데요. 보통 이러한 연산 과정을 추론(Inference)이라고 합니다. 학습(Train)과는 대비되는 개념이죠.

추론 과정을 생각해 볼게요.
먼저 입력 데이터가 딥러닝 모델에 들어갑니다. 모델은 내부 함수들을 따라 입력 데이터를 연산하죠. 이렇게 모든 내부 함수 연산을 거쳐서 결괏값이 나오게 됩니다. 이 두 가지 결괏값은 각각 입력 데이터가 강아지일 확률과 고양이일 확률을 의미하죠.

이렇게 추론을 위해 입력 데이터에 대해 연산을 거쳐 결괏값을 내는 과정을 순전파라고 합니다. 정보가 전달되는 방향 관점에서 생각해 보면 입력으로부터 출력까지 순방향으로 전파되고 있죠? 따라서 순전파라고 부릅니다.

23.역전파 과정
23.역전파 과정

이번에는 반대로 학습 과정에 대해 생각해 보겠습니다.
딥러닝 모델이 학습할 때는 결괏값(추론값)에 대해 정답과의 차이를 구했죠. 이 차이를 오차함수로 정의했습니다. 그리고 경사하강법을 사용해서 이 오차값이 줄어드는 방향으로 가중치를 변경했죠.

그렇다면 이때의 정보 전달 방향은 어떤가요?
이번에는 거꾸로 결괏값으로부터 함수의 가중치까지 정보가 전달되고 있죠? 가중치들은 이렇게 ‘오차값의 기울기’에 해당하는 정보를 받았습니다. 그리고 기울기가 내려가는 방향으로 가중치를 업데이트해 줍니다. 따라서 학습 과정은 정보가 역방향으로 흐른다는 의미에서 역전파라고 부릅니다.

역전파는 딥러닝 모델 학습의 핵심 알고리즘입니다.
모든 딥러닝 모델은 역전파를 사용하여 학습한다고 해도 과언이 아니죠. 따라서 경사하강법과 역전파 알고리즘은 딥러닝 모델 성능에 큰 영향을 줍니다. 지금도 다양한 방법의 알고리즘들이 연구되고 있습니다.

3. 마무리

지금까지 딥러닝의 학습 방법에 대해 살펴봤습니다.

먼저 결정경계에 대해 알아봤습니다. 결정 경계는 우리가 그동안 초록 구슬과 주황 구슬을 구분하기 위해 사용했던 파란실에 해당했죠. 딥러닝이란 구불구불한 결정경계를 사용하여 데이터 종류를 구분하는 방법이었습니다. 또한 딥러닝 모델을 학습한다는 의미는 데이터를 잘 구분하는 결정 경계를 찾아가는 과정이었죠.

딥러닝 모델을 학습하기 위해서는 우리가 목표하는 바를 컴퓨터에게 사칙연산을 사용해서 표현해줘야 했습니다. 이렇게 사칙연산으로 우리의 목표를 표현한 함수를 목적함수라고 했죠. 강아지와 고양이를 구분하는 문제에서는 모델의 추론값과 정답과의 차이를 목적함수로 정의했습니다. 따라서 목적함수는 오차함수라고 표현하기도 하죠.

이제 딥러닝 모델은 학습을 위해 오차함수가 줄어드는 방향으로 가중치를 변경해야 하는데요. 이렇게 오차값이 줄어드는 방향으로 가중치를 변경하는 학습 방법을 경사하강법이라고 했습니다. 이를 위해서 오차함수를 미분하는 방법을 사용했죠.
결과적으로 가중치는 결괏값으로부터 역방향으로 미분값 정보를 받아 가중치를 변경할 수 있었습니다. 이렇게 역방향으로 정보를 전달하여 가중치를 업데이트하는 방법을 역전파라고 했습니다.

이로써 딥러닝 모델이 학습하는 방법의 큰 틀은 다 살펴봤습니다. 다음 글에서는 지금까지의 내용을 정리해 보겠습니다.

Series Navigation<< 5.딥러닝 (Deep Learning)7.인공지능 vs 머신러닝 vs 딥러닝 >>
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Scroll to Top