일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- phpredis
- AWS
- 블레이드 템플릿
- deep learning
- rabbitmq
- Node
- javascript
- mariadb
- NCP
- docker
- Go
- Switch
- CentOS
- laravel
- python
- fastapi
- Babel
- For
- nginx
- php
- Redux
- SQL
- linux
- nodejs
- 기초 수학
- React
- Machine Learning
- Redis
- Backbone.js
- webpack
- Today
- Total
개발일기
기초 수학 - Pytorch, Tensorflow를 활용한 자동 미분 본문
기초 수학 - Pytorch, Tensorflow를 활용한 자동 미분
Flashback 2024. 6. 24. 18:33
자동 미분(Auto Differentiation)
자동 미분은 함수의 미분을 자동으로 계산하는 기법을 의미한다. 쉽게 말하면 Tensorflow, Pytorch와 같이 머신러닝 라이브러리를 통해 함수의 기울기(미분값)을 계산하는것을 의미한다. 자동 미분은 $ \displaystyle \lim_{ x\to 0}\frac{f(x+h) - f(x)}{h} $ 와 같이 미세한 차이를 바탕으로 미분값을 추정하는 수치 미분보다 정확하며 복잡한 함수에서도 편리하게 미분값을 계산할 수 있다.
- 수치 미분: 순방향으로 계산이 이루어진다. 입력 변수의 변화량을 바탕으로 출력값을 계산해 나간다.
- 자동 미분: 수치 미분과 반대로 역방향으로 계산이 이루어진다. 순방향과는 반대의 개념으로 출력값을 바탕으로 입력 변수의 변화량을 계산해 나간다. 머신 러닝의 핵심인 역전파 알고리즘(BackPropagation)이 자동 미분의 역방향 계산을 의미한다.
Pytorch 자동 미분
Pytorch를 활용하여 y값이 $ y = x^2 + 2x + 1 $ 이며 x가 3일 때의 미분을 자동 미분 라이브러리를 통해 구해보자
import torch
x = torch.tensor(3.0) # x를 텐서로 생성
x.requires_grad_(True) # 해당 텐서를 추적하여 미분 계수를 구하기 위해 True로 설정
y = x**2 + 2*x + 1 # y미분
y.backward() # 역전파 알고리즘
print(x.grad) # 미분계수
# tensor(8.)
requires_grad_: 연산 그래프를 생성하고 기울기를 계산할 수 있도록 True로 설정한다. 해당 텐서와 관련된 모든 연산이 그래프에 기록되어 텐서의 미분 계수를 구할 수 있다. False로 설정하면 역전파를 수행할 때 미분 계수가 기록되지 않는다.
backward(): y에 대한 역전파를 수행하기 위해 사용한다. pytorch에서 순전파는 베타버전이 존재하긴 하지만 역전파를 주로 활용한다.
grad: 해당 변수의 미분계수(경사도)를 출력한다.
미분계수가 정확하게 구해졌는지 직접 계산하면 $ \frac{\mathrm{d} y}{\mathrm{d} x} = 2x + 2 $ 식이 성립되고 $ x $ 가 3일때의 미분 계수이므로 미분 계수는 8이 나오게 된다. 정확하게 계산된 것을 확인할 수 있다.
Tensorflow 자동 미분
# Tensorflow Auto Differentiation
import tensorflow as tf
x = tf.Variable(3.0)
with tf.GradientTape() as t: # with라는 문구 내에서 미분 계수를 기록
t.watch(x)
y = x**2 + 2*x + 1
print(t.gradient(y, x))
# tf.Tensor(8.0, shape=(), dtype=float32)
with: Pytorch는 코드의 전체에서 경사를 추적하지만 Tensorflow는 with라는 문구 내에서만 경사 추적을 한다.
GradientTape() : 미분 계수를 기록하는 함수
watch: Pytorch이 requires_grad(True)처럼 해당 텐서의 경사를 추적한다.
참고 사이트:
https://colab.research.google.com/drive/1CsuKz3P04C7PqFtEnCoLQYKDB8xKthnx?usp=sharing
'Deep Learning, Machine Learning > 기초 수학' 카테고리의 다른 글
기초 수학 - 편미분의 연쇄 법칙(Chain Rule In Partial Derivative) (0) | 2024.07.03 |
---|---|
기초 수학 - 편미분(Partial Derivative) (0) | 2024.06.29 |
기초 수학 - 다양한 미분 법칙 (0) | 2024.06.01 |
기초 수학 - 델타 논법을 통한 미분 계수 구하기 (0) | 2024.05.26 |
기초 수학 - 미분(Differential)의 개념 (0) | 2024.05.18 |