2020. 2. 6. 20:14ㆍnlp
(사진 출처) 밑바닥부터 시작하는 딥러닝 1권
http://taewan.kim/post/cnn/#fn:1
완전연결 계층(Affine)으로 이루어진 네트워크
(ex) input → Affine → ReLU → Affine → ReLU → Affine → ReLU → Affine → Softmax
CNN으로 이루어진 네트워크
(ex) input → Conv →ReLU → Pooling → Conv → ReLU → Pooling → Conv → ReLU → Affine → ReLU → Affine → Softmax
= (1) 이미지의 특징을 추출하는 부분(Conv와 Pooling) + (2) 클래스를 분류하는 부분(Affine 등 완전연결계층)
- Fully Connected Layer (=FC Layer) : 오직 1차원의 입력 데이터만 받을 수 있음
- (문제) 한 장의 컬러 사진은 3차원 데이터 : (세로 픽셀, 가로 픽셀, 컬러 채널)
* 컬러 사진이면 컬러 채널 3개(RGB), 흑백 사진이면 컬러 채널 1개(2차원 데이터)
- (해결) 3차원 데이터를 1차원으로 평면화
- (해결책의 한계) 사진 데이터를 평면화하면 공간 정보 손실됨
- (완전한 해결책) CNN : 이미지의 공간 정보를 유지한 상태로 학습 가능
합성곱(Conv)계층
- 필터의 매개변수와 편향이 필요함
- 데이터 형상 유지 가능
- Feature Map(특징 맵) : 합성곱의 입출력 데이터 (input feature map, output feature map)
- Convolution 레이어 출력 결과 = Feature Map → 여기에 비선형 활성화 함수 적용하면 → Activation Map
합성곱 연산
- 패딩(padding) : 출력 크기를 조정하기 위해 입력 데이터 주위에 0을 채움
- 패딩 크게 하면 출력 크기 커짐
- stride : 필터를 적용하는 위치의 간격
- stride 키우면 출력 크기 작아짐
3D 데이터의 합성곱 연산
- 입력 데이터의 채널 수와 필터의 채널 수가 동일함
* 필터Filter = 커널Kernel
- 채널 C개 입력 * 채널 C개 필터 = 채널 1개 출력
- 여러 필터 사용하면 출력의 채널은 필터 개수만큼
- 채널 C개 입력 * 채널 C개 필터가 FN개 = 채널 FN개 출력
* 출력 데이터의 채널 수 = 필터의 개수
- 편향 추가하면
- N개의 테이터를 배치처리 하면
Conv 계층 출력 데이터 크기
- 입력 데이터 높이 : H
- 입력 데이터 폭 : W
- 필터 높이 : FH
- 필터 폭 : FW
- stride 크기 : S
- 패딩 사이즈 : P
- 출력 데이터 높이와 폭은 자연수여야 함
- Conv 뒤에 Pooling 온다면 : 출력 데이터 높이와 폭은 Pooling 크기의 배수여야 함
Pooling
- 세로, 가로 방향의 공간을 줄이는 연산
- Pooling 계층은 학습해야 할 매개변수가 없다 (영역 안의 최댓값 혹은 평균을 취함)
- Pooling을 해도 채널 수는 변하지 않는다 (입력 데이터의 채널 수 = 출력 데이터의 채널 수)
- Pooling 계층은 입력의 변화에 영향을 적게 받는다 (robust)
- Poling 계층을 통과하면 행렬의 크기가 감소한다
Pooling 계층 출력 데이터 크기
합성곱 계층 구현
- Im2col로 데이터 전개 → 내적 계산 → reshape
풀링 계층 구현
- 입력 데이터에 풀링 적용 영역 전개 후 최댓값/평균 구하고 reshape
Flatten Layer
- 파라미터 존재하지 않고 입력 데이터의 shape만 변경함
(ex) 입력된 데이터가 (2,1,80) = (높이,폭,채널) 이라면 flattern layer의 출력 데이터는 (160,1)
Softmax Layer
- 최종 분류해야할 클래스가 n개면 출력 데이터 형상도 (n,1)
(ex) 분류할 클래스가 100개 : 입력된 데이터가 (160,1)이라면 softmax layer의 출력 데이터는 (100,1)
- 이 예시에서 weight shape는 (100, 160)
'nlp' 카테고리의 다른 글
[DL Wizard] Convolutional Neural Network with PyTorch 번역 및 정리 (0) | 2020.02.06 |
---|---|
CNN for NLP 번역 및 정리 (0) | 2020.02.06 |
[DL Wizard] Weight Initializations & Activation Functions 번역 및 정리 (0) | 2020.02.05 |
[DL Wizard] Optimization Algorithms 번역 및 정리 (0) | 2020.02.05 |
[DL Wizard] Learning Rate Scheduling 번역 및 정리 (0) | 2020.02.05 |