分类 二、深度学习 下的文章
交叉熵损失(Cross-entropy)和平方损失(MSE)究竟有何区别
一、概念区别
1. 均方差损失函数(MSE)
简单来说,均方误差(MSE)的含义是求一个batch中n个样本的n个输出与期望输出的差的平方的平均值
2. Cross-entropy(交叉熵损失函数)
交叉熵是用来评估当前训练得到的概率分布与真实分布的差异情况。它刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。
为什么分类用交叉熵损失不用平分损失
1.交叉熵loss权重更新更快
mse:梯度更新表达式包含激活函数的导数
交叉熵:交叉熵损失函数关于输入权重的梯度表达式与预测值与真实值的误差成正比且不含激活函数的梯度
2.MSE是非凸优化问题而 Cross-entropy 是凸优化问题
可以总结为:
分类中为什么交叉熵损失函数比均方误差损失函数更常用?
答: 交叉熵损失函数关于输入权重的梯度表达式与预测值与真实值的误差成正比且不含激活函数的梯度,而均方误差损失函数关于输入权重的梯度表达式中则含有,由于常用的sigmoid/tanh等激活函数存在梯度饱和区,使得MSE对权重的梯度会很小,参数w调整的慢,训练也慢,而交叉熵损失函数则不会出现此问题,其参数w会根据误差调整,训练更快,效果更好。
详细原因参考下面的图:
参考:
1.https://blog.csdn.net/woshiliulei0/article/details/124710184
2.https://aitechtogether.com/article/15966.html
ner目前sota方法
向量的余弦距离、欧式距离
一、余弦距离
二、欧式距离
模型压缩总结
一、模型压缩的几种方式
1.模型量化
2.模型剪枝
3.模型蒸馏(知识蒸馏)
Bert系列模型的蒸馏方法分预训练的阶段、Finetune阶段的蒸馏:
(1)预训练的阶段
针对Bert系列模型的蒸馏方法,有distillbert和tinybert,这些模型都是直接作用在bert预训练的阶段,然后把训练好的模型应用到下游任务,这样的压缩蒸馏方法对一般人来说不太友好
(2)Finetune阶段的蒸馏方法有如下两种方式:
- 1)基于FastBert的蒸馏:(https://arxiv.org/pdf/2004.02178.pdf)
2)基于bert-of-theseus方式进行蒸馏(https://arxiv.org/pdf/2002.02925.pdf)
可以把Bert按照module replacing的方式来做压缩。
4.模型其他方案
(1)权重共享
RoBERTa 和 ALBERT中介绍的 ALBERT 也是一种 BERT 压缩方法,主要是用了参数共享和矩阵分解的方法压缩 BERT
二、英伟达模型硬加速
介绍:
目前针对预训练模型推理加速,在模型不掉点情况下实现精度无损加速,目前尝试有效的方案:
1、TensortRT-Fp32加速
2、FasterTransformer-Fp32加速
注意:
1、针对Bert系列模型:在P40卡只能使用低版本TRT(<8),经过测试低版本trt加速效果不如FT的加速效果,如果是高算力的卡优先建议使用高版本TRT来加速。
2、针对基于Transformer+beamSearch这类生成模型:这里建议直接使用FT来实现加速,TRT在此类模型的加速收益不如FT。