深度学习之感性理解-优化等问题

损失函数

顾名思义是一种跟损失相关的函数,所谓损失,可以理解为我们预期和现实之间的差距,损失函数表示这个差距是跟某个因素相关的函数,我们目标是希望我预测的跟现实的最好没差距,但是那样基本很难,肯定会有差距,那我们退而求其次,希望差距越来越小,那就希望能够求得损失函数的最小值。学过微积分的都知道,求极值其实就是求导数为零的点。

我们可以简化下损失函数,最简单的二次函数的图为损失函数:
深度学习之感性理解-优化等问题
我们将损失函数简单定义为:
=()2损失=(预测值-现实值)^2
我们要做的就是找到最低的那个点,斜率为零,所以不管我们从哪里开始,都希望能够慢慢的往下走,最后到那个点,这个时候的参数是最好的,这种方法叫做梯度下降法。

梯度下降法

还是如上图,可以看成我们在上山,希望下山,又希望能够快点下来,于是我们会想去找下山的最快的方向,也就是斜率的反方向,称为梯度,随着慢慢下来,梯度会越来越小,直到零,称为梯度下降法。
深度学习之感性理解-优化等问题
由于梯度下降法涉及到微分,如果是多个参数就涉及到偏导的链式运算,类似很多个数连乘,如果样本量很大,层数很多,每个样本都要参与计算,参数又很多,运算量会非常大,花费大量时间,另一方面,如果数据量很大,比如图片数据10个G,大到无法一次性放入内存里,也没办法一次性计算完。所以就需要一种能够缩短时间,能分批计算的方法,叫做随机梯度下降法。

随机梯度下降法

跟梯度下降法差不多,只是不会所有的样本一起算,会采取抽样的方式,就跟全国人口身高调查,不可能每个人都查到,肯定是抽样调查的,比如每个省每个市每个区每个小区抽查多少人,类似这种方法。这种方法随机取一定数量的样本,进行计算,而且现在GPU硬件可以进行并行计算,把可以一批样本合成一个矩阵,一次性计算,跟计算1个样本的时间一样,时间上大大节省了。

当然这个也是有缺点的,抽样了也会有一定的以偏概全,不管怎么抽样,偏差肯定是在的,但是从统计的规律上来讲,也是一种近似,可以理解成一种用精度换时间的做法。

梯度消失和爆炸

我们一般在神经元上还有一个非线性的激励函数,类似来**这个神经元是否有输出,常用的Sigmoid函数:
深度学习之感性理解-优化等问题
我们可以看见,这个函数在两边求导后基本趋向于零,于是在进行链式求导的过程中,越乘越小,最后梯度几乎变零了,也称为梯度消失。可能这个时候会想到把参数设置打一点,来补偿导数太小,这样貌似解决了,但是另一方面,如果函数在中间求导,导数为0.25,当参数很大的时候w=10,相乘会2.5远大于1,随着神经网络层数增多,连乘之后,可能就是2.5的N次方,这个就很大了,这种现象就是梯度爆炸
为了解决这个问题,现在大部分**函数都用Relu:
深度学习之感性理解-优化等问题
斜率不是0就是1,很方便计算,也不会造成上面所述的问题。

归一化

简单来说就是统一标准,统一单位。
举个例子,有人说爱因斯坦数学才考5分,我们小孩数学考60分,比他高了,为什么不像他那么聪明,我想说的是爱因斯坦那个时候的数学考试满分就是5分,现在满分是100分,无法比较啊,如果要比较,那就统一,都统一成100分,那爱因斯坦的分数还要增加20倍,等于100,刚好满分,这样去比较比较合理吧。

同理,我们的数据集中有些数据可能是100,有些数据可能是0.1,但是不能说100的就比0.1的影响要大,具体还要看意义,他们在不同的维度,所以更加公平的方式就是每个维度归一化,计算成一定占比,比如1个维度的数据为 100 100,那归一化就为0.5 0.5,另一个维度为0.1 0.4,那归一化为0.2 0.8,这样都映射到0到1就比较合理了。

过拟合,欠拟合

简单的来说,欠拟合就是模型太简单,无法很好的拟合数据,连训练的时候都无法有好的表现。过拟合就是模型过于复杂,过于贴近数据,失去了一些通用性,训练模型的时候表现好,测试的时候表现比较差。如下图,左边为欠拟合,右边为过拟合,中间是比较好的。神经网络由于层数多,参数多,模型复杂,经常会过拟合,所以需要一些方法来限制一下,比如正则化,DropOut等。
深度学习之感性理解-优化等问题

正则化,DropOut

正则化简单来说,就是给损失函数在加一项正则化惩罚项,可以看成一种限制,他可以使得模型更加平滑,防止过拟合。
DropOut是从神经网络每层的神经元出发,随机减少一定比例的神经元,从而减少参数和复杂度,防止过拟合。
深度学习之感性理解-优化等问题

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片均来自网络,侵删。