코딩 다이어리
CNN 본문
CNN(Convolutional Neural Networks)이란?

- Convolution 연산을 이용해 전처리 작업이 들어가는 Neural Network 모델
- 사람의 시신경 구조를 모방한 기술로 이미지를 인식하기 위해 패턴을 찾기 위한 모델
- 이미지를 1차원 데이터로 변환시키지 않고 2차원 형태를 유지하기 때문에 이미지의 지역적, 공간적 정보를 유지한 채 학습을 함
- 학습을 진행하면서 이미지 전체가 아닌 부분을 살펴보며 이미지의 한 픽셀과 주변 픽셀들의 연관성을 살림
- Feature Map을 생성하는 필터까지 학습이 가능해 컴퓨터 비전(Computer Vision) 분야에서 성능이 우수
- 자율 주행, 얼굴 인식과 같은 객체 인식이나 컴퓨터 비전이 필요한 분야에 많이 사용됨
CNN의 주요 개념
1. 합성곱(Convolution)

- 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자
- 즉 두 함수를 서로 곱해서 합한다는 의미를 가짐
- CNN에서는 필터(Filter)로 이미지를 이동하며 합성곱 연산을 하면서 부분적으로 특징값들을 뽑아내는데 사용
- 입력층에 가까울 수록 가장자리(Edge), 곡선(Curve)과 같은 저수준(Low Level) 특징을 학습하며 출력층에 가까울 수록 질감(Texture), 물체 일부분(Object Parts)과 같은 고수준(High Level) 특징을 인식
2. 이미지와 필터의 합성곱 연산 과정

- 위의 그림과 같이 5x5 크기의 2차원 이미지와 3x3 크기의 2차원 필터를 이용해 합성곱을 진행

- 필터가 이미지 전체를 이동하며 합성곱 연산을 진행
- 즉, 이미지의 왼쪽 상단에서부터 연산을 진행하며, 위의 그림처럼 빨간 테두리 부분의 Matrix와 필터를 합성곱 연산
- 합성곱 연산은 모든 원소들끼리의 곱을 더하는 연산으로 위의 그림에서 나오는 예시를 실제 계산해보면 아래와 같음
$$ \left(1\times1\right)+\left(1\times0\right)+\left(1\times1\right)+\left(0\times0\right)+\left(1\times1\right)+\left(1\times0\right)+\left(0\times1\right)+\left(0\times0\right)+\left(1\times1\right)=4 $$

- 위의 그림처럼 이미지의 전체를 필터가 이동하면서 합성곱 연산을 진행하며 결과값이 나오게 됨
- 이때 입력값이 5x5 크기의 데이터이지만 합성곱 연산을 통해 나온 결과값은 3x3 크기의 데이터로 작아짐
- 입력값과 필터의 크기를 이용해 결과값의 크기를 계산할 수 있음
- 입력값의 크기가 $ d_{1}\times d_{2} $이고 필터의 크기가 $ k_{1}\times k_{2} $일 때, 결과값의 크기는 $ \left(d_{1}- k_{1}+1\right)\times\left(d_{2}- k_{2}+1\right) $
3. Padding

- 입력 데이터가 합성곱 연산을 거치면 데이터의 크기가 줄어들게 되며, 이런 현상은 이미지의 가장자리에 위치한 픽셀들의 정보가 점차 사라지게 됨
- 이러한 현상을 막기위해 이미지의 가장자리에 특정 값을 갖는 픽셀을 추가하는데 이를 Padding이라고 하며 0의 값으로 픽셀을 추가할 경우 Zero Padding이라고 함

4. Stride


- Stride는 필터가 이미지를 이동할 때 움직이는 거리이며 출력값에 영향을 끼침
- 위의 그림은 동일한 입력 이미지와 필터에 대해 Stride 값에 따른 출력값의 변화를 나타냄
- Stride Length가 1인 경우 5x5 크기의 출력값을 가지고 Stride Length가 2인 경우 3x3 크기의 출력값을 가짐
5. Pooling


