Neural Network and Deep Learning读书笔记-Chap3

提升学习速率

交叉熵损失函数的好处:损失函数对权重的偏导中不包含sigma的导数项(可抵消),所以不会引起学习速度过慢的问题

神经元的饱和问题:当z(也就是神经元的加权输入和)接近0或者1的时候,sigma_prime(z)就会接近0,我们就说这个神经元饱和了。而delta会和sigma_prime相关,因此delta也会很小了,学习速率就慢了。

学习速率慢有两种情况:一种是输入神经元是低激活的,影响第四个方程,另一个是输出神经元是高或低激活的,这样在反向传播时误差变小。

解决学习速率慢的另一个方法是使用softmax函数,然后定义log-likelyhood对数损失函数。log-likelyhood函数的导数形式和交叉熵的导数形式很像,并且在softmax带来的性质下(所有输出为正且相加为1),log-likelihood可以衡量输出的准确性,即如果输出结果准确,则对应最后一层神经元的激活值就接近1,而对应最后一层神经元的log-likelihood值就越接近0。所以softmax+log-likelihood和sigmoid+cross entropy的效果差不多。

过拟合和正则化

讲到过拟合的时候,作者首先用一个小例子引入了过拟合的概念。故事讲的是诺贝尔物理奖获得者费米有一次被问到对一个解决了一个非常重要的物理问题的数学模型的看法,这个模型与实验相符得很好,但是费米对这个模型持怀疑态度。他问这个模型中有多少自由参数,有人说是4个。费米回答道:“我记得我的朋友约翰尼·冯·诺伊曼曾说,用四个参数我可以拟合一头大象,而用五个我则可以让它的鼻子晃起来。”这个故事的意思是,一个拥有许多参数的模型可能可以拟合非常复杂的现象,但可能并没有抓住这个现象的本质,而仅仅是通过复杂的公式拟合了表面的数据,而实际上本质可能是非常简单的。注意,这里的最后一句话,实际上只是一种猜测:我们并没有证据说明这个现象的本质不会和它的现象一样复杂,而只是主观地认为本质不会那么复杂。这个想法也被称为奥卡姆剃刀原则。注意,这只是一个原则,因此完全可能存在与之相反的情况,即拟合出的复杂模型恰好就描述了现象的本质。但一般情况下,我们还是认为我们的研究对象符合奥卡姆剃刀原则(看来人还是不够聪明,还是希望对任何现象都有一个简单的解释)。

避免过拟合的方法:

1. 增大数据量:图像中可以通过旋转、偏移、扭曲等方法制造新样本

2. L1、L2正则化:

· L2正则化是在损失函数上加上一个参数的平方项。这个平方项在进行反向传播时可以传到某一个权重的梯度更新步骤上去,表现为在常规的梯度更新公式上加上一个与权重大小成正比例的项。也就是说,如果权重太大,则在梯度更新时会减小得很多,这样也就使得权重不会太大。

· L1正则化则是在损失函数上加上一个一阶绝对值项,这一项在进行反向传播时也可以传到某一个权重梯度上去,但表现为一个与w的大小无关的常数项,也就是说,无论w大小如何,这个正则化项对梯度下降的贡献是一样的。

两者的差异可以这样概括,L1正则化的时候w是以常数项收缩,而L2正则化时有一个与w成比例的收缩系数。因此L1正则化更容易到达0。

大家可能比较熟悉两幅分别解释L1和L2正则化的图。每幅图中都有若干椭圆形的等值线,其中第一幅图除椭圆等值线外还有以原点为中心的另一组椭圆等值线圈,第二幅图除椭圆形等值线外还有一组菱形等值线。两幅图均有的等值线圈代表原始成本函数,而第一幅图的另一组椭圆等值线圈代表L2正则化项,第二幅图的另一组菱形等值线圈代表L1正则化项。而优化正则化后的目标函数,就等价于在这样一个平面中去寻找两项所代表的图形相切或者端点相交的地方,而如果正则化项的权重较大,对于菱形等值线来说,意味着需要画的菱形的面积不用太大,也意味着它与椭圆等值线的交点越有可能出现在端点处,也就是x轴或y轴上,因此使得权重向量中零元素的个数增多。

3. dropout:dropout不是对成本函数进行修改,而是修改网络的结构,在每一个batch优化的时候,随机扔掉一些中间层神经元,然后更新权重和偏差,再下一个batch的时候,又随机选择一些神经元扔掉再更新权重和偏差。这样做的意义是,希望我们神经元学习到的东西能够更加健壮,而不会受一些小的误差的影响,这正好符合避免过拟合的思想。是不是和bagging的想法有点像?

权重初始化

如果我们对每个权重都采用标准正态分布的方法去初始化,那么在经过了一层的前向传播后,会发现某一个神经元的输入分布(z)会变成非常宽的整体分布(因为z是由众多标准正态分布的变量加权相加而得),那么后面的神经元就非常容易饱和,因此我们需要使用缩放后的正态分布,比如每一个神经元对应的输入权重都乘上一个1/sqrt(n),这样求和后的分布方差就为1了。

其他的神经元

tanh神经元,相当于sigmoid做了放射变换,形状是一样的,但是取值范围是从-1到1了。有什么用?在sigmoid的情况下,输出都是正数,只要某一个神经元的误差是正的,那么它的所有输入连接的权重的优化方向都是一样的,这不太符合期望。

ReLU神经元,max(0,wx+b),解决饱和问题,右侧导数不会趋近于0,左侧导数完全等于0,因此在某些情况下神经元可以不用再学习,也有助于解决过拟合问题。

你可能感兴趣的:(Neural Network and Deep Learning读书笔记-Chap3)