DeepLearning

합성곱 신경망(CNN)

견오수 2022. 3. 12. 00:17
728x90

합성곱 신경망(convolutional neural network, CNN)은 이미지 인식과 음성 인식 등 다양한 곳에서 사용되며, 특히 이미지 인식 분야에서 딥러닝을 활용한 기법은 거의 다 CNN을 기초로 한다.

 

1. 전체 구조

 

CNN에서는  합성곱 계층(convolutional layer)과 풀링 계층(pooling layer)이 새롭게 등장을 한다. 

 

그림 1 완전연결 계층(Affine 계층)으로 이뤄진 네트워크의 예

 

기존의 신경망은 그림 1과 같이 완전 연결 신경망은 Affime 계층 뒤에 활성화 함수(Relu or Sigmoid)를 갖는 구조이다.

 

그림 2 CNN으로 이뤄진 네트워크 예 : 합성곱 계층과 풀링 계층이 새로추가(회색)

 

CNN 계층은 Conv-ReLU-(Pooling) 흐름으로 연결된다(풀링 계층은 생략하기도 한다). 

 

2. 합성곱 계층

 

  • CNN에서는 패딩(padding), 스트라이드(stride) 등 CNN 고유의 용어가 등장한다. 
  • 각 계층 사이에는 3차원 데이터같이 입체적인 데이터가 흐른다는 점에서 완전 연결(fully-connected) 신경망과 다르다.

2.1 완전 연결 계층의 문제점

 

  • 데이터의 형상이 무시된다는 것이다.
  • 예를 들어, 이미지는 가로, 세로, 채널(색상)로 구성된 3차원 데이터이다. 그러나 완전 연결 계층에 입력할 때는 3차원 데이터를 평평한 1차원 데이터로 평탄화해줘야 한다.
  • MNIST 데이터의 경우 1 채널, 가로 : 28, 세로 : 28를 1줄로 세운 784개의 데이터를 입력에 넣었다.
  • 이미지는 3차원 형상이며, 공간적 정보가 담겨 있다. 예를 들어 공간적으로 가까운 픽셀은 값이 비슷하거나 RGB의 각 채널은 서로 밀접하게 연관되어 있거나, 거리가 먼 픽셀끼리는 별 연관이 없는 등 3차원 속에서 의미를 갖는 본질적인 패턴이 숨어 있다.
  • 완전 연결 계층은 형상을 무시하고도 모든 입력 데이터를 동등한 뉴런(같은 차원 뉴런)으로 취급하여 형상에 담긴 정보를 살릴 수 없다.
  • 합성곱 계층은 이 형상을 유지 가능하다.
  • CNN에서는 합성곱 계층의 입출력 데이터를 특징 맵 feature map이라고도 하며, 합성곱 계층의 입력 데이터를 입력 특징 맵(input feature map), 출력 데이터를 출력 특징 맵(output feature map)이라고 한다.

 

2.2 합성곱 연산

 

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

 

그림3 합성곱 연산의 예

 

그림 3과 같이 합성곱 연산은 입력 데이터에 필터를 적용한다. 이 예에서는 입력 데이터는 세로 x 가로 방향의 형상을 가졌고, 필터 역시 세로 x 가로 방향의 차원을 갖는다. 데이터와 필터의 형상을 (높이 height, 너비 width)로 표기하며, 이 예에서는 입력은 (4,4), 필터는 (3,3), 출력은 (2,2)가 된다. 필터커널이라 칭하기도 한다.

 

그림 4 합성곱 연산의 계산 순서

  1.  합성곱 연산은 필터의 윈도우(windows)를 일정 간격으로 이동해가며 입력 데이터에 적용한다.
  2.  여기서 윈도우는 그림 4에서 회색 부분 3 x 3 부분을 가리킨다.
  3.  입력과 필터에서 대응하는 원소끼리 곱한 후 그 총합을 구한다.(이 계산을 단일 곱셈-누산 fused multiply-add, FAM이라 한다.)
  4. 계산 결과 출력을 해당 장소에 저장한다. 이 과정을 모든 장소에서 수행하면 합성곱 출력이 완성된다.

 

