平滑处理#
术语解释#
在机器学习或深度学习中,平滑处理(Smoothing) 是一种通过数学手段调整概率分布或模型输出,使其更加均匀、不那么“极端”的技术。例如在贝叶斯估计中、TFIDF 的计算原理中以及在模型蒸馏中我们都提到过“平滑”这个词,但是它们之间又略有差别,下面简单介绍。
-
贝叶斯估计中的平滑处理
在计算条件概率时,如果训练集不充分某个维度的条件概率缺失时(即训练集中不存在这一情况),如果直接将这一条件下的条件概率置为零,那么在预测的时候将会产生很大的错差。 为此,我们在计算条件概率时,可以在分子和分母中加入一个平滑项 $\lambda$(当 $\lambda=1$ 时称为拉普拉斯平滑)来解决这一问题,计算公式如下:
$$ P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^{m}I(x_i^{(j)}=a_{jl},y_i=c_k)+\lambda}{\sum_{i=1}^{m}I(y_i=c_k)+S_j\lambda} $$根据上式可以看出,此时再也不会出现条件概率为0的情况。更多相关内容介绍可以参见「7.2 贝叶斯估计:朴素贝叶斯中的参数估计方法」。
-
TFIDF中的平滑处理
在TFIDF中计算IDF时,为了避免分母为0时(当使用自定义词表时)出现溢出的情况,通常会对分母做平滑处理,如下所示
$$ \text{IDF}=\log \left( \frac{\text{总的样本数}}{\text{包含有该词的样本数}+1} \right) $$不过这种做法仍旧有一个瑕疵,当所有样本中都含有某个词的时候,计算出来的IDF为负数,因此,sklearn在实现IDF计算时采用了另外一种平滑处理方式
$$ \text{IDF}=\log \left( \frac{\text{总的样本数}+1}{\text{包含有该词的样本数}+1} \right)+1 $$这样就同时避免了上面所出现的两种情况。更多相关内容的介绍可以参见「6.3 TF-IDF词袋模型:带权文本特征表示方法」。
-
模型蒸馏中的平滑处理
在模型蒸馏时,为了提高预测结果的多样性,通常可以增加 Softmax 函数中的温度超参数 $T$(当 $T > 1$ 时),使教师模型的输出概率分布变得更加平滑,如下
$$ q_i=\frac{\exp(z_i/T)}{\sum_j\exp(z_j/T)} $$如图所示,随着温度的增加,整个分布会更加的趋于平滑,并且信息熵也在随之递增。
不同温度下各分布信息熵对比 更多相关内容可以参见 「LLM模型蒸馏算法原理与PyTorch 实现:详解温度 Temperature、软标签与损失函数」。