7.3 풀링 계층

풀링은 세로·가로 방향의 공간을 줄이는 연산이다. (패딩 : 주변 채우기 스트라이드: 도장 찍는 간격)

아래 그림을 통해 보자.

위 그림과 같이 2x2 영역을 원소 하나로 집약하여 공간 크기를 줄이는 것이 풀링이다.

위 그림은 최대 풀링 (max pooling)이고, 평균 풀링 (average pooling)도 존재한다. +(최소, 스토캐스틱, 가중치 등)

7.3.1 풀링 계층의 특징

- 학습해야 할 매개변수가 없음

풀링 계층은 합성곱 계층과 달리 학습해야 할 매개변수가 존재하지 않는다. 풀링은 대상 영역에서 최대값이나 평균을 취하는 명확한 처리이므로 특별히 학습할 것이 없다는게 특징이다.

 

- 채널 수가 변하지 않음

풀링 연산은 입력 데이터의 채널 수 그대로 출력 데이터로 내보낸다. 

위 그림처럼 채널마다 독립적으로 계산하기 때문

 

- 입력의 변화의 영향을 적게 받음 (강건함)

입력 데이터가 변해도 풀링의 결과는 잘 변하지 않는다.\

7.4 합성곱 / 풀링 계층 구현

7.4.1 4차원 배열

 앞에서 설명한대로 CNN에서 계층 사이를 흐르는 데이터는 4차원 이다.

 

이제 파이썬으로 구현해보자.

먼저 랜덤으로 데이터를 만들어보자.

x = np.random.rand(10,1,28,28)
x.shape

(10, 1, 28, 28)

여기에서 첫 번째 데이터에 접근하려면 x[0]이라고 하면된다. (두 번째 x[1]...)

x[0].shape # (1, 28, 28)
x[1].shape # (1, 28, 28)

7.4.2 im2col로 데이터 전개하기

합성곱 연산을 곧이곧대로 for을 쓰려면 너무 번거롭기 때문에, im2col을 이용하자.

 

im2col은 입력 데이터를 필터링 (가중치 계산)하기 좋게 전개해주는 함수이다. (펼쳐주는 함수)

위 그림과 같이, 3차원 입력 데이터에 im2col을 적용하면 2차원 행렬로 변하는 것을 볼 수 있다.

 

im2col은 필터링 하기 좋게 입력 데이터를 전개한다.

구체적으로는 아래 그림과 같이, 입력 데이터에서 필터를 적용하는 영역(3차원 블록)을 한 줄로 늘어놓는다.

 

이 전개를 필터를 적용하는 모든 영역에서 수행하는 것이 im2col이다.

 

이를 토대로 합성곱 연산의 필터 처리 상세과정을 그림으로 그려보면 아래와 같다.

7.4.3 합성곱 계층 구현하기

 

+ Recent posts