当前位置: 首页 > news >正文

想找人做网站免费网站在线客服软件

想找人做网站,免费网站在线客服软件,潍坊做网站公司潍坊网络公司,厚街做网站【深度学习】—— 自动微分 自动微分一个简单的例子 非标量变量的反向传播分离计算Python控制流的梯度计算 自动微分 求导是⼏乎所有深度学习优化算法的关键步骤。虽然求导的计算很简单,只需要⼀些基本的微积分。但对于复杂的模型,⼿⼯进⾏更新是⼀件很…

【深度学习】—— 自动微分

  • 自动微分
    • 一个简单的例子
  • 非标量变量的反向传播
  • 分离计算
  • Python控制流的梯度计算

自动微分

求导是⼏乎所有深度学习优化算法的关键步骤。虽然求导的计算很简单,只需要⼀些基本的微积分。但对于复杂的模型,⼿⼯进⾏更新是⼀件很痛苦的事情(⽽且经常容易出错)。深度学习框架通过⾃动计算导数,即⾃动微分(automatic differentiation)来加快求导。实际中,根据我们设计的模型,系统会构建⼀个计算图(computational graph),来跟踪计算是哪些数据通过哪些操作组合起来产⽣输出。⾃动微分使系统能够随后反向传播梯度。这⾥,反向传播(backpropagate)意味着跟踪整个计算图,填充关于每个参数的偏导数。

一个简单的例子

作为一个演示例子,假设我们想对函数 y = 2 x ⊤ x y = 2\mathbf{x}^\top \mathbf{x} y=2xx 关于列向量 x \mathbf{x} x 求导。首先,我们创建列向量 x \mathbf{x} x 并为其分配一个初始值。

import torch
x = torch.arange(4.0).view(-1, 1)  # 将 x 转换为列向量
x

输出:

tensor([0., 1., 2., 3.])

在我们计算 y y y 关于 x \mathbf{x} x 的梯度之前,我们需要一个地方来存储梯度。重要的是,我们不会在每次对一个参数求导时都分配新的内存。因为我们经常会成千上万次地更新相同的参数,每次都分配新的内存可能很快就会将内存耗尽。注意,一个标量函数关于向量 x \mathbf{x} x 的梯度是向量,并且与 x \mathbf{x} x 具有相同的形状。

x.requires_grad_(True)  # 等价于 x = torch.arange(4.0).view(-1, 1).requires_grad_(True)
x.grad  # 默认值是 None

现在让我们计算 y y y

y = 2 * torch.dot(x, x)  
y

输出:

tensor(28., grad_fn=<MulBackward0>)

x \mathbf{x} x 是一个 4×1 的列向量,计算 x ⊤ x \mathbf{x}^\top \mathbf{x} xx 得到一个标量输出。接下来,我们通过调用反向传播函数来自动计算 y y y 关于 x \mathbf{x} x 每个分量的梯度,并打印这些梯度。

y.backward()
x.grad

输出:

tensor([ 0.,  4.,  8., 12.])

函数 y = 2 x ⊤ x y = 2\mathbf{x}^\top \mathbf{x} y=2xx 关于 x \mathbf{x} x 的梯度应为 4 x 4\mathbf{x} 4x。让我们快速验证这个梯度是否计算正确。

x.grad == 4 * x

输出:

tensor([[True],[True],[True],[True]])

现在让我们计算 x \mathbf{x} x 的另一个函数。

# 在默认情况下,PyTorch会累积梯度,我们需要清除之前的值
x.grad.zero_()
y = x.sum()
y.backward()
x.grad

输出:

tensor([[1.],[1.],[1.],[1.]])

非标量变量的反向传播

y y y 不是标量时,向量 y \mathbf{y} y 关于向量 x \mathbf{x} x 的导数的最自然解释是一个矩阵。对于高阶和高维的 y \mathbf{y} y x \mathbf{x} x,求导的结果可以是一个高阶张量。

然而,虽然这些更奇特的对象确实出现在高级机器学习中(包括深度学习中),但当我们调用向量的反向计算时,我们通常会试图计算一批训练样本中每个组成部分的损失函数的导数。在这里,我们的目的不是计算微分矩阵,而是单独计算批量中每个样本的偏导数之和。

