美文网首页
第三章 浅层神经网络

第三章 浅层神经网络

作者: 一叶知否 | 来源:发表于2019-09-29 20:57 被阅读0次

1.神经网络概览

图3.1 神经网络概览

        如图3.1,logistic回归模型的流程就是,输入特征x、参数w和参数b,然后算出z,再使用sigmoid函数算出a即是 y^,,然后计算损失函数L,这就是神经网络。可以把很多sigmoid单元堆叠起来构成一个神经网络,每个单元都对应一个z运算和a运算。用[1]表示第一层,[i]表示第i层,第i层的输出即为第i+1层输入,逐层计算z和a,最后计算L,当然也会有反向计算求导过程。

2.神经网络的表示

图3.2 神经网络的表示

        如图3.2,先看看一个隐藏层的情况,第0层为输入层,输出特征集;第1层为隐藏层,因为在训练过程中我们看不到(或者说不需要看到)隐藏层的值,所以称之为隐藏层;第2层为输出层,输出预测值y^, 。每一层输出值称之为激活值a[i],一般不把输入层看成一个层,所以这是个双层神经网络。

3.计算神经网络的输出

图3.3 神经网络输出计算 图3.4 神经网络输出计算详细步骤 图3.5 神经网络输出计算完整步骤

        神经网络输出的计算其实是同一步骤重复很多遍的过程。单隐藏层神经网络中,输入层输入特征x即a^{[0]}a^{[0]}_1a^{[0]}_2a^{[0]}_3),接着第一层计算出z^{[1]}z^{[1]}_1z^{[1]}_2z^{[1]}_3z^{[1]}_4)和a^{[1]}a^{[1]}_1a^{[1]}_2a^{[1]}_3a^{[1]}_4),把a^{[1]}传递给第二层,第二层重复第一层的步骤,把a^{[1]}作为输入计算出z^{[2]}a^{[2]},最后得到预测值 y^,=a^{[2]}。假设输入特征x形状为(3,1),则W^{[1]}形状为(4,3),b^{[1]}形状为(4,1),a^{[1]}形状为(4,1),z^{[2]}形状为(1,1),a^{[2]}形状为(1,1)。

4.多个样本的向量化

        上面计算了一个输入样本的输出,下面用向量化方式计算多个输入样本的的输出。

图3.6 向量化

        如图3.6,描述了多个样本向量化过程,用上标(i)表示第几个样本。

5.向量化实现的解释

图3.7 向量化详细图形过程      

        如图3.7,假设有3个样本,紫色代表第1个样本,绿色代表第2个样本,黄色代表3个样本,暂且忽略b,由X计算得到Z再利用广播机制加上b,计算结果和一个个样本计算是一致的。

6.激活函数

        要搭建一个神经网络,可以在隐藏层选择使用什么激活函数,也可以在输出单元选择使用什么激活函数,这些可以根据情况选择,不同层激活函数可以不一样。在目前为止,我们一直用的都是sigmoid作为激活函数,但有时其他激活函数效果会更好。

图3.8 选择不同的激活函数

        如图3.8,a^{[1]}=σ(z^{[1]})改成a^{[1]}=g^{[1]}(z^{[1]}),g代表非线性函数,并不一定是σ(sigmoid函数)。在使用sigmoid作为激活函数的场合,一般使用tanh函数代替,tanh函数表现往往比sigmoid函数更好。有一特例就是当输出必须是0<y^, <1,则使用sigmoid函数,sigmoid函数值域是(0,1)。

sigmoid函数和tanh函数都有共同不足地方,当z特别大或者特别小时,函数的斜率接近0,这样会导致梯度下降算法变得非常慢。而Relu函数就不会有这问题,当z<0函数斜率为0,当z>0函数斜率为1,当z=0时斜率不存在,但实践中取值到这一点概率不大,我们也可以给这一点的斜率手动赋值为0或1。

选择激活函数有一些经验法则:

1.如果是二分类,输出为0<y^, <1,则选sigmoid函数作为输出层激活函数,其他地方使用Relu函数作为激活函数。

2.Relu函数是激活函数默认选择,如果隐藏层不知道选哪个作为激活函数,就选Relu函数。因为Relu函数没有斜率接近0的情况,不会减慢梯度下降速度。

