•
모델이 training data에 fit하는 것을 막아 단일 모델의 성능을 올리는 방법이다.
•
batch normalization 이외에도 다양한 방식들이 있고, 보통 BN으로 충분하지만 오버피팅이 너무 심하면 dropout을 추가한다.
Dropout
원리
•
임의로 layer에 1번씩 Dropout을 넣는다. 즉 몇몇 노드들을 랜덤하게 off하여 foward pass 과정에서 일부 뉴런의 activation 값을 0으로 만들어 버린다. (때때로 전체 feature map에서 랜덤으로 dropout 시키기도 하고, 채널을 통째로 drop시키기도 한다.)
•
Dropout 방식은 대부분 FC layer에서 적용되나 다른 layer에서 할 때도 있다.
•
학습과정에서 redundancy(중복성)을 줄인다는 의미는 이미지를 볼 때 특정 한 부분이 가려져 있어도 어떤 이미지인지 짐작할 수 있는 것과 같은 뜻이다. 즉, 어떤 일부 features에만 의존하는 것이 아니라 다양한 features를 골고루 이용할 수 있도록 하는 것이다.
•
train epoch 마다 노드의 구성이 랜덤으로 변하기 때문에 마치 여러모델의 값을 평균내는 ensemble의 효과와 비슷하다.
효과
•
train 할 때는 네트워크에 무작위성을 줌으로서 다양한 feature을 이용해 예측하기 때문에, 과적합 문제를 방지한다.
•
train epoch를 돌 때마다 랜덤으로 바뀌는 노드의 구성이 변하기 때문에 단일 모델로 앙상블 효과를 낼 수 있다.
•
test 할 때는 이 무작위성을 평균화시켜서 일반화 효과를 준다.
Data Augmentation
•
이미지의 patch를 랜덤하게 잡아 훈련시키거나, 이미지를 뒤집어서(좌우반전) trainset에 추가하거나, 밝기값을 다르게 해서 train dataset에 추가해 훈련을 해주는 방식이다. 즉, label은 보존한 채로 이미지를 변형시켜서 학습시키는 것이다.
•
training을 할 때에는 다른 사이즈의 sample crop(중간 프레임, 각 모서리의 프레임 자르기, 반전, 뒤집기 등)의 방법을 이용하여 random한 이미지를 수집한다. testing을 할 때에는 이 crop들을 average out 하여 이용한다.
기타
DropConnect
Dropout이 노드의 activation을 0으로 만드는 방법이라면 Dropconnect는 output값이 아닌 노드의 weight matrix를 0행렬로 만드는 것이다.
Max pooling
pooling연산을 수행 할 지역을 임의로 선정하고 testing을 할 때는 pooling region을 고정시키거나 여러개의 region을 만들어 average out을 한다.
Stochastic depth
training을 할 때는 네트워크의 layer를 랜덤으로 drop. layer 중 일부를 제거해 버리고 일부만을 사용하고 testing에서는 전체 네트워크를 이용한다.