- 왼쪽 그림과 같이 합성곱 과정을 한 개의 이미지에서 10개의 이미지 결과값이 도출되어 연산량이 과도하게 증가
- 각 결과값(Feature Map)의 크기를 축소해주기 위해 Pooling을 사용
- Pooling에는 Max Pooling, Average Pooling, Min Pooling 등이 있지만 CNN에서는 주로 Max Pooling을 사용
- 실제 뉴런이 가장 큰 신호에만 반응하는 것과 유사하고 노이즈가 감소하고 속도가 빨라져 영상의 분별력이 향상됨
- Max Pooling은 해당 선택 영역에서 가장 큰 값을 대표값으로 가져와 결과값을 도출함
- 선택 영역 내부에서는 픽셀들이 이동 및 회전 등에 의해 위치가 변경되어도 출력값이 동일하므로, 이미지를 구성하는 요소들의 이동 및 회전 등에 의해 CNN의 출력값이 영향을 받는 문제를 완화
- 이미지의 크기가 크게 줄기 때문에 신경망의 Model Parameter가 크게 감소하며, 학습 시간이 절약되고 과대적합(Overfitting) 문제를 어느정도 완화함
Fully Conneted Layer

- Convolution Layer와 Max Pool Layer를 거치면 입력 데이터에서 Feature를 추출할 수 있고, 이 과정을 반복하여 다시 Feature에서 새로운 Feature를 추출할 수 있음
- 예시로 고양이 이미지에서 직선이나 곡선의 조합으로 고양이의 눈, 귀라는 특징을 추출할 수 있음
- Flatten Layer에서 앞의 Layer들에서 나온 결과값의 데이터 타입을 Fully Connected Layer의 입력 형태로 변환
- Fully Conneted Layer에서 추출된 이미지의 특징을 이용해 무엇을 의미하는 데이터인지 분류
CNN의 Hyper-parameters
- weight와 같이 모델 내부에 있으며 데이터에서 값이 추정될 수 있는 설정변수인 parameter가 아닌 모델 외부에 있으며 데이터로부터 값이 추정될 수 없는 설정변수를 하이퍼 파라미터(Hyper-parameters)라고 함
- 하이퍼 파라미터에 따라 모델의 성능에 영향이 끼치므로 적절한 하이퍼 파라미터를 찾아 튜닝해야 함
- 사용자가 튜닝 가능한 하이퍼 파라미터(즉, 모델을 설계할 때 고려해야하는 사항)
- Convolutional layers: 필터의 갯수, 필터의 크기, stride값, zero-padding의 유무
- Pooling layers: Pooling방식 선택(MaxPool or AvgPool), Pool의 크기, Pool stride 값(overlapping)
- Fully-connected layers: 넓이(width)
- 활성함수(Activation function): ReLU(가장 주로 사용되는 함수), SoftMax(multi class classification),Sigmoid(binary classification)
- 손실함수(Loss function): Cross-entropy for classification, L1 or L2 for regression
- 최적화(Optimization) 알고리즘과 이것에 대한 hyperparameter(보통 learning rate): SGD(Stochastic gradient descent), SGD with momentum, AdaGrad, RMSprop
- Random initialization: Gaussian or uniform, Scaling
참고사이트
A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way
Artificial Intelligence has been witnessing a monumental growth in bridging the gap between the capabilities of humans and machines…
towardsdatascience.com
https://sonsnotation.blogspot.com/2020/11/7-convolutional-neural-networkcnn.html
[머신러닝/딥러닝] 9-1. Convolutional Neural Network(CNN)
sonsnotation.blogspot.com
[딥러닝 모델] CNN (Convolutional Neural Network) 설명
저번 포스팅에서는 딥러닝의 모델별 특징에 대해 알아보았습니다. 2021.07.10 - [SW programming/Computer Vision] - AI, 머신러닝, 딥러닝 이란? 그리고 딥러닝 모델 종류 그리고 이번 포스팅에서는 그 중 Compu
rubber-tree.tistory.com
'머신러닝 > 딥러닝' 카테고리의 다른 글
LSTM(Long Short-Term Memor) (0) | 2023.01.27 |
---|---|
RNN(Recurrent Neural Network, 순환 신경망) (2) | 2023.01.19 |
경사하강법 (1) | 2022.12.22 |
순전파(Foward Propagation)와 역전파(Back Propagation) (0) | 2022.12.18 |
활성화 함수(Activation Function) (0) | 2022.12.08 |