인공지능을 좋아하는 곧미남

Pooling의 Padding에 대하여! 본문

인공지능 개발자의 기본 소양

Pooling의 Padding에 대하여!

곧미남 2021. 2. 15. 16:38

(Input Size – Pool Size + 2*Padding)/Stride + 1

 

Conv Output data size = (Input Size – Filtersize + 2*Padding)/Stride + 1

 

1. conv layer1을 거친 L1 shape의 사이즈는 상기 공식에 따라서 (P = Padding="SAME")

(28-3 + 2*P)/1 + 1 = 28

즉, P = 1이되어 입력과 출력의 사이즈를 같게 해준다.

 

Pooling Output data size = (Input Size – Kernelsize + 2*Padding)/Stride + 1

 

2. MaxPooling Layer를 거친 L1 shape은 상기 공식에 따라서

(28-2 + 2*P)/2 + 1 = 14

P = 0이 된다.

 

여기서 나는 왜 입력 데이터 사이즈와 출력 데이터 사이즈를 맞추어 주지 않는지 이해가 안갔고, 설령 그렇다 하더라도 단순히 생각해서 PADDING 값이 1이 되지 않을까하여 1을 넣어 계산하니 OUTPUT DATA SIZE는 15라는 값이 계속 나왔다. 정말 헤맸다 처음에!!!

 

여기서 하나의 의문점을 가졌다. Padding="SAME"을 하게 되면 입출력 데이터 사이즈가 같아야 되지 않나?

 

정말 단순히 생각하면 MaxPooling의 목적은 아래와 같으니 결과적으로는 size가 줄어든다!

 

*Pooling의 효과

1. parameter를 줄여, 해당 과도한 학습을 안할 수 있어 Overfitting을 억제

2. parameter를 줄여, 연산량이 비례하여 줄게되고 연산속도는 올라간다.

 

하지만, 이것이 답은 아닌거 같아 찾아보니까!!

 

MaxPooling에서의 Padding="SAME"의 역할은

 

단지 입력 크기와 커널 크기가 완벽하게 맞지 않을 때 중복을 보충하기 위해 필요한 패딩이 추가된다는 것을 의미한다.

위 사진과 같이 입력데이터 크기가 5*5이고 커널의 크기가 2*2일때 1칸씩 위아래로 부족하기 때문에 Padding="SAME"을 해주면 이것을 맞추어 주기 위한 값을 넣어 OUTPUT을 맞추어 준다는 것이다!!

 

코드를 뜯어보니 이렇게 설명되어 있네요.

 

 

Tensorflow 기준으로 padding은 ceil() 올림을 사용하네요.

 

읽어주셔서 감사합니다.

 

참고 링크

datascience.stackexchange.com/questions/67334/whats-the-purpose-of-padding-with-maxpooling

Comments