为方便计算和书写,本次DNN只包含一个隐藏层,当隐藏层更深时,其原理和方法一样。网络结构如下:
其中 用来代指输入层的神经元,
用来代指隐藏层的神经元,
用来代指输出层的神经元。激活函数选取sigmoid函数,计算公式为:
表示经过DNN后的输出(预测值),
为标签(实际值).激活函数的导数为:
前向传播:
1.隐藏层的计算:
上式中表示的式隐藏层未激活的神经元,
表示隐藏层激活后的神经元 (此时的数值式下一次的输出),
表示的是输入层的第i个神经元和隐藏层的第j个神经元之间的权重,
表示的是隐藏层的偏置,是一个h维的向量。
2.输出层的计算
上式中表示的隐藏层的第j个神经元和输出层的第k个神经元之间的权重,
表示输出层的偏置,是一个q维的向量。
表示输出层未激活的神经元,
表示输出层激活的神经元,此时作为输出层的输出。
3.误差计算
选取mse作为误差的计算公式(其他的还有交叉熵,KL等,一般来说交叉熵用的比较多)
这里前面的常数不影响误差的计算,为后面反向传播书写方方便,这里取二分之一。
梯度反向更新
1.隐藏层和输出层参数更新
1.1 权重的更新
误差对隐藏层和输出层之间权重的更新通过对输出层的输出传递到权重,其更新的公式如下:
等式右边的偏导数单独计算如下:
综上隐藏层和输出层之间的权重梯度为:
运用梯度下降算法更新权重
1.2 偏置的更新
等式右边偏导数单独计算如下:
综上隐藏层和输出层之间的偏置梯度为:
运用梯度下降算法更新偏置
2.输入层和隐藏层之间参数的更新
2.1 权重的更新
误差对输入层和隐藏层之间的的更新与输出层和隐藏层之间的
更新不同,
只和输出层的第k个神经元有关,所以误差传递时只通过
就可以了,与输出层其他的神经元无关,但是在隐藏层的第j个神经元
,其与输出层的每个神经元都有关,所以误差在反向传到隐藏层时,需要通过输出层的每一个神经元传到隐藏层的
,因此对
的梯度计算公式如下:
等式右边括号内的式子单独计算如下:
综上,的梯度为:
梯度下降法更新权重:
2.2 偏置的更新
对输出层和隐藏层偏置的更新和权重的更新一样,都需要经过输出层的每一个神经元才能到达。其计算公式如下:
等式右边的式子单独计算如下:
综上,的梯度为:
梯度下降更新偏置:
注:
在更新过程中,所有的参数都是用上一步的所有信息进行更新,不是前面的更新之后立刻用于后面,后面的参数在更新过程中依旧使用上一时间段的所有信息。即t+1时刻的参数更新全部用的t时刻的信息,就算某些参数提前更新到了t+1,但是其他参数并不会用t+1的参数,而是继续使用t时刻的参数,这个和坐标下降算法不一样。