四、深层神经网络

1、深层神经网络

  深层神经网络其实就是包含更多的隐藏层神经网络。注意,神经网络的层数是从左到右,由0开始定义。

  对于任何给定的问题很难去提前预测到底需要多深的神经网络,所以先去尝试逻辑回归,尝试一层然后两层隐含层,然后把隐含层的数量看做是另一个可以自由选择大小的超参数,然后再保留交叉验证数据上评估,或者用你的开发集来评估。

  上图是一个四层的有三个隐藏层的神经网络,然后隐藏层中的单元数目是5,5,3,然后有一个输出单元。我们用大写的L表示神经网络的总层数,这里L=4,n^[l]表示l层上的单元数(节点数)。

  对于第l层,用a^[l]表示l层的激活函数输出,由a^[l]=g(z^[l])计算得到。用W^[l]来表示在a^[l]中计算z^[l]值的权重,b^[l]也一样。输入特征用x表示,x也是第0层的激活函数,所以x=a^[0]。最后一层的激活函数a^[L]=y帽(预测输出,这个神经网络预测出来的y帽)。

2、深层网络中的前向传播和反向传播

  仍以上面讲过的4层神经网络为例,

  ① 正向传播(forward propagation):输入a^[l-1],输出a^[l],缓存变量是z^[l];从实现的角度来说我们可以缓存下w^[l]和b^[l],这样更容易在不同的环节中调用函数。

第一层:

第二层:

第四层:

以此类推,第l层:

向量化实现过程可以表示为:

  正向传播输入特征X,a^[0]对应于一个训练样本的输入特征,而A^[0]对应于整个训练样本的输入特征,这是第一个正向函数的输入,重复这个步骤就可以从左到右计算正向传播。

  ② 反向传播(backward propagation):输入da^[l],输出是da^[l-1],dw^[l],db^[l]。

  反向传播的步骤写成:

  

    • 式子(5)由式子(4)带入式子(1)得到,前四个式子就可实现反向函数

  向量化实现过程可以写成:

  

3、核对矩阵的维数

  在实现神经网络时,常用的一个检查代码是否有错的方法是过一遍算法中矩阵的维数。

  总之,w的维度是(下一层的维数,前一层的维数),即

  

  b的维度是(下一层的维数,1),即:

  

  dw和w维度相同,db和b维度相同,且w和b向量化维度不变,z,a和x向量化维度会变。向量化后:

4、为什么使用深层表示

  (提取特征的复杂度)首先,深度网络究竟在计算什么,如果你在建一个人脸识别或者人脸检测系统,深度神经网络所做的事情就是当你输入一张脸部的照片然后你可以把深度神经网络的第一层当成一个特征探测器或者边缘探测器。在这个例子中,创建一个大概有20个隐藏单元的深度神经网络,看如何针对这张图计算的,(1)隐藏单元就是这些图里这些小方块,我们可以把照片里组成边缘的像素们放在一起看,(2)然后它可以把被探测到的边缘组合成面部的不同部分,比如说,可能有一个神经元会去找眼镜,另外还有别的找鼻子的部分,然后把这许多的边缘结合在一起,就可以开始检测人脸的不同部分,(3)最后再把这些部分放在一起,比如眼睛鼻子下巴,就可以识别或探测不同的人脸了。边缘探测器其实相对来说都是针对照片中非常小块的面积,面部探测器呢就会针对大一些的区域,但是主要的概念是一般从小的细节人手(比如边缘),然后再一步步到更大更复杂的区域。

5、参数VS超参数

  什么是超参数?比如算法中的learning rate α(学习率)、iterations N(梯度下降法循环的数量)、L(神经网络层数)、n^[l](各层的神经单元数目)、choice of activation function(激活函数的选择)都需要你来设置,这些数字实际上控制了最后的参数W和b的值,所以它们被称作超参数(hyperparameters)。

  如何寻找超参数的最优值?Idea—Code—Experiment—Idea这个循环,尝试各种不同的参数,实现模型并观察是否成功,然后再迭代

  经验规律:如果你开发的项目需要几年的时间,你要经常试试不同的超参数勤于检验结果,看看有没有更好的超参数值。尝试保留交叉检验或类似检验方法

 

 

 

posted @   鹤比纷恆红  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示