9. CNN-Convolution

유승우·2022년 5월 11일
0

다층신경망


  • 다층신경망은 각 뉴런들이 선형모델과 활성함수로 모두 연결된(fully connect) 구조로, 가중치 행렬과 입력벡터의 내적과 활성화 함수를 통해 잠재변수를 계산할 수 있었다.
  • 하지만, 성분 h_i 에 해당하는 가중치 행들이 각각의 i번째 위치마다 필요하고, i가 바뀔 때마다 가중치 행렬의 행도 바뀌기 때문에 가중치 행렬의 구조가 커지면서, 학습을 시켜야하는 파라미터의 개수가 커지게 된다

Convolution 연산


  • Convolution 연산은 커널이라는 고정된 가중치 행렬을 입력 벡터 상에서 움직여가면서 선형 모델과 합성 함수가 적용되는 구조
  • 입력 벡터의 전체 데이터를 활용하는 것이 아닌 커널 사이즈에 대응되는 크기만 활용한다.
  • i의 개수와 상관없이 커널은 고정된 형태로 공통적으로 적용되기 떄문에, 파라미터 사이즈를 많이 줄일 수 있다.

  • 연속적인 공간(continuous) 에서의 Convolution 연산

[fg](x)=Rdf(z)g(xz)dz=Rdf(xz)g(z)dz=[gf](x)[f*g](x) = \int _{\mathbb{R}^d}f(z)g(x-z)dz = \int _{\mathbb{R}^d}f(x-z)g(z)dz = [g*f](x)
  • 이산적인 공간(discrete) 에서의 Convolution 연산

[fg](i)=aϵZdf(a)g(ia)dz=aϵZdf(ia)g(a)dz=[gf](i)[f*g](i) = \sum _{\mathbb{a\epsilon Z^d}}f(a)g(i-a)dz = \sum _{\mathbb{a\epsilon Z^d}}f(i-a)g(a)dz = [g*f](i)
  • Convolution 연산의 수학적인 의미는 신호를 커널을 이용해 국소적으로 증폭 또는 감소시켜서 정보를 추출 또는 필터링하는 것

  • 커널은 정의역 내에서 움직여도 변하지 않고 주어진 신호에 국소적으로 적용한다.

  • Convolution 연산은 1차원 뿐만 아니라 다양한 차원에서 계산이 가능한데, 데이터의 성격에 따라 사용하는 커널이 달라진다.


    • 1D_conv

      [fg](i)=p=1df(p)g(i+p)[f*g](i) = \sum_{p=1}^{d}f(p)g(i+p)
    • 2D_conv

      [fg](i,j)=p,qdf(p,q)g(i+p,j+q)[f*g](i,j) = \sum_{p,q}^{d}f(p,q)g(i+p,j+q)
    • 3D_conv

      [fg](i,j,k)=p,q,rdf(p,q,r)g(i+p,j+q,k+r)[f*g](i,j,k) = \sum_{p,q,r}^{d}f(p,q,r)g(i+p,j+q,k+r)
    • i,j,k가 바뀌어도 커널(f(p,q,r))의 값은 바뀌지 않는다.


2차원 Convolution 연산


  • 2D-Conv 연산은 커널을 입력 행렬 상에서 x와 y 방향으로 움직여 가면서 선형모델과 합성함수가 적용되는 구조

  • 입력 크기를(H,W), 커널 크기를 (Kh,Kw), 출력 크기를(Oh,Ow)라 할 때 출력 크기는 다음과 같다.
OH=HKH+1O_H = H - K_H + 1
OW=WKW+1O_W = W - K_W +1
  • 채널이 여러 개인 2차원 입력의 경우 2차원 Convolution 을 채널 개수만큼 커널을 만들어서 적용하며, 커널의 채널 수와 입력의 채널 수가 같아야 한다.

Convolution 연산의 역전파


  • Convolution 연산은 커널이 모든 입력 데이터에 공통으로 적용되기 때문에 역전파를 계산할 때도 Convolution 연산이 된다.
  • 아래의 식은 Discrete 일 때도 똑같이 성립된다.
x[fg](x)=xRdf(y)g(xy)dy\frac{\partial }{\partial x}[f*g](x) = \frac{\partial }{\partial x}\int_{\mathbb{R}^d}f(y)g(x-y)dy
=Rdf(y)gx(xy)dy=[fg](x)=\int_{\mathbb{R}^d}f(y)\frac{\partial g}{\partial x}(x-y)dy = [f*g'](x)
  • Convolution 연산 방식
    • O1의 출력은 O1=W1×x1+W2×x2+W3×x3O_1 = W_1 \times x_1 + W_2 \times x_2 + W_3 \times x_3 과 같이 계산된다.

  • gradient vector가 입력에 전달되는 방식
    • 입력 X3로 예를 들면 X3가 적용됐던 출력 벡터와 커널에 대응하여 각각의 미분값과 커널값들이 곱해지고 모두 더해서 전달된다.

  • gradient vector가 커널에 전달되는 방식
    • 입력에 전달되는 방식과 비슷하게 가중치 대신 입력 값들이 곱해져서 전달된다.

0개의 댓글