-
Notifications
You must be signed in to change notification settings - Fork 3
CNN
BIBI edited this page Feb 2, 2020
·
15 revisions
CNN(Convolution Neural Network)는 주변의 데이터를 함께 보아 데이터의 특징을 뽑아 내는 Layer이다. CNN은 위치에 의미가 있는 데이터에 많이 사용한다. 이미지 분석에 사용하는 VGG나 텍스트 분석에 많이 사용하는 TextCNN 등에 많이 사용된다.
- 데이터의 형상을 유지하여 계층의 특징을 유지할 수 있다.
- 이미지의 경우 3차원(width, height, color) 형상으로 되어 있으므로, 3차원을 입력받아 3차원을 출력한다.
- 합성곱 계층의 입출력 데이터를 특징 맵(feature map)이라고 한다.
- 입력 데이터는 입력 특징 맵(input feature map), 출력 데이터는 출력 특징 맵(output feature map)

합성곱 연산의 과정
- 필터의 윈도우(window)를 일정 간격으로 이동해 가면서 입력 데이터에 적용한다. 윈도우는 위 그림에서 빨간 색 네모 칸을 의미한다.
- 단일 곱셈-누산(fused multiply-add, FMA): 입력(input)과 필터에 대응하는 원소끼리 곱한 구 총합을 구한다.
- 위 과정을 모든 장소에서 수행한다.
- 필터를 적용한 원소에 고정값(편향)을 더한다.
- 입력 함수의 값이 특징 함수의 값과 얼마나 일치하는지 알아내는 함수이다.
- 이미지/음성에서 특정 패턴을 추출할 때 많이 사용한다.
- 계층이 얕으면 합성곱 계층은 둥근 모양, 날카로운 모양 등 저수준의 정보가, 계층이 깊으면 추상적인 정보가 추출된다.
- 필터(filter): 입력 데이터와 동일한 차원을 가진 특징을 가진 값. 커널(kernel)이라고 하기도 한다.
- 필터의 개수와 크기를 정해 주면 모델이 filter를 자동으로 학습한다.
- 이미지로 예를 들면 이미지에 있는 특징(뾰족함, 부드러움 등)을 필터를 이용해 추출한다고 볼 수 있다.
- 필터의 개수를 여러 개로 지정하면 여러 특징을 한 번에 추출할 수 있다. 즉, feature map을 여러 개 만들 수 있다.
- Deconvolution(역합성곱)
- convolution을 역으로 수행하는 과정으로 feature map의 크기를 늘리는 과정이다.
- CNN의 결과를 가지고 원래 이미지를 다시 만들고 싶을 때 사용할 수 있다.

- 입력 데이터 주위에 0을 채우는 것
- padding은 주로 출력 크기를 조절하기 위해 사용한다.
- 3x3 필터를 적용하는 위 그림의 경우 padding을 적용하지 않으면 가로 크기, 세로 크기 모두 2씩 감소하게 된다.
- 따라서 폭이 1인 padding을 적용하여, Convolution을 수행해도 데이터의 크기가 동일하도록 하였다.
- 필터를 적용하는 위치의 간격
- 위의 예제는 필터를 오른쪽/아래로 한 칸씩 움직이면서 적용했으므로 stride는 모두 1이다.
- 필터를 두 칸 건너뛰어 적용하면 stride는 2가 된다.
padding, stride에 따른 출력 크기는 아래와 같다.

- 입력 크기: (H, W)
- 필터 크기: (FH, FW)
- 출력 크기: (OH, OW)
- padding: P
- stride: S
- 데이터를 (height, width, channel)으로 나눠서 생각할 수 있다.
- (height, width)에 대해 합성곱 연산을 수행하는 것을 channel 번 반복한다. 각 channel별로 다른 필터를 사용한다.
- 입력 데이터의 채널수와 필터의 채널 수는 동일해야 한다. 또한, 각 채널별 필터의 크기도 동일해야 한다.
- http://cs231n.github.io/convolutional-networks/ 의 중간쯤에 있는 그림을 참고할 수 있다.

