티스토리 뷰

Neural Network

How can we learn W1, W2, B1, B2 from training data?

위 그림처럼 여러 개의 입력이 발생할 수 있는데, 이들 입력을 행렬을 이용해 하나로 통합하는 과정을 보여주는 그림이다.


이제 그럼 어떻게 하면 학습을 시킬 수 있을까?

앞에서 배웟던 gradient descent 알고리즘을 이용해 학습하면 된다.


Backpropagation




NN은 여러 개의 layer를 두어서 복잡한 문제도 해결할 수 있도록 구성된다. 첫 번째 layer를 input layer, 가운데에 파란색 층을 hidden layer, 그리고 마지막은 output layer이라고 한다. 인공지능 초기에는 input과 output밖에 없었지만 복잡한 것까지 해내도록 하다보니 은닉층이 생겼다. 그래서 그 둘을 구분하기 위해 input 과 output밖에 없는 신경망은 그냥 신경망이라 부르고, hidden layer까지 있는 신경망을 심층 신경망이라 한다. 우리가 사용하는 신경망은 심층 신경망이다.


hidden layer은 단점이 존재하는데 말 그대로 숨겨진 것이기 때문에 내부를 파악하기 어려운 단점이 존재하고, 어떠한 방식으로 동작하는지조차 알 수 없을 때도 있다.



Backpropagation에 대해서 설명하기 전에 forward propagation에 대한 설명을 먼저 해보면, forward propagation은 앞에서부터 뒤로 진행하면서 W와 b를 바꾸어 나가는 것을 말한다. Backpropagation은 반대로 뒤부터 앞으로 거꾸로 진행하면서 바꾸어 나가는 것을 말한다.


좀 더 설명해 보자면 NN에 포함된 여러 개의 layer중에서 결과에 가장 큰 영향을 주는 것은 뒤쪽 layer가 되고, 이 layer들부터 수정해 나가는 것이다. 따라서 많은 layer중에서 뒤쪽에 잇는 일부만 수정을 하는 것이 훨씬 더 좋은 예측이 될 수 있다.


Back Propagation(chain rule)



위 그림은 w, x, b, g의 변화할 때, f가 어느 정도 변화하는지 구하는 것을 보여주는 그림이다. f=wx+b중에서 wx를 g라고 치환해보겠다.(여기서 w와 x는 input layer, g는 hidden layer, f는 output layer로 생각할 수 있다)


먼저 g를 미분해 보겠다. x로 미분하는 것은 x가 1 변화할 때, g의 변화량을 의미한다. w로미분하는 것은 w가 1 변화할 때, g의 변화량을 의미한다.


  w = -2, x = 5  -->  g = -2 * 5 = -10
  w = -1, x = 5  -->  g = -1 * 5 = -5      <-  w가 1 변할 때 x(5)만큼 변화
  w = -2, x = 6  -->  g = -2 * 6 = -12    <-  x가 1 변할 때 w(-2)만큼 변화

  g를 x로 미분하면 w가 되고, w로 미분하면 x가 된다.


f를 미분할 수 있는 값은 인접한 g와 b, 두 가지가 있다. g로 미분하는 것은 g가 1 변화할 때, f의 변화량을 의미한다. b로 미분하는 것은 b가 1 변화할 때, f의 변화량을 의미한다.

  g = -10, b = 3  -->  f = -10 + 3 = -7
  g =   -9, b = 3  -->  f =   -9 + 3 = -6     # g가 1 변할 때, 1만큼 변화
  g = -10, b = 4  -->  f = -10 + 4 = -6     # b가 1 변할 때, 1만큼 변화

  f를 g나 b로 미분하면 1이 된다.


이번에는 편미분을 해 보겠다. w가 1 변화할 때, f가 어떻게 바뀌는지 알고 싶다. 그럴려면 w가 바뀔 때 인접한 g가 바뀌는 값과 g가 바뀔 때 인접한 f가 바뀌는 값을 알면 된다.

  δf/δw(f를 w로 미분) = δf/δg(f를 g로 미분) * δg/δw(g를 w로 미분) = 1 * x = x(5)

  w = -2, x = 5, b = 3  -->  f = -2*5 + 3 = -7
  w = -1, x = 5, b = 3  -->  f = -1*5 + 3 = -2   # w가 1 변할 때 5만큼 변화


x가 변화할 때 f가 어떻게 바뀌는지도 알아보겠다.

  δf/δx(f를 x로 미분) = δf/δg(f를 g로 미분) * δg/δx(g를 x로 미분) = 1 * w = w(-2)

  w = -2, x = 5, b = 3  -->  f = -2*5 + 3 = -7
  w = -2, x = 6, b = 3  -->  f = -2*6 + 3 = -9   # x가 1 변할 때 -2만큼 변화

위 설명들이 backpropagation의 동작 원리이다. 위 동작 원리만 이해한다면 은닉층이 2개보다 더 많아도 얼마든지 학습할 수 있다.

Back propagation in TensorBoard


아래 그림은 back propagation을 텐서보드로 나타낸 것이다.


복잡해 보일 수 있지만, TensorBoard를 이용해 내부를 살펴보는 가장 좋은 방법이다.







---------------------------------------------------

이 글은 모두를 위한 딥러닝을 보고 정리한 글입니다.










'AI > 딥러닝(sung kim)' 카테고리의 다른 글

Neural Net for XOR  (0) 2018.08.23
XOR 문제 딥러닝으로 풀기  (0) 2018.07.23
mnist data set  (0) 2018.07.23
training/test data set, learning rate, normalization  (0) 2018.07.23
learning rate, standardization, normalization  (0) 2018.07.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함