juuuding
[paper review] ImageNet Classification with Deep ConvolutionalNeural Networks (AlexNet) 본문
[paper review] ImageNet Classification with Deep ConvolutionalNeural Networks (AlexNet)
jiuuu 2024. 7. 21. 19:09※ 혼자 읽고 정리한 글이라 틀린 내용이 있을 수 있습니다.
[ImageNet Classification with Deep ConvolutionalNeural Networks (AlexNet)]
💡 Introduction
객체 인식의 성능을 높이기 위해서는 큰 데이터셋과 강력한 모델 학습이 필요하다. 이 전까지의 간단한 작업들에서는 증강 기법을 사용하여 꽤나 적은 데이터로 잘 학습이 되었다. 하지만 실제 환경의 객체를 인식하기 위해서는 매우 큰 훈련 데이터셋이 필수다. 그래서 최신(2012년 기준)에 고해상도의 사이즈가 매우 큰 데이터셋들이 나왔는데, 그 데이터셋들의 이름은 "LabelMe", "ImageNet"이다. LabelMe는 수십만개의 fully-segmented 이미지로 구성되어 있고, ImageNet은 22,000개로 분류된 1500만개의 고해상도 이미지로 구성되어 있다.
모델 [16,11,13~~]의 클래스 중 하나가 어떤 걸 의미하는지 모르겠다.
이러한 많은 이미지를 학습하기 위해서는 큰 학습 용량이 필요하다. CNN은 모델의 클래스([16,11,13,18,15,22,26]) 중 하나로 구성되는데, 이것의 용량은 그들의 depth, breadth에 따라 달라지므로 조절이 가능하다. 비슷한 계층의 스탠다드 피드포워드 신경망과 비교했을 때, CNN은 더 적은 연결과 매개변수를 가지기 때문에 훈련하기가 더 쉽다.
CNN의 성능과 효율성이 보다시피 굉장히 좋지만, 큰 스케일의 고해상도 이미지에 적용하기에는 심각하게 expensive 했다. 그러나 최근(2012년 기준)의 GPU는 이러한 데이터들 다루기에 성능이 충분해졌고 ImageNet과 같은 데이터셋도 라벨링된 데이터셋이 충분하여 심각한 오버피팅 없이 모델을 훈련할 수 있게 되었다.
하지만 논문에서 사용한 네트워크의 크기가 커서 이렇게 많은 데이터셋으로도 오버피팅이 심각한 문제로 발생하였는데, 이 문제는 "데이터 증강"과 "드롭아웃" 기술을 사용하여 해결할 수 있었다. 최종 네트워크로 5개의 convolutional layers, 3개의 fully-connected layers를 사용하였고, 한 convolutional layer을 제거하였을 때 성능이 안 좋아지는 결과를 보며 네트워크의 깊이가 중요하다는 것을 알게 되었다.
네트워크의 크기는 GPU가 계산할 수 있는 메모리 양과 훈련 시간에 제한된다. 이와 관련하여 실험들에 대한 결과로 더 빠른 GPU가 나오고 더 큰 데이터 셋이 사용가능해지면 모델의 성능은 더 향상될 수 있을 것이라는 결론을 얻었다.
💡 The Dataset
ImageNet은 약 22,000개의 카테고리로 분류된 1500만개의 고해상도로 이루어진 데이터셋이다. 시각 인식 대회인 ILSVRC에서는 1000개의 카테고리 당 약 1000개의 이미지로 구성된 ImageNet의 일부분을 사용하였다. 대략적으로 총 120만개의 훈련 이미지, 50,000개의 검증 이미지, 150,000개의 테스트 이미지를 사용한다.
ILSVRC-2010에서는 테스트셋의 라벨이 이용가능하였는데, 논문에서는 대부분 이 데이터셋으로 실험을 진행하였다. 그리고 논문의 모델이 ILSVRC-2012에 참여했을 때는 테스트셋의 라벨을 이용하지 못하였다. ImageNet에서는 2가지 에러율 top-1, top-5을 기록하는데, top-5 에러율은 모델이 가장 가능성이 높다고 판단한 5개의 레이블 중에 정답 레이블이 포함되지 않은 테스트 이미지의 비율이다.
우리 시스템은 일정한 해상도를 가진 데이터들을 입력으로 요구하지만, ImageNet은 다양한 해상도의 이미지를 가진다. 그렇기 때문에 이미지를 256*256에 맞게 다운 샘플링해야한다. 직사각형 이미지의 경우에는 짧은 부분을 256으로 맞춘 후(rescale), 변형된 이미지의 중간을 기준으로 256*256에 맞게 자른다. 이미지 픽셀에 훈련 데이터셋 픽셀의 평균을 빼는 작업을 제외하고는 전처리는 진행하지 않는다.
💡 The Architecture
1. ReLU Nonlinearity
가장 기본적인 활성화 함수는 tanh와 sigmoid이다. 하지만 이 함수들은 입력 값이 너무 크거나 작을 때 포화상태가 되며, 포화상태는 경사 하강을 느리게 만든다. 따라서 여기서는 포화 상태가 없는 비선형 ReLU 함수를 활성화 함수로 사용할 것이다. 다음은 ReLU와 포화 상태가 있는 함수의 훈련 에러율 25%에 달성하기까지 필요한 epoch 수를 비교한 그래프다. 이 그래프로 ReLU는 tanh, sigmoid보다 몇배는 더 빠르다는 사실을 확인할 수 있다.
2. Training on Multiple GPUs
GTX 580 GPU는 메모리 3GB를 가지는데, 이것은 네트워크의 크기를 제한한다. 논문의 작업에서는 120만개의 훈련 예제가 필요하기 때문에 GPU 2개를 사용하기로 하였다. 현재 GPU는 서로의 메모리에 직접 접근할 수 있어 GPU 간 병렬화에 유리하다. 병렬화 방식은 각 GPU에 절반의 커널(뉴런)을 배치하고 GPU들이 특정 층에서만 통신하도록 하여 효율성을 높였다. 예를 들어 layer 3의 커널은 layer 2의 모든 커널 맵에서 입력을 받고, layer 4의 커널은 layer3의 같은 GPU에 있는 커널 맵에서만 입력을 받는다. 이 연결 패턴은 교차 검증을 통해 정해야 한다.
이 구조는 column이 독립적이지 않다는 점을 제외하고 columnar CNN(신경망 칼럼을 병렬로 배치하여 병렬 처리)과 다소 비슷하다. 이것은 하나의 GPU를 사용한 것과 비교했을 때 top-1, top-5 에러율을 각각 1.7%, 1.2%만큼 줄였고, 이로써 GPU 2개를 사용하는 것이 시간을 효율적으로 사용할 수 있다는 것을 알 수 있었다.
3. Local Response Normalization
ReLU에서는 포화 상태를 피하기 위한 normalization이 필요가 없다. 하지만 일반화를 위한 local normalization을 발견하였는데, 그 식은 다음과 같다.
이 식은 (x,y)에 있는 커널 i로 계산된 뉴런의 활성화를 ai_x,y로 나타내고, response-normalized 활성화를 bi_x,y로 나타낸다. 식의 합계는 같은 공간 위치에 있는 인접한 커널 맵 n개에 대한 값을 계산하며, 커널 맵의 순서는 무작위로 훈련 전에 정해진다. response-normalization은 서로 다른 커널로 계산된 뉴런 출력들 간의 큰 활성에 대한 경쟁을 생성하고, 이러한 뉴런 간의 경쟁을 유발하여 과도한 활성화를 방지한다. 식에서 사용된 k, n, alpha, beta는 검증 세트로 최적 값을 찾아야 하는 하이퍼파라미터며, 여기서는 각 2, 5, 10^-4, 0.75를 사용하여 실험을 진행하였다. ReLU의 비선형성을 적용한 후 특정 층에서 response normalization을 적용해 뉴런의 출력 범위를 조절하여 모델의 일반화를 하는 것이다.
결과적으로 response normalization은 top-1, top-5 에러율을 1.4%, 1.2%만큼씩 줄였다.
4. Overlapping Pooling
일반적인 pooling 층은 같은 커널 맵 안의 이웃 뉴런들을 summarize해주는 역할을 한다. 기존 pooling은 space 거리 s와 s ummarize하는 크기가 같았는데, overlapping 에서는 s(2)가 z(3)보다 작다. 따라서 이동하는 범위는 2인데 다루는 면적은 3이므로 한 부분씩 겹치게 된다. 이 방식을 사용하면서 top-1, top-5 에러율을 0.4%, 0.3% 낮추었고 오버핏을 줄일 수 있게 되었다.
5. Overall Architecture
5개의 convolutional layer, 3개의 fc-layer로 구성되었고 마지막 fc-layer의 출력은 1000-way softmax로 들어가 1000개의 라벨에 대한 확률이 만들어진다. 다항 로지스틱 회귀를 목적을 최대화하게 학습하여, 모든 훈련 샘플에 대해 올바른 레이블의 로그 확률의 평균을 최대화한다.
2, 4, 5번째 convolutional layer은 같은 GPU에 위치한 이 전 layer의 커널 맵에만 연결되고, 3번째 layer의 커널 맵은 2번째 layer의 모든 커널 맵과 연결된다. 그리고 fc-layer은 이 전 layer의 모든 뉴런들과 연결된다. Response-normalization layer들은 1번째, 2번째 convolution layer 뒤에 배치되어 뉴런의 출력 범위를 조절하여 모델의 일반화를 진행한다. max-pooling layer는 response-normalization layer 다음과 5번째 convolutional layer 다음에 위치한다. ReLU는 모든 convolutional layer, fc-layer의 결과에 적용된다.
- convolutional layer 1 : input - 224*224*3 image, kernel - 96개의 11*11*3, stride - 4
- convolutional layer 2 : input - 첫번째 layer의 결과에 normalize, pool 한 것, kernel - 256개의 5*5*48
- convolutional layer 3 : input - 두번째 layer의 결과에 normalize, pool한 것, kernel - 384개의 3*3*256
- convolutional layer 4 : input - 세번째 layer의 결과, kernel - 384개의 3*3*192
- convolutional layer 5 : input - 네번째 layer의 결과, kernel - 256개의 3*3*192
- fc-layer: 각 layer에 4096개의 뉴런
💡 Reducing Overfitting
위의 신경망 구조는 6000만개의 매개변수를 가진다. 그렇기 때문에 오버피팅 문제가 쉽게 발생하는데 이를 해결하기 위한 2가지 방법에 대해 알아볼 것이다.
1. Data Augmentation
오버피팅을 줄이는 가장 흔한 방법은 인공적으로 데이터를 늘리는 것이다. label-preserving 변형을 사용하여 아주 작은 계산으로 데이터를 변형시켜 수를 증가시키는 방법이다. 이렇게 만들어진 데이터는 디스크에 저장될 필요가 없다. 그리고 이 변형 이미지를 만드는 것은 이전의 이미지 배치가 GPU에서 훈련될 때 CPU로 진행하기 때문에 따로 계산 비용이 들지 않는다.
방법 1) 이미지 일부 이동, 좌우 대칭
256*256 이미지에서 임의의 224*224 패치를 추출하여 수평 반사도 진행하여 네트워크를 훈련한다. 훈련 세트가 2048배 증가하지만 훈련 예제들은 모두 서로 의존적이긴 하다. 하지만 이러한 방법으로 오버피팅을 줄일 수 있고, 이로써 큰 네트워크 사용이 가능해졌다. 테스트 시에는 224*224 패치 다섯개를 추출하여 좌우 대칭을 하고 예측을 수행한 뒤, 10개 패치 예측을 평균화한다.
왜 2048배?
방법 2) RGB 채널 강도 변경
훈련 이미지의 RGB 채널 강도를 변경하여 데이터를 증강시킨다. PCA를 통해 주성분과 고유값을 계산하고, 이를 이용해 RGB 픽셀 값에 임의의 변형을 추가한다. (각 훈련 이미지에서 찾은 주성분의 배수)*(해당 고유값에 비례하는 임의 변수) 값을 각 훈련 이미지에 더한다. 참고로 임의 변수는 평균이 0이고, 표준편차가 0.1인 가우시안 분포에서 추출한다.
pi, λi : RGB 픽셀 값의 3*3 공분산 행렬의 i번째 고유벡터와 고유값.
αi: 임의 변수
αi는 특정 훈련 이미지의 모든 픽셀에 대해 딱 한 번 만 추출되며, 그 이미지가 다시 훈련에 사용될 때 다시 추출된다. 이러한 방법은 물체의 정체성이 조명 강도와 색상 변화에 불변하는 자연 이미지의 중요한 특성을 대략적으로 포착한다. 이 방법은 top-1 에러율을 1% 넘게 감소 시켰다.
"(각 훈련 이미지에서 찾은 주성분의 배수)*(해당 고유값에 비례하는 임의 변수) 값을 각 훈련 이미지에 더한다." 이 부분이 잘 이해되지 않는다. 주성분 분석에 대한 이해가 떨어져서 그런 것 같다.
2. Dropout
오버피팅을 줄이기 위한 방법으로 dropout이라는 기술이 있다. 이것은 은닉 유닛의 output을 0.5의 확률로 0으로 설정하는 방법이다. output이 0으로 설정된 은닉 유닛은 forward pass에도 영향을 미칠 수 없고, back-propagation에서도 영향을 미칠 수 없다. 이 방법은 다른 뉴런의 존재에 의존할 수 없게함으로써 뉴런들의 복잡한 co-adaptation을 줄인다. 그러므로 dropout은 뉴런들의 다른 랜덤 하위 집합을 가지고 유용하고 강력한 특징을 더 학습하게 한다.
이 신경망에서는 dropout을 앞 2개의 fc-layer에서 사용한다. 참고로 dropout을 사용하면 수렴하기 위한 반복 수가 배로 증가한다.
💡 Details of learning
모델에 stochastic gradient descent를 사용하여 훈련을 진행하였다. 배치 사이즈는 128, 모멘텀 0.9, weight decay 0.0005로 설정하였고 특히 weight decay를 작게 설정한 것이 regularizer 효과 뿐만 아니라 에러 감소에 도움이 된다. w의 업데이트 룰은 다음과 같다.
* i: 반복 인덱스, v: 모멘텀, epsilon: 학습률, <>Di: i번째 배치 Di에 대한 평균
w는 평균 0, 표준편차 0.01을 가진 가우스 분포를 사용하여 초기화하고, bias는 2,4,5,fc layer는 1로 나머지 layer는 0으로초기화한다. 이렇게 초기화 하면 ReLU에 양의 입력을 제공하면서 초기 학습 단계를 가속화 시킬 수 있다. 그리고 기본적으로모든 layer에는 같은 학습률을 적용하는데, 만약 검증 에러의 향상이 멈추었다면 원래의 학습률을 10으로 나누어 그 값으로 훈련을 진행한다.
💡 Result
[ILSVRC-2010 결과]
[ILSVRC-2012 결과]
[ImageNet 2009 ver]
ImageNet에서 최고 성능으로 알려진 결과는 78.1%, 60.9% (top-1, top-5 error rate)다. 논문의 모델의 마지막 풀링 층 위에 추가된 6번째 convolutional layer을 사용하여 앞의 결과를 뛰어 넘은 67.4%, 40.9% 결과를 도출해내었다.
1. Qualitative Evaluation
위 사진은 네트워크의 2개의 data-connected layers에서 학습된 합성곱 커널이다. GPU1의 커널은 색상과 무관하게 정보를 처리하는 "color agnostic"이고, GPU2의 커널은 특정 색상 정보를 활용하여 정보를 처리하는 "color specific"이다.
위 그림의 왼쪽 부분에서는 이미지에 대해 top-5 예측을 계산하여 네트워크가 학습한 내용을 질적으로 평가한다. 네트워크의 시각적 지식을 살피는 또 다른 방법은 마지막 4096 차원 은닉층에서 유도된 특징 활성화를 고려하는 것이다. 4096 차원 실수 벡터 간의 유클리드 거리를 이용하여 유사성을 계산하는 것은 비효율적이지만, 이 벡터를 짧은 이진 코드로 압축하도록 오토인코더를 훈련하면 효율적으로 만들 수 있다.
💡 Discussion
- 모델의 깊이가 결과에 아주 중요한 영향을 미친다
- 이러한 크고 깊은 합성곱 망을 비디오 시퀀스에도 적용하고 싶다.
'논문 리뷰 > 컴퓨터비전' 카테고리의 다른 글
[paper review] Identity Mappings in Deep Residual Networks (0) | 2024.08.28 |
---|---|
[paper review] Rethinking the Inception Architecture for Computer Vision (0) | 2024.08.16 |
[paper review] ZFNet_Visualizing_Understanding_CNN (0) | 2024.08.02 |