Main Content

traingdm

带动量的梯度下降反向传播

语法

net.trainFcn = 'traingdm'
[net,tr] = train(net,...)

说明

traingdm 是根据带动量的梯度下降更新权重和偏置值的网络训练函数。

net.trainFcn = 'traingdm' 设置网络 trainFcn 属性。

[net,tr] = train(net,...) 使用 traingdm 训练网络。

系统根据 traingdm 训练参数进行训练,下表显示了这些参数的默认值:

net.trainParam.epochs1000

要训练的最大轮数

net.trainParam.goal0

性能目标

net.trainParam.lr0.01

学习率

net.trainParam.max_fail6

最大验证失败次数

net.trainParam.mc0.9

动量常量

net.trainParam.min_grad1e-5

最小性能梯度

net.trainParam.show25

显示进度之间的轮数

net.trainParam.showCommandLinefalse

生成命令行输出

net.trainParam.showWindowtrue

显示训练 GUI

net.trainParam.timeinf

以秒为单位的最大训练时间

网络使用

您可以创建一个将 traingdmfeedforwardnetcascadeforwardnet 搭配使用的标准网络。要准备使用 traingdm 训练的自定义网络,请执行以下操作:

  1. net.trainFcn 设置为 'traingdm'。这会将 net.trainParam 设置为 traingdm 的默认参数。

  2. net.trainParam 属性设置为期望的值。

在任一情况下,用生成的网络调用 train 都会用 traingdm 训练网络。

有关示例,请参阅 help feedforwardnethelp cascadeforwardnet

详细信息

全部折叠

带动量的梯度下降

除了 traingd 之外,还有其他三种梯度下降变体。

traingdm 实现的带动量的梯度下降使网络不仅可以响应局部梯度,还可以响应误差曲面中的近期趋势。动量就像一个低通滤波器,允许网络忽略误差曲面中的小特征。没有动量,网络可能会陷入比较浅的局部最小值。有了动量,网络可以顺利越过这样的最小值。有关动量的讨论,请参阅 [HDB96] 的第 12–9 页。

带动量的梯度下降依赖于两个训练参数。参数 lr 表示学习率,类似于简单梯度下降。参数 mc 是用于定义动量的动量常量。mc 设置为介于 0(无动量)和接近 1(大量动量)之间的值。动量常量为 1 会导致网络对局部梯度完全不敏感,因此不能正确学习。

p = [-1 -1 2 2; 0 5 0 5];
t = [-1 -1 1 1];
net = feedforwardnet(3,'traingdm');
net.trainParam.lr = 0.05;
net.trainParam.mc = 0.9;
net = train(net,p,t);
y = net(p)

算法

traingdm 可以训练任何网络,只要其权重、净输入和传递函数具有导函数。

反向传播用于计算性能 perf 关于权重和偏置变量 X 的导数。每个变量根据带动量的梯度下降进行调整,

dX = mc*dXprev + lr*(1-mc)*dperf/dX

其中 dXprev 是权重或偏置的先前更改。

出现以下任一情况时,训练停止:

  • 达到 epochs(重复)的最大数量。

  • 超出 time 的最大数量。

  • 性能最小化到 goal

  • 性能梯度低于 min_grad

  • 自上次验证性能(使用验证时)下降以来,验证性能(验证误差)上升的次数超过了 max_fail 次。

版本历史记录

在 R2006a 之前推出

另请参阅

| | |