Flatten Layer
Flatten Layer는 딥러닝 모델에서 다차원의 데이터를 1차원 배열(벡터)로 평탄화하는 역할을 하는 계층이다.
이 계층은 주로 합성곱 신경망(CNN)의 합성곱(Convolutional) 또는 풀링(Pooling) 계층과 분류를 위한 완전 연결 계층(Fully-Connected Layer) 사이에 위치하여 둘을 연결하는 다리 역할을 한다.
역할
CNN의 앞부분에 위치한 합성곱 계층과 풀링 계층은 이미지의 공간적(spatial) 특징을 보존하며 학습하기 위해 2D 형태의 특징 맵(Feature Map)을 출력한다.
하지만 모델의 마지막 단에서 각 클래스에 대한 확률을 계산하는 완전 연결 계층은 1차원 형태의 벡터를 입력으로 받는다.
이처럼 서로 다른 형태의 데이터를 주고받을 수 없기 때문에, Flatten Layer는 앞선 계층에서 나온 다차원 특징 맵을 길게 한 줄로 펼쳐서 완전 연결 계층이 처리할 수 있는 1차원 벡터 형태로 변환한다.
작동 방식과 예시
Flatten Layer는 별도의 학습을 통해 가중치를更新하지 않으며, 단순히 입력 데이터의 형태(shape)만 변경한다.
간단한 예시를 통해 작동 방식을 살펴보자.
어떤 풀링 계층을 통과한 결과로 아래와 같이 (3, 3, 2)
형태의 특징 맵이 나왔다고 가정한다.
이는 3x3 크기를 가진 2개의 채널(필터)을 의미한다.
-
입력 데이터 (3 x 3 x 2)
채널 1 \(\begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{pmatrix}\) 채널 2 \(\begin{pmatrix} 10 & 11 & 12 \\ 13 & 14 & 15 \\ 16 & 17 & 18 \end{pmatrix}\)
이 데이터가 Flatten Layer를 통과하면, 각 채널의 원소들을 순서대로 읽어 하나의 긴 벡터로 펼친다.
-
출력 데이터 (1 x 18)
먼저 채널 1의 원소들을 순서대로 나열한다:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
그 뒤에 채널 2의 원소들을 이어서 붙인다:
[..., 10, 11, 12, 13, 14, 15, 16, 17, 18]
최종적으로 다음과 같은 18개(
3 x 3 x 2 = 18
)의 원소를 가진 1차원 벡터가 생성된다.
\([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]\)
결론
이처럼 Flatten Layer는 복잡한 연산 없이 데이터의 배열을 바꾸는 간단하지만 필수적인 기능을 수행하며, CNN이 이미지 특징 추출에서 최종 분류 단계로 나아갈 수 있도록 데이터를 준비시킨다.