합성곱 신경망(CNN)

CNN 글 목록

한빛미디어의 <밑바닥부터 시작하는 딥러닝 1>을 요약 정리한 글이다.

합성곱 신경망(CNN, Convolutional Neural Network)은 합성곱 계층Conv^{Conv}과 풀링 계층Pooling^{Pooling}이 추가된 신경망이다.

이미지처럼 공간 구조를 가진 데이터를 다룰 때, 입력 데이터의 형상을 유지하면서 특징을 추출하기 위해 사용된다.

CNN 계층 구조

CNN은 보통 Conv-ReLU-(Pooling) 구조로 구성된다.

출력층에서는 Affine-Softmax를 사용할 수 있다.

CNN에서는 각 계층 사이에 3차원 데이터와 같은 입체적인 데이터가 흐른다.

완전연결 계층의 문제점

완전연결 계층의 문제점은 데이터의 형상이 무시된다는 점이다.

예를 들어 이미지는 세로, 가로, 채널로 구성된 3차원 데이터이다. 하지만 완전연결 신경망(FCNN)을 사용하려면 3차원 이미지를 평평한 1차원 데이터로 펼쳐야 한다.

기존에는 (1, 28, 28) 형태의 이미지를 평탄화하여 784개의 데이터를 Affine 계층의 입력으로 넘겼다.

하지만 이미지는 3차원 형상을 가진 데이터이며, 이 형상에는 공간적 정보가 존재한다.

예를 들어 공간적으로 가까운 픽셀은 값이 비슷할 수 있고, RGB의 각 채널은 서로 관련도가 높을 수 있다. 반대로 멀리 떨어진 픽셀은 상대적으로 연관성이 낮을 수 있다.

완전연결 계층은 이런 형상 정보를 무시하고, 모든 입력 데이터를 같은 차원의 뉴런으로 취급한다.

반면 CNN의 합성곱 계층은 형상을 유지한다.

이미지를 3차원 데이터로 입력받고, 다음 계층에도 3차원 데이터로 전달한다.

특징 맵

특징 맵(Feature map)은 합성곱 계층의 입출력 데이터이다.

합성곱 계층에 들어가는 데이터를 입력 특징 맵(input feature map)이라고 하고, 합성곱 계층에서 출력되는 데이터를 출력 특징 맵(output feature map)이라고 한다.

합성곱 연산

합성곱 연산은 합성곱 계층에서 수행된다.

입력 데이터에 필터 또는 커널을 적용하여 특징을 추출한다.

CNN에서 필터의 매개변수는 가중치에 해당한다.

합성곱 필터 연산

필터의 윈도우를 일정 간격으로 이동해가며 입력 데이터에 적용한다.

윈도우 크기는 필터 또는 커널의 크기와 같다.

윈도우 내부의 입력 데이터와 필터에 대응하는 원소끼리 곱한 뒤, 그 결과를 모두 더한다. 이 과정을 단일 곱셈-누산(FMA, fused multiply-add)으로 볼 수 있다.

합성곱 윈도우 계산

이후 편향(bias)을 추가한다.

합성곱 편향 추가

CNN이 필터 하나당 편향을 하나만 두는 이유는, 하나의 필터가 한 종류의 특징을 감지하는 역할을 하기 때문이다.

필터는 입력 전체에 대해 같은 가중치를 적용해야 이동 등변성(translation equivariance)을 유지할 수 있다.

합성곱 연산 수식

합성곱 한 위치의 출력은 다음과 같이 쓸 수 있다.

yi,j=m=0Kh1n=0Kw1c=0C1Wm,n,cxi+m,j+n,c+by_{i,j} = \sum_{m=0}^{K_h-1} \sum_{n=0}^{K_w-1} \sum_{c=0}^{C-1} W_{m,n,c} \cdot x_{i+m,\, j+n,\, c} + b

이때 ii, jj가 변하더라도 항상 같은 편향 bb가 더해진다.

