在回归问题中,经过目标函数来求解最优解,经常使用的是平方偏差(最小二乘线性回归)代价函数。假设函数图像如图2-4所示,当参数发生变化时,假设函数状态也会随着变化。
想要拟合图中的离散点,咱们须要尽量找到最优的和来使这条直线更能表明全部数据。如何找到最优解呢,这就须要使用代价函数来求解,以平方偏差代价函数为例,假设函数为。 平方偏差代价函数的主要思想就是将实际数据给出的值与拟合出的线的对应值作差,求出拟合出的直线与实际的差距。在实际应用中,为了不因个别极端数据产生的影响,采用相似方差再取二分之一的方式来减少个别数据的影响。所以,引出代价函数:html
最优解即为代价函数的最小值。若是是1个参数,代价函数通常经过二维曲线即可直观看出。若是是2个参数,代价函数经过三维图像可看出效果,参数越多,越复杂。 当参数为2个时,代价函数是三维图像。git
目标函数存在一个下界,在优化过程中,若是优化算法可以使目标函数不断减少,根据单调有界准则(参见优化方法),这个优化算法就能证实是收敛有效的。 只要设计的目标函数有下界,基本上均可以,代价函数非负更为方便。算法
其中,\(J\)表示代价函数,\(x\)表示样本,\(y\)表示实际值,\(a\)表示输出值,\(n\)表示样本的总数。使用一个样本为例简单说明,此时二次代价函数为:网络
假如使用梯度降低法(Gradient descent)来调整权值参数的大小,权值\(w\)和偏置\(b\)的梯度推导以下:机器学习
其中,\(z\)表示神经元的输入,\(a=\sigma(z)\)其中\(z=wx+b\),\(\sigma\)表示激活函数。权值\(w\)和偏置\(b\)的梯度跟激活函数的梯度成正比,激活函数的梯度越大,权值\(w\)和偏置\(b\)的大小调整得越快,训练收敛得就越快。函数
注:神经网络经常使用的激活函数为sigmoid函数,该函数的曲线以下图2-6所示:
如上图所示,对0.88和0.98两个点进行比较:
假设目标是收敛到1.0。0.88离目标1.0比较远,梯度比较大,权值调整比较大。0.98离目标1.0比较近,梯度比较小,权值调整比较小。调整方案合理。
假如目标是收敛到0。0.88离目标0比较近,梯度比较大,权值调整比较大。0.98离目标0比较远,梯度比较小,权值调整比较小。调整方案不合理。
缘由:在使用sigmoid函数的状况下, 初始的代价(偏差)越大,致使训练越慢。性能
公式的推导:从两个方面考虑
大佬的推导学习
其中,\(J\)表示代价函数,\(x\)表示样本,\(y\)表示实际值,\(a\)表示输出值,\(a=\sigma(z)\)其中\(z=wx+b\),\(n\)表示样本的总数。
权值\(w\)和偏置\(b\)的梯度推导以下:优化
最好本身手动推一下 加深对其的理解spa
用隐函数求导和链式求导法则得出:
推导公式时须要用到Sigmod函数一基本性质:\(/sigma\)函数导数的性质:\(\sigma'(z)=\sigma(z)(1-\sigma(z))\)
当偏差越大时,梯度就越大,权值\(w\)和偏置\(b\)调整就越快,训练的速度也就越快。
这是一个使人兴奋的表达式,优雅而富有深意。让咱们注意一下这个式子中最为关键的一项σ(z)−y ,它实际上是告诉咱们学习的偏差越大,你获得的导数值越大,曲线降低的越快,你的学习速度更快,网络收敛的更快。并且损失对于权重系数的偏导数只与偏差有关,且激活函数的导数值无
二次代价函数适合输出神经元是线性的状况,交叉熵代价函数适合输出神经元是S型函数的状况。
对数似然函数经常使用来做为softmax回归的目标函数。深度学习中广泛的作法是将softmax做为最后一层,此时经常使用的代价函数是对数似然代价函数。
对数似然代价函数与softmax的组合和交叉熵与sigmoid函数的组合很是类似。对数似然代价函数在二分类时能够化简为交叉熵代价函数的形式。
对于对数似然函数的推导:主要是Softmax函数的导数
在tensorflow中:
与sigmoid搭配使用的交叉熵函数:tf.nn.sigmoid_cross_entropy_with_logits()
。
与softmax搭配使用的交叉熵函数:tf.nn.softmax_cross_entropy_with_logits()
。
在pytorch中:
与sigmoid搭配使用的交叉熵函数:torch.nn.BCEWithLogitsLoss()
。
与softmax搭配使用的交叉熵函数:torch.nn.CrossEntropyLoss()
。
为何用交叉熵代替二次代价函数
(1)为何不用二次方代价函数
由上一节可知,权值\(w\)和偏置\(b\)的偏导数为\(\frac{\partial J}{\partial w}=(a-y)\sigma'(z)x\),\(\frac{\partial J}{\partial b}=(a-y)\sigma'(z)\), 偏导数受激活函数的导数影响,sigmoid函数导数在输出接近0和1时很是小,导数小,差值error也小,会致使一些实例在刚开始训练时学习得很是慢。
(2)为何要用交叉熵
交叉熵函数权值\(w\)和偏置\(b\)的梯度推导为:
由以上公式可知,权重学习的速度受到\(\sigma{(z)}-y\)影响,更大的偏差,就有更快的学习速度,避免了二次代价函数方程中因\(\sigma'{(z)}\)致使的学习缓慢的状况。
损失函数(Loss Function)又叫作偏差函数,用来衡量算法的运行状况,估量模型的预测值与真实值的不一致程度,是一个非负实值函数,一般使用\( L(Y, f(x))\)来表示。损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。
经验风险函数和结构风险函数的解释,见下面章节代价函数 损失函数和目标函数的区别。
机器学习经过对算法中的目标函数进行不断求解优化,获得最终想要的结果。分类和回归问题中,一般使用损失函数或代价函数做为目标函数。
损失函数用来评价预测值和真实值不同的程度。一般损失函数越好,模型的性能也越好。
损失函数可分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差异,结构风险损失函数是在经验风险损失函数上加上正则项。
下面介绍经常使用的损失函数:
(1)0-1损失函数
若是预测值和目标值相等,值为0,若是不相等,值为1。
通常的在实际使用中,相等的条件过于严格,可适当放宽条件:
(2)绝对值损失函数
和0-1损失函数类似,绝对值损失函数表示为:
(3)平方损失函数
这点可从最小二乘法和欧几里得距离角度理解。最小二乘法的原理是,最优拟合曲线应该使全部点到回归直线的距离和最小。
(4)对数损失函数
常见的逻辑回归使用的就是对数损失函数,有不少人认为逻辑回归的损失函数是平方损失,其实否则。逻辑回归它假设样本服从伯努利分布(0-1分布),进而求得知足该分布的似然函数,接着取对数求极值等。逻辑回归推导出的经验风险函数是最小化负的似然函数,从损失函数的角度看,就是对数损失函数。
(6)指数损失函数
指数损失函数的标准形式为:
例如AdaBoost就是以指数损失函数为损失函数。
(7)Hinge损失函数
Hinge损失函数的标准形式以下:
统一的形式:
其中y是预测值,范围为(-1,1),t为目标值,其为-1或1。
在线性支持向量机中,最优化问题可等价于
上式类似于下式
其中\(l(wx_i+by_i)\)是Hinge损失函数,\(\Vert w\Vert ^2\)可看作为正则化项。
对于似然函数的理解:
似然则用来描述已知随机变量输出结果时,未知参数的可能取值。似然函数的重要性不是它的具体取值,而是当参数变化时函数到底变小仍是变大。对同一个似然函数,若是存在一个参数值,使得它的函数值达到最大的话,那么这个值就是最为“合理”的参数值。
最大似然函数: 是指找出一个(θ)的组合,使得\(L(θ)=L(x1,x2,…,xn;θ)=ΠP(xi;θ\)最大化,即便得样本数据出现的几率最大化
似然函数取得最大值表示相应的参数可以使得统计模型最为合理
从这样一个想法出发,最大似然估计的作法是:
首先选取似然函数(通常是 几率密度函数或几率质量函数),
整理以后求最大值。实际应用中通常会取似然函数的对数做为求最大值的函数,这样求出的最大值和直接求最大值获得的结果是相同的。
统计学的观点始终是认为样本的出现是基于一个分布的。那么咱们去假设这个分布为f,里面有参数theta。对于不一样的theta,样本的分布不同。f(x|θ)表示的就是在给定参数theta的状况下,x出现的可能性多大。L(θ|x)表示的是在给定样本x的时候,哪一个参数theta使得x出现的可能性多大。
假设逻辑回归模型
假设逻辑回归模型的几率分布是伯努利分布0-1两点分布,其几率质量函数为:
其似然函数为:
对数似然函数为:
对数函数在单个数据点上的定义为:
则全局样本损失函数为:
由此可看出,对数损失函数与极大似然估计的对数似然函数本质上是相同的。因此逻辑回归直接采用对数损失函数。
例如,在高斯分布中,咱们须要肯定均值和标准差。
如何肯定这两个参数?最大似然估计是比较经常使用的方法。最大似然的目标是找到一些参数值,这些参数值对应的分布能够最大化观测到数据的几率。
由于须要计算观测到全部数据的全几率,即全部观测到的数据点的联合几率。现考虑以下简化状况:
(1)假设观测到每一个数据点的几率和其余数据点的几率是独立的。
(2)取天然对数。
假设观测到单个数据点\(x_i(i=1,2,...n)\)的几率为:(正态分布)
(3)其联合几率为:连乘取似然函数
对上式取天然对数,可得:
根据对数定律,上式能够化简为:
而后求导为:
上式左半部分为对数损失函数。损失函数越小越好,所以咱们令等式左半的对数损失函数为0,可得:
同理,可计算\(\sigma\)。