M.L (p.195)
Momentum : 운동량 물리와 관계가 있는 idea로
![]()
|
1 2 3 4 5 6 7 8 |
v ← αv - η * ∂L/∂W W ← W + v W : 갱신할 가중치 매개변수 ∂L/∂W : W에 대한 손실 함수의 기울기 η : 학습률 v : 속도. 기울기 방향으로 힘을 받아 물체가 가속되는 것을 나타냄 α : 마찰/저항에 해당(0.9) |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Momentum: def __init__(self,lr=0.01, momentum=0.9): self.lr = lr self.momentum = momentum self.v = None def update(self,params,grads): if self.v is None: self.v = {} for key, val in params.items(): self.v[key] = np.zeros_like(val) for key in params.keys(): self.v[key] = self.momentum * self.v[key] - self.lr * grads[key] params[key] += self.v[key] |
mometum을 모듈화한 코드다.
|
1 2 3 4 5 |
d = {1:'apple', 2 :'banana',3:'mango', 4:'fafa'} print(d) print(type(d)) for key,val in d.items(): print("key:"+str(key)+"val:"+str(val)) |
참고로 items 라는 함수는 dictionary 에서 key와 value 값을 쌍으로 나타내는 함수로 위의 코드를 돌리면
가 된다.
momentum에서는 v(물체의 속도) 변수를 dictionary를 사용하여 구현한다.
SGD와 다르게 공이 구르는 듯한 모습을 보여준다.