Search

CNN-1 : Convolution Neural Networks

카테고리
DL/ML
Index
DeepLearning
날짜
2024/11/06

1. CNN의 등장

1.1 다층 퍼셉트론의 한계

다층퍼셉트론(MLP, Multi Layer Perceptron)에서는 영상을 입력하기 위해서 1차원으로 펼치는 Flatten 과정을 거치게 됨
→ Flatten 과정에서 영상이 가지고 있는 중요한 위치 정보가 손실됨
Fully Connected Layer(FC layer) 층을 사용하게 되면 각 픽셀별로 weight, bias값을 update해야함
→ 과다한 매개변수 사용

1.2 CNN (Convolution Neural Network)의 등장

필터를 사용한 Convolution 연산을 통해 이미지의 위치별 특징을 추출하는 구조
→ MLP 와 달리 필터(커널)을 통해서 위치정보를 유지한 채로 feature를 찾을 수 있음
이미지의 위치별 특징을 가장 잘 추출하는 최적의 필터를 학습하는 것이 CNN의 핵심 목표
MLP 처럼 첫 layer에서 모든 픽셀 값을 다 보는 것이 좋지 않을 수 있음
→ 사람이 이미지를 인식할 때 뇌의 일부분만 활성화 되는 것 처럼, CNN 또한 한 번에 특정 feature에 대해서 집중해서 보고, 순차적으로 그 범위를 넖혀가는 구조!

2. CNN의 구조

보통 CNN의 구조는 크게
특징을 추출하는 Convolution layer
이미지 크기를 줄이는 Pooling layer
분류를 위한 Fully-Connected Layer 로 구성되어있음

2.1 Convolution Layer

Convolution layer
Convolution filter를 사용해서 공간적 구조를 보존한 feature를 추출하는 layer
Convolution 연산
이미지에 필터를 슬라이드 시키면서 각 위치의 픽셀값과 filter 값(Weight)을 dot product 수행
Padding 과 Stride
Padding
Convolution 연산을 하다보면 입력이미지와 Filter 크기 차이 때문에 결과 feature 맵이 작아지는 문제가 발생함
또한, 이미지 side에 있는 픽셀은 convolution 연산에 참여할 기회가 적기 때문에 Padding을 통해서 해당 문제를 해결
Stride
Filter를 이동할 때 보폭을 설정하면 한 번에 여러 칸을 이동해서 특정 부분을 집중해서 볼 수 있음
→ 영상 크기를 축소 할때 사용하고, stride 값을 k로 설정하면 feature map은 1/k로 줄어듦
Input Volume이 3x32x32 인 입력이미지가 있을때, stride 1, padding 2로 한 5x5 필터 10개를 통과 시키면 Output Volume size는 어떻게 될까?
output image shape (C, H, W) = (10, 32, 32)
Channel 개수는 필터의 개수
H=(HFilterH+2padding)/stride+1H’ = (H - Filter_H + 2*padding ) / stride +1
W=(WFilterW+2padding)/stride+1W’ = (W- Filter_W + 2*padding ) / stride +1

2.2 Pooling layer

Pooling layer
계산량과 메모리 사용량, 파라미터 수를 줄이기 위해서 입력 이미지의 크기를 줄이는 것
feature맵에 있는 지나치게 세부적인 정보를 줄여서 요약 통계량을 추출해 줌
→ 결과 픽셀 값이 주변을 대표할 수 있게하는 layer가 Pooling layer!
Pooling layer에는 단순 크기만 줄여주기 때문에 channel 값은 유지되고, 새로운 파라미터가 사용되지 않음
Max Pooling 과 Average Pooling 을 주로 사용함
1.
Max Pooling : 커널 영역의 가장 큰 값을 사용
2.
Average Pooling : 커널 영역의 평균 값을 사용
3.
Global Average Pooling (GAP): 커널 사이즈와 입력이미지의 사이즈가 같을 때, Average Pooling을 적용하는 경우
→ 전체 이미지를 대표하는 Average 값을 추출하는 것과 같음!

2.3 Fully Connected Layer (MLP)

Fully Connected Layer
CNN 구조에서 Fully Connected Layer는 feature map을 1차원으로 flatten 한 뒤, 전체 이미지에 대한 정보를 취합하고, 마지막 FC layer를 통해서 classification을 수행하는 역할을 담당
kernel size가 1x1 인 convolution layer의 의미
Feature map 간의 weighted sum!
→ kernel을 통과해서 생긴 여러개의 feature map의 하나의 최종적인 feature map으로 합치는 것!
Convolution layer가 FC layer와 다른 점
1.
Conv layer는 커널 범위에 해당하는 일부 영역에 대한 정보만 연결함 (partial connection)
→ 선택과 집중을 통해 위치 정보를 보존!
2.
필터로 인해서 weight을 재사용할 수 있고, 필터가 가진 패턴(feature)을 찾을 수 있음 (weight sharing)
→ 입력 Feature map의 모든 pixel이 같은 필터를 사용하기 때문에 가중치를 공유하는 효과를 줌
→ 가중치 개수를 획기적으로 줄일 수 있음(학습해야 할 매개변수가 줄어 듦)
→ 여러 종류의 필터를 사용하면 여러 종류의 Feature를 추출!
3.
각 필터가 어떤 특징을 추출해야 분류를 잘 할 수 있을 지는 AI에게 맡김(black box)
→ 각 filter의 weight 값은 학습을 통해서 AI가 결정하는 것!

2.4 ConvNet과 CNN의 구조

ConvNet
활성화 함수(activation function)가 포함된 Conv layer의 연속
CNN Blocks
보통 Conv layer과 Pooling layer를 번갈아서 쌓고, 신경망 앞 부분은 feature 추출, 뒷 부분은 Classification을 수행하는 방향으로 구현

3. CNN 구조의 주요 특징

Task 종류에 따라서 다양한 구성으로 CNN Block 조립 할 수 있음
비지도학습에서 입력과 출력 volume이 값은 Auto Encoer를 사용
Back Propagation 학습 알고리즘 사용
convolution layer의 filter pixel과 Fully-Connected layer의 edge가 가중치에 해당됨
→ 이 weight 값에 대해서 back propagation을 수행해서 가중치 갱신
pooling 층은 가중치가 없음
Feature Learning
Convolution 연산을 통해서 주어진 데이터셋의 특징을 인식하기 위한 최적을 필터를 찾는 것이 CNN의 핵심 목표
End-to-End Learning
feature learning과 Classification 학습을 동시에 진행함
→ 이전에는 특징 추출을 위한 classifier와 classification을 위한 classifier를 독립적으로 사용했는데 CNN을 통해서 이를 하나의 네트워크에서 수행가능
CNN의 장점
데이터의 원래 구조를 유지 할 수 있음
신경망의 깊이를 깊게 설계 할 수 있음
featuer learning을 통해 주어진 데이터셋이 가진 최적의 특징을 추출할 수 있음