본문 바로가기
머신러닝/머신러닝 실무

[머신러닝] 10주차 학습 알고리즘 최적화 : 경사하강법(Gradient Descent)

by udeserveit1 2024. 8. 22.

학습 정확도 

검증 정확도

예측 정확도 - 예측이 잘되었는지도 확인 

                     보통 8:2 . 8:1:1

                            7:3   7:1.5:1.5

 

경사하강법 (Gradient Descent)

함수의 최소값을 찾는 반복적인 최적화 알고리즘

   (곡선의 꼭짓점 찾기 = 기울기 0인 곳)

▪ 경사 하강을 이용하여 함수의 최소값을 찾는 방법

임의의 지점에서 시작하여 기울기의 음수에 비례하도록 움직임

▪ linear regression, logistic regression, SVM and neural network을 위한 최적화된 파라미터를 찾음

 

손실함수

- 실제값과 예측값의 차이를 구하는 함수

▪ 오차와 손실함수는 비례 관계

▪ 머신러닝 학습에서 손실함수 값을 최소화하는 파라미터(W, b)를 찾는 것이 목표

▪ 손실함수의 값을 최소화하기 위해 경사하강법 사용

▪ 평균제곱근(MSE, mean squared error)사용

 

 

비선형일 때 미분하여 기울기를 줄이며 최적의 해 찾음

▪ 기울기가 0일 때의 값을 사용(local minima)

가장 작은 꼭짓점일지 가장 큰 꼭짓점인지 모름 -> 따라서 오래 걸림 그래서 보통 제일 먼저 찾는 점을 답으로 한다

글로벌 미니마가 아닌 제대로 찾지 못한 로컬 미니마

 

 

 

 

비선형에서 많이 사용

▪ 2차원 이상의 곡선을 미분하여 경사(기울기)가 최소가 되는 점을 찾음

기울기가 0일 때의 값 사용(최소점)

▪ 데이터가 많으면, Global minima에 도달하기 까지 시간이 오래 걸림 (전체 훈련 세트 사용)

▪ Local minima에 빠지면 나오기 어려움

 

 

▪ 학습률 설정에 따라 Global minimum에 수렴하는 속도가 너무 느리거나, 학습 간격이 너무 넓어서 훈련데이터를 제대로 학습하지 못할 수 있음

▪ 학습률(Learning Rate): 훈련 데이터 학습 간격 설정 0.0001 ~ 0.1  ( 하이퍼 파라미터 ,개발자가 정하는 임의의 값)

 

 

경사하강법(Gradient Descent) 학습방법

 

선형 회귀 모델 : f(x) = wx + b 

 

 

반복(epoch) 수행

▪ 1회 반복(epoch)마다 각 파라미터를 전체 훈련데이터 세트로 업데이트 함

▪ 첫번째 (epoch): w ← 0, b ← 0

 

▪ 1회 반복(epoch)마다 편미분 수행

    - 학습률 = α

 

 

 

 

 

 

 

 

1000번 반복 

 

2500번 반복해서 에러가 234-> 0 으로 줌

100번과 2500 번의 오류차가 별로 나지 않아서 100번이 최적이라고 볼 수 있다.

 

확률적 경사하강법(Stochastic Gradient Descent:SGD)

 

경사하강법 보완하는 방법

 

SGD 학습에서는 각 샘플 데이터에 따라 가중치 갱신

▪ 잦은 가중치 갱신으로 수렴 시간이 오래 걸릴 가능성이 있음

▪ 잦은 가중치 갱신으로 local minima에서 갇혔을 때 빠져나올 가능성이 높음

- 전체 데이터를 나눈다 

 

 

▪ 미니 배치를 이용

▪ 매 스텝에서 1개의 배치를 무작위로 선택 후 gradient를 계산하여 Global Minima를 찾음

▪ 순차적으로 데이터의 기울기를 계산하지 않고, 미니 배치를 이용하여 학습

▪ 학습 단계 마다 배치가 변경되어 결과의 진폭이 크지만, 속도가 매우 빠름

▪ 일반적으로 데이터가 많으면 최적화에 오래 걸림

▪ 그러나 SGD는 미니배치를 이용, 학습속도가 매우 빠르다!

▪ SGD Classifier와 Regressor

 SGDClassifier

   ▪ 분류에 대한 다양한 손실 함수 및 패널티를 지원하는 확률적 경사하강법

손실 파라미터

  ▪ loss="hinge": (소프트마진) 선형 SVM

  ▪ loss="modified_huber": smoothed hinge loss

  ▪ loss="log": 로지스틱 회귀

