徐毅边说边在黑板上画出了这个函数的图像,这是被y轴分为两段的水平线,
“可以看到,这个函数的导数在原点以外处处为零,这对于单个的感知机当然没有问题,因为我们使用梯度下降法对w的更新方向是-yx,对b的更新方向是-y,”
徐毅在黑板上洋洋洒洒写出一行行推导公式,继续讲道,
“但当感知机变为多层结构时,我们可以看到,由于链式法则,最终的损失对于前面所有输入的梯度都为0,也就是说,当我们的感知机分类结果与实际目标产生出入时,它并不知道该往哪个方向更新自己的权重参数来减小误差。”
“打个更直观一点的比方,梯度下降法就是让我们在一片空地上沿着下坡的方向走,这样最后我们总能走到一个损失最低的点,或者至少是局部最低点,”
“但经过sign激活函数之后,我们所在的这片空地全都变成水平面了,每个方向上的梯度都是零,这就导致我们连前进的方向都确定不了,想要找到损失最低点只能每个点都走过试一下,换句话说就是遍历整个平面,这显然是不现实的。”
“——老师,这样的话为什么我们不直接去掉激活函数?”
“去掉激活函数就变成用矩阵相乘表示的线性变换了,无论几个矩阵相乘其实都可以变成两个矩阵,这样的多层结构和单层的表达能力完全没有区别!”面对提问,没等徐毅回头,还站着的王浩中就干脆回答道。
“……没错,这个问题在过去的几十年中一直未被解决,神经网络这一构想也在提出之后很快陷入低迷,”
转身面向讲台下,徐毅摆手示意王浩中座下,继续播放幻灯片讲道:
“当然,科学家们还是找到了其它的方法来解决这一问题,例如升维就是其中之一,”
“来看屏幕,我们可以利用核函数,把二维上的四个点放进三维空间,然后让(0,0)(1,1)这两个点的z坐标变成1,另外两点坐标为0,这个时候我们就可以用感知机学习一个线性平面把它们分开。”
“这种使用核函数的感知机被称为核感知机,由于计算的时间成本太高,核感知机在提出后很快就被淘汰,但基于这种思想进一步改良提出的SVM,也就是支持向量机,迅速发展起来并成为现在最主流的机器学习算法。”
顿了顿后,徐毅继续说道:
“当然,这并不代表多层感知机是不可行的,根据我们之前的分析,这个结构的问题在于激活函数导致梯度无法传播,那么我们只需要简单地将激活函数改成这样——”
他用粉笔在sign函数的图像上一划,将右侧始终为1的水平线变成一道斜线,
“我们只要让f(x)在输入大于零时等于它本身,即导数为1,这样梯度就可以不被截断,”
“之前在sign函数下的一整个水平面,在新的函数下就有了不同的坡度,从而我们就可以继续使用梯度下降的方法来寻找最低点。”
“因此我们改用这个激活函数就可以构建一个多层感知机,这样得到的多层感知机在现在的任务上可以……”
“等等,老师!”王浩中急切地,甚至顾不上失礼地打断道:“既然它的效果这么好,为什么我在论文里从来没有看到过?”
“因为这是我刚刚提出来的,”
无视了台下闻言一阵骚动的学生,徐毅反问道:
“王同学,请问你觉得我的这种方法逻辑上有什么问题么?”
王浩中不知所措地摇摇头,徐毅老师对感知机的讲解十分生动形象,深入浅出的同时又不失严谨,至少自己没有听出任何逻辑上的问题。
如果不看徐毅仅仅只有讲师的职位,他甚至感觉对方在这个领域的理解都超过了自己的教授父亲。
但异或问题困扰了人工智能领域这么多年,怎么可能就这么容易被面前的老师如此顺理成章、轻而易举的解决?!
一定是在别的什么地方出了问题!他正欲开口反驳,却听徐毅继续道:
“实际上,多层感知机在现在的任务上可以取得媲美甚至超过SVM的效果,接下来我将展示一个简单的多层感知机模型和相应的任务样例,如果还有疑惑的同学也可以回去后仿照课上的讲解自己进行实验验证……”
“虽然不知道为什么这么简单的问题可以困扰学界几十年,一直没有方法解决它,”
环顾教室,徐毅平静地说道:
“但是,现在有了。”
本站域名已经更换为m.adouyinxs.com 。请牢记。