이전 포스팅에서는 CNN 기법이 어떠한 원리로 이루어지는 지를 살펴보았다.
2021.07.11 - [SW programming/Computer Vision] - [딥러닝 모델] CNN (Convolutional Neural Network) 설명
CNN 기법은 딥러닝 학습을 위한 인공 신경망 알고리즘의 큰 카테고리 중 하나이며, 이 CNN 이라는 기술을 기반으로 이미지를 분류하는 여러가지 Network layer 들이 존재한다. 보통 CNN 모델들이라고 부르며 그 중 대표적인 3가지에 대해서 알아보고자 한다.
CNN Network layer 모델
이번 포스팅에서 다룰 모델은 AlexNet, GoogLeNet, ResNet 이다. 적은 순서대로 점차 기술이 발전했으며 이는 위 그래프를 통해서도 알 수 있다. 그래프는 x축은 Operations. 즉, 연산 처리량을 말하며 y축은 Accuracy로 연산 정확도를 뜻한다. 그리고 원의 크기는 사용되는 메모리의 용량이다.
따라서 우측 상단으로 갈 수록 연산 처리량과 연산 정확도가 높은 더욱 발전된 기술이라고 볼 수 있으며 원의 크기는 작을 수록 좋다.
이러한 관점에서 볼 때 ResNet은 과거 모델에 비해 많이 발전했다고 볼 수 있다.
CNN Network layer 모델의 목적은 다음과 같다.
더 깊은 네트워크를 만들면서(Layer 수를 늘려 정확도를 올림), 성능을 높여간다(파라미터 수를 줄여 처리속도를 낮춤).
AlexNet
기존 문제:
고해상도 이미지에 대규모로 Convolutional Neural Network를 적용하기에는 여전히 많은 연산량이 소모됨.
이와 함께 적은 데이터셋 있으니, 과적합을 막아야 함.
핵심 아이디어:
1) 학습 최적화
- ReLU 활성화 함수 사용
- 2개의 GPU 사용
2) 과적합 방지
- Data Augmentation (적은 연산으로 학습 데이터를 늘리는 법)
- Dropout (일부 Layer를 생략하여 Overfitting 이슈를 해결하는 법)
*Overfitting: Training accuracy는 점점 올라가는데 반해 Test accuracy는 점점 떨어지는 현상
모델 설명:
뉴런: 약 65만개
파라미터 : 약 6200만개
연산량 : 약 6억 3000만개
Convolution layer : 5개
Pooling layer : 3개
Local Response Normalization layer : 2개
Fully-connected layer : 3개
총 Layer : 8개
GoogLeNet
기존 문제:
CNN의 성능을 향상시키기 위해 망의 크기를 늘리자.
즉, 망의 Layer 수(Depth)를 늘리는 것 뿐만 아니라 각 Layer에 있는 unit 수(Width)도 늘리자.
하지만 더 깊고 넓은 네트워크(파라미터 증가)를 형성하면 overfitting, 연산량(연산비용) 증가 등의 문제가 생김.
=> 이를 위해 Inception(1x1 사용) 개념을 적용함.
핵심 아이디어:
1) 향상된 Inception module
기본적인 Inception module은 아래 (a)의 그림 처럼 여러 개의 갈림길을 갖는 것이다. 그럼 다양한 물체의 크기(이미지 크기)에 유동적으로 변화하여 결과 값을 뽑을 수 있다. 즉, 여러 상황에 대비하여 출력값을 얻을 수 있다.
그리고 GoogLeNet에 적용한 향상된 Inception module 은 여기에 1 x 1 convolution layer를 추가한 것이다. 그리고 이를 통해 dimension reduction을 하는 효과를 얻고 있다. (layer를 추가했는데 dimension reduction이 되는 이유는 바로 아래 설명 참조)
2) 1 x 1 convolution의 효과
위 그림을 보면 동일한 단위의 Filter에서 1 x 1 convolution layer를 추가했음에도 불구하고 총 파라미터 갯수는 1440으로 기존보다 더 적어짐을 알 수 있다. 즉, 이를 통해 dimension reduction을 하는 효과를 얻은 것이다.
모델 설명:
파라미터 : 약 500만개
총 Layer : 22개
총 Unit : 약 100개
AlexNet에 비해 파라미터 1/12 수준, 연산 2배 빠름, top5 error 10% 까지 감소
ResNet
기존 문제:
deep 한 네트워크를 위해 layer만 늘린다고 성능이 좋아지지 않는다. 즉 degradation이 발생한다. Training도 잘 되고 Test도 잘 되는데 성능이 잘 안나올 때를 말한다.
핵심 아이디어:
1) Residual learning building block
기본 원리는 입력 x가 들어가고 입력 x값에 출력 값을 더해 내보낸다. 이렇게 하기 위해서는 한가지 지켜야하는 약속이 있는데, 입력과 출력의 dimension을 맞춰주어야 한다. 이것이 유일한 제약 조건이다.
의미는 다음과 같다. 현재 입력과 출력의 차이에 대해서만 학습을 하겠다.
그냥 모의 실험없이 가정해서 진행한 이론인데 결과는 훌륭하였다. 쉬운 방법으로 최적화가 되는 결과가 나온 것이다.
2) Deeper bottle architecture
여기도 1 x 1 convolution을 추가하고 입력과 출력의 Dimension을 맞춰주어야 하므로 마지막에 1x1, 256 layer를 추가해준다.
모델 설명:
총 Layer : 152개
앞으로의 과제
ResNet에 사용된 기법을 통해 100개 정도의 Layer까지의 학습은 많을 수록 성능이 더 좋아졌다. 하지만 그 이상으로 Layer 수를 늘리면 성능이 또 떨어지는 Degradation이 발생한다.
그 이상의 Layer를 사용할 때 성능을 높이는 기법을 또 다시 연구해야 되는 상황이다.
종합 정리용 그래프
참고하면 좋은 글
https://m.blog.naver.com/laonple/220654387455
https://warm-uk.tistory.com/44?category=824848
https://www.edwith.org/deeplearningchoi/lecture/15296?isDesc=false
위 글이 도움이 되셨나면, 아래 하트를 눌러주세요↓
감사합니다 \( ˆoˆ )/
'AI | 딥러닝 > Concept' 카테고리의 다른 글
[AI/딥러닝] 딥러닝 모델을 GPU에 구동시키는 방법 (Feat. Framework) (0) | 2021.08.08 |
---|---|
[AI/딥러닝] 객체 검출(Object Detection) 모델의 종류 R-CNN, YOLO, SSD (2) | 2021.08.01 |
[딥러닝 모델] CNN (Convolutional Neural Network) 설명 (9) | 2021.07.11 |
AI, 머신러닝, 딥러닝 이란? 그리고 딥러닝 모델 종류 (3) | 2021.07.10 |
[FPGA의 미래] AI와 딥러닝 칩 강자로 FPGA가 각광받고 있다? (0) | 2021.06.18 |
댓글