그림 5 합성곱 연산의 편향

 

 

완전 연결 신경망에는 가중치 매개변수와 편향이 존재하는데 CNN에서는 필터의 매개변수가 가중치이다. 그리고 CNN에도 편향이 존재한다.  편향까지 포함하면 그림 5와 같다. 편향은 필터를 적용한 후의 데이터에 더해진다. 편향은 1 x 1만 존재한다.

 

2.3 패딩

 

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

 

그림 6은 합성곱 연산의 패딩처리

 

그림 6과 같이 (4,4) 크기의 입력 데이터에 폭이 1인 패딩을 적용한 모습이다. 폭 1짜리 패딩이라 하면 입력 데이터 사방 1픽셀을 특정 값으로 채우는 것이다.

 

  1. 처음에 크기가 (4,4)인 입력 데이터에 패딩이 추가되어 (6,6)이 된다.
  2. 입력에 (3,3) 크기의 필터를 걸면 (4,4) 크기의 출력 데이터가 생성이 된다.
  3. 여기서는 예를 1로 들었지만 원하는 정수로 설정이 가능하다.

패딩은 주로 출력 크기를 조정할 목적으로 사용한다. 예를 들어 (4,4) 입력 데이터에 (3,3) 필터를 적용하면 (2,2)가 되어 입력보다 2만큼 줄어들었다. 이는 합성곱 연산을 몇 번이나 되풀이하는 심층 신경망에서는 어느 시점에서는 출력 크기가 1이 된다. 즉, 더 이상 합성곱 연산을 적용할 수 없다. 이러한 사태를 막기 위해 패딩을 사용한다.  입력 데이터의 공간적 크기를 고정한 채로 다음 계층에 전달할 수 있다. 

 

2.4 스트라이드

 

필터를 적용하는 위치의 간격을 스트라이드(stride)라고 한다. 지금까지 본 예는 모두 스트라이드가 1이었지만, 예를 들어 스트라이드를 2로 하면 필터를 적용하는 윈도우가 두 칸씩 이동한다. 

 

그림 7 스트라이드가 2인 예시

 

(7, 7)인 입력 데이터에 스트라이드를 2로 하니 출력은 (3,3)이 된다. 즉, 스트라이드를 크게 설정하면 출력 크기가 작아진다. 한편 패딩을 크게하면 출력크기가 커졌다.

 

지금까지 설명한 특징 맵(Feature Map), 필터(Filter = Kernel), 패딩(Padding), 스트라이드(Stride) 사이의 관계를 이용하여, 출력 크기를 수식으로 표현하면 다음과 같다.

 

딥러닝 프레임워크 중에는 값이 딱 나눠떨어지지 않을 때는 가장 가까운 정수로 반올림한다.

 

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

 

지금까지는 2차원 형상을 다루는 합성곱 연산을 봤지만 이미지만 해도 세로, 가로에 더해 채널까지 고려한 3차원 데이터이다. 이번에는 3차원 데이터를 다루는 합성곱 연산을 본다.

 

그림 8 3차원 데이터 합성곱 연산 예

 

3차원의 합성곱 연산에서 주의할 점은 입력 데이터의 채널 수와 필터의 채널 수가 같아야한다. 한편 필터 자체크기는 원하는 값으로 설정할 수 있다.(단, 모든 채널의 필터가 같은 크기여야한다.) 예를 들어 예제에서는 (3,3)이지만, 원한다면 (5,5),(2,2),(1,1) 등으로 설정이 가능하다. 

 

2.6 블록으로 생각하기

3차원의 합성곱 연산은 데이터와 필터를 직육면체 블록으로 생각하면 쉽다. 

 

