합성곱 신경망


합성곱 신경망

  • 구성
    • 합성곱층(Convolution layer)
    • 풀링층(Pooling layer)

합성곱 신경망 이전

  • 매트릭스 데이터를 컴퓨터에게 학습시킬 경우
    • 다층 퍼셉트론을 사용해야함
    • 2차원 매트릭스를 1차원 벡터로 변환해야함
  • 공간적인 구조 정보 유실 -> 제대로된 결과가 안나옴
  • 합성곱 신경망이 나오게됨

합성곱 연산

  • 커널(필터)이 이미지를 처음부터 끝까지 겹치며 훑음
  • 겹쳐지는 부분의 각 이미지와 커널의 원소값을 곱함
  • 그 곱한 것들을 다 더함
  • 이미지의 왼쪽 위부터 오른쪽 아래까지
\[input = \begin {pmatrix} 1 & 2 & 3 & 4 & 5 \\ 2 & 1 & 0 & 1 & 2 \\ 3 & 0 & 1 & 1 & 0 \\ 1 & 4 & 1 & 1 & 2 \\ 2 & 1 & 1 & 0 & 0 \end {pmatrix} \;,\; kernel = \begin {pmatrix} 1 & 0 & 1 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \end {pmatrix} \\ featuremap = \begin {pmatrix} 6 & 9 & 11 \\ 10 & 4 & 4 \\ 7 & 7 & 4 \end {pmatrix} \\ featuremap_{1, 1} = (1 \times 1) + (2 \times 0) + (3 \times 1) + \\ (2 \times 1) + (1 \times 0) + (0 \times 1) + \\ (3 \times 0) + (0 \times 1) + (1 \times 0) \;=\; 6\]
  • 커널의 크기는 보통 3 X 3 내지는 5 X 5
  • stride : 커널의 이동 범위

패딩(Padding)

  • 특성맵은 입력에 비해 크기가 현저히 작아짐
    • 위의 예시에서도 5 X 5에서 3 X 3으로 작아짐
  • 합성곱층을 여러개 쌓을 경우 최종 특성맵은 매우 작아지게 됨
  • 이런 문제를 패딩으로 방지
    • 입력 가장자리에 지정된 폭만큼 행과 열을 추가
    • 주로 값을 0으로 채우는 제로패딩 사용
  • 이 방법으로 특성맵이 지나치게 작아지는 것을 방지

가중치와 편향

가중치

  • CNN에서 가중치는 커널의 원소
    • 커널이 3 X 3이라면 가중치는 9개
  • 가중치가 다층 퍼셉트론에 비하면 적음
    • 공간적 구조 정보 보존
  • 활성화함수 : 비선형성을 추가하기 위해 사용
    • 합성곱층에선 ReLU()함수나 이 함수의 변형들이 주로 사용

편향

  • 합성곱층에도 편향 더할 수 있음
    • 특성맵의 각 원소에다가 편향을 더함

특성맵의 크기 계산

  • 입력의 크기, 커널의 크기, 스트라이드를 알면 특성맵의 크기를 구할 수 있음
\[O_h = floor(\frac{I_h - K_h}{S} + 1) \\ O_w = floor(\frac{I_w - K_w}{S} + 1)\]
  • h가 붙은 것은 높이, w가 붙은 것은 너비
  • O는 특성맵, I는 입력, K는 커널, S는 스트라이드
  • floor함수 : 소수점 이하를 버림
  • 예시
    • 입력 : 5 X 5, 커널 : 3 X 3, 스트라이드 : 1
    • 특성맵의 크기 = (5 - 3 + 1) X (5 - 3 + 1) = 3 X 3

다수의 채널을 가질 경우 합성곱 연산

  • 각 채널마다 합성곱 연산
  • 그 결과를 더해준다
  • 예시
\[ch1 = \begin {pmatrix} 1 & 2 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 5 \end {pmatrix} \;,\; ch2 = \begin {pmatrix} 1 & 2 & 3 \\ 3 & 1 & 0 \\ 0 & 1 & 0 \end {pmatrix} \;,\; ch3 = \begin {pmatrix} 1 & 2 & 3 \\ 2 & 1 & 0 \\ 3 & 0 & 1 \end {pmatrix} \\ kernel1 = \begin {pmatrix} 1 & 0 \\ 0 & 1 \end {pmatrix} kernel2 = \begin {pmatrix} 1 & 1 \\ 1 & 0 \end {pmatrix} kernel3 = \begin {pmatrix} 0 & 0 \\ 0 & 1 \end {pmatrix}\\ fm1 = \begin {pmatrix} 1 & 3 \\ 0 & 5 \end {pmatrix} fm2 = \begin {pmatrix} 6 & 6 \\ 4 & 2 \end {pmatrix} fm3 = \begin {pmatrix} 1 & 0 \\ 0 & 1 \end {pmatrix} \\ featuremap = \begin {pmatrix} 8 & 9 \\ 4 & 8 \end {pmatrix}\]
  • 여기서 사용되는 커널은 3개의 채널을 가진 1개의 커널

3차원 텐서의 합성곱 연산

conv16_final

  • 3차원 텐서의 합성곱 연산 후 특성맵의 채널은 1임

conv17_final_final

  • 위 이미지는 커널을 여러개 사용하는 경우
  • 사용된 커널의 수는 특성맵의 채널이 됨
  • 이 경우 Ci와 C0가 주어졌을 때 가중치 매개변수의 수를 구할 수 있음
    • 합성곱층에서 가중치 : 커널의 원소
    • 커널의 크기 : Ki X Ko
    • 커널의 크기(채널도 포함) : Ki X Ko X Ci
    • 커널의 개수도 포함 : Ki X Ko X Ci X Co
\[가중치 \,\ 매개변수의 \,\ 총 \,\ 수 \;=\; K_i \times K_o \times C_i \times C_o\]

풀링

  • 일반적으로 합성곱층 이후 풀링층을 추가
  • 풀링층에선 특성맵을 다운샘플링
    • 특성맵의 크기를 줄임
  • 커널과 스트라이드 개념 다 있음
  • 풀링 연산
    • maxpooling : 특성맵과 커널이 겹치는 원소들 중 최댓값만 뽑아냄
    • averagepooling : 특성맵과 커널이 겹치는 원소들의 평균 추출

합성곱 연산과 풀링의 차이

  • 가중치가 없다
  • 채널의 수가 변하지 않음