[책 요약] 밑바닥부터 시작하는 딥러닝1-Chapter 7. 합성곱 신경망(CNN)

전체 구조

  • CNN도 지금까지의 신경망과 같이 레고 블록처럼 계층을 쌓을 수 있으나, 합성곱 계층과 풀링 계층이 새롭게 등장한다.
  • 지금까지 본 신경망은 인접하는 계층의 모든 뉴런과 결합되어 있었다. 이를 완전연결(Fully-Connected, 전결합)이라고 하며, 완전히 연결된 계층을 Affine 계층이라는 이름으로 구현했다.
합성곱은 공학과 물리학에서 널리 쓰이는 수학적 개념으로, ‘두 함수 중 하나를 반전, 이동 시켜가며 나머지 함수와의 곱을 연이어 적분한다’ 라는 의미로 쓰인다.
  • 반면 CNN에서는 일반적으로 아래와 같이 Conv-ReLU-Pooling 흐름으로 연결된다

  • CNN에서도 출력에 가까운 층에서는 지금까지의 Affine-ReLU 혹은 Affine-Softmax 조합을 그대로 사용한다.

합성곱 계층

  • CNN에서는 Padding, Stride 등의 고유의 용어가 등장한다.
  • 또 각 계층 사이에는 3차원 데이터와 같이 입체적인 데이터가 흐른다는 점에서 완전연결 신경망과 다르다.

완전연결 계층의 문제점

  • 완전연결 계층의 문제점은 ‘데이터의 형상이 무시’ 된다는 사실이다.
  • 입력 데이터가 이미지인 경우, 이미지는 통상 세로-가로-색상(채널)로 구성된 3차원 데이터이지만, 완전연결 계층에 입력할 때는 3차원 데이터를 평평한 1차원 데이터로 평탄화해줘야 한다.
  • 이미지는 3차원 형상이며, 이 형상에는 소중한 공간적 정보가 담겨 있다. 예를 들어 공간적으로 가까운 픽셀은 값이 비슷하거나, RGB의 각 채널은 서로 밀접하게 관련되어 있거나, 거리가 먼 픽셀끼리는 별 연관이 없는 등, 3차원 속에서 의미를 갖는 본질적인 패턴이 숨어있다. 그러나 완전연결 계층에서는 이러한 형상이 무시되고 모든 입력 데이터를 동등한 뉴런(같은 차원의 뉴런)으로 받아들인다.
  • 반면, 합성곱 계층에서는 이미지의 형상을 유지한다. 이미지도 3차원 데이터로 입력 받고, 다음 계층에도 3차원 데이터로 전달한다. 그래서 CNN에서는 이미지처럼 형상을 가진 데이터를 제대로 이해할 가능성이 있다.
  • 특징 맵(Feature map)
    • CNN에서는 합성곱 계층의 입출력 데이터를 특징 맵이라고도 한다.
    • 입력 데이터를 입력 특징 맵, 출력 데이터를 출력 특징 맵이라고 하는 식이다.

합성곱 연산

  • 합성곱 계층에서는 합성곱 연산을 수행한다. 합성곱 연산은 이미지 처리에서 말하는 필터 연산에 해당한다.
  • 합성곱 연산의 예시

왼쪽부터 입력 데이터, 필터(커널), 출력 피처 맵

  • 위와 같이 합성곱 연산은 입력 데이터에 필터(커널)를 적용한다.
  • 이 예에서 입력 데이터는 세로-가로 방향(4, 4)의 형상을 가졌고 필터 역시 세로-가로 형상(3,3)을 갖는다.
  • 합성곱 연산은 필터의 윈도우(회색 부분)를 일정 간격으로 이동해가며 입력 데이터에 적용한다.
  • 합성곱 연산의 계산 순서

  • 이 그림에서 보듯 입력과 필터에서 대응하는 원소끼리 곱한 후 그 총합을 구한다(이 계산을 단일 곱셉-누산, Fused multiply-add, FMA)라고 한다.
  • CNN에도 가중치 매개변수와 편향이 존재하는데, CNN에서는 필터의 매개변수가 가중치 역할을 한다.
  • 아래처럼 필터를 적용한 후에 1x1 편향을 더해준다.

패딩

  • 합성곱 연산을 수행하기 전에 입력 데이터의 주변을 특정 값(예컨대 0)으로 채우기도 한다. 이를 패딩이라 하며 합성곱 연산에서 자주 이용하는 기법이다.

  • 패딩은 주로 출력 크기를 조정할 목적으로 사용된다. 예를 들어 4 x 4 입력 데이터에 3 x 3 필터를 적용하면 출력은 2 x 2가 되어 입력보다 2만큼 줄어든다. 이는 합성곱 연산을 몇 번이나 되풀이하는 심층 신경망에서는 문제가 될 수 있다. 이러한 사태를 막기위해 패딩을 적용하여 입력에 대한 출력의 크기를 유지한다. 한마디로 입력 데이터의 공간적 크기를 고정한 채로 다음 계층에 전달 할 수 있다.

스트라이드

  • 필터를 적용하는 위치의 간격을 스트라이드라고 한다.

  • 스트라이드를 키우면 출력의 크기는 작아진다.
  • 스트라이드와 패딩, 필터의 크기에 따른 출력 크기는 다음과 같다.
  • OH = output height, OW = output width
    $$OH = \frac{H+2P-FH}{S}+1$$ $$OW = \frac{W+2P-FW}{S}+1$$
  • 모든 값은 반드시 정수가 되어야 함에 주의하라

