one-hot编码
one-hot编码参考链接
one-hot编码又称一位有效编码。其方法是使用 N位 状态寄存器来对 N个状态 进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。
其实就是对于类别特征,如果其有N种状态则可以使用N位的二进制编码对其进行表示,每种状态对应一位1,其余为0的一个二进制编码。
目的: 对每个类别特征使用数字化的形式表示。
举例:
使用one-hot编码之后的表示:
优点:
(1) 解决了分类器不好处理离散数据的问题—将特征映射到欧式空间中。
a. 欧式空间。在回归,分类,聚类等机器学习算法中,特征之间距离计算 或 相似度计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。
b. one-hot 编码。使用 one-hot 编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值 就 对应欧式空间的某个点。将离散型特征使用 one-hot 编码,确实会让 特征之间的距离计算 更加合理。
(2) 在一定程度上也起到了 扩充特征 的作用。
缺点:
在文本特征表示上有些缺点就非常突出了。
(1) 它是一个词袋模型,不考虑 词与词之间的顺序(文本中词的顺序信息也是很重要的);
(2) 它 假设词与词相互独立(在大多数情况下,词与词是相互影响的);
(3) 它得到的 特征是离散稀疏 的 (这个问题最严重)。离散稀疏的原因是特征的状态太多了。(比如,将居住的城市作为一个类别特征,那么该类别特征的维度将是中国所有的城市得数目这么多)
标签平滑
思想:将hard one-hot label转化为soft label。
1、为什么要使用标签平滑?
对于损失函数,我们希望尽可能的使用预测概率分布去拟合真实概率分布,而拟合one-hot的真实概率函数会带来两个问题:
- 1)无法保证模型的泛化能力,容易造成过拟合:试想一下,如果训练集比较小而且训练集中存在错误标签那么这样训练出来的模型岂不是错的。
- 2)全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难适应。会造成模型过于相信预测的类别。
2、使用标签平滑的好处。
- 可以提高模型泛化能力
- 可以提高模型的训练速度
- 可以有效地抑制过拟合
3、标签平滑的方式。
原来是1的位置变为
(
1
−
α
)
(1-\alpha)
(1−α) ,其他的原来是0的位置变为
α
/
(
K
−
1
)
\alpha/(K-1)
α/(K−1) , 通常
α
\alpha
α 取0.1。假设一个6分类任务,之前的label
[
1
,
0
,
0
,
0
,
0
,
0
]
[1,0,0,0,0,0]
[1,0,0,0,0,0]就变成了
[
0.9
,
0.02
,
0.02
,
0.02
,
0.02
,
0.02
]
[0.9,0.02,0.02,0.02,0.02,0.02]
[0.9,0.02,0.02,0.02,0.02,0.02] .
因此网络对输出的要求不再是逼近于1,预测为正的概率仅接近0.9即可。
添加了Label Smoothing之后的真实概率分布变化:
交叉熵损失函数变化如下:
最优的预测概率分布如下:
直观上看,这个目标还是很奇怪的,如果一个样本网络非常确认其类别,给了个0.99的置信度,难道经过Label Smoothing,还要反向优化不成?
label smoothing的缺点其实我也没看懂。