상세 컨텐츠

본문 제목

[코칭스터디 Let's AI 2024 스터디] 3주차 미션: 경사하강법, Cross Validation, Bais-Variance 조절을 통한 학습 정확도 높이는 방법

통계, ML 방법론

by eun_00 2024. 6. 11. 21:24

본문

💡 경사하강법에 대해서 💡 

 

미분이란?

: 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구. 최적화에서 사용하는 기법

  • sympy.diff 를 사용해 미분 계산 가능 
  • 딥러닝에서는 컴퓨터가 자동으로 계산하여 최적화하여 사용
  • 미분은 함수 f의 주어진 점 (x, f(x))에서의 접선의 기울기를 구한다
  • 한점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가하는지, 감소하는지 알 수 있다.
  • 접선의 기울기가 음수일 때, 음수를 더해주면  x + f(x) < x 이렇게 되고, 결국 뺄셈이 되어 왼쪽으로 이동하여 결국 함수값이 증가
  • 미분값을 더하면 경사상승법이라 하고, 함수의 극대값의 위치를 구할 때 사용한다.
  • 미분값을 빼면 경사하강법이라 하고, 함수의 극소값의 위치를 구할 때 사용한다.
  • 경사상승/경사하강 방법은 극값에 도달하면 움직임을 멈춘다.
  • 극값에서 미분값이 0이므로 더이상 업데이트가 안된다. 그러므로 목적함수 최적화가 자동으로 끝난다.
  • 경사하강법 알고리즘은 gradient() 계산 함수를 사용한다.
  • while(abs(grad) > eps)  → 컴퓨터로 계산할 때 미분이 0이 되는 것은 불가능으로 eps보다 작을 때 종료하는 조건이 필요하다.
  • var = var - lr * grad → 이 부분이 x-미분f(x)를 계산하는 부분, lr은 학습률로서 미분을 통해 업데이트하는 속도를 조절한다. 
  • grad = gradient(var) → 종료조건이 성립하기 전까지 미분값을 계속 업데이트한다
  • 변수가 벡터인 다변수 함수인 경우, 편미분을 사용한다.
  • 각 변수별로 편미분을 계산한 그레디언트 벡터를 이용하여 경사하강/경사상승법에 사용할 수 있다.
💡 왜 딥러닝은 층이 여러개인가?  💡 

 

층이 깊을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빨리 줄어들어 효율적으로 학습이 가능하다.

즉, 적은 노드를 가지고도 복잡한 모델 학습을 시킬 수 있다. 

 

💡 최적화 주요 용어 💡 

 

  • Gradient Descent : First order iterative optimization algorithm for finding a local minimum of a differentiable function
  • Generalization : 일반화가 높다는 것은 train data와 test data 간의 차이가 별로 나지 않는다는 것
  • Under fitting vs Over fitting : 
  • Cross Validation : cross validation is a model validation tech for assessing how the model will generalize to an independent data set .

모델의 성능 평가를 위해 데이터를 training set, test set으로 분할한다. 모델을 학습시킬 때는 절대 test 데이터를 사용할 수 없기에, 모델의 파라미터를 추정하고 설정하는 과정에서 validation data이 필요하다. 즉 train data로 학습시키고, validation data로 하이퍼파라미터를 튜닝하고, test data로 최종 모델 성능을 평가한다.

training data를 k등분하고 validation set을 여러번 바꿔가며 반복적으로 시행하는 방법을 k-fold cross validation이라고 한다. 


출처:https://losskatsu.github.io/machine-learning/cross-validation/#%EC%B0%B8%EA%B3%A0%EB%A7%81%ED%81%AC

    • Bias variance trade off : we can derive that what we are minimizing cost can be decomposed into three different parts bias2, variance, and noise

지도학습 알고리즘이 훈련데이터의 범위를 넘어 지나치게 일반화하는 것을 예방하기 위해 두 종류의 오차(편향오차, 분산오차)를 최소화할 때 겪는 문제이다. 

편향은 학습 알고리즘에서 잘못된 가정을 했을 때 발생하는 오차이다. 실제로 데이터는 3차항 관계를 가지고 있는데 모델을 1차항으로 가정하게 되면 예측치와 실제값의 차이가 커지게 되므로 편향값이 커지게 된다. 편향값이 커지게 되면 모델이 데이터를 잘 설명하지 못하는 상태이므로 Underfitting 문제를 발생할 수 있다. 

분산은 훈련데이터에 있는 작은 변동에 모델이 과도하게 민감하기 때문에 발생하는 오차이다. 만약 데이터가 약 10차항의 관계를 가지고 있다고 가정하면, 이때 모델이 지나치게 민감하면 10차항 관계를 가진 데이터를 설명하기 위해 모델 또한 매우 복잡해질 것이고 분산값이 매우 커질 것이다. 자유도가 높은 모델은 높은 분산값을 가지기 쉬워 훈련데이터에 Overfitting 문제를 발생시킬 수 있다. 

통계적으로 학습방법이 좋은 테스트 데이터 성능을 내기 위해서는 낮은 variance 와 낮은 bias의 제곱이 필요하다. 이것의 관계는 trade off인데 이유는 아주 낮은 bias를 가진 방법을 얻는 것은 쉽지만 그에 따른 variance가 높을 수 있다. 

 

💡 Bias 와 Variance 조절을 통한 학습 정확도 향상 방법 💡 

 

- 학습데이터 양 , feature set 수정 

  • Variance 낮추고 Overfitting 에러를 줄이는 방법 
  • 중요한 feature의 선별적 사용(feature selection, dimensionality reduction)하여 모델 단순화 
  • 학습 데이터 양 늘려 noise가 가지는 영향력 줄이기 
  • Bias 낮추고 Underfitting 에러 줄이는 방법
  • 더 많은 feature 추가 

- 학습된 모델 내에서 조율

  • 각 모델별 조절할 수 있는 parameter 조절

ex. kNN → k값 높을수록 bias 높아지고, variance 낮아짐

  • regularization 통한 variance 감소 
  • Decision Tree 모델 특성상 noise에 민감하게 반응할 수 있다. 즉 bias보다 variance가 높은 모델이다. → tree pruning 통해 noise를 없애고 variance를 낮출 수 있음
  • ANN 은 hidden unit의 수가 늘어날수록 variance가 기하급수적으로 늘어난다. → hidden unit 수를 줄이던지, drop out 등의 기법을 활용
  • Linear model은 대부분 variance가 높다. → 다양한 regularization 기법 활용하여 bias 높이고 variance 낮출 필요

- 적절한 학습 모델 사용

  • Decision Tree는 variance가 높은 모델로 학습데이터가 적을 경우 정확도가 떨어질 수 있다. → 학습데이터 적을 경우 bayesian network와 같은 variance가 작으면서 높은 정확도를 가질 수 있는 모델을 사용하는 것이 유리하다.

- mixture, ensemble learning 사용

  • 서로 다른 학습 모델들로 앙상블 학습 사용 

출처:  

https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff

https://blog.naver.com/hisukdory/220748009009

 

💡 앙상블 기법 💡 

앙상블은 여러 모델을 이용해서 조화시키는 것으로 설명할 수 있다. 

여러 모델의 장점을 모아 전반적인 오류를 줄이고 각 모델의 한계를 극복할 수 있다.

  • Bootstrapping : any test or metric that uses random sampling with replacement

100 중 랜덤으로 뽑고, 랜덤으로 뽑고 ,여러개의 모델을 만들

  • Bagging and boosting : 

배깅은 bootstrap을 생성하고, 합쳐서, 여러 모델들의 예측값을 averaging or voting 하는 것, Booststrap Aggregating 줄임말이다. 

부스팅은 여러 모델을 순차적으로 학습해서 이전 모델 결과를 바탕으로 다음 모델 학습하는 기법.

하나하나의 모델들을 독립적으로 돌아가는게 아니라  weak learners 들의 모아 strong learner을 만듦.

 focuses on those specific training samples that are hard to classify, a strong model is built by combining weak learners in sequence where each learner learns from the mistakes of the previous weak learner. 부스팅은 정확도가 높게 나타나나 그만큼 outlier에 취약하기도 하다. AdaBoost, XGBoost, GradientBoost 등의 다양한 모델이 있다.

 

출처: https://wikidocs.net/160515

https://swalloow.github.io/bagging-boosting/




관련글 더보기