CNN: Convolutional Neural Network(컨볼루션 신경망)
by 오민컴퓨터 비전 분야에서의 1등 공신.
딥러닝에서 가장 성공한 모델
classification 등에 사용된다.
CNN 특징
- 부분 연결성
- 가중치 공유(Weight Parameter Sharing)
- Input의 모든 부분에 동일한 filter(kernal)을 적용하기 때문에, 모든 픽셀이 가중치를 공유하는 셈이 된다.
- 덜 보기 때문에 덜 정확한게 아닐까? 하고 생각할 수 있지만, 인간의 눈처럼 중요한 부분만 보고 가려낼 수 있기 때문에 훨씬 효과적일 수 있다.
- 학습이 최적화해야 하는 매개변수의 개수를 획기적으로 줄여준다.
- CNN에서는 커널이 가중치의 역할을 한다.
- 통째 학습, 특징 학습
- C-C-P-dropout-FC-dropout-FC 구조
- 데이터의 원래 구조를 유지한 채 특징 추출
컨볼루션(convolution) 연산
커널(kernel)을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조
신호(signal)를 커널을 이용해 국소적으로 증폭 또는 감소시켜서 정보를 추출 또는 필터링하는 것
엄밀히 말하자면 cross-correlation이라고 불러야 한다.
특징 추출 또는 신호 변환에 사용한다.
1,2,3차원으로 Convolution 연산이 가능하다.
활성화 함수를 제외한 Convolution 연산도 선형 변환에 속한다.
- 빨강 : 신호
- 파랑 : 커널
- 검정 : 결과
- Quiz. 입력벡터 \(x\)와 가중치 벡터 \(V\)가 다음과 같이 주어질 때, 올바른 h를 계산하면?
- \(\tt x = [1,2,3,4,5,6,7,8,9,10]\)
- \(\tt V = [-1,-2,-3]\)
- \(\tt h_i = \sum^k_{j=1}V_jx_{i+j-1}\)
- \(k : V\)의 크기, 1부터 시작한다.
- \(h = [-14, -20, -26, -32, -38, -44, -50, -56]\)
컨볼루션층
Convolution 연산은 커널이 모든 입력데이터에 공통으로 적용되기 때문에 역전파를 계산할 때도 convolution 연산이 나오게 된다.
$$\begin{aligned}\frac{\partial}{\partial x}[f * g](x) & =\frac{\partial}{\partial x} \int_{\mathbb{R}^d} f(y) g(x-y) \mathrm{d} y \\& =\int_{\mathbb{R}^d} f(y) \frac{\partial g}{\partial x}(x-y) \mathrm{d} y \\& =\left[f * g^{\prime}\right](x)\end{aligned}$$
convolution의 역전파
1~4
5. 각 \(\delta\)는 미분값을 의미한다.
6. 역전파 단계에서 다시 커널을 통해 그레디언트가 전달된다.
7. 커널에는 𝛿 에 입력값 𝑥% 을 곱해서 전달한다.
8. 각 커널에 들어오는 모든 그레디언트를 더하면 결국 convolution 연산과 같다.
$$\frac{\partial \mathcal{L}}{\partial w_i}=\sum_j \delta_j x_{i+j-1}$$
https://ratsgo.github.io/deep%20learning/2017/04/05/CNNbackprop/
Pooling Layer(풀링층)
Max Pooling(최대 풀링)
CNN 시각화
- 커널 시각화
- 특징맵 시각화
Ex — RGB Image Convolution 파라미터 계산
이 이미지가 핵심이다.
항상 연산에 필요한 파라미터 개수를 계산할 줄 알아야 한다.
Q1. 32 * 32 * 3 이미지로부터 28 * 28 * 4 크기의 특징맵을 얻기 위해 필요한 파라미터 수
5 * 5 * 3 * 4 ⇒ 300개
Q2. 28 * 28 * 4 특징맵로부터 24 * 24 * 10 크기의 특징맵을 얻기 위해 필요한 파라미터 수
5 * 5 * 4 * 10 ⇒ 1000개
Padding(덧대기)
컨볼루션 연산의 두 가지 문제
- 원본 이미지의 크기 축소
- 원본 이미지는 컨볼루션 연산을 수행할 때마다 (커널의 크기-1)만큼씩 한 변의 길이가 줄어든다.
- Kernel의 크기가 짝수라면?
- 딥러닝에서 쓰이는 kernel은 n*n의 행렬이고 대부분 홀수의 n을 사용한다.
- 짝수의 n을 사용하면 아래 그림과 같은 일이 발생하기 때문이다.
Image convolution with even-sized kernel
- 이미지의 모서리에 있는 픽셀일수록 적게 사용
이러한 문제들을 padding을 통해 해결한다.
커널의 크기를 2로 나눈 몫을 원본 이미지에 padding으로 추가하면, 이미지의 크기를 동일하게 유지할 수 있다.
Stride(보폭)
커널이 한 번에 이동하는 픽셀 수
- 입력 이미지에서 필터를 몇 칸 씩 건너띄며 적용할지를 의미한다.
- (n, n) 이미지에 대해 p 만큼 패딩한 후 (f, f) 필터로 s 만큼 stride하며 convolution 한다면 출력 이미지의 크기는 ((n+2p-f)/s+1, (n+2p-f)/s+1)이 된다.
- (N+2p-f)/s + 1 가 실수라면 소수점 아래 부분은 버린다.
Ex - Padding과 Stride를 고려한 파라미터 계산
Padding (1), Stride (1), 3 × 3 Kernel인 경우
커널 크기가 3 * 3이고, 패딩 1이기 때문에 output의 크기는 유지된다.
파라미터 수 = 3 * 3 * 128 * 64 = 73728
Alexnet 모델의 파라미터 수 계산(링크 수정 예정 -- 현재는 노션페이지)
1 * 1 Convolution(링크 수정 예정 -- 현재는 노션페이지)
블로그의 정보
OMIN
오민