* 들어가기전
① 모델의 복잡도
- 너무 단순한 모델 : train, val 성능이 떨어짐
- 적절히 복잡한 모델 : 적절한 예측력
- 너무 복잡한 모델 : train 성능이 높고, val 성능 떨어짐
② 적절한 복잡도 지점 찾기
- 복잡도를 조금씩 조절 (하이퍼파라미터 조정)
- Train error와 Validation error 측정하고 비교 (관점 : validation error)
③ 딥러닝에서 조절할 대상
- Epoch와 learning_rate
- 모델 구조 : hidden layer 수, node 수
- 미리 멈춤 Early Stopping
- 임의 연결 끊기 Dropout
- 가중치 규제하기 Regularization(L1, L2)
1. Early Stopping
- 반복 횟수(epoch)가 많으면 과적합 될 수 있음
- 항상 과적합이 되는 것은 아니지만, 반복횟수가 증가할 수록 val error 가 줄어들다가 어느 순간부터 증가
- val error가 더이상 줄지 않으면 멈추게 하는게 Early Stopping
- 일반적으로 training error는 계속 줄어듬
# EarlyStopping 옵션 지정하기
from keras.callbacks import EarlyStopping
es = EarlyStopping(monitor='val_loss', min_delta=min_del, patience=pat)
# monitor : val_loss 관점에서 봄.
# min_delta : 오차(loss)의 최소값에서 변화량(줄어드는량)이 몇이상 되는지 지정 (디폴트 0)
# patience : 오차가 줄어들지 않는 상황을 몇 번 기다려줄 건지 지정 (디폴트 0)
# .fit 안에 지정
model.fit(x_train, y_train, epochs=100, validation_split=.2, callbacks=[es])
# epochs를 100번 다 실행하는게 아니라, 실행하다가 es에 따라 n번까지 실행됨.
# callbacks : epoch 단위로 학습이 진행되는 동안, 중간에 개입할 task 지정하는 것임.
2. Dropout
- 과적합을 줄이기 위해 사용되는 정규화 기법 중 하나
- 훈련 과정에서 신경망의 일부 뉴런을 임의로 비활성화 시킴으로써 모델을 강제로 일반화
model = Sequential([Input(shape=(n,)),
Dense(128, activation='relu'),
Dropout(.4),
Dense(64, activation='relu'),
Dropout(.4),
Dense(32, activation='relu'),
Dropout(.4),
Dense(1, activation='sigmoid')])
Dropout 적용 전 | Dropout 0.1 | Dropout 0.3 | Dropout 0.5 |
![]() |
![]() |
![]() |
![]() |
=> 별로 차이가 없어보이지만 y축 단위가 바뀌었음.
=> Dropout 비율이 클수록 가중치 일부를 더 억제함.
=> 보통 0.2~0.5 사이의 범위를 지정하며, 정답이 있진 않지만 보통 hidden layer마다 같은 숫자를 넣음.
(Feature가 적을 경우 rate를 낮추고, 많을 경우는 rate를 높임)
## 참고 ##
최근 Deep Learning 모델링 추세
① 우선 구조를 복잡하게 만듬 (과적합)
② 규제기법을 적용하여 과적합을 줄임
(epochs, dropout,,,)
'딥러닝' 카테고리의 다른 글
[딥러닝] 언어모델 이해 (1) ChatGPT API로 연결하기 _ 20241105 (8) | 2024.11.05 |
---|---|
[딥러닝] CNN _ 20241104 (0) | 2024.11.04 |
[딥러닝] 딥러닝 모델 저장하기 _ 20241101 (2) | 2024.11.01 |
[딥러닝] 딥러닝 모델링 (#2. 이진분류, 다중분류) _ 20241031 (4) | 2024.10.31 |
[딥러닝] 딥러닝 모델링 (#1. Regression) _ 20241031 (3) | 2024.10.31 |