Theano教程中的澄清

Abh*_*hek 7 python numpy gradient-descent theano deep-learning

我正在阅读Theano文档主页上提供的本教程

我不确定梯度下降部分给出的代码.

在此输入图像描述

我对for循环有疑问.

如果将' param_update '变量初始化为零.

param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable)
Run Code Online (Sandbox Code Playgroud)

然后在剩下的两行中更新其值.

updates.append((param, param - learning_rate*param_update))
updates.append((param_update, momentum*param_update + (1. - momentum)*T.grad(cost, param)))
Run Code Online (Sandbox Code Playgroud)

我们为什么需要它?

我想我在这里弄错了.你们能帮助我吗!

小智 15

初始化param_update使用theano.shared(.)只告诉Theano保留一个将由Theano函数使用的变量.此初始化代码仅调用一次,以后不会用于将值重置param_update为0.

实际值param_update将根据最后一行更新

updates.append((param_update, momentum*param_update + (1. - momentum)*T.grad(cost, param)))
Run Code Online (Sandbox Code Playgroud)

train通过将此更新字典作为参数构建的函数时(本教程中的[23]):

train = theano.function([mlp_input, mlp_target], cost,
                        updates=gradient_updates_momentum(cost, mlp.params, learning_rate, momentum))
Run Code Online (Sandbox Code Playgroud)

每次train调用时,Theano将根据动量规则计算costwrt 的梯度param并更新param_update为新的更新方向.然后,param将按照保存在更新方向进行更新param_update与适当的learning_rate.