3차원 데이터의 합성곱 연산

  • 이미지는 가로 세로 외에도 RGB 값이 존재하는 3차원 데이터이다.
  • 3차원 데이터의 CNN 연산은 다음과 같다.

채널 별로 합성곱 연산을 수행하고 그 결과를 더해서 하나의 출력을 얻는다.

블록으로 생각하기

  • 3차원 합성곱 연산은 데이터와 필터를 직육면제 블록이라고 생각하면 쉽다.

  • 위 예제에서는 출력 데이터가 1장이다. 즉 채널이 1개이다. 그럼 다수의 채널로 내보내려면 어떻게 해야 할까? →다수의 필터를 사용하면 된다.
    • 여기서 독자에게 다수의 채널이 왜 필요한지 설명해주면 좋았을 것 같은데

  • 이상에서 보듯, 합성곱 연산에서는 필터의 수도 고려해야 한다. 그런 이유로 필터의 가중치 데이터는 4차원 데이터이며 (출력 채널 수, 입력 채널 수, 높이, ㅇ너비) 순으로 쓰인다.
  • 예를 들어 채널 수 3, 크기 5x5 인 필터가 20개 있다면 (20, 3, 5, 5) 순으로 쓰인다.
    • 그럼 학습 파라미터 수는 20 X 3 X 5 X 5 = 1500이 된다
  • 마찬가지로 합성곱 연산에서도 편향이 쓰인다.

배치 처리

  • 신경망 처리에서는 입력 데이터를 한 덩어리로 묶어 배치로 처리한다.
  • CNN에서도 배치 처리를 지원해야 한다.
  • 구체적으로 데이터를 (데이터 수(N), 채널 수(C), 높이(H), 너비(W)) 순으로 저장한다.

  • 위 그림처럼 4차원 데이터로 각 계층을 흐르게 된다. 여기에서 주의할 점은 신경망에 4차원 데이터가 하나 흐를 때마다 데이터 N개에 대한 합성곱 연산이 이뤄진다는 것. 즉 N회 분의 처리가 한 번에 수행된다.

풀링 계층

  • 풀링은 세로-가로 방향의 공간을 줄이는 연산이다.

  • 위 그림은 최대 풀링(Max-pooling)을 스트라이드 2로 처리하는 순서이다. 즉, 2x2 영역에서 가장 큰 숫자를 꺼내는 연산이다.
  • 참고로, 풀링의 윈도우 크기와 스트라이드는 같은 값으로 설정하는 것이 보통이다. 예를 들어 3x3이면 스트라이드는 3으로, 윈도우가 4x4면 스트라이드를 4로 설정한다.
  • max pooling 외에도 average pooling 등이 있다.
  • 풀링은 학습해야 할 매개변수가 없다.
  • 채널 수가 변하지 않는다.
  • 입력의 변화에 영향을 적게 받는다(강건하다)

CNN 시각화 하기

1번째 층의 가중치 시각화하기

  • 30개의 필터를 사용했을 경우 예시

  • 학습 전 필터는 무작위로 초기화 되있어 규칙이 없지만 학습을 마친 필터는 규칙성이 있는 이미지가 된다.
  • 규칙성이 있는 필터는 무엇을 보고 있는걸까? 보통 에지(색상이 바뀐 경계선)와 블롭(국소적으로 덩어리진 영역) 등을 보고 있다. 가령 왼쪽 절반이 흰색이고 오른쪽 절반이 검은색인 필터는 다음과 같이 세로 방향의 에지에 반응하는 필터이다.

층 깊이에 따른 추출 정보 변화

    • 1번째 층의 합성곱 계층에서는 에지나 블롭 등의 저수준 정보가 추출되고, 깊어질 수록 추출 되는 정보는 더 추상화 된다.
      AlexNet 예시

대표적인 CNN

LeNet

  • LeNet은 손글씨 숫자를 인식하는 CNN의 원조로서 1998년에 제안되었다.

  • 활성화 함수로 시그모이드 함수를 사용하고 서브 샘플링을 하여 중간 데이터의 크기를 줄이지만 현재는 풀링이 주류이다.

AlexNet

  • 2012년에 발표된 Alexnet은 딥러닝 열풍을 일으키는 데 큰 역할을 했다.

  • 활성화 함수로 ReLU 사용
  • LRN(Local Response norm)이라는 국소적 정규화를 실시하는 계층을 이용
  • 드롭 아웃 사용

정리

  • CNN은 지금까지의 완전연결 계층 네트워크에 합성곱 계층과 풀링 계층을 새로 추가한다.
  • 합성곱 계층과 풀링 계층은 im2col(이미지를 행렬로 전개하는 함수)을 이용하면 간단하고 효율적으로 구현할 수 있다.
  • CNN을 시각화해보면 계층이 깊어질수록 고급 정보가 추출되는 모습을 확인할 수 있다.
  • 대표적인 CNN에는 LeNet과 AlexNet이 있다.
  • 딥러닝의 발전에는 빅데이터와 GPU가 크게 기여했다.
  •