CS231n Lecture 9

원성혁·2023년 2월 7일
1

CS231n

목록 보기
8/12
post-thumbnail

이번 시간에는 CNN의 대표적인 모델들을 배워보았다.

CNN모델의 시작은 LeNet이고 최초로 Convolution 연산을 적용한 모델이다.
이후 ImageNet대회에서 2012년 오차율을 굉장히 줄인 AlexNet은 잠잠했던 CNN연산을 사용해 성공적인 결과를 냈다.

AlexNet

2012년에 도입된 AlexNet는 최초의 Large scale CNN 모델이다.
기본구조는 Convolution layer, Max Pooling Layer, Normaliztion이 2번 반복된 다음, 3번의 Convolution layer, 1번의 MaxPooling을 거친 후, 3번의 Fully Connected Layer가 나온다.

당시 당시 GPU 메모리가 32GB 한계로 모델을 두 파트로 나누어 계산했다.
1번째에서는 convoution layer 15 에서는 feature map만 학습하게 되어있고, 2번째에는 convoulution 3, Fully Connected 6~8 GPU간 통신르 허용해 이전 layer의 모든 input으로 featuremap을 참고하여 학습한다.

AlextNet의 특징은 LeNet보다 layer가 많다.
또한 AlexNet은 ReLU, 정규화로 Dropout, 최적화로 SGD momentum을, Ensemble 기법을 적용했다.

AlexNet을 가지고 parameter계산을 연습한다.

AlexNet의 ImageNet으로 학습시키는 경우 입력의 크기: 227 x 227 x 3

첫 레이어는 11 x 11 필터가 stride = 4로 96개가 존재한다.

Q1: 첫 레이어의 출력 사이즈는?
A1: 55(width) x 55(height) x 96(depth)
출력값의 차원: (전체 이미지 크기 - 필터 크기) / Stride + 1

Q2. 이 레이어의 전체 파라미터 갯수는 몇 개일까요?
A2: (11 x 11 x 3) x 96 = 35K

두 번째 레이어는 Pooling Layer이다.
stride = 2인 3 x 3 filter

Q3: 두 번째 레이어의 출력값의 크기는?
A3: 27 x 27 x 96
depth는 입력값과 변하지 않는다.

Q4. 두 번째 레이어의 파라미터는 몇 개일까요?
A4: 없다.
Pooling layer에는 파라미터가 없다.

Pooling layer에 파라미터가 없는 이유:
파라미터는 우리가 학습 시키는 가중치. Conv Layer에는 학습할 수 있는 가중치가 있는 반면 pooling의 경우 가중치가 없고 특정 지역에서만 큰 값을 뽑아내는 역할을 한다. 따라서 학습 시킬 파라미터가 없다.

ZFNet

ZFNet은 AlexNet의 하이퍼파라미터를 개선한 모델. AlexNet과 같은 레이어 수고 기본적인 구조도 같지만, stride size, filter 수 같은 하이퍼파라미터를 조절하여 Error rate를 더 개선.

VGG

2014년 Simonyan과 Zisserman이 만든 VGGNet은 이전모델보다 네트워크가 더 깊고 3x3의 필터를 사용. layer가 깊어진 만큼 레이어 갯수가 많아지고, 작은필터를 사용하면 Depth를 더 키울 수 있다.

3x3 필터를 여러 개 쌓으면 7x7 필터를 사용하는 것과 실질적으로 동일한 Receptive Field를 가진다. Receptive Field은 filter가 한번에 볼 수 있는 입력의 Spatial area이다. (출력 레이어의 뉴런 하나에 영향을 미치는 입력 뉴런들의 공간 크기).
2014년도 ImageNet Challenge에서 Google의 GoogLenet 다음으로 성능이 우수하고 강력한 네트워크를 가지고 있다.

GoogLeNet

2014년 Classification Challenge에서 우승한 모델.
22개의 레이어를 갖은 깊은 네트워크.

GoogLeNet은 높은 계산량을 효율적으로 수행할 수 있도록 네트워크를 디자인함.

