AlexNet 핵심 키워드
- 총 8개의 층(5개의 conv층 + 3개의 fc층)
- ReLU
- GPU 2대 병렬처리
- Local response norm
- overlapping pooling
- dropout
- augmentation
AlexNet
https://bskyvision.com/418 을 보고 공부

출처 : https://bskyvision.com/421
그림을 보면서 이해하는게 가장 빠른 것 같다. 빨간 선으로 이어진 8개의 레이어(앞 부분의 5개 컨볼루션 레이어, 뒷 부분의 3개 full-connected 레이어 확인 가능) 가 있다. 그 중 3번째 컨볼루션 레이어는 전 단계 두 채널의 특성맵들과 모두 연결되어 있는 특징이 있다.
- 입력값 227 x 227 x 3 (RGB 컬러 이미지) - 그림의 224는 잘못된 입력된 부분
1. 첫번째 레이어(컨볼루션)
- 96개의 필터커널, 11 x 11 x 3 사이즈, stride 4, zero-padding 사용하지 않음 => 96장의 55 x 55 x 96 특성맵
- ReLU 함수로 활성화
- 3 x 3 overlapping max pooing, stride 2 => 27 x 27 x 96 특성맵
- local response normalization : 특성맵의 차원을 변화시키지 않기 때문에, 특성맵 크기 유지 (27 x 27 x 96)
1-1. 특성맵 계산
1-2. LRN(Local Response Normalization)
https://taeguu.tistory.com/29 를 보고 공부
LRN(Local Response Noramlization) layer implement the lateral inhibition.
lateral inhibition(측면 억제)는 신경생리학 용어로, 한 영역에 있는 신경 세포가 상호 간 연결되어 있을 때 그 자신의 축색이나 자신과 이웃 신경세포를 매개하는 중간신경세포(interneuron)을 통해 이웃에 있는 신경 세포를 억제하려는 경향을 말한다.
이 개념을 이해하기 위해서 측면 억제의 유명한 그림인 헤르만 격자를 참고한다.
검은 사각형 안에 흰색의 선이 지나가는데, 신기한 것은 흰색의 선에 집중하지 않으면 회색의 점이 보인다. 이 현상은 측면 억제에 의해 발생한다. 흰색으로 둘러싸인 측면에서 억제를 발생시키기 때문에 흰색이 더 반감되어 보인다.

출처 : https://www.notion.so/likelion-aischool/4f77be87d2c042b2b746c098136bf80a
1-3. AlexNet이 측면 억제를 사용한 이유
ReLu 사용을 위해서 측면 억제를 사용했다. ReLu는 양수의 방향으로는 입력의 값을 그대로 사용한다. → CONV 나 POOLING 시 매우 높은 하나의 픽셀 값이 주변의 픽셀에 영향을 미치게 된다. → 이 부분을 방지하기 위해 다른 ActivationMap 의 같은 위치에 있는 픽셀끼리 정규화를 해준다. 이 개념이 AlexNet에서 사용되는 LRN이다.
텐서플로우에서 LRN 을 사용하려면 th.nn.local_response_normalization 을 통해 사용할 수 있지만 현재는 Batch Normalization을 사용한다.


이미지 출처 :https://gwoolab.tistory.com/57
2. 2~5번째 레이어(Convolution Layer)
두번째 레이어(컨볼루션 레이어)
- 256개의 5 x 5 x 48 커널, stride 1, zero-padding 2 => 27 x 27 x 256 특성맵
- Relu 함수
- 3 x 3 Overlapping max pooing, stride 2 => 13 x 13 x 256 특성맵
- local response normalization, 13 x 13 x 256
세번째 레이어(컨볼루션 레이어)
- 384개의 3 x 3 x 256 커널, stride 1, zero-padding 1 => 13 x 13 x 384 특성맵
- ReLU 함수
네번째 레이어(컨볼루션 레이어)
- 384개의 3 x 3 x 192 커널, stride 1, zero-padding 1 => 13 x 13 x 384 특성맵
- ReLU 함수
다섯번째 레이어(컨볼루션 레이어)
- 256개의 3 x 3 x 192 커널, stride 1, zero-padding 1 => 13 x 13 x 256 특성맵
- ReLU 함수
- 3 x 3 overlapping max pooing, stride 2 => 6 x 6 x 256 특성맵
2-1. Overlapping max pooling
풀링은 컨볼루션을 통해 얻은 특성맵의 크기를 줄인다.(output 이 압축되어서 나온다.) pooling을 할 때 겹치지 않게 하는게 일반적이다. AlexNet은 max pooling 쓰면서도 stride가 커널사이즈보다 작게 하는 overlapping pooling 을 사용했다.
- LeNet-5는 non-overlapping 평균 풀링
- AlexNet은 overlapping 최대 풀링

overlapping max pooling 이미지 출처 : https://bskyvision.com/421
3. 6~9번째 레이어(Fully Connected Layer)
여섯번째 레이어(Fully Connected)
- 6 x 6 x 256 특성맵을 flatten => 6 x 6 x 256=9216 차원의 벡터
- 여섯번째 레이어의 4096개의 뉴런과 fully connected
- ReLU 함수
일곱번째 레이어(Fully Connected)
- 4096개의 뉴런이 전 단계의 4096개의 뉴런과 fully connected
- ReLU 함수
여덟번째 레이어(Fully Connected)
- 1000개의 뉴런이 전 단계의 4096개의 뉴런과 fully connected
- 1000개 뉴런 출력값에 softmax 함수 적용 => 1000개 클래스 각각에 속할 확률 나타냄
4. 추가 개념(ReLU, dropout, data aumentation)
ReLU
- LeNet-5 에서 사용한 Tanh 함수와 비슷한 정확도를 유지하면서 속도는 6배 빠르다.
- AlexNet 이후로는 활성화 함수로 ReLU 함수를 선호한다.

dropout
- dropout 이란 fully-connected layer 의 뉴런 중 일부를 생략하면서 학습을 진행하며, 과적합을 막기 위한 규제 기술의 일종
- 몇몇 뉴런의 값을 0으로 바꾼다.
- 0으로 바뀐 뉴런들은 forward pass 와 back propagation 에 영향을 미치지 않는다.
- 훈련시에만 적용하고, test 시에는 모든 뉴런을 적용한다.

drop out 이미지 출처 :https://bskyvision.com/421
data augmentation(데이터 증강)
- 과적합을 막기 위한 방법으로 dropout 외에 사용된 방법
- 하나의 이미지를 가지고 여러 장의 비슷한 이미지를 만들며 데이터 양을 늘린다.
- 좌우 반전, crop 등을 활용
AlexNet 특징
- LeNet 의 32 x 32의 1채널 이미지 와 AlexNet의 227 x 227 의 3채널 이미지
- 첫번째 컨볼루션 레이어를 거치며, GPU-1 에서는 컬러와 상관 없는 정보를 추출하기 위해 kernel 이 학습되고(high-level feature), GPU-2 에서는 컬러와 관련된 정보를 추출하기 위해 kernel 이 학습(low-level feature)

- 정답 맞추지 못한 경우에도 정답 후보 군을 확인하면 실제로 사람이 혼동할 법한 답을 정답으로 고르는 것을 확인할 수 있다.

이미지 출처 : https://m.blog.naver.com/laonple/221218707503
공부하며
- LeNet-5 와 비교되는 부분이 많아서 다음으로는 LeNet-5 를 공부하고 싶다.
- 데이터 증강 부분과 Open CV도 공부하면 좋겠다.