본문 바로가기
혼공학습단

[혼공머신] 3주차(2)_확률적 경사 하강법

by netsgo 2024. 1. 21.
 

혼자 공부하는 머신러닝+딥러닝 - 예스24

- 혼자 해도 충분하다! 1:1 과외하듯 배우는 인공지능 자습서 이 책은 수식과 이론으로 중무장한 머신러닝, 딥러닝 책에 지친 ‘독학하는 입문자’가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있

www.yes24.com

 

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


확률적 경사 하강법(Stochastic Gradient Descent)은 산에서 내려올 때 가파른 경사를 따라 원하는 목표 지점에 도달하는 것과 같은 원리로 작동한다. 여기서 내려가야 하는 산은 손실 함수(loss function)에 해당한다. 전체 샘플에서 딱 하나의 샘플을 랜덤하게 골라 가장 가파른 길을 찾는 알고리즘을 확률적 경사 하강법이라고 한다. 랜덤하게 하나의 샘플을 선택하여 경사를 조금씩 내려가다가 모든 샘플을 사용하고도 목표 지점에 도달하지 못했다면 훈련 데이터를 다시 학습하며 목표 지점으로 향해 내려간다. 확률적 경사 하강법에서 훈련 데이터를 한 번 모두 사용하는 과정을 에포크(epoch)라고 부른다.

 

한 번에 1개의 샘플을 학습하는 것이 아니라 무작위로 몇 개의 샘플을선택해서 경사를 내려가는 방법도 있다. 이러한 알고리즘을 미니 배치 경사 하강법(minibatch gradient descent)이라고 한다. 극단적으로 한 번 경사로를 내려가기 위해 전체 샘플을 모두 사용할 수도 있다. 이를 배치 경사 하강법 (batch gradient descent) 이라고 한다.

 

 

손실 함수(Loss Function)


손실 함수(Loss Function)는 어떤 문제에서 머신러닝 알고리즘이 얼마나 엉터리인지를 측정하는 기준이라고 할 수 있다. 머신러닝의 학습은 이 손실 함수의 값을 최소화 시키기 위해 확률적 경사 하강법을 이용해 조금씩 이동하는 것이다.

 

이진 분류에서의 손실 함수를 로지스틱 손실 함수 또는 이진 크로스 엔트로피 손실 함수라고 한다. 다중 분류에서는 크로스 스 엔트로피 손실 함수를 사용한다.

 

사이킷런의 확률적 경사 하강법을 제공하는 대표적인 분류용 클래스는 SDGClassifier이며 sklearn.linear_model 패키지 아래에 있다. loss = 'log'로 로지스틱 손실 함수를 지정할 수 있으며 max_iter는 에포크 횟수를 지정할 수 있다. 확률적 경사 하강법은 점진적 학습이 가능한데 모델을 이어서 훈련할 때는 partial_fit() 메서드를 사용한다. 사이킷런의 SDGClassifier는 미니 배치 경사 하강법이나 배치 하강법은 제공하지 않는다.

 

훈련을 진행해 보면 훈련 데이터의 score는 에포크가 진행될수록 꾸준히 증가하지만 테스트 데이터의 score는 어느 순간 감소하기 시작한다. 이 지점이 모델이 과적합되기 시작하는 곳이다. 과적합이 시작하기 전에 훈련을 멈추는 것을 조기 종료(early stopping)이라고 한다. SDGClassifier는 일정 에포크 동안 성능이 향상되지 않으면 더 훈련하지 않고 자동으로 멈춘다.