설정 수치에서 나오는 ILSVRC는 ImageNet Large Scale Visual Recognition Challenge 의 약자로, 매년 열린 이미지 인식 대회이다.
이 수치들은 모델이 얼마나 틀렸는지를 나타내는 오차율(Error Rate)이다. 숫자가 낮을수록 똑똑한 모델임을 의미한다.
오늘날엔, ReLU, Dropout 등의 방법을 사용하는 것이 당연하다고 느껴지지만, AlexNet 이전에는 조금 달랐다.
활성화 함수 :
연산 장치 :
데이터 부족과 과적합 :
위에서 설명한 요소들은, 각각 하나의 기법으로 당시에 논문으로 존재했을 수 있지만, 이들을 조합해 이미지넷이라는 대규모 데이터셋을 뚫어낸 것이 AlexNet이 처음이었다.
추가로, AlexNet이 설계 당시 고민했던 성능 향상과 과적합 방지를 위한 구체적인 장치가 존재한다.
LRN(Local Response Normalization)
Overlapping Pooling(중첩 풀링)
AlexNet 구조를 살펴보기 전에 Convolution, Pooling, Fully Connected Layer에 대해 설명하겠다.

처음 입력 이미지는 224x224x3 이미지이다. 해당 이미지에 우선 11x11 커널과 Stride를 4로 적용해 첫 컨볼루션 연산이 진행된다. 연산의 결과물은 55x55x48 의 특징맵으로 보이지만, 실제로 두 GPU를 사용하기에 55x55x96의 특징맵이 나온다.
이 과정 뒤에 이미지에선 생략되어 있지만 LRN 정규화 과정을 거치고, Max Pooling + 컨볼루션 연산을 진행해 27x27x256 특징맵을 추출한 뒤 LRN, Max Pooling 과정을 거쳐 13x13x384 형태의 특징맵을 추출한다.
이 때 LRN을 초기 두 과정에서만 사용하는 이유는, AlexNet 개발 당시에 초기 레이어에서 강한 자극(특징)이 나타날 때 주변을 억제하는 것이 효과적이라고 판단해, 뒤로 갈수록 특징이 추상화되기 때문에 굳이 LRN을 쓰지 않아도 된다고 판단했기 때문이다.
이후 Pooling 없이 Convolution 연산만 2회 추가로 진행하는데, AlexNet 개발 당시 특징맵의 축소를 하기 전 이미지의 특징을 더 많이 추출한 뒤 최종 Pooling을 하는 것을 목적으로 하여 해당 방법을 사용했고, 최후에 Max Pooling 후 Fallten으로 1차원으로 펼쳐 Dense Layer를 통해 Fully Connected 구조를 완성하고, 데이터셋의 클래스 개수인 1000개로 최종 연결해 판별한다.
논문 본문과 그림에는 224x224x3 크기의 이미지를 사용하지만, Conv1 과정 이후 55x55의 이미지 스케일 출력을 얻기 위해선, 입력 이미지를 227x227 no padding 구조나 224x224 padding=2 구조를 사용할 수 있다.
그럼에도 224x224x3으로 설명했으면 그대로 보면 되는 것이 아니냐. 라고 할 수 있지만, 이유가 존재한다. 저자들은 원본 이미지를 256x256 크기로 리사이징 한 후 이미지에서 여기저기를 224x224 크기로 랜덤하게 잘라내는 Random Cropping 과정을 거쳐 학습 데이터로 사용하였다. 논문에선 자른 크기인 224를 사용했지만, 실제 구현 코드나 실연산 과정에서는 패딩을 추가하거나 입력을 227x227로 맞춰 연산의 정밀도를 높였을 것으로 추정되기에 두 가지 입력 스케일에 관한 이야기가 나온 것이다.
하지만, 입력 스케일보다 핵심은 큰 커널(11x11)과 큰 Stride(4)에 있다. 이미지넷 데이터는, 224x244(실연산 시 227x227)로 AlexNet 개발 당시에는 고해상도에 속하였다. Stride를 1이나 2로 작게 설정하면, 다음 층으로 넘어가는 데이터(특징맵)의 크기가 너무 커져서 당시 GPU 메모리가 감당할 수 없었기에, Stride를 4로 사용함으로써 가로와 세로 크기를 단숨에 1/4로 줄였고, 결과적으로 전체 연산량을 낮춰 학습이 가능하게 만들었다.
추가로, 커널 또한 큰 커널을 사용함으로, 한 번에 이미지의 더 넓은 구역을 보고자 하였다. 작은 커널은 작은 선이나 점과 같은 세밀한 특징을 찾는 것에 유리하지만, 전체적인 물체의 윤곽이나 구조를 파악하기 위해선 여러 층을 깊게 쌓아야만 한다. AlexNet은 당시 하드웨어적 한계, 소요 시간 등 층을 깊게 쌓기 어려운 환경이었기 때문에, 앞부분에서 큰 커널을 사용해 전반적인 특징을 빠르게 훑어내고자 하였다.
결국, 초기 레이어에선 이미지의 거칠거나 큰 특징을 잡아내는 역할을 한다. 픽셀 하나하나의 세밀한 정보보단 큰 덩어리와 경계선과 같은 정보가 더 중요하였고, 큰 커널과 Stride를 사용해 큰 특징들을 빠르게 요약해 상위 레이어로 전달하는 역할을 수행하기 위해 위와 같은 구조를 사용하였다.
당시 사용하던 Sigmoid, TanH와 같은 활성화 함수는 포화 계열로, 깊은 네트워크에서 오차 역전파 시 가중치 업데이트가 거의 일어나지 않아 학습 속도가 매우 느려지게 만들었고, 기울기 소실 문제를 동시에 가지고 있었다. 이에 반해, ReLU 함수는 f(x) = max(0, x) 형태로, 양수 영역에서는 기울기가 항상 1로 일정해, 아무리 층이 깊어져도 기울기가 소멸되지 않고 전달되어 관련 연구를 통해 Sigmoid보다 약 6배 더 빠르게 목표 오차율에 도달할 수 있었다.
추가로, Sigmoid 함수의 구조상 지수 연산이 포함되어 있어 당시 하드웨어 입장에서 꽤나 무거운 연산을 진행해야 했지만, ReLU 함수는 단순히 양수인지만을 판단하는 조건문 하나로 끝나 하드웨어 자원을 아끼는 역할도 동시에 맡을 수 있었다.
LRN은 같은 공간 위치에서 인접한 채널들의 반응을 함께 바라보는 정규화 방법이다. 쉽게 설명하면 특징맵이 존재할 때 이미지의 위치(x,y)는 고정하고 같은 위치의 다른 채널들의 반응을 살피는 정규화 방법으로, 한 채널의 반응이 두드러진다면, 주변 채널 값을 억제해 그 값을 상대적으로 살려주고, 여러 채널이 동시에 반응한다면, 분모 값이 커지면서 값을 눌러, 툭 튀어나오는 특출난 특징일 수록 비교적 더 높은 값을 가질 수 있도록 하는 정규화 방법이다.
수식에서 는 우리가 정규화하고 싶은 현재 채널의 활성화 값이고, 분모에 있는 은 현재 채널 i를 기준으로 앞뒤로 인접한 n개의 채널을 의미한다. 따라서 현재 채널에 비해, 앞뒤 n개의 채널과의 서열, 관계를 의미한다. 주변 j가 조용하면, 분모가 작아져 나의 값은 그대로 유지되거나 돋보이고, 주변 j가 시끄러우면 분모가 커져 나의 값을 깎는 형태의 정규화가 진행된다. 이때 n, , , k는 이를 얼마나 세게 누를 것인가를 결정하는 하이퍼 파라미터일 뿐 수식의 핵심은 위와 같다.
LRN 과정을 ReLU 다음에 하는 이유는, ReLU는 음수를 모두 0으로 만들어버리기 때문에, LRN 계산 시 분모가 음수 때문에 꼬일 일이 없어, 오직 얼마나 강하게 활성화되었는지(양수 값)만 가지고 정규화를 진행할 수 있게 되기 때문이다.
현대적 Batch Norm은 데이터 배치 방향을 기준으로, 한 번 학습할 때 들어오는 여러 장의 이미지(Batch) 전체를 대상으로 각 채널별 평균과 분산을 구해 전체적인 평균에 맞춰 모든 사진의 값을 고르게 펴주는 방식이다.
일반적인 Max Pooling은 압축을 위한 Window 크기와 Stride 크기를 같게 설정하여 Pooling 영역이 서로 겹치지 않게 설정한다.(ex: 2x2 window, 2 stride) 하지만, AlexNet은 3x3 window에 stride 2를 사용하여, 인접한 pooling window가 서로 겹치게 설정하였다.
이러한 방식은, 같은 특징에 대한 작은 위치 변화에 덜 예민하게 만들어, 이미지를 더욱 유연하게 보기 위한 결정이다. 일반적인 풀링 방식은 구역을 딱딱 나누기 때문에, 특징이 경계선에 걸쳐 있으면 정보가 왜곡되거나 소실될 확률이 높지만, 중첩 풀링을 사용해 필터가 겹치면서 지나가기 때문에, 이미지의 한 점이 여러 번의 풀링 연산에 중복해 참여하게 되면서, 특징이 이미지 내에서 옆으로 몇 픽셀 정도 이동하더라도 겹쳐진 윈도우 중 하나에는 여전히 강하게 잡히게 된다. AlexNet 논문에서는 이러한 Overlapping Pooling을 통해 오차율과 과적합을 줄일 수 있었다는 결과를 얻었다고 설명한다.
AlexNet 연구 당시 GTX 580 한 장의 메모리는 3GB로, 큰 규모의 네트워크를 한 GPU에 올리기 어려웠기 때문에, AlexNet 저자들은 네트워크를 두 GPU에 분할해 학습하였다.
이러한 구조적 특징으로 인해, 데이터를 주고받을 때 발생하는 통신 비용으로 인해 학습 속도가 너무 느려지는 문제가 발생하였고, 저자들은 이에 모든 층에서 데이터를 주고받는 것이 아닌 일부 층에서만 주고받는 구조로 변경하였다.
Conv 2, 4, 5 채널에선 각자의 채널에 집중하는 내부 연산 구조를 사용하였다. 이 레이어들은 위 아래 GPU가 서로 소통하지 않고, 자기가 가진 데이터만 가지고 연산을 진행한다. 기본적인 이유는 통신량을 줄이기 위해서였지만, 이러한 구조적 특징으로 인해 각 GPU는 서로 다른 종류의 특징을 독립적으로 더 깊게 학습하는 결과를 함께 얻게 되었다.
Conv 3은 서로의 정보를 공유하는 위치로, Conv1, 2를 거치며 각 GPU가 따로 뽑아낸 특징들은 한 번은 섞어주어야 더 고차원적인 특징을 만들 수 있기 때문에 각 GPU간 교류를 채택하였다.
마지막 Dense(FC) Layer에서는 모든 단서를 모아 분류해야 하는 단계이기 때문에, 모든 노드가 두 GPU의 결과를 모두 참조하는 구조를 채택하였다.
AlexNet은 당시 기준으로 매우 큰 규모의 이미지 데이터셋인 ImageNet을 학습 대상으로 사용했고, 네트워크의 깊이와 파라미터 수 역시 상당히 큰 편이었다. 이러한 구조는 높은 표현력을 제공한다는 장점이 있지만, 반대로 학습 데이터의 패턴을 지나치게 외워버리는 과적합(overfitting)이 발생하기 쉽다는 문제도 함께 가진다. 따라서 AlexNet은 모델의 일반화 성능을 높이기 위해 다양한 데이터 증강(data augmentation) 기법을 적극적으로 사용하였다.
대표적으로 학습 단계에서는 이미지를 256×256 크기로 맞춘 뒤, 그중 임의의 위치에서 224×224 영역을 랜덤하게 crop하여 입력으로 사용하였다. 또한 좌우 반전(horizontal flip)도 함께 적용하였다. 이 방식은 하나의 원본 이미지로부터 여러 형태의 학습 샘플을 만들어내는 효과를 가지므로, 모델이 특정 위치나 방향에만 의존하지 않고 보다 다양한 형태의 특징을 학습하도록 돕는다. 즉, 같은 객체라도 위치가 조금 달라지거나 좌우가 뒤집힌 상황을 함께 경험하게 하여 일반화 능력을 높인 것이다.
여기에 더해 AlexNet은 RGB PCA, 즉 Lighting Augmentation 기법도 사용하였다. 이 기법의 핵심은 단순히 이미지를 밝게 하거나 어둡게 만드는 것이 아니라, 자연스러운 조명 변화에 가까운 색상 변형을 만들어내는 것에 있다. 만약 모든 픽셀의 RGB 값에 일정한 수를 더하는 식으로 밝기를 조절하면, 이미지 전체가 단순히 하얗게 뜨거나 어둡게 변할 뿐 실제 환경에서 나타나는 조명 변화와는 거리가 있다. 반면 PCA를 사용하면 학습 데이터 전체의 RGB 분포를 분석하여, 어떤 색 조합이 가장 지배적으로 나타나는지, 그리고 RGB 채널 사이에 어떤 상관관계가 있는지를 파악할 수 있다. 이후 이 주성분 축 방향으로 작은 잡음을 추가하면, 단순한 색 변화가 아니라 실제 조명의 강도나 색온도가 달라지는 것과 유사한 자연스러운 변화를 만들 수 있다. 즉, 모델이 특정 색감이나 조명 조건에만 의존하지 않도록 하여, 조명 변화에 더 강인한 특징을 학습하게 만든 것이다.
AlexNet은 학습 단계뿐 아니라 테스트 단계에서도 성능을 높이기 위한 기법을 사용했다. 대표적인 예가 Multi-Crop 평가이다. 테스트 시에는 한 장의 이미지에서 5개의 crop, 즉 좌상단(top-left), 우상단(top-right), 중앙(center), 좌하단(bottom-left), 우하단(bottom-right) 영역을 잘라내고, 여기에 각각 좌우 반전까지 적용하여 총 10장의 이미지를 만든다. 그리고 완성된 모델에 이 10장의 이미지를 각각 입력하여 예측 결과를 얻는다.
여기서 중요한 점은, 이러한 과정이 모델 내부의 특정 레이어에 내장된 연산이 아니라는 것이다. 즉, 네트워크 구조 안에 “10-crop 평가 레이어”가 들어 있는 것이 아니라, 추론(inference) 단계에서 동일한 이미지를 여러 방식으로 잘라 만든 뒤 각각을 모델에 통과시키고, 그 결과를 평균내어 최종 예측을 결정하는 외부 평가 전략이라고 이해하는 것이 정확하다. 각 crop에 대해 모델은 클래스별 softmax 확률을 출력하고, 이 10개의 확률 벡터를 평균낸 뒤 가장 높은 평균 확률을 가진 클래스를 최종 정답으로 선택한다.
이러한 평가 방식을 사용하는 이유는 한 번의 crop만으로는 이미지의 중요한 특징이 잘려나갈 수 있기 때문이다. 예를 들어 강아지 사진에서 코나 눈과 같은 중요한 부분이 crop 과정에서 일부 사라지면, 해당 crop만 본 모델은 오답을 낼 가능성이 높아진다. 그러나 서로 다른 위치에서 자른 여러 이미지를 함께 사용하면, 어떤 crop에서는 중요한 특징이 잘릴 수 있어도 다른 crop에서는 그 특징이 포함될 수 있다. 따라서 여러 예측을 평균내면 특정 crop의 우연한 실패를 완화할 수 있고, 보다 안정적이고 신중한 최종 판단이 가능해진다. 즉, Multi-Crop 평가는 모델 자체를 바꾸는 기법이라기보다, 이미 학습된 모델의 성능을 더 안정적으로 끌어내기 위한 전략이라고 볼 수 있다.
정리하면, AlexNet은 큰 모델에서 발생하기 쉬운 과적합을 줄이기 위해 학습 단계에서 랜덤 크롭, 좌우 반전, RGB PCA 기반의 조명 증강을 사용하였고, 테스트 단계에서는 10-crop 평가를 통해 하나의 이미지에 대한 여러 예측을 평균내어 최종 분류 결과를 결정하였다. 이러한 전략은 모델이 특정 위치, 방향, 색감, 조명 조건에 과도하게 의존하지 않도록 만들고, 최종적으로 더 강인하고 안정적인 분류 성능을 얻는 데 중요한 역할을 하였다.
Dropout은 학습 과정에서 일부 뉴런의 출력을 무작위로 0으로 만들어, 모델이 특정 뉴런이나 특정 연결 구조에 과도하게 의존하지 못하도록 하는 정규화 기법이다. AlexNet에서는 특히 첫 번째와 두 번째 Fully Connected Layer에 Dropout을 p=0.5로 적용하였다. 이는 학습 시 각 뉴런이 50% 확률로 비활성화된다는 뜻으로, 한 번의 forward가 수행될 때마다 해당 층의 뉴런들 중 절반 정도가 무작위로 꺼지고, 나머지 뉴런들만을 이용해 예측이 이루어진다. 따라서 모델은 매번 일부 뉴런이 없는 상황에서도 동작할 수 있도록 학습되어야 하며, 자연스럽게 특정 뉴런 하나에만 의존하는 방식의 학습을 피하게 된다.
이러한 Dropout의 핵심 목적은 co-adaptation, 즉 뉴런들 사이의 과도한 상호 의존을 줄이는 데 있다. co-adaptation이란 특정 뉴런들이 서로 강하게 결합되어, 항상 특정 조합으로만 의미 있는 특징을 만들어내는 현상을 말한다. 예를 들어 어떤 뉴런 A가 불완전한 특징을 만들어도, 옆의 뉴런 B가 항상 그것을 보완해주는 식으로 학습이 진행되면 두 뉴런은 서로에게 지나치게 의존하게 된다. 이렇게 형성된 표현은 학습 데이터에서는 잘 작동할 수 있지만, 새로운 데이터가 들어왔을 때는 동일한 조합이 나타나지 않아 성능이 급격히 떨어질 수 있다. 즉, 이는 모델이 데이터의 일반적인 패턴을 배우기보다 특정한 조합을 외워버리는 과적합으로 이어질 위험이 있다. Dropout은 학습 중 매번 다른 뉴런을 무작위로 제거함으로써 이러한 지나친 상호 의존을 끊고, 각 뉴런이 보다 독립적이고 일반적인 특징을 학습하도록 유도한다.
AlexNet에서 Dropout을 FC1, FC2에는 적용하고 마지막 FC3에는 적용하지 않은 이유도 구조적으로 설명할 수 있다. AlexNet은 convolution layer를 거쳐 추출한 feature를 마지막의 fully connected layer에서 종합해 분류를 수행하는 구조인데, 이때 전체 파라미터의 상당수가 fully connected layer에 집중되어 있다. 특히 FC1과 FC2는 각각 4,096개의 노드를 가지며, 파라미터 수가 매우 많기 때문에 모델이 학습 데이터를 그대로 외워버릴 가능성이 가장 큰 구간이다. 다시 말해, AlexNet에서 과적합이 가장 심하게 발생할 수 있는 부분이 바로 이 두 개의 큰 fully connected layer이며, Dropout은 이 구간을 강하게 규제하기 위한 장치로 사용된 것이다.
반면, 마지막 fully connected layer인 FC3는 최종 클래스 점수를 출력하는 층으로, 예를 들어 ImageNet 기준으로 1,000개의 클래스와 직접 연결된다. 이 층은 이미 앞선 층에서 추출되고 정리된 정보를 바탕으로 최종 판별을 수행하는 역할을 하므로, 여기서까지 뉴런을 무작위로 끄면 오히려 분류 결과 자체를 불안정하게 만들 가능성이 있다. 따라서 AlexNet은 과적합 위험이 특히 큰 FC1, FC2에만 Dropout을 적용하고, 최종 판별을 담당하는 FC3에는 적용하지 않았다.
추가로 한 가지 더 정확히 짚고 넘어가면, Dropout의 스케일 보정 방식은 구현 방식에 따라 설명이 조금 다를 수 있다. 고전적인 설명에서는 테스트 시 모든 뉴런을 사용하되, 학습 때 절반만 사용했던 효과를 맞추기 위해 출력값에 0.5를 곱한다고 설명하기도 한다. 그러나 현대 딥러닝 프레임워크, 예를 들어 PyTorch에서 사용하는 방식은 보통 학습 시 살아남은 뉴런의 출력을 1/(1−p)만큼 키워 주고, 평가 시에는 아무 조정 없이 모든 뉴런을 그대로 사용하는 inverted dropout 방식이다. 따라서 개념적으로는 “학습과 평가 사이의 출력 크기 균형을 맞춘다”는 점이 핵심이고, 실제 보정이 학습 때 들어가느냐 평가 때 들어가느냐는 구현 방식에 따라 다를 수 있다.
정리하면, AlexNet에서 Dropout은 파라미터 수가 많아 과적합 위험이 큰 첫 두 개의 fully connected layer에 적용되어, 매 학습 단계마다 일부 뉴런을 무작위로 제거함으로써 특정 뉴런 조합에 대한 의존과 co-adaptation을 줄이는 역할을 한다. 이를 통해 모델은 보다 일반적인 특징을 학습하게 되고, 새로운 데이터에 대해서도 더 잘 일반화할 수 있게 된다. 반면 마지막 fully connected layer는 최종 분류를 수행하는 단계이므로, 판별 안정성을 위해 Dropout을 적용하지 않았다.

