# ML : Gradient Descent Tricks

Tricks for faster gradient descent!

  • 조금 더 빠른 속도로 Gradient Descent를 진행할 수는 없을까?

1. Feature Scaling


  • x1 : 0에서 2000까지 범위를 갖고 있음
  • x2 : 1에서 5까지 범위를 갖고 있음
    • x1과 x2의 범위 차가 매우 크기 때문에, 실제 그래프를 그리면 매우 narrow 할 것.
    • 이렇게 되면, global minimum(전역 최저 값)을 찾는 것이 매우 어렵다.
  • 각 변수의 값들을 전체 범위 크기만큼 나누어서 값을 계산하면 효율 적이다.
    • 이렇게 하면 각 값들의 범위가 0에서 1 사이로 수렴하기 때문이다.
 
  • 위의 그림은 feature scaling을 더욱 일반화 시켜서 표현한 것으로, 각 값들의 범위를 -1, 1 주변으로 수렴하도록 하는 것이다.
  • '대략적으로 비슷한 값'으로 맞춰주는 것이 중요한데, 너무 작거나 크면 안된다.

2. Mean Normalization

  • x에서 특정 값(여기서는 μ로 표현했다)을 뺀 후, 범위 값(max - min)으로 나누는 방식이다.
  • 여기서 μ은 전체 값의 평균을 의미하며, 이 때의 결과 값은 -0.5에서 0.5 사이가 된다.

3. Debugging, Learning Rate

  • x축의 반복 횟수에 따른 y축(J)의 움직임을 확인하고자 할 때, 반복 횟수가 증가할수록 J는 계속해서 감소할 것이다.
  • 강의에서는 10의 -3승을 한계점 으로 두는데, 이보다 작은 값으로 변할 때를 Global Minimum의 값으로 정한다고 한다.

  • 위의 그림은 반복 횟수(x)에 따른 J의 최소값(Cost Function)을 나타내고 있다.
  • min J에 해당하는 반복 횟수는 경우마다 다른데, 어떤 경우는 30번만에 나오는 경우도 있지만 또 다른 경우로는 3백만번을 해야 나오는 경우도 발생한다고 한다.
  • 위 그림은 잘못된 a 값으로 인하여 Gradient Descent가 제대로 동작하지 않는 경우이다.
  • 값이 수렴하지 못하고 계속 증가하거나, 값이 일정하게 수렴하지 않고 수렴과 증가를 번갈아가면서 보이는 경우에는 '코드의 문제점이 존재하지 않는 경우'를 기준으로 a 값이 큰 경우에 발생한다.
  • 그래서 a 값을 정할 때에는 처음에 작은 값으로 진행하다가 조금씩 증가시키고, 혹은 감소가 되지 않으면 적당한 값으로 감소시켜주는 방식을 반복해가면서 적용한다.
  • 최적 값을 찾기 위한 최적의 a 값을 찾는 과정에는 정확한 방도가 존재하지 않는다.
    • 몇 배의 값을 늘여가면서 개발자가 직접 설정해야 한다.
    • 강의에서 교수님은 3배씩 증가 시키면서 a를 찾으라고 하셨다. 










댓글