딥러닝에서 CNN (Convolutional Neural Network) 은 주로 이미지를 분석하는 데 가장 일반적으로 사용하는 ANN (Artificial Neural Network) 이다. 물론 요즘은 트랜스포머 기반의 네트워크를 많이 사용하지만 CNN 또한 여전히 많이 사용되고 트랜스포머와 CNN의 조합의 네트워크 또한 심심치 않게 볼 수 있다.
이번 포스팅에서는 CNN의 핵심 layer인 convolutional layer의 개념과 의미에 대해 설명하고자 한다.
* CNN (Convolutional Neural Network)
CNN은 입력 데이터에 대해 계층적으로 학습하며 입력 데이터의 특징을 추출하기 위해 Convolution, Pooling, Non-linear activation function 등의 과정을 거친다. 이러한 CNN은 Computer vision, graphics 등 영상 데이터가 사용되는 거의 모든 분야에서 사용된다.
Convolutional Layer

Convolutional Layer : 필터 크기 만큼의 데이터를 하나의 값으로 계산하고 출력 채널 개수 만큼 서로 다른 필터를 사용.
Convolutional Layer는 CNN에서 입력 데이터의 특징(feature)을 추출하는 레이어이다. 이미지 같은 2차원 데이터에서는 필터(커널)를 사용하여 입력 데이터와 필터 간의 합성곱 연산을 수행하는데, 예를 들어, 3x3 크기의 필터를 사용하면 입력 데이터의 3x3 부분과 필터 간의 합성곱이 이루어진다. 학습 전에 필터는 무작위로 초기화되며, loss 계산을 통해 최적의 필터 파라미터를 찾아가는 과정이 딥러닝에서 말하는 학습이라고 보면 된다.
사실 합성곱 연산이라는게 글로만 봐서는 이해가 잘 안된다. 나도 처음에 어느정도 보고 내가 다 이해한 줄 알았는데, 시간이 지날수록 계속 내가 잘 못 알고 있던 것들을 발견했다. 논문, 블로그, 유튜브 등에 굉장히 좋은 자료들이 많지만 결국 본인이 과정 하나 하나를 따라가면 계산해봐야 Convolutional layer를 온전히 이해할 수 있다. 물론 코드를 보면서 입력 데이터, 필터 사이즈, 연산 과정들을 확인해 보는 것도 좋은 방법이다.
그래서 여기서는 합성곱 연산의 디테일을 소개하기 보다는 CNN에서 convolutional layer가 어떤 의미를 가지는지에 대한 이야기를 나눠보려 한다.
공간적 상관관계를 추출하는 Convolutional Layer (ANN vs CNN)


Convolutional layer 연산 예시
앞서 얘기했듯이 CNN은 이미지나 비디오 도메인에서 많이 사용한다. 그렇다면 가장 기초적인 ANN인 Fully Connected Layer(FC layer, MLP) 와 CNN 이 어떤 차이가 있기에 CNN이 이미지나 비디오에서 잘 동작하는 걸까?
FC layer의 경우 모든 데이터가 일자로 쭉 펴진 상태에서 연산을 수행한다. 즉 1차원 형태의 데이터의 상관관계를 효과적으로 추출할 수 있는 구조인 것이다.
반면 영상 데이터는 2D 형태의 공간적 특징을 가진다. 강아지 이미지를 떠올려 보면 '머리 위에 귀가 있고 머리와 몸이 연결되어 있고... 등등' 이는 모두 공간적 상관관계를 뜻한다. 때문에 영상을 효과적으로 임베딩하기 위해서는 공간적 상관관계를 잘 추출하는 네트워크를 사용해야 한다.
CNN에서의 Convolutional layer는 2D 형태의 특정한 크기를 가지는 필터로 이미지 전체를 슬라이딩 하면서 합성곱 연산을 수행하는데, 이 과정 자체가 이미지 데이터의 공간적 상관관계를 추출하는 것이다. 특정 영역의 텐서들을 선형 계산을 통해 하나의 값으로 만들고 있으니까.
3 x 3 크기의 2D conv의 경우 한 번에 9개(3x3) 텐서의 상관 관계만을 추출하지만 conv layer가 겹겹이 쌓이면 점점 더 큰 영역의 상관관계를 추출하게 되는 것이다. 즉 conv layer는 많이 쌓일수록 더 넓은 영역의 상관관계를 추출하는 것이고 동시에 데이터를 더 많이 압축하게 되는 것이다.
* 엄밀히 따지면 CNN에서 가장 흔히 쓰이는 conv layer의 경우 2D Conv 라고 표현하지만 실제로는 [2D(공간 영역) x 입력 채널 크기 x 출력 채널 크기] 의 사이즈를 가지는 layer이다.
* 위의 이미지를 보면 Layer1 녹색의 3x3 영역은 Layer2의 하나의 픽셀로, Layer2 노란색 3x3 영역은 Layer3의 하나의 픽셀로 연산이 수행된다. 즉 Layer1에서 5x5 크기의 텐서가 conv layer를 2개 지나고 나면 1x1 크기로 함축되는 것이고 이 과정에서 공간적 상관관계가 추출되는 것이다. 물론 예시 이미지에서 채널 축은 생략되어 있으니 머리 속에서 채널 축까지 확장해보길 바란다.
공간적 크기는 작아지도록, 채널의 크기는 커지도록 네트워크를 구성하는 이유

