Computation Graph

 

$J(a, b, c) = 3(a+bc)$

 

<steps>

1. $ u = bc $

2. $ v = a + u $

3. $ J = 3v $

 

그래프로 나타내면

최적화하고자 하는 명확한 출력값 (이 경우 $J$) 가 있다면 ...

Logistic Regression 문제에서 $J$는 최소화하고자 하는 cost function

 

- 왼쪽에서 오른쪽으로 $J$의 값을 계산할 수 있었음

- 미분을 계산할 때는 반대로 오른쪽에서 왼쪽으로 감

 

 

the computation graph organizes a computation with the black arrow, left-to-right computation

 

Derivatives with a Computation Graph

여기에서 $\frac{dJ}{dv}$ 를 구하고자 한다면? 즉, $v$의 값을 조금 바꿨을 때 $J$는 얼마나 변화할까?

$J = 3v$ 이고, $v=11$ 이므로 위와 같은 방식으로 미분값을 구하면 $\frac{dJ}{dv} = 3$

한 step의 back propagation을 했음

 

여기에서 $\frac{dJ}{da}$ 를 구하고자 한다면? 즉, $a$의 값을 조금 바꿨을 때 $J$는 얼마나 변화할까?

$a=5$, $v=11$, $J=33$ 이므로 

$a=5.001$ 로 살짝 이동했을 때 $v=11.001$, 결국에 $J=33.003$

즉 $J$의 변화량은 $a$의 변화량의 $3$배, $\frac{dJ}{da} = 3$

 

잘 살펴보면, $a$가 바뀌면 $v$가 바뀌고, $v$가 바뀌면 $J$가 바뀐다)

다시 말해 $\frac{dJ}{dv} \frac{dv}{da}$

- $a$가 바뀌면 $v$가 바뀌고

- $v$가 바뀌면 $J$가 바뀐다

 

--> chain rule(체인룰) 

$a$를 바꾸었을 때 $J$가 변화하는 량 = $a$가 바뀌면 $v$가 바뀌는 량 * $v$가 바뀌면 $J$가 바뀌는 량

$$\frac{dJ}{da} = \frac{dJ}{dv} \cdot \frac{dv}{da}$$

 

* notation

backpropagation을 코드화할 때 최적화하고자 하는 final output variable는 마지막 노드에 있음

어떤 variable 에 대한 final output variable의 미분값 (특정 변수에 의해 영향 받는 양)

--> $\frac{dFinalOutputVar}{dvar}$ 는 dvar로 나타냄. 예를 들어 $\frac{dJ}{dv}$는 dv, $\frac{dJ}{da}$는 da 

 

$\frac{dJ}{du}$는 뭘까?

$u=6$, $v=11$, $J=33$ 이므로 

$u=6.001$ 로 살짝 이동했을 때 $v=11.001$, 결국에 $J=33.003$

$\frac{dJ}{du} = \frac{dJ}{dv} \cdot \frac{dv}{du} = 3 * 1 = 3$

 

$\frac{dJ}{db}$는 뭘까?

$J$를 최소화하거나 최대화하기 위해 $b$의 값을 바꿀 수 있다고 해보자. 

$\frac{dJ}{db} = \frac{dJ}{du} \cdot \frac{du}{db} = 6$

 

마지막으로 $\frac{dJ}{dc} = \frac{dJ}{du} \cdot \frac{du}{dcb} = 9$

 

오른쪽에서 왼쪽으로 가는데, 먼저 계산한 미분값들이 이후의 미분값들을 구하는 데 쓰임

 

Logistic Regression Gradient Descent

[Logistic Regression]

 

하나의 example 만을 본다고 쳤을 때,

$$z = w^{T}x + b$$

$$\hat{y} = a = \sigma (z)$$

$$L(a, y) = -(y \log (a) + (1 - y) log (1-a)) $$

 

두 개의 feature $x_{1}$, $x_{2}$ 만 있다고 하자

