2022년 11월 27일
VGG
ResNet
Segmentation
Object Detection
Class Loss + bbox Loss
Sliding Window
Region Proposals
R-CNN
Fast R-CNN
Mask R-CNN
Faster R-CNN
Single Stage Object Detection
Data Preprocessing
Initialization
Vanishing gradient
Activation 함수의 입력 W의 범위가 0에 조밀하다면 너무 작은 범위에서 기울기를 구하는 탓에 Vanishing gradient 현상이 일어날 수 있음.
tanh 함수를 이용하는 경우, 입력 범위가 크다면 함수의 출력이 -1 또는 1 근처에 조밀하게 되고 로컬 기울기가 0에 가까워 마찬가지로 Vanishing gradient 현상이 일어날 수 있음. 이것을 방지하기 위해 표본에 W의 표준편차 ${1/\sqrt{Din}}\quad(Din=사이즈^2*채널)$을 곱해 좁은 값을 샘플링 하여 깊은 레이어에서도 tanh의 출력이 [-1,1] 범위의 값을 고르게 갖도록 하는 Xavier Initalization 기법이 있음.
급격한 기울기를 갖는 tanh 대신 기울기가 1인 ReLU 함수를 이용하는 경우 W의 음의 값이 모두 0이 되어버리는데 이것을 방지하기 위해 ${\sqrt{2}}$만큼 넓게 샘플링 하여 손실될 샘플만큼 더 샘플링하여 보완함.
SGD+Momentum
Transfer Learning
ReLU 함수를 이용하는 경우 출력이 0일 때 기울기가 0이라 마찬가지로 학습이 이루어지지 않지 않을까 생각을 했는데 그 때 조금의 기울기를 주는 Leaky ReLU 같은 개선 버전이 있다고 한다. ReLU는 다른 Activation Function에 비해 연산이 단순하여 sigmoid, tanh에 비해 loss 업데이트가 6배 가량 더 빠르다고 한다.
오픈 소스 모델을 사용할 때 대다수의 제작자가 Pretrained 모델과 그것을 사용 가능하게 해주는 옵션을 제공해준다. 모델 학습 시 꼭 사용해야 하는 기법이 아닐까라고 여겨졌다.
노이즈 입력 z로부터 네트워크를 통과시켜 그럴싸한 샘플(가짜)을 생성해내려고 한다. 이 때 그럴싸한 가짜 샘플을 만드려는 네트워크인 Generator와 가짜 샘플과 진짜 샘플을 잘 구분하려는 네트워크인 Discriminator로 구성되어 있다.

정의역이 (0,1]인 log에 대해 좌항을 보면 Discriminator가 진짜 샘플(x)를 잘 구분해내면 좌항의 크기가 최대가 되므로 Discriminator는 입력이 진짜와 가까운 정도에 따라 1을 출력할 수 있도록 학습한다. 이후, 우항을 보면 Generator가 노이즈 z로부터 생성한 가짜 샘플 G(z)을 Discriminator가 잘 구분해내면(출력이 0에 가까우면) 우항의 크기가 최대가 되므로 Discriminator는 가짜 샘플을 잘 구분할 수 있도록 학습한다. 이후 Generator는 가짜 샘플을 진짜 샘플과 유사하게 생성한다면 우항의 크기가 최대가 되므로 이에 맞춰 학습한다.
위와 같이 Discriminator가 가짜 샘플 학습할 때, log(1-D(G(z))가 학습 초반에 느리고 학습 후반에 급격히 빠른 특성이 있으므로 이것을 개선하기 위해 우항을 -log(D(G(z))로 바꿔서 학습한다.