GoogLeNet은 Inception module을 사용한다. 파라미터를 줄이기 위해 없앴고, 전체 파라미터 수가 5백만개이며 AlexNet에 비해 적은 숫자임을 알 수 있다.

Inception module

구글은 좋은 네트워크 타이폴로지를 만들고 싶었고 네트워크 안에 네트워크라는 개념으로 로컬 타이폴로지를 구현함.

여기서 이 Local Network를 inception modul이라 한다. 내부에는 동일한 입력을 받는 다양한 필터가 '병렬'로 존재하고, 이 레이어의 압력을 받아서 다양한 Conv 연산을 수행.

naive way의 문제점

naive way의 문제점은 계산 비용이다.

spatial dimention은 변하지 않았지만 depth가 엄청나게 불어난 것을 볼 수 있다.

1 x 1 conv


Dementional reduction의 역할
연산 parameter 수를 줄일 수 있음



GoogLeNet의 앞단(stem) 에는 일반적인 Network구조 입니다.

처음에는 conv pool을 몇 번 반복합니다. 이 후에는 Inception module에 쌓이고 마지막에는 softmax로 classifier 결과를 출력합니다.

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

auxiliary classifier


작은 보조 분류기.
추가적인 gradient를 주어 깊은 network에서 vanishing gradient를 방지하고자 고안함.

ResNet


ResNet은 residual coonections을 사용한 깊은 network model이다.
당시 트렌드는 더 deeper network를 만드는 것이지만 깊다고 model의 성능이 무조건 좋은 것은 아니였다.

train error는 낮지만 test error 높을 때 overfitting을 의심해 볼 수 있지만 이경우 더 깊은 네트워크 모델은 training error나 test error 둘다 높기 때문에 overfitting문제가 아니다.

ResNet 저자들은 더 깊은 모델 학습시 optimization에 문제가 생긴다고 가설을 세웠고 학습 도중 모델을 optimization시키 문제를 해결하고자 했다.

방법으로 shallower 네트워크를 가져와 input을 output으로 내보내는 identiy mapping을 이용했다.

레이어가 직접 "H(x)"를 학습하기 보다 "H(x) - x" 를 학습할 수 있도록 만들어준다.

이를 위해서 Skip Connection을 도입한다.

Skip Connection은 가중치가 없으며 입력을 identity mapping으로 그대로 출력단에 내보낸다.

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

ResNet에서는 residual block으로 구성된 추가 layer를 깊게 쌓았다.R
기본구조는 VGG Net에서 가져왔으나, 모든 residual block은 3x3 conv 2층을 가진다.

주기적으로 필터수를 2배씩 늘려주고, feature map 의 spatial dimension을 줄일 땐 pooling이 아닌 stride=2를 적용했다. 필터수를 늘린 이유는 feature map의 spatial dimension을 줄이면서 depth를 대신 늘려 layer 간 연산의 time complexity를 비슷하게 유지하려고 했다고 한다.

parameter 수를 줄여 연산량을 낮추기 위해 마지막 FC layer를 없애고, Global Average Pooling을 사용해 FC layer 하나만 갖게한다.

ResNet의 추가적인 특징을 살펴보면 다음과 같다.
1. Conv layer 다음 Batch Normalization(BN)을 사용한다.
2. 초기화는 Xavier를 사용하는데 2로 나눈 것을 쓴다. 이렇게 하면 SGD+Momemtum에서 좋은 성능을 가진다.
3. learning rate 는 0.1로 설하고 loss가 줄어들지 않도록 조금씩 줄여준다.
4. dropout은 사용하지 않는다.
5. weight decay는 1e-5 이다.


1. VGG : 기장 많은 메모리를 요구하고 연산량도 많다.
2. GoogLeNet : VGG와 비교해서 성능은 비슷하지 메모리와 연산량을 줄였다.
3. AlexNet : 연산량은 적고 성능도 낮다. 메모리또한 많이 요구된다.
4. ResNet : 메모리나 연산이 중간이고 성능이 제일 좋다.

Other architectures

Network in Network (NiN)


MLP와 FCN 연산으로 만든 깊은 네트워그 모델.

FractalNet

