그래도해야지어떡해

패딩(padding)/스트라이드(stride)/풀링(Pooling)이란? 본문

ML

패딩(padding)/스트라이드(stride)/풀링(Pooling)이란?

jerrry 2022. 3. 8. 10:39

padding(패딩)

: convolution(합성곱)을 수행할 때, 입력 배열의 주위를 가상의 원소(0)로 채우는 것

 

- 패딩의 역할? 

: 순전히 커널이 입력 배열 위를 거쳐가는 횟수를 늘려주는 것 밖에 없다. -> 실제값은 0으로 채워져 있기 때문에 계산에 영향을 미치지는 않음

 

- same padding

: 입력과 feature map의 크기를 동일하게 만들기 위해 입력 주위에 0으로 패딩하는 것

 

- valid padding

: 패딩없이 순순한 입력 배열에서만 합성곱을 하여 feature map을 만드는 것

 

* convolution을 할 때 패딩을 왜 자주 사용할까?

: 패딩이 없다면 모서리 부분에 있는 입력 원소는 적게 지나가기 때문에 모서리에 있는 중요한 정보가 feature map으로 잘 전달되지 않을 수 있음

-> 적절한 패딩은 이미지 주변에 있는 정보를 잃어버리지 않도록 도와준다!

 

keras.layers.Conv2D(10, kernel_size=(3,3),activation='relu', padding='same')

 keras의 Conv2d 클래스에서 padding 매개변수로 패딩을 지정할 수 있음(default는 valid)

- convolution layer는 activation 함수로 relu함수를 많이 사용한다.


Stride란?

:  convolution 연산을 할 때 한번에 이동하는 크기 = 칸의 수

keras.layers.Conv2D(10, kernel_size=(3,3),activation='relu', padding='same', stride=1)

- stride는 보통 1로 사용함


Pooling이란?

: convolution layer에서 만든 feature map의 가로세로 크기를 줄이는 역할을 한다. -> 하지만 feature map의 개수는 줄지 않음

 

-풀링도 convolution연산처럼 입력값위를 지나가면서 수행을 한다.

- 하지만 풀링에는 가중치가 없기 때문에 연산을 하는것이 아니며 단지 수행 영역에서 가장 큰 값을 고르거나(Max pooling) 수행 영역의 평균을 구하는(Average poolinf) 역할을 한다.

- 풀링은 convolution layer와 뚜렷하게 구분이 되기 때문에 pooling layer라고 불린다.

- 풀링은 convolution 연산과는 다르게 겹치지 않고 이동해야 한다!

 

keras.layers.MaxPooling2D(2)

keras에서는 MaxPooling2D 클래스로 풀링을 수행한다.

 

- 보통 대부분 풀링의 크기는 2로 사용한다 -> 가로세로의 길이가 절반으로 줄어듬

- 많은 경우 AveragingPooling보다 MaxPooling을 더 많이 사용한다.

- AveragingPooling은 feature map에 있는 중요한 정보를 희석시킬 수 있기 때문

 

 

- convolution 연산에서 stride를 크게하여 feature map을 줄이는 것보다 pooling layer에서 크기를 줄이는 것이 경험적으로 더 나은 성능을 내기 때문

 

convolution network는 보통 이런식으로 feature map을 생성하고 pooling에서 크기를 줄이는 구조가 쌍을 이룬다.

 

 

 

 

 

 

Comments