损失函数就是为了衡量当前参数下model的预测值predict距离真实值label的大小
J = 1 2 n ∑ x ∥ y ( x ) − a L ( x ) ∥ 2 J = \frac{1}{2n}\sum_x\Vert y(x)-a^L(x)\Vert^2 J=2n1x∑∥y(x)−aL(x)∥2
J 表 示 代 价 函 数 , 表示代价函数, 表示代价函数,x 表 示 样 本 , 表示样本, 表示样本,y 表 示 实 际 值 , 表示实际值, 表示实际值,a 表 示 输 出 值 , 表示输出值, 表示输出值,n 表 示 样 本 的 总 数 。 表示样本的总数。 表示样本的总数。 1 2 \frac{1}{2} 21 是为了求导时消去2;
使用一个样本为例简单说明,此时二次代价函数为:
J = ( y − a ) 2 2 J = \frac{(y-a)^2}{2} J=2(y−a)2
假如使用梯度下降法(Gradient descent)来调整权值参数的大小,权值 w w w和偏置 b b b的梯度推导如下:
∂ J ∂ w = ( y − a ) σ ′ ( z ) x , ∂ J ∂ b = ( y − a ) σ ′ ( z ) \frac{\partial J}{\partial w}=(y-a)\sigma'(z)x\;, \frac{\partial J}{\partial b}=(y-a)\sigma'(z) ∂w∂J=(y−a)σ′(z)x,∂b∂J=(y−a)σ′(z)
其中, z z z表示神经元的输入, σ \sigma σ表示激活函数。权值 w w w和偏置 b b b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,权值 w w w和偏置 b b 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 = − 1 n ∑ x [ y ln a + ( 1 − y ) ln ( 1 − a ) ] J = -\frac{1}{n}\sum_x[y\ln a + (1-y)\ln{(1-a)}] J=−n1x∑[ylna+(1−y)ln(1−a)]
其中, J J J表示代价函数, x x x表示样本, y y y表示实际值, a a a表示输出值, n n n表示样本的总数。
∂ J ∂ w j = 1 n ∑ x x j ( σ ( z ) − y ) , ∂ J ∂ b = 1 n ∑ x ( σ ( z ) − y ) \frac{\partial J}{\partial w_j}=\frac{1}{n}\sum_{x}x_j(\sigma{(z)}-y)\;,\frac{\partial J}{\partial b}=\frac{1}{n}\sum_{x}(\sigma{(z)}-y) ∂wj∂J=n1x∑xj(σ(z)−y),∂b∂J=n1x∑(σ(z)−y)
当误差越大时,梯度就越大,权值 w w w和偏置 b b b调整就越快,训练的速度也就越快。
,权重学习的速度受到 σ ( z ) − y \sigma{(z)}-y σ(z)−y影响,更大的误差,就有更快的学习速度,避免了二次代价函数方程中因 σ ′ ( z ) \sigma'{(z)} σ′(z)导致的学习缓慢的情况。
二次代价函数适合输出神经元是线性的情况,交叉熵代价函数适合输出神经元是S型函数的情况。
对数似然函数常用来作为softmax回归的代价函数。深度学习中普遍的做法是将softmax作为最后一层,此时常用的代价函数是对数似然代价函数。
对数似然代价函数与softmax的组合和交叉熵与sigmoid函数的组合非常相似。对数似然代价函数在二分类时可以化简为交叉熵代价函数的形式。
在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()
。
据似然函数的定义,单个样本的似然函数即:
L = f m u l i t ( l a b e l ; p r e d i c t ) L = f_{mulit}(label;predict) L=fmulit(label;predict)
所以,整个样本集(或者一个batch)的似然函数即:
L = ∏ X f m u l t i ( l a b e l ; p r e d i c t ) = ∏ X ∏ i = 1 C p r e d i c t ( i ) l a b e l ( i ) L=\prod_{X}f_{multi}(label;predict)= \prod_{X}\prod_{i=1}^{C}predict(i)^{label(i)} L=X∏fmulti(label;predict)=X∏i=1∏Cpredict(i)label(i)
所以在累乘号前面加上log函数后,就成了所谓的对数似然函数:
L = ∑ X ∑ i = 1 C l a b e l ( i ) l o g ( p r e d i c t ( i ) ) L=\sum_{X}\sum_{i=1}^{C}label(i)log(predict(i)) L=X∑i=1∑Clabel(i)log(predict(i))
而最大化对数似然函数就等效于最小化负对数似然函数,所以前面加个负号就和交叉熵的形式相同的了。
交叉熵定义:对于某种分布的随机变量X~p(x), 有一个模型q(x)用于近似p(x)的概率分布,则分布X与模型q之间的交叉熵即:
H ( X , q ) = − ∑ x p ( x ) l o g q ( x ) H(X,q)=-\sum_{x}p(x)logq(x) H(X,q)=−x∑p(x)logq(x)
这里X的分布模型即样本集label的真实分布模型,这里模型q(x)即想要模拟真实分布模型的机器学习模型。可以说交叉熵是直接衡量两个分布,或者说两个model之间的差异。而似然函数则是解释以model的输出为参数的某分布模型对样本集的解释程度。
损失函数(Loss Function)又叫做误差函数,用来衡量算法的运行情况,估量模型的预测值与真实值的不一致程度
L ( Y , f ( x ) ) = { 1 , Y ≠ f ( x ) 0 , Y = f ( x ) L(Y, f(x)) =\begin{cases}1,& Y\ne f(x)\\0,& Y = f(x)\end{cases} L(Y,f(x))={1,0,Y=f(x)Y=f(x)
预测值与目标值相等为0,否则为1
或者公式
L ( Y , f ( x ) ) = { 1 , ∣ Y − f ( x ) ∣ ⩾ T 0 , ∣ Y − f ( x ) ∣ < T L(Y, f(x)) =\begin{cases}1,& |Y-f(x)|\geqslant T\\0,& |Y-f(x)|
和0-1损失函数相似,绝对值损失函数表示为:
L ( Y , f ( x ) ) = ∣ Y − f ( x ) ∣ L(Y, f(x)) = |Y-f(x)| L(Y,f(x))=∣Y−f(x)∣
L ( Y , f ( x ) ) = ∑ N ( Y − f ( x ) ) 2 L(Y, f(x)) = \sum_N{(Y-f(x))}^2 L(Y,f(x))=N∑(Y−f(x))2
这点可从最小二乘法和欧几里得距离角度理解。最小二乘法的原理是,最优拟合曲线应该使所有点到回归直线的距离和最小。
L ( Y , P ( Y ∣ X ) ) = − log P ( Y ∣ X ) = − 1 N ∑ i = 1 N ∑ j = 1 M y i j l o g ( p i j ) L(Y, P(Y|X)) = -\log{P(Y|X)}=-\frac{1}{N}\sum_{i=1}^N\sum_{j=1}^M y_{ij}log(p_{ij}) L(Y,P(Y∣X))=−logP(Y∣X)=−N1i=1∑Nj=1∑Myijlog(pij)
其中, Y 为输出变量, X为输入变量, L 为损失函数. N为输入样本量, M为可能的类别数, y i j y_{ij} yij 是一个二值指标, 表示类别 j 是否是输入实例 xi 的真实类别. p i j p_{ij} pij 为模型或分类器预测输入实例 xi 属于类别 j 的概率.
(逻辑回归一般使用对数损失函数)
假设逻辑回归模型
P ( y = 1 ∣ x ; θ ) = 1 1 + e − θ T x P(y=1|x;\theta)=\frac{1}{1+e^{-\theta^{T}x}} P(y=1∣x;θ)=1+e−θTx1
假设逻辑回归模型的概率分布是伯努利分布,其概率质量函数为:
P ( X = n ) = { 1 − p , n = 0 p , n = 1 P(X=n)= \begin{cases} 1-p, n=0\\ p,n=1 \end{cases} P(X=n)={1−p,n=0p,n=1
其似然函数为:
L ( θ ) = ∏ i = 1 m P ( y = 1 ∣ x i ) y i P ( y = 0 ∣ x i ) 1 − y i L(\theta)=\prod_{i=1}^{m} P(y=1|x_i)^{y_i}P(y=0|x_i)^{1-y_i} L(θ)=i=1∏mP(y=1∣xi)yiP(y=0∣xi)1−yi
对数似然函数为:
ln L ( θ ) = ∑ i = 1 m [ y i ln P ( y = 1 ∣ x i ) + ( 1 − y i ) ln P ( y = 0 ∣ x i ) ] = ∑ i = 1 m [ y i ln P ( y = 1 ∣ x i ) + ( 1 − y i ) ln ( 1 − P ( y = 1 ∣ x i ) ) ] \ln L(\theta)=\sum_{i=1}^{m}[y_i\ln{P(y=1|x_i)}+(1-y_i)\ln{P(y=0|x_i)}]\\ =\sum_{i=1}^m[y_i\ln{P(y=1|x_i)}+(1-y_i)\ln(1-P(y=1|x_i))] lnL(θ)=i=1∑m[yilnP(y=1∣xi)+(1−yi)lnP(y=0∣xi)]=i=1∑m[yilnP(y=1∣xi)+(1−yi)ln(1−P(y=1∣xi))]
对数函数在单个数据点上的定义为:
c o s t ( y , p ( y ∣ x ) ) = − y ln p ( y ∣ x ) − ( 1 − y ) ln ( 1 − p ( y ∣ x ) ) cost(y,p(y|x))=-y\ln{p(y|x)-(1-y)\ln(1-p(y|x))} cost(y,p(y∣x))=−ylnp(y∣x)−(1−y)ln(1−p(y∣x))
则全局样本损失函数为:
c o s t ( y , p ( y ∣ x ) ) = − ∑ i = 1 m [ y i ln p ( y i ∣ x i ) + ( 1 − y i ) ln ( 1 − p ( y i ∣ x i ) ) ] cost(y,p(y|x)) = -\sum_{i=1}^m[y_i\ln p(y_i|x_i)+(1-y_i)\ln(1-p(y_i|x_i))] cost(y,p(y∣x))=−i=1∑m[yilnp(yi∣xi)+(1−yi)ln(1−p(yi∣xi))]
由此可看出,对数损失函数与极大似然估计的对数似然函数本质上是相同的。所以逻辑回归直接采用对数损失函数。
指数损失函数的标准形式为:
L ( Y , f ( x ) ) = exp ( − Y f ( x ) ) L(Y, f(x)) = \exp(-Yf(x)) L(Y,f(x))=exp(−Yf(x))
例如AdaBoost就是以指数损失函数为损失函数。
Hinge损失函数的标准形式如下:
L ( y ) = max ( 0 , 1 − t y ) L(y) = \max{(0, 1-ty)} L(y)=max(0,1−ty)
统一的形式:
L ( Y , f ( x ) ) = max ( 0 , Y f ( x ) ) L(Y, f(x)) = \max{(0, Yf(x))} L(Y,f(x))=max(0,Yf(x))
其中y是预测值,范围为(-1,1),t为目标值,其为-1或1。
在线性支持向量机中,最优化问题可等价于
w , b min ∑ i = 1 N ( 1 − y i ( w x i + b ) ) + λ ∥ w ∥ 2 \underset{\min}{w,b}\sum_{i=1}^N (1-y_i(wx_i+b))+\lambda\Vert w\Vert ^2 minw,bi=1∑N(1−yi(wxi+b))+λ∥w∥2
上式相似于下式
1 m ∑ i = 1 N l ( w x i + b y i ) + ∥ w ∥ 2 \frac{1}{m}\sum_{i=1}^{N}l(wx_i+by_i) + \Vert w\Vert ^2 m1i=1∑Nl(wxi+byi)+∥w∥2
其中 l ( w x i + b y i ) l(wx_i+by_i) l(wxi+byi)是Hinge损失函数, ∥ w ∥ 2 \Vert w\Vert ^2 ∥w∥2可看做为正则化项。