损失函数MSE、Cross entropy、Hinge Loss-杂记

目录

1.均方误差损失函数(MSE)

2.交叉熵损失

2.1 二分类

2.2多分类

2.3 交叉熵损失 和 KL 散度

2.4交叉熵损失函数的梯度

3.Hinge Loss 


损失函数是机器学习模型的关键部分:定义了衡量模型性能的目标,通过最小化损失函数来确定模型学习的权重参数的设置。有几种不同的常见损失函数可供选择:交叉熵损失、均方误差、huber loss和hinge loss等等。给定一个特定的模型,每个损失函数都有其特性,例如,(L2正则)hinge loss具有最大裕度(maximum-margin)特性,而与线性回归结合使用时的均方误差具有凸性保证。

1.均方误差损失函数(MSE)

最小二乘法中损失函数采用均方误差的原因 - 爱码网

L(Y, f(x)) = \frac{1}{N}\sum_{i=1}^{N}(Y_{i} -f(x_{i}))^{2}

MSE 计算模型的预测与真实标签的接近程度,常用作回归问题的损失函数。损失函数越小,表明预测值与真实值越贴近。

从概率统计的角度来看,其背后的最终支撑是:最小二乘估计假设误差是服从高斯分布的

以线性回归为例,预测值表示如下:

\hat{y_{i}}= \theta ^Tx_{i},令预测值与真实值的误差表示为\epsilon = y_{i} - \theta^{T}x_{i}

通常误差满足均值为0的高斯分布,即正态分布,即给定条件下样本点 x 来预测回归值 y 的条件概率密度就是:

p(y_{i}|x_{i};\theta) = \frac{1}{\sqrt{2 \pi} \sigma}exp ( -\frac{(y_{i}- \theta^{T}x_{i})^{2}}{2\sigma^{2}} )

我们期待模型能够在全部样本上预测最准,即概率积最大,这个概率积就称为最大似然估计:

L(\theta)=\Pi_{i=1}^{n}p(y_{i}|x_{i};\theta)

两边同时取ln,得到对数似然

\begin{aligned} \ln(L(\theta)) &= \frac{1}{2n}\sum_{i=1}^{n} \ln p(y_{i}|x_{i}; \theta) \\ &= \frac{1}{2n}\sum_{i=1}^{n}( \ln(-\frac{1}{\sqrt{2\pi}\sigma}) -\frac{(y_{i}-\theta^{T}x_{i})^{2}}{2\sigma^2}) \end{aligned}

\begin{aligned} \theta &= \arg \max_{\theta} \sum_{i=1}^{n}( \ln(-\frac{1}{\sqrt{2\pi}\sigma}) -\frac{(y_{i}-\theta^{T}x_{i})^{2}}{2\sigma^2})\\ &= arg \min_{\theta} \sum_{i=1}^{n}(y_{i}-\theta^{T}x_{i})^{2} \end{aligned}

这就是均方误差。

\frac{dJ}{d\theta_{j}} =\frac{1}{n} (y_{i} - \hat{y_{i}})x_{j}

2.交叉熵损失

2.1 二分类

h_{\theta}(x_{i}) = \sigma (W x_{i} + b)

p(y_{i}=1 | x_{i})=h_{\theta}(x_{i}), \ p(y_{i}=0 | x_{i})=1 - h_{\theta}(x_{i})

在二分的情况下,模型最后需要预测的结果只有两种情况,可以理解为在线性回归的结果上套了一层sigmoid函数,将实数域的结果压缩到0-1之间,压缩后的结果可以理解为预测为正的概率,对于类别1 的概率是 p,则类别0的概率是1-p, 此时损失函数表示如下:

L = \frac{1}{N}\sum_{i}L_{i} =- \frac{1}{N}\sum_{i}(y_{i} \log(p_{i}) + (1-y_{i})\log(1-p_{i}))

其中y_{i} 表示样本的类别,正类为1,负类为0。p_{i}表示预测为正类的概率。