결론부터 말하면 영상 데이터의 공간적 특징을 추출하기 때문에(함축적으로) 공간적 크기는 작아지고, 다양한 특징을 여러 채널로 표현하기 위해 채널 크기는 커지는 방향으로 CNN을 구성하는 것이다.
예를 들어 3 x 200 x 200 (Channel x Height x Width) 사이즈의 이미지와 몇 개의 3x3 사이즈 convolutional layer를 생각해보자. 물론 이때 일반적으로 채널 값이 커지는 방향으로 네트워크를 구성하기 때문에 실제 필터 사이즈는 입력 채널 크기와 출력 채널 크기가 반영된 사이즈 일 것이다. 합성곱 연산을 진행하며 3 x 200 x 200 사이즈 였던 이미지는 32 x 198 x 198 -> 64 x 100 x 100 -> ... -> 512 x 20 x 20 과 같이 변해갈 것이다. 이는 이미지의 가로, 세로 크기 였던 공간적 크기는 점점 작아지고, RGB 3개였던 채널 값은 점점 커지는 것을 의미하는데 이런 방식으로 네트워크를 구성하는 이유는 뭘까?
딥 뉴럴 네트워크를 학습해서 얻고 싶은 것은 결국 입력 데이터와 풀고자 하는 문제와의 상관관계이다. 풀어야 할 문제가 강아지, 고양이 이미지를 분류하는 것이라 생각해보자. 학습을 통해 CNN은 강아지와 고양이의 특징을 추출하게 될 것이고 이미지에서 추출한 특징을 토대로 강아지, 고양이, 입력 데이터와의 상관관계를 보고 이미지를 분류하게 되는 것이다.
문제 해결에 key가 되는 상관관계를 얻기 위해서는 이미지의 다양한 특징들을 분리해서 추출해야 한다. 이 때 분리해서 추출한 특징들을 각각에 채널에 담기 위해 채널값을 키우는 것이다. 즉 이미지에서 특정 task를 푸는 데에 중요한 특징이 있으면 그 특징을 반영하는 특정 채널값이 강하게 activate되는 것이라는 뜻이다.
CNN 앞단에서의 각 채널들은 가로선, 세로선, 특정 패턴과 같은 저수준의 특징을 가지게 되고 CNN 뒷단(출력과 가까운)에서의 각 채널들은 강아지의 귀, 다리, 꼬리처럼 이미지에서 의미있는 고수준의 특징을 가지게 된다. 3 x 200 x 200 크기의 이미지가 CNN을 통과하고 512 x 20 x 20 크기의 feature map이 되었다면 512개의 채널은 이미지의 여러 특징들을 512개로 분리해서 가지고 있다는 것이다. (어떤 채널은 강아지의 눈, 어떤 채널은 꼬리,...) 물론 512개의 채널이 모두 의미있는 채널은 아니지만 네트워크를 구성할 때는 이미지에서 특징을 충분히 추출하기 위해 미리 지정해 놓은 채널 크기로 feature 를 추출하는 것이다.
결국 강아지 vs 고양이 분류 문제에서 이미지 한 장이 입력되면 최종 출력은 0(강아지) 또는 1(고양이) 중 하나 여야 한다. 이 의사결정을 위해 CNN은 이미지 속에서 여러 특징들을 추출하고 상관관계를 파악하도록 학습되는 것이다. 이러한 의미만 잘 파악해두어도 computer vision 관련 논문을 보거나 딥러닝 관련 여러 프로젝트를 파악하는 데에 굉장히 큰 도움이 된다.
Transformer 와 CNN의 차이 ?
아주 간단하게만 설명하면 앞서 설명한 CNN은 conv layer를 겹겹이 쌓아놓은 형태이기 때문에 로컬 특성을 잘 추출하지만 global한 특징은 잘 추출하지 못한다는 단점이 있다. 결국 하나의 conv filter 안에 포함된 영역에서만 상관관계가 추출되고 이미지에서 공간적으로 많이 떨어져 있는 픽셀은 CNN 뒷단에서 겨우 상관관계를 추출하게 될테니까.
Transformer는 이러한 단점을 극복할 수 있는 네트워크 구조라고 보면된다. 이미지를 특정 사이즈로 다 잘라서 하나의 영역과 나머지 모든 영역과의 상관관계를 추출하는(self-attention) 방식이기 때문이다. 디테일한 내용은 생략...
나름대로 열심히 정리해보려 했는데 어느 분야이건 기초가 가장 중요하면서도 설명하기는 또 쉽지 않은 것 같다. Convolutional Layer의 경우 공간축, 채널축을 포함한 3차원으로 이해를 해야하기 때문에 설명하기도 이해하기도 더욱 쉽지가 않다.
CNN 관련 정보들을 찾다보면 합성곱 연산을 설명하는 자료는 많은데 정작 CNN에서 convolutional layer가 어떤 의미를 가지는지에 대한 내용은 잘 없어서 정리를 해봤는데, 누군가에게 도움이 되는 내용이었으면 좋겠다
'Deep Learning > CNN' 카테고리의 다른 글
| GAN 이란? (GAN 개념, GAN 설명) (0) | 2023.08.03 |
|---|---|
| [DL] 합성곱 신경망(Convolution Neural Network) - 이해하기 (0) | 2023.07.28 |
| CNN(Convolutional Neural Network, 컨볼루션 신경망) (0) | 2023.07.28 |
| 딥러닝) CNN 구조 , 합성곱 계층 , padding , stride , 배치 처리 (0) | 2023.07.28 |