학습 목표
- 레이어의 개념을 이해한다.
- 딥러닝 모델 속 각 레이어(Linear, Convolution)의 동작 방식을 이해한다.
- 데이터의 특성을 고려한 레이어를 설계하고, 이를 Tensorflow로 정의하는 법을 배운다.
후기
학습 내용
23. 딥러닝 레이어의 이해(1) Linear, Convolution
* 미싱 링크(missing link) *
23.1 데이터의 형태
23.2 레이어는 어렵다?
레이어란?
하나의 물체가 여러 개의 논리적인 객체들로 구성되어 있는 경우, 이러한 각각의 객체를 하나의 레이어라 한다.
- 신경망에서 Weight는?
23.3 딥러닝의 근본! Linear 레이어
Linear 레이어는?
선형 변환을 활용해 데이터를 특정 차원으로 변환하는 기능을 한다.
- Weight
- (입력의 차원, 출력의 차원) 형태의 행렬
- Weight의 모든 요소를 Parameter라고 함
- Parameter가 많을 수록 무조건 좋은가?
- 과적합(Overfitting)을 야기할 수 있음
-> 훈련 데이터에만 알맞게 동작하는 현상
- 훈련(Training)이란?
- Weight의 형태만 선언해 주면 그 파라미터 값을 임의의 실수가 채우고, 수많은 데이터를 거치며 가장 적합한 Weight를 알아서 찾아가는 과정
- 편향(Bias)란?
- 선형변환된 값에 편향 파라미터 b를 더해주는 것
- 형태가 (선형변환 결과 차원, ) 인 한 줄짜리 Weight로 정의
23.4 정보를 집약시키자! Convolution 레이어
Convolution 레이어는?
- 목적에 알맞는 필터를 훈련을 통해 찾아주는 것
- 필터 구조 안에 Locality 정보가 온전히 보존
- 인접한 픽셀들 사이에서의 패턴만 추출할 수 있다는 것 자체만으로도 불필요한 파라미터 및 연산량을 제거하고 훨씬 정확하고 효율적으로 정보를 집약시킬 수 있음.
- 필터(Filter)?
- Convolution 레이어에서 Weight를 의미
- [ 필터의 개수 x 필터의 가로 x 필터의 세로 ]의 형태를 가짐
- Stride?
- 패딩(padding)?
- Convolution 연산이 입력의 형태를 변형시킴
-> 입력 영상 테두리에 패딩을 추가하여 입력의 형태를 유지한다.
23.5 핵심만 추려서 더 넓게! Pooling 레이어
Convolution 레이어의 문제점
- 5 X 5 필터 사이즈는 object detection에서 유의미한 정보를 담아내기에 너무 작은 사이즈
- Stride를 5로 주었기에 파라미터가 줄어드는 효과는 발생했지만, 찾고자 하는 object가 필터 경계선에 걸려서 인식하지 못할 우려가 있다.
# 수용 영역(Receptive Field) 개념
Neural Network의 출력부가 충분한 정보를 얻기 위해 커버하는 입력 데이터의 Receptive Field가 충분히 커서, 그 안에 detect해야 할 object의 특성이 충분히 포함되어 있어야 정확한 detection이 가능하게 됨


위 그림에서는 빨간색, 녹색, 파란색, 하얀색 포인트가 가지는 Receptive Field의 영역 전체가 max pooling 레이어의 한 포인트의 Receptive Field가 되므로 이때는 5 X 5의 Receptive Field를 가지게 된다.
# Max Pooling 레이어의 의미
효과적으로 Receptive Field를 키우고, 정보 집약 효과를 극대화
파라미터의 증가는 없음!
(1) translational invariance 효과
이미지는 약간의 상하좌우 시프트가 생긴다고 해도 내용상 동일한 특징이 있음
-> Max Pooling을 통해 약간의 시프트 효과에도 불구하고 동일한 특징을 안정적으로 잡아낼 수 있는 긍정적 효과
-> object 위치에 대한 오버피팅을 방지하고 안정적인 특징 추출 효과
(2) Non-linear 함수와 동일한 피처 추출 효과
- ReLU와 같은 non-linear 함수는 많은 하위 레이어의 연산 결과를 무시하는 효과를 발생시킴
-> 중요한 피처만을 상위 레이어로 추출해서 올려줌으로써 분류기의 성능을 증진시키는 효과
(3) Receptive Field 극대화 효과
- Receptive Field를 크게 하려면 Convolutional 레이어를 아주 많이 쌓아야 함
-> 큰 파라미터 사이즈로 인한 오버피팅, 연산량 증가, Gradient Vanishing 등의 문제
- 이 문제를 해결하기 위한 레이어가ㅣ Max Pooling 레이어!
(Dilated Convolution도 해결 방법이 될 수 있음)
23.6 집약된 정보의 복원! Deconvolution 레이어
오토 인코더(Auto Encoder)?
Convolution의 결과를 역재생해서 원본 이미지와 최대한 유사한 정보를 복원
- y_train, y_test를 사용하지 않는다
-> x_train의 라벨이 바로 x_train 자신이 되기 때문
# Upsampling 레이어
- Nearest Neighbor : 복원해야 할 값을 가까운 값으로 복제한다.
- Bed of Nails : 복원해야 할 값을 0으로 처리한다.
- Max Unpooling : Max Pooling 때 버린 값을 실은 따로 기억해 두었다가 그 값으로 복원한다.
# Transposed Convolution