计算图与自动微分

1.自动微分概念

自动微分是利用链式法则来自动计算的一个复合函数的梯度

2.计算图

3.案例

f(x,w,b)=1ewx+b+1
计算步骤

f(x;w,b)w=f(x;w,b)h6h6h5h5h4h4h3h3h2h2h1h1w
f(x;w,b)b=f(x;w,b)h6h6h5h5h4h4h3h3h2h2b

当x=1,w=0,b=0时,可以得到
f(x;w,b)w|x=1,w=0,b=0
=f(x;w,b)h6h6h5h5h4h4h3h3h2h2h1h1w
=1×0.25×1×1×1×1×1
=0.25

4.前向模式和反向模式

f(x;w,b)w=f(x;w,b)h6h6h5h5h4h4h3h3h2h2h1h1w
f(x;w,b)b=f(x;w,b)h6h6h5h5h4h4h3h3h2h2b

这个多项目乘法可以从后往前算,也可以从前往后算
如果参数与函数之间有多条路径,可以将这多条路径上的导数再进行相加,得到最终的梯度

5.Pytorch案例

点击查看代码
import torch

a = torch.tensor(2.0, requires_grad=True)
b = torch.tensor(1.0, requires_grad=True)
x = 2 * a + 3 * b
y = 5 * a * a + 3 * b * b * b
z = 2 * x + 3 * y
print("a:", a)
print("b:", b)
print("x:", x)
print("y:", y)
print("z:", z)
z.backward()
print("Gradient at a=2.0", a.grad)

---------
a: tensor(2., requires_grad=True)
b: tensor(1., requires_grad=True)
x: tensor(7., grad_fn=<AddBackward0>)
y: tensor(23., grad_fn=<AddBackward0>)
z: tensor(83., grad_fn=<AddBackward0>)
Gradient at a=2.0 tensor(64.)

6.自动微分反向传播模式下的前馈神经网络反向传播算法

前馈神经网络的训练过程可以分为以下三步
1.前向计算每一层的状态和激活值,直到最后一层
2.反向计算每一层的参数的偏导
3.更新参数

7.静态计算图,动态计算图

静态计算图是在编译时构建计算图,计算图构建好之后在程序运行时不能改变。

Theano和Tensorflow

动态计算图是在程序运行时动态构建。两种构建方式各有优缺点。

DyNet,Chainer和PyTorch

静态计算图在构建时可以进行优化,并行能力强,但灵活性比较差低。动态计算图则不容易优化,当不同输入的网络结构不一致时,难以并行计算,但是灵活性比较高。

posted @   筷点雪糕侠  阅读(328)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示