728x90

[AlexNet] ImageNet Classification with Deep Convolutional Neural Networks

심층 합성곱 신경망을 이용한 이미지넷 데이터셋 분류

 

요약

 저희는 이미지넷 LSVRC-2010(ILSVRC: ImageNet Large Scale Visual Recognition Challenge) 대회에서 1.2만개의 고화질 이미지를 1000개의 클래스로 분류하는 거대하고 깊은 합성곱 신경망을 학습시켰습니다. 테스트 데이터를 사용하였을때, 우리의 모델은 top-1, top-5 에러 레이트를 각각 37.5%와 17.0%에 도달하였으며 이전의 최신 방법보다 상당히 크게 좋아진 결과를 얻었습니다. 우리의 신경망 모델은 6000만개의 파라미터와 65만개의 뉴런들을 가지고 있으며, 5개의 합성곱 계층과 몇몇 계층 뒤에는 맥스 풀링 레이어가 붙어있으며, 가장 마지막에 1000개의 소프트맥스 함수 결과를 내는 3개의 완전 연결 계층으로 이루어져있습니다. 학습 과정을 더 빠르게 하기 위해서, 뉴런들을 포화되지 않도록 했으며, 합성곱 연산을 효율적으로 수행하도록 GPU를 사용하였습니다. 그리고 완전 연결 계층에서 오버피팅 문제를 줄이기 위해서 최근 만들어진 규제 방법인 드롭아웃을 사용하였고, 훨씬 효율적임을 확인하였습니다. 또한 우리는 이 모델을 ILSVRC-2012 대회에도 참여하여 top-5 에러율을 15.3%로 두 번째 가장 좋은 성능인 26.2%보다 크게 앞서 우승하였습니다.

 

 

