이전 강의에서는 딥러닝을 위한 프레임워크들을 공부했었다. 이번 강의는 CNN모델들의 구조다!

image.png

이번에 살펴볼 구조들을 연대순으로 정리해둔거다.

image.png

가장 먼저 LeNet이다. 이 모델은 산업에 성공적으로 적용된 최초의 CNN모델이다. 아래의 설명과 같이 간단한 구조를 가졌었지만 숫자인식에서 대성공을 거두었다.

image.png

다음은 AlexNet이다. 이 모델은 최초의 large scale CNN모델이고, imagenet classification task를 매우 잘 수행했다. 처음으로 선보여서 기존의 딥러닝이 아닌 모델들을 뛰어넘는 성능을 보여주었다.

image.png

이 모델은 input으로는 227x227x3의 이미지를 받았고 가장 처음 layer는 conv layer로 96개의 11x11x3필터를 stride4로 적용했다(필터의 depth는 input과 같고 필터 size와 stride, padding을 이용해 output의 size를 조정한다). 이 결과 55x55x96의 output이 나온다. 또한 이 레이어에서의 파라미터 개수는 $11\times 11\times 3\times96=35k$로 대략 3만5천개 정도다.

image.png

두번째 레이어는 pooling레이어고 3x3필터를 stride2로 적용하였다. 그래서 output은 $27\times27\times96$이고, pooling layer이기 때문에 파라미터는 없다는 점을 유의해야 한다.

image.png

여기서는 전체적인 구조를 디테일하게 보여준다. 특징으로는 처음으로 ReLU를 썼고, local response normalization layer를 사용했다. 이 layer는 채널간의 normalization을 하는건데 요즘은 해도 batch normalization이나 채널별로 normalization을 한다. 그리고 dropout도 했고, batch도 썼고 SGDmomentum으로 optimizer를 썼고, 학습초기에는 1e-2로 시작해서 1e-10까지 learning rate를 줄이는 schedule을 썼다. 학습을 시키다가 validation loss가 줄지 않으면 Learning rate를 낮췄다. 그리고 L2 weight decay를 이용해 모델의 복잡도를 제한했다. 그리고 7개의 CNN모델을 학습시켜 앙상블을 했다. 그리고 마지막 FC8 레이어에는 softmax를 사용했다.

image.png

다이어그램을 보면 레이어가 2개로 나뉜부분이 보이고 48개의 필터를 썼다고 그랬는데 이렇게 된 이유는 이때 당시는 gpu가 좋지를 않아서 gpu 2대에 나눠서 학습을 시킨거다. 모델을 두개로 나뉘어져 서로 교차한다는 거다. gpu 2대가 뉴런과 feature map을 반씩 나눠갖은 것이다.

image.png

그래서 conv1, conv2, conv4, conv5와 같은 layer들은 한 gpu내에 있는 feature map만 사용한다는 것이다. 48의 depth를 가진 feature map을 이용하는 것이다. 전체 96개의 feature map을 볼 수 없다.

image.png

반면 conv3, FC6, FC7,FC8과 같은 layer들은 gpu간의 통신을 통해 데이터를 교차해 전체 데이터를 볼 수 있게 만들었다.

image.png