기존의 경사하강법
학습 속도를 가속하기 위한 방법 중 모멘텀 momentum, 다음의 수식을 따른다.
모멘텀 하이퍼파라미터는 일반적으로 0.9 근방의 값으로 설정, 두 식을 하나의 식으로 표현
이전의 가중치에 대한 연산이 추가된 모습과 학습 속도가 r(v_t-1) 만큼 가속하다는 것을 알 수 있다.
v_t 는 이동 벡터로 아래와 같이 구한다.
이전의 모멘텀들이 누적되는 모습
def gradient_momentum(self, x, y):
x_b = np.c_[x, np.ones((x.shape[0],1))] # 입력 데이터에 편향값을 위한 1의 추가
self.n_iterations = x.shape[0]
for iterations in range(self.n_iterations):
if iterations != 0:
self.momentum = self.momentum + self.momentum_p * gradients
gradients = (2/self.n_iterations) * x_b.T.dot(x_b.dot(self.theta) - y)
self.theta = self.theta - self.eta * gradients - self.momentum
이전의 가중치를 사용한 모멘텀의 계산,
모멘텀 역시 그 크기에 따라 가중치가 발산할 수 있어, 크기를 조절해야 한다.
gd2 = gradient_descent()
gd2.eta(0.001)
w = gd2.gradient_momentum(train_input, test_input)
w
>>>
array([[ 21.23075507],
[-164.61678918]])
'implement_ml_models' 카테고리의 다른 글
implement_nesterovAcceleratedGradient (0) | 2022.11.20 |
---|---|
implement_stochasticGradientDescent (0) | 2022.11.19 |
implement_gradientdescent (0) | 2022.11.18 |
implement_ridge_regression(L2) (0) | 2022.11.18 |
implement_linear_regression (0) | 2022.11.18 |