Iss*_*sac 4 python math gradient automatic-differentiation theano
我对Theano的实施有疑问.theano如何通过以下函数(T.grad)获得每个损失函数的梯度?谢谢您的帮助.
gparams = T.grad(cost, self.params)
Run Code Online (Sandbox Code Playgroud)
Min*_*ark 10
编辑:这个答案说Theano使用符号分化是错误的.我很抱歉.
Theano实现了逆向模式自动驾驶,但令人困惑的是他们称之为"象征性差异化".这是误导,因为象征性差异是完全不同的.让我们看看两者.
符号微分:给定表示函数的图形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
"""
Run Code Online (Sandbox Code Playgroud)
反向模式autodiff:通过计算图两次通过,首先通过图形(从输入到输出),然后使用链规则向后(如果你熟悉反向传播,这正是它计算渐变的方式) ).
见这个伟大的职位对各种自动分化的解决方案及其利弊的更多细节.
| 归档时间: |
|
| 查看次数: |
2062 次 |
| 最近记录: |