본문 바로가기

DeepLearning Specialization(Andrew Ng)/Improving Deep Neural Networks

[Week 2] Programming Assignments

728x90

 과제를 하며 momentum 에 대해 다시 고민해보았다.

 

W[l]은 층별로 모두 다른 parameter이며 이를 iteration과 헷갈리면 안된다. 

즉, Vdw[l] = beta * Vdw[l-1] + (1-beta)dw[l] 가 아니고

Vdw[l] := beta * Vdw[l] + (1-beta)dw[l] 이다. 이것은 코딩형식이므로 런던 온도의 예시와 같게 만들어준다면,

 

Vdw[l](1) = beta * Vdw[l](0) + (1-beta)dw[l]
=> update( W[l] := W[l] - a*VdW[l])
Vdw[l](2) = beta * Vdw[l](1) + (1-beta)dw[l]
=> update
Vdw[l](3) = beta * Vdw[l](2) + (1-beta)dw[l]
=> update
Vdw[l](4) = beta * Vdw[l](3) + (1-beta)dw[l]
=> update

... 이다. 

 

 

 이 때, 온도예시는 theta1~theta365의 변수가 있었는데, 여기서는 그것이 dw[l]로 대체 되었다. 

주목할 점은 Vdw가 갱신될 때마다 W가 update되어야 한다는 것이다.  

 

 이 update를 통해 dW는 새로운 값으로 정의되며 매번 다른 값을 가진다.(코드 형식에서 그냥 dW라고 표현되어 헷갈릴 수 있음. 쉽게 말하면 같은 값이 재활용되지 않는 것. dW라고 표현되어 있지만 이것은 매 iteration마다 다른 값이 업데이트 되어 다른 값을 가짐)

 

알아보기 쉽게 첫번째 dw[l] = theta(1) 이라고 한다면

 

Vdw[l](1) = beta * Vdw[l](0) + (1-beta)theta(1)
=> update( W[l] := W[l] - a*VdW[l]
Vdw[l](2) = beta * Vdw[l](1) + (1-beta)theta(2)
=> update
Vdw[l](3) = beta * Vdw[l](2) + (1-beta)theta(3)
=> update

 

Vdw[l](4) = beta * Vdw[l](3) + (1-beta)theta(4)
=> update

 

라고 표현할 수 있다. 즉, 앞서 살펴보았던 온도-day 에서의 모멘텀과 마찬가지로 적용되는 것.

위의 식을 코드화한다면 과제 혹은 강의에서 확인할 수 있듯이 

Vdw[l] := beta * Vdw[l] + (1-beta)dw[l]
W:= W-a*Vdw 

가 된다. 

728x90