- 세 가지 중 괜찮은 것을 찾아내야한다.

 

 

 

패널티 파라미터(= regularization, 정규화: 과대적합을 예방하고 성능을 높임)

normalizaition, standardzation,regularization 셋 다 다름

 

 penalty="L2": Ridge

   ▪ 손실함수에 가중치에 대한 제곱을 더하는 방법(가장 많이 사용)

   ▪ 변수 간 상관성 때문에 실제로 사용할 수 있는 정보가 적을 경우

   ▪ 독립 변수 간의 편차를 줄이기 위해 사용

 

 penalty="L1": Lasso

   ▪ 손실함수에 가중치의 절대값을 더해주는 방법

   ▪ 변수가 무수히 많은 경우, 관련성이 작은 변수들의 계수를 0으로 만들어

   ▪ 영향력 있는 변수들만 남겨놓는 방법(버린 것들이 영향력이 큰 변수들이라면 L2 사용)

   ▪ 중요 변수만 사용하여 해석력이 강하지만, 정보의 손실과 정확도의 감소가 발생

 

penalty="Elastic Net"

   ▪ L1, L2 혼합형

   ▪ 큰 데이터 세트에서 작동, Ridge와 Lasso의 장점을 모두 가짐

   ▪ 편차와 변수 수를 줄임

 

SGD Classification 이해 및 실습

  코랩 실습 진행

실제값과 비교

위의 내용 실행 시작부터의 시작

 

 

 

 

 

SGD Regression

  Feature Scaling을 위한 전처리 방법으로 Feature Scaling에 민감한 모델이나

데이터의 최소, 최대값을 모르는 경우나 데이터 크기의 편차가 큰 경우에 사용

 

 

 

 

▪ 선형 회귀 모델에 맞게 다양한 손실 함수와 패널티를 지원하는 확률적 경사하강법

▪ 일반적으로 대용량 데이터(10000개 이상)의 회귀문제에 적합

▪ 다른 경우(10000개 이하): Ridge, Lasso, ElasticNet 추천

-빅데이터란 만 개이상의 데이터 즉 sgd는 만 개 이상일 때에만 

 

MSE 제곱  - 값을 크게

MAE 루트 

 

 손실 파라미터

 

 loss="squared_loss"

   ▪ 보통의 최소 제곱 방법

 

 loss="huber"

  ▪ 모든 지점에서 미분가능하며, Outlier에 강함

  ▪ MSE와 MAE를 절충한 손실함수

 

 loss="epsilon_insensitive"

   ▪ epsilon보다 작은 오류에 무관한 손실함수

   ▪ 선형 Support Vector Regression에 사용

 

epsilon(𝜖)

▪ 오류에 대한 페널티가 주어지지 않는 허용 한계

alpha

▪ 정규화 항을 곱하는 상수

▪ 값이 높을수록 정규화가 강해짐

▪ 기본값=0.0001

toi

▪ 미세 조정값

SGD Regression 이해 및 실습

▪ 콘크리트 강도를 예측하기 위한 예제

▪ 총 1030개의 데이터

s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

학습 알고리즘의 특수성에 따른 선택

 

범주형 feature 적용 가능한 경우: Decision Tree / SVM / Logistic & Linear Regression / KNN

변주형 변수 (순서에 상관없이 두가지 이상의 그룹으로 나눌 수 있는 변수) ex) 색상 변수 = 빨간색, 노란색, 초록색

 

각 클래스에 가중치 적용 가능: SVM

데이터의 비중이 다르거나 중요도가 다를 때 적용

 

오직 주어진 feature vector에 의해서만 클래스 출력하는 경우: SVM / KNN

SVM: 집합 군 사이의 Support Vector에 의한 결정 경계로 클래스 분류

KNN: k개의 이웃 탐색 후 가장 많은 feature의 target으로 클래스 분류

 

정답에 가까울 확률(%)로 표현 0과 1사이의 값으로 반환 가능한 경우 : Logistic regression / Decision Tree

 

한번에 전체 데이터 집합을 사용해 모델을 학습하는 경우 : Decision Tree / Logistic regression / SVM classification

 

미니 배치로 나눈 후 한 번에 한 배치씩 반복적으로 학습하는 경우 : Naïve Bayes / Multilayer Perceptron / SGD Classifier / SGD Regressor / PassiveAgressive Classifier / PassiveAgressive Regressor

 

classification 과 regression 모두 사용가능한 경우 : DECISION TREE / SVM / KNN

Decision Tree와 KNN: Classification을 더 많이 사용

SVM: Regression과 Classification 모두 사용