다변수에 대해 미분(differentiation)하는 방법

2022. 1. 21. 14:48Deep Learning/PyTorch

# 미분(differentiation)

sympy : 함수를 symbolic하게 이해하도록 하는 라이브러리
https://docs.sympy.org/latest/index.html
import sympy.diff
from sympy.abc import x, y

 

미분 정의

 

여러 개의 변수에 대해 미분하기 위해서,

e_i 벡터를 사용하면 된다.

e_i 벡터란, 주어진 값 x_i 가 있을 때에  x_i 에만 영향을 준다.

                  i번째 값만 1이고, 나머지는 0인 단위벡터를 말한다.

                  따라서 이를 활용하면, 특정 x벡터의 i번째 변수에만 계산을 적용할 수 있다. (=> 편미분)

 

 

# 그레디언트(gradient) 벡터

각 변수에 대한 편미분을 계산한 벡터.

 

nabla f = ( dx1 f, dx2 f, ... , dxn f )

주어진 다변수 입력을 가지는 함수의 그레디언트(기울기) 벡터를 표시하는 기호.

 

Q. f'(x)대신 nabla f를 사용하면 주의할 점.

앞서 사용한 수직선 상에서 update하는 경사하강법( abs(grad)로 종료조건 설정 ) 이 아닌,

일반적인 n차원 공간에서 벡터에 적용되는 경사하강법( Vector라서 norm(grad)로 종료조건 설정 )을 적용함.

++ 3차원 공간 상에서의 화살표 움직임으로 도식화 가능

 

 

활용 예시. 선형회귀 문제

물론 무어펜로즈 역행렬로도 계산이 가능하지만, 경사하강법을 사용하여 해결하는 것이 일반적인 문제에 적용될 수 있는 방법이다.

하지만 경사하강법을 사용할 때는, 학습률(learing rate)와 학습횟수(epoch)가 중요 하이퍼파라미터로, 이를 잘 조정하지 않으면 수렴되지 않을 수 있다.

하지만 비선형문제에서는 항상 최대/최소점을 보장하지는 못한다.

 

 

 

 

 

 

 

반응형

'Deep Learning > PyTorch' 카테고리의 다른 글

Module 클래스  (0) 2022.01.28
PyTorch 란?  (0) 2022.01.28
Dataset의 기본 구성 요소  (0) 2022.01.28
역행렬(inverse Matrix) 구하는 방법  (0) 2022.01.21
Vector (벡터)란?  (0) 2022.01.21