5 conv layer, 3 dense layer (8단)
당시 GPU가 부족했기 때문에, 두 GPU에 따로 training해 네트워크가 두 개로 나뉘어져 있다.
11*11
filter(input) 사용시 하나의 conv 커널이 볼 수 있는 이미지 레벨에서의 영역은 커지지만(receptive field), 상대적으로 더 많은 params가 필요해진다
ReLu
GPU 사용
LRN : 입력공간에서, response가 많이 나오는 몇 개를 죽이는 것. 최종적으로 sparse한 activation 나오게 된다
Data augmentation
Dropout
지금 시점에서 보면, gpu, activation function Relu, Data augumentation, Dropout 은 당연한 것이지만, 그 당시에는 당연하지 않았다. 지금의 일반적으로 잘되는 기준을 잡아준 네트워크라고 볼 수 있다.
3*3
conv filter만 사용(중요) : conv filter 크기가 커지면 하나의 conv filter가 찍을때 고려되는 input 크기가 커진다. (receptive filter)
Dropout
VGG 16, 19
3*3
convolution filter를 사용했을까?마지막 레이어 하나의 값은 , input layer 5*5
의 픽셀이 합해진 값이 된다. receptive field 입장에서는 3*3
X2 와 5*5
X1 이 같지만, parameter 수는 전자가 훨씬 적어지게 된다.
앞으로 나올 다른 네트워크들도 비슷한 이유로 convolution filter의 크기는 대부분 7*7
을 거의 벗어나지 않는다.
1*1
convolution 은 dimension(channel) reduction 효과가 있다. conv feature map이 special dimension 텐서의 depth 방향으로 있는 채널을 줄이기 때문에, 1*1
convolution 잘 활용하면 param 수를 줄일 수 있게 된다.
11*11
, 7*7
, 등의 conv보다, 3*3
을 여러번 활용하는 것이 좋다
1*1
convolution 후 3*3
, 5*5
.1*1
이 중간에 들어가면서, 전체적인 네트워크 params가 줄어든다.1*1
convolution 이 왜 params를 줄일까?params 많으면 어떤 문제가 생길까?
overfitting : training error 줄어들지만, testing error는 커진다
하지만.. Deeper Neural Network도 학습하기 힘들다
- training error, testing error가 같이 줄어들긴 하지만, training error가 더 작아져도 test error가 더 커서 더이상 학습이 되지 않는 경우가 발생한다.
-> ResNet : Identity map 추가
skip connection : input이 밑에서, 위로 올라갈때 neural network의 출력값에 더해주는 것 -> convolution layer가 차이
만 학습
네트워크를 더 깊게 쌓을 수 있는 가능성을 보여준다!
x를 더해주는 구조는 같지만, 더해주려면 차원이 같아야 한다.
Projected Shortcut : 차원을 맞추어 주기 위해 1*1
convolution으로 채널을 바꾸어 준다. (but 일반적으로는 Simple Shortcut을 더 많이 사용한다.)
순서에 대한 논쟁은 있지만 원 논문에서는 BN이 Convolution 뒤에 일어나는 구조이다.
3*3
conv 전에 input 채널을 줄이고, conv 후 채널을 다시 늘여 output과 차원을 맞춘다.
convolution 을 통해 나오는 값을 더해준다. 이 때 값을 섞이게 더하는 것이 아니라 concat하는 구조이다.
이 때 concat하면 채널이 점점 커지게 되고, (1배, 2배, 4배, 8배, ...) conv feature map의 채널 역시 같이 커지고 params 수도 같이 커진다.
따라서 중간에 channel을 한번씩 줄여줘야 한다! ->1*1
conv
-> Dense Block으로 늘이고 다시 Transition Block으로 줄이는 것을 반복한다
간단한 neural network or 분류 문제에 있어서 DenseNet, ResNet 구조를 쓰면 웬만큼 성능이 잘 나온다
Key takeaways : recepted field를 늘이는 입장에서,
3*3
반복. 1*1
conv으로 채널 수를 줄여 params 줄임