原文见:深度神经网络模型(DNN)与前向传播算法

这里具体写一下摘要及感想

1、DNN(深度神经网络)简介:

从DNN按不同层的位置划分,DNN内部的神经网络层可以分为三类,输入层,隐藏层和输出层,如下图示例,一般来说第一层是输入层,最后一层是输出层,而中间的层数都是隐藏层。

输入层的每个神经元输入样本数据x的一维

深度神经网络模型(DNN)与前向传播算法

层与层之间是全连接的,也就是说,第ii层的任意一个神经元一定与第i+1i+1层的任意一个神经元相连。虽然DNN看起来很复杂,但是从小的局部模型来说,还是和感知机一样,即一个线性关系z=wixi+bz=∑w_ix_i+b加上一个**函数σ(z)σ(z)

2、参数定义
由于DNN层数增多,则线性关系系数ww和偏倚bb的数量就会很多,具体的定义方法如下:
首先我们来看看线性关系系数ww的定义。以下图一个三层的DNN为例,第二层的第4个神经元到第三层的第2个神经元的线性系数定义为w243w_{24}^3

上标 3 代表线性系数ww所在的层数,而下标对应的是输出的第三层索引 2 和输入的第二层索引 4 。你也许会问,为什么不是w423,w^3_{42}, 而是w243w^3_{24}呢,如果是w423w^3_{42}而每次进行矩阵运算是wTx+bw^Tx+b, 需要进行转置。将输出的索引放在前面的话,则线性运算不用转置,即直接为wx+bwx+b。总结下,第l1l−1层的第kk个神经元到第ll层的第jj个神经元的线性系数定义为wjklw_{jk}^l。注意,输入层是没有ww参数的。

深度神经网络模型(DNN)与前向传播算法

再来看看偏倚bb的定义。还是以这个三层的DNN为例,第二层的第三个神经元对应的偏倚定义为b23b_{23}。其中,上标22代表所在的层数,下标33代表偏倚所在的神经元的索引。同样的道理,第三个的第一个神经元的偏倚应该表示为b31b_{31}。同样的,输入层是没有偏倚参数bb的。

3、传播公式
深度神经网络模型(DNN)与前向传播算法
深度神经网络模型(DNN)与前向传播算法

从上面可以看出,使用代数法一个个的表示输出比较复杂,而如果使用矩阵法则比较的简洁。假设第l1l−1层共有mm个神经元,而第ll层共有nn个神经元,则第ll层的线性系数ww组成了一个n×mn×m的矩阵WlW^l, 第ll层的偏倚bb组成了一个n×1n×1的向量blb^l , 第l1l−1层的的输出aa组成了一个m×1m×1的向量al1a^{l-1},第ll层的的未**前线性输出zz组成了一个n×1n×1的向量zlz^l, 第ll层的的输出aa组成了一个n×1n×1的向量ala^l。则用矩阵法表示,第l层的输出为:矩阵化:

深度神经网络模型(DNN)与前向传播算法

4、前向传播过程
所谓的DNN的前向传播算法也就是利用我们的若干个权重系数矩阵WW,偏倚向量bb来和输入值向量xx进行一系列线性运算和**运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为值。
    输入: 总层数LL,所有隐藏层和输出层对应的矩阵WW,偏倚向量bb,输入值向量xx
    输出:输出层的输出aLa^L
    1) 初始化a1=xa_1=x
    2) for l=2 to L, 计算:

al=σ(Wlal1+bl)a_l=\sigma(W^la^{l-1}+b^l)
最后的结果即为输出aLa^L

相关文章: