Mathematics for AI #8
경사하강법으로 딥러닝 따라하기
*출제자의 한 마디*
저번 시간에는 변수가 많이 포함된 함수가 주어졌을 때, 어떻게 하면 함수의 변화를 파악할 수 있는지에 대하여 간단하게 살펴보았습니다. 이러한 다변수 함수에서 어느 하나의 변수에 대하여 미분한 결과인 편도함수를 쉽게 계산할 수 있었죠. 또한 편도함수를 이용하면 좌표축과 평행하는 방향에서의 함수의 변화를 쉽게 파악할 수 있음을 실습을 통해 확인할 수 있었습니다.
이번 시간에는 경사하강법(Gradient Descent Algorithm)에 대하여 간단히 살펴봅시다.
--------------
경사하강법
경사하강법은 함수의 최솟값을 구할 때 주로 사용하는 방법이다. 최솟값을 정확하게 구하기 어려울 때 그래프의 임의의 한 점에서 함수의 기울기를 구하고, 기울기가 완만한 쪽으로 조금씩 이동하며 기울기가 0인 지점을 찾는다. 그러면 그 지점에서 최솟값을 얻는다.
(1) 기울기 벡터는 ‘그레이디언트(Gradient)’라고도 불리는데, 접선의 기울기를 벡터로 표현한 것이다. f (x, y)의 편도함수를 성분으로 가지며, 경사하강법에서는 이 값의 크기가 작은 쪽으로 이동한다.
grad
(2) 방향도함수는 함수 f (x, y)가 점 (a, b)에서 미분가능할 때 그 점에서의 순간변화율, 즉 기울기를 구하는 도함수다. 단위벡터를 u = 라고 할 때, 점 (a, b)에서의 방향도함수는 다음과 같다.
경사하강법 더 쉽게 이해하기
경사하강법 그래프를 보면 생각나는 것이 있다. 바로 스키를 타고 높은 산에서 지그재그 모양으로 내려오는 모습이다. 앞이 보이지 않는 깜깜한 밤에 산을 내려오는 것을 상상하면 경사하강법을 더 쉽게 이해할 수 있다. 앞이 안 보이면 모든 방향으로 손과 발을 조금씩 더듬어서 산이 낮아지는 쪽으로 이동해야 지면에 도달할 수 있기 때문이다.
이처럼 경사하강법은 단번에 풀기 어려운 문제를 해결하기 위해 구하고자 하는 답보다 큰 값을 임의로 정하고 조금씩 이동하며 최적의 값을 얻는 과정이다.
--------------
문제
점 (1, 2)에서 단위벡터 방향으로의 함수
의 방향도함수
를 구하라.
--------------
풀이에 필요한 SageMath 코딩 명령어
①
var('x, y')
f(x, y) = x^3 - 3*x*y + 4*y^2
변수 x, y를 지정한 뒤, 함수 를 입력한다.
②
u = vector([cos(pi/6), sin(pi/6)])
gradf = f.gradient()
단위벡터 u를 입력하고, 함수 f의 기울기 벡터를 구한다.
③
print("Duf(1, 2) =",
gradf(1, 2).dot_product(u))
점 (1,2)에서 주어진 단위벡터 u방향으로의 방향도함수 를 출력한다. dot_product는 방향벡터와 그레이디언트를 곱해서 방향도함수를 알 수 있게 해주는 명령어다.
-끝-