[Deep Learning] CNN(Convolutional Neural Network)
1. CNN, Convolutional Neural Network 개념
Convolutional Neural Network(이하 ConvNet)은 합성곱(Convolution) 연산을 사용하는 인공 신경망의 한 종류이다.
ConvNet과 일반적인 신경망의 가장 큰 차이점은 ConvNet은 입력 데이터가 이미지라는 것이다.
이미지는 다음과 같이 행렬 형태로 이루어져있으며
또한, 이미지는 Width x Height x Depth 형태로 이루어져있다.
숫자 32가 의미하는 바는 픽셀 수를 뜻한다.
또한 ConvNet의 가장 큰 특징은 일반적인 신경망 앞에 여러 합성곱 계층을 붙인 형태로 이루어진다.
(1). 특징 추출(Feature Extraction)
(2). 분류(Calssification)
다음 그림과 같이, C로 표시된 컨볼루션 계층들을 통해서 입력 이미지에 대한 특징을 추출하게 되고, 추출된 특징을 기반으로 기존의 신경망을 이용하여 분류를 하게 된다. 예를 들어 3이 적혀있는 손글씨를 인식하기 위해서 컨볼루션 계층을 통해 이미지의 특성을 추출하고, 이러한 특성 정보들과 일반 신경망을 통하여 0에서 9중 입력 이미지를 3으로 분류하게 되는 것이다.
2. Convolutional Layer
컨볼루셔널 레이어는 입력 데이터로부터 특징을 추출하는 역할을 수행한다.
이는 특징을 추출하는 필터(Filter)와 필터의 값을 비선형 값으로 바꾸어주는 활성화 함수(Activation Function)로 이루어져 있다.
(1) 필터
필터는 추출하려는 이미지의 특징이 대상 데이터에 있는지 없는지를 검출해주는 함수라고 할 수 있다.
아래는 다음과 같은 곡선을 검출하는 필터이다.
필터는 행렬로 정의되어 있으며, 입력 받은 이미지 역시 행렬 형태로 이루어져있다.
아래 예시는 쥐 그림 이미지에서 좌측 상단의 이미지를 잘라내서(Cropping)
필터를 적용하여 위의 곡선과 같은 형태를 지니는지 검출하는 예시이다.
아래와 같이 잘라낸 이미지에 필터를 곱하면 6600 값이 나온다.
이 값은 매우 큰 값이며, 위의 필터와 같은 형태를 지니고 있음을 강렬하게 뜻하는 것이다.
만약에 아래 그림처럼 쥐 그림에서 곡선이 없는 부분에 필터를 적용한다면
그 값은 0에 수렴하는 값이 나온다.
즉, 곡선 형태를 지니고 있지 않다 라는 것을 뜻한다.
필터는 입력 받은 데이터에서 해당 특성을 가지고 있다면 결과 값이 큰 값이 나오고,
특성을 가지고 있지 않거나, 비슷하지 않을 경우에 결과 값이 0에 가까운 값이 나오게 되어
입력 데이터가 그 특성을 가지고 있는지 없는지의 여부를 알 수 있게 해준다.
이것이 바로 분류를 위한 기본 셋팅 이다.
(2) 스트라이드(Stride)
이러한 필터를 원 영상에 적용하기 위해서 스트라이드라는 기법을 사용한다.
다음과 같이 5 x 5 원 영상이 있을 때, 3 x 3 필터를 좌측 상단에서부터 왼쪽으로 한칸씩 그 다음 줄에서 왼쪽으로 한칸씩 적용해서 특징을 추출해낸다.
이 때 3 x 3 필터가 위치하는 원 영상의 픽셀 값이 곱해진다.
오른쪽 Convolved Feature 가 필터 적용을 통해 얻어낸 결과이다.
이를 특징 맵(Feature Map) 또는 활성화 맵(Activation Map) 이라고 한다.
스트라이드는 이 때 필터를 적용하는 "간격"을 뜻한다.
(3) 패딩(padding)
필터를 적용한 후의 결과값은 3 x 3 행렬로 작아진 것을 확인 할 수 있다.
즉 이는 5 x 5 원영상에 3 x 3 필터를 스트라이드 1값으로 적용되었을 때 특징 맵이 3 x 3 으로 작아졌다.
그런데 이 때, ConvNet은 하나의 필터를 한 번 적용하는 것이 아니라 여러 단계에 걸쳐 필터를 연속적으로 적용하여 특징을 추출하게 되는데 처음에 비해 특징이 소실 될 수 있다.
이를 방지하기 위한 기법으로는 "패딩" 이 있다.
패딩은 결과 값이 작아져 소실되는 것을 방지하기 위해
입력 이미지 행렬 가장자리에 0 값을 추가적으로 넣어 값을 키운다음 필터를 적용하는 것이다.
(4) 활성화 함수(Activation Function)
이렇게 필터 들을 통해서 특징 맵이 추출되면 이 특징 맵에 활성화 함수를 적용하여 값을 활성화 시킨다.
활성화 함수는 위 쥐 그림 예시에서 곡선 값의 특징을 가지고 있는 필터를 통해
입력 데이터에 적용한 결과 각 6600, 0 의 값을 얻었다.
이 값이 정량적으로 나오기 때문에
이러한 값들을 "곡선 특징을 가지고 있다" 와 "없다"로 바꾸어 주는 과정이 필요하다.
이 것이 바로 활성화 함수 이다.
대표적인 활성화 함수로는 시그모이드(Sigmoid) 함수와 렐루(ReLU) 함수가 있다.
보통 렐루 함수를 사용한다.
시그모이드 함수보다 렐루 함수를 사용하는 이유는 신경망이 깊어 질수록 학습이 어렵기 때문에
전체 계층을 한번 계산한 후 그 계산된 값을 다시 계산하는 역전파(Back Propagation)이라는 방법을 사용하는데
시그모이드 함수를 활성화 함수로 사용할 경우,
계층이 깊어지면 그라디언트 소실(Gradient Vanishing) 문제가 발생하기 때문에 렐루 함수를 사용한다.
(5) 풀링(Pooling)
이렇게 추출된 특징들을 필요에 따라 서브 샘플링(Sub-sampling) 과정을 거치게 된다.
컨볼루션 계층을 통해 특징이 추출되면 이 모든 특징을 고려할 필요가 없다.
예를 들어 예전 TV 시청률 계산시 전체 가구의 TV 시청을 계산하는 것이 아니라,
랜덤 가구에 대하여 시청률 계산만 해도 전체 시청률과 비슷한 결과를 추출 할 수 있는 것과 같은 원리이다.
그래서 추출된 특징 맵을 줄이는 작업을 수행하는데, 이 작업을 서브 샘플링 또는 풀링 이라고 한다.
풀링 방법에는 맥스 풀링(Max Pooling), 평균 풀링(Average Pooling), L2-norm Pooling 등이 있고
그 중에서 맥스 풀링을 많이 사용한다.
맥스 풀링은 특징 맵을 M x N 크기로 잘라낸 후, 그 안에서 가장 큰 값을 뽑아내는 방법이다.
아래 예시에서는 4 x 4 특징 맵에서 2 x 2 맥스 풀링 필터를 스트라이드를 2로 하여
2칸씩 이동하면서 맥스 풀링을 거친 예시이다. 좌측 상단에서는 2가 가장 큰 값이기 때문에 2를 뽑아낸다.
이러한 맥스 풀링의 장점으로는 전체 데이터 크기가 줄어들기 때문에 연산량이 적어지고,
데이터 크기를 줄이면서 소실이 발생하기 때문에 오버 피팅을 방지 할 수 있는 효과가 있다.
3. 완전 연결 계층(Fully Connected Layer)
컨볼루션 계층에서 특징이 추출되었으면 이 추출된 특징 값을 기존의 신경망에 적용하여
분류하는 과정을 거친다.
최종 ConvNet의 모양은 다음과 같이 구성된다.
(1) 소프트맥스 함수(Softmax Function)
위 그림에서 가장 마지막에 소프트맥스 함수가 있다.
소프트맥스 함수도 일종의 활성화 함수 개념이다.
시그모이드 함수가 이산 분류(참 or 거짓, 1 or 0)를 나타내는 함수라면
소프트맥스 함수는 여러개의 분류를 가질 수 있는 함수이다.
아래 그림이 소프트맥스 함수의 적용 예시이다.
추출된 특징 값을 소프트맥스 함수를 통해 일정한 값으로 변환한다.
변환된 값들의 합은 1이 되고, 제일 높은 값이 분류의 대상이 된다.
(2) 드롭아웃(Dropout)
드롭아웃 기법은 오버피팅을 막기 위한 방법으로,
신경망이 학습중 일 때 랜덤하게 뉴런을 드롭아웃 시켜 학습을 방해함으로써
학습이 학습용 데이터에 치우치는 현상을 방지한다.
참고자료 1 : https://hunkim.github.io/ml/lec11.pdf
참고자료 3 : http://bcho.tistory.com/tag/alexnet
참고자료 4 : https://www.slideshare.net/agdatalab/deep-learning-convolutional-neural-network
'AI Research Topic > Deep Learning' 카테고리의 다른 글
[Deep Learning] Batch Normalization (배치 정규화) (10) | 2020.05.16 |
---|---|
[Deep Learning] 커널의 의미 (0) | 2019.10.05 |
[Deep Learning] 손글씨 인식 (MNIST) (1) | 2017.08.25 |
[Deep Learning] 회귀분석 (Regression) 과 경사하강법 (Gradient Descent) (3) | 2017.08.25 |
[Deep Learning] pre-training 과 fine-tuning (파인튜닝) (0) | 2017.08.17 |