- variable $a$에 대한 $L$의 변화량, 즉 da을 먼저 살펴보자

$$\frac{dL(a, y)}{da} = - \frac{y}{a} + \frac{1-y}{1-a}$$

 

- dz 는?

$$ \frac{L(a, y)}{dz} = a- y = \frac{dL(a, y)}{da} \cdot \frac{a}{dz}$$

($\frac{a}{dz}$가 $a(1-a)$이므로, $- \frac{y}{a} + \frac{1-y}{1-a}$와 곱했을 때 $y-a$가 되는 것을 확인할 수 있음)

 

- 마지막으로 $w$와 $b$를 얼마나 바꿔야 하는지로 마무리 됨

dw1, dw2, db를 구하는데 

$$\frac{\partial L }{\partial w_{1}} = x_{1} \cdot dz $$

$$\frac{\partial L }{\partial w_{2}} = x_{2} \cdot dz $$

$$ \frac{\partial L }{\partial b} = dz $$

 

정리해서,

하나의 training example 에 대해 gradient descent 를 하고자 하면

먼저 dz 를 구한 후, dw1, dw2, db 를 구하여 update를 한다

 

$$ w_{1} := w_{1} - \alpha dw_{1}$$

$$ w_{2} := w_{2} - \alpha dw_{2}$$

$$ b := b - \alpha db$$

 

Gradient Descent on m Examples

$$ J(w, b) = \frac{1}{m} \sum_{i=1}^m L(a^{(i)}, y) $$

$$ a^{(i)} = \hat{y}^{(i)} = \sigma (z^{(i)}) = \sigma (w^{T}x^{(i)} + b)$$

 

하나의 training example $(x^{(i)}, y^{(i)})$ 에 대해서, $d{w_{1}}^{(i)}$, $d{w_{2}}^{(i)}$, $db^{(i)}$ 를 구한다

이때 cost function이 구하고 있는 것이 "평균" 이므로 그대로 적용할 수 있음

 

$$ \frac{\partial J(w, b)}{\partial w_{1}} = \frac{1}{m} \sum_{i=1}^m \frac{\partial L (a^{(i)}, y^{(i)})}{\partial w_{1}} $$

 

이전에 $\frac{\partial L (a^{(i)}, y^{(i)})}{\partial w_{1}} $ 즉, $d{w_{1}}^{(i)} $ 을 계산하는 법은 살펴봤음

 

[정리]

feature가 2개 일때,

 

(1) initialize

$$ J = 0, dw_{1} = 0, dw_{2} = 0, db = 0 $$

 

(2) For Loop

$For\ i = 1\ to\ m$

     $z^{(i)} = w^{T}x^{(i)} + b$

     $ a^{(i)} = \sigma (z^{(i)}) $

     $ J += -[ y^{(i)} \log a^{(i)} + (1-y^{(i)}) \log (1-a^{(i)}) ] $

     $ dz^{(i)} = a^{(i)} - y^{(i)}$

     $ dw_{1} += {x_{1}}^{(i)}dz^{(i)} $

     $dw_{2} += {x_{2}}^{(i)}dz^{(i)} $

     $db += dz^{(i)}$

$J /= m $

$dw_{1} /= m; dw_{2} /= m; db /= m$

 

(3) update (overall)

$dw_{1} = \frac{\partial J}{\partial w_{1}}$

$w_{1} := w_{1} - \alpha dw_{1}$

$w_{2} := w_{2} - \alpha dw_{2}$

$ b := b - \alpha db$

 

--> 여기까지가 한 번의 iteration

 

- 단점이 있음

for loop 안에 for loop 이 하나 더 있음 (feature마다 미분값 구하는 부분; feature 개수 만큼 돌아야 함)

데이터 셋 크기가 커질수록 부담스러워 짐

vectorization 을 통해 for loop 을 대체하고자 함

복사했습니다!