gpt4 book ai didi

python - theano如何实现计算每个函数的梯度?

转载 作者:太空狗 更新时间:2023-10-30 01:58:25 27 4
gpt4 key购买 nike

我对 Theano 的实现有疑问。theano如何通过以下函数(T.grad)获得每个损失函数的梯度?感谢您的帮助。

 gparams = T.grad(cost, self.params) 

最佳答案

编辑:这个答案说 Theano 使用 Symbolic Differentiation 是错误的。抱歉。

Theano 实现了反向模式 autodiff,但令人困惑的是,他们称其为“符号微分”。这是一种误导,因为符号微分是完全不同的东西。让我们看看两者。

符号微分:给定一个表示函数 f(x) 的图,它使用链式法则计算一个表示该函数 导数的新图f'(x)。他们称此为“编译”f(x)。符号微分的一个问题是它可以输出一个非常低效的图,但是 Theano 自动简化了输出图。

例子:

"""
f(x) = x*x + x - 2
Graph =
ADD
/ \
MUL SUB
/ \ / \
x x x 2

Chain rule for ADD=> (a(x)+b(x))' = a'(x) + b'(x)
Chain rule for MUL=> (a(x)*b(x))' = a'(x)*b(x) + a(x)*b'(x)
Chain rule for SUB=> (a(x)-b(x))' = a'(x) - b'(x)
The derivative of x is 1, and the derivative of a constant is 0.

Derivative graph (not optimized yet) =
ADD
/ \
ADD SUB
/ | | \
MUL MUL 1 0
/ | | \
1 x x 1

Derivative graph (after optimization) =
ADD
/ \
MUL 1
/ \
2 x

So: f'(x) = 2*x + 1
"""

反向模式 autodiff:分两次通过计算图,首先通过图向前(从输入到输出),然后使用链式法则向后(如果您熟悉通过反向传播,这正是它计算梯度的方式。

参见 this great post有关各种自动微分解决方案及其优缺点的更多详细信息。

关于python - theano如何实现计算每个函数的梯度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28299422/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com