码迷,mamicode.com
首页 > 其他好文 > 详细

干货|神经网络最容易被忽视的基础知识二-激活函数以及损失函数知识

时间:2020-11-30 15:16:02      阅读:12      评论:0      收藏:0      [点我收藏+]

标签:更新   rop   image   假设   初始   机器   计算   通过   leak   

上篇讲解了神经网络最容易被忽视的基础知识一
干货|神经网络最容易被忽视的基础知识一

1

为什么在人工神经网络中的神经元需要激活函数?

技术图片
上图可看做普通的线性分类器,也就是线性回归方程。这个比较基础,效果如右图。当然有时候我们发现这样的线性分类器不符合我们要求时,我们很自然的想到那我们就加多一层,这样可以拟合更加复杂的函数,如下图a:
技术图片
技术图片
但同时当我们动笔算下, 就会发现, 这样一个神经网络组合起来,输出的时候无论如何都还是一个线性方程。如上图b右边,就只能这样分类。(那也太蠢了吧)。下图表示一层加如激活函数的情况!
技术图片
一层很多时候是远远不够的,前面讲过,简单的线性分类器就可以看成是一层的神经网络,比如上图,激活函数是signmoid,那就可以看成是二分类的逻辑回归!

下面扩展到多层,如下图1,2:
技术图片

图1是一个简单的MLP(全链接神经网络),图2的右边课简单表示左图的可视化,那么对比之前的无激活函数的图,很明显是更加的非线性,拟合能力也会更强,同时可以想到,当层数更多,其能力也会越来越强!

简单来说:就是使得神经网络具有的拟合非线性函数的能力,使得其具有强大的表达能力!

简单扩展,神经网络的万能近似定理:一个前馈神经网络如果具有线性层和至少一层具有"挤压"性质的激活函数(如signmoid等),给定网络足够数量的隐藏单元,它可以以任意精度来近似任何从一个有限维空间到另一个有限维空间的borel可测函数。

要相符上面的定理,也就是想拟合任意函数,一个必须点是“要有带有“挤压”性质的激活函数”。

