Search
Duplicate

Regularization (정규화)

모델이 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에서는 전체 네트워크를 이용한다.