여기서는 residual connection이 전혀 없다.
shallow/deep network의 정보 모두를 잘 전달하는 것이 중요하다는 컨셉이다. fractal한 모습입니다.

FractalNet에서는 shllow/deep 경로를 출력에 모두 연결한다. 다양한 경로가 존재하지만 Train time에는 Dropout처럼 일부 경로만을 이용해서 Train 한다. 그리고 Test time에는 full network를 사용한다. 그들은 FractalNet의 좋은 성능을 입증했다.

DenseNet


DenseNet에는 Dense Block이 있으며 한 레이어가 그 레이어 하위의 모든 레이어와 연결이 되어 있다.
네트워크의 입력 이미지가 모든 Layer의 입력으로 들어가고 모든 레이어의 출력이 각 레이어의 출력과 concat 된다.

이 concat된 값이 각 Conv layer의 입력으로 들어가고, 이 과정에서 dimention을 줄여주는 과정이 포함된다.
Dense Connection이 Vanishing gradient 문제를 완화시킬 수 있다고 주장하며 Dense connection은 Feature를 더 잘 전달하고 더 잘 사용할 수 있게 해준다. (각 레이어의 출력이 다른 레이어에서 여러 번 사용되기 때문)

Efficient Networks - SqueezeNet


Fire modules: "squeeze layer"는 1x1 필터들로 구성되고, 이 출력 값이 1x1, 3x3 필터들로 구성되는 "expand layer"의 입력이 된다다.

SqueezeNet는 ImageNet에서 AlexNet 만큼의 Accuracy를 보이지만 파라미터는 50배 더 적다.(용량면에서 유리)

ResNet과 관련된 연구들

Identity Mappings in Deep Residual Networks


새로운 구조는 direct path를 늘려서 정보들이 앞으로 더욱 더 잘 전달되고 Backprob도 더 잘 될 수 있게 개선.

새로은 Block 구조로 더 좋은 성능을 얻을 수 있다.

Wide Residual Networks


기존의 ResNet 논문은 깊게 쌓는 것에 열중했지만 사실 중요한 것은 depth가 아닌 residual 이라고 주장한 연구.

Residual Connection이 있다면 네트워크가 굳이 더 깊어질 필요가 없다며, residual block을 더 넓게 만들어 conv layer 필터를 더 많이 추가.

가령 기존의 ResNet에는 Block 당 F개의 filter만 있었다면 대신에 F * K 개의 필터로 구성. 각 레이어를 넓게 구성했더니 50 레이어만 있어도 152 레이어의 기존 ResNet보다 성능이 좋다는 것을 입증.

그리고 네트워크의 Depth 대신에 filter의 Width를 늘리면 추가적인 이점이 있는데, 계산 효율이 증가.(병렬화가 더 잘되기 때문)

네트워크의 Depth를 늘리는 것은 sequential한 증가이기 때문에 conv의 필터를 늘리는(width) 편이 더 효율적.

ResNeXt

이 논문에서도 계속 residual block의 width를 파고들어 filter의 수를 늘리고 각 Residual block 내에 "다중 병렬 경로" 추가. pathways의 총 합을 cardinality라고 부름.

하나의 bottleneck ResNet block은 비교적 작지만 이런 thinner blocks을 병렬로 여러개 묶었다. 여기에서 ResNeXt과 Wide ResNet 과의 연관성을 볼 수 있다. 또한, 여러 Layers를 병렬로 묶어준다는 점에서 Inception Module과도 연관있다.

Stochastic Depth

네트워크가 깊어지면 깊어질수록 Vanishing gradient 문제가 발생.

기본 아이디어는 Train time에 레이어의 일부를 제거(short network면 트레이닝이 더 잘 될 수 있기 때문) 일부 네트워크를 골라서 identity connection으로 만들어버림.

shorter network를 만들면 Train하면 그레디언트가 더 잘 전달될 수 있다. (Dropout과 유사)

그리고 test time에서는 full deep network를 사용.

이번 시간은 여러 CNN 대표 모델들을 보았고 복습과 더불어 새로운 연구 방향과 컨셉을 배울 수 있어서 재밌었다.

profile
AI개발자를 향해 전진중

0개의 댓글