机器学习经常提到的"平滑"是什么意思


例如Factorization Machine对稀疏矩阵做了平滑,能够得到比稀疏特征下SVM分类效果更好的预测性能。
已邀请:

SuiterChik - 烫烫烫烫烫烫烫烫烫烫烫烫烫

赞同来自: July pnofish dugucloud passinger lkxu tianjie 半笔书生 houzi09 Dick 练绪宝 彩色回形针 fanjiangke 居里猴弟 magic fanciest xjzhou Ksxy 手机用户492249更多 »


这个问题这么久居然还没有人来回答=。=
以下仅代表个人观点,抛砖引玉:D
关于Factorization Machine不了解,不敢谈这个,我们就聊一下机器学习中常见的“平滑”这个概念

在机器学习里,很多地方都使用到了平滑这个概念,至于为什么要使用,我个人认为,一方面是出于模糊化,另一方面出于数学上的需求(比如要求连续性)

比如神经网络中的sigmoid函数可以认为是一种平滑(个人认为的)
神经网络以前叫做感知器网络,大约在60年代的时候,我们就提出了感知器,也就是:
$$y = 0 , ~~~~~~\sum\limits_{i=1}^d w_i x_i \leq b$$
$$y = 1, ~~~~~~\sum\limits_{i=1}^d w_i x_i > b$$
对不起,我不知道这里怎么打公式堆叠=。=大家勉强看吧。其中,b是截距,也称之为阈(念yu,第四声)值。

1.jpg


如果你学过控制原理,感知器就相当于我们所说的阶跃函数。

2.png


感知器网络后来被大家改名叫做神经网络了,改名后显得高大上起来,就好像隔壁家的王狗蛋改名叫王阳明,但他还是王狗蛋.....(不是黑王阳明老前辈,我就举个例子=。=)。所以神经网络不应该因为它叫神经网络就与神经系统扯上关系,其实他们之间没有啥关系的。

如果从神经上的角度来解释这个感知器函数,直观上的理解就是,随着兴奋的加大(也就是\( \sum\limits_{i=1}^d w_i x_i\),这个东西我们也叫做“净激活”,简称“净”,缩写为“net”),当兴奋积累到一定程度,那么将突破一个阈值,使得神经元得以激活,函数上的表现形式就是\(y = 1\)。

但是这个太绝对了,不够模糊,就好比,你考试考了59分,老师说,不行哦,你没到60分,不能让你及格,于是你就不能愉快地回家过年了。所以后来我们有了sigmoid函数,也就是:

$$sigmoid(w^T x) = \frac{1}{1 + e^{-w^T x}}$$

sigmoid可以认为是感知器的模糊化,因为这时候输出是否为1不再是确定的了,而是以上式的计算结果作为输出1的概率。在以前的感知器中,如果净激活大到一定程度,网络必定输出1,而现在不一定了,从图中,我们也可以看到,sigmoid可以看做是感知器的一种平滑化(个人观点)

3.png


除了让感知器变得平滑之外,使用sigmoid还有一个原因:sigmoid是可导的。
(其实,阶跃函数也是可导的,它的导函数是脉冲函数,但是这些函数都不好处理,在控制中我们往往将其转化到复域中去分析)

比如,在反向传播神经网络中(BP神经网络),为了让误差反向传播回去从而调节权值,我们需要求激活函数的导函数。比如三层神经网络中的最顶层,如果我们使用平方误差作为准则函数,则权增量为:

$$\Delta w_{kj} = \eta (t_k - z_k) f'(net_k) y_j$$

其中,\(\eta\)是学习率,\(t_k\)是标签值,\(z_k\)是网路的输出值,\( f(net_k)\)是第k个节点的激活函数,\(y_j\)是倒数第二层的第j个节点的输出。

如果依然使用之前的感知器,那么这时候激活函数的导数就不好处理了,但如果使用sigmoid函数,导函数就非常好求了,因为其导函数为:
$$\frac{d}{d net} sigmoid(net) = sigmoid(net) \cdot \Big(1 - sigmoid(net) \Big)$$
这个公式不难证明,不清楚的同学可以私下去证一下:D

所以,使用sigmoid作为激活函数,一方面模糊化了感知器,另一方面满足了数学上要求的可导(事实上激活函数还有很多的,这里不展开讨论了)。

