1. CNN(Covolutional Neural Networks / 합성곱 신경망)
- CNN이란, 이미지나 시계열 데이터를 처리하는 데 뛰어난 성능을 보여주는 딥러닝 구조 중 하나로
* 입력 데이터에 커널을 적용하여 중요한 특징(특히 데이터의 국소적인 패턴을 포착)을 추출하는 합성곱 층(Convolutional Layer)과
* Convolution Filter를 통해 추출된 특성맵을 다운 샘플링하여 계산량을 줄이고, 위치 변화에 강건하게 만드는 Pooling 층 (주로 Max pooling이 활용)
* 마지막 부분에 위치하여 합성곱 및 풀링 과정을 통해 추출된 특징을 바탕을 최종 출력을 생성하는 완전 연결층 (Fully Connnected Layer)로 구성되어 있습니다.
- 이러한 CNN이 도입된 이유는 기존의 MLP(Multi Layer Perceptron)이 데이터의 공간적인 정보(Spatial information)을 무시하며 연산이 되기에, 이미지나 시계열 데이터와 같은 공간적(또는 시간적) 구조가 중요한 데이터에서는 성능이 좋지 못한 경우가 있었기 때문입니다.
- 이로 인해 Convolutional Kernel (합성곱 커널)이라는 개념을 도입해서 데이터의 전체 부분을 한번에 처리하는 것이 아닌 국소적인 패턴으로 나누어서 공간적인 정보를 함께 인식하는 방법으로, 이를 통해 이미지의 디테일한 부분까지 잘 잡아낼 뿐만 아니라 연산 시간 및 자원을 효율적으로 아낄 수있다는 특징이 있습니다.
- 이를 통해 학습된 패턴은 translation invariant, 즉 특정 패턴이 위치에 관계없이 동일하게 인식되는 특성이 됩니다. 예를 들어, 아래 그림처럼 고양이라는 이미지는 그 위치가 바뀌더라도 고양이라는 이미지로 인식되게 하는 것을 말합니다.
- 또한, CNN을 활용 시 Spatial Hierarchy of Patterns를 학습할 수 있는데요. 이는 cnn의 첫번째 층은 그림의 전반적인 패턴을, 그 다음 층은 보다 세부적인 패턴을 배워나가는 방식을 의미합니다.
- 또한, Convolutional Filter는 입력 이미지의 새로운 Representation을 만들어 내는 데요. 예를 들어 아래와 같이 똑같은 이미지에 다른 Convolution filter(여기서는 고정된 filter)를 적용시 Blur한 이미지, 또는 특징이 도드라진 Emboss된 이미지, 또는 왜곽선이 강조된 Outline된 이미지를 얻을 수 있습니다.
- Pooling의 경우 CNN에서 추출된 다양한 특징맵에서 중요한 정보를 추출 및 요약하는 역할을 합니다.
아래 그림 처럼 2x2의 Kernelsize에 2의 stride를 주었을 경우 왼쪽 그림처럼 정보가 요약되며 특징적인 정보들만이 추출되는 것을 보실 수 있습니다.
- 또한 활성화 맵의 경우 아래 그림처럼 특징맵의 0인 부분을 없애기에 학습 간 비선형성을 주게 되어 보다 복잡한 데이터의 패턴을 파악할 수 있게 해줍니다.
- 이때 학습간 혼동하지 말아야 할 개념으로 Parameters(Learnable)와 Hyperparameters가 있습니다.
* Parameters란 학습간 학습 로직에 의해서 업데이트 되는 것들을 의미하며, ANN에서의 선형 Weights 와 CNN에서의 Filter 내부의 가중치 등이 대표적입니다.
* Hyper Parameters란, 모델의 아키텍처, 합성곱 필터의 크기, 스트라이드, 풀링 방법, 풀링 스트라이드, 모델의 깊이, 옵티마이저, 배치 사이즈 등등 개발자가 사전에 설정해줘야할 것들을 의미합니다.
2. 대표적인 CNN 방법론들
- CNN을 세상에 이름을 알린 대표적인 모델인 LeNet은, Sigmoid 활성화 함수와 Average Pooling을 도입했다는 특징이 있고
- CNN 모델의 성능이 기존의 ML 방법론들보다 더 우수함을 증명할 수 있었던 AlexNet(이 모델 이후 컴퓨터 비전에서는 CNN이 한동안 주류로 자리를 잡았으며, 여전히 많이 활용되고 있습니다.)은, ReLU라는 비선형 활성화함수와 Max pooling을 도입했고, Drop out을 통한 Regularization, 그리고 Augmentation을 통한 학습 모델의 성능 향상 및 강건성을 제안한 방법론입니다.
- 다음은 Inception(GoogLeNet)입니다. 아래와 같이 다양한 크기의 합성곱 필터와 max pooling을 활용해 학습 데이터의 당야한 국소적인 패턴을 추출해낼 수 있으며, 이를 깊게 쌓았으며(총 22층), Fully Connected Layer 없이 Convolution Layer 만으로 분류까지 해낸 방법이고, 위에서 알아본 AlexNet보다 1/12 밖에 안되는 학습 파라미터 수를 가진 모델입니다.
- 다음은 VGG Net입니다. 이는 3x3 이라는 작은 필터와 stride도 1 , padding도 1, 그리고 2x2 maxpooling이라는 비교적 간단한 개념만을 도입하고, 비교적 얕은 16 ~ 19개의 층을 활용해 효과적으로 이미지를 분류해낼 수 있는 능력을 보여주었습니다.
- 다음은 ResNet입니다. 여전히 Feature Extractor로서 많이 활용되고 있는 CNN 기반 유명한 Backbone Network이며,
아래와 같이 Residual connection (또는 Skip Connection 이라고도 합니다)을 활용해서 Gradient Exploding을 방지하고 보다 층을 깊게 쌓아서 다양한 패턴을 분석해낼 수 있게 한 모델입니다. Skip Connection은 비전 뿐만아니라 여러 다양한 분야에서도 널리 활용되고 있는 유용하면서도 중요한 방법론 중 하나입니다. 이렇게 층을 깊게 쌓을 경우 일종의 Ensemble 효과를 활용한다고 할 수 있습니다.
- 다음으로는 Dense Net 입니다. Dense Net은 각 층이 모든 이전 층의 출력을 concat하여 사용하는 모델로, 이전 층들에서 학습된 특징들을 모두 고려하여 학습한다는 장점으로 인해 효율적인 계산과 Gradient Vanishing 문제를 해결한 방법론입니다. 아래 그림처럼, ResNet은 바로 직전 층의 출력을 더하는(Element-wise addition) 방식을 택하지만, DenseNet에서는 이전 모든 층의 출력을 channel 단위로 concat하는 (Channel wise Concatenation) 방식을 활용하고 있다는 차이가 있습니다.
- 마지막으로 Efficient Net입니다. Efficient Net은
* Compound Scailing이라는 방법(convolution kernel의 width와 depth, 그리고 resolution을 균형있게 조정)과
* Inverted Residual Block(Residual Connection의 변형 방법으로, 1x1 conv로 채널을 확장시킨 후, depthwise seperable convolution을 적용해 각 채널별로 독립적인 convolution 연산을 적용하고, 그리고 나서 1x1 conv로 채널을 축소시키고, 마지막으로 입력과 이와같은 과정을 거친 출력을연결하는 Residual Connection을 적용하는 방법을 활용)
* SE(Squeeze-and-Excitiation) Block (Global Average Pooling을 통해 특징 맵의 공간적 정보를 압축 후 2개의 FC레이어를 통해 각 채널의 중요도를 결정해 채널별 가중치를 할당하여 입력 맵을 재구성) 을 적용하고 있습니다.
'딥러닝 with Python' 카테고리의 다른 글
[딥러닝 with Python] 어텐션 (Attention Mechanism) (0) | 2024.11.04 |
---|---|
[딥러닝 with Python] 순환 신경망(Recurrent Neural Network) (1) | 2024.11.03 |
[딥러닝 with Python] 인공신경망(Artificial Neural Network / ANN), 데이터 증강(Data Augmentation) (1) | 2024.11.01 |
[개념 정리] Linear probing이란? (0) | 2024.10.31 |
[개념정리] ELBO란? Evidence Lower Bound란? (0) | 2024.10.30 |
댓글