Search
Login
💬

AlexNet: ImageNet Classification with Deep Convolutional Neural Networks

Created
2022/08/09
Editor
Tags
CNN

0. 이 논문을 선택하게 된 배경

지난 1주일간 이 책을 공부했는데, 가장 연관이 깊다고 생각한 논문을 골랐습니다.

1. CNN 이해(복습)

참고)
[딥러닝 아키텍처] 잘 설계된 딥러닝 아키텍처 특징 1, 2, 3편|작성자 인텔리즈
CNN, Convolutional Neural Network 요약
이 논문을 읽기 전 CNN에 대해 잘 모르시겠다면 이 글들부터 읽고 오는 것을 추천합니다!
간단한 CNN 설명
Fully Connected Layer 만으로 구성된 인공 신경망의 입력 데이터는 1차원(배열) 형태로 한정됩니다. 한 장의 컬러 사진은 3차원 데이터입니다. 배치 모드에 사용되는 여러 장의 사진은 4차원 데이터입니다. 사진 데이터로 완전연결(FC, Fully Connected) 신경망을 학습시켜야 할 경우에, 3차원 사진 데이터를 1차원으로 평면화시켜야 합니다. 사진 데이터를 평면화 시키는 과정에서 공간 정보가 손실될 수밖에 없습니다. 결과적으로 이미지 공간 정보 유실로 인한 정보 부족으로 인공 신경망이 특징을 추출 및 학습이 비효율적이고 정확도를 높이는데 한계가 있습니다. 이미지의 공간 정보를 유지한 상태로 학습이 가능한 모델이 바로 CNN(Convolutional Neural Network)입니다.
CNN(Convolutional Neural Network)은 기존 Fully Connected Neural Network와 비교하여 다음과 같은 차별성을 갖습니다.
각 레이어의 입출력 데이터의 형상 유지
이미지의 공간 정보를 유지하면서 인접 이미지와의 특징을 효과적으로 인식
복수의 필터로 이미지의 특징 추출 및 학습
추출한 이미지의 특징을 모으고 강화하는 Pooling 레이어
필터를 공유 파라미터로 사용하기 때문에, 일반 인공 신경망과 비교하여 학습 파라미터가 매우 적음
CNN은 위 이미지와 같이 이미지의 특징을 추출하는 부분과 클래스를 분류하는 부분으로 나눌 수 있습니다. 특징 추출 영역은 Convolution Layer와 Pooling Layer를 여러 겹 쌓는 형태로 구성됩니다. Convolution Layer는 입력 데이터에 필터를 적용 후 활성화 함수를 반영하는 필수 요소입니다. Convolution Layer 다음에 위치하는 Pooling Layer는 선택적인 레이어입니다. CNN 마지막 부분에는 이미지 분류를 위한 Fully Connected Layer가 추가됩니다. 이미지의 특징을 추출하는 부분과 이미지를 분류하는 부분 사이에 이미지 형태의 데이터를 배열 형태로 만드는 Flatten 레이어가 위치 합니다.
CNN은 위 이미지와 같이 이미지의 특징을 추출하는 부분과 클래스를 분류하는 부분으로 나눌 수 있습니다. 특징 추출 영역은 Convolution Layer와 Pooling Layer를 여러 겹 쌓는 형태로 구성됩니다. Convolution Layer는 입력 데이터에 필터를 적용 후 활성화 함수를 반영하는 필수 요소입니다. Convolution Layer 다음에 위치하는 Pooling Layer는 선택적인 레이어입니다. CNN 마지막 부분에는 이미지 분류를 위한 Fully Connected Layer가 추가됩니다. 이미지의 특징을 추출하는 부분과 이미지를 분류하는 부분 사이에 이미지 형태의 데이터를 배열 형태로 만드는 Flatten 레이어가 위치 합니다.

2. AlexNet

모델 소개

1번째 두 개의 레이어는 중첩 최대 풀링 레이어(Max Pooling)가 있습니다. 이는 데이터의 중요한 요소들만 요약하여 추출하는 기능을합니다.
3~ 5번째 레이어는 직접 연결됩니다. 이는 중간다리 역할의 레이어로 파라매터화하기 위한 레이어들입니다.
5 번째 레이어는 중첩 최대 풀링 레이어(Max Pooling)가 뒤따릅니다. 이 레이어의 출력은 완전히 연결된 레이어(Fully Connected Layer)로 두 개로 구성됩니다. 이 레이어의 경우 1~5번째 생성되어 학습된 데이터들을 FC Layer로 모아 Categorized하는 기능을 하고 최종적으로 분류하는데 도움을 줍니다.
마지막으로 완전히 연결된(Fully Connected Layer) 두 번째 레이어는 1000 클래스 레이블이 있는 softmax 분류기로 분류됩니다.
Raw Input Data에서 전체적으로 뒤로 흐를 수록 각 요소들을 Categorized시키고 데이터들을 각 요소별로 정리한후 그것을 또한 분류하여 데이터들을 각각 분할하여 분류할수 있게 만들어 주는 것이 알렉스넷 아키텍처의 핵심입니다.