直观解释:

y_{i} = 1即正例时,只有第一部分对损失函数产生贡献,从下图蓝色线可以看出预测概率p越接近1损失越小,越接近0损失越大;当y_{i} = 0即负例时,只有第二部分对损失函数产生贡献,从下图黄色线可以看出预测概率p越接近0损失越小,越接近1损失越大;这些是符合直觉的。

 CS231n Convolutional Neural Networks for Visual Recognition

Picking Loss Functions - A comparison between MSE, Cross Entropy, and Hinge Loss – Rohan Varma – Software Engineer @ Facebook

概率解释:

h_{\theta}(x_{i}) = \sigma (W x_{i} + b)
p(y_{i}=1 | x_{i})=h_{\theta}(x_{i}), \ p(y_{i}=0 | x_{i})=1 - h_{\theta}(x_{i})

将上面的两种情况合并:

p(y_{i}|x_{i}) = [h_{\theta}(x_{i})]^{y_{i}}[1 - h_{\theta}(x_{i})]^{(1 - y_{i})}

最大似然:

\Pi_{i=1}^{N}[h_{\theta}(x_{i})]^{y_{i}}[1 - h_{\theta}(x_{i})]^{(1 - y_{i})}

cross entropy loss:

J=-\sum_{i=1}^{N}[y_{i} \log(h_{\theta}(x_{i})) + (1 - y_{i}) \log(1-h_{\theta}(x_{i}))]

\frac{\partial L}{\partial \theta_{j}} = \sum_{i}(\sigma(\theta \cdot x^{(i)}) - y) \cdot x^{(i)}_j

2.2多分类

softMax:

h_{\theta}(x_{i})=\frac{e^{f_{y_i}}}{\sum_{j}e^{f_{j}}}

令多分类的标签y_{i}是one-hot编码的,共有K个类别。

常用的cross entropy loss

-\sum_{i=1}^{N}\sum_{j=1}^{K}y_{ij}\log(h_{\theta}(x_{i})_{j})

内层求和,由于我们有多个类,我们需要对所有类求和。特别的,由于标签是one-hot编码,所以内层的求和只会有一处不为0,这不为0的数值是正确的类别对应的预测值(归一化后的概率)的对数。其值在[0,1]之间,越接近1取负的对数后越小,越接近0取负的对数之后越大。这种形式的交叉熵只关心正确类别上的预测值

另一种形式的交叉熵损失

-\sum_{i=1}^{N}\sum_{j=1}^{K}[y_{ij}\log(h_{\theta}(x_{i})_{j}) +(1- y_{ij})\log(1-h_{\theta}(x_{i})_{j}) ]

内层求和项,两部分只会有一部分是有值的。第二部分是对非正确类别预测的概率值的损失,当y_{ij}=0时,即错误类别,我们会期待1-h_{\theta}(x_{i})_{j}尽量大,也就是在这个类别上的预测值h_{\theta}(x_{i})_{j}尽可能小。

2.3 交叉熵损失 和 KL 散度

KL散度与交叉熵区别与联系_nia_wish的博客-CSDN博客_kl散度和交叉熵的区别

熵是表示随机变量不确定性的度量

H(A) = -\sum_{i=1}^{N}P_{A}(x_{i})\log P_{A}(x_{i})

KL散度,又称相对熵,可用于度量两个概率分布之间的差异,KL散度不满足对称性,即D_{KL}(A||B) \neq D_{KL}(B||A)

对于连续事件,

D_{KL}(A||B) = \int a(x) \log(\frac{a(x)}{b(x)})

对于离散事件,

D_{KL}(A||B) = \sum_{i} P_{A}(x_{i}) \log (\frac{P_{A}(x_{i})}{P_{B}(x_{i})}) = \sum_{i}[P_{A}(x_{i})\log (P_A(x_{i})) - P_{A}(x_{i}) \log (P_{B}(x_{i}))]

