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 개수는 필터의 개수
•
•
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을 통해 주어진 데이터셋이 가진 최적의 특징을 추출할 수 있음