티스토리 뷰
+) CNN에 대한 추가 설명은 이 포스팅을 참고. CNN의 연산과정에 대한 구체적인 설명이 담겨있음
- 이미지를 분류하는 모델을 만들고자 할 때 CNN과 MLP의 큰 차이점은 Feature를 어떻게 추출하느냐에 있다. MLP는 이미지의 픽셀값을 바로 네트워크의 Input으로 사용하는 것이고 CNN은 Convolution Layer와 Pooling Layer를 이용하여 이미지의 Region Feature를 추출하고 그 feature를 MLP의 인풋으로 사용한다.
- 그러니까 컴퓨터비전에서 CNN의 성능이 좋은 이유는 단지 Region Feature를 추출할 수 있기 때문인 것이다.
- CNN은 MLP와 같이 계층을 조합하여 만들 수 있다. 다만, 합성곱 계층(convolutional layer)과 풀링 계층(pooling layer)이 새롭게 등장한다. 즉 CNN의 계층은 Conv - ReLU - Pooling 흐름으로 연결된다고 할 수 있다.
합성곱 계층
cnn에서는 합성곱 계층의 입출력 데이터를 특징 맵(feature map)이라고도 한다. 입력 데이터를 input feature map, 출력 데이터를 output feature map이라고 하는 식이다.
합성곱 연산
합성곱 계층에서는 합성곱 연산( = 필터 연산)을 처리한다. 입력 데이터에 필터를 적용하는데, 데이터와 필터의 형상을 (높이height, 너비width)로 표기한다.
(사진 추후 추가 예정)
padding
합성곱 연산을 수행하기 전에 입력 데이터 주변을 특정 값(0)으로 채우는 것. 주로 출력 크기를 조정할 목적으로 사용한다.
스트라이드
필터를 적용하는 위치의 간격.
패딩, 스트라이드, 출력 크기 사이의 관계 수식화
입력크기 : (H,W)
필터크기 : (FH, FW)
출력크기 : (OH, OW)
패딩 : P
스트라이드 : S
OH = (H + 2P - FH) / S + 1
OW = (W + 2P - FW) / S + 1
합성곱 연산 블록으로 생각하기
3차원 합성곱 연산은 데이터와 필터를 직육면체 블록이라고 생각하면 쉽다. 3차원 데이터를 다차원 배열로 나타낼 때는 (채널, 높이, 너비),(C,H,W) 순서로 작성한다.
(C,H,W)인 입력데이터에 (C,FH,FW)크기의 필터를 적용하여 합성곱 연산을 수행하면 채널이 1개인 특징 맵이 만들어진다. 여기서 다수의 채널을 만들기 위해선 필터를 FN개 적용하면 된다. 즉, (C,H,W)인 입력 데이터에 (FN, C, FH, FW)크기의 필터를 적용시켜 (FN,OH,OW) 크기의 출력 데이터를 만드는 것이다. 합성곱 연산에서는 필터의 수가 굉장히 중요한데, 필터의 가중치 데이터는 4차원이며, (출력 채널 수, 입력 채널 수, 높이, 너비) 순으로 작성한다.
풀링 계층
- 풀링은 세로,가로 방향의 공간을 줄이는 연산이다.
- 풀링의 윈도우 크기와 스트라이드는 같은 값으로 설정하는 것이 보통이다.
- 대표적으로 최대 풀링(max pooling)과 평균 풀링(average pooling)이 있다.
풀링 계층의 특징
1. 학습해야 할 매개변수가 없다.
2. 채널 수가 변하지 않는다.
3. 입력의 변화에 영향을 적게 맏는다 = 강건하다!
CNN 연산 종합
cnn 연산에 대한 이해를 돕기 위해, 컨볼루션과 풀링 연산 과정을 나타낸 그림을 첨부하겠다. 출처는 이미지 아래에 있다.
추가로, 컨볼루션 연산을 퍼셉트론과 연과지어 생각할 수 있다.
초록색을 입력맵, 주황색을 필터라고 했을 때 입력맵과 필터 각각의 원소는 다음 그림처럼 연산을 수행한다.
Data Augmentation
- 복잡한 모델을 만들기 위해서는 다량의 데이터가 필요하다.
- 갖고 있는 한정적인 데이터를 임의로 변형해 데이터의 수를 늘려 다양한 Feature를 뽑는 것을 Data Augmentation이라 한다.
- Data Augmentation을 사용하면 성능이 소폭 상승한다.
대표적인 Data Augmentation의 기법에는 Random Flip/Rotation/Crop/Scaling/Cutout/Cutmix가 있다.
* cutout : 이미지의 일부를 사각형 모양으로 검은색 칠하는 기법(일종의 dropout)
* cutmix : 두 이미지를 합쳐 놓고 이미지의 label을 학습시킬 때 각각의 이미지가 차지하는 비율만큼 학습시키는 방법. 예를 들어 전체 이미지에서 강아지가 차지하는 비율이 70%, 고양이가 차지하는 비율이 30%라면 학습시킬 때 강아지는 0.7, 고양이는 0.3으로 labeling 하여 학습을 진행함.
CIFAR-10 데이터를 이용한 CNN설계
위 CNN의 순전파 과정을 그림으로 나타내면 다음과 같다! 코드를 이해하는 데 도움이 될 것이다.
'딥러닝' 카테고리의 다른 글
feature / 가중치 / 노드 수 / MLP&CNN 모델 구조 (0) | 2021.08.20 |
---|---|
[Deep Learning] AutoEncoder(AE) (0) | 2021.07.17 |
[Deep Learning] Initialization, Optimizer (0) | 2021.07.16 |
[Deep Learning] Dropout, Activation Function, Batch Normalization (0) | 2021.07.16 |
[AI Background] 인공 신경망 & MNIST 실습 (0) | 2021.07.13 |