AlexNet이란

Cammie·2022년 7월 4일
0

Computer Vision

목록 보기
1/3
post-thumbnail



AlexNet

2012년에 개최된 ILSVRC(ImageNet Large Scale Visual Recognition Challenge) 대회의 우승을 차지한 컨볼루션 신경망(CNN) 구조이다.

딥러닝 기술이 컴퓨터 비전에서 최고 성능을 낼 수 있다는 증명을 하게 되었다.

이전까지는 딥러닝이라는 게 말만 거창한 거품처럼 여겨져, 이 알렉스넷을 이용한 팀도 처음에는 비웃음을 샀다고 한다.

위 차트는 그 당시 대회 알고리즘들의 점수인데, 여기서 SuperVision이 알렉스넷인데, 보면 알수있듯이 다른 알고리즘들과 달리 현저하게 낮은 에러율을 확인할 수 있다.

이런 알렉스넷의 등장으로 딥러닝 기술이 컴퓨터 비전에서 화두가 되었다.

AlexNet 효과

알렉스넷이 어떻게 좋은 성과를 거두게 되었는지 알아보자.

ReLU 함수의 사용 => Non-linear함수로, vanishing gradient문제를 해결함

활성화 함수로 Rectified Linear Unit의 약자이다. 같은 정확도를 유지하면서 Tanh을 사용하는 것보다 6배나 빠르다고 한다. AlexNet 이후에는 활성화함수로 ReLU 함수를 사용하는 것이 선호되고 있다.

이 렐루를 사용함으로 vanishing gradient문제를 해결했다고 한다.

* vanishing gradient문제?

역전파 알고리즘이 입력층으로 전달됨에 따라 그래디언트가 점점 작아져 결국 가중치 매개변수가

업데이트 되지 않는 경우가 발생 (활성 함수가 시그모이드 계열이면서 히든 레이어가 많을 경우 발생)

+ 반대로 역전파에서 그래디언트가 점점 커져 입력층으로 갈수록 가중치 매개변수가 기하급수적으로 커지게 되는 경우가 있는데 이를 exploding gradient(그래디언트 폭주)라고 하며, 이 경우에는 발산(diverse)하게되어 학습이 제대로 이루어지지 않는다.

overlapping pooling => 에러율 감소 / 과적합 방지

AlexNet에서는 최대 풀링(max pooling)이 사용되었다.

이때 stride가 있으면서, 중첩이 되는 pooling이 overlapping pooling이다.

local response normalization (LRN) => 에러율 감소 / 일반화 성능 강화

측면 억제란 신경 생리학 용어로 강하게 활성화된 뉴런이 주변 약한 이웃 뉴런들의 효과를 억누르는 현상을 의미한다. 이러한 측면 억제 효과를 구현한 것이 LRN이다.

위 그림은 측면 억제의 유명한 예시 그림인 헤르만 격자이다. 그림을 보면 검은 사각형 안에 흰색 선들이 있다. 이때 흰색 선들에 집중하지 않으면 회색의 점들이 보이게 된다.

이러한 현상이 측면 억제에 의해 발생하는 것이다.

그렇다면 AlexNet은 왜 이런 LRN을 사용했을까?

활성함수로 ReLU를 사용했기 때문이다. ReLU는 양수일때는 입력값 그대로를 사용하여, conv나 pooling시 매우 높은 픽셀값이 존재하면 그 주변 픽셀에도 영향을 미치게 되기 때문에, 이를 방지하기 위해 같은 위치에 있는 픽셀끼리 정규화를 해주는 것이다.

dropout => 과적합 방지

AlexNet에서는 과적합을 막기 위해서 규제 기술의 일종인 dropout을 사용했다. dropout이란 fully-connected layer의 뉴런 중 일부를 생략하면서 학습을 진행하는 것이다. 이러한 드롭아웃 확률은 사용자가 지정해야하며, 보통 p=0.5를 사용한다. 이런 랜덤한 드롭아웃은 과적합을 효과적으로 방지한다.

위 그림에서 보듯이 훈련단계에서만 유닛이 랜덤하게 꺼진다는 점이 중요하다.

평가 단계에서는 모든 유닛이 활성화되어야 한다.

data augmentation => 과적합 방지 / 에러율 감소

과적합을 막기 위해 dropout 말고도 또다른 방법이 사용되었다. 과적합을 막는 가장 좋은 방법 중 하나는 데이터의 양을 늘리는 것이다. AlexNet에서는 적은 연산만으로 학습 데이터를 늘리는 2가지 방법을 적용하였다.

첫번째 방법은 하나의 이미지를 가지고 여러 장의 비슷한 이미지를 만들어 내는 것이다. 이미지를 좌우 반전시키거나, AlexNet이 허용하는 입력 이미지 크기인 227 x 227 x 3보다 좀 더 큰 이미지를 조금씩 다르게 잘라서 227 x 227 x 3으로 만들어줘서 여러 장을 만들어낸다. 같은 내용을 담고 있지만 위치가 살짝 다른 이미지들이 생산된다. 

두번째 방법은 RGB채널의 값을 변화시키는 것이다. 이를 위하여 학습 이미지의 RGB 픽셀 값에 대한 주성분 분석(PCA)를 수행한 후, 평균은 0, 표준편차는 0.1인 랜덤변수를 곱하여 원래의 픽셀 값에 더해주는 방식으로 컬러 채널의 값을 바꾸어 다양한 이미지들이 생산된다.

멀티 GPU의 사용 => 에러율 감소 / 학습시간 감소

AlexNet은 GPU를 통해 CNN을 학습시키는 것을 가능하게 했다. 이로 인해 이후 CNN은 대부분 GPU를 이용하게 되었으며, 에러율과 학습시간이 매우 줄어들게 되었다.

위 차트에서 막대그래프는 CNN에서의 GPU이용 비율인데, 알렉스넷이 나온 2012년 이후 급격하게 GPU의 이용이 증가한 것을 확인할 수 있다. 선 그래프는 평균적인 에러율을 나타내는데, 이 또한, 알렉스넷이 나온 2012년 이후 급격하게 낮아지며 10프로 이내의 에러율을 나타내게 된 것을 확인할 수 있다.

AlexNet 구조

AlexNet은 2개의 GPU로 병렬연산을 수행하기 위해서 병렬적인 구조로 설계되었다. 총 5개의 convolution layer와 3개의 fully-connected layer로 구성되어 있으며, 맨 마지막의 fully-connected layer는 1000개의 category로 분류하기 위한 활성함수 softmax를 사용한다. 다른부분에서는 앞에서 말했던 ReLU를 활성함수로 이용한다. 또 그림에서 보이는 것처럼 첫번째 레이어와 두번째 레이어에서는 컨볼루션 후에 Overlapping Max Pooling과 Local Rseponse Normalization이 시행된다.


<참고 자료>

[1] https://bskyvision.com/421, bskyvision, [CNN 알고리즘들] AlexNet의 구조.txt




0개의 댓글