1. 소개

 현재 물체 인식에 있어서 머신 러닝을 활용한 방법이 필수적으로 사용되고 있습니다. 그리고 이러한 방법들의 성능을 높이기 위해서 우리는 많은 데이터셋을 모으고, 더 뛰어난 모델을 학습시켜야 하며, 오버피팅을 방지하는 좋은 방법들을 사용해야 합니다. 하지만 최근까지도 라벨링된 이미지 데이터셋은 수만개 정도로 작은 편이었습니다(NORB, Caltech-101/256, CIFAR-10/100). 간단한 인식 문제 같은 경우에는 이런 적은 크기의 데이터셋만으로도 라벨을 유지한체 약간의 변환으로 증강시켜 잘 풀수가 있었습니다. 예를들어, MNIST 손글씨 인식 문제에서 최고 에러율은 0.3%이하로 사람에 거의 근접하였습니다. 하지만 실제 환경의 물체들은 아주 다양하게 나올수 있다보니, 모델이 인식할수 있도록 학습시키려면 훨씬 많은 테스트 데이터셋이 필요하였습니다. 이런 적은 이미지 데이터셋의 문제는 널리 알려져 있었으나(Pinto et al), 최근에 수백만개의 라벨링된 이미지들을 사용할수 있게 되었습니다. 이런 훨씬 크고 새로운 데이터셋으로 LabeMe와 ImageNet이 나왔는데, LabelMe는 완전 세그먼트된(물체별로 구역이 분리된) 이미지가 수십만개가 있으며, ImageNet의 경우 22,000개 카테고리의 라벨링된 고해상도 이미지가 1500만개 넘개 가지고 있습니다.

 

 수백만개의 이미지로부터 수천가지의 물체를 학습하기 위해서는 아주 큰 학습 능력을 가진 모델이 필요합니다. 하지만 물체 인식의 엄청난 복잡성 때문에 ImageNet 만큼 거대한 데이터셋만으로 해결할 수 없습니다. 그래서 우리의 모델은 우리가 가지지 못한 모든 데이터를 고려/보완 할수 있도록 아주 많은 사전 지식또한 가지고 있어야 합니다. 합성곱 신경망(Convolutional Neural Network)로 다양한 모델들이 나왔는데 (논문 레퍼런스들이 있으나 생략), 이러한 모델들은 폭과 깊이를 조절하여 분류 능력을 조절 시킬수가 있으며, 그렇게 함으로서 통계학에서의 정상성(stationarity of statistics)와 인근 픽셀간의 의존성/연관성(locality of pixel dependencies *?) 같은 이미지의 성질에 대해서 강하고 명확한 가정들을 만들수가 있습니다 (의역:모델이 이미지에 관한 가정->지식들을 가질 수 있도록 할 수 있습니다.). 그래서 일반적인 비슷한 크기의 계층을 갖는 순전파 신경망과 비교했을때, CNN 모델들은 이론적인 최고 성능은 아주 약간은 나쁘더라도, 더 적은 연결과 파라미터 만으로도 쉽게 학습할수가 있습니다.

 

 CNN의 매력적인 성질과 아키텍처 효율성에도 불구하고, 여전히 합성곱 신경망은 아주 많은 량의 고해상도 이미지들을 처리하기에는 상당히 비용이 비싼 편입니다. 하지만 다행이도 지금의 GPU들은 2차원 합성곱 연산을 구현하는데 있어서 최적화되어있어 거대한 합성곱 신경망과 ImageNet같이 충분한 량의 라벨링된 데이터들을 가지고 있는 최근 데이터셋으로 모델을 심한 오버피팅 없이 학습하는데 유용합니다.

 

 본 논문이 기여한 사항으로는 다음이 있습니다. 우리는 ILSVRC-2010과 ILSVRC-2012에서 사용되던 이미지넷 데이터셋 일부로 가장큰 합성곱 신경망중 하나를 학습 시켜, 이전에 나온 최고 성능을 훨씬 뛰어넘었습니다. 그리고 GPU에 최적화 하여 2차원 합성곱 신경망 연산과 부차적인 연산들을 구현하여 공개시켰습니다. 그리고 우리가 만든 신경망은 여러가지 새롭고, 흔치 않은 특징->방법들을 사용하여 성능은 늘리고 학습 시간을 줄여내었고, 이 내용은 섹션 3에 자세히 서술되어 있습니다. 우리 신경망은 크기 때문에, 120만개의 라벨링된 이미지를 사용하였지만 오버 피팅이 큰 문제였습니다. 그래서 우리는 오버 피팅을 효과적으로 방지하는 여러가지 방법들을 사용하였고 섹션 4에 자세히 서술하였습니다.  그리고 우리의 최종 신경망은 5개의 합성곱 계층과 3개의 환전 연결 계층으로 이루어져 있는데, 신경망의 깊이가 중요한 것으로 보입니다. 한번 한 합성곱 신경망을 제거하였는데 (모델의 파라미터 중 1%도 안되는 양이었지만), 성능이 저하되는것을 확인하였습니다.

 

 마지막으로 우리 신경망의 크기는 현재 GPU에서 사용가능한 메모리 공간 부족과, 학습하는데 기다릴 수 있는 학습 시간 등으로 제한되어 있습니다. 그래서 우리가 만든 신경망은 2개의 GTX 580 3GB GPU를 가지고 5 ~ 6일간 학습시킨 결과이며, 우리의 모든 실험 결과 더 빠른 GPU로 더 기다리고, 더 큰 데이터셋을 사용한다면 성능이 더 좋아 질수 있다는 사실을 알 수 있었습니다.

 

 

