일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 데이터 분석 플랫폼
- 분석 툴
- 파이썬 내장 그래프
- 검증 평가 지표
- Brightics studio
- paper review
- 브라이틱스 분석
- 데이터 분석
- 서포터즈 촬영
- Brightics AI
- 파이썬 SQL 연동
- 브라이틱스 서포터즈
- 머신러닝
- Deep Learning for Computer Vision
- Brigthics Studio
- 삼성 SDS 서포터즈
- 브라이틱스 프로젝트
- 범주형 변수 처리
- Random Forest
- 브라이틱스 AI
- Python
- michigan university deep learning for computer vision
- Brightics 서포터즈
- Activation Function
- 브라이틱스 스태킹
- pymysql
- 삼성 SDS
- 딥러닝
- 비전공자를 위한 데이터 분석
- Brightics EDA
- Today
- Total
하마가 분석하마
8. CNN Architectures 본문
Michigan University의 'Deep Learning for Computer Vision' 강의를 듣고 정리한 내용입니다.
CNN Architectures
AlexNet
AlexNet은 ReLU를 사용한 첫 번째 Neural Network이다. (이전 LeNet까지는 Tanh 함수를 사용) 'Local response normalization'을 사용했는데 Batch Normalization의 옛날 버전이라고 생각하면 된다.
Local response normalization은 강하게 활성화된 neuron의 주변 이웃들에 대해서 normalization을 실행한다. 주변에 비해 어떤 neuron이 비교적 강하게 활성화되어 있다면, 그 neuron의 영향력은 커질 것이다. 반면 강하게 활성화된 neuron 주변도 모두 강하게 활성화되어 있다면, local response normalization 이후에는 모두 값이 작아진다. 현재는 효과가 미비하다고 하여 잘 쓰지 않는다.
AlexNet은 병렬 연산을 수행하기 위해서 병렬적인 구조로 설계되어 있다. 위 그림에서 알 수 있다시피 2개의 구조가 붙어있는 형태이다. 총 8개의 layer로 이루어진 AlexNet은 5개의 conv layer와 3개의 FC layer로 되어있다. conv layer 2,4,5는 전 단계에서 같은 channel을 공유하는 feature map과만 연결이 되어있으나 conv layer 3은 전 단계의 두 channel의 특성 맵들과 모두 연결되어 있다.
AlexNet은 average pooling이 아닌 max pooling을 사용했다.
마지막 fc8의 output size는 class의 수를 의미한다. FC layer에 넣기 전 flatten 해주는 과정이 필요하고, 위 그림에서는 conv layer와 pooling layer 사이의 ReLU 과정이 생략되어 있다. tanh나 sigmoid 함수가 아닌 ReLU를 사용함으로서 saturating non linearities 문제를 해결했다. (saturating non linearities: 어떤 입력 x가 무한대로 갈 때, 함수의 값이 어떤 범위내에서만 움직이는 것)
ZFNet
ZFNet은 AlexNet과 거의 비슷하다. AlexNet에서 layer configuration을 고친 것으로 Conv1 layer에서 kernel size나 stride size를 축소했다. 또한 Conv3,4,5에서 filter 개수를 증가시킴으로써 연산 횟수, learnable parameter의 개수가 증가했다.
VGGNet
VGGNet은 CNN architecture의 디자인 가이드를 제시했다. VGG16은 layer가 16개이고, VGG19는 layer가 19개이다. VGGNet에는 총 6개의 구조가 있으며, 그 중에서 16과 19가 가장 많이 쓰인다.
5x5 filter를 한 번 쓴 것보다 3x3 filter를 2번 쓴 것이 parameter도 더 적고, ReLU를 두 번 쓰기에 더 복잡한 함수를 표현할 수 있다.
GoogLeNet
GoogLeNet은 계산 효율성을 고려한 architecture이다. parameter 개수, memory 사용, 연산 수를 줄이는 것에 중점을 두었다.
1. Aggressive Stem
VGG-16은 앞쪽 단계에서 conv layer를 먹이는 데에 집중한다. (Start 부분에 상당히 많은 floating point operation이 집중됨) GoogLeNet은 앞쪽 단계의 연산 수를 줄이기 위해 앞에서 빠르게 downsampling을 진행한다. (단 kernel size와 stride를 크게 하여 3번의 conv layer만을 적용한다.) 위 그림에서 알 수 있다시피 VGG-16과 비교하여 더 높은 효율성을 가진다.
2. Inception Module
{1x1 convolution을 사용하는 이유}
입력값에 대해, 4가지 종류의 Convolution, Pooling을 수행하고, 4개의 결과를 Channel wise Concat 해준다.
VGG처럼 kernel size를 고정하는 것이 아니고, kernel size를 여러 개로 설정해서 convolution 연산을 한 후, 결과를 이어붙인다.
그러나 Feature map을 추출하는 과정에서 sparse 한 연결을 유지하고 Matrix 연산에서 Dense 한 연산을 유지하는 것에서 엄청난 Computational Resource를 사용하게 된다. 이를 줄이기 위해 1x1 convolution을 사용한다. 1x1 conv layer로 channel을 줄였다가 3x3이나 5x5 conv layer로 channel을 확장하는데 이렇게 하여 필요한 연산량을 감소시킬 수 있다. (sparse 하게 각 연산을 거친 다음, dense 한 output을 만들어 냄)
이전에는 3x3과 같은 conv layer가 image의 지역정보와 함께 channel 간의 정보도 고려했다. 하나의 kernel이 2가지 역할을 하는 이 과정을 분해하는 데에 1x1 convolution이 사용된다.
- 채널 간의 관계 정보 : 1x1 convolution에 사용되는 parameter가 수행
- 이미지의 지역 정보 : 3x3 convolution에 사용되는 parameter들이 수행
1x1 convolution 연산으로 image의 channel을 줄여준다면 이후 layer(3x3 or 5x5)에서의 parameter 개수를 절약할 수 있다. 이를 통해 CNN 구조를 더 깊게 만들어도 parameter가 크지 않은 것이다.
1x1 convolution을 사용하면 pixel 별로 FC layer에 한 번 돌린 것보다 효과가 좋다. (pixel 별로 nonlinearity를 줄 수 있음) 또한 1x1 convolution을 사용하여 channel dimesion을 줄여 conv layer에서의 계산량이 적어지게 한다. 이는 overfitting을 방지하는 데에도 도움을 줄 수 있다.
Inception module은 모델에 총 9개가 있다.
3. Global Average Pooling
FC Layer를 많이 사용할수록 parameter가 많아진다. FC layer에 들어가는 variable 수를 최대한으로 줄이기 위해 FC layer를 여러 번 쌓지 않고, avg-pooling layer를 적용하여 공간 차원을 축소한 뒤 FC Layer를 한 번만 사용한다.
4. Auxiliary Classifiers
중간중간 계산 결과를 빼서 loss term에 contribute 하도록 선정. 현재는 이러한 방식 대신 batch normalization을 사용한다. Backpropagation 시, weight 값에 큰 영향을 주는 것을 막기 위해 auxiliary classifier에 0.3을 곱한다. Auxiliary classifier는 training시 발생하는 문제인 vanishing gradient 문제를 해결하기 위해 사용하는 technique이므로 inference 하는 과정에서는 중간에 2개의 auxiliary classifer모두 제거 후, 제일 마지막 layer의 softmax만을 사용한다. 이제는 Batch Normalization을 쓰기에 사용하지 않는다.
Residual Networks
처음에는 layer가 많아질수록 test error가 커지는 이유가 overfitting 때문이라고 생각했다. 이를 검증해본 결과 overfitting이 아닌 underfitting임을 알 수 있었다. Training 자체가 제대로 되지 않은 것이다.
깊은 모델은 더 얕은 모델을 재현할 수 있다고 생각되었다. (적어도 비슷한 성능을 내기 원함) 결론적으로 training 문제가 아니었기 때문에 optimization의 문제인 것으로 가설을 세웠다. identity를 배우지 못한 것을 문제의 원인으로 파악하고, identity function을 더 쉽게 학습할 수 있도록 network를 변경한다.
위는 ResNet이 제안한 구조이다. 왼쪽의 Plain block은 기존에 학습한 정보를 보존하지 않고 변형시켜서 새롭게 생성한다. 반면에 Residual block은 기존에 학습한 정보를 보존하고 거기에 추가적으로 학습하는 정보를 의미한다.
ResNet은 Residual block을 여러 차례 쌓아서 만든 네트워크이다. VGGNet처럼 디자인 가이드를 제시했으며 residual block은 2개의 3x3 conv layer로 구성되어있다. 여러 개의 스테이지로 나누어져 있다.
또한 GoogLeNet과 같이 처음에 빠르게 downsampling 시킨다. 이로 인해 network 초반에 부동소수점 연산이 많이 경감된다.
GoogLeNet과 같이 가장 윗단에서 FC layer를 적게 가져간다. (GAP 사용) 이를 통해 parameter 개수가 너무 많아지는 문제를 해결한다.
ResNet-18은 가장 많이 사용된다. 계산시간을 VGGNet과 비교해보면 ResNet-34가 VGG-16에 비해서 4배 정도 적게 걸리는 것을 알 수 있다.
Bottleneck 활용한 Bottleneck Residual Block은 3 x 3 Conv 레이어 위아래로 1 x 1 conv 레이어를 쌓는다. 총 3개의 conv레이어를 쌓으며, 채널이 4배가 된다. 위 그림을 통해 conv layer의 size를 조절함으로써 layer 수는 증가했지만, flop은 감소한 것을 알 수 있다. (더 많은 layer는 더 많은 nonlinearity 제공하기 때문에, input을 더 다양하게 가공할 수 있다.)

