我建成了世界一流大学
繁体版

第三章 没有解决方法?现在有了!

    “机器学习的发展要追溯到1957年,Rosenblatt提出了感知机模型……”

    华东大学的一间教室里,徐毅站在讲台上,一边播放幻灯片,一边对着台下的学生讲解道。

    刚刚进入八月份,虽然秋季学期还未正式开学,但华东大学的小学期课程已经开始,徐毅正在给选修《机器学习》这门课程的本科生上课。

    炎热的夏风伴随着着窗外的蝉鸣,带进屋中昏沉的睡意,连不停嗡嗡转动的风扇也无法吹散。

    但教室里的学生几乎全都专注地看向讲台,认真听着徐毅的讲授,展现出作为重点大学学生的优秀素质,让已经汗流浃背的徐毅感到欣慰不已。

    “……根据我们前面的讲述,感知机实际上就是将我们输入的数据作为向量,把向量中的每一个元素进行加权求和,最后将数据分类,我们可以用一张二维的图像作为示例。”

    徐毅放出下一张PPT,图上是一个画着x轴和y轴的平面坐标系,上面散落着许多红色和蓝色的点。

    “来看这张图,里面每一个点就代表一个数据样本,我们用两种颜色来表示数据的种类。”

    “感知机的目的就是要找到一条直线,从而将这些点按照种类分开,就像这样…”

    随着徐毅点击鼠标,一条直线在图中出现,将两种颜色的点切到左右两边。

    “用数学语言来描述的话,就是用直线y=wx+b来将数据样本分类,而感知机的学习过程就是寻找这条直线的系数w和b的过程,”

    徐毅又一点鼠标,坐标系上的点和直线统统消失,转而出现了坐标在(0,0)(0,1)(1,0)(1,1)上的四个点,它们刚好构成了一个小正方形的四个顶点,右上角的顶点被标成蓝色,另外三个点则是红色。

    “我们用这四个点来表示最基础的逻辑门,蓝色表示真,红色表示假,图中所示是一个与门,显而易见我们可以用一条直线把真值和假值分开。”

    一道将正方形右上角斜着切开的黑线随着徐毅的话语出现,

    “同样地,对于或门和非门逻辑,我们同样可以用一个感知机来表示,但是感知机有一个很重大的缺陷,大家觉得是什么?”

    听到徐毅的提问,下面的学生七嘴八舌地回答起来。

    “多个种类混杂的情况?”

    “不能用直线分离的点……”

    “异或问题!”

    徐毅看了一眼说出正确答案的学生,这个小胖子叫王浩中,对机器学习的相关知识了解的相当全面,在前几节课上已经给他留下了很深刻的印象,因此他毫不意外地点点头,补充道:

    “多分类问题实际上可以转化为多个二分类问题,因此这类问题是完全可以用感知机实现的……”

    “所以正确答案就是线性不可分问题!例如这样一些混杂在一起的点,我们就不能用直线将它们分开,这种问题的最简单形式就是异或问题。”

    屏幕上的四个点颜色再变,左下和右上的两个点变成蓝色,另两个点变成红色。

    这时台下一个扎着单马尾的女生急切举手,徐毅冲她点点头示意可以提问。

    “老师,异或不是可以用前面三种基本逻辑表示么?为什么可以学习三种基本逻辑的感知器不能表示异或?”

    听到这个问题的徐毅笑了笑,并未直接回答,反而问起其他学生,

    “非常好的问题!我们都知道异或可以由两个非门和与门再加一个或门组成,那么我们可不可以同样用几个感知机分别表示几种基本逻辑,最终组成一个异或门呢?有没有同学讲一下想法……王浩中?”

    看到学生纷纷陷入沉默,于是直接点名前面的小胖子。

    “嗯……可能原因是由于感知机最后的非线性激活函数,从而导致多层结构的感知机无法求解?据我所知好像现在没有类似的方法,所以这条路应该是不可行的。”

    虽然徐毅提出的这个思路之前没有想过,但凭着对机器学习的深刻理解,王浩中思索片刻后便给出了结论。

    王浩中的父亲是领域内的专家,在他高中时候就带着他参与相关研究,王浩中在大二时就能以第一作者的身份发表二区论文,因此他对自己的答案有着充足的自信,挺起胸膛等着老师的回复。

    “没错!因为在感知机中使用的激活函数是sign函数,即对于任意大于零的自变量x,我们都令函数f(x)的值为1,而对于小于等于零的x,我们令函数值为-1,这是为了模拟人的神经元工作原理……”

    徐毅边说边在黑板上画出了这个函数的图像,这是被y轴分为两段的水平线,

    “可以看到,这个函数的导数在原点以外处处为零,这对于单个的感知机当然没有问题,因为我们使用梯度下降法对w的更新方向是-yx,对b的更新方向是-y,”

    徐毅在黑板上洋洋洒洒写出一行行推导公式,继续讲道,

    “但当感知机变为多层结构时,我们可以看到,由于链式法则,最终的损失对于前面所有输入的梯度都为0,也就是说,当我们的感知机分类结果与实际目标产生出入时,它并不知道该往哪个方向更新自己的权重参数来减小误差。”

    “打个更直观一点的比方,梯度下降法就是让我们在一片空地上沿着下坡的方向走,这样最后我们总能走到一个损失最低的点,或者至少是局部最低点,”

    “但经过sign激活函数之后,我们所在的这片空地全都变成水平面了,每个方向上的梯度都是零,这就导致我们连前进的方向都确定不了,想要找到损失最低点只能每个点都走过试一下,换句话说就是遍历整个平面,这显然是不现实的。”

    “——老师,这样的话为什么我们不直接去掉激活函数?”

    “去掉激活函数就变成用矩阵相乘表示的线性变换了,无论几个矩阵相乘其实都可以变成两个矩阵,这样的多层结构和单层的表达能力完全没有区别!”面对提问,没等徐毅回头,还站着的王浩中就干脆回答道。

    “……没错,这个问题在过去的几十年中一直未被解决,神经网络这一构想也在提出之后很快陷入低迷,”

    转身面向讲台下,徐毅摆手示意王浩中座下,继续播放幻灯片讲道:

    “当然,科学家们还是找到了其它的方法来解决这一问题,例如升维就是其中之一,”

    “来看屏幕,我们可以利用核函数,把二维上的四个点放进三维空间,然后让(0,0)(1,1)这两个点的z坐标变成1,另外两点坐标为0,这个时候我们就可以用感知机学习一个线性平面把它们分开。”

    “这种使用核函数的感知机被称为核感知机,由于计算的时间成本太高,核感知机在提出后很快就被淘汰,但基于这种思想进一步改良提出的SVM,也就是支持向量机,迅速发展起来并成为现在最主流的机器学习算法。”

    顿了顿后,徐毅继续说道:

    “当然,这并不代表多层感知机是不可行的,根据我们之前的分析,这个结构的问题在于激活函数导致梯度无法传播,那么我们只需要简单地将激活函数改成这样——”

    他用粉笔在sign函数的图像上一划,将右侧始终为1的水平线变成一道斜线,

    “我们只要让f(x)在输入大于零时等于它本身,即导数为1,这样梯度就可以不被截断,”

    “之前在sign函数下的一整个水平面,在新的函数下就有了不同的坡度,从而我们就可以继续使用梯度下降的方法来寻找最低点。”

    “因此我们改用这个激活函数就可以构建一个多层感知机,这样得到的多层感知机在现在的任务上可以……”

    “等等,老师!”王浩中急切地,甚至顾不上失礼地打断道:“既然它的效果这么好,为什么我在论文里从来没有看到过?”

    “因为这是我刚刚提出来的,”

    无视了台下闻言一阵骚动的学生,徐毅反问道:

    “王同学,请问你觉得我的这种方法逻辑上有什么问题么?”

    王浩中不知所措地摇摇头,徐毅老师对感知机的讲解十分生动形象,深入浅出的同时又不失严谨,至少自己没有听出任何逻辑上的问题。

    如果不看徐毅仅仅只有讲师的职位,他甚至感觉对方在这个领域的理解都超过了自己的教授父亲。

    但异或问题困扰了人工智能领域这么多年,怎么可能就这么容易被面前的老师如此顺理成章、轻而易举的解决?!

    一定是在别的什么地方出了问题!他正欲开口反驳,却听徐毅继续道:

    “实际上,多层感知机在现在的任务上可以取得媲美甚至超过SVM的效果,接下来我将展示一个简单的多层感知机模型和相应的任务样例,如果还有疑惑的同学也可以回去后仿照课上的讲解自己进行实验验证……”

    “虽然不知道为什么这么简单的问题可以困扰学界几十年,一直没有方法解决它,”

    环顾教室,徐毅平静地说道:

    “但是,现在有了。”