일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- neural network
- vapnik chervonenkis
- backpropagation
- machine learning
- matrix multiplication
- gradient descent
- Linear algebra
- elimination
- VC dimension
- Today
- Total
AI / ML
[ML] BackPropagation 수식 유도 본문
이번 포스팅에서는 Andrew Ng의 Coursera-Machine Learning 강의를 참고하여
Neural Network의 학습 알고리즘인 BackPropagation의 수식을 유도해보겠습니다.
BackPropagation Algorithm에서는 cost function이 최소가 되도록 하는 weight값들을 찾는데
이 때 gradient descent가 사용됩니다.
학습하려는 변수는 input layer와 hidden layer 사이에 있는 weight값들과 hidden layer와 output layer 사이에 있는 weight값들 입니다.
1. Weights between hidden layer and output layer
우선 hidden layer와 output layer사이에 있는 weight 값들을 학습하기 위해서는 gradient 값을 계산해야 합니다.
gradient 값을 계산하기 위해 Neural Network 모델을 아래와 같이 나타내보겠습니다.
input layer, hidden layer, output layer는 각각 1개씩 있으며 각 layer당 node의 수는 모두 똑같이 n개(bias 제외)라고 가정하겠습니다.
또 모델에서 z->a로 갈때 activation 함수로 sigmoid 함수를 사용한다고 가정하겠습니다.
weight 값을 나타내는 세타의 위 첨자는 layer index를, 아래 첨자는 각각 output node index와 hidden node index를 나타냅니다.
문제를 간단하게 하기 위해 하나의 training data에 대해 cost function을 생각해보도록 하겠습니다.
cost function은 forward propagation한 결과 값에 정답(label)을 뺀 값의 제곱의 합으로 나타낼 수 있습니다.
미분했을 때의 편의 상 각각의 제곱에 1/2를 곱해줍니다.
j번째 hidden node와 k번째 output node 사이의 weight값을 위 그림에서 세타2(k,j)라고 나타냈습니다.
이제 cost function를 세타2(k,j)에 대해 미분해보겠습니다.
세타2(k,j)는 cost function term들 중 k번째 term에만 영향을 미칩니다.
세타2(k,j)는 k번째가 아닌 나머지 term에는 영향을 미치지 않으므로
나머지 term을 세타2(k,j)에 대해 미분을 하면 0이 되어 사라집니다.
그래서 아래 첫 문장에서는 J(세타)의 k번째 term을 미분한 값을 썼습니다.
위에서 gradient 값을 구했으니 이제 세타2(k,j)를 gradient descent를 이용하여 아래와 같이 업데이트할 수 있습니다.
직관적으로 보면 세타2(k,j)의 값은 k번째 output node에서의 error term인 델타3(k)에 j번째 hidden node에서 activation값인 a2(j)을 곱한 값에
비례하여 업데이트가 됩니다.
2. Weights between input layer and hidden layer
이번에는 input layer와 hidden layer 사이에 있는 weight들을 학습하기 위한 gradient값을 계산해보도록 하겠습니다..
gradient값을 계산하기 위해 neural network 모델을 아래와 같이 나타내보겠습니다.
i번째 input node와 j번째 hidden node 사이의 weight값을 위 그림에서 세타1(j,i)라고 나타냈습니다.
cost function은 처음에 사용한 식과 똑같습니다.
그럼 cost function을 세타1(j,i)에 대해 미분해보겠습니다.
1.에서와는 달리 세타1(j,i)는 a2(j)의 값에 영향을 미치므로
결국 cost function의 모든 term에 영향을 미치게 됩니다.
따라서 cost function의 모든 term이 사용되어
아래 수식의 첫 번째 문장에서는 시그마가 사용되었습니다.
1.에서와 마찬가지로 위에서 구한 gradient 값을 이용하여 세타1(j,i)을 아래와 같이 업데이트할 수 있습니다.
직관적으로 보면 세타1(j,i)의 값은 j번째 hidden node에서의 error term에 i번째 input node에서의 activation값(input 값)을 곱한 값에
비례하여 업데이트가 됩니다.
3. Backpropagation using batch and stochastic gradient descent
backpropagation algorithm을 적용하는 방법을 batch와 stochastic 두가지 방법으로 나눠서 설명해보겠습니다.
먼저 batch란 "한번 parameter를 update시킬 때 모든 training data를 보고 시키는 것"을 뜻합니다.
반면 stochastic은 "하나의 training data를 볼고 나서 parameter를 새로 update 시키는 것"을 뜻합니다.
stochastic gradient descent를 online learning이라고도 부릅니다.
아래는 batch gradient descent와 stochastic gradient descent에 따라 작성된 backpropagation 알고리즘 입니다.