서론

합성곱 신경망(Convolution Neural Network, CNN)은 이미지 인식, 음성 인식 등에 사용된다.
특히 이미지 인식 분야에서 딥러닝을 활용한 기법은 대부분 CNN을 기초로 한다.


전체적인 구조

CNN도 지금까지 공부한 신경망 같이 계층을 조합하여 만들 수 있다.

다만, 합성곱 계층(Convolution-layer)과 풀링 계층(Pooling-layer)이 새롭게 등장한다.

지금까지 공부했던 신경망은 인접하는 계층의 모든 뉴런과 결합되어 있었다.
이것을 완전 연결(full-connected)이라 하며, 완전 연결 계층을 Affine 계층이라는 이름으로 구현했었다.

예를 들어 Affine 계층(완전 연결 계층)에서는 신경망을 아래와 같이 구현할 수 있었다,

affineconvol

Affine 계층에서는 (Affine 계층) & (활성화 함수 계층) 이 쌓이고 마지막에 (Affine 계층) & (softmax 계층)에서 최종 결과를 출력했다.

CNN의 구조는 CNN은 (합성곱 계층) & (활성화 함수 계층) & (풀링 계층) 이 쌓인다.

Affine 계층에서의 (Affine 계층) & (활성화 함수 계층)이 위의 조합으로 바뀌었다고 보면된다.

주목할 점은 [출력]에 가까운 층에서는 (Affine 계층) & (활성화 함수 계층) 조합을 사용할 수 있다는 점이다.
또한 [마지막 출력층]에서는 (Affine 계층) & (softmax 계층)을 그대로 사용한다.

합성곱 계층(Convolution-layer)

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

완전 연결 계층의 문제점 -> 데이터의 shape가 무시된다.

입력데이터가 이미지인 경우, 보통 (세로, 가로, 채널(색상))으로 구성된 3차원 데이터인데,
Affine 계층에 입력 데이터를 입력할 때에는 1차원 데이터로 입력해야 했다.

데이터의 shape에는 공간적 정보가 담겨있다.
공간적으로 가까운 픽셀은 값이 비슷하다던지 등등

Affine 계층은 shape를 무시되고, 모든 입력 데이터를 같은 차원의 뉴런으로 취급하여 형상에 담긴 공간적 정보를 살릴 수 없다.

그러나 합성곱 계층은 shape를 유지한다.
이미지도 3차원 데이터로 입력받고, 다음 계층에도 3차원 데이터로 전달한다.

CNN에서 합성곱 계층의 입출력 데이터를 특징 맵(feature map)이라고도 한다.
CNN의 입출력 데이터를 각각 입력 특징 맵, 출력 특징 맵이라 한다.


합성곱 연산

CNN

위와 같이 합성곱 연산은 입력 데이터에 필터를 적용한다.
데이터와 필터의 shape를 (height, width)로 표기한다.

합성곱 연산은 필터의 윈도우(window)를 일정 간격(스트라이드) 이동해가면서 입력데이터에 적용한다.

단일 곱셈 누산 : 입력과 필터에서 대응하는 원소끼리 곱하고, 모든 결과를 더해서 출력의 해당 장소에 저장한다.

CNN에서는 필터의 매개변수가 가중치(W)에 해당하고, 마찬가지로 편향도 존재한다.
편향은 언제나 1 X 1 shape의 모습이다.
이 하나의 값을 필터를 적용한 데이터의 모든 원소에 더한다.


패딩 (padding)

합성곱 연산을 수행하기 전에, 입력 데이터 주변을 특정한 값으로 채우기도 한다.
이것을 패딩이라고 하며, 출력의 크기를 조절하기 위해서 자주 사용된다.

합성곱 연산을 거칠 때마다 크기가 줄어들기 때문에 어느 시점부터는 출력이 1 X 1이 되어 합성곱 연산을 할 수 없다.
이를 막기 위한 수단이 패딩이다.

패딩을 크게하면 출력이 커진다.

스트라이드 (stride)

필터를 적용하는 위치의 간격이 스트라이드다. 스트라이드를 1로 하면 윈도우가 1칸씩 이동하고,
스트라이드를 2로 하면 윈도우는 2칸씩 이동한다.

스트라이드를 크게하면 출력이 작아진다.

출력의 크기를 수식으로 표현하기

패딩과 스트라이드에 따라서 출력의 크기가 변했다. 패딩이 커지면 출력도 커지고, 스트라이드가 커지면 출력은 작아졌다.

입력의 크기를 (H, W) 라 하고, 필터의 크기를 (FH, FW)
출력의 크기를 (OH, OW) 라 하고, 패딩을 P, 스트라이드를 S라 하자.

출력의 크기는,

OH = ((H + 2P - FH )/ S) + 1
OW = ((W + 2P - FW )/ S) + 1

위와 같이 표현할 수 있다.


풀링 계층 (Pooling)

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

예를 들어 전체 공간 중의 부분영역( 2 X 2영역 )을 원소 1개로 집약하여 공간을 줄인다.

maxpooling

위의 그림은 2 X 2 최대 풀링(Max Pooling)을 스트라이드 2 로 처리하는 과정이다.

2 X 2 최대 풀링은 2 X 2영역에서 최댓값을 꺼낸다.
스트라이드가 2로 설정됐으므로 윈도우가 2칸씩 이동한다.

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

평균 풀링(Average Pooling) : 대상 영역의 평균값을 계산한다.
보통 이미지 인식분야에서는 최대 풀링을 사용한다.

풀링 계층의 특징

  1. 학습해야 할 매개변수가 없다.
    풀링은 대상 영역에서 최댓값 또는 평균을 구하는 명확한 연산이기 때문이다.

  2. 채널 수가 변하지 않는다.
    풀링은 입력 데이터의 채널 수 그대로 출력 데이터로 내보낸다. 채널마다 독립적으로 계산하기 때문이다.

  3. 입력의 변화에 영향을 적게 받는다.
    최댓값 또는 평균을 구하는 연산이기 때문에,
    입력 데이터가 조금 변하더라도 결과는 크게 변하지 않는다.


합성곱, 풀링계층 구현

아래 링크의 [06###] 의 코드를 참조!

https://github.com/junsoofeb/deep-learning-study

⤧  Next post 2019/10/11 강화학습 study ⤧  Previous post 5장, 학습 관련 기술들