경사 하강법이란?
경사 하강법이란 딥러닝 알고리즘 학습 시 사용되는 최적화 방법 중 하나이다
딥러닝 알고리즘 학습 시 목표는 손실함수(예측값과 정답값 간의 차이)를 최소화시키는 파라미터를 찾는 것이다
입력 데이터(훈련 데이터)에 따른 손실함수는 변화하고 그에 따라 가중치와 편향을 업데이트 한다
경사 하강법 종류
1) 확률적 경사 하강법
샘플 데이터 1개에 대한 그레디언트를 계산
*그레디언트 계산하는 한 번의 시도 : 에포크(epoch)
에포크마다 가중치를 업데이트하기 때문에
장점 : 계산 비용 적음
단점 : 가중치가 최적값에 수렴하는 과정이 불안정함
2) 배치 경사 하강법
전체 샘플들을 모두 선택해서 한번에 그레디언트를 계산
전체 훈련 데이터 세트를 사용해 한 번에 그레디언트를 계산하기 때문에
장점 : 최적값에 수렴하는 과정 안정적
단점 : 계산 비용 큼
3) 미니 배치 경사 하강법
배치 크기를 작게 해서 그레디언트를 계산
1) 과 2) 의 방법을 절충한 방법
사이킷런에서 경사 하강법 구현하기
사이킷런의 SGDClassifier 클래스로 로지스틱 회귀 문제를 포함한 여러 가 문제에서 경사 하강법을 적용할 수 있다
데이터 불러오기 및 세트 분할
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
# 데이터 불러오기
cancer = load_breast_cancer()
x = cancer.data
y = cancer.target
# 훈련 세트와 테스트 세트 분할
x_train, x_test, y_train, y_test = train_test_split(x, y, stratify = y, test_size = 0.2)
로지스틱 손실 함수 생성
from sklearn.linear_model import SGDClassifier
sgd = SGDClassifier(loss = 'log', # 로지스틱 회귀 적용
max_iter = 100, # 반복 횟수 지정
tol = 1e-3 # 반복할때마다 로지스틱 손실 함수의 값이 tol 값만큼 감소되지 않으면 반복 중단
)
tol 값이 설정되지 않으면 max_iter 값을 늘리라고 경고가 발생할 수 있음
따라서 로지스틱 손실 함수의 값이 최적값으로 수렴할 정도로 충분한 반복 횟수를 입력했는지 알 수 있다!
훈련 및 평가
sgd.fit(x_train, y_train)
sgd.score(x_test, y_test)
예측
sgd.predict(x_test)
주의 :
경사 하강법은 스케일에 민감한 알고리즘이므로 특성의 스케일을 맞추는 등의 전처리를 해야 한다
훈련 세트와 같은 비율로 검증 세트를 변환해야 한다