Take action every day.

CNN: Convolutional Neural Network(컨볼루션 신경망)

by 오민

AI

컴퓨터 비전 분야에서의 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. 원본 이미지의 크기 축소
    • 원본 이미지는 컨볼루션 연산을 수행할 때마다 (커널의 크기-1)만큼씩 한 변의 길이가 줄어든다.
    • Kernel의 크기가 짝수라면?
      • 딥러닝에서 쓰이는 kernel은 n*n의 행렬이고 대부분 홀수의 n을 사용한다.
      • 짝수의 n을 사용하면 아래 그림과 같은 일이 발생하기 때문이다.
        https://www.sallys.space/wp-content/uploads/2018/01/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7-2018-01-22-%EC%98%A4%EC%A0%84-1.45.00.png
        Image convolution with even-sized kernel
  2. 이미지의 모서리에 있는 픽셀일수록 적게 사용

이러한 문제들을 padding을 통해 해결한다.

커널의 크기를 2로 나눈 몫을 원본 이미지에 padding으로 추가하면, 이미지의 크기를 동일하게 유지할 수 있다.

 

Stride(보폭)

커널이 한 번에 이동하는 픽셀 수

https://blog.kakaocdn.net/dn/cECEn2/btqVCblbonL/prccCkrc6bm8ofrw7VipGk/img.png

  • 입력 이미지에서 필터를 몇 칸 씩 건너띄며 적용할지를 의미한다.
  • (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

오민

활동하기