본문 바로가기
딥러닝

[딥러닝] 딥러닝 성능관리 _ 20241101

by 황오독 2024. 11. 1.

 

더보기

* 들어가기전

① 모델의 복잡도

- 너무 단순한 모델 : 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,,,)