기호의 의미는 다음과 같다.

  • yi,jy_{i,j}: 출력 특징 맵의 (i,j)(i,j) 위치 값
  • xx: 입력 데이터
  • xi+m,j+n,cx_{i+m,j+n,c}: 입력의 (i+m,j+n)(i+m,j+n) 위치, cc번째 채널 값
  • WW: 필터 또는 커널 파라미터
  • Wm,n,cW_{m,n,c}: 필터의 (m,n)(m,n) 위치, cc번째 채널 가중치
  • m,nm,n: 필터의 세로, 가로 인덱스
  • CC: 입력 채널 수
  • Kh,KwK_h,K_w: 필터의 세로, 가로 크기
  • bb: 편향이며, 필터마다 하나 존재한다.

합성곱 연산의 의미

합성곱 연산은 크게 세 단계로 이해할 수 있다.

첫 번째는 윈도우 슬라이딩이다.

출력 좌표 (i,j)(i,j)를 계산할 때, 입력에서 해당 위치 주변 영역인 Kh×KwK_h \times K_w 영역을 잘라온다.

두 번째는 채널 합산이다.

입력 채널 전체 CC에 대해 필터와 곱셈을 수행하고, 그 값을 합산한다.

세 번째는 편향 추가이다.

최종 합산 결과에 스칼라 편향 bb를 더한다.

직관적으로는 입력의 한 영역을 필터와 곱해 모두 더한 뒤, 편향을 더하면 출력의 한 점이 되는 구조이다.

이 과정을 모든 위치 (i,j)(i,j)에 대해 반복하면 최종 특징 맵을 얻는다.

패딩

패딩(padding)은 입력 데이터 주변을 특정 값으로 채우는 것이다.

일반적으로 0으로 채우는 zero padding을 많이 사용한다.

아래는 폭 1의 패딩을 적용하는 예시이다.

패딩 예시

예를 들어 (4, 4) 입력에 폭 1의 패딩을 적용하면 (6, 6) 크기가 된다.

패딩은 출력 크기를 조절할 목적으로 사용된다.

예를 들어 입력 크기가 (4, 4)이고 필터 크기가 (3, 3)이면 출력은 (2, 2)가 된다. 입력보다 공간 크기가 줄어드는 것이다.

하지만 패딩 폭을 1로 설정하면 (4, 4) 입력에 대한 출력 크기를 다시 (4, 4)로 유지할 수 있다.

즉, 패딩은 입력 데이터의 공간적 크기를 유지한 채 다음 계층으로 전달하기 위해 사용된다.

스트라이드

스트라이드(stride)는 필터를 적용하는 위치의 간격이다.

stride = 2로 설정하면 필터 윈도우가 두 칸씩 이동한다.

스트라이드 예시

스트라이드를 키우면 출력 크기가 작아진다.

반대로 패딩을 크게 하면 출력 크기가 커진다.

입력 크기를 (H,W)(H, W), 필터 크기를 (FH,FW)(FH, FW), 출력 크기를 (OH,OW)(OH, OW), 패딩을 PP, 스트라이드를 SS라고 하면 출력 크기는 다음과 같다.

OH=H+2PFHS+1OH = \frac{H + 2P - FH}{S} + 1 OW=W+2PFWS+1OW = \frac{W + 2P - FW}{S} + 1

3차원 합성곱 연산

이미지 데이터에는 채널 차원이 존재한다.

RGB 이미지는 보통 3개의 채널을 가지므로, 합성곱 연산도 채널 방향을 함께 고려해야 한다.

3차원 합성곱 연산에서는 입력 데이터와 필터의 합성곱 연산을 채널마다 수행하고, 그 값을 누산하여 하나의 스칼라 출력을 얻는다.

3차원 합성곱 연산

입력 데이터의 채널 수와 필터의 채널 수는 동일해야 한다.

예를 들어 입력 채널이 3이라면 필터도 채널 3개를 가져야 한다.

합성곱 연산과 블록 표현

