神经网络和深度学习(吴恩达) _浅层神经网络

这是本系列学习笔记的第二篇,上篇为《神经网络和深度学习(吴恩达) _神经网络基础》

本篇主要会谈到:神经网络的表示激活函数


  • 神经网络的表示:

神经网络到底长啥样?在上一篇中,我们知道Logistic回归模型为:

                                            神经网络和深度学习(吴恩达) _浅层神经网络_第1张图片

那么这里这要将对z的操作(图中圈出来的2步)整合到单个神经元中,再将单个神经元连接起来,即形成了一个简单的神经网络,这里给出一个由5个神经元组成的2层神经网络(输入层不算):

                                            神经网络和深度学习(吴恩达) _浅层神经网络_第2张图片

                                                                   神经网络和深度学习(吴恩达) _浅层神经网络_第3张图片

之所以将中间的称为隐藏层,是因为在实际的模型训练中,这些隐藏层计算的结果是中间结果,我们是看不到的,我们能看到的就是输入数据集X, 输出的记过预测集Y。而所谓的深层神经网络,我现在可以简单的认为就是隐藏层的层数更多,运算更复杂而已,基本原理也是如此。


  • 激活函数:

首先想想为什么需要这个激活函数,简单点可以理解为:使用激活函数是为了添加非线性因素,具体可以看看知乎上的回答和【机器学习】神经网络-激活函数-面面观(Activation Function)

激活函数其实有很多,在前面的二分分类问题中,用Sigmoid函数做激活函数是个不错的选择,但在其它情况下,选择别的函数作激活函数的表现要比Sigmoid函数好得多,这里就先说说视频中讲到的4种激活函数:

①Sigmoid函数:

                                                                    

                                                                神经网络和深度学习(吴恩达) _浅层神经网络_第4张图片

这个函数现在应该是很熟悉了,从前面利用Logistic回归模型解决二分分类问题时,就一直在使用Sigmoid函数作为激活函数,优点也很明显,可以很好的将线性输出区间(-∞,+∞)映射到概率区间(0, 1),解决二分分类问题。但缺点也同样很明显:①当输入远离坐标原点时,即上图中我圈出来的区域,斜率几乎为0,使用梯度下降算法优化参数时,速度太慢。②函数输出不是以0为中心的,即平均值不是0,而是0.5,这将不利于后面的权重参数更新(这点现在暂时还不太能理解,有望通过后续的学习弄明白)。③这个Sigmoid函数需要做指数运算,速度相对较慢。由于这些缺点的存在,导致现在几乎不用Sigmoid函数作激活函数了。

②tanh函数:

                                                        

                                                            神经网络和深度学习(吴恩达) _浅层神经网络_第5张图片

这个函数乍一看和上面的Sigmoid函数一样啊,细看发现这两个函数的输出区间不一样,Sigmoid函数的输出区间为(0, 1),而tanh函数的输出空间为(-1, 1)。单从函数图像上来看的话,可以想像tanh是由Sigmoid平移而来。这里我们发现tanh函数关于原点对称了,也就是说平均值为0,这与上面的Sigmoid函数是不同的,于是消除了上面的第②条缺点,但缺点①③仍然存在,但表现已经要比Sigmoid函数好很多了。所以现在在二分分类的问题中,隐藏层一般选tanh函数作激活函数,输出层选Sigmoid函数作激活函数。

③ReLU函数:

                                                                        

                                                                神经网络和深度学习(吴恩达) _浅层神经网络_第6张图片

这个函数是目前使用最多的一个激活函数,其优点为:①输入为正数的时候,斜率始终为1,那么在反向传播使用梯度下降算法时,参数的优化速度会很快,会比前两种激活函数快得多。②我们可以发现这个函数只有线性运算,而不会出现指数运算,故速度会更快。当然缺点也不是没有:①当输入为负值时,斜率为0,意味着这时梯度下降算法会完全失效,视频中谈到的解决办法就是人为的添加一些规则,使得输入恒为正。②当输入为0时,该函数不可导,故不存在梯度。一般来说,激活函数都是要求不能存在不可导点的,但视频里的解释是,实际应用中出现输入恰好等于0.0000时的概率非常小,可以忽略不计这个不可导点。

④PReLU函数:

                                                                            

                                                                       神经网络和深度学习(吴恩达) _浅层神经网络_第7张图片

这相当于是对上面的ReLU函数做了一个改良:当输入为负时,也会有一个很小的斜率,不至于使梯度下降算法完全失效。总结起来看,除非是二分分类问题,否则激活函数一般都是使用ReLU函数。



你可能感兴趣的:(学习笔记)