2.  데이터셋

 ImageNet은 대략 22,000개의 카테고리를 가진 1500만개의 라벨링된 고해상도 이미지들로 이뤄진 데이터셋입니다. 이 이미지들은 웹에서 모았으며, 아마존 테크니컬 터크 크라우드 소싱 툴을 사용해서 사람이 직접 라벨링한 이미지입니다. 2010년부터 Pascal Visual Object Challenge 파스칼 시각 물체 대회의 한 파트로 시작되어 ImageNet Lager-Scale Visual Recognition Challenge(ILSVRC) 이미지넷 대용량 시각 인지 대회가 매년 개최되었습니다. ILSVRC는 ImageNet의 일부 데이터 셋을 사용하는대 대략 한 카테고리당 1000개의 이미지가 1000 카테고리로 이루어진 데이터셋을 이용합니다. 전체적으로, 대략 120만개의 훈련용 이미지와 5만개의 검증용이미지, 15만개의 테스트 이미지로 이뤄집니다.

 

 ILSVRC-2010은 ILSVRC에서 테스트셋에 라벨이 주어진 유일한 버전이었으며, 그래서 이 버전을 사용하여 실험을 진행해보았습니다. 그리고 우리는 ILSVRC-2012 대회에도 참여하였는데, 섹션 6에다가 이 때 데이터셋으로 결과를 내었으나 테스트셋 라벨은 사용할 수 없었습니다. ImageNet 데이터셋을 이용할때 관례적으로 2가지 에러 레이트로 top-1과 top-5 에러 레이트를 사용합니다. top-5 에러 레이트는 모델의 가장 가능성이 높다고 판단한 5가지 중에 올바른/실제 라벨이 존재하지 않았을때 오류의 비율을 의미합니다.

 

 ImageNet은 다양한 해상도의 이미지를 가지고 있으나, 우리 시스템의 경우 고정된 입력 차원/크기를 필요로 합니다. 그래서 우리는 이미지들을 고정 해상도 256 x 256으로 다운 샘플시켜 사용했습니다. 사각형의 이미지가 주어진다고 하면, 우선 이미지를 짧은 면의 길이가 256이 되도록 리스케일을 해주고, 리스케일된 이미지의 중앙을 256 x 256 크기 패치로 잘라내어 사용하였습니다. 그리고 각 픽셀들을 훈련셋 전체의 평균으로 빼주는것 이외에는 이미지에 별도 전처리 과정을 하지 않았습니다. 그래서 정리하자면 우리 신경망 모델은 (중앙화된) 처리되지 않은 RGB 픽셀값으로 학습되었습니다.

 

 

 

3.  아키텍처

 우리 신경망의 아키텍처는 그림 2에 정리되어 있습니다. 이 신경망 아키텍처는 8개의 학습된 레이어로 구성되어 있는데, 5개는 합성곱, 3개는 완전 연결 레이어 입니다.  그리고 그 아래에는 우리 신경망 아키텍처에 소개된 새롭고 특별한 특징들을 서술하였습니다. 섹션 3.1 - 3.4에는 우리 생각에 중요한 순서대로 나열해서 가장 중요한 것을 첫번째로 놓았습니다.

 

3.1  ReLu 비선형 함수

     

