본문 바로가기
Science: Machine Learning

Gradient Descent: Python SciPy

by riwonet 2024. 10. 3.

1. 경사 하강과 최솟값
경사 하강은 이름과 같이 경사가 줄어드는 쪽으로 업데이트 됩니다. 구체적으로는 각 파라미터를 편미분한 값에 대해 학습 상수를 음수화 한 값을 곱하는 방식으로 업데이트가 진행되며 비용함수가 최솟값에 도달하면 멈추게 됩니다.

  • 전역 최솟값: 가장 비용함수가 작은 값으로 단 하나 존재합니다.
  • 국소 최솟값: 근처에 있는 다른 점들에 비해 상대적으로 적은 비용함수 값이 들며 여럿이 존재합니다. 초기값에 영향 받아 전역 최솟값에 도달하지 못할 수 있으며, 초기값 기준 가장 가까운 최솟값에 수렴하게 되는 것과 관계가 있습니다.

 

2. 경사 하강과 학습 상수
경사 하강법을 적용하면 경사값이 양수이든 음수이든 언제나 최솟값을 향해 수렴이 이루어지게 되는데, 이와 관련해 학습 상수를 설정함에 있어 다음과 같은 사항들을 고려해야 합니다.

  • 학습 상수는 비교적 작은 양수 값으로 설정하며, 수렴 속도를 조정하게 됩니다. 값이 너무 작으면 수렴 속도가 느려지고, 너무 크면 수렴이 되지 않게 됩니다.
  • 학습 상수가 너무 작으면 수렴이 시간 오래 걸리고, 학습 상수가 너무 크면 발산(overshoot)하게 됩니다.
  • 학습 상수를 고정하더라도 경사값이 줄어듦에 따라 속도가 느려지면서 국소 최소값에 도달할 수도 있으며, 국소 최솟값에 도달하면 경사값이 0이 되며 수렴하게 되어 더 이상 업데이트가 일어나지 않습니다.

 
3. 경사 하강의 구현 방법
경사 하강 알고리즘을 구현하는 데에는 다음의 두 가지 방법이 있습니다.

  • Batch 경사 하강법: 모든 학습 샘플들을 전부 이용하여 한번에 경사 하강하는 방법입니다. 경사값을 전부 한꺼번에 더하고, 학습 상수에 마이너스를 곱한 값을 통해 파라미터를 업데이트 합니다.
  • Stochastic 경사 하강법: 하나의 샘플을 그때마다 이용하여 업데이트하는 방법입니다. 매 순간의 값을 이용하여 구한 경사값에 대해, 학습 상수에 마이너스를 곱한 값을 통해 파라미터를 업데이트 합니다.

4. Python을 통한 경사 하강의 구현

제가 파이썬 SciPy를 통해 구현해본 경사 하강입니다.
위와 같이 경사 하강 과정을 확인할 수 있습니다.