선형회귀분석 복습
무어 팬로즈 역행렬을 이용해 주어져 있는 데이터와 가장 가까운 선형 모델을 찾을 수가 있다.
경사하강법으로 선형회귀 계수 구하기
L2 노름 gradient 계산하기
여기서 사용되는 L2 노름은 n개의 데이터를 가지고 계산되기 때문에 i = 1 부터 n 까지의 더해준 다음 제곱하는 것이 아닌 평균값을 취해준다음 제곱근을 취해준다.
위의 미분결과의 Transpose(X)가 바로 gradient vector
손 풀이
경사하강법 알고리즘
X = np.array([1,1],[1,2],[2,2],[2,3])
y = np.dot(X, np.array([1,2])) + 3
beta_gd = [10.1, 15.1, -6.5] # [1,2,3] 이 정답
X_ = np.array([np.append(x,[1]) for x in X]) # 절편 추가
for t in range(5000): # 학습횟수
error = y - X @ beta_gd
grad = -np.transpose(X_) @ error
beta_gd = beta_gd - 0.01 * grad # learning rate = 0.01
경사하강법은 만능일까?
기존의 경사하강법과 달리 모든 데이터를 사용하여 업데이트하는 것이 아닌 데이터를 한 개 또는 일부분만 사용하여 업데이트 하는 것을 확률적 경사하강법(Stochastic gradient descent)라 한다.
SGD는 데이터의 일부(미니 배치)를 가지고 파라미터를 업데이트 하기 때문에 연산 지원을 좀 더 효율적으로 활용할 수 있으면서 기대값인 gradient와 유사한 결과를 뽑아낼 수 있다.
또한, 미니 배치 연산을 통해 확률적으로 목적식 모양이 바뀜으로써 지역 최소점이 아닌 전역 최소점에 수렴이 가능해지고, 이를 통해 볼록이 아닌 목적식들을 최적화 할 수 있다.
따라서, SGD에서는 학습률, 학습 횟수 외에 미니 배치까지 고려해야 할 필요가 있다.
오늘날 딥러닝에서 사용되는 데이터는 사이즈도 크고 양도 많기 때문에, 메모리 과부하가 올 수 있으므로, 미니배치를 통해 효율적인 연산 지원을 하는 SGD가 많이 사용된다.