平滑的例子还有很多,又比如神经网络中使用到的动量项,假设在第m步更新时,我们在BP神经网络中算出了权增量,记为\(\Delta w_{bp}(m)\),如果我们不使用动量项,那么更新的规则应为
$$w(m+1) = w(m) +\Delta w_{bp}(m)$$
但如果我们引入动量项,则更新的规则为
$$w(m+1) = w(m) + (1 - \alpha) \Delta w_{bp}(m) + \alpha \Delta w(m-1)$$
也就是说,当前的权值更新不仅仅取决于当前的权增量,还一定程度上受到上一次的权增量\(\Delta w(m-1)\)影响,其影响程度\(\alpha\)我们称之为动量项系数。这种方法在数字信号处理里面叫做递归脉冲响应低通滤波器,目的其实就是为了平滑权值的更新过程。比如下面这张图

4.png


黑色的曲线代表了不使用动量项的下降过程,而白色的曲线代表了使用动量项后的下降过程。从图中可以看出,动量项的加入,一定程度上模糊化了当前的权增益,平滑下降过程。

又比如贝叶斯方法中,假设我们得到一个样本集,D = {4, 7, 2, 8} ,并且我们知道它是从某个均匀分布上采样得到的,也就是
$$p(x|\theta)\sim U(0, \theta) = \frac{1}{\theta} ~~~~~~0 \leq x \leq \theta$$

那么如果我们使用极大似然的方法来做,很容易得到\(\theta = 8\),而如果使用贝叶斯方法,假设给它一个先验\( 0 \leq \theta \leq 10\),那么根据贝叶斯方法,我们由下式去算后验概率
$$p(x|D) = \int p(x|\theta)p(\theta|D)d\theta$$
与极大似然算得的后验概率相比,贝叶斯在后部带有一个小“拖尾”

5.png


这个“拖尾”某种程度上也可以认为是一种平滑(个人观点)

某些时候,惩罚项,或者说正则项,也可以认为是一种平滑。比如在支持向量机(SVM)中,优化的准则函数

$$L = \frac{1}{2} ||w||^2 + C \sum\limits_{i=1}^n \xi_i$$

其中,惩罚系数C就是一种平滑,为了方便讨论,我们只讨论线性分离面,关于kernel这里我们不讨论(但本质是一样的),比如下面这张图

6.png


没有使用惩罚项的时候,分离面为实线,而使用惩罚项之后,分离面为虚线。从我们的直觉上来说,虚线是要比实线好一点的。通过使用惩罚项,SVM的分类特性变“软”了,或者说,它的分类变得模糊了,平滑了。

但是并不是所有的惩罚项都可以看做是平滑,比如神经网络中的二范数惩罚项\(w^T w\)
$$J = J(w) + w^T w$$
它与权衰减是等价的(可以私下去证明),也就是
$$w^{new} = w^{old}(1 - \epsilon)$$
即权值都更新完毕后,对权值进行比例缩小,因为我们出于对小权值的喜爱(小权值使得对误差函数不起作用的权值变得越来越小),权衰减这东西,我个人认为不能看做是平滑,这东西啊,似乎也没有什么理由要加,但是大家都加,你不加怎么好意思呢?(没有啦=。=其实加了在一定程度上可以改善分类性能的,做做实验就知道了)

又比如Ng讲朴素贝叶斯的时候讲到的拉普拉斯平滑(Laplace smoothing),这里我们不讲朴素贝叶斯,我们只是单纯的讲拉普拉斯平滑。采用Ng上课时讲的例子,比如我们知道中国队与泰国队历次的比分如下:
2014年09月25日 中国:泰国 = 0 : 2
2013年06月15日 中国:泰国 = 1 : 5
2012年11月03日 中国:泰国 = 1 : 2
2007年05月19日 中国:泰国 = 0 : 1

好了,假设明天中国队和泰国队有一场比赛,那么我们需要预测一下中国队的胜率。如果不引入平滑,那么根据历史数据,中国队进行了四场比赛,赢了0场,所以赢得概率为:
$$\frac{0}{4} = 0.00\%$$
完了。。胜率为0

可是事实是这样吗?不是的,我们知道,中国队还是能打的,显然上面的算法不合理,为此,我们需要平滑这个过程,比如在拉普拉斯平滑中,我们对分子加上1,对分母加上类别总数k,比如这里的比赛问题,k就应该等于2(输或赢),所以,中国队的胜率为:
$$\frac{0 +1}{4+ 2} = 16.67\% $$
显然,如果我们没有任何的历年数据,那么胜率就是50%

通过这样的平滑化,中国队的胜率就由原先的0变为了16.67

尽管如此,中国队要想提高胜率,还需要进行如下变换:

7.jpg


随着比赛一声哨响,留给山下泰国队的时间已经不多了。。。。。。

============================================
一家之言,仅供参考

要回复问题请先登录注册