P_{A} = P_{B},即两个事件完全相同,则KL散度等于0。

 D_{KL}(A||B) A 与 B 的对数差 在 A 上的期望值。

交叉熵 VS KL 散度,只考虑第一种情况的交叉熵,这边A表示真实分布,B表示预测分布,

H(A) = -\sum_{i=1}^{N}P_{A}(x_{i})\log P_{A}(x_{i})

交叉熵

H(A,B) = -\sum_{i}P_{A}(x_{i}) \log (P_{B}(x_{i}))

则:

D_{KL}(A||B) = -H(A) + H(A,B)

若H(A)是一个常量,则KL散度和交叉熵是等价的。

交叉熵的性质:

  • 与KL散度一样,交叉熵也不具备对称性
  • 从名字上来看,cross(交叉)主要用于描述两个事件之间的相互关系,对自己求交叉熵等于熵。

2.4交叉熵损失函数的梯度

损失函数|交叉熵损失函数 - 知乎

只考虑第一种情况的交叉熵损失函数,单个样本的交叉熵损失

p_{j}=e^{f_{y_{j}}} / \sum_{j}e^{f_{j}}L = -\sum_{j=1}^{K}y_{j}\log(p_{j})

(1)Lp_{k}求偏导

    令y_{k}=1, 其他为0。则L= -y_{k}\log(p_{j})=-\log(p_{j}),则

     \frac{\partial L}{\partial p_{k}} = -\frac{1}{p_{k}}

(2) p_{k} 对 f_{y_{c}}求偏导

      a) c=k的时候

         \begin{aligned} \frac{\partial p_{k}}{\partial f_{y_{k}}} &= \frac{ e^{f_{y_{k}}} \sum_{j}e^{f_{j}} - e^{f_{y_{k}}} \cdot e^{f_{y_{k}}} }{(\sum_{j}e^{f_{j}})^2} \\ &= \frac{e^{ f_{ y_{k} } }} {\sum_{j}e^{f_{j}} } - ( \frac{ e^{f_{y_{k}}} } { \sum_{j}e^{ f_{j} } } )^{2} \\ &= \frac{e^{ f_{ y_{k} } }} {\sum_{j}e^{f_{j}} }(1- \frac{e^{ f_{ y_{k} } }} {\sum_{j}e^{f_{j}} }) \\ &= p_{k}(1-{p_{k}}) \end{aligned}

      b) c \neq k的时候 

         \begin{aligned} \frac{\partial p_{c}}{\partial f_{y_{c}}} &= \frac{ 0 \cdot \sum_{j}e^{f_{j}} - e^{f_{y_{k}}} \cdot e^{f_{y_{c}}} }{(\sum_{j}e^{f_{j}})^2} \\ &= - \frac{ e^{f_{y_{k}}} \cdot e^{f_{y_{c}}} } { (\sum_{j}e^{ f_{j} } )^{2}} \\ &= \frac{e^{ f_{ y_{k} } }} {\sum_{j}e^{f_{j}} }(0- \frac{e^{ f_{ y_{c} } }} {\sum_{j}e^{f_{j}} }) \\ &= p_{k}(0-{p_{c}}) \end{aligned}

 (3)f_{y_{c}}\theta_{c}求偏导

       \frac{\partial f_{y_{c}}}{\partial \theta_{c}} = x_{c}

最终的导数:

\begin{aligned} \frac{\partial L}{\partial \theta_{c}} &= \frac{\partial L}{\partial p_{k}} \cdot \frac{\partial p_{k}}{\partial f_{y_{k}}} \cdot \frac{\partial f_{y_{c}}}{\partial \theta_{c}} \\ &=-\frac{1}{p_{k}} \cdot [p_{k} \cdot (y - p_{k})] \cdot x_{k} \\ &= (p_{k} - y) \cdot x_{k} \end{aligned}

3.Hinge Loss 

https://cs231n.github.io/linear-classify/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值