Skip to content

误差计算与反向传播

通过一个实例具体的体会神经网络的误差计算、误差反向传播和参数更新

前向传播

简单的反向传播网络

第一个隐层中的6表示一种激活函数(sigmoid)。

sigmoidsigmoid(x)=11+ex

w_i_j表示i是前一层第i个节点于本层第j个节点的权重参数

softmaxP(y=j)=exTwjk=1KexTwk

前向传播的计算y_1的输出,在经过softmax激活得到一个有概率分布约束的输出数值。

前向传播过程

O1=ey1ey1+ey2

同理O_2也是这样得到的。

损失计算

分类的损失一般使用交叉熵损失函数。函数中O_i是预测标签的值,O^*_i是真实标签的值。

多分类的交叉熵损失函数:

输入的是softmax函数输出的结果,所有事件的概率和为1,即输出的各个节点的概率是在同一个分布中的。在torch的交叉熵损失代码中已经加入了softmax

H(oi)=ioilog(oi)

二分类的交叉熵损失函数

输入是sigmoid函数输出的结果,输出的各个节点的之间的概率数值是不相关的。

H(oi)=1Ni=1K[oilog(oi)+(1oi)log(1oi)]

对于上面的网络我们的损失计算如下:

Loss(o)=(o1log(o1)+o2log(o2))

反向传播与参数更新

反向传播需要先求梯度,所以我们选择的函数尽量是可导且容易收敛。以更新第二层的w_11为例。

先求梯度: 梯度求解

参数的更新是:

wnew=woldLearnningRatec×grad

优化器

因为内存大小限制,我们不能一次性把train_set的数据用于训练需分batch,这样的话我们求梯度的方向就不一定是全局最优的方向,可以使用优化器解决这个问题。

SGD、Adagrad、RMSProp、Adam

文章更新时间: