본문 바로가기

Programming/Deep Learning

AlexNet을 사용한 Deep Learning 실습(MATLAB)-(1)

MATLAB에서는 Deep Learning Toolbox라는 딥러닝 관련 도구를 제공한다. 

Deep Learning Toolbox는 딥러닝 관련 여러가지 네트워크를 지원하는데 그 중에서 선택한 것은

AlexNet이라는 네트워크였다.

 

AlexNet이란?

 

AlexNet2012년에 개최된 ILSVRC(ImageNet Large Scale Visual Recognition Challenge, 이미지 인식 경진대회)에서 우승을 차지한, CNN 구조의 알고리즘이다.

AlexNet2개의 GPU로 병렬연산을 수행하기 위해 병렬구조로 설계되었다.

 

AlexNet의 구조

 

 

AlexNet8개의 레이어(Layer)로 구성되어 있는데, 5개의 컨볼루션 레이어와

3개의 fully-connected 레이어로 구성되어 있다.

AlexNet에 입력되는 것은 224 x 224 x 3 이미지이다. (224 x 224 사이즈의 RGB(3) 컬러 이미지를 뜻한다.)

 

각각의 레이어가 하는 일은 다음과 같다.

 

1) 첫번째 레이어(컨볼루션 레이어): 11 x 11 x 3 사이즈 필터 커널로 입력 영상을 컨볼루션 한다.

컨볼루션 Stride(보폭)4로 설정, Zero-padding(컨볼루션으로 인해 특성맵의 사이즈가 축소되는 것을 방지,

또는 축소되는 정도를 줄이기 위해 영상의 가장자리 부분에 0을 추가하는 것)은 사용하지 않았다.

결과적으로 55 x 55 x 96의 특성맵(96개의 55 x 55 사이즈 특성맵들)이 산출된다.

그 다음 ReLU 함수로 활성화해준다. 이어서 3 x 3 Overlapping max poolingStride 2로 시행한다.

그 결과 27 x 27 x 96의 특성맵을 갖게 된다.

그 다음 수렴 속도를 높이기 위해 Local response normalization이 시행된다.

Local response normalization은 특성맵의 차원을 변화시키지 않으므로 특성맵의 크기는 27 x 27 x 96으로 유지된다.

 

2) 두번째 레이어(컨볼루션 레이어): 256개의 5 x 5 x 48 사이즈 필터 커널을 사용하여 이전 단계의 특성맵을 컨볼루션 한다. Stride2, Zero-padding2로 설정한다.

따라서 27 x 27 x 256 특성맵(256개의 27 x 27 사이즈 특성맵들)을 얻게 된다.

그후 ReLU 함수로 활성화한다. 다음으로 이어서 3 x 3 Overlapping max poolingStride 2로 시행한다.

그 결과 13 x 13 x 256 특성맵을 얻게 된다.

그 후 Local response normalization이 시행되고 특성맵의 크기는 그대로 유지된다.

 

3) 세번째 레이어(컨볼루션 레이어): 384개의 3 x 3 x 256 커널을 사용하여 두번째 레이어의 특성맵을 컨볼루션한다. StrideZero-padding 모두 1로 설정한다. 따라서 13 x 13 x 384 특성맵을 얻는다. ReLU 함수로 활성화한다.

 

4) 네번째 레이어(컨볼루션 레이어): 384개의 3 x 3 x 192 커널을 사용해서 세번째 레이어의 특성맵을 컨볼루션한다. StrideZero-padding 모두 1로 설정한다. 따라서 13 x 13 x 384 특성맵을 얻는다. ReLU 함수로 활성화한다.

 

5) 다섯 번째 레이어(컨볼루션 레이어): 256개의 3 x 3 x 192 커널을 사용해서 네번째 레이어의 특성맵을 컨볼루션한다. StrideZero-padding 모두 1로 설정한다. 따라서 13 x 13 x 256 특성맵을 얻는다. ReLU 함수로 활성화한다.

이어서 3 x 3 Overlapping max poolingStride 2로 시행한다. 그 결과 6 x 6 x 256 특성맵을 얻게 된다.

 

6) 여섯 번째 레이어(Fully connected layer): 4096개의 6 x 6 x 256 커널을 사용해서 다섯 번째 레이어의 특성맵을 컨볼루션 해준다. 그 결과 1 x 1 x 4096 특성맵을 얻는다. ReLU 함수로 활성화하면 4096개의 성분으로 구성된 벡터가 만들어진다.

 

7) 일곱 번째 레이어(Fully connected layer): 4096개의 성분으로 구성되어 있다.

여섯 번째 단계의 4096개의 뉴런과 연결되어 있다. 출력 값은 ReLU 함수로 활성화된다.

 

8) 여덟 번째 레이어(Fully connected layer): 1000개의 성분으로 구성되어 있다. 전 단계의 4096개의 성분과 연결되어 있다. 1000개의 성분 출력 값에 Softmax 함수를 적용하여 1000개 클래스 각각에 속할 확률을 나타낸다.

 

궁금증

AlexNet에 대하여 조사하며 매우 궁금하게 느낀 것은 밑줄로 강조한 세 부분 CNN, ReLU, Softmax 함수였다.

그럼 저 세 가지가 무엇인지 알아보자.

 

