2022. 1. 21. 14:48ㆍDeep 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 |