Python/[코칭스터디 9기] 인공지능 AI 기초 다지기

[인공지능(AI) 기초 다지기] 3. 기초 수학 첫걸음 (4)

김초송 2023. 2. 7. 20:31

2. 경사하강법

 

4) 경사하강법 1

 

- 미분(Differentiation)

  • 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구
  • 최적황서 제일 많이 사용하는 기법
  • f(x + h) - f(x) : 기울기, 변화율
  • 미분은 변화율의 극한(limit)으로 정의
  • sympy.diff 로 계산 가능

 

- 미분의 이용

  • 미분은 함수 f의 주어진 점 (x, f(x))에서의 접선의 기울기
  • 한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가/감소하는 지 알 수 있음
    증가 : 미분값 +
    감소 : 미분값 -
  • 미분값을 더하면 경사상승법(gradient ascent)
    함수의 극대값의 위치를 구할 때 사용 = 목적함수를 최대화 할 때
  • 미분값을 빼면 경사하강법(gradient descent)
    함수의 극소값의 위치를 구할 때 사용 = 목적함수를 최소화 할 때 
  • 경사상승/경사하강 방법은 극값에 도달하면 움직임을 멈춤 = 최적화 완료
  • 미분값이 음수라서 x + f(x) < x 는 왼쪽으로 이동하여 함수값이 증가

# 경사하강법 알고리즘
var = init
grad = gradient(var)

while (abs(grad) > eps) : # eps보다 미분의 절댓값이 더 작아지게 되면 종료
    var = var -lr *grad # x − λf′(x)를 계산하는 부분
    grad = gradient(var)
  • gradient : 미분을 계산하는 함수
  • init : 시작점
  • lr : 학습률 - 미분의 업데이트 속도 조절
  • eps : 알고리즘 종료 조건

 

- 변수가 벡터일 경우

  • 벡터가 입력인 다변수 함수의 경우 편미분(partial differentiation) 사용
  • 특정 방향의 좌표축으로 이동하는 형식으로 미분을 정의
  • i번째 방향에서의 변화율만 계산할 수 있음
  • ei는 i번째 값만 1이고 나머지는 0인 단위벡터
    x 방향으로서의 편미분만 계산한다면 y를 상수 취급하고 x에 대해 미분한 결과만 
  • 각 변수별로 편미분을 계산한 그래디언트(gradient) 벡터를 이용하여 경사하강/상승법에 사용

 

- 기울기(Gradient) 벡터

  • -f 그래디언트 방향으로 따라가기만 하면 f(x, y)의 최솟값에 도달
  • 그래디언트 벡터는 가장 빨리 증가하는 방향으로 표시
    -그래디언트 벡터는 임의의 점에서 출발해서 최솟점으로 가장 빨리 감소하는 방향으로 움직이게 됨
  • 주어진 점에서 극댓점, 극솟점으로 향하는 방향을 알 수가 있음
  • 경사상승법, 경사하강법으로 최적화할 수 있음

# 경사하강법 알고리즘
var = init
grad = gradient(var)
while (norm(grad) > eps):
    var = var - lr * grad
    grad = gradient(var)
  • Input : gradient, init, lr, eps / Output : var
  • gradient : 그래디언트 벡터를 계산하는 함수
  • init : 시작점
  • lr : 학습률
  • eps : 알고리즘 종료 조건
  • 벡터는 절댓값 대신 노름을 계산해서 종료조건 설정