deeplearning.ai 吴恩达网上课程学习(五)——浅层神经网络理论学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010327061/article/details/79958526

本文主要来讲解包含一个隐藏层的神经网络结构及其原理。

本文参考链接: https://www.missshi.cn/api/view/blog/59a6ad67e519f50d040000e5

1.概念初识:

之前逻辑回归的模型:



一个包含隐藏的神经网络的网络结构:

2.神经网络的表示:

其中,x1,x2,x3表示其输入层,中间的四个圆圈则表示隐藏层,最后的一个节点是其输出层。而隐藏层数据是我们无法知道而需要进行训练学习的。对于上述网络结构而言,我们称其为一个两层的神经网络。(输入层不包含在内)

3.神经网络的前向传播计算:


第一个隐藏层神经元的计算逻辑:


第二个隐藏层神经元而言,计算逻辑相同:


其中,对于ai[l]而言,l表示它是在第l层,而i则表示它是该层的第i个节点,对于w和b而言,符号表示的含义相同。



4.训练样本的矢量化:



此时w是(m,3)的矩阵,x是(3,n)的矩阵,b是(m,1)的矩阵,在与wx相加时有广播效果,最后得到z(m,n)的矩阵。其中m是隐含层层数,n是样本个数。


5.激活函数:

对于隐藏层和输出层而言,我们通常会选择一个激活函数用于对其输出进行处理。

之前我们接触的激活函数都是sigmod函数,但实际上,还有一些可能更好用的激活函数。例如tanh函数通常会比sigmod函数用更好的性能。


tanh作为激活函数优点:由于其平均值更接近于0,可以起到中心化的作用,通常更有利用算法优化。

特殊情况:二分类问题输出层的激活函数,由于我们仅希望对其进行是否判断,其实更类似于0,1判断,此时选择sigmod函数是一个更加合理的选择。除二分类输出层外,几乎不使用:

sigmod函数和tanh函数共同的问题:当输入变量特别大或者特别小时,斜率非常小,此时并不利于梯度下降法进行学习。

在机器学习中,一个非常常用的激活函数叫做ReLU函数(修正线性单元函数)。(推荐)



6.激活函数不选择线性函数的原因

若激活函数选择线性函数,线性函数作用到线性函数上,结果还是线性函数,也就是说,无论最终有多少隐藏层,得到的最终输出结果仍然是输入的线性组合。(很简单,不会推导参看原文)

7. 激活函数求导:

① sigmod函数:


Ps:在后续的文章中,我们会使用g'(z)来表示dg(z)/dz。

② tanh函数



③ ReLU函数


当z=0时,ReLU函数的导数不存在,不过这个并不重要,我们可以假设其导数也是1即可。

④ Leaky ReLU函数:


7. 梯度下降法:



接下来,就让我们继续来看一个两层的神经网络吧:



8.参数为什么要随机初始化:

参数初始化一个常用的原则是:使用较小随机数来对参数进行初始化。

① 为什么不能使用一个固定参数(例如0)来对神经网络进行初始化。


② 实际初始化过程:


③ 为什么要乘以一个小系数




阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页