美文网首页
深度神经网络

深度神经网络

作者: 此间不留白 | 来源:发表于2019-09-24 21:20 被阅读0次

    神经网络概述

    深度神经网络的结构可以简单用以下图形表示,为了便于表示神经网络的结构,并有以下符号约定:

    • L:L表示神经网络的层数,如上所示的神经网络L=4,一般而言,神经网络的层数(Layer)不包括输入层,其层数只包含隐藏层和输出层。

    • n^{[l]}: 表示第l层的神经单元数量,如上所示的神经网络有:n^{[1]} = 5,n^{[2]} = 5,n^{[3]} = 3,n^{[4]} = 1

    • a^{[l]}:a^{[l]}层表示第l层激活后的神经网络结果,有a^{[l]} = g^{[l]}(z^{[l]})表示第l层的激活函数。

    • w^{[l]} 和b^{[l]}: 表示第l层计算z^{[l]}的权重参数。

    神经网络的前向传播过程

    如上所述的神经网络模型,其前向传播过程的向量化实现可以用一下公式表示:
    A^{[0]} = X
    Z^{[1]} = W^{[1]}A^{[0]}+b^{[1]}
    A^{[1]} = g^{[1]}(Z^{[1]})
    Z^{[2]} = W^{[2]}A^{[1]} + b^{[2]}
    A^{[2]} = g^{[2]}(Z^{[2]})
    Z^{[3]} = W^{[3]}A^{[2]} + b^{[3]}
    A^{[3]} = g^{[3]}(Z^{[3]})
    Z^{[4]} = W^{[4]}A^{[3]} + b^{[4]}
    A^{[4]} = g^{[4]}(Z^{[4]})
    Y = A^{[4]}

    如上所示的向量化实现神经网络的前向传播的计算过程中,需要逐层计算,对于这一过程,可以用显示for循环实现。

    核对矩阵的维数

    在神经网络的实现过程中,需要确保矩阵的维数在计算过程中不能够出错,如下所示的神经网络结构中,对于矩阵运算的规则如下所示:

    首先,可以先标注神经网络每一层的单元数,如下所示:
    n^{[0]} = 2,n^{[1] }=3,n^{[2]} = 5,n^{[3]} = 4,n^{[4]} = 2,n^{[5]} =1
    对于每一层的神经网络的计算方式可以用如下公式表示:
    Z^{[1]} = W^{[1]}X+b^{[1]}
    其中Z^{[1]} \in {(3,1)},X \in {(2,1)},根据矩阵运算法则,则W^{[1]} \in {(3,2)},即也就是W^{[1]} \in {(n^{[1]},n^{[0]})}

    Z^{[2]} = W^{[2]}A^{[1]}+b^{[2]}
    A^{[1]}\in (3,1),Z^{[2]} \in (5,1),则有W^{[2]} \in (5,3),即也就是W^{[2]} \in (n^{[2]},n^{[1]})

    以此类推,可以得到一般性的结论,即也就是:
    W^{[l]} \in (n^{[l]},n^{[l-1]})

    推而广之,b^{[l]} \in (n^{[l]},1),Z^{[l]} \in (n^{[l]},1),A^{[l]} \in (n^{(l)},1)

    W^{[l]}维度和dW^{[l]}维度相同,b^{[l]}维度和db^{[l]}维度相同。

    进一步推广,假设有m个训练样本,向量化实现,则矩阵维数满足以下条件,如下所示;

    A^{[0]} = X \in (n^{[1]},m)
    Z^{[l]} \in (n^{[l]},m),
    A^{[l]} \in (n^{[l]},m)

    深度神经网络的意义

    在神经网络的较浅的前几层隐藏层中,较浅层常常用来探测输入数据的特征,如输入图像的边缘特征,语音信号的音频波形的一些特征,而后面几层通过将这些信号组合在一起而得到输出值。实际上,计算之前的几层就是简单的计算函数,比如一副图像中的图像单元,在网络种的深层是,实际上能做很多复杂的事,比如,探测图像的部分区域或是探测单词,短语和句子。

    以电路理论为例,用异门,非门,或门等简单的逻辑电路单元组成一个异或门,计算x_1XOR x_2XORx_3XORx_4……x_n,假设有n_x个特征,以以下一个异或树图为例,可能需要,计算x_1XORx_2x_3XORx_4,通过一个深度的异或树图,集时间复杂度为O(logn),而单隐层为的方式计算,其时间复杂度可能达到O(2^n),可以看出,增加网络的深度,即也就是隐藏层的数量,是一种行之有效的方法。

    搭建深度神经网络块

    神经网络的计算,可以分为正向传播和反向传播计算,正向传播的计算过程中,以第l层为例,输入是前一层的a^{[l-1]},而输出是a^{[l]},在这个计算过程中,有z^{[l]} = w^{[l]}a^{[l-1]}+b,a^{[l]} = g^{[l]}(z^{[l]}),再将计算得到的z^{[l]}值缓存起来,以便于反向传播的计算。

    神经网路反向传播的计算过程中,同样是l层的计算,需要通过输入da^{[l]}计算da^{[l-1]}的值,反向传播的计算过程中,除了输出的da^{[l]}的值外,还需要输出dw^{l}db^{[l]},以实现梯度下降的计算。

    神经网络的正向传播和反向传播的整个计算过程,可以由下图表示,神经网络的梯度下降包括了一个正向计算和反向传播的循环,再反向传播的计算过程中,每一次会输出一个dw^{l}db^{l}的梯度,最后,参数W会在每一层被更新为W = W-\alpha*dW,b=b-\alpha*db,反向传播计算完毕,就会得到所有参数的导数值,实现了神经网络的梯度下降循环。

    神经网络的正向传播和反向传播

    j假设有m个训练样本,神经网络正向传播的向量化的计算公式如下所示:
    A^{[0]} = X
    Z^{[l]} = W^{[l]}A^{[l-1]}+b^{[l]}
    A^{[l]} = g^{[l]}(Z^{[l]}) = \hat{y}

    多层神经网络的反向传播的计算过程可以如下公式表示:

    dZ^{[l]} =g^{[l]'}(Z^{[l]})

    dW^{[l]} = \frac{1}{m}dZ^{[l]}A^{[l-1]T}

    db^{[l]} = \frac{1}{m}np.sum(dZ^{[l]},axis=1,keepdims = True)

    dA^{[l]} = W^{[l]T}dZ^{[l]}

    反向传播的计算过程中,dA^{[l]}的计算,就是对损失函数L(y,\hat{y})求导。

    回顾上图中反向传播的计算过程,要经常用到Z^{[l]},所以需要在正向计算的过程中缓存Z^{[l]}的值。

    超参数和参数

    在之前的神经网络学习中,涉及到了许多参数,算法中用到的主要的参数,如下所示:

    • 学习率(learning rate) 用\alpha表示;
    • 迭代次数(iterations),即也就是梯度下降的循环次数;
    • 隐藏层的数目(hidder layers)L;
    • 隐藏层的单元数目n^{[l]};
    • 激活函数的选择,如选择线性修正单元(RELU)或是 sigmoid函数。

    所有以上这些参数都决定着参数wb的值,所以将以上参数统称为超参数。

    深度学习的应用,很大程度上仍然是一个经验性的过程,在参数的选择过程中一个简单的方法是可以简单绘出数据在训练集和验证集上的损失随着参数改变的变化过程,从而选择更好的参数值。

    相关文章

      网友评论

          本文标题:深度神经网络

          本文链接:https://www.haomeiwen.com/subject/rtymuctx.html