[CS231n] Fully Connected Network 과제(Assignment)

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

 * 블로그 작성자 github 주소: https://github.com/withAnewWorld/JamesHanamura


Assignment 구조

작성되어 있는 부분(파란색), 과제로 주어진 부분(빨간색)

    - Load the preprocessed data

    - fully connected network
        - init(W, b)
        - Loss(soft max)
        - Gradient(backpropagation)

    - Debugging strategy(Gradient check, relative error, visualize)
        
    - Update rules
        - SGD        
        - SGD + Momentum
        - RMS prop
        - Adam

    - Debugging strategy(Gradient check)

    - Update rules에 따른 성능 비교(visualize)
    
    - Cross Validation  

    - Test image 예측


Fully connected layer

init

3 layers fully connected network
* Layer의 갯수 
- input layer를 제외한 layer의 갯수
* 계산
Hidden layers =$[H_{1}, H_{2}, ... , H_{k}, ..., H_{n}], C= number of classes$일 때
Hidden layers: activation function(Wx+b) 
$(N*H_{k-1}) -> (N*H_{k})$
out put layer: loss fuctnion(Wx+b)
$(N*H_{n})->(N*C)$

간단히 3 layers network를 통해 더 자세히 이해하고자 합니다. 먼저 input data(x)와 w1, b1, activation function(relu)를 통해 첫번째 hidden layer를 구성합니다. 동일한 로직으로 hidden layer를 쌓아갑니다. 마지막 output layer에서는 N개의 data를 Class에 따라 loss를 계산해야 하므로 loss function을 적용합니다. 이 때 activation function은 적용하지 않습니다.
따라서, $W_{k} = (H_{k-1}, H_{k}), b_{k} = (H_{k}) (H_{0}=input dimension, H_{n+1}=C)$


loss(Soft max)

Hidden layer의 경우  activation function을 적용하지만 output layer의 경우 activation function을 적용하지 않기 때문에 따로 빼서 output layer를 적용해야 합니다. Gradient를 위해 hidden layer의 계산 결과를 모두 저장해 주어야 합니다.
soft max 주의점
    1) over flow 방지 (-=np.max)
    2) /N
    3) L2 regularization

Gradient(Backpropagation)

3 layers network의 Computation graph를 그려보시면 마지막 weight, bias(w3, b3)에서 두번째 weight, bias까지 동일한 logic을 가진다는 것을 확인할 수 있습니다. 즉, (back ward 관점에서) +연산 -> x연산 -> relu로 동일하게 이루어지기 때문에 반복문으로 처리하기 용이합니다. 하지만 첫번째 weight와 bias의 경우 hidden layer가 더 이상 존재하지 않기 때문에 연산이 조금 다르게 이루어집니다. 따라서 조건문을 구성하여 다르게 계산해야 함을 알 수 있습니다. 
(cf. 마지막 weight, bias(w3, b3)는 dsmx를 통해 계산이 이루어지기 때문에 반복문을 통해 계산하지 않았습니다.)

Update rules

SGD+Momentum

RMSprop


Adam


이 블로그의 인기 게시물

[CS231n] Features 과제(Assignment)

[minGPT]play_image 설명

[CS231n] lecture 4. backpropagation 강의 요약