딥러닝 모델 개선 방법
- Epoch 수와 과적합
- DNN 모델 크기 변경
- Dropout Layer 추가를 통한 Overfitting 규제
- Batch Normalization (배치정규화)
- Optimizer의 Learning rate(학습율) 조정을 통한 성능 향상
- Hyper parameter tuning
Batch Normalization (배치정규화)
- 각 Layer에서 출력된 값을 평균 = 0 ,표준편차 =1 로 정규화하여 각 Layer의 입력 분포를 균일하게 만들어 준다.
- 적용 방식 :배치정규화는 입력 데이터와 파라미터의 가중합을 구한 결과에 적용한 뒤 그 결과를 Activation 함수에 전달한다. 가중합 결과에 대해서 -> 미니배치의 평균과 분산을 구한 다음-> 감마를 곱하고 베타를 더해서 정규화를 진행해 입력 분포를 (평균:0, 표준편차:1)상태로 유지한다.
감마(scale)와 베타(shift) 값은 학습과정에서 최적화 되는 값이다. 즉, Backpropagation을 통해서 학습이 된다.
Internal Covariate Shift(내부 공변량 변화) 문제
- 학습 과정에서 각 층을 통과할 때마다 입력 데이터 분포가 달라지는 현상
- 입력 데이터의 분포가 정규푼포여도 레이어를 통과하면서 그 분포가 바뀌어 성능이 떨어진다
→ 배치정규화로 해결 : 각 레이어에서 입력 분포를 정규분포의 평균과 표준편차로 정규화 : 입력 분포를 안정화시켜 성능 향상 - 레이어가 많아질 수록 내부 공변량 변화문제가 커지므로, 레이어가 많은 모델에서 효과적이다(최근모델)
효과
- 랜덤하게 생성되는 초기가중치에 대한 영향력을 줄임
- 과대적합에 대한 규제 효과를 줌
- Gradient Vanishing, Gradient Exploding을 막아줌
Batch nomalization 예제
- Linear함수의 출력값에 BatchNorm을 통해 정규화를 진행한 후 Activation함수에 전달
+ Dropout layer를 추가하면 성능 향상
1. 모델 정의→ 2. 모델 객체 생성 → 3. 손실함수 정의+ 최적화 함수 정의→4. 학습(module.fit)
1. 모델정의 Linear -> BatchNorm -> Activation (-> Dropout)
class BNModel(nn.Module):
def __init__(self):
super().__init__()
self.b1 = nn.Sequential(nn.Linear(784, 256),
nn.BatchNorm1d(256), # 입력: 1차원 -> feature수
nn.ReLU()
)
self.b2 = nn.Sequential(nn.Linear(256, 128),
nn.BatchNorm1d(128),
nn.ReLU())
self.b3 = nn.Sequential(nn.Linear(128, 64),
nn.BatchNorm1d(64),
nn.ReLU())
self.output = nn.Linear(64, 10)
def forward(self, X):
out = nn.Flatten()(X)
out = self.b1(out)
out = self.b2(out)
out = self.b3(out)
out = self.output(out)
return out
2. 모델 객체 생성
bn_model = BNModel().to(device)
torchinfo.summary(bn_model, (BATCH_SIZE, 1, 28, 28))
3. 손실함수, 최적화함수 설정 -> 4. 모델 학습
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(bn_model.parameters(), lr=LR)
result_bn = train.fit(train_loader, test_loader, bn_model, loss_fn, optimizer,
N_EPOCH, save_best_model=False, early_stopping=False,
device=device, mode='multi')
![](https://blog.kakaocdn.net/dn/mVYK4/btszlZAcvOu/bBDBx7qSQJosKGFOENOxdK/img.png)
'Data Science > Deep Learning' 카테고리의 다른 글
딥러닝 모델 개선 | 3. Dropout Layer 추가를 통한 Overfitting 규제 (1) | 2023.10.30 |
---|---|
딥러닝 모델 개선 | 2. DNN 모델의 크기를 변경하는 방법 (0) | 2023.10.30 |
딥러닝 모델 개선 | 1. Epoch수와 과적합 (0) | 2023.10.26 |
딥러닝 모델 성능 개선 | 과대적합과 과소적합의 문제 해결하기 (0) | 2023.10.26 |
딥러닝 개요 (0) | 2023.10.25 |