딥러닝 텐서플로 교과서 - 8장

Jajuna_99·2022년 10월 3일
0

8장 성능 최적화

성능 최적화(p.308)

데이터를 사용한 성능 최적화

  • 최대한 많은 데이터 수집하기
  • 데이터 생성하기 -> 5장에서 사용한 ImageDataGenerator() 함수 사용해서 가능
  • 데이터 범위(sacle) 조정하기 -> 활성화 함수로 범위를 조절하거나, 정규화, 규제화, 표준화도 성능 향상에 도움이 된다.

알고리즘을 이용한 성능 최적화

  • 언제나 내가 사용하는 알고리즘 최적의 알고리즘이 아닐 수 있음을 주의하고, 다양한 알고리즘으로 훈련해보자.

알고리즘 튜닝을 위한 성능 최적화

모델을 선택하고 훈련시키려면 다양한 하이퍼파라미터를 변경하면서 훈련시키고 최적의 성능을 도출해야 한다.

다음은 선택 할 수 있는 하이퍼파라미터 목록들이다.

  • 진단 : 성능 향상이 어느 순간 멈추었다면 원인을 분석할 필요가 있다. 문제를 진단하는데 사용할 수 있는 것이 모델에 대한 평가이다. 평가 결과를 바탕으로 문제를 진단해봐야 한다.

    • 훈련 성능이 검증 보다 눈에 띄게 좋다면 과적합을 의심해 봐야한다. -> 규제화 적용 고려 - 훈련과 검증 결과가 모두 성능이 좋지 않다면 과소적합 의심 -> 네트워크 구조 변경, 에포크 수 조정 고려
    • 훈련 성능이 검증을 넘어서는 변곡점이 있다면 조기 종료 고려
  • 가중치 : 가중치 초깃값은 작은 난수를 사용한다. 작은 난수가 애매하다면 오토인코더 같은 비지도 학습을 통해 사전 훈련(가중치 정보를 얻기 위한 사전 훈련) 진행 고려

  • 학습률 : 초기에 매우 크거나 작은 임의의 난수를 선택해서 학습 결과를 보고 조금씩 변경해야 한다. -> 망 계층이 많다면 학습률을 높이고, 계층이 몇 안 된다면 학습률을 작게 설정

  • 활성화 함수 : 활성화 함수 변경시 손실 함수도 함께 변경해야 하는 경우가 많다. 변경시 신중해야 한다.

  • 배치와 에포크 : 최근 딥러닝 트렌드는 작은 배치에 큰 에포크를 사용한다. 여러 배치와 에포크로 실험해보는 것도 좋다.

  • 옵티마이저 및 손실 함수 : 일반적인 옵티마이저로 확률적 경사 하강법을 사용한다. 아담알엠에스프롭등도 좋은 성능을 보인다. 하지만 이것 역시 다양한 옵티마이저와 손실 함수를 적용해 봐야한다.

  • 네트워크 구성 : 네트워크 토폴로지(topology)를 최적으로 조정해봐야 한다.

앙상블을 이용한 성능 최적화

모델을 2개 이상 섞어서 사용하는 앙상블 또한 성능 향상에 도움이 될 수 있다.

하드웨어를 이용한 성능 최적화(p.311)

GPU 병렬 프로그래밍 라이브러리 CUDA, cuDNN 설치 및 설정에 관한 내용이다. 나중에 자세히 정리할 예정이다!

하이퍼파라미터를 이용한 성능 최적화(p.327)

배치 정규화

정규화(normalization) : 데이터 범위를 사용자가 원하는 범위로 제한하는 방법.
-> 픽셀 정보 범위를 0~255에서 0~1로 바꾸는 것

  • 특성 범위를 조정한다는 의미로 특성 스케일링(feature scaling)이라고도 한다. -> MinMaxScaler() 기법을 사용한다.

규제화(regularization) : 모델 복잡도를 줄이기 위해 제약을 두는 방법. -> 데이터가 네트워크에 들어가기 전에 필터를 적용하는 것으로 생각하면 된다.
-> 드롭아웃과 조기 종료가 있다.

표준화(generalization) : 데이터를 평균은 0, 표준편차는 1인 형태의 데이터로 만드는 방법. -> 표준화 스칼라, z-스코어 정규화라고도 한다.
-> 평균을 기준으로 얼마나 떨어져 있는지를 살펴볼 때 사용한다. 수식(p.329) 참고

배치 정규화(batch normalization) : 기울기 소멸, 기울기 폭발 같은 문제를 해결하기 위한 방법이다.
-> 일반적으로 기울기 소멸이나 폭발 문제를 해결하기 위해 손실 함수로 렐루 함수, 초깃값 튜닝, 학습률 등을 조정한다.

  • 기울기 소멸과 폭발 원인은 내부 공변량 변화(internal covariance shift)때문이라고 한다.

  • 내부 공변량 변화 : 네트워크 층마다 활성화 함수가 적용되서 입력 값들의 분포가 계속 바뀌는 현상

  • 이 분산된 분포를 정규 분포로 만들기 위해 표준화화 유사한 방식을 미니 배치에 적용하는 것이다. -> 평균은 0, 표준편차는 1로 유지하도록 BN층을 추가하는 것이다.

  • 적용하지 않을 때보다 대부분 성능이 좋아지기 때문에 많이 사용한다. 구현은 (p.331)

드롭아웃(dropout)

과적합 문제를 방지하기 위해 사용하는 기법이다.

훈련할 때 일정 비율의 뉴런만 사용하고, 나머지 뉴런에 해당하는 가중치는 업데이트 하지 않는 방법이다. -> 매 단계 뉴런을 바꾸어 가면 훈련시킨다.

구현은 (p.344)

조기 종료(early stopping)

이 역시 과적합을 회피하는 규제 기법이다.

매 에포크마다 검증 데이터에 대한 손실을 측정하여 모델의 종료 시점을 제어하는 것이다. -> 과적합이 보이면 훈련을 종료하는 것이다.

구현은 (p.355)

요약

데이터 사이언티스트들이 정확도를 조금씩 올린다는 말이 뭔지 알려주는 장이다.

배치 정규화, 드롭아웃, 조기 종료 구현은 역시 깃헙에!

profile
Learning bunch, mostly computer and language

0개의 댓글