东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3113|回复: 5

[课堂笔记] label smoothing标签平滑的工作原理

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14418
QQ
发表于 2020-8-28 10:15:50 | 显示全部楼层 |阅读模式
label smoothing标签平滑的工作原理
防止过拟合
对于ground truth为one-hot的情况,使用模型去拟合这样的函数具有两个问题:首先,无法保证模型的泛化能力,容易导致过拟合; 其次,全概率和零概率将鼓励所属类别和非所属类别之间的差距会被尽可能拉大,因为模型太过相信自己的预测了。

为了解决这一问题,使得模型没有那么肯定,提出了label smoothing。

clf_loss = slim.losses.softmax_cross_entropy(logits, onehot_labels=gt_liveness_oh, label_smoothing=0.1)




  1. import os
  2. import tensorflow as tf
  3. import numpy as np


  4. # 假设有一批数据在神经网络最后一层的输出值和他们的真实标签
  5. y_predict = np.array([[4.0, 5.0, 10.0], [1.0, 5.0, 4.0], [1.0, 15.0, 4.0]])

  6. y_true_oh = np.array([[0, 0, 1], [0, 1, 0], [0, 1, 0]])

  7. # 直接计算softmax交叉熵损失:

  8. res = tf.losses.softmax_cross_entropy(logits=y_predict, onehot_labels=y_true_oh, label_smoothing=0)
  9. res_smooth = tf.losses.softmax_cross_entropy(logits=y_predict, onehot_labels=y_true_oh, label_smoothing=0.01)

  10. res_val, res_smooth_val = tf.Session().run([res, res_smooth])
  11. print("没有进行标签平滑的loss={}, 进行了标签平滑的loss={}".format(res_val, res_smooth_val))

  12. # 标签平滑的原理是对真实标签做了改变
  13. # new_onehot_labels = onehot_labels * (1 - label_smoothing) + label_smoothing / num_classes
  14. new_onehot_labels = y_true_oh * (1 - 0.01) + 0.01 / 3
  15. print("原始实际值:", y_true_oh)
  16. print("平滑后的实际值:", new_onehot_labels)

  17. # 然后使用平滑标签计算softmax交叉熵就能得到最终的结果了,我们也可以验证一下:

  18. res_smooth2 = tf.losses.softmax_cross_entropy(onehot_labels=new_onehot_labels, logits=y_predict, label_smoothing=0)

  19. print("进行了标签平滑的loss={}".format(tf.Session().run(res_smooth2)))

复制代码




让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14418
QQ
 楼主| 发表于 2020-8-28 10:18:31 | 显示全部楼层
设置了标签平滑之后,分类loss会变大,问题:label_smoothing的值多大合适?
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14418
QQ
 楼主| 发表于 2020-8-28 10:20:10 | 显示全部楼层
适当调整label,让两端的极值往中间凑凑,可以增加泛化性能
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14418
QQ
 楼主| 发表于 2020-8-28 10:22:36 | 显示全部楼层
label smoothing就是一种正则化的方法而已,让分类之间的cluster更加紧凑,增加类间距离,减少类内距离
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14418
QQ
 楼主| 发表于 2020-8-28 10:36:29 | 显示全部楼层
标签在某种程度上软化了,增加了模型的泛化能力,一定程度上防止过拟合
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14418
QQ
 楼主| 发表于 2020-8-28 10:39:19 | 显示全部楼层
东方耀 发表于 2020-8-28 10:36
标签在某种程度上软化了,增加了模型的泛化能力,一定程度上防止过拟合

好像很多人都设置:label_smoothing=0.1
如果是[0,1]则会变成 [0.05, 0.95]
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-3-28 16:31 , Processed in 0.173425 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表