인공지능

신경망에서의 경사하강법과 오차역전파법

9yeah 2021. 7. 18. 08:51
'처음 배우는 딥러닝 수학(한빛미디어)' 책의 내용을 바탕으로 정리한 글입니다.

 

경사하강법

함수 z = f(x,y)가 있을 때 함수 z를 최소화하는 x, y를 구하기 위한 대표적인 방법

 

원리

함수 z = f(x,y)를 최소화하는 x, y가

를 만족시킨다는 사실을 이용한다.

개념

그래프 상의 점을 조금씩 움직여 함수의 최소값인 점을 찾는 것.

 

근사식과 내적의 관계

함수 z = f(x,y)에서 x를 Δx 만큼, y를 Δy만큼 바꿨을 때 함수 f(x,y) 값의 변화에 관한 근사식은 Δz = f(x+Δx, y+Δy) - f(x,y)이다. 이 근사식에서 다음 관계식이 성립한다.

 

더보기

<다변수 함수의 근사식>

 

x, y를 Δx, Δy 만큼 변화시켰을 때의 함수 z=f(x,y)의 변화

 

즉,

 

위의 식에서 우변은 다음 두 벡터의 내적 형태이다.

 

더보기

<내적의 최솟값>

 

두 벡터 a, b의 내적이 최솟값이 되려면 b의 방향이 a와 반대여야 한다.

즉, θ가 180°(벡터 a, b가 반대방향)일 때 (k는 양의 정수)

 

이변수 함수의 경사하강법 기본 식

위의 두 벡터의 방향이 반대여야 내적이 최솟값이 된다.

즉, Δz의 최솟값은 그래프가 가장 급하게 커브를 그릴 때이며, 두 벡터가 반대 방향이다.

 

 

위의 식을 만족하는 (Δx, Δy)가 있다면 점 (x,y)에서 점 (x+Δx, y+Δy)로 이동했을 때 최솟값이 되며, 이처럼 이동하면 경사면을 가장 빨리 내려갈 수 있다.

 

 

이때, η값(학습률)이 너무 크면 최솟값인 점을 뛰어넘을 수 있고, 너무 작으면 최솟값을 찾는 데 오랜 시간이 걸릴 수 있으니 적절한 값을 설정해야 한다.

 

더보기

<z = x2 + y2에서 x가 1에서 1+Δx, y가 2에서 2+Δy로 바뀔 때 이 함수의 최솟값에 해당하는 벡터 (Δx, Δy)를 구하는 방법>

 

함수 z를 x, y 각각에 관해 편미분하면 2x, 2y이다.

x = 1, y = 2였으므로 편미분한 함수에 해당 값을 대입하면 된다.

따라서, (Δx, Δy) = -η(2, 4)가 된다.

 

경사하강법 사용하기

함수 f(x,y)의 최솟값인 점을 찾는 방법 (이변수 함수의 경사하강법)

  1. 가장 가파른 기울기에 해당하는 방향으로 조금씩 이동하면서 점(위치)을 찾는다.
  2. 1번 절차를 반복해 그래프의 바닥, 즉 함수의 최솟값인 점에 도달하는 것을 확인한다.

 

신경망에서의 경사하강법

신경망의 비용함수가 최솟값이 되도록 하는 파라미터(가중치와 편향)를 모두 미분해서 결정하는 것은 매우 어렵기에 '경사하강법'을 신경망에서 비용함수의 최소화 방법으로 사용한다.

 

미분 가능한 함수 f(x1, x2, ... , xn)에서 변수에 차례로 x1+Δx1, x2+Δx2, ... , xn+Δxn이라고 작은 값을 더해 변화시켰을 때 함수 f가 최솟값이려면 다음 함수가 성립한다.

(η는 작은 값을 갖는 양의 상수)

이때, (∂f/∂x1, ∂f/∂x2, ... , ∂f/∂xn)함수 f의 '기울기'라고 한다.

 

 

<64개의 학습 데이터를 가진 '필기체 숫자 식별 신경망'에 적용한 예시>

 

비용함수 CT = C1 + C2 + ... + C64를 위의 경사하강법의 기본식에 대입하면 다음처럼 표현할 수 있다.

 

w, b는 가중치와 편향을 나타내며, 양의 상수 η는 학습률이다.

 

위의 식을 이용하면 컴퓨터에서 CT가 최솟값이 되는 가중치 및 편향을 계산할 수 있다.

 

현재 변수의 위치(w211, ... , w311, ... , b21, ... , b31, ...)에 위 식의 좌변에서 구한 변위 벡터를 더해 새로운 위치(w211+Δw211, ... , w311+Δw311, ... , b21+Δb21, ... , b31+Δb31, ...)를 구하는 계산을 반복하여 최솟값이 되는 가중치 및 편향을 계산할 수 있으며, 이는 각 파라미터를 모두 미분해서 결정하는 방법과 비교했을 때 컴퓨터가 계산하기 쉽다.

 


 

 

