[CS231n] 9. CNN Architectures
📗강의노트/CS231n

[CS231n] 9. CNN Architectures

728x90
반응형
최신 CNN 아키텍쳐에 대해 알아볼 것이다. 






AlexNet은 최초의 Large scale CNN이다. 





 출력 차원은 55이다. 

55 (wide) X 55 (height) X 96 (number of filters)으로 output volume이 된다. 

pooling의 경우에는 가중치가 없고 그저 특정 지역에서 큰 값을 뽑아내는 역할만 하기에 “ 파라미터 “ 가 없다. 







VGGNet 은 더 깊어지고(layers) 더 작은 필터(3x3)를 사용한다는 것이 특징이다. 

우선 필터의 크기가 작으면 파라미터의 수가 더 적다. 따라서 큰 필터에 비해 레이어를 조금 더 많이 쌓을 수 있다(Depth).  







GoogLeNet도 깊은 네트워크다. 22개의 레이어로 구성되어 있다. 계산량을 효율적으로 수행하도록 네트워크를 디자인했다. Inception module을 쌓아올린 모습이다. 

GoogLeNet에는 “파라미터”를 줄이기 위해 FC-layer가 없다. 




1x1 conv / 3x3 conv / 5x5 conv / 3/3 max pooling 들의 출력 값들을 Concatenate(Depth 방향으로 합침)한다. 그러면 하나의 tensor로 출력이 되고 그 다음의 레이어로 전해지게 된다. 

하지만 계산비용이 문제가 된다. 




Pooling layer는 input에서 depth가 변하지 않는다.  

출력값을 합친 사이즈를 계산해보면 28x28은 그대로 유지가 되고 depth만 쌓이게 된다. 

레이어를 거칠 수록 depth가 늘어난다. 




depth를 더 낮은 차원으로 Projection하는 것이다. 이는 input feature map들 간의 선형결합이라고 할 수 있다. 




각 레이어의 계산은 1x1 conv를 통해 줄어든다. 1x1 conv가 bottle neck layers의 역할을 하는 것이다. 




1x1 conv가 depth의 차원을 줄여준다.  여러모로 도움이 많이 된다. ( 계산복잡도 조절이 기본적인 이유 )




계산량이 많은 FC-layer를 대부분 걷어냈고 파라미터가 줄어들어도 모델이 잘 동작함을 확인했다. 




추가적인 줄기는 보조분류기이다. 

모든 레이어는 가중치들을 공유하지 않는다.




ResNet은 혁명적인 모델이다. ResNet은 엄청나게 깊은 네트워크이다. Residual connection을 이용한다. 


  

layer가 깊어진다고 더 좋아지는 것은 아니다. 

Training error가 작지도 않아서 Overfitting의 문제로 보기는 힘들다!

저자들이 내린 가설로는 optimization에 문제가 생긴다는 것이다. 

모델이 깊어질수록 최적화가 어렵다는 것이다. 




Direct mapping 대신에 Residual mapping을 하도록 블럭을 쌓는 것이다. 

입력은 그저 들어온 입력이다. 




H(x)를 학습하기 보다 H(x)-x 를 학습할 수 있도록 만들어준다. 오른쪽의 skip connection은 가중치가 없으며 입력을 identity mapping 그대로 출력단으로 내보낸다. 

그러면 실제 레이어는 변화량(delta)만 학습하면 된다. 입력 X에 대한 잔차(residual)이라고 할 수 있다. 

따라서 최종 출력값은 “ input X + 변화량( F(x) ) “ 이다. 

레이어가 Full mapping 을 학습하기보다 이런 조금의 변화만 학습하는 것이다. 





3x3 conv를 이용하고, 주기적으로 필터를 두 배씩 늘리고 stride=2를 이용하여 Downsampling해준다. 

초반에는 conv가 붙고 끝에는 FC가 안붙는 대신에, Global Average Pooling Layer를 사용한다. GAP는 하나의 Map 전체를 Average Pooling 한다. 





모델 Depth가 50이상일 때, Bottleneck Layer를 도입한다. 이를 통해 초기 필터의 depth를 줄여준다.




Conv 다음에 batch norm을 사용한다. 초기화는 Xavier를 이용하지만, 2로 나누는 scaling factor를 추가한다. 이는 SGD + Momentum에서 좋은 초기화 성능을 보인다.

Learning rate는 validation error가 줄어들지 않는 시점에서 조금씩 줄여준다. 




v4는 ResNet + inception module이다.

원의 크기는 메모리 사용량의 크기를 나타낸다. googLeNet이 가장 메모리적으로 효율적이다. 




Network in Network 의 기본 아이디어는 MLP(Multi Layer Perceptron) Conv layer이다. 네트워크 안에 작은 네트워크를 삽입하는 것이다. 

Conv 안에 MLP를 쌓는다(FC를 쌓는 것)

제일 먼저 Bottleneck의 개념을 정립했다. 




Direct path를 늘려서 정보들이 앞으로 더욱 더 잘 전달되고 Backprob도 더 잘될 수 있게 개선했다. 





residual이 더 중요하다. 필터를 더 늘려서 두껍게 구성했다. 레이어의 수가 중요한 것이 아니다. 

네트워크의 Depth 대신에 filter의 width를 늘리면 계산 효율이 증가한다. 왜냐하면 병렬화가 더 잘되기 때문이다. 




ResNeXt

여기서도 계속 residual block의 width를 파고든다. ( filter의 수를 늘리는 것 )

병렬로 block을 여러 개 묶었다. 여러 layers를 병렬로 묶어준다는 점에서 inception module과도 연관이 있다. 




네트워크가 깊어지면 Vanishing Gradient 문제가 발생한다. 
그레디언트가 작아지는 것 

기본 아이디어는 train time에 레이어 일부를 제거하는 것. Short network면 트레이닝이 더 잘 될 수 있기 때문이다. Test time에서는 모두 사용한다. 








728x90
반응형