합성곱 연산의 입력 특징 맵과 필터는 일종의 데이터 블록으로 볼 수 있다.

합성곱 블록 표현

단일 필터를 사용하는 경우, 입력 데이터와 필터의 채널 수와 관계없이 출력 데이터의 채널 수는 1이다.

즉, 하나의 필터는 하나의 출력 특징 맵을 만든다.

다수의 출력 채널을 구성하려면 여러 개의 필터를 사용해야 한다.

이때 필터 파라미터의 형태는 4차원 텐서가 된다.

(FN,C,FH,FW)(FN, C, FH, FW)

각 기호의 의미는 다음과 같다.

  • FNFN: 필터 개수이며, 출력 채널 수에 해당한다.
  • CC: 입력 채널 수이다.
  • FHFH: 필터 높이이다.
  • FWFW: 필터 너비이다.

FNFN개의 필터를 적용하면 출력 데이터는 (FN,OH,OW)(FN, OH, OW) 형태의 블록이 된다.

이 출력 블록이 다음 계층의 입력으로 전달된다.

여러 필터를 사용한 출력 블록

편향도 필터 개수, 즉 출력 채널 수만큼 존재한다.

따라서 편향은 1차원 벡터 형태이며, shape은 (FN,)(FN,)이다.

편향 벡터 (FN,)(FN,)은 브로드캐스팅되어 각 채널의 모든 위치 (OH,OW)(OH, OW)에 더해진다.

편향 브로드캐스팅

배치 처리

배치 처리를 수행하면 입력 데이터와 출력 데이터도 4차원 텐서로 바뀐다.

CNN 배치 처리

배치 크기를 NN이라고 하면 입력 데이터는 보통 다음과 같은 형태를 가진다.

(N,C,H,W)(N, C, H, W)

합성곱 계층의 출력은 다음과 같은 형태가 된다.

(N,FN,OH,OW)(N, FN, OH, OW)

즉, 하나의 이미지가 아니라 여러 이미지를 한 번에 처리하므로 배치 차원이 가장 앞에 추가된다.

풀링 계층

풀링(pooling) 계층은 세로와 가로 방향의 공간 크기를 줄이는 연산이다.

대표적으로 최대 풀링(max pooling)이 있다.

최대 풀링은 정해진 영역 안에서 가장 큰 값을 하나 선택하는 연산이다.

예를 들어 2×22 \times 2 최대 풀링은 2×22 \times 2 영역 안에서 최댓값 하나를 꺼낸다.

일반적으로 풀링의 윈도우 크기와 스트라이드는 같은 값으로 설정한다.

풀링 계층의 특징

풀링 계층의 특징은 다음과 같다.

  1. 학습할 매개변수가 없다.
  2. 채널 수가 변하지 않는다.
  3. 입력 변화에 비교적 영향을 적게 받는다.

풀링은 채널마다 독립적으로 적용된다.

따라서 입력 데이터의 채널 수가 그대로 유지된다.

또한 작은 위치 변화에 대해 출력이 크게 달라지지 않도록 만들어, 특징의 위치 변화에 대한 민감도를 줄이는 데 도움을 준다.

요약

CNN은 이미지처럼 공간 구조를 가진 데이터를 처리하기 위해 설계된 신경망이다.

완전연결 계층은 입력 형상을 무시하지만, 합성곱 계층은 입력의 3차원 형상을 유지하며 특징을 추출한다.

합성곱 연산은 필터를 입력 위에서 슬라이딩시키며 국소 영역의 특징을 계산한다.

패딩은 출력 크기를 조절하고, 스트라이드는 필터 이동 간격을 조절한다.

3차원 합성곱에서는 채널별 연산 결과를 합산하여 출력 특징 맵을 만들며, 여러 필터를 사용하면 여러 출력 채널을 얻을 수 있다.

풀링 계층은 공간 크기를 줄이고, 학습할 매개변수 없이 특징의 위치 변화에 대한 민감도를 낮춘다.