위 식을 계산하는 방법은 두 가지가 있다.

먼저, 복잡한 계산을 수행할 경우 아래와 같다.

 

미분 지옥

정해야 할 파라미터(가중치와 편향)가 47개라면, 위 식에서의 기울기 성분도 47개가 된다.

다수의 기울기 성분을 계산하는 것은 어려운 일이다.

 

<기울기 성분 중 하나인 ∂CT/∂w211 계산 예시>

 

k 번째 이미지에서 얻은 출력과 정답 데이터의 제곱오차 Ck를 편미분의 연쇄법칙에 대입해 변형해서 계산한다.

 

 

위의 식을

CT = C1 + C2 + ... + C64에 대입하면 다음과 같다.

 

 

 

각 미분의 항에 '=0'을 붙여 미분방정식으로 만들어 계산하면 편미분 결과를 가중치와 편향의 식으로 표현할 수 있으나 그 과정은 매우 복잡하고 어려운 작업이 될 것이다.

 

더보기

<기울기 계산 단순화하기>

 

위의 두 식에서 확인할 수 있듯이

기울기 성분은 학습 결과 하나하나의 단순한 합이다.

 

즉, 비용함수 CT의 편미분은 학습 결과 각각에서 얻은 미분의 합으로 구성되어 있다. 이러한 특성을 이용하여

1. 제곱오차 C의 편미분을 구한 결과에

2. 이미지 데이터(학습 데이터)를 대입한 후

3. 학습 결과 전체를 더하면

 

64번의 편미분 계산이 한 번의 편미분 계산으로 끝날 수 있다.

 

이처럼 '학습 데이터의 합'이라는 특성을 이용하여 미분 횟수를 크게 줄일 수 있다.

 

그래서, 오차역전파법이 고안되었다.

 

오차역전파법 (Backpropagation)

경사하강법은 다변수 함수의 최솟값을 찾는 현실적인 방법을 제공하지만,

변수, 파라미터가 함수와 복잡하게 얽혀있는 신경망이라면 경사하강법 또한 계산이 어려워져 사용할 수 없다.

이를 해결하기 위해 등장한 것이 오차역전파법이다.

 

오차역전파법은 복잡한 미분 계산을 '수열의 점화식'으로 대체한다.

이 점화식에는 유닛의 오차가 사용되는데, 유닛의 오차를 다음과 같이 정의한다.

 

 

더보기

lj의 의미와 유닛의 오차>

 

'유닛의 오차'라고 하는 이유는 유닛의 가중 입력 zlj이 제곱오차에 미치는 변화율을 나타내기 때문이다.

만약, 신경망과 학습 데이터 사이의 관계가 좋다면 최솟값이 되는 조건에서 변화율은 0이 될 것이고, 유닛의 오차 δlj도 0이 된다.

 

즉, δlj은 이상적인 상태와의 차이를 나타낸다고 볼 수 있다.

 

 

가중치와 편향의 제곱오차를 미분해서 δlj로 표현하기

 

<∂C/∂w211를 δlj로 표현하기>

 

편미분의 연쇄법칙을 이용하면 다음처럼 표현할 수 있다.

 

은닉층의 관계식의 일부인 z21 = w211x1 + w212x2 + ... + w2112x12 + b21를 이용하면 다음 식을 도출할 수 있다.

 

 

δlj의 정의를 이용하면 다음과 같이 ∂C/∂w211를 구할 수 있다.

 

 

참고로 입력층에서 출력과 입력은 같으므로 x1 = a11로 바꿀 수 있다.

 

 

<∂C/∂b21를 δlj로 표현하기>

 

위의 계산과 비슷하게 b21에 관한 편미분을 구할 수 있다.

 


 

위의 예시를 통해 δlj를 일반화한 공식을 얻을 수 있다.

 

 

따라서, 유닛의 오차 δ를 구하면 경사하강법 계산에 필요한 

의 편미분도 구할 수 있다.

 

아래와 같은 과정으로 비용함수 미분의 어려움을 해결할 수 있다.

 

 

신경망에서의 오차역전파법

 

유닛의 오차 δlj를 구하면

에서 기울기 성분을 구할 수 있다.


활성화 함수를 a(z)로 하고, 출력층의 층 번호를 L로 하면 연쇄법칙을 이용한 다음 공식을 구할 수 있다.

 

 

다음의 예시를 통해 δlj를 구해보자.

 

<'필기체 숫자 식별 신경망'에서 유닛의 오차 δ31를 구하는 예시>

 

먼저, 제곱 오차 C를 a31로 편미분한 결과는 다음과 같다.

 

이 식을 위에서 구한 공식에 대입하면 유닛의 오차 δ31를 얻을 수 있다.

 

