수학/딥러닝 이론

[딥러닝] 합성곱 신경망(CNN) - 합성곱 연산에서의 패딩과 스트라이드

AI 꿈나무 2020. 10. 4. 21:22
반응형

사이토고키의 <밑바닥부터 시작하는 딥러닝>을 공부하고 정리해보았습니다.

 


 

 

[딥러닝] 합성곱 신경망(CNN) - 합성곱 연산의 작동 방법 - 필터

사이토고키의 <밑바닥부터 시작하는 딥러닝>을 공부하고 정리해보았습니다. 을 공부하고 정리해보았습니다. 을 공부하고 정리해보았습니다.  합성곱 신경망 - Convolutional neural network, CNN  CNN은 �

deep-learning-study.tistory.com

 이전의 포스팅에서 합성곱 연산의 작동 방법과 필터의 개념에 대해 공부했습니다.

 이번에는 합성곱 연산에서 자주 이용하는 기법인 패딩과 스트라이드에 대해 공부하겠습니다.

 

1. 패딩 - Padding

 합성곱 연산을 수행하기 전에 입력 데이터 주변을 특정 값(예컨대 0)으로 채우기도 합니다.

 이를 패딩이라 하며, 합성곱 연산에서 자주 이용하는 기법입니다.

 예를 들어 아래 그림은 (4, 4) 크기의 입력 데이터에 폭이 1인 패딩을 적용한 모습입니다.

 폭 1짜리 패딩이라 하면 입력 데이터 사방 1픽셀을 특정 값으로 채우는 것입니다.

 

합성곱 연산의 패딩 처리 : 입력 데이터 주위에 0을 채웁니다.(패딩은 점선으로 표시했으며 그 안의 값 '0'은 생략

 

 그림과 같이 처음에 크기가 (4, 4)인 입력 데이터에 패딩이 추가되어 (6, 6)이 됩니다.

 이 입력에 (3, 3) 크기의 필터를 걸면 (4, 4) 크기의 출력 데이터가 생성됩니다.

 이 예에서는 패딩을 1로 설정했지만, 2나 3등 원하는 정수로 설정할 수 있습니다.

 만약 그림에서 패딩을 2로 설정하면 입력 데이터의 크기는 (8, 8)이 되고 3으로 설정하면 (10, 10)이 됩니다.

 

 패딩은 주로 출력 크기를 조정할 목적으로 사용합니다.
 예를 들어 (4, 4) 입력 데이터에 (3, 3) 필터를 적용하면 출력은 (2, 2)가 되어, 입력보다 2만큼 줄어듭니다.
 이는 합성곱 연산을 몇 번이나 되풀이하는 심층 신경망에서는 문제가 될 수 있습니다.
 합성곱 연산을 거칠 때마다 크기가 작아지면 어느 시점에서는 출력 크기가 1이 되어버립니다.
 더 이상은 합성곱 연산을 적용할 수 없다는 의미입니다.
 이러한 사태를 막기 위해 패딩을 사용합니다.
 앞의 예에서는 패딩의 폭을 1로 설정하니 (4, 4) 입력에 대한 출력이 같은 크기인 (4, 4)로 유지되었습니다.
 한 마디로 입력 데이터의 공간적 크기를 고정한 채로 다음 계층에 전달할 수 있습니다.

2. 스트라이드 - Stride

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

 지금까지 본 예는 모두 스트라이드가 1이었지만, 예를 들어 스트라이드를 2로 하면 필터를 적용하는 윈도우가 두 칸씩 이동합니다.

 

스트라이드가 2인 합성곱 연산

 

 위 그림에서는 크기가 (7, 7)인 입력 데이터에 스트라이드를 2로 설정한 필터를 적용합니다.

 이처럼 스트라이드는 필터를 적용하는 간격을 지정합니다.

 

 스트라이드를 2로 하니 출력은 (3, 3)이 됩니다.

 이처럼 스트라이드를 키우면 출력 크기는 작아집니다.

 한편 패딩을 크게 하면 출력 크기가 커집니다.

 이러한 관계를 수식화된 식을 살펴보겠습니다.

 

 

 이 식에 단순히 값을 대입하기만 하면 출력 크기를 구할 수 있습니다.

 단, 식의 값이 정수로 나눠떨어지는 값이어야 한다는 점에 주의해야 합니다.

 출력 크기가 정수가 아니면 오류를 내는 등의 대응을 해줘야 합니다.

 딥러닝 프레임워크 중에는 값이 딱 나눠떨어지지 않을 떄는 가장 가까운 정수로 반올림하는 등, 특별히 에러를 내지 않고 진행하도록 구현하는 경우도 있습니다.

 

반응형