그림 1: ReLU를 이용한 4층 합성곱 신경망(그냥 선)은 CIFAR-10 데이터셋으로 학습할때 25% 학습 오류율 도달에까지 tanh를 사용한 뉴런들로 이뤄진 동일한 신경망(점선)보다 6배가 빨랐습니다. 각 신경망의 훈련률은 학습이 가장 빠르게 되도록 별도로 선정하였습니다. 여기서 규제 기법은 사용되지 않았으며, ReLU를 사용한 효과는 신경망 아키텍처에 따라서 달라지나 ReLU를 사용한 신경망이 포화 활성화 함수를 사용하는 뉴런으로 이뤄진 동일 모델보다 여러배 빠르게 학습합니다.

 

 입력 x가 주어질때 가장 기본적인 뉴런의 출력을 구하는 함수 f는 f(x) = tanh(x) [하이퍼볼릭 탄젠트 활성화 함수]나 f(x) = (1 + e^{-x})^{-1} [시그모이드 활성화 함수]가 있습니다. 하지만 훈련 중 경사 하강의 관점에서 보면 이러한 포화 활성화 함수는 비포화 활성화 함수 f(x) = max(0, x)보다 훨씬 느립니다. Nair와 Hinton의 연구에 이어서 우리는 이 활성화 함수를 사용하는 뉴런을 Rectified Linear Units(ReLUs) 개선된 선형 유닛이라 불렀습니다. ReLU를 사용하는 심층 합성곱 신경망은 tanh를 사용한 모델보 데이터셋다 여러배 빠르게 학습이 됩니다. 그림 1에 나타나 있는데, 어떤 4층 합성곱 신경망을 CIFAR-10 데이터셋으로 학습시킬떄 에러가 25%까지 도달하는데 반복 횟수를 보여주고 있습니다. 이 그림의 결과는 이번 연구에서 소개하고자 하는 거대한 신경망으로 실험을 진행할수가 없어 고전 포화 뉴런 모델을 사용하였습니다.

 

 하지만 우리가 첫 번째로 합성곱 신경망을 기존 뉴런 모델(sigmoid 비선형 함수를 얘기하는 듯) 대신 다른 뉴런 모델을 사용하는걸 고려한 사람들이 아닙니다. 예를들어 Jarrett et al은 f(x) = |tanh(x)| 비선형 함수가 Caltech-101 데이터셋에서 지역 평균 풀링을 추가 시킬때 잘 동작한다고 하였습니다. 하지만 그 데이터셋에서 오버피팅이 일어나지 않도록 고민한 것이라, Jarrett가 얻은 효과는 우리가 ReLU를 사용해서 훈련셋 학습을 가속화시킨 것과는 다르다고 할수 있겠습니다. 빠른 학습은 큰 데이터셋으로 학습된 거대한 모델의 성능에 중요한 영향을 가집니다.

 

 

3.2  여러 개의 GPU로 학습 하기

 하나의 GTX 580 GPU는 3GB 메모리 공간 뿐이라 학습시키고자 하는 신경망의 최대 크기를 제한하였습니다. 그렇다 보니 120만개의 훈련 데이터들은 신경망을 학습시키는데 충분한 양이었으나 GPU 하나만으로는 너무 많았습니다. 그래서 우리는 두 GPU를 사용하였는데, 현재 나온 GPU들이 병렬 작업을 하는데 적합하다보니, 호스트 컴퓨터의 메모리를 거쳐갈 필요 없이 GPU 메모리로부터 직접 읽고 쓰기를 할수 있었습니다. 우리가 사용한 병렬화 기법은 신경망(뉴런들) 절반을 각각의 GPU에다가 나누어줬는데, 트릭으로 GPU간에 일부 레이어들에서만 같이 연산할 수 있도록 만들었습니다. 정리를 하자면 3번째 커널/레이어는 2번째 레이어의 모든 커널/특징맵들을 입력으로 받을 수 있지만, 4번째 레이어는 같은 GPU에 있는 3번쨰 레이어의 특징맵들만을 입력으로 받을수가 있습니다. 어떤 연결 패턴을 사용할지 고르는건(? : 다양하게 연결시키는건) 교차 검증에 문제가 될수 있지만, 연산량 비중이 충분해 질때까지 GPU간의 소통량을 더 미세하게 조정할수 있도록 해줍니다. (? 일부 레이어들은 서로다른 GPU 레이어의 출력들을 사용가능한데, 연결패턴->어떻게 다른 GPU로부터 가져오는지에 따라서 미세 조정을 할수 있게 된다?? 정도로 이해됨.)

 

 우리가 만든 아키텍터 결과물은 (그림2를 보면) 컬럼들이 독립적이지 않다는 점만을 빼면 Ciresan et al의 columnar CNN과 비슷하다고 할수 있겠습니다. 이 방법으로 합성곱 레이어 절반을 GPU 하나에서만 학습하도록 시켰을때와 비교하여, top-1, top-5 에러 레이트를 각각 1.7%, 1.2% 정도 줄여내었습니다. 2개의 GPU를 사용하여 만든 신경망은 GPU 1개를 사용한 경우보다 학습 시간이 약간 적었습니다. 

 

 

 

 

 

300x250

+ Recent posts