경사하강법 (심화)
np.linalg.pinv 를 이용하면 데이터를 선형모델(linear model)로 해석하는 선형회귀식을 찾을 수 있다
경사하강법으로 선형회귀 계수 구하기
•
선형회귀의 목적은 이고, 이를 최소화 하는 를 찾아야 하므로, 다음과 같은 그레디언트 벡터를 구해야 한다
•
이제 목적식을 최소화하는 를 구하는 경사하강법 알고리즘은 다음과 같다
경사하강법 기반 선형회귀 알고리즘
•
norm : L2-노름을 계산하는 함수
•
lr : 학습률
•
T : 학습 횟수
for t in range(T):
error = y - X @ beta
grad = - transpose(X) @ error
beta = beta - lr * grad
Python
복사
→ 경사하강법으로 최적화를 시킬 때는 반드시 학습률과 학습 횟수를 적절하게 선택하는 것이 중요하다
경사하강법은 만능일까?
•
역행렬을 사용하지 않고도 최적화 시킬 수 있다는 장점
•
이론적으로 경사하강법은 미분가능하고 블록(convex) 한 함수에 대해선 적절한 학습률과 학습횟수를 선택했을 때 수렴이 보장되어 있다
•
특히, 선형회귀의 경우 목적식 은 회귀계수 에 대해 볼록함수 이기 때문에 알고리즘을 충분히 돌리면 수렴이 보장된다
•
하지만 비선형회귀 문제의 경우 목적식이 볼록하지 않을 수 있으므로 수렴이 항상 보장되지는 않는다
확률적 경사하강법
•
확률적 경사하강법 (stochastic gradient descent) 은 모든 데이터를 사용해서 업데이트하는 대신, 데이터 한개 또는 일부 활용하여 업데이트한다
•
볼록이 아닌 (non-convex) 목적식은 SGD 를 통해 최적화할 수 있다
•
GSD 는 데이터의 일부를 가지고 파라미터를 업데이트하기 때문에 연산자원을 좀 더 효율적으로 활용하는데 도움이 된다