Basic Block을 사용한 ResNet-18과 ResNet-34를 보면 Layer가 Block의 2배인 것을 알 수 있다. ResNet-50은 기본 residual block을 bottleneck block으로 대체하면서, 레이어수가 3배가 된 것이 보인다. layer 개수가 101, 152개까지 늘린 ResNet-101, ResNet-152가 등장했다. 더 깊은 모델이므로, 훨씬 정확도가 높지만, 연산 부담이 큰 모델이다.
ResNeXt
ResNet을 Parallel 하게 개선시킨 ResNeXt이다.
왼쪽은 ResNet의 BottleNeck이고, 오른쪽은 ResNext의 BottleNeck이다. 먼저 256개 channel의 입력값이 BottleNeck으로 전달되고 1x1 conv를 거쳐서 128개의 channel을 갖는다. 128개의 channel인 32개의 group으로 분할하여 각 그룹당 4개 (128/32)의 channel이 된다. 그리고 32개의 conv는 4개의 channel 입력값에 대해서만 연산을 수행하여 4 channel의 feature map을 생성한다. 32개의 group에서 생성한 4개의 feature map을 concatenate 하여 128개의 channel을 만든다. 다음에 1x1 conv를 거쳐서 256개의 channel이 된다. 이 여기서 group의 수인 cardinality라는 hyper parameter는 조절이 가능한 변수이다.
Grouped Convolution
channel을 기준으로 반 개의 channel/나머지 반 개의 channel로 split 하는 Grouped Convolution도 등장했다.
추가적으로 강의에 나와있는 convolution 방법들에 대한 내용 정리입니다. 감사합니다.
https://hichoe95.tistory.com/48
Different types of Convolutions (Grouped convolution, depthwise convolution, pointwise convolution, depthwise separable convolut
오늘 정리해 볼 것들은 앞으로 정리할 논문들을 위해 미리 알아두면 좋은 convolution입니다. 각 convolution들에 대한 간단한 특징과 param수, 연산량 등에대해서 알아봅시다 ㅎㅎ 들어가기에 앞서 몇
hichoe95.tistory.com
'Deep learning > Michigan university deep learning' 카테고리의 다른 글
11. Training Neural Network 2 (0) | 2022.02.10 |
---|---|
10. Training Neural Network (0) | 2022.02.07 |
7. Convolutional Network (0) | 2022.02.03 |
6강. Backpropagation (0) | 2022.01.24 |
5강. Neural Networks (0) | 2022.01.16 |