11_Backpropagation 원리

2019-08-20 이민예

Hints:

Forward Propagation:

  • You get X

  • You compute A=σ(wTX+b)=(a(1),a(2),...,a(m1),a(m))A = \sigma(w^T X + b) = (a^{(1)}, a^{(2)}, ..., a^{(m-1)}, a^{(m)})

  • You calculate the cost function: J=1mi=1my(i)log(a(i))+(1y(i))log(1a(i))J = -\frac{1}{m}\sum_{i=1}^{m}y^{(i)}\log(a^{(i)})+(1-y^{(i)})\log(1-a^{(i)})

Here are the two formulas you will be using:

미분에 대한 이해

미분은 입력 변수 부근의 아주 작은(0에 매우 가까운) 변화에 대한 해당 함수 값의 변화량이다.

위에 수식을 기술적인 관점에서 보면, 왼쪽에 있는 분수 기호(가로바)는 오른쪽 분수 기호와 달리 나누기를 뜻하지는 않는다. 대신 연산자 d/dx 가 함수 f에 적용 되는 미분 함수를 의미 하는 것이다. 위의 수식을 이해하는 가장 좋은 방법은 h가 매우 작으면 함수 f는 직선으로 근사(Approximated) 될 수 있고, 미분 값은 그 직선의 기울기를 뜻한다.

다시말해, 만약 x=4, y=−3 이면 f(x,y)=−12 가 되고, x에 대한 편미분 값은 ∂f/∂x=−3 으로 얻어진다. 이말은 즉슨, 우리가 x를 아주 조금 증가 시키면 전체 함수 값은 3배로 작아진다는 의미이다. (미분 값이 음수이므로)

미분은 각 변수가 해당 값에서 전체 함수(Expression)의 결과 값에 영향을 미치는 민감도와 같은 개념이다

Gradient 의미

gradient의 방향은 함수값이 커지는 방향이다. 따라서 이것을 최대점을 찾는 데에 사용할 수 있다. 앞서 말했듯이, 그라디언트 ∇f는 편미분 값들의 벡터이다. 따라서 수식으로 표현하면 다음과 같다:

f=[f/x,f/y]=[y,x]∇f=[∂f/∂x,∂f/∂y]=[y,x]

그라디언트가 기술적으로 벡터일지라도 심플한 표현을 위해 "X에 대한 편미분" 이라는 정확한 표현 대신 “X에 대한 그라디언트” 와 같은 표현을 종종 쓰게 될 예정이다.

계산그래프

사과 가격이 오르면, 최종 금액에 어떠한 영향을 미치는지 알고싶다. 이를 위해, 사과 가격에 대한 지불 금액의 미분을 구하는 문제이다. 이 미분 값은 2.2 이고, 즉 사과 1원이 오르면 최종 금액은 2.2원 오른다.

궁극적으로, 우리는 입력 x,y,z...에 대한 f의 그라디언트에 관심이 있으며 이를 위해 역전파를 한다.

역전파를 하는 이유

순전파를 할 경우, 한 노드 b가 최종 결과인 e에 미치는 영향만 알 수 있다. 반면, 역전파를 할 경우, e에 미치는 각 노드의 영향 (∂e/∂a, ∂e/∂b)을 한번 에 알수 있기 때문에, 순전파가 미분을 한다는 점에서 비슷해 보일지라도 역전파를 사용하는 이유이다.

역전파 예제 #1

다음 식에 a=2, b=1를 대입한 후, 계산 그래프를 그려보자.

e=(a+b)(b+1)e=(a+b)∗(b+1)

a가 조금 변화하면, c가 어느정도 바뀔까?

이를 위해, "간선 위 미분" 에 대해 알아야 한다. 덧셈, 곱셈 노드의 gradient을 참고하여, 간선을 추가한다.