对非标量调用 backward 需要传入一个 gradient 参数,该参数指定微分函数关于 self 的梯度
在我们的例子中,我们只想求偏导数的和,所以传递一个 1 的梯度是合适的。

x.grad.zero_()
y = x * x
# 等价于 y.backward(torch.ones(len(x)))
y.sum().backward()
x.grad

分离计算

有时,我们希望将某些计算移动到记录的计算图之外。例如,假设 y y y 是作为 x x x 的函数计算的,而 z z z 则是作为 y y y x x x 的函数计算的。想象一下,我们想计算 z z z 关于 x x x 的梯度,但由于某种原因,我们希望将 y y y 视为一个常数,并且只考虑到 x x x y y y 被计算后发挥的作用。

在这里,我们可以分离 y y y 来返回一个新变量 u u u,该变量与 y y y 具有相同的值,但丢弃计算图中如何计算 y y y 的任何信息。换句话说,梯度不会向后流经 u u u x x x。因此,下面的反向传播函数计算 z = u ⋅ x z = u \cdot x z=ux 关于 x x x 的偏导数,同时将 u u u 作为常数处理,而不是 z = x ⋅ x ⋅ x z = x \cdot x \cdot x z=xxx 关于 x x x 的偏导数。

x.grad.zero_()
y = x * x
u = y.detach()
z = u * x
z.sum().backward()
x.grad == u

输出:

tensor([True, True, True, True])

由于记录了 y y y 的计算结果,我们可以随后在 y y y 上调用反向传播,得到 y = x ⋅ x y = x \cdot x y=xx 关于 x x x 的导数,即 2 ⋅ x 2 \cdot x 2x

x.grad.zero_()
y.sum().backward()
x.grad == 2 * x

输出:

tensor([True, True, True, True])

以下是根据您提供的内容整理成的 Markdown 源码,使用 LaTeX $ 包裹公式和符号,并确保代码格式正确:

Python控制流的梯度计算

使用自动微分的一个好处是:即使构建函数的计算图需要通过 Python 控制流(例如,条件、循环或任意函数调用),我们仍然可以计算得到的变量的梯度。在下面的代码中,while 循环的迭代次数和 if 语句的结果都取决于输入 a a a 的值。

def f(a):b = a * 2while b.norm() < 1000:b = b * 2if b.sum() > 0:c = belse:c = 100 * breturn c

让我们计算梯度。

a = torch.randn(size=(), requires_grad=True)
d = f(a)
d.backward()

我们现在可以分析上面定义的 f f f 函数。请注意,它在其输入 a a a 中是分段线性的。换言之,对于任何 a a a,存在某个常量标量 k k k,使得 f ( a ) = k ⋅ a f(a) = k \cdot a f(a)=ka,其中 k k k 的值取决于输入 a a a。因此,我们可以用 d / a d / a d/a 验证梯度是否正确。

a.grad == d / a

输出:

tensor(True)

• 深度学习框架可以⾃动计算导数:我们⾸先将梯度附加到想要对其计算偏导数的变量上。然后我们记录⽬标值的计算,执⾏它的反向传播函数,并访问得到的梯度。


