CNN이란?
CNN은 주로 이미지 처리에 사용되는 딥러닝 모델로, 최근에는 자연어 처리 분야에서도 사용되며 다양한 분야에서 활용되고 있습니다.
CNN의 구조
1. Input Layer
2. Convolution Layer
3. Pooling Layer
=> 특징을 추출하는 부분
4. Flatten Layer
=> 다차원 배열(이미지 등)을 1차원 벡터로 변환하는 부분
5. Fully Connected Layer
6. Output Layer
=> 분류를 위한 부분
보통 CNN은 Input Layer 의 위에 Convolution Layer, Pooling Layer가 여러 겹 쌓여있는 특징 추출 부분과
Fully Connected Layer의 입력으로 집어넣기 위해 1차원 벡터로 변환해주는 Flatten Layer,
Fully Connected Layer와 Output Layer로 구성된 분류 부분으로 나뉘게 됩니다.
Convolution Layer(합성곱층)
Convolution Layer는 Convolution Operation(합성곱 연산)과 Activation Function(활성화 함수)으로 구성됩니다.
Convolution Layer에서는 Input과 커널을 합성곱 연산한 결과로 특성 맵을 출력하고, 특성 맵을 활성화 함수에 통과시킨 결과로 Activation Map을 최종적으로 출력하게 됩니다.
Convolution Operation(합성곱 연산)
Convolution Operation이란 이미지를 커널로 처음부터 끝까지 겹치며, 겹쳐지는 부분의 각 이미지와 커널의 값을 곱해서 모두 더한 값을 출력하는 연산을 말합니다.
합성곱 연산의 결과로 출력되는 것이 특성 맵(Feature Map)입니다.
3차원 텐서의 합성곱 연산
⭐ 입력의 채널 수와 커널의 채널수는 항상 같아야 합니다.
1. 하나의 커널을 사용할 경우 3차원 텐서의 합성곱 연산
입력의 각 채널과 커널의 각 채널 간 합성곱 연산을 수행하고, 그 결과를 모두 더해 하나의 채널을 갖는 특성 맵을 만들게 됩니다.
출력 텐서의 채널 수 : 1
가중치 매개변수의 개수 : (커널의 너비) * (커널의 높이) * (커널의 채널 수)
ex) 3개의 채널을 가지는 입력과 3개의 채널을 가지는 커널을 합성곱 연산을 수행하면 각 채널끼리 합성곱을 해 나온 3개의 결과를 모두 더해서 1개의 채널을 갖는 특성 맵이 나오게 됩니다.
2. 다수의 커널을 사용할 경우 3차원 텐서의 합성곱 연산
각 커널이 입력에 대해 독립적으로 합성곱 연산을 수행해 커널의 개수만큼의 특성맵이 생성되고, 그 특성맵들이 합쳐져 커널 개수만큼의 채널을 갖는 하나의 특성 맵을 만들게 됩니다.
출력 텐서의 채널 수 : 커널 개수
가중치 매개변수의 개수 : (커널의 너비) * (커널의 높이) * (커널의 채널 수) * (커널의 개수)
다음은 합성곱 연산을 이해하는 데 중요한 용어들입니다.
채널(Channel)
이미지는 3차원 텐서로 (높이, 너비, 채널) 로 구성됩니다.
이때 채널은 색 성분으로, 흑백 이미지의 채널은 1, 컬러 이미지의 채널은 3이 됩니다.
ex) 28 * 28 픽셀의 흑백 이미지 : (28, 28, 1)
28 * 28 픽셀의 컬러 이미지 : (28, 28, 3)
스트라이드(Stride)
스트라이드는 커널의 이동 범위입니다.
쉽게 말하자면 커널이 얼만큼씩 이동하는지를 의미합니다.
패딩(Padding)
패딩은 이미지의 주변을 어떤 값으로 연장해서 채우는 것을 말합니다.
합성곱 연산 이후에도 특성 맵의 크기가 입력의 크기가 동일하게 유지되게 하고싶다면 패딩을 사용하면 됩니다.
Pooling Layer(풀링층)
풀링층은 특징 추출 부분에서 필수적인 부분은 아닙니다.
하지만 특성 맵을 다운샘플링해 특성맵의 크기를 줄여주고, 특징을 강조하기 위해 사용됩니다.
풀링층에서는 풀링 연산을 통해 특성맵을 다운샘플링 합니다.
풀링 연산의 종류로는 최대 풀링(Max Pooling), 평균 풀링(Average Pooling) 등이 있고, 주로 최대 풀링(Max Pooling)이 사용됩니다.