본문바로가기
[인공지능, 수학으로 타파] 경사하강법으로 딥러닝 따라하기
수학동아 2020.12.03 09:42

 

 

Mathematics for AI #8

경사하강법로 딥러닝 따라하기

 

 

 

 

*출제자의 한 마디*

 

저번 시간에는 변수가 많이 포함된 함수가 주어졌을 때, 어떻게 하면 함수의 변화를 파악할 수 있는지에 대하여 간단하게 살펴보았습니다. 이러한 다변수 함수에서 어느 하나의 변수에 대하여 미분한 결과인 편도함수를 쉽게 계산할 수 있었죠. 또한 편도함수를 이용하면 좌표축과 평행하는 방향에서의 함수의 변화를 쉽게 파악할 수 있음을 실습을 통해 확인할 수 있었습니다.  

 

 

이번 시간에는 경사하강법(Gradient Descent Algorithm)에 대하여 간단히 살펴봅시다.

 

 

 

--------------

 

 

경사하강법

 

경사하강법은 함수의 최솟값을 구할 때 주로 사용하는 방법이다. 최솟값을 정확하게 구하기 어려울 때 그래프의 임의의 한 점에서 함수의 기울기를 구하고, 기울기가 완만한 쪽으로 조금씩 이동하며 기울기가 0인 지점을 찾는다. 그러면 그 지점에서 최솟값을 얻는다.

 

 

(1) 기울기 벡터는 ‘그레이디언트(Gradient)’라고도 불리는데, 접선의 기울기를 벡터로 표현한 것이다. f (x, y)의 편도함수를 성분으로 가지며, 경사하강법에서는 이 값의 크기가 작은 쪽으로 이동한다.

 

 

grad f = (f_{x}(x, y), f_{y}(x, y))

 

 

(2) 방향도함수는 함수 f (x, y)가 점 (a, b)에서 미분가능할 때 그 점에서의 순간변화율, 즉 기울기를 구하는 도함수다. 단위벡터를 u = (u_{1}, u_{2})라고 할 때, 점 (a, b)에서의 방향도함수는 다음과 같다.

 

 

D_{u}f(a, b) = f_{x}(a, b)u_{1} + f_{y}(a, b)u_{2}

 

 

 

 

 

 

 

 

경사하강법 더 쉽게 이해하기

  

 

경사하강법 그래프를 보면 생각나는 것이 있다. 바로 스키를 타고 높은 산에서 지그재그 모양으로 내려오는 모습이다. 앞이 보이지 않는 깜깜한 밤에 산을 내려오는 것을 상상하면 경사하강법을 더 쉽게 이해할 수 있다. 앞이 안 보이면 모든 방향으로 손과 발을 조금씩 더듬어서 산이 낮아지는 쪽으로 이동해야 지면에 도달할 수 있기 때문이다.

 

이처럼 경사하강법은 단번에 풀기 어려운 문제를 해결하기 위해 구하고자 하는 답보다 큰 값을 임의로 정하고 조금씩 이동하며 최적의 값을 얻는 과정이다.

 

--------------

 

 

 

문제

점 (1, 2)에서 단위벡터 u = (u_{1}, u_{2}) = (\cos (\frac{\pi }{6}), \sin (\frac{\pi }{6})) 방향으로의 함수 f(x, y) = x^{3}-3xy+4y^{2}의 방향도함수 D_{u}f(1, 2)를 구하라. 

 

 

 

 

 

 

--------------

 

 

풀이에 필요한 SageMath 코딩 명령어

 

 

var('x, y')

f(x, y) = x^3 - 3*x*y + 4*y^2

변수 x, y를 지정한 뒤, 함수  f(x,y)=x^{3}-3xy+4y^{2}를 입력한다.

 

 

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방향으로의 방향도함수 D_{u}f(1,2)를 출력한다. dot_product는 방향벡터와 그레이디언트를 곱해서 방향도함수를 알 수 있게 해주는 명령어다.  

 

 

 

 

-끝-

 

 

  • 폴리매스 문제는 2019년도 정부의 재원으로 한국과학창의재단의 지원을 받아 수행된 성과물입니다.

  • ☎문의 02-6749-3911