[Dive into Deep Learning / CNN] Fully connected layer / pooling layer
작성자: 16기 유우혁
본 포스팅은 다음 자료들을 참고하여 작성되었습니다.
- https://www.youtube.com/watch?v=bNb2fEVKeEo&list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&index=5
- https://d2l.ai/chapter_convolutional-neural-networks/index.html
- deep learning with pytorch
다차원으로 이루어진 layer를 1차원으로 펼치는 layer다.
이미지는 다차원 공간에 담겨서 픽셀값들이 전달되게 된다. CNN을 통해서 결과적으로 이미지들을 분류하는 작업을 진행하는데, 이때 이러한 다차원 값들을 1차원 벡터로 펼쳐줘야 한다. 그래서 fully connected layer를 통해 다차원으로 존재하는 값들을 1차원 벡터로 전부 연결시켜서 값들을 보존시킨다. 이렇게 벡터로 펼쳐진 값들은 활성화 함수나 softmax를 적용하여 원하는 결과를 도출한다.
위의 사진에서 볼 수 있듯이 4 * 4행렬로 존재하는 값들을 16 * 1벡터로 펼쳐서 행렬에 존재하는 모든 값들을 벡터에 연결시켜준다. 그 후 여러 함수를 거쳐 개와 사람을 분류하는 것을 볼 수 있다.
파이토치에서도 이러한 기능을 구현해 놓았다. 위의 sequential과정을 보면 Max-pooling을 통해 전달된 값을 Flatten으로 펼친 후 Linear를 통해 결과 값을 출력하는 것을 볼 수 있다.
이미지의 크기가 매우 클 경우 작은 kernel을 가지고 CNN을 진행시키면 과도하게 많은 parameter가 발생하는 등의 문제가 발생할 수 있다. 그래서 pooling layer를 통해 convolution을 진행하면서 발생한 위치에 따른 민감성을 완화시키고downsampling을 시켜 큰 이미지의 크기를 줄여나갈 수 있도록 하였다.
pooling layer는 다른 kernel들 처럼 input으로 들어온 이미지를 stride에 맞게 움직이며 값을 뽑아낸다. 하지만 kernel과 다른 점은 파라미터를 가지고 값들을 뽑는 것이 아니라 고정된 함수를 이용하여 값들을 뽑는다는 것이다. 그 중 pooling에서는 두가지 방식이 가장 유명하다
위의 그림에서 4 * 4 사이즈의 input이 2 * 2 pooling layer를 거쳐 2 * 2 사이즈로 작아진 것을 볼 수 있다. 여기서는 max-pooling을 통해 output을 도출한 것을 볼 수 있다. 이처럼 2 * 2 pooling을 통해 input의 크기를 절반으로 줄 일 수 있다.
위의 그림을 통해 kernel들을 거쳐 얻어진 값들이 max-pooling을 통해 작아지고 fully connected layer를 통해 1차원 벡터로 변환된 것을 확인할 수 있다.
[Dive into Deep Learning/3주차] Optimization Algorithm (0) | 2022.11.16 |
---|---|
[Dive into Deep Learning / CNN] AlexNet (0) | 2022.11.16 |
[Dive into Deep Learning / 3주차] Python Class (2) | 2022.09.30 |
[Dive into Deep Learning / 2주차] Backward Function Problem (0) | 2022.09.25 |
[Dive into Deep Learning / 2주차] PyTorch Automatic Differentiation (1) | 2022.09.25 |
댓글 영역