a는 e에 직접적이진 않지만, 간접적으로 영향을 미친다. 이렇게 간접적으로 영향을 미치는 a가 e에 대해 얼만큼의 영향을 끼치는 지 알고 싶으면 간선의 미분연쇄법칙을 통해 알 수 있다. a가 변화했을 때 c로 1만큼의 변화를 일으키고, c는 e에 2만큼에 변화를 일으키면 총 a는 e에 대해 1*2 만큼의 변화를 불러온다. 즉, 아래 표와 같이, a는 1이 증가할 때, e는 2가 증가한다.

a

b

c

d

e

2

1

3

2

6

3

1

4

2

8

4

1

5

2

10

b는 1*2 + 1*3 즉 5만큼의 변화를 불러온다. 연쇄법칙에 의해, 한 간선에 있을 경우 곱셈을 다른 간선일 경우 덧셈을 한다. 하지만, b는 a와 같이 5라고 명확하게 나오지 않는다. 그 이유는 e는 b에 대한 2차식이기 때문에, 단순히 1이 증가할 때, b의 미분값은 계속 변화하기 때문이다.

a

b

c

d

e

2

1

3

2

6

2

2

4

3

12

2

3

5

4

20

따라서, backpropagation은 보다 큰 최종 출력 값을 얻도록 게이트들이 자신들의 출력이 얼마나 강하게 증가하길 원하는지 또는 감소하길 원하는지 서로 소통하는 것으로 간주할 수 있다.

발표자료

https://drive.google.com/file/d/1hloUxTHMxX8qPh626es9ovdUNBv4X-9F/view?usp=sharing

  • 역전파 숙제 계산 그래프로 푼 예시

  • 복잡해보이지만, 간단한 내용, 빠르게 설명

  • 귤 하나를 더 사면 얼마나 더 내야할까?

  • 독립변수 귤의 갯수에 대한 구매 가격의 변화량을 구하는 것이며

  • => 귤의 갯수에 대한 구매가격의 미분으로 답을 찾을 수 있음.

  • 이 식을 계산그래프로 표현 이와 같다.

  • 먼저 간선 위에 미분을 표시하면, 직접적인 영향에 대해 알 수 있다.

  • 그리고 귤 갯수 부터 시작하여 연쇄법칙을 적용하면, 최종적으로 귤 갯수가 최종가격에 미치는 영향을 알 수 있다.

  • 귤 하나를 더 사려면 165원을 냄을 알 수 있다.

  • 사과 가격이 2배가 오를 때도 동일하다.

  • 하지만, 순전파를 할 경우, 한 독립 변수에 대해서만 알 수 있다.

  • 신경망에서 사용하는 파라미터의 갯수는 몇만개에 달하기 때문에, 이를 한꺼번에 구하기 위해 역전파를 사용한다.

  • 만약 500원 정도에 사과랑 귤을 사고 싶다고 하자.

  • 오차를 흘려보내면, 오차에 대한 각 파라미터의 영향력을 알 수 있다.

  • 미분값의 반대방향으로 가는 것이 가중치를 업데이트 하는 것이 오차 함수를 최소화 하는 방향이기떄문에, 빼어서 갱신해야하고, 이를 경사하강법이라고 한다.

  • 따라서, 사과갯수는 1.956개로 조금 감소하고, 사과 가격은 99.99912 정도로 감소하고 하면..등등하면 533.98원쯤에 사과와 귤을 사갈 수 있다.

  • 이러한 계산 그래프 개념을 다층 퍼셉트론에 적용한 것도 동일하다.

  • 교재에서 수식으로 설명이 되어있어서 조금 어려웠는데, 계산 그래프를 사용하면, 더 쉽게 이해할 수 있다.

  • 들어주셔서 감사.

Optimization

[ Reference ]

https://simonjisu.github.io/deeplearning/2017/12/15/numpywithnn_4.html

https://colah.github.io/posts/2015-08-Backprop/

http://aikorea.org/cs231n/optimization-2/

https://google-developers.appspot.com/machine-learning/crash-course/backprop-scroll/?hl=ko

부록

합성함수 y=f(g(x)) 의 도함수

y=f(g(x))g(x)y' = f'(g(x))g'(x)

Last updated