loss function
什么是loss?
loss: loss是我们用来对模型满意程度的指标。loss设计的原则是:模型越好loss越低,模型越差loss越高,但也有过拟合的情况。
loss function: 在分类问题中,输入样本经过含权重矩阵θ的模型后会得出关于各个类别的分值,如何通过分值与样本的标签来得到我们对模型的满意程度就是Loss function的主要工作了。训练过程中通过调整参数矩阵θ来降低loss,使用模型更优。多分类问题中常用Softmax分类器与多类SVM分类器。
Softmax分类器
Softmax与logistict回归
Softmax分类器将类别分值用负对数转换为概率来表示,相对于multiclass-SVM的输出更为直观。
Softmax分类器的损失函数为交叉熵损失 (cross-entropy loss),即通常所说的Softmax loss。logistic回归是用来解决二分类问题的,其损失函数与Softmax与有很相似的形式。
Softmax的损失函数: //1表示指示函数,即真值返回1,否则返回0
\begin{align}J(\theta) = - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y^{(i)} = j\right\} \log \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)} }}\right]\end{align}
logistic回归的损失函数:
\begin{align}
J(\theta) =
-\frac{1}{m} \left[ \sum_{i=1}^m y^{(i)} \log h_\theta(x^{(i)}) + (1-y^{(i)}) \log (1-h_\theta(x^{(i)})) \right]
\end{align}
可以看出,将(1)式中k=2即可得到(2)式
Softmax对样本x的分类结果(假设函数):
\begin{align}
h_\theta(x^{(i)}) =
\begin{bmatrix}
p(y^{(i)} = 1 | x^{(i)}; \theta) \
p(y^{(i)} = 2 | x^{(i)}; \theta) \
\vdots \
p(y^{(i)} = k | x^{(i)}; \theta)
\end{bmatrix}
=
\frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} }
\begin{bmatrix}
e^{ \theta_1^T x^{(i)} } \
e^{ \theta_2^T x^{(i)} } \
\vdots \
e^{ \theta_k^T x^{(i)} } \
\end{bmatrix}
\end{align}
logistic回归的分类结果(假设函数):
\begin{align}
h_\theta(x) = \frac{1}{1+\exp(-\theta^Tx)},
\end{align}
但(3)式与(4)式有什么关系呢?
原来Softmax预测出每个类别的概率具有“参数冗余”的特性。“参数冗余”是指:若矩阵θ为代价函数的极小值点,那么θ-Ψ也为代价函数的极小值点。(ψ为向量,并且矩阵-向量=矩阵每个列向量-向量)
\begin{align}
p(y^{(i)} = j | x^{(i)} ; \theta)
&= \frac{e^{(\theta_j-\psi)^T x^{(i)}}}{\sum_{l=1}^k e^{ (\theta_l-\psi)^T x^{(i)}}} \
&= \frac{e^{\theta_j^T x^{(i)}} e^{-\psi^Tx^{(i)}}}{\sum_{l=1}^k e^{\theta_l^T x^{(i)}} e^{-\psi^Tx^{(i)}}} \
&= \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)}}}.
\end{align}
这时,令ψ=θ1、k=2,可得到(3) 等价于(4)的结论
所以,Softmax其实是logistic regression将二分类问题推广到多分类问题的一般形式。
但是Softmax分类器与k个logistic回归分类器还是有区别的:
通常,当k个类别之间互斥时使用k=k的Softmax分类器,当k个类别之间与交集时使用k个logistic回归分类器。
Softmax分类器为什么要正则化损失项?
求解loss最小值时往往不是简单利用“参数冗余”将θ1=0,而是加入权重衰减(正则化损失)来惩罚过大的参数值。加入正则化损失后的代价函数为:
\begin{align}\notag J(\theta) = - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y^{(i)} = j\right\} \log \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)} }} \right] + \frac{\lambda}{2} \sum_{i=1}^k \sum_{j=0}^n \theta_{ij}^2\end{align}
其中,第二项为正则化损失荐,加入该项的加一个好处是将代价函数变为一个凸函数。
简单实例
在一个三类别模型预测的过程中,假设输出的分值向量为[1, -2, 0]
则分类计算过过程: [1,-2, 0] => [e1, e-2, e0]=[2.71, 0.14, 1]//熵值化 => [0.7, 0.04, 0.26] //归一化为概率
算法实践
后续补充
Multiclass SVM
基本思想:正常确类别的分值比错误类别的分值高出一个间距(margin)
Multiclass SVM分类器的损失函数为hinge loss,也称为SVM loss。
hinge loss
算法实践
已知
- 在一个三类别模型预测的过程中,假设输出的分值向量为[13, -7, 11]
- 我们知道标签为1,即第一个类别为正确类别
- \(\Delta=10\)
计算过程
因为\(y_{i}\)=1, 所以\(j只能=2、3\)
\[L_{2}=max(0,-7-13+10)=0\]
\[L_{3}=max(0,11-13+10)=8\]
所以,
\[L_{i}=0+8=8\]
从上面的计算过程可以看出SVM的损失函数想要正确分类类别\(y_{i}\)的分数比不正确类别分数高,而且至少要高\(\Delta\)。如果不满足这点,就开始计算损失值。
正则化损失
提高模型泛化能力,避免过拟合。
从公式上来看:
- 若两个等比例的权重,权重的范数越小越好
- 若两个权重范数相等,权重的系数大小分布越分均等越好
直观来看:
从直观上来看,这是因为w_2的权重值更小且更分散。既然L2惩罚倾向于更小更分散的权重向量,这就会鼓励分类器最终将所有维度上的特征都用起来,而不是强烈依赖其中少数几个维度。
MutiSVM VS SVM
未完待续
补充实验
reference:
loss function的更多相关文章
- Derivative of the softmax loss function
Back-propagation in a nerual network with a Softmax classifier, which uses the Softmax function: \[\ ...
- loss function与cost function
实际上,代价函数(cost function)和损失函数(loss function 亦称为 error function)是同义的.它们都是事先定义一个假设函数(hypothesis),通过训练集由 ...
- 损失函数(Loss Function) -1
http://www.ics.uci.edu/~dramanan/teaching/ics273a_winter08/lectures/lecture14.pdf Loss Function 损失函数 ...
- 【caffe】loss function、cost function和error
@tags: caffe 机器学习 在机器学习(暂时限定有监督学习)中,常见的算法大都可以划分为两个部分来理解它 一个是它的Hypothesis function,也就是你用一个函数f,来拟合任意一个 ...
- 惩罚因子(penalty term)与损失函数(loss function)
penalty term 和 loss function 看起来很相似,但其实二者完全不同. 惩罚因子: penalty term的作用是把受限优化问题转化为非受限优化问题. 比如我们要优化: min ...
- 论文笔记之: Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function
Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function CVPR 2 ...
- [machine learning] Loss Function view
[machine learning] Loss Function view 有关Loss Function(LF),只想说,终于写了 一.Loss Function 什么是Loss Function? ...
- [基础] Loss function (二)
Loss function = Loss term(误差项) + Regularization term(正则项),上次写的是误差项,这次正则项. 正则项的解释没那么直观,需要知道不适定问题,在经典的 ...
- [基础] Loss function(一)
Loss function = Loss term(误差项) + Regularization term(正则项),我们先来研究误差项:首先,所谓误差项,当然是误差的越少越好,由于不存在负误差,所以为 ...
随机推荐
- Android关于listView的BaseAdapter以及getView的三级优化
1.4个重写方法的含义 自定义Adapter继承自BaseAdapter(通用适配器) getCount(); getItem(); getItemId(); getViewTypaCount() ...
- jsonp跨域请求
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header
继续进行 ASP.NET MVC 3 网站优化工作,使用 Google Page 检测发现提示 You should Specify Vary: Accept-Encoding header,The ...
- prompt() 方法,弹框带输入框
prompt() 有alert的风格,却带着输入框,这是怎么实现的呢? 语法 prompt(text,defaultText) 参数 描述 text 可选.要在对话框中显示的纯文本(而不是 HTML ...
- ZooKeeper:数据模型
ZooKeeper数据模型 ZNode ZNode 分类 Stat Watcher Watcher工作原理 Watcher事件说明 Watcher注册 事件发布 示例 ZooKeeper 数据模型 整 ...
- Scala基础语法 (一)
如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...
- 15天玩转redis —— 第九篇 发布/订阅模式
本系列已经过半了,这一篇我们来看看redis好玩的发布订阅模式,其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子 就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果 ...
- 【linux】free命令中cached和buffers的区别
一.命令 [root@localhost ~]# free -m total used free shared buffers cached Mem: 7869 7651 218 1 191 5081 ...
- Windows10上安装EDEM2.7
这次我们来安装EDEM2.7. 安装软件来自于互联网,本文仅作学习交流之用,工程应用请购买正版. 1 软件准备 从网上找到EDEM2.7安装包,解压后里面包含两个文件,如下图所示. 2 软件安装 鼠标 ...
- 部署 DevStack - 每天5分钟玩转 OpenStack(17)
本节按照以下步骤部署 DevStack 实验环境,包括控制节点和计算节点 创建虚拟机 按照物理资源需求创建 devstack-controller 和 devstak-compute 虚拟机 安装操作 ...