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 합성곱 계층 구현하기
'밑바닥 딥러닝' 카테고리의 다른 글
Ch 07-1 합성곱 신경망 (CNN) (0) | 2023.06.04 |
---|---|
Ch 6-2 학습 관련 기술들 (0) | 2023.05.31 |
Ch 6-1 학습 관련 기술들 (0) | 2023.05.29 |
Ch 5-2 오차 역전파 (Error BackPropagation) (0) | 2023.05.27 |
Ch 5-1 오차 역전파 ( Error Backpropagation ) (0) | 2023.05.27 |