AlexNet은 다음과 같은 파라미터 구조를 가지고 있다.
위 표에서 확인할 수 있듯, AlexNet의 파라미터 대부분은 Convolution 층이 아닌, FC 층에 있다. 최하단 세 개의 FC 층만 합쳐도 전체 파라미터의 약 94%를 차지한다.
이러한 이유 때문에 이후 세대의 CNN들은 다양한 방법을 사용하였다.
AlexNet의 첫 층은 주로 방향성 Edge Detector, 주파수 선택적 패턴, 색 blob 또는 color-opponent 패턴을 배운다. 이는 비단 AlexNet 뿐만 아니라 모든 CNN의 공통적인 특징이기도 하다. 복잡한 함수를 인식하려면 가장 먼저 선이 어디에 있고, 색이 어디서 변하는지부터 알아야 하기 때문이다. 추가로 픽셀을 그대로 복사하는 것보다, 가로선, 세로선, 초록색 덩어리와 같이 기저 패턴을 먼저 인식하는 것이 정보를 압축하고 다음 층으로 전달하는 데 훨씬 효율적이기 때문이다.
AlexNet 에서는 두 GPU 사이의 전문화 또한 함께 관찰했다. 전문화란, 한 쪽은 상대적으로 색에 덜 민감하고 다른 쪽은 색 정보에 더 민감한 필터들이 나타났던 것인데, 첫 층부터 이미 단순 픽셀 복사가 아닌, 에지, 색, 텍스처에 대한 유용한 기저들을 형성하고 있음을 확인할 수 있었던 것이다.
이러한 현상이 발생한 가장 큰 이유는 Dual GPU를 사용한 것이다. 두 GPU에 파라미터를 나누어 담고 소통을 끊어놓으니, 각 GPU가 서로 중복된 일을 하기보다 모양을 맡거나 색을 맡는 등 자연스럽게 역할 분담이 일어난 것이다.
추가적으로 위에서 언급한 RGB PCA Augmentation을 통해 조명에 속지 않도록 데이터가 구축되어, 색이 조금 변해도 물체의 본질(형태)은 변하지 않는다는 것을 학습한다. 이에 모델의 필터들은 색상에 집착하기보다는 에지나 질감 같은 조명 변화에 강한 특징들에 더 집중하게 되어, 한 쪽 GPU에서 색에 덜 민감한 에지 검출기들이 나타난 주요 원인 중 하나이다.