- 가로/세로 방향의 공간을 줄이는 연산
- Max Pooling(최대 풀링): 영역 내 최댓값을 취해 Pooling하는 방법
- 위 그림은 2X2 Max Pooling을 수행하는 것을 나타낸다.
- 즉, 2X2 영역 중에서 가장 큰 원소 값을 가진다.
- 윈도우 크기가 2X2이므로 stride도 2이다. Pooling의 window size와 stride는 같은 값으로 하는 것이 일반적이다.
- Average Pooling(평균 풀링): 영역 내 값의 평균을 내어 Pooling하는 방법.
- Global Average Pooling(GAP)
- 기존의 max pooling은 22 max pooling을 함으로써 HWC 차원을 H(2xW)*(2xC), 1/4로 만듦
- global pooling은 H*W pooling이라는 뜻
- 하나의 feature map (HWC)를 전부 pooling하여 하나의 뉴런(11C)으로 mapping하는 것
- Pooling의 특징
- 학습해야 할 매개변수가 없다
- 채널 수가 변하지 않는다
- 각 채널별로 독집적으로 계산하기 때문이다.
- 입력의 변화에 영향을 적게 받는다. (융퉁성 확보)
- 입력 데이터가 조금 움직여도 Pooling을 수행하면 최댓값 하나만 남기 때문에 데이터의 이동을 Pooling이 흡수할 수 있다.
- 선명한 정보만 남겨서 판단과 학습이 쉬워진다. 노이즈가 줄어들어서 노이즈로 인한 잘못된 판단을 줄인다.
Convolution (패턴을 쌓아가며 점차 복잡한 패턴을 인식) + MaxPooling (사이즈를 줄여가며 더욱 추상화한다)
- Convolution과 MaxPooling(생략 가능)을 반복하면 반복할수록 추상적인 특징이 남는다.
- 제일 마지막에 추상화가 끝난 데이터를 Fully Connected Layer에 넣어 판단하는 경우가 많다.
- Channel 수를 조절하기 위한 Convolution
- 높은 차원을 낮은 차원으로 축소하는 Dimension Reduction에 사용 가능
- 차원 수가 줄어들면 불필요한 feature가 사라자는 효과를 가진다.
- 파라미터 수를 줄여 연상량을 감소시킬 수 있다.
- 비선형성을 증가시킬 수 있다.
- 많은 featute 중에서 꼭 필요한 feature를 남기기 위해 사용한다고 볼 수 있음
- 근처의 데이터는 보지 않고 자기 자신의 데이터만 보기 때문에 패턴 인식에 사용하지는 않음

- 코드 보러가기: CNN 구현
- 코드 보러라기: MNIST 데이터셋으로 학습 구현
-
im2col(image to column): height, width, stride, pad를 고려하여, 데이터를 1차원으로 전개하는 함수. 여러 데이터가 입력으로 들어오면 2차원으로 전개한다.- 코드 보러가기: im2col 구현
- stride나 pad 값에 따라 값이 중복되어 메모리 낭비가 발생할 수 있다. 그러나 행렬 계산에 최적화된 라이브러리를 사용할 수 있게 되므로 연산 속도가 빨라진다.
- Convolution: 필터를 1차원으로 전개해서 계속 곱해나가면 Convolution이 수행된다. Convolution을 행렬의 곱셈으로 처리한다.
- Pooling: pooling의 적용 영역 개수마다 하나씩 최댓값을 추출하면 Max Pooling이 수행된다.
4. CNN Model
5. CNN 만들기
- 컨볼루셔널 네트워크를 이용한 이미지 인식의 개념
- 컨볼루션(Convolution) 이해하기
- Deconvolution 개념
- 딥러닝 (CNN) 직관적 이해 - (1), (2)
- 딥러닝에서 사용되는 여러 유형의 Convolution 소개
- 눈으로 보는 CNN
- 밑바닥부터 시작하는 딥러닝, 7장
- Weakly supervised Learning으로 Object localization하기