[CS231n] lecture 4. backpropagation 강의 요약

포스팅을 시작하기에 앞서 수준 높은 강의와 강의 자료를 무료로 배포해주신 Stanford University CS231n 교수진께 감사의 말씀을 드립니다. 
온라인 강의: https://www.youtube.com/watch?v=vT1JzLTH4G4&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk 
강의 자료: https://cs231n.github.io

1. 필요성

    Deep learning의 경우 layer의 개수가 많아짐에 따라 자연스레 loss function은 매우 복잡한 형태를 띠게 된다. 따라서 이를 변수에 따라 편미분 하기 매우 어려워진다.


2. Idea

    Chain rule에 따라 복잡한 문제를 쉬운 문제의 집합체로 생각한다.

3. 예시


새로운 노드의 gradient = 이전 노드의 gradient*새로운 노드의 미분 값 (value = result)

4. 특성(Add, Multiplication, Max)

    뉴럴 네트워크의 특성 상 add 연산과 mul 연산, max 연산이 자주 쓰인다. ex) max(0, wx+b)

   1. Add gate

Add gate는 이전의 gradient를 공평하게 나눠주는 역할을 한다.
즉, 해당 노드의 gradient = 이전노드의 gradient

(${d(x+y) \over dx}={d(x+y) \over dy}=1$)


    2. Multiplication gate
해당 노드의 gradient = 이전 노드의 gradient*상대 value

(${d(x*y) \over dx}$ = y, ${d(x*y) \over dy}$= $x$)











    3. Max gate
Max gate는 Add gate와 비슷하게 이전 노드의 gradient를 그대로 끌고 온다는 점이 비슷하지만 가장 큰 value를 가졌던 노드에만 gradient가 할당되고 나머지는 0으로 주어진다는 점에서 Add gate와 다르다.

${dmax(x,y) \over dx}= 1$ (when x>y)
${dmax(x,y) \over dx}= 0$ (when x<y)



5. Modularity

    Backpropagation의 idea가 복잡한 문제를 잘게 쪼개 쉽게 해결하기 위함이므로 다시 이를 합쳐서 해결할 수도 있다. 이는 주로 잘게 쪼개져 있는 부분을 합쳐 미분 하여도 설계자가 큰 부담을 느끼지 않거나 자원을 효율적으로 사용하기 위해서이다.
예시)
$f(w, x)= \frac{1}{1+e^{-(w0x0+w1x1+w2)}}=\frac{1}{1+e^{-z}}$      ($z=w0x0+w1x1+w2x2$)

${d \over dz}*\frac{1}{1+e^{-z}}=(1-\sigma(z))\sigma(z)$     ($\sigma(z)=sigmoid(z)=\frac{1}{1+e^{-z}}$)

$\therefore {df \over dw0}=(1-\sigma(z))\sigma(z)*x0 $

6. Gradients for vectorized operations

    Vector의 Backpropagation은 위의 과정과 기본적으로 동일하지만 gradient의 차원과 원래 벡터의 차원을 일치시켜야 한다는 점에서 추가로 생각해야 하는 부분이 존재한다.
    예를 들어, b벡터를 (N*1)의 column vector라고 하자. 이 때, $d(Wx+b) \over d(Wx+b)$의 차원은 (N*C)이다. 
${d(Wx+b) \over db}$=${d(Wx+b) \over d(Wx+b)}*{d(Wx+b) \over db}$=${d(Wx+b) \over d(Wx+b)}*1$이다. 이 때, 차원을 (N*1)의 column vector로 맞춰주기 위해 np.ones((C,1))을 곱해준다.

 


이 블로그의 인기 게시물

[CS231n] Features 과제(Assignment)

[minGPT]play_image 설명