결과적으로 우리가 만든 모델의 성능이 잘 나와야한다. 우리는 CPU/GPU에 관한 내용을 제외하고 알아보도록 하자.
1. 성능 최적화
# 데이터를 사용한 성능 최적화
● 많은 데이터를 수집한다.
● 임의의 데이터를 생성한다.
● 데이터의 범위를 조정한다. ex) sigmoid 사용 시 데이터셋의 범위 0~1, 하어퍼볼릭 : -1 ~ 1
# 알고리즘을 이용한 성능 최적화
k-NN, RNN, LSTM, GRU ... 우리가 배운 머신러닝, 딥러닝 알고리즘들 등등
# 알고리즘 튜닝을 위한 성능 최적화
● 가장 많은 시간이 소요된다.
● 모델을 하나 선택하여 훈련시키려면 하이퍼파라미터를 변경하면서 훈련시키고 최적의 성능을 도출한다.
1. 진단 2. 가중치 3. 학습률 4. 활성화 함수 5. 배치와 에포크 6. 옵티마이저와 손실 함수 7. 네트워크 구성
# 앙상블을 이용한 성능 최적화
모델을 두 개 이상 섞어서 사용하는 것을 말한다.
성능 최적화 방법은 하이퍼파라미터에 대한 경우의 수를 모두 고려해야 하기 때문에 수많은 시행착오를 겪어야 한다.
# 하이퍼파라미터를 이용한 성능 최적화
1. 배치 정규화
기울기 소멸이나 기울기 폭발과 같은 문제를 해결하기 위해 손실함수로 ReLu를 사용하거나 초깃값 튜닝, 학습률 등을 조정한다.
● 기울기 소멸과 폭발의 원인은 내부 공변량 변화 때문인데, 네트워크의 각 층마다 활성화 함수가 적용되면서 입력값들의 분포가 계속 바뀌는 현상이다.
=> 분산된 분포를 정규분포로 만들기 위해 미니배치를 적용하여 평균은 0, 표준편차는 1로 유지한다.
● 미니 배치 평균 구하기 → 미니배치의 분산과 표준편차를 구함 → 정규화 수행 → Scale을 조정함
● 매 단계마다 활성화 함수를 거치면서 데이터셋 분포가 일정하다. 그러나 단점도 존재한다.
i) 배치 크기가 작으면 정규화 값이 기존값과 다른 방향으로 훈련한다. ex) 분산이 0, 정규화 자체X
ii) RNN은 네트워크 계층 별로 미니 정규화를 적용해야하므로 모델이 더 복잡해지고 비효율적이다
=> 이를 해결하기 위해 가중치 수정, 네트워크 구성 변경 등을 수행하지만 배치 정규화 수행 시 성능이 좋아지기 때문에 많이 사용한다!
2. Dropout을 이용한 성능 최적화
● 훈련할 때 일정 비율의 뉴런만 사용하고, 나머지 뉴런에 해당하는 가중치는 업데이트하지 않는다.
=> 과적합을 방지하기 위해 은닉층에 배치된 노드 중 일부를 임의로 끄면서 학습한다.
● 훈련 시간이 길어진다. But 성능향상을 위해서 자주 사용한다.
● 어떤 노드를 비활성화할지는 학습할 때마다 무작위로 선정, 테스트 데이터로 평가할 때는 노드들을 모두 사용하여 출력하되 노드 삭제 비율(드롭 아웃 비율)을 곱해서 성능을 평가한다.
3. 조기 종료를 이용한 성능 최적화
● 훈련 데이터와 별도로 검증 데이터를 준비하고, 매 epoch마다 검증 데이터에 대한 오차를 측정하여 모델의 종료 시점을 제어한다.
=> 과적합을 회피하는 규제 기법이다
따라서 검증 데이터에 대한 오차가 증가하는 시점에 학습을 멈추도록 조정해야한다. 이떄 주의할 점은 학습을 언제 종료시킬지 결정할 뿐, 최고의 성능을 갖는 모델을 보장하지 않는다.
4. 학습률을 조정해서 성능을 향상
● 학습이 진행되는 과정에서 학습률을 조금씩 낮추어 주는 성능 튜닝 기법이다.
●학습률 스케줄러를 이용한다.
=> 학습률 스케줄러란 주어진 'patience' 횟수만큼 검증 데이터셋에 대한 오차 감소가 없으면 주어진 'factor' 만큼 학습률을 감소시켜서 모델 학습의 최적화가 가능하도록 도아주는 것이다.
우리의 궁극적인 목표는 모델의 성능을 잘 뽑는 것이기 때문에 위 내용들을 잘 고려해서 모델의 성능을 높여보자!
'AI > DeepLearning' 카테고리의 다른 글
[DL] LSTM & GRU & 양방향 RNN (0) | 2024.11.15 |
---|---|
[DL] RNN (7) | 2024.11.13 |
[DL] 시계열 분석 (1) | 2024.11.08 |
[DL] CNN (2) | 2024.11.08 |
[DL] 딥러닝의 구조 (3) | 2024.10.01 |