Deep learning/모델 구현

15. CNN(2) - 합성곱 계층

jwjwvison 2021. 4. 24. 15:43

이 포스팅은 밑바닥부터 시작하는 딥러닝을 공부하고 정리한것 입니다.


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

 

1. 완전연결 계층의 문제점

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

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

 

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

 

2. 합성곱 연산

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

문헌에 따라 필터는 커널이라 칭하기도 한다

 CNN에서는 필터의 매개변수가 '가중치'에 해당한다. 편향도 존재한다.

편향은 항상 하나(1x1)만 존재한다. 그 하나의 값을 필터를 적용한 모든 원소에 더하는 것이다

 

 

3. 패딩

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

 

 

4. 스트라이드

 필터를 적용하는 위치의 간격을 스트라이드(stride)라고 한다. 입력 크기를 (H,W), 필터 크기를(FH,FW), 출력 크기를 (OH,OW), 패딩을 P, 스트라이드를 S라 하면, 출력 크기는 다음 식으로 계산한다.

 

 

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

 그림 7-8은 3차원 데이터의 합성곱 연산 예이다. 그림 7-9는 계산 순서이다. 2차원일 때와 비교하면, 길이 방향(채널 방향)으로 특징 맵이 늘어났다. 채널 쪽으로 특징 맵이 여러 개 있다면 입력 데이터와 필터의 합성곱 연산을 채널마다 수행하고, 그 결과를 더해서 하나의 출력을 얻는다.

 3차원 합성곱 연산에서 주의할 점은 입력 데이터의 채널 수와 필터의 채널 수가 같아야 한다는 것이다. 모두 3개로 일치한다. 한편, 필터 자체의 크기는 원하는 값으로 설정할 수 있다. (단, 모든 채널의 필터가 같은 크기여야 한다).

 

 

6. 블록으로 생각하기

 

합성곱 연산의 출력으로 다수의 채널을 내보내려면 필터(가중치)를 다수 사용하는 것이다.

 

 

7. 배치 처리

 신경망 처리에서는 입력 데이터를 한 덩어리로 묶어 배치로 처리했다. 완전연결 신경망을 구현하면서는 이 방식을 지원하여 처리 효율을 높이고, 미니배치 방식의 학습도 지원하도록 했다. 합성곱 연산도 마찬가지로 배치 처리를 지원하고자 한다. 그래서 각 계층을 흐르는 데이터의 차원을 하나 늘려 4차원 데이터로 저장한다. 구체적으로는 데이터를 (데이터 수, 채널 수, 높이, 너비) 순으로 저장한다.

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