Backpropagation

CS231n 4-1. Backpropagation (gradient for neural network)

\frac{\sigma J}{\sigma w^{[3]}}\implies \frac{\sigma L}{\sigma w^{[3]}}=&-\left[ y^{(i)} \frac{\sigma}{\sigma w^{[3]}}(\log \sigma(w^{[3]}a^{[2]}+b^{[3]}))+(1-y^{(i)}) \frac{\sigma}{\sigma w^{[3]}}(\log(1-\sigma(w^{[3]}a^{[2]}+b^{[3]}))) \right]\\ =&-\left[ y^{(i)} \frac{1}{a^{[3]}}a^{[3]}(1-a^{[3]})a^{[2]T}+(1-y^{(i)}) \frac{1}{{1-a^{[3]}}}(-1)a^{[3]}(1-a^{[3]})a^{[2]T} \right] \end{aligned}$$ $$\begin{aligned} \frac{\sigma J}{\sigma w^{[3]}}\implies \frac{\sigma L}{\sigma w^{[3]}}=&-\left[ y^{(i)} \frac{1}{a^{[3]}}a^{[3]}(1-a^{[3]})a^{[2]T}+(1-y^{(i)}) \frac{1}{{1-a^{[3]}}}(-1)a^{[3]}(1-a^{[3]})a^{[2]T} \right]\\ =&-\left[y^{(i)}(1-a^{[3]})a^{[2]T}-(1-y^{(i)})a^{[3]}a^{[2]T}\right]\\ =&-\left[y^{(i)}a^{[2]T}-a^{[3]}a^{[2]T} \right]\\ =&-(y^{(i)}-a^{[3]})a^{[2]T} \end{aligned}$$ $$\frac{\sigma J}{\sigma w^{[3]}}=-\frac{1}{m}\sum^m_{i=1}(y^{(i)}-a^{[3]})a^{[2]T}$$ ## Update $w^{[2]}$ --- $$\begin{aligned} \frac{\sigma L}{\sigma w^{[2]}}=& \frac{\sigma L}{\sigma a^{[3]}} \frac{\sigma a^{[3]}}{\sigma{z^{[3]}}} \frac{\sigma{z^{[3]}}}{\sigma a^{[2]}} \frac{\sigma a^{[2]}}{\sigma z^{[2]}} \frac{\sigma z^{[2]}}{\sigma w^{[2]}}\\ =& (a^{[3]}-y)w^{[3]T}a^{[2]}(1-a^{[2]})a^{{[1]T}}\\ =& w^{[3]T}a^{[2]}(1-a^{[2]})(a^{[3]}-y)a^{{[1]T}} \end{aligned}$$ # Improving Neural Network forward propagation과 backpropagation만을 한다고 해서 좋은 Neural Network를 만들 수 없으면 여러가지 방법을 통해 성능을 향상시켜야만 한다. ## Activation function --- [[CS231n 6-1. Setting Up Architecture (Activation Functions)]] 첫번째로 다른 activation function을 사용하여 Neural Network의 성능을 높이는 방법이다. 그 이전에 Activation function은 왜 필요할까? >[!question] **Activation function이 왜 필요할까?** > >기존의 예와 같이 3개의 layer에 각각 3,2,1개의 neuron이 있는 구조에서 activation function을 identity function으로 사용한 경우를 생각해보자! (즉, linear한 부분 z가 그대로 나온다고 생각! $z\to z$) >이때 forward propagation을 생각해보면 다음과 같이 나타낼수 있다.$$\begin{aligned}\hat{y}=a^{[3]}=z^{[3]}=&w^{[3]}a^{[2]}+b^{[3]}\\=&w^{[3]}(w^{[2]}a^{[1]}+b^{[2]})+b^{[3]}\\=&w^{[3]}w^{[2]}(w^{[1]}x+b^{[1]})+w^{[3]}b^{[2]}+b^{[3]}= Wx +B \\ >\text{with: } W=&w^{[3]}w^{[2]}w^{[1]}\text{ , } B=W^{[3]}W^{[2]}b^{[1]}+w^{[3]}b^{[2]}+b^{3} >\end{aligned}$$ >이를 통해 알 수 있는 것은 **activation function이 없을 경우에 아무리 layer을 많이 추가해 deep network를 만든다고 하더라도 linear regression과 달라지는게 없다는 것이다!** >즉, *network의 복잡도와 성능은 activation function에 의해 생긴다는 것을 알 수 있다*. 예를 들어 고양이를 알아내는 모델을 만들 때 사진 속에서 고양이를 표현하는 일종의 함수가 무엇인지는 모르지만 activation function과 많은 parameter들을 이용해서 이와 유사하게 모방할 수 있다. (linear regression은 각 pixel마다 weight를 추가하여 실제 고양이를 표현하는 함수를 모방할 수 없다) ### Sigmoid $\sigma(z)=\frac{1}{{1+e^{-z}}}$ --- #sigmoid sigmoid 함수는 모든 함수 값이 0과 1 사이에 있으면서 증가함수이고 $\sigma(z)=\frac{1}{{1+e^{-z}}}$의 식으로 표현이 가능하다. 또한 도함수가 $\sigma'(z)=\sigma(z)(1-\sigma(z))$와 같이 본래의 함수로 표현하기 쉽기 때문에 backpropagation에서 간단하게 식을 표현 가능하다. - 장점: classification 문제에서 0~1 사이의 확률로 나타낼 수 있어 효과적이다. - 단점: **high/low activation일 때 (z의 값이 크거나 작을 때), 기울기가 매우 완만해 gradient가 0과 매우 가까워져서 backpropagation에서 parameter update가 원활하게 진행하지 못한다.** (vanishing problem!) 즉, linear한 부분에서는 update가 잘 되지만 saturating 부분에서는 update가 되지 않는다 ### Tanh --- #Tanh 역시 많이 사용이 되는 activation function으로 $\tanh(z)=\frac{{e^z-e^{-z}}}{e^z+e^{-z}}$로 나타난다. 이 함수 역시 도함수가 $\tanh'(z)=1-\tanh(z)^2$와 같이 본래의 함수로 표현되기 때문에 backpropagation에서 쉽게 사용이 가능하다. 다만 Sigmoid와의 차이점은 치역이 즉, 모든 함수 갑이 -1과 1 사이에 있는 증가함수라는 것과 이로 인해 #reinforce_learning 처럼 positive reward와 negative가 있을 때 사용이 많이 된다 장점과 단점이 sigmoid와 유사하다 ### ReLU --- #ReLU 함수는 최근에 가장 많이 사용이 되는 함수로 $z<0 \to 0 \text{ , }z\geq 0 \to z$로 표현이 된다. 즉, z가 0보다 작을 경우에는 0이 되고 z가 0보다 크면 y=z와 같이 일차함수로 표현이 가능하다. 또한 도함수가 $Relu'(z)=1\{z>0\}$으로 표현이 되어 매우 간단하다는 것을 알 수 있다. 또한 상한선이 없기 때문에 regression 문제에서 사용이 주로 된다. 장점: **z가 매우크더라고 하더라도 saturation이 일어나지 않는다**. 또한 gradient가 1이기 때문에 추가로 계산해서 넣을 필요가 없어지며 위에서 미분값을 구할 때 sigmoid를 미분한 부분 $a^{[l]}(1-a^{[l]})$이 1로 대체가 되어 backpropagation에서 더 간단하고 빠르게 update가 진행된다 참고로 여기서 다룬 activation function은 사람들이 많이 써보고 성능이 괜찮다고 생각한 일종의 경험에 의한 선택을 한 것이지 통계학적으로 의미가 크게 있어 사용하는 것이 아니다. 또한 각각의 layer에 같은 activation function을 쓰는 것 역시 경험에 의한 선택이라고 볼 수 있다. (꼭 하나의 activation function을 쓸 필요는 없지만 대부분 하나만 사용) 왜 그런지 정확하게 알아내기 어렵다(일종의 blackbox) ## Initialization [[CS231n 6-2. Setting Up the Data and the Loss]] 48:05 ## Optimization [[Cs231n 7-1. Optimization]]