5-1 Cost function and Backpropagation 본문

ML & DL/Coursera-ML

5-1 Cost function and Backpropagation

eremo2002 2019. 1. 18. 13:50

뉴럴넷을 학습시키는 방법에 대해 알아본다.











이전에 배웠던 내용이지만, 만약 Binary classification 문제를 풀고자 한다면 마지막 레이어의 unit 하나만 있으면 된다.

그리고 class 수가 K 분류 문제를 풀고자 한다면 마지막 레이어의 unit 수는 K개가 있으면 된다. 따라서 h(x) K차원의 벡터가 된다.










뉴럴넷의 Cost function 정의하기 로지스틱 회귀에서 우리가 정의했던 cost function 다음과 같다.

앞에서 Loss값을 구하고 뒤에서 Regularization 이용하여 파라미터 θ 값이 작아지도록 하면서 균형을 유지하도록 하였다.









뉴럴넷에서 h(x) K차원의 벡터이고 h(x)_i output 레이어의 i번째 unit이라고 cost function J(θ) 다음과 같이 정의된다.

 

먼저 regularization term 아닌 앞부분을 보면

하나의 sample 집어넣으면 마지막 레이어에서 K개의 h(x)값이 나오게 된다. K개의 h(x)값을 더한 것이 계산한 Loss 것이고 이러한 과정이 m개의 sample에서 이루어지므로 시그마가 2개가 것이다.

 

 

Regularization term 보면 시그마가 3개나 있다.

s Layer l에서 존재하는 unit 수다. (bias 제외)

만약 어떤 레이어 l unit 5개이고 다음 레이어 (l + 1) unit 4개라면 레이어 사이에 존재하는 파라미터 θ 대한 행렬의 크기는 (다음 레이어의 unit ) x (현재 레이어의 unit +1) 된다현재 레이어의 unit 수에 +1 하는 이유는 bias까지 포함하기 위함이다































뉴럴넷의 cost function 최소화하는 방법에 대해 알아본다.













뉴럴넷의 Cost function J 위와 같이 정의하였다. 결국 Cost function으로 하고자 하는 것은 똑같다. J(θ) 최소화되도록 하는 파라미터 θ 찾는 것이 목표이며 그걸 찾기 위해 Gradient descent 알고리즘을 사용하면 J(θ) 값과 파라미터에 대한 J(θ) 편미분 값을 구해서 파라미터 θ 업데이트해주면 된다.











우선 트레이닝 데이터가 하나만 있다고 가정한다.

일단 J(θ)값을 구하기 위해서 입력을 뉴럴넷에 넣고 출력 레이어에서 나오는 h(x) target값과 비교하여 cost 값을 구해야 한다.

그렇게 하기 위해 하나의 sample 입력 레이어에 unit 넣어 뉴럴넷을 통해 Forwad propagation시킨다.










이제 cost값을 구했으니 미분값을 구해야 한다. 뉴럴넷에선 역전파 알고리즘을 사용하여 미분값을 구하게 된다.

우선 노드에 대한 델타 값을 계산하는 것이 필요하다. 델타는 l 레이어에서 j라는 노드가 얼마나 error 냈는지 나타낸 값이다.

델타 값이 크다면 해당 노드가 cost 값에 그만큼 많이 기여했을 것이다.

 

 

4개의 unit 있는 출력 레이어에서 시작하여 델타값을 구해보자. 값은 활성화된 노드 a^4에서 yi 것과 같다. a^4 출력 레이어의 노드의 값이므로 h(x) 있다. 다시 말해, 델타^4 값은 출력 레이어의 유닛과 target 사이의 차이가 된다.











그리고 델타는 벡터화 시켜서 편하게 구할 있다. 델타, a, y 모두 class K k차원의 벡터가 된다.

이렇게 출력 레이어에서 델타^4 대한 값을 구했으면 이제 이전 레이어에서 델타 값을 구해야 한다.













델타^4 구했으니 델타^3 구하기 위해선 다음과 같은 식을 통해 계산할 있다.

델타^3 구하기 위해 θ^3 transpose 델타^4 곱한 g'(z) 곱한다.