또한 활성화 함수인 시그모이드 함수 σ(z)의 공식을 적용하면 a′(z_1^3)를 좀 더 구체적으로 표현할 수 있다.

즉, 다음과 같은 식을 얻을 수 있다.

 


 

은닉층 δlj의 '역' 점화식

유닛의 오차 δlj는 층 유닛의 오차 δl+1j와 간단한 관계식으로 연결되어 있다. 따라서 δl+1j을 이용해 δlj을 구하는 '역' 점화식도 성립할 수 있다.

 

<'필기체 숫자 식별 신경망'에서 δ21에 대한 예시>

 

먼저 편미분의 연쇄법칙을 이용하면 δ21에 관한 다음 식을 구할 수 있다.

위 식을 부분별로 살펴보면 다음처럼 나눠서 계산할 수 있다.

 

우선, ∂C/∂z31과 ∂C/∂z32은 유닛의 오차 공식을 이용해 다음처럼 구할 수 있다.

∂z31/∂a21와 ∂z32/∂a21도 은닉층의 관계식을 이용해 다음처럼 구할 수 있다.

∂a21/∂z21는 활성화 함수 a(z)를 이용해 다음처럼 구할 수 있다.

위에서 구한 세 식들을 대입한 뒤, 정리하면 다음과 같은 관계식을 얻을 수 있다.

 

δ22와 δ23의 계산 과정도 같다. 따라서 다음처럼 관계식을 정리해 일반화할 수 있다.

이렇게 층2 δ2i와 층3 δ3j의 관계를 확인하였다.


이는 다시 층 l과 층 l+1의 관계식으로 일반화할 수 있다.

 

은닉층의 δlj 값을 미분하지 않고 얻기

위의 식을 이용하면 층 3 δ3j 값을 통해 층 2 δ2i의 값을 미분하지 않고 구할 수 있다. 이것이 바로 오차역전파법이다.

즉, 출력층에 있는 유닛의 오차만 구하면 다른 유닛의 오차는 편미분할 필요가 없다.

 

보통 층의 번호가 높은 방향으로 값을 정해나가는 일반적인 수열과는 달리 오차역전파법은 층의 번호가 낮은 방향으로 값을 정해간다.

역전파에서 '역'이라는 단어를 사용하는 이유이다.

 

<'필기체 숫자 식별 신경망'의 δ22를 δ31, δ32로 표현한 예시>

 

이때, 활성화 함수로 시그모이드 함수 σ(z)를 사용하면 최종 δ22를 다음과 같이 구할 수 있다.

미분 계산 없이 δ22를 구할 수 있다는 것을 확인하였다.

 


 

지금까지 살펴본 오차역전파법의 알고리즘을 정리하면 다음과 같다.

 

  1. 학습 데이터를 준비한다.
  2. 각 유닛의 가중치와 편향의 초깃값을 설정한다. (초깃값은 일반적으로 정규분포 난수를 이용하며, 학습률 η를 적절한 작은 값을 갖는 양의 상수로 설정한다.)
  3. 유닛의 출력값제곱오차 C를 계산한다. (가중 입력값 z, 활성화 함숫값 a, 제곱오차 C를 계산한다.)
  4. 오차역전파법으로 각 층 유닛의 오차 δ를 계산한다. (먼저, 출력층 유닛의 오차 δ를 계산한 뒤, 은닉층 유닛의 오차 δ를 계산한다.)
  5. 유닛의 오차에서 제곱오차 C의 편미분을 계산한다.
  6. 비용함수 CT와 그 기울기 ∇CT를 계산한다. (3~5의 결과를 모든 데이터에 각각 추가한 후 전체를 더해서 비용함수 CT와 그 기울기 ∇CT를 구한다.)
  7. 6에서 구한 기울기로 가중치 및 편향값을 갱신한다. (경사하강법을 이용하여 가중치와 편향값을 갱신한다.)
  8. 3~7을 반복한다. (비용함수 CT가 충분히 작다고 판단될 때까지 반복한다.)

 

 


 

이처럼 경사하강법은 다변수 함수의 최솟값을 찾는 현실적인 방법을 제공한다.

하지만 변수, 파라미터가 함수와 복잡하게 얽혀 있는 신경망이라면 경사하강법 또한 계산이 어려워져 사용할 수 없다.

이를 해결하기 위해 등장한 오차역전파법에 대해서도 살펴보았다.

 


 

신경망에서 비용함수 CT의 최솟값을 찾기 위해서는 3가지 방법을 이용할 수 있다.

 

- 최솟값을 구할 수 있는 조건을 갖는 방정식

 

- 경사 하강법 : 기울기를 이용해 조금씩 이동한다.

기울기

 

- 오차역전파법 : 편미분값을 점화식으로 구한다. 경사하강법을 해결하는 방법의 하나.

 

 


 

 

 

<처음 배우는 딥러닝 수학> 의 내용을 바탕으로 정리한 글입니다.