3.有人担心Relu函数当z<0时斜率为0会影响梯度下降,实际会有足够多的隐藏单元使z>0,对于大多数样本的训练还是挺快的。

4.也可以使用leaky Relu函数,这样就不会有斜率为0情况,但使用的比较少。

图3.9 不同的激活函数坐标图      

        tanh函数比sigmoid函数优越,是因为sigmoid函数优化路径容易出现zigzag现象。

图3.10 zigzag现象

        在logistic回归模型中,z=w^Tx+b,a=g(z),L=L(a,y),则dL/dw=dL/da * da/dw=dL/dw * z,由于sigmoid函数值大于0,所以每个节点的dL/dw方向相同,则会导致如图3.10的zigzag现象(红色箭头),导致梯度下降算法缓慢。

7.为什么需要非线性激活函数

图3.11 换成线性激活函数      

        如图3.11,把非线性激活函数换成线性激活函数,这时神经网络只是把输入线性组合再输出,多个隐藏层和一个隐藏层没什么区别。所以非线性激活函数可以记录每一层的状态,这样神经网络才能计算出有趣的函数。

8.神经网络的梯度下降法

图3.12 神经网络梯度下降完整过程    

如图3.12,假设是双层神经网络,则正向过程为

Z^{[1]}=W^{[1]}X+b^{[1]}

A^{[1]}=g^{[1]}(Z^{[1]}),

Z^{[2]}=W^{[2]}A^{[1]}+b^{[1]}

A^{[2]}=g^{[2]}(Z^{[2]}),

反向过程为

dZ^{[2]}=A^{[2]}-Y,

dW^{[2]}=1/m* dZ^{[2]}A^{[1]T}

db^{[2]}=1/m* np.sum(dZ[2],axis=1,keepdims=True),

dZ^{[1]}=W^{[2]T}dZ^{[2]}* g^{[1]’}(Z^{[1]}),

dw^{[1]}=1/m* dZ^{[1]}X^T

db^{[1]}=1/m *np.sum(dZ^{[1]},axis=1,keepdims=True)。

9.随机初始化

        训练神经网络时,随机初始化权重w非常重要,如果将神经网络所有权重w都初始化为0或者都一样,那么梯度下降算法将完全无效。

图3.13 参数初始化为0      

        如图3.13,参数都初始化为一样,那么a1^{[1]}=a2^{[1]},dw也相等,两个单元都做一样的事,相当于一个单元,所以不允许权重w初始化为一样,偏置可以一样或者为0。

图3.14 参数随机初始化

        如图3.14,权重随机初始化后应该乘于0.01(或者其他值),避免权重过大,避免梯度过小,影响神经网络梯度下降。

相关文章

  • 神经网络和深度学习 - Chapter3 浅层神经网络

    什么是神经网络? 下面这个浅层神经网络,由多个Logistic Regression堆叠而成;浅层神经网络的反向传...

  • 图床

    浅层神经网络:

  • 用numpy写神经网络

    1 浅层神经网络

  • 机器学习 week3

    主题:浅层神经网络(Shallow neural networks) 3.1 神经网络概述(Neural Netw...

  • 吴恩达深度学习-神经网络基础(浅层神经网络)

    第三周 浅层神经网络: 3.1 神经网络概览3.2 神经网络表示 loss function L(a,y)...

  • 神经网络(一)

    神经网络 1. 神经网络基础 2. 浅层神经网络分析 3. 卷积神经网络 4. 卷积神经网络MNIST数字图片识别...

  • 神经网络(二)

    神经网络 1. 神经网络基础 2. MNIST数据集浅层神经网络分析 3. 卷积神经网络 4. 卷积神经网络MNI...

  • 浅层神经网络

    1. 神经网络概览 在之前的学习中,关于逻辑回归问题的流程图计算方式可以看作是一个简单的神经网络,给定输入变量,能...

  • 浅层神经网络

    本文为 AI 研习社编译的技术博客,原标题 : Shallow Neural Networks 作者 |Rocha...

  • 浅层神经网络

    神经网络的表示 上图是只有一个隐藏层的神经网络,其中左侧为输入层, 表示一个样本的 3 个特征,中间为隐藏层,表示...

网友评论

      本文标题:第三章 浅层神经网络

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