레이블이 Back-propagation인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Back-propagation인 게시물을 표시합니다. 모든 게시물 표시

2014년 8월 27일 수요일

신경망 회로에서 역전파를 통한 학습


신경망 회로에서 역전파를 통한 학습

Learning through back-propagation in 3-layers neural network

 layer가 3개인 신경망 회로(이하 NN)는 input, hidden, output layer로 구성됩니다. 학습 단계는 output layer에서 원하는 출력을 얻기 위해 hidden layer가 활성화 되도록 학습하는 것이 목적입니다.

 예를 들면, 어떤 물체가 연필인지 아닌지를 구분하는 NN을 만들고자 할 경우에 loss function은

\(loss = 연필 - output\)

이 되어야 합니다.

 convex optimization 문제로 만들기 위해 \(loss = (연필 - output)^2\)으로 놓고 미분하면 \(\frac{\delta loss}{\delta output} = 2(연필 - output)\)이 됩니다.

 그러면 NN이 원하는 출력 값과 얼마나 다른 값을 출력 하는지를 알 수 있습니다. 출력값의 차이가 크다면 input->hidden->output layer로 이르는 뉴런들이 올바르게 활성화될 수 있도록, 오차만큼 역전파(Back-propagation)을 통해서 weight값을 고쳐줍니다. 이 과정의 반복을 학습이라 부릅니다. 그림을 보면 이해가 쉽습니다.

  • Feed-forward 과정입니다. 입력 뉴런과 weight의 값들의 합이 다음 layer의 입력으로 들어가고 activation function의 임계치에 따라서 활성화되는지 그렇지 않은지가 결정됩니다. activation function은 과거에는 모두 sigmoid function을 사용하였으나 최근에는 경향이 좀 바뀌었습니다. 추후에 언급할 기회가 있을 거라고 생각합니다.
  • Backward propagation의 과정입니다. loss function의 값은 곧바로 weight를 학습하는데 사용할 수가 없기 때문에, 다시 말하면 출력값이 원하는 값과 다르게 나오는데 영향을 미친 뉴런이 어떤 것이고 얼마 만큼의 가중치를 가졌는지 알 수 없기 때문에 미분치를 역으로 전파시킵니다. 그림에서 \(\delta\)는 이 미분치를 의미하고 chain rule로 입력 layer까지 전파됩니다. 이제 weight를 갱신하고 다시 이 과정을 반복합니다. 이때, \(\eta\)는 learning rate으로 부르는데 학습의 시간을 결정합니다. 크게 설정하면 빠르게 학습되지만 over-shoot이 생겨서 오차 범위에 정착하기가 힘들기 때문에 수렴하는 속도를 보고 변경하는 것이 일반적입니다.











원본 이미지: http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

 신경망의 기본 개념은 인간의 뉴런과 시냅스를 모사한다는 거창한 말에 비해서 이론적으로 어렵거나 구현이 까다롭지 않습니다.(물론 layer의 수가 적을 때의 이야기 입니다. 영상에 적용하는 convolutional neural network은 이보다 엄청나게 많은 수의 뉴런과 weight가 존재하기 때문에 구현 자체가 어려운 경우가 많습니다.)

 학습은 방법보다는 어떤 응응 분야에 적용할 것 인지를 염두에 두어야 합니다. 왜냐하면 학습 데이터에 너무나 잘 들어맞는(over-fitting) NN을 가지고 일반적인 데이터에 적용하면 분류 혹은 검출률이 낮을 수 있기 때문입니다. 반대로 적당히 학습되어있는 경우(under-fitting)엔 반대의 경향이 나타날 수 있습니다. 그래서 학습할 목적에 따라 오검출율(FAR-False Alarm Rate)이 얼만큼 허용 되는지 판단해야 할 수 있습니다.

 C# 예제를 게시한 MSDN Magazine이 있어서 이 곳을 소개합니다. 참고하시면 좋을 것 같습니다.

 http://msdn.microsoft.com/en-us/magazine/jj658979.aspx