这里的“挤压”性质是因为早期对神经网络的研究用的是sigmoid类函数,所以对其数学性质的研究也主要基于这一类性质:将输入数值范围挤压到一定的输出数值范围。(后来发现,其他性质的激活函数也可以使得网络具有普适近似器的性质,如ReLU 。

2

一些主要的激活函数

sigmoid


优点:有较好的解释性

缺点:1.Sigmoid函数饱和使梯度消失。sigmoid神经元有一个不好的特性,就是当神经元的激活在接近0或1处时会饱和:在这些区域,梯度几乎为0。2.输出不是零中心的,这一情况将影响梯度下降的运作,因为如果输入神经元的数据总是正数,那么关于w的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数,这样梯度下降权重更新时出现z字型的下降。

这样收敛会变得异常的慢。(这也是为什么要一直保持为数据的0中心化)—–但这个问题比较小3.exp()在深度神经网络时候相比其他运算就比较慢
技术图片

Tanh非线性函数


优点:1.它的输出是零中心的。因此,在实际操作中,tanh非线性函数比sigmoid非线性函数更受欢迎。

缺点:1.和Sigmoid函数一样,饱和使梯度消失。计算慢
技术图片

ReLU


优点:1.ReLU对于随机梯度下降的收敛有巨大的加速作用( Krizhevsky 等的论文alexnet指出有6倍之多)。据称这是由它的线性,非饱和的公式导致的;2.注意:现在大部分的DNN用的激活函数就是ReLu
缺点:1.当x是小于0的时候,那么从此所以流过这个神经元的梯度将都变成0;这个时候这个ReLU单元在训练中将死亡(也就是参数无法更新),这也导致了数据多样化的丢失(因为数据一旦使得梯度为0,也就说明这些数据已不起作用)。
技术图片

Leaky ReLU


优点:1.非饱和的公式;2.Leaky ReLU是为解决“ReLU死亡”问题的尝试

缺点:1.有些研究者的论文指出这个激活函数表现很不错,但是其效果并不是很稳定

Kaiming He等人在2015年发布的论文Delving Deep into Rectifiers中介绍了一种新方法PReLU,把负区间上的斜率当做每个神经元中的一个参数。然而该激活函数在在不同任务中均有益处的一致性并没有特别清晰。
技术图片

ELU


技术图片

Maxout


  • Maxout是对ReLU和leaky ReLU的一般化归纳
    优点:1.拥有ReLU单元的所有优点(线性操作和不饱和),而没有它的缺点(死亡的ReLU单元)

缺点 :1.每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。难训练,容易过拟合

怎么用激活函数


“那么该用那种呢?”用ReLU非线性函数。注意设置好学习率,(如果学习率设置得太高,可能会发现网络中40%的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。

通过合理设置学习率,这种情况的发生概率会降低。),解决方案:或许可以监控你的网络中死亡的神经元占的比例。如果单元死亡问题困扰你,就试试Leaky ReLU或者Maxout,不要再用sigmoid了。也可以试试tanh,但是其效果应该不如ReLU或者Maxout。

3

初始化神经网络的参数可以全为0吗,其他普通线性分类器呢?

在讲初始化前,先简单复习下反向传播算法可表示为以下几个步骤:
技术图片

我们前面说过:线性分类器逻辑回归模型可以算作为一个简单的单层神经网络。为了更好的说明问题,假设一个场景,在十类分类的数字手写识别中,我们将本来二分类的逻辑回归推到多分类的softmax,也就是说,神经元的激活函数是softmax。也就是下图,然后分析:
技术图片
技术图片
得出结论,没有隐层时, 可以将所有的参数初始化为0.

如果有隐层呢?假如还是用sigmoid激活函数呢。来个更简单MLP,
技术图片
技术图片

对于隐层使用了其他函数比如ReLU: f(net)=max(0,net)其结果也是一样的: 除了输入层的输出值为x本身, 不为0, 其余的所有层的输出都为0. BP时所有梯度也都为0, 包括输出层. 这意味着所有的非输入神经元都是无意义的. 学习失败.对于卷积神经网络,循环神经网络也是一样的,故一般会用其他初始化方式。

最后最后的结论是, 一般只在训练SLP/逻辑回归模型时才使用0初始化所有参数., 更实用的结论是, 深度模型都不会使用0初始化所有参数.

4

交叉熵存在的意义和与平方差相比有什么好处?

一个非常常见的,非常漂亮的成本函数是“交叉熵”(cross-entropy)。交叉熵产生于信息论里面的信息压缩编码技术,但是它后来演变成为从博弈论到机器学习等其他领域里的重要技术手段。它的定义如下:
技术图片

其中,y 是我们预测的概率分布, y’ 是实际的分布

1.交叉熵是正的,2.当所有输入x的输出都能接近期望输出y的话,交叉熵的值将会接近 0。这两个特征在直觉上我们都会觉得它适合做代价函数。事实上,我们的均方代价函数也同时满足这两个特征。然而....

5

为什么在神经网络中用交叉熵代替二次代价函数?

还是从反向传播,参数更新的角度理解更新参数的公式如下:
技术图片

a 是 神经元的输出,其中 a = σ(z), z = wx + b,可知,偏导数受激活函数的导数影响,假设这里是传统的sigmoid激活函数(在之前很多时候都是)。那么sigmoid 的导数在输出接近 0 和 1 的时候 是非常小的,这会导致一些实例在刚开始训练时学习得非常慢!

但是如果换成是交叉熵loss,其更新权重公式最后推导得出如下:

技术图片

技术图片

但是现在也有很多其他的激活函数并不会产生饱和状态,那么均方差也有其存在价值。

推荐阅读:

精选干货|近半年干货目录汇总
干货|十分钟带你看遍词向量模型
干货|一文搞懂Hungarian Algorithm匈牙利算法

欢迎扫描关注公众号交流学习~         

技术图片

干货|神经网络最容易被忽视的基础知识二-激活函数以及损失函数知识

标签:更新   rop   image   假设   初始   机器   计算   通过   leak   

原文地址:https://blog.51cto.com/15009309/2553958

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!