의의

Top 5 test error 기준 15.4%를 기록해 기존 한계치인(26.2%)를 큰 폭으로 개선하였습니다.

AlexNet의 구조적 특징 7가지

1.
ReLU(비선형 활성함수)
실제 인간의 뇌처럼 신경망을 구성한다면 활성화 함수는 tanh, sigmoid가 되어야 하는데, 왜 ReLU가 성능이 좋을까요? 그 이유는 ReLU가 non-saturation하기 때문입니다. 그래서 이때 non-saturation이 무엇일까요?
saturation(포화)
그리고 ReLU의 non-saturation이 stochastic gradient descent와 결합되어 더욱더 효율이 증대됩니다. feature가 큰 값을 가지고 큰 gradient를 가지고 있을 경우 관성이 생겨 더욱더 네트워크가 빨리 최적화합니다. 또한 ReLU는 미분하기에도 단순하여, 연산량의 면에서도 충분한 이점을 가지고 있습니다.
위 그림을 보시면 실선이 ReLU를 사용했을 때이고 점선이 tanh을 사용한 경우입니다.
2.
Training on Multiple GPUs (다중 GPU를 이용한 학습)
AlexNet은 2012년 당시 컴퓨터 비전 작업에 사용된 기존의 CNN보다 훨씬 컸습니다(예: Yann LeCun의 LeNet 논문 1998). 이는 6천만 개의 파라미터와 650,000개의 뉴런을 가지고 있으며 GTX 580 3GB GPU 두 개에서 학습하여 5-6일이 걸렸습니다. 기존에 CPU로 학습하였더라면 50일 60일이 걸렸을 것입니다만 획기적으로 Mutiple GPUs를 이용한 병렬처리 기법으로 학습시간을 획기적으로 줄였습니다.
3.
Local Response Normalization(커널 정규화) - overfitting 방지 기법
Lateral inhibition이란 것을 아십니까? 실제 뇌 세포의 증상인데, 강한뉴런의 활성화가 근처 다른 뉴런의 활동을 억제시키는 현상입니다. 그래서 아래 그림을 보시면 검은 네모들 사이에 회색 점?부분? 이 보일텐데 이는 검은색 사각형을 보고 뉴런들이 강하게 반응하여 흰색부분(약한 뉴런)에 반응하여 회색이 조금 보이게 됩니다.
그래서 이것이 왜 나왔냐하면, Neural Network의 Feature에서 한 세포가 유별나게 강한 값을 가지게 된다면, 근처의 값이 약하더라도 convolution 연산을 한다면 강한 feature를 가지게 되는것입니다. 그렇다면 over-fitting이 잘 일어나게 되겠죠(training dataset에만 feature가 크게 반응하니까)
그래서 어떠한 filter가 있을 때, 그 주위 혹은 같은 위치에 다른 channel의 filter들을 square-sum하여 한 filter에서만 과도하게 activate하는 것을 막습니다.
수식
a^i_x,y는 i번째 kernel의 x,y값입니다. 그리고 정규화가 적용되어 b^i_x,y로 바뀌게 되는 것입니다. n은 해당 a의 위치에 spatial position한 kernel들의 개수를 말합니다. N은 총 kernel 개수입니다. k, alpha, beta는 normalization을 위한 하이퍼 파라미터입니다.
4.
Overlapping Pooling
일반적으로 max pooling을 할 때는 각각 중복되지 않는 영역에서 polling 합니다. 하지만 AlexNet은 3x3 영역을 2픽셀 단위로 pooling 하여 조금씩 겹치는 부분이 있도록 pooling 하여, overfitting 현상을 개선하였습니다.
5.
Reducing Overfitting(오버피팅 감소)
아래 두가지 방식으로 오버피팅을 줄였습니다.
5-1. Data Augmentation(데이터 확장)
Over-fitting을 막는 가장 단순한 방법은 데이터셋의 크기를 많이 늘이는 것입니다. 그래서 Data Augmentation이란 것을 통해 dataset을 더 크게만드는 방법을 제시하였습니다.
256x256으로 만들어진 이미지에서 랜덤으로 224x224로 이미지를 여러장 crop하고, 이미지를 filp(좌우반전)한 상태에서도 crop하여 이미지를 2048배 늘였습니다. 테스트시에는 이미지의 가장자리 4개와 정가운데에서 patch를 만들어 네트워크를 통과시킨후 softmax를 평균냈습니다. 이미지 데이터셋에 PCA 분석을 하여 데이터를 학습하기 쉽도록 변환하였습니다.
5-2. Dropout(네트워크 생략)
Dropout이란 hidden layer의 몇몇 뉴런의 값을 0으로 바꿔버립니다. 그래서 neuron이 "dropped out(탈락)"되어 forward pass, back propagation시 아무런 영향을 미치지 않습니다. 이 drop out은 뉴런들 간의 복잡한 상호의존도를 낮춰 over fitting을 막습니다. 테스트 시에는 모든 뉴런을 사용하되 output에 0.5를 곱하여 사용하였습니다.
[참고한 글]
밑바닥부터 시작하는 딥러닝1