2021. 10. 19. 18:24ㆍDeep Learning
본 게시글은 한빛미디어 『밑바닥부터 시작하는 딥러닝, 사이토 고키, 2020』의 내용을 참조하였음을 밝힙니다.
이번 장에서는 합성곱 신경망(CNN)이란 무엇인지와 구체적인 메커니즘을 설명하고,
이를 파이썬 코드로 구현하여 손글씨 데이터셋을 통해 성능 평가까지 진행하도록 하겠다.
합성곱 신경망(CNN)이란?
합성곱 신경망(CNN)은 Convolution Neural Network의 준말로, 이미지 인식이나 음성 인식에서 흔히 사용되는
신경망이다.
위 그림에서 살펴볼 수 있듯이, 입력 데이터는 Convolution 계층(with ReLU) Pooling 계층을 여러 번 거쳐
Classification 단계에서 평탄화(flatten)되어 완전연결계층(fully-connected)을 거쳐 최종적으로 소프트맥스(softmax)
함수를 통해 분류된다. CNN에서 Convolution 계층과 Pooling 계층은 무엇이고 어떤 역할을 하는지 알아보자.
지난 글들에서 만들어진 모델의 성능을 평가하기 위해 손글씨 데이터셋을 사용했는데
가령 11장(아래 참조)을 예를 들어 설명하자면 28 * 28 크기의 입력 데이터를 완전 연결계층에 통과시키기 위해
데이터를 일렬의 784 크기의 데이터로 평탄화시켰다.
위와 같이 다차원의 데이터를 1차원으로 평탄화시키면 더 간단한 훈련 모델을 훈련시킬 수 있겠으나
평탄화되기 이전 데이터에 담겨있던 고유한 특성이 같이 파괴된다는 단점을 가지고 있다.
합성곱 신경망에서는 이러한 단점을 극복하기 위해 2차원 데이터(이하 특징맵)의 특성을 그대로 보존하면서
패턴을 학습하는 신경망을 만들어낼 수 있다.
합성곱 연산
합성곱 연산(Convolution computation)은 입력 데이터의 패턴을 읽어내는 연산을 하는 합성곱 계층에서 수행한다.
위 그림과 같이 합성곱 연산에서는 입력 특징 맵의 가장 좌측 위부분에서 시작해서 한 칸씩 이동(윈도우)하면서
필터와 원소 곱을 수행한 값의 합을 특정 편향(Bias)와 더해서 출력 특징 맵의 대응되는 칸에 기록한다.
편향은 필터마나 하나의 값만 존재한다. 하나의 편향이 출력 특징맵의 모든 칸에 반영된다.
빨간 사각형이 완전 연결 계층에서 가중치에 해당하며, CNN에서 이를 필터 혹은 커널이라고 칭한다.
필터의 크기가 1x1이 아닌 이상 출력되는 특징 맵의 크기는 입력 맵의 크기보다 작을 수밖에 없다.
위 그림에서는 필터가 움직이는 간격이 한칸이다. 이 간격을 스트라이드(stride) 이라고 한다.
출처 : https://d2l.ai/chapter_convolutional-neural-networks/padding-and-strides.html
또한 입력 데이터 주변을 0 값으로 둘러싸는 것을 우리는 패딩(padding)이라고 한다.
출처 : https://d2l.ai/chapter_convolutional-neural-networks/padding-and-strides.html
위처럼 스트라이드가 2로 설정되었다면 필터는 합성곱 연산을 2칸씩 건너뛰면서 수행한다.
또한 입력 데이터는 여러 채널(channel)을 가질 수 있다. 위 그림에는 RGB 채널을 가진 입력 특징맵을 보여준다.
필터 또한 입력 특징맵의 채널 수에 상응하는 채널 수를 가진다.
'Deep Learning' 카테고리의 다른 글
[밑바닥딥러닝] 17. 합성곱 신경망(CNN) (3) (0) | 2021.10.19 |
---|---|
[밑바닥딥러닝] 16. 합성곱 신경망(CNN) (2) (0) | 2021.10.19 |
[밑바닥딥러닝] 14. 과대적합(Overfitting) 대응 - 규제, 드롭아웃 (0) | 2021.10.16 |
[밑바닥딥러닝] 13. 모델 가중치의 초기화 (0) | 2021.10.16 |
[밑바닥딥러닝] 12. 매개변수 갱신법 (0) | 2021.10.16 |