Dropout
- 딥러닝에서 overfitting을 방지하는 regularization 기법 중 하나
- 무작위로 선택한 일부 뉴런들을 무시 ( 해당 뉴런들의 출력을 0으로 만듦 )
- 모델이 다양한 입력에 대해 다양한 방식으로 반응하도록 만들어주어 일반화 능력을 높이는 데 도움을 줄 수 있음
- 모델을 여러 개를 만들지는 않지만, 훈련 과정에서 앙상블과 비슷한 효과를 냄
- 서로 다른 학습데이터를 통해 모델을 학습시키거나 모델이 서로 다른 구조를 가지면 학습 성능을 개선할 수 있음
- 그러나 하나의 네트워크를 훈련시키는 것도 어려운데 여러개의 네트워크를 훈련시키는 것은 매우 어려운 일임
- 또한, 여러개의 네트워크를 훈련시켰더라도 사용시에 연산 시간이 소비되어 속도가 느려지는 문제가 발생할 수 있음
- Dropout은 이 두 문제를 해결 가능!! 여러개의 모델을 만들지 않고 모델결합이 여러 형태를 가지게 함
- 랜덤하게 일부뉴런이 동작하는 것을 생략하여 뉴런의 조합만큼 지수함수적으로 다양한 모델을 학습시키는 것과 같음
- 모델 구조와 하이퍼파라미터를 잘 설정해주어야 함
- 너무 많은 dropout 비율을 사용하면, 모델이 underfitting될 수 있고,
- 너무 적은 dropout 비율을 사용하면, overfitting이 발생할 수 있음
ex) 50%의 dropout을 사용하는 경우, 학습 중에 무작위로 선택한 절반의 뉴런들을 무시
( * p : node를 얼만큼 활용 안할지! )
overfitting
학습 데이터를 지나치게 학습하여 학습데이터에서는 잘 동작하지만, 검증 데이터(테스트 데이터)에 대해서는 결과가 좋지 못한 것
bias와 variance
bias : 모델의 예측값과 실제 값 사이의 차이를 나타내는 오차의 크기
variance : 모델이 학습 데이터에 대해서 과적합(overfitting)되어 새로운 데이터에 대한 예측이 부정확할 가능성
→ 모델의 성능을 향상시키기 위해서는 bias와 variance를 모두 고려해야 함
* bias가 큰 경우, 더 복잡한 모델을 사용하거나 데이터를 더 많이 수집하여 모델의 복잡성을 높이는 등의 방법으로 성능을 개선할 수 있음
* variance가 큰 경우, 모델의 복잡성을 줄이거나 데이터를 더 많이 수집하여 일반화 능력을 개선하는 등의 방법으로 성능을 개선할 수 있습
* dropout을 적용할 경우, bias는 조금 있겠지만, variance를 낮춰주는 효과가 크기 때문에, 전체적으로 모델 성능이 향상된다!!
Dropout in Training
probability에 따라 random하게 node를 0으로 만듦
→ 결국 모든 node가 train 됨
Dropout in Testing
(1-p)를 곱해서 모든 node를 사용
(1-p)를 곱하는 이유
train/test 시 output의 expectation을 같게 만들기 위해!
Dropout in PyTorch
** model.train()과 model.eval()을 꼭 선언해야 모델의 정확도를 높일 수 있음 !
torch.nn.Dropout(p=0.5, inplace=False) # p=0.5, dropout 사용
model.train() # 학습에서는 dropout 사용 (dropout=True)
for epoch in range(1, 10):
with torch.no_grad():
model.eval() # 검증 및 테스트에서는 dropout 사용x (dropout=False)
'AI' 카테고리의 다른 글
BERT (Bidirectional Encoder Representations from Transformers) (0) | 2023.05.09 |
---|---|
Transformer: Attention Is All You Need (0) | 2023.05.09 |
Optimizer (0) | 2023.05.09 |
Gradient Descent (0) | 2023.05.08 |
Pre-training, Transfer Learning, Fine-tuning (0) | 2023.04.30 |