David의 개발 이야기!

합성곱 신경망 ( CNN ) 이란 무엇일까? - 1편 본문

밑바닥부터 시작하는 딥러닝

합성곱 신경망 ( CNN ) 이란 무엇일까? - 1편

david.kim2028 2022. 5. 12. 01:36
반응형

Convolutional Neural Network, CNN 에 대해서 알아보자.

 

1. Affine 계층이란? 

인접하는 계층의 모든 뉴런과 결합되어 있는 신경망을 완전연결(fully-connected, 전결합) 이라고 하며, 완전히 연결된 게층을 Affine 계층이라고 한다.

Affine 계층을 사용하면, 층이 5개인 신명망은 위와 같이 구현할 수 있다. 완전연결 신경망은 Affine 계층 뒤에 활성화 함수를 갖는 ReLU 계층(혹은 Sigmoid 계층) 이이어진다. 위 그림에서는, Affine-ReLU 조합이 4개 쌓였고, 마지막 5번째 층은 Affine 층에 이어 소프트맥스 계층에서 최종 결과(확률) 을 출력한다.

 

2. CNN으로 이뤄진 네트워크의 예 

CNN 에서는 새로운 '합성곱 계층(Conv)' 과 '풀링 계층(Pooling)'이 추가된다. CNN 의 계층은 Conv-ReLU-(Pooling) 흐름으로 연결된다. ( 이때 Pooling 은 생략될 수 있다. ) Affine-ReLU 연결이 Conv-ReLU-(Pooling)으로 바뀌었다고 생각하면 easy 하다.

 

CNN 에서 주목할 또 다른 점은 출력에 가까운 층에서는 지금까지의 Affine-ReLU 구성을 사용할 수 있다는 것이다. 

또 마지막 출력 계층에서는 Affine-Softmax 조합을 그대로 사용한다.

 

3. 그렇다면 완전연결 계층 ( Affine 계층 ) 의 문제점은 무엇일까? 

완전연결 계층의 가장 큰 문제점은 바로 '데이터의 형상이 무시' 된다는 점이다. 입력 데이터가 이미지인 경우를 예로 들면, 이미지는 통상 세로, 가로, 채널(색상)로 구성된 3차원 데이터이다. 그러나, 완전연결 계층에 입력할 때는 3차원 데이터를 평평한 1차원 데이터로 평탄화해줘야한다. MNIST 데이터셋을 사용한 사례로 설명하자면, (1,28,28) 인 이미지 (1채널, 세로 28픽셀, 가로 28픽셀)를 1줄로 세운 784개의 데이터를 첫 Affine 계층에 입력하게 된다. 

 

이미지는 3차원 형상이며, 공간적 정보가 담겨 있다(공간적으로 가까운 픽셀은 값이 비슷하거나, RGB의 각 채널은 서로 밀접하게 관련되어 있거나 거리가 먼 픽셀끼리는 값이 비슷하거나 등). 완전 연결 계층은 형상을 무시하고 모든 입력 데이터를 동등한 뉴런(같은 차원의 뉴런)으로 취급하여 형상에 담긴 정보를 살릴 수 없다. 

 

한편, 합성곱 계층은 형상을 유지한다. 이미지도 3차원 데이터로 입력받으며, 마찬가지로, 다음 계층에도 3차원 데이터로 전달한다. 그래서 CNN 에서는 이미지처럼 형상을 가진 데이터를 제대로 이해할 수 있는 것이다. 

 

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

 

4. 합성곱 연산에 대해 알아보자 

 

위 그림과 같이 합성곱 연산은 입력 데이터에 필터를 적용한다. 위 그림처럼 입력데이터는 세로,가로방향의 형상을 가졌고, 필터 역시, 세로 가로 방향의 차원을 갖는다. 데이터와 필터의 형상을 ( height, weight ) 로 표기하며, 위 예에서는 입력은 (6,6) 필터는 (3,3) 출력은 (4,4) 가 된다. 

 

합성곱 연산 방법은 아래와 같다.

 

5. 패딩(Padding) 에 대해 알아보자 

합성곱 연산을 수행하기 전에 입력 데이터 주변을 특정 값으로 채우는 것을 패딩 이라고 한다. 

 

패딩을 사용하는 이유는, 입력데이터의 가장자리의 데이터값이 버려지는 문제를 해결하기 위함이다. 

또, 합성곱 연산을 몇번이나 되풀이하는 심층 신경망에서, 출력 크기를 조정할 목적으로도 사용한다. 

( 합성곱 연산을 거칠때마다 크기가 작아지면 어느 시점에서는 출력 크기가 1이 될 수 있기 때문에...!)

 

6. 스트라이드 (Stride) 에 대해 알아보자

 

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

위의 예시들은 모두 스타라이드가 1이지만, 아래의 예시는 스트라이드가 2이다. 

 

 

스트라이드의 크기를 키우면 출력크기는 작아진다. 반면에 패딩을 크게 하면 출력크기가 커진다.

패딩, 스트라이드, 출력 크기를 계산하는 공식은 아래와 같다. 

 

 

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

 

여기서 알아야할 부분은, 입력데이터의 채널수와 필터의 채널수는 같아야한다. 

 

8. 블록으로 생각을 해보자!

 

3차원의 합성곱 연산은 데이터와 필터를 직육면체 블록으로 생각해보자. 3차원 데이터를 다차원 배열로 나타낼때는 ( C, H, W ) 로 쓴다. 필터도 같은 순서로 쓰며, ( C, FH, FW ) 로 쓴다. 

 

위 사진에서 출력 데이터는 한장의 특징 맵이다. 한장의 특징 맵이라는 뜻은, 채널이 1개인 특징 맵이라는 것이다. 그렇다면, 합성곱 연산의 출력으로 다수의 채널을 내보내려면 어떻게 해야할까? 

 

 

위 그림과 같이 필터를 FN 개 적용하면 출력 맵도 FN 개가 생성된다. 그리고 그 FN개의 맵을 모으면 형상이 (FN, OH , OW)인 블록이 완성된다. 이 완성된 블록을 다음 계층으로 넘기겠다는 것이 CNN 의 처리 흐름이다. 

 

이처럼, 합성곱 연산에서는 필터의 수도 고려해야하며, 그렇기 때문에 필터의 가중치 데이터는 4차원 데이터이다. 

 

최종적으로 편향을 더하면, 아래와 같이 된다. 

 

반응형
Comments