g' sigmoid 미분이다.  g'(x) = g(x) * (1 - g(x))이므로 뒤에 곱해지는 g'(z) a 1-a 곱으로 표현할 있다.

이런 식으로 출력 레이어부터 거꾸로 델타 값을 계산할 있다. 그리고 입력 레이어는 입력 값이 들어오기 때문에 델타가 존재하지 않는다.











일단 Regularization 제외하고 생각해보면 뉴럴넷에서 결국 우리가 구해야 하는 cost function J 편미분 값은 다음과 같이 정리할 있다.










이제 트레이닝 set m개일 역전파 알고리즘이 어떻게 동작하는지 보자

Input 레이어를 제외한 레이어에서 델타 값을 구해나가면 된다. H(x) 계산되기 전에 처음 델타는 0 것이다.

앞에서 봤듯이 결국 델타는 우리가 cost function 편미분 값을 구하기 위해 사용된다.










이제 m개의 샘플에 대한 편미분 값을 구하기 위해 이러한 For문을 반복한다.

처음에 입력 x 받고, forward propagation으로 활성화 a 계산해가며 출력 레이어까지 간다.

출력 레이어에서 나온 h(x) = a^L target y 비교하여 델타^L 구한다. 출력 레이어에서 델타를 구했으니 역전파로 입력 레이어 전까지 델타값을 구한다. 그리고 이렇게 계산되는 편미분 값을 저장해둔다. (이부분은 빨간식 처럼 벡터화시킬 있음)











이제 m 샘플에 대한 델타 값을 구해놨으므로 for문을 나와 D 계산한다.

j=0 bias항을 뜻하기 때문에 람다항이 없다.

=0 아닐 때는 regularization 넣은 값으로 구한다.

증명은 하지 않지만 결국 이렇게 구한 D 값이 우리가 구하고자 했던 cost function에서 파라미터 θ 대한 편미분 값이다.

이제 우리는 이렇게 구한 미분계수 값을 사용해서 learning rate 가지고 파라미터 θ 업데이트 시킬 있을 것이다.






























Backpropagation 대해 알아본다.













Input부터 시작해서 output layer에서 출력값을 내기까지 뉴런에서 이전 레이어로부터 값을 받아 더한 활성화 함수에 넣어준 값을 다음 레이어로 전달하는 Forward Propagation 과정을 거쳤다. 만약 3번째 레이어의 첫번째 unit(bias 제외)  input z 구해보면 연결된 connection들의 파라미터 θ 이전 레이어의 a들을 곱하여 구할 있다.












역전파가 어떻게 동작하는지 알아보기 위해 출력 레이어의 unit 1개인 binary classification cost function 사용해보자.(출력 레이어의 unit 개이기 때문에 앞에 시그마가 1개임, Regularization 일단 사용 한다고 가정함)











뉴럴넷에서 레이어의 델타는 출력 레이어에서 시작하여 거꾸러 가면서 구할 있다.












델타^2_2 구해지는 과정은 다음과 같다.

Forward pass 해당 뉴런의 edge 2 이므로 개의 파라미터 θ 통해 다음 레이어로 전파시켰을 것이다. 따라서 역전파에서도 해당 뉴런에 연결된 파라미터를 가지고 구한다. 최종적으로 값은 연결된 3번째 레이어의 델타 값과 사이의 파라미터의 곱으로 구할 있다.

 

델타라는 결국 cost값에 해당 뉴런이 어느 정도의 영향을 끼쳤는지? 해석할 있을 같다.

만약 델타^(3)_1 구하기 위해 해당 뉴런의 이전 레이어에서 weighted sum = z^(3)_1 cost function 편미분 값을 구하여 얼만큼 영향을 줬는지 구한다.











































'ML & DL > Coursera-ML' 카테고리의 다른 글

6-1 Evaluating a Learning Algorithm  (0) 2019.01.21
5-2 Backpropagation in Practice  (0) 2019.01.21
4-3 Applications  (0) 2019.01.16
4-2 Neural Networks  (0) 2019.01.15
4-1 Neural Networks Motivation  (0) 2019.01.15
Comments