假设我们选择的激活函数是前向传播 - 图1;隐藏层和输出层的输入值为前向传播 - 图2,上标表示第几层,下标表示本层单元的index;隐藏层和输出层的输出值为前向传播 - 图3,上标表示第几层,下标表示本层单元的index。则对于下图的三层DNN,利用和感知机一样的思路,我们可以利用上一层的输出计算下一层的输出,也就是所谓的DNN前向传播算法。建议边在http://playground.tensorflow.org/上操作,边看本文。

前向传播1.png

对于第二层的输出前向传播 - 图5前向传播 - 图6前向传播 - 图7前向传播 - 图8的下标第一个数表示当前层的index,第二个数表示前一层的index,上标前向传播 - 图9代表第一层到第二层,我们有

前向传播 - 图10
前向传播 - 图11
前向传播 - 图12

对于第三层的输出前向传播 - 图13,我们有

前向传播 - 图14

将上面的例子一般化,假设第前向传播 - 图15层共有前向传播 - 图16个神经元,则对于第前向传播 - 图17层的第前向传播 - 图18个神经元的输出前向传播 - 图19

前向传播 - 图20

可以看出,使用代数法一个个的表示输出比较复杂,而如果使用矩阵法则比较的简洁。假设第前向传播 - 图21层共有前向传播 - 图22个神经元,而第前向传播 - 图23层共有前向传播 - 图24个神经元,则第前向传播 - 图25层的线性系数前向传播 - 图26组成了一个前向传播 - 图27的矩阵前向传播 - 图28,第前向传播 - 图29层的偏倚前向传播 - 图30组成了一个前向传播 - 图31的向量前向传播 - 图32,第前向传播 - 图33层的输出前向传播 - 图34组成了一个前向传播 - 图35的向量前向传播 - 图36,第前向传播 - 图37层的未激活前线性输出前向传播 - 图38组成了一个前向传播 - 图39的向量前向传播 - 图40,第前向传播 - 图41层的输出前向传播 - 图42组成了一个前向传播 - 图43的向量前向传播 - 图44。则用矩阵法表示,第前向传播 - 图45层的输出为:

前向传播 - 图46

所谓的DNN的前向传播算法也就是利用我们的若干个权重系数矩阵前向传播 - 图47和偏倚向量前向传播 - 图48来和输入值向量前向传播 - 图49进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到输出层,得到输出结果为止。

输入:总层数前向传播 - 图50,所有隐藏层和输出层对应的矩阵前向传播 - 图51,偏倚向量前向传播 - 图52,输入值向量前向传播 - 图53
输出:输出层的输出前向传播 - 图54

  1. 初始化前向传播 - 图55
  2. 前向传播 - 图56
    1. 前向传播 - 图57

最后结果即输出前向传播 - 图58

Source

https://blog.csdn.net/anshuai_aw1/article/details/84615935