Matlab 反向传播算法:误差计算
我目前正在写一个反向传播脚本。我不确定如何更新我的体重值。这是一张简单的图片 我的问题:误差是如何计算和应用的 我知道k1和k2会产生错误值。我知道k1和k2产生单独的错误值(目标-输出)。不过,我不知道是否要使用这些设备 我是否应该使用两个误差值的平均值,然后将单个误差值应用于所有权重 还是我应该:Matlab 反向传播算法:误差计算,matlab,artificial-intelligence,backpropagation,Matlab,Artificial Intelligence,Backpropagation,我目前正在写一个反向传播脚本。我不确定如何更新我的体重值。这是一张简单的图片 我的问题:误差是如何计算和应用的 我知道k1和k2会产生错误值。我知道k1和k2产生单独的错误值(目标-输出)。不过,我不知道是否要使用这些设备 我是否应该使用两个误差值的平均值,然后将单个误差值应用于所有权重 还是我应该: update weight Wk1j1 and Wk1j2 with the error value of k1 update weight Wk2j1 and Wk2j2 with the e
update weight Wk1j1 and Wk1j2 with the error value of k1
update weight Wk2j1 and Wk2j2 with the error value of k2
update weight Wj1i1 and Wj1i2 with the error value of j1
update weight Wj2i1 and Wj2i2 with the error value of j2
在你开始拍摄之前,我知道我必须使用sigmoids函数等。这不是问题。它总是说我必须计算输出的误差值,这就是我困惑的地方
然后通过以下方式获得净误差值:
((error_k1^2) + (error_k2^2) + (error_j1^2) + (error_j2^2)) / 2
从维基:
如图所示,在我的图像示例k1和k2中,这对于每个输出节点都是正确的。维基
图像下的两行是delta Wh和delta Wi。我应该使用哪个误差值(这基本上是我的问题,我应该使用哪个误差值来计算新的权重)
回答:
第3页(注18)#4反向传播不直接使用误差值。反向传播的是误差对神经网络每个元素的偏导数。最终,这将为每个权重提供dE/dW,并朝该梯度方向迈出一小步 为此,您需要知道:
- 每个神经元的激活值(在进行前馈计算时保留)
- 误差函数的数学形式(例如,它可能是平方和差)。输出层的第一组导数为dE/da(其中E为误差,a为神经元的输出)
- 神经元激活或传递函数的数学形式。这就是我们为什么使用sigmoid的原因,因为sigmoid函数的dy/dx可以方便地用激活值表示,dy/dx=y*(1-y)-这很快,也意味着不必存储或重新计算加权和
- 括号(k)或(k+1)中的上标表示网络中的一个层
- (k)层有N个神经元,下标为i
- (k+1)层有M个神经元,下标为j
- 神经元的输入之和为z
- 神经元的输出是一个信号
- 权重为Wij,将层(k)中的ai连接到层(k+1)中的zj。注W0j是偏差项的权重,有时需要包括它,尽管您的图表没有显示偏差输入或权重
当你第一次看到这一点时,数学符号在某些地方似乎有点密集。但是如果你看几次,你会发现基本上只有几个变量,它们是由i,j,k值的组合索引的。此外,使用Matlab,您可以非常轻松地表示向量和矩阵。例如,这就是学习单个培训示例的整个过程:
清晰;全部关闭;clc;更多
输入向量=[0.5,0.2];
TrainingOutputVector=[0.1,0.9];
学习率=1.0;
W_inputohidden=randn(3,2)*0.6;
W_hiddentooput=randn(3,2)*0.6;
因为i=1:20,
%向隐藏层前馈输入
InputsPlusBias=[1,InputVector];
HiddenActivations=1.0./(1.0+exp(-InputsPlusBias*W_InputOHidden));
%将隐藏层前馈到输出层
HiddenPlusBias=[1,HiddenActivations];
输出激活=1.0./(1.0+exp(-HiddenPlusBias*W_HiddenToOutput));
%Backprop步骤1:输出层的dE/da(假设均方误差)
OutputActivationDelta=OutputActivations-TrainingOutputVector;
nn