CNN

딥러닝은 심층학습(Hierarchical Learning)이라고도 하는데, 여러 비선형 변환기법의 조합을 통해 높은 수준의

추상화(Abstraction)를 시도하는 기계학습(Machine Learning) 알고리즘의 집합으로 정의되며, 간단하게 말해 사람의

사고방식을 컴퓨터에게 가르치는 기계학습의 한 분야라고 할 수 있다.

어떠한 데이터가 있을 때 이를 컴퓨터가 이해할 수 있는 형태로 표현하고 이를 학습에 적용하기 위해 많은 연구를 한 결과, DNN, CNN, RNN 등과 같은 다양한 딥러닝 구조들이 나타났다.

이는 각종분야에 적용되어 유의미한 결과들을 보여주고 있다.

그 중에서 CNN은 합성곱 신경망(Convolution Neural Network)의 약자로, 시각적 이미지를 분석하는 데 사용되는

인공신경망의 한 종류이다. 딥러닝에서 심층 신경망으로 분류되며, 시각적 이미지 분석에 가장 많이 적용되고 있다. 이미지 및 비디오 인식, 추천 시스템, 이미지 분류, 의료 이미지 분석 및 자연어 처리에 응용된다.

수학적으로 Convolution(합성곱 연산)은 두 개의 함수 fg가 존재할 때, 하나의 함수를 반전하여 다른 하나의 함수와 곱한 결과를 적분하는 것을 말한다. 수학기호로 표시하면 다음과 같다.

Convolution의 수학적 정의

이미지 분석에서 Convolution이란 마스크라는 것을 사용하여 입력 영상의 픽셀 값과 마스크의 가중치를 각각 곱한 뒤 곱한 것들의 합을 출력영상의 픽셀 값으로 정하는 것을 말한다.

마스크는 3x3, 5x5, 7x7의 다양한 크기를 가진다. 이 방식은 이미지의 특징을 추출하는 것이 주 목적이다.

CNN 이전엔 인간의 뉴런 구조를 모방한 Feed-Forward Neural Network 구조를 사용했는데,

이 구조는 이미지 픽셀 값들을 그대로 입력 받아 분류를 했다.

하지만 같은 이미지라도 크기나 위치 등 조금이라도 변형이 생기면 분류에 어려움을 겪었다.
변형에 따른 훈련데이터가 필요했고 그만큼 훈련시간도 상당히 길어졌다.

Feed-forward Neural Network의 구조

따라서 픽셀 값들을 그대로 입력 받는 것 보다 이미지를 대표할 수 있는 특성들을 도출해서 신경망에 넣어주는 방식이 선호되었다.

어떤 특성을 도출하는지는 사용자의 판단에 따라 결정되었는데, CNN은 이 특성 도출과정을 자동화했다.

CNN은 입력된 이미지로부터 이미지의 고유한 특징을 부각시킨 특성지도(Feature maps)를 만들어낸다.

CNN의 구조

컨볼루션(Convolution) 또는 필터링(Filtering) 과정을 통해 얻은 특성지도들은 ReLU와 같은 활성함수를 거쳐 출력된다. 그 다음에 서브샘플링(Subsampling) 또는 풀링(Pooling)이라고 불리는 과정을 통하여

활성화된 특성지도들의 크기를 줄인다.

이 특성지도들에 다시 컨볼루션, 활성화, 서브샘플링을 여러 번 수행해서 최종적인 특성지도를 얻어낸다.

 

ReLU

Rectified Linear Unit의 약자로서 AlexNet을 시작으로 쓰이고 있는 활성화 함수이다.

ReLU의 그래프

ReLU 함수는 그래프에서 볼 수 있듯 x < 0이면 기울기가 0, x > 1이면 기울기가 1이된다.

딥러닝에서는 레이어에 들어오는 값들을 다음 레이어로 전달할 때 주로 비선형 함수를 통과시키고 전달한다.

이 때 사용하는 함수를 활성화 함수(Activation Function)이라 부른다. 활성화 함수중에는 여러 종류가 있는데,

ReLu 함수는 다른 활성화 함수와 비교했을 경우 학습이 훨씬 빠르고 연산비용이 크지 않아 구현이 매우 간단하다.

 

Softmax 함수

 

Softmax 함수: K개의 값이 존재할 때 각각의 값의 편차를 확대시켜 큰 값은 상대적으로 크게,

작은 값은 상대적으로 더 작게 만든 다음 Normalization 시키는 함수.

Softmax 함수의 수학적 정의

공식에서 알 수 있듯이 Softmax 함수에서 1부터 K개 까지의 총합은 1이 된다.

이러한 특성 때문에 딥러닝에서 마지막 출력단에 사용된다. Fully connected layer의 마지막 레이어의 출력 값에

Softmax 함수를 적용하면 그 값들은 클래스 확률이 된다. , 어떤 클래스에 속할지 확률을 나타내는 것이다.

 

궁금했던 사항을 찾아서 간단하게 정리해보았다. 물론 깊게 파고들어갈수록 모르는것이 계속 나왔지만

우선은 이 정도로 정리해두고 넘어가려고 한다.

다음은 MATLAB으로 실제 구현해본 것을 올릴 예정이다.