본문 바로가기

Model/Layer

CNN(Convolution Neural Network)이란?

반응형

CNN(Convolution Neural Network)는 Convolution(합성곱)을 이용해 feature를 추출하는 Layer입니다. Convolution 특성상 근처의 데이터끼리만 묶어서 처리한다는 특징이 있습니다.

 

1. 합성곱 계층

데이터의 형상을 유지하여 계층의 특징을 유지할 수 있습니다. 이미지의 경우 3차원(width, height, color) 형상으로 되어 있으므로, 3차원을 입력받아 3차원을 출력합니다.

합성곱 계층의 입출력 데이터를 특징 맵(feature map)이라고 합니다. 입력 데이터는 입력 특징 맵(input feature map), 출력 데이터는 출력 특징 맵(output feature map)이라고 부릅니다.

 

(1) Convolution(합성곱)

Convolution 연산은 아래와 같이 수행합니다.

  1. 필터의 윈도우(window)를 일정 간격으로 이동해 가면서, 각각의 범위 내 데이터에만 적용됩니다.. 윈도우는 위 그림에서 빨간 색 네모 칸을 의미합니다.
  2. 단일 곱셈-누산(fused multiply-add, FMA): 입력(input)과 필터에 대응하는 원소끼리 곱한 구 총합을 구합니다.
  3. 위 과정을 모든 장소에서 수행합니다.
  4. 필터를 적용한 원소에 고정값(편향)을 더합니다.

Input feature map이 filter와 패턴이 일치할수록 Output feature map의 값 또한 큽니다. 즉, 입력값이 filter와 얼마나 일치하는지 나타냅니다. 이미지나 음성 등에서 특정 패턴을 추출할 때 많이 사용합니다. 계층이 얕으면 CNN은 둥근 모양, 날카로운 모양 등 저수준의 패턴 정보를 추출합니다. 계층이 깊으면 추상적인 정보를 추출합니다.

Filter(필터)란, 특징을 가진 값으로 입력 데이터와 동일한 차원을 가집니다. 커널(kernel)이라고도 합니다. 예를 들면 필터는 이미지에 있는 특징(뾰족함 등)을 나타낸다고 볼 수 있습니다. Filter을 여러 개 사용하여 한 번에 여러 feature를 추출할 수 있습니다.

Deconvolution(역합성곱)은 convolution을 역으로 수행하는 과정입니다. feature map의 크기가 증가합니다.

 

(2) Padding

Padding이란, 입력 데이터 주위에 0을 채우는 것을 의미합니다. CNN의 출력 크기를 조절하기 위해 사용합니다. Padding이 없으면 CNN layer를 통과할 때마다 가로/세로 크기가 감소하지만, Padding을 적용하면 Convolution을 수행해도 데이터의 크기가 동일합니다.

 

(3) Stride

Stride란 필터를 적용하는 위치의 간격을 의미합니다. 예를 들어 필터가 오른쪽, 아래쪽으로 한 칸씩 움직이면 stride는 1입니다. padding, stride에 따른 출력 크기는 아래와 같습니다.

  • 입력 크기: (H, W)
  • 필터 크기: (FH, FW)
  • 출력 크기: (OH, OW)
  • padding: P
  • stride: S

 

(4) 3차원 데이터

이미지 데이터는 3차원, 즉 height, width, channel 3개 차원으로 나눠서 생각할 수 있습니다. (height, width) 크기의 데이터에 대해서, 각 channel별로 각각 다른 filter를 이용해 Convolution을 수행합니다.

 

(5) Pooling

Pooling은 데이터의 크기를 줄이는 연산을 의미합니다. 즉, 데이터의 여러 값을 묶어서 하나의 데이터로 줄이는 과정입니다. Pooling에는 Max Pooling, Average Pooling, Global Average Pooling 등이 있습니다.

Max Pooling(최대 풀링)이란, 영역 내 최댓값을 취해 Pooling하는 방법입니다. 위 예제를 보면, 2x2 Max Pooling을 수행하므로, 2x2 영역 중에서 가장 큰 원소 값을 가집니다.  Window 크기가 2x2이므로, stride도 2 입니다. Pooling의 window size와 stride는 같은 값으로 하는 것이 일반적입니다.

