[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의 갯수
간단히 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은 적용하지 않습니다.
* 계산
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의 계산 결과를 모두 저장해 주어야 합니다.
1) over flow 방지 (-=np.max)
2) /N
3) L2 regularization