平滑是什么?去掉噪声和尖刺,或者给没见过的情况留点概率
平滑(Smoothing)是数据处理和机器学习中一个常用的概念,它的核心思想是减少数据中剧烈的、不规则的变化,让结果变得更加平稳、更加稳健。在不同的场合,平滑有不同的具体含义。
数据和信号的平滑
现实中采集到的数据常常带有噪声:股票价格每天上下跳动,传感器的读数时高时低,每日的新增用户数受到各种偶然因素的影响。如果直接看原始数据,很难看清整体的趋势。平滑通过某种方式对数据进行“平均”,去掉短期的随机波动,让长期的趋势显现出来。常用的方法有:移动平均,用一个窗口内若干个数据点的平均值来代替中间的那个点,比如股票的五日均线、二十日均线;指数平滑,对越近的数据赋予越大的权重,越远的数据权重按指数衰减,既能平滑噪声,又能较快地反映最新的变化,在销量预测等领域很常用;高斯平滑,在图像处理中用高斯函数作为权重进行加权平均,让图像变得柔和、去除噪点,常作为边缘检测等操作前的预处理。平滑程度需要把握好:平滑得太少,噪声去不干净;平滑得太多,又会把真实的变化和细节也抹掉。
概率估计中的平滑
在统计语言模型和朴素贝叶斯分类器中,平滑有一个特定的含义:解决“零概率”的问题。比如用朴素贝叶斯做垃圾邮件分类,需要统计每个词在垃圾邮件中出现的概率。如果某个词在训练数据的垃圾邮件中恰好一次都没有出现过,按照简单的统计,它在垃圾邮件中出现的概率就是零。由于朴素贝叶斯要把各个词的概率相乘,只要邮件中出现了这一个词,整封邮件属于垃圾邮件的概率就变成了零,无论其他的词多么像垃圾邮件。这显然不合理:训练数据中没出现过,不等于永远不会出现。
平滑的办法就是给这些没见过的情况也分配一点点概率。最简单的是拉普拉斯平滑,也叫加一平滑:在统计每个词的出现次数时,都人为地加上 1,这样就不会有任何一个词的概率为零。在语言模型中,人们还发展了更精细的方法,比如古德-图灵估计、卡茨回退、Kneser-Ney 平滑,后者在 n 元语法语言模型中效果尤其好,在神经网络语言模型出现之前被广泛使用。
深度学习中的平滑
标签平滑:在训练分类模型时,不使用“正确类别为 1、其他类别为 0”这样绝对的硬标签,而是把正确类别的目标值稍微降低,比如 0.9,把剩下的一点概率平均分给其他类别。这可以防止模型变得过于自信,提高泛化能力和概率的校准程度,在图像分类和机器翻译等任务中被广泛使用。此外,在绘制训练过程中的损失曲线时,通常也会对曲线进行平滑,以便更清楚地看出训练的趋势。