Average Pooling(평균 풀링)은 영역 내 값을 평균내서 Pooling합니다. 영역 내 최댓값을 가지는 Max Pooling과 달리, 영역 내 평균값을 가진다는 차이점이 있습니다.

Global Average Pooling(GAP)이란, feature map 전체에 대해서 Average Pooling하는 방법입니다. 즉 영역 크기가 $H*W$로 feature map의 크기와 동일합니다. 즉 $H*W*C$ 크기를 가지는 feature map을 $1*1*C$ 크기의, 하나의 뉴런으로 mapping하는 것입니다.

  •  

Pooling은 다음과 같은 특징이 있습니다.

  • 학습해야 할 매개변수가 없습니다.
  • 채널 수가 변하지 않습니다. 각 채널별로 독립적으로 수행되기 때문입니다.
  • 입력의 변화에 영향을 적게 받습니다. Max Pooling을 예로 들면, 입력 데이터가 조금 변해도 Pooling 후에는 최댓값 하나만 받습니다. 노이즈가 줄어들고 선명한 정보만 남겨서 판단과 학습이 쉬워진다고 볼 수 있습니다.
    •  

Convolution을 통해 패턴을 쌓아가며 점차 복잡한 패턴을 인식하고, MaxPooling을 이용해 사이즈를 줄여가면서 추상화를 한다고 볼 수 있습니다.

 

2. CNN layer의 응용

(1) FC : Fully Connected

Convolution과 MaxPooling(생략 가능)을 반복하면 반복할수록 추상적인 특징이 남습니다. 제일 마지막 feature map을 Fully Connected Layer에 연결하는 경우가 많습니다.

 

(2) One-by-One(1X1) Convolution

Channel 수를 조절하기 위한 Convolution입니다. 높은 차원을 낮은 차원으로 축소하는 Dimension Reduction에 사용합니다. Dimension Reduction은 다음과 같은 특징을 가집니다.

  • 차원 수를 줄여서 불필요한 feature가 사라지는 효과를 가집니다.
  • 파라미터 수를 줄여서 연산량을 감소시킬 수 있습니다.
  • 비선형성을 증가시킬 수 있습니다.

 

3. Convolution을 행렬곱으로 더 빠르게 처리하기

 

 

CPU는 SIMD 명령을 이용하면 행렬 연산을 매우 빠르게 처리할 수 있습니다. 한 번에 많은 데이터를 가져와서 연산을 동시에 처리할 수 있기 때문입니다.

Convolution 또한 행렬 연산으로 바꾸면 더 빠르게 처리할 수 있습니다. height, width, stride, pad를 고려하여, filter와 곱셈만 하면 연산이 완료되도록 데이터를 1차원으로 전개하는 방식입니다. 데이터 여러 개가 한 번에 들어오면, 2차원으로 전개할 수 있습니다. stride나 pad 값에 따라 같은 값을 여러 번 반복해야 하므로, 메모리 낭비가 발생할 수 있습니다. 하지만, CPU는 행렬 계산을 빠르게 처리할 수 있으므로 연산 속도를 향상시킬 수 있습니다.

필터를 1차원으로 전개해서 계속 곱해나가면 Convolution을 수행할 수 있습니다. 입력 데이터를 필터와 곱하기만 하면 되도록 전개를 했기 때문입니다. 즉, Convolution을 행렬곱 연산으로 처리합니다. Max Pooling 또한, 적용 영역 개수마다 하나씩 최댓값을 추출하기만 하면 됩니다. 예를 들어 Max Pooling을 4개 영역마다 수행한다면, 데이터 4개씩 묶어서 최댓값을 추출합니다.

 

4. CNN Model

제목을 클릭하여 다른 게시글을 참조하세요

 

5. CNN 만들기

제목을 클릭하여 다른 게시글을 참조하세요

 

6. 참고 자료

 

7. Reference

반응형

'Model > Layer' 카테고리의 다른 글

CNN 모델  (0) 2020.04.12
CNN만들기  (0) 2020.04.12
RNN/LSTM/GRU  (0) 2020.04.12
DNN (Deep Neural Network, 심층 신경망)  (0) 2020.04.12
Layer  (0) 2020.04.12