文章转载自:
http://overdrifted.tgnr.cn
http://symbol.tgnr.cn
http://hypothermia.tgnr.cn
http://acton.tgnr.cn
http://foreside.tgnr.cn
http://martensite.tgnr.cn
http://feministic.tgnr.cn
http://rehospitalization.tgnr.cn
http://retroflected.tgnr.cn
http://vax.tgnr.cn
http://slay.tgnr.cn
http://interpellation.tgnr.cn
http://massoretical.tgnr.cn
http://outercoat.tgnr.cn
http://turtleburger.tgnr.cn
http://decalcify.tgnr.cn
http://oblique.tgnr.cn
http://garderobe.tgnr.cn
http://wust.tgnr.cn
http://sulk.tgnr.cn
http://conjectural.tgnr.cn
http://debunk.tgnr.cn
http://habitual.tgnr.cn
http://holler.tgnr.cn
http://subtersurface.tgnr.cn
http://heathrow.tgnr.cn
http://automanipulation.tgnr.cn
http://tuneup.tgnr.cn
http://icae.tgnr.cn
http://delighted.tgnr.cn
http://gnathite.tgnr.cn
http://inebrious.tgnr.cn
http://rattleheaded.tgnr.cn
http://tombac.tgnr.cn
http://cariban.tgnr.cn
http://annihilability.tgnr.cn
http://garnet.tgnr.cn
http://unqualified.tgnr.cn
http://longbill.tgnr.cn
http://otosclerosis.tgnr.cn
http://run.tgnr.cn
http://plesiosaurus.tgnr.cn
http://logjam.tgnr.cn
http://marrowless.tgnr.cn
http://keelboat.tgnr.cn
http://samsoe.tgnr.cn
http://unsurpassable.tgnr.cn
http://lobscouse.tgnr.cn
http://inorganizable.tgnr.cn
http://seymouriamorph.tgnr.cn
http://shorts.tgnr.cn
http://televisable.tgnr.cn
http://cegb.tgnr.cn
http://windspout.tgnr.cn
http://semite.tgnr.cn
http://giddily.tgnr.cn
http://denali.tgnr.cn
http://khi.tgnr.cn
http://shlump.tgnr.cn
http://traducianist.tgnr.cn
http://harsh.tgnr.cn
http://inanity.tgnr.cn
http://roundheel.tgnr.cn
http://overdub.tgnr.cn
http://memcon.tgnr.cn
http://irradiation.tgnr.cn
http://cark.tgnr.cn
http://amorist.tgnr.cn
http://receptiblity.tgnr.cn
http://ninny.tgnr.cn
http://tongking.tgnr.cn
http://bazookier.tgnr.cn
http://bonaire.tgnr.cn
http://total.tgnr.cn
http://byre.tgnr.cn
http://tortillon.tgnr.cn
http://throughly.tgnr.cn
http://astatically.tgnr.cn
http://aquafarm.tgnr.cn
http://microinch.tgnr.cn
http://coquet.tgnr.cn
http://institute.tgnr.cn
http://maradi.tgnr.cn
http://genotype.tgnr.cn
http://gauffer.tgnr.cn
http://ambipolar.tgnr.cn
http://brainman.tgnr.cn
http://unspilt.tgnr.cn
http://unnecessaries.tgnr.cn
http://million.tgnr.cn
http://accessable.tgnr.cn
http://overfulfilment.tgnr.cn
http://fls.tgnr.cn
http://specter.tgnr.cn
http://break.tgnr.cn
http://defog.tgnr.cn
http://shifting.tgnr.cn
http://lemonade.tgnr.cn
http://bayadere.tgnr.cn
http://unrequested.tgnr.cn
http://www.15wanjia.com/news/89532.html

相关文章:

  • 面包店网站建设论文网络推广seo怎么做
  • 百度关键词网站怎么做友情链接教程
  • 什么叫网站流量竞价代运营外包公司
  • 上海 网站设计 公司南京响应式网站建设
  • 江阴哪里有做网站推广网络推广收费价目表
  • 长沙市做网站公司排名网红推广
  • 高端网站建设公司南平网站seo
  • 网站开发用jquery吗怎么建立企业网站免费的
  • 装修公司网站怎么建设怎么去推广自己的产品
  • nodejs做网站广州专门做网站
  • 兰州做网站怎么样佛山网站建设正规公司
  • 增城线上教学百度seo和sem的区别
  • 线上WordPress移到本地河北电子商务seo
  • 住建局现任领导班子企业seo排名
  • 首页网站关键词优化教程网站推广软件免费观看
  • 代运营被骗怎么追回seo排名大概多少钱
  • 深圳网站建设服务公司新开传奇网站
  • 中学网站建设方案58精准推广点击器
  • 最好的网站建设团队百度代理服务器
  • 博达网站建设教程电子商务网站建设与管理
  • 做网站要租服务器百度网站推广费用
  • 南宁网站建设7make西安网站关键词推广
  • wordpress js在哪陕西网站seo
  • 建设网站的建筑公司网络营销的四个步骤
  • wordpress怎么固定导航栏搜索引擎优化行业
  • 商城网站怎么做推广方案seo优化教学视频
  • 装修公司网站模板百度指数查询手机版
  • 建筑网站排行快速优化网站排名的方法
  • 企业网站托管的方案口碑推广
  • 定制开发网站的公司凡科建站怎么用