그림 9 3차원 합성곱 블록으로 보기

 

3차원 데이터를 다차원 배열로 나타낼 때는 채널(channel), 높이(height), 너비(width) 순서로 쓴다. 예를 들어 채널 수 C, 높이 H, 너비 W인 데이터 형상은 (C, H, W)로 쓴다. 필터도 같은 순서로 쓴다. 예를 들어 채널 수 C, 필터 높이 FH, 필터 너비 FW의 경우 (C, FH, FW)로 쓴다.

 

위 예시에서 출력 데이터는 한 장의 특징 맵(Feature Map)이다. 그렇다면 만약 합성곱 연산의 출력으로 다수의 채널을 내보내고자 한다면 어떻게 해야 할까? 그럴 때는 아래 그림과 같이 다수의 필터("가중치"를 의미)를 사용하면 된다.

 

그림 10 다수의 필터를 사용한 합성곱 연산 예시

 

합성곱 연산에서는 필터의 수도 고려해야 한다. 그런 이유로 필터의 가중치 데이터는 4차원 데이터이며 (출력 채널 수, 입력 채널 수, 높이, 너비) 순으로 쓴다

 

 

 

여기에 편향까지 고려하고 싶다면 다음과 같이 합성곱 연산을 수행할 수 있겠다.

그림 11 편향이 추가된 다수의 필터를 사용한 합성곱 연산 예시

 

 

2.7 배치 처리

 

합성곱 연산에서도 배치 처리를 할 수 있다. 각 계층을 흐르는 데이터의 차원을 하나 늘려 4차원 데이터로 저장한다. 구체적으로는 (데이터 수, 채널 수, 높이,너비) 순으로 저장한다. 

 

그림 12 데이터가 N개일 때,  합성곱 연산의 배치 처리 예시

 

여기에서 주의할 점으로는 신경망에 4차원 데이터가 하나 흐를 때마다 데이터 N개에 대한 합성곱 연산이 이뤄진다. 즉 N회 분의 처리를 한번에 수행하는 것이다.

 

3 풀링 계층

 

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

 

그림 13 풀링의 처리 순서

그림 13과 같이 2 x 2 영역을 원소 하나로 집약하여 공간의 크기를 줄인다. max pooling을 스트라이드 2로 처리하는 순서이다. max pooling은 최댓값을 구하는 연산이며 2 X 2 크기 영역에서 가장 큰 원소 하나를 꺼낸다. 또한 스트라이드위의 예에서 2로 설정했으므로 2x2윈도우가 2칸 간격으로 이동한다. 참고로 풀링의 윈도우 크기와 스트라이드는 같은 값으로 설정하는 것이 보통이다. 

 

풀링은 max pooling 외에도 average pooling등이 있다. 영역에서 평균을 계산한다. 이미지 인식 분야에서는 주로 max pooling을 사용한다.

 

3.1 풀링 계층의 특징

 

  • 학습해야 할 매개변수가 없다.
  • 채널 수가 변하지 않는다.
  • 입력의 변화에 영향을 적게 받는다.(강건하다)

 

참조

 

 

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

이미지 인식 분야에서 딥러닝을 활용한 기법은 거의 다 합성곱 신경망(CNN)을 기초로 한다. 그렇다면 합성곱 신경망. 즉, CNN이란 무엇일까? 이번 포스팅에서는 CNN에 대해 정리해보도록 하겠다. CNN

data-scientist-brian-kim.tistory.com

 

밑바닥부터 시작하는 딥러닝 - 7장 CNN

Chapter 7. 합성곱 신경망(CNN) 7.1 전체 구조 CNN에서는 새로운 합성곱 계층과 풀링 계층이 추가된다. CNN 계층은 conc-relu-pooling 흐름으로 연결된다. 여기서 중요한 것은 출력에 가까운 층에서는 affine-re

velog.io

 

728x90