深入浅出 one-hot

在深度学习中,经常会听到 one-hot 编码,也称“独热编码”。本文就拆解一下,这种编码是做什么的以及为什么需要这种编码。

对初学者来说,one-hot 的概念确实有点绕,不过没关系,如果一遍看不懂,那就多读一遍多理解一下,相信你会搞清楚 one-hot 的。

1、什么是 one-hot 编码

one-hot 编码用于将离散的分类标签转换为二进制向量。

注意这里有两个关键词,第一个是离散的分类,第二个是二进制向量。

  • 先说什么是离散的分类?
    假设我们要做一个分类任务,总共有3个类别,分别是猫、狗、人。

    那这三个类别就是一种离散的分类:它们之间互相独立,不存在谁比谁大、谁比谁先、谁比谁后的关系。

    像之前说的Mnist手写数字识别中,分类是 0-9 这十个数字。

    虽然这 10 个数字是有大小区分的,但对于分类任务来说,数字 0 和数字 1 并不存在大小关系,就好比字母 A 和字母 B 不存在大小关系、苹果和橘子不存在大小关系一样。

    它们仅仅是一种类别,只不过手写数字识别任务中,类别刚好是数字。这就是离散分类。

  • 再说二进制向量。
    向量我们都能理解,[1, 2, 3, 4] 这是一个一维数组,也可以称之为一维向量。那么二进制向量,就是里面的数字都是二进制的,像是[0, 1, 0, 0]。

    在搞清楚这两个概念之后,我们先回到这个任务本身,需要对猫、狗、人这三个类别进行分类。

    在神经网络中,需要一种数学的表示方法,来表示猫、狗、人的分类。

    最容易想到的,便是以 0 代表猫,以 1 代表狗,以 2 代表人这种简单粗暴的方式。

    那这样行不行呢?肯定不行。

    分类标签一个重要的作用,就是要计算预测标签与真实标签之间的相似性,从而计算 loss 值。loss值越小,说明预测标签与真实标签之间越接近。

    相似性其实就是两个标签之间的距离。如果按照 0 代表猫, 1 代表狗, 2 代表人这种表示方法,那么猫和狗之间距离为 1, 狗和人之间距离为 1, 而猫和人之间距离为 2。

    这在参与损失计算的时候是完全不能接受的:互相独立的标签之间,竟然出现了不对等的情况。

    因此,需要有一种表示方法,将互相独立的标签表示为互相独立的数字,并且数字之间的距离也相等。

    这就是one-hot,也叫独热编码。

    它就用二进制向量来表征这种离散的分类标签。

2、独热编码怎么做?

在这里插入图片描述
上表我们竖着看,黄色的代表是猫的编码 [1, 0, 0],浅绿色代表的是狗的编码 [0, 1, 0]。

解释如下:如果一个标签是猫,那么猫对应的位置就是1,狗和人对应的位置就是0,得到一个编码[1, 0, 0]。

这样得到的编码都是独立的。

我们学过几何,在三维坐标系下,[1, 0, 0]、[0, 1, 0]和[0, 0, 1]这三个向量是互相垂直的,也就是互相正交独立。

他们之间距离相等,这就解决了上面说的独立的标签之间,表示方法不对等的情况。

3、独立编码怎么用?

在了解了独热编码是怎么做的之后,那么在神经网络中,它是怎么起作用的呢?

看过Softmax 的底层原理的同学可能还有印象,softmax 激活函数输出一系列概率值,来说明本轮推理属于某一分类的概率是多少。

假设某一轮推理得到的softmax得分如下,有70%的概率是猫,20%的概率是狗,10%的概率是人。

分类Softmax得分
0.7
0.2
0.1

对于这一轮的预测结果,需要和真实标签进行对比以获取loss值,假设真实标签就是猫。

而猫的独热编码是[1, 0, 0]。

在这里插入图片描述
为了让最终loss值最小,会根据真实标签和预测得分值来调整权重,使得预测得分朝着理想的真实标签靠近。

上图中,猫的得分是0.7,而真实得分是1,因此这一类的得分还需要继续增大,计算完loss值后,反向传播调整权重,使这一类的得分继续增大。

狗和人的得分相反,得分需要继续减小,计算完loss值后,反向传播调整权重,使这一类的得分继续减少。

如果预测得分为[1, 0, 0],那么就和真实标签完全相同,此时的loss值就为0, 就说明本轮训练拟合的很好了。

当然one-hot编码有它的局限性,上面的例子是3分类的例子,那如果分类数量有1万个,我们是不是需要将1万个离散的分类,编码成1万维的向量来计算呢?

这就出现了维度灾难了,而且大量的数据为0,向量稀疏的厉害,此时就需要用其他的优化手段来处理了。

转载自:https://zhuanlan.zhihu.com/p/634296763

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值