CNN의 경우 합성곱 계층을 처리를 위해서는 3차원 벡터(또는 텐서)를 사용합니다. 합성곱 계층 역할에서 이해를 위해 2차원 벡터로 설명을 하였습니다. 이 글에서는 3차원 벡터를 이용할 때 계산 방법을 설명하도록 하겠습니다.
또 한 가지는 3차원 벡터를 분류를 위해 아래 그림처럼 1차원 벡터로 변경해줘야 합니다. 이 과정은 CNN의 특징 추출 단계 이후, 그 결과를 완전 연결층(fully connected layers)에 입력으로 넣기 위해 필요합니다. 합성곱 + 풀링 이후 출력 영역의 처리 과정도 이야기해 보도록 하겠습니다.
3차원 데이터 합성곱 연산
3차원 데이터 연산은 입력 데이터와 필터의 합성곱 연산을 채널마다 수행하고 그 결과를 더해서 하나의 출력을 얻게 됩니다. 여기서 주의 사항은 입력 데이터의 채널 수와 필터의 채널 수가 같아야 한다는 것입니다. 아래 그림처럼 채널수가 3개이면 필터도 3개가 있어야 정상적인 계산이 이루어 진다는 이야기죠.
이전 글에서 이야기 했듯이 필터 크기 자체는 원하는 데로 값을 설정할 수 있습니다. 단 이때 모든 채널 필터의 크기가 같아야 합니다. 결국 합성곱의 결과는 채널(=필터) 수만큼 나오게 되고 이 결과를 더한 값이 feature map입니다. 이 과정을 스트라이프 이동한만큼 반복하게 되죠.
이렇게 3차원의 연산은 데이터와 필터를 직육면체 블록이라고 생각하면 이해가 쉽습니다. CNN에 관련된 그림이 주로 블록으로 표현되는 이유가 여기에 있습니다. 3차원 데이터는 (채널, 높이, 너비) 순서로 나타내면 아래 그림과 같이 표현할 수 있습니다.
위 그림에서 feature map을 만들면서 3개 채널을 하나로 합치는 작업이 있기 때문에 차원이 줄어드는 것이라는 오해할 수 있습니다. 하지만 아래 그림 처럼 스트라이프를 FN 만큼 해야 하기 때문에 직육면체 블록(3차원)이 최종 출력(output) 데이터로 나온 다는 것을 알 수 있습니다.
출력 Layer의 분류 과정
합성곱 계층을 지나면 풀링(Pooling) 층을 지나게 되면서 특성을 추출하는 단계를 거칩니다. 여기 까지도 3차원 데이터 입니다. 그런데 출력 부분은 Fully Connected Layer로 구성되어 있습니다. 이때부터는 데이터를 1차원 벡터로 만들어 줘야 합니다. 3차원 데이터를 1차원 데이터로 만들어 주는 과정이 Flattening입니다.
1. 평탄화(Flattening)
풀링 층을 거친 특징 맵은 여전히 3차원 형태를 가지고 있습니다. 이를 1차원으로 변환하여 완전 연결층에 입력으로 제공해야 합니다. 이 과정을 Flattening이라고 합니다. Flattening은 각 특징 맵의 모든 요소를 하나의 벡터로 연결하여 1차원 배열을 생성합니다. 마치 이미지를 한 줄씩 오려낸 뒤 이어 붙여 하나의 벡터 형태의 긴 띠를 만드는 과정으로 비유합니다.
2. 완전 연결층(Fully Connected Layers)
Flattening된 1차원 벡터는 완전 연결층에 입력됩니다. 이 층은 이전에 사용되던 기존의 인공 신경망과 유사한 구조를 가지며, 모든 입력 뉴런과 출력 뉴런이 연결됩니다. 이 층의 역할은 입력 데이터의 복잡한 패턴 및 관계를 학습하게 됩니다.
3. 소프트맥스(Softmax)
완전 연결층의 결과 데이터는 Softmax 연산을 합니다. Softmax 과정은 다를게 없이 각 뉴런으로 모아진 데이터를 Softmax 함수를 써서 분류하는 작업입니다. 소프트맥스를 사용하는 이유는 참고하시기 바랍니다.
'딥러닝' 카테고리의 다른 글
CNN 모델 종류: LeNet, AlexNet, VGG, GoogleNet 비교 (0) | 2024.02.29 |
---|---|
CNN의 발전 방향 및 생각해 볼 문제 (0) | 2024.02.28 |
CNN의 풀링(Pooling) 이유 및 연산 (1) | 2024.02.23 |
합성곱(convolution) 계층의 역할: 필터, 패딩, 스트라이드 (0) | 2024.02.21 |
CNN의 구조적 특징은 무엇인가? (0) | 2024.02.20 |