神经网络平常都在做些啥?可视化特征解释了一下

雷锋网:喜欢机器学习和人工智能,却发现埋头苦练枯燥乏味还杀时间?油管频道 Arxiv Insights 每周精选,从技术视角出发,带你轻松深度学习。

翻译/  龙翔

校对/  凡江

整理/  廖颖

有人说,机器学习算法就是黑箱模型,算法本身没有可解释性。当我们在训练神经网络时,很难知道它为什么做出了这样的预测。算法没有可解释性这一点,在很多情况下忍忍就过去了,但在自动驾驶、智慧医疗、信息安全等场景却不行。

模型的可解释性在以上场景中非常关键,人们想要知道为什么算法做出了这样的决策。所以,为了搞清楚模型可解释性,我给大家带来了这一系列的视频。

▷ 观看本期Arxiv Insights大概需要 15 分钟

概述

在本系列中,我们将讨论神经网络是如何学习的以及神经网络训练后的输出。

第一部分将专注于特征可视化,多种视角去理解一个训练好的神经网络,并去观察它在对某些任务训练后最终的输出。

第二部分我们会看到一些例子,主要讲神经网络如何被欺骗并做出错误预测。因此在这里我们将讨论那些可以清晰展示的神经网络,即使这些网络是由我们大脑的工作方式启发而建立的。

而在第三部分,我将通过几篇最新的论文来讨论过拟合、记忆性与模型通用性间的权衡,以及这些是如何与神经网络的学习过程关联起来的。

特征可视化

想象一下,我们已经训练了一个用于图像分类的卷积神经网络,现在的问题是,我们能看到的只是一整簇矩阵乘法和许多其它的数学运算,如果我们想理解网络里正在发生什么,仅凭这些运算,想要有意义地解释结果是非常困难的。但幸运的是,有一些方法可以让我们对那个神秘的黑盒子一探究竟。

让我们从特征可视化开始。特征可视化中所能做的最简单的事是简单地检视网络。在训练之后把所有的图像重新输入给网络并观察网络中哪些神经元被激活了。举个例子,如果我们将一个特定的神经元从网络里取出,然后将图像重新输入网络。通常这个神经元不会被点亮,但当一个特定的模式出现时,在输入图像中,神经元会被点亮。我们将这一行为称为:一次激活。就好像这个神经元在说:“伙计们,在输入中我看到一个特定的模式,它可能对将这个图像分类到一个给定的类别中有用,请看一下这张图。”

实例

举个例子,我们现在先取出 4 个深度神经网络中的神经元,然后从全部的训练数据中查看其中的图像,对每个神经元选择其中 9 张可以最大限度激活这些神经元的图像。从这些样例中,我们已经可以很好地理解神经元尝试检测什么。在进一步说明之前,我想说明,这一方法并不仅仅局限于图像特征。

这篇有趣的博文是由工作于 Google DeepMind 的 LeMond 创建的。主要讲了一种用非常类似的方法来处理音频。项目目标是验证是否可以将深度神经网络用于音乐推荐领域。传统的音乐推荐是基于一种称之为协同滤波的方式完成的,这意味着你简单地搜索一个用户喜欢的音乐,然后再检视同样喜欢这段音乐的其他人的播放列表或喜欢的音乐,找到相似的用户,通过他们的播放列表或喜欢的音乐进行很好的匹配。基于这一点,就可以进行协同滤波了。简单地把用户 A 喜欢的音乐推荐给有非常相似音乐偏好的用户 B。

但这里会遇到一个关于协同滤波的问题——如果有一首新歌,并不知道谁会喜欢这首歌的情况下,就不能应用协同滤波。我们将这一问题称为冷启动问题。

对这类问题的解决方式是使用深度神经网络。在还没使用协同滤波前,将这首歌映射到一个同样的嵌入空间,简单来说是将音频形式的歌映射到一张频谱图中,将音频文件转换为一张图像。之后使用卷积神经网络,将图像映射到一个嵌入空间,从而可以使用协同滤波。如果这样可行,就可以将任意一首歌甚至是没有人听过的歌,输入深度神经网络,得到这首歌的表征,再通过这个表征把这首歌推荐给用户。

这意味着训练一个深度神经网络,将一首歌变换到将用于协同滤波的相同的嵌入空间。这一深度神经网络学习一些表现在音频频谱中的非常有趣的特征。现在要做的和对于图像特征要做的完全一样。我们拿出一个特定的神经元,给网络输入歌曲数据,接下来检视哪些歌最大程度的激活了我们选中的神经元。在视频中,我们的神经元学着识别女性声音震动的旋律。当你听完组样例后,你会发现这非常有趣。因为所有的样例都会带给你非常相似的感觉。

在某种程度上,你可以通过听到的来理解这个神经元在尝试寻找什么。而另一个神经元是在检测鼓声,这些电音很酷。这些例子让我们直接感受了网络正在学习什么。当然还会有些问题,当我们重新检视这些例子时,比如当你看那些狗狗的脸时,依然很难区分这个神经元是在检测狗狗的脸,还是仅仅被一对眼睛触发。这个神经元是在寻找背景中的天空呢,还是在检测前景的建筑呢?这不能得到确定的答案。

如果我们想找出网络真正在学习的内容,想要做的更好,该怎么做呢?在特征可视化领域最先有影响力的工作之一是 2014 年 Matthew Siler 和 Rob Fergus 的一篇论文。他们训练了一个卷积神经网络来做图像分类,同时训练了一个监视网络,来尝试可视化正在学习的特征。

下面演示是它如何工作的:输入一张图,进入卷积神经网络,对一层中每个激活记录这个激活(值),并将它用来重构前一层的激活,我们称之为辅助卷积操作。你可以将这一操作与正常的梯度下降结合,仅仅引入很小的重构误差,在训练后将给定的特征可视化。

所有你需要做的只是将图像输入,取出一个激活的神经元,并将所有其他同层的激活忽略,并使用训练好的监视网络,将特征一步步还原到输入像素空间。用这种方式来展示确定的特征,可以关注并强化图像中的一些特定特征,以激活选定的神经。这让我们对网络中正进行的事有了更细致的了解。

让我们来看一些可视化的成果。我们可以看到从卷积神经网络中抽出一组层, 将其可视化展示出来。在这里,我们可以看到许多网络中正在发生的事,可以看出网络的第一层在检测一些诸如线、边缘之类很简单的模式,而后面的层则基于这些简单特征建立起更复杂的结构。

随着层数的升高,在上层的网络将得到很复杂的特征检测器,将全部来自前层的信息组合起来,这些神经元用于检测那些对分类图像最终输出标签类别非常有用的特征。需要注意的是,使用这个技巧时,必须将一张图输入网络。在这种方式下,没有特定输入,就不能实现特征可视化。现在从早期的特征可视化工作中衍生出了几个非常成功的新技巧。其一是对输入像素本身使用梯度下降法,从零开始生成,来最大限度激活选定神经元的图像。

左侧这些图像展示了输入空间的重构,右边这些图像展示了真正输入给网络的图像

我们来看看它是如何工作的。从一张随机产生的图像开始,图中每个像素都是一个随机数,将这张图输入到神经网络, 从网络中取出一个特定的我们想尝试激活的神经元,然后计算梯度进行反向传播学习。这将告诉我们该如何改变这张图的每个像素。从而将这个神经元进一步激活,通过根据特定的神经元计算的梯度,调整输入的像素值。重复这个过程几次,就可以从零生成一张非常擅长激活特定神经元的图像。

我们看一个经过几千次迭代后的例子。和之前的方法相比,用这种方法的主要区别是我们不再需要一张实际输入的图像,而只是简单的选定一个神经元,并尝试生成可以最大程度激活它的图像。发挥一点创造力,我们也能创造出最低程度激活一个给定神经元的图像。你可以在这里看到一些结果。左侧的是被生成为最低程度激活给定神经元的图像,右边的是尝试最大程度激活的图,而中间是训练集中的可以完成这两件事的图像。可以看出,结果真的很有趣,我们甚至可以生成一些同时激活两个神经元的图像。

继续之前,需要提醒一下,尽管这些生成得到的图像可以在某种程度上感受到神经元在检测什么,而实际上生成这些图像并不像听上去那么简单,它不仅使用了反向传播,还要尝试和使用用一系列不同的正则化技巧。这些正则化技巧很大程度上会影响最终生成的图像的效果。

这些在特征可视化领域的工作让我们理解神经网络在做什么。第一层用来识别输入数据中非常简单的模式,随着处理进程向后面的层传播,网络中那些非常简单的特征,通过下一层的神经元,以不同的方式重新组合,得到更多更复杂的特征图。在网络的最后,所有特征图都足够复杂,从而可用于检测图像中特定的类别。

相关研究介绍

许多年来,很多人致力于特征可视化。在这里,特别介绍其中一个工作,就是 deep visualization toolbox。你们可以通过 GitHub 页面了解它。他们建立了一个系统,你可以实时分析一个深度神经网络正看到的什么。你可以将一些物品摆在相机前,查看网络中的任意一层,在网络分析输入图像的同时,实时看到特征激活行为。

举个例子,我们可以看到这个网络学习了如何检测图像中的文本。有趣的是,网络本身是在没有关于文字的输出标签的数据集上训练的,这意味着即使文本并不是一种输出类别,我们的深度神经网络也学会了识别图像中的文本。这意味着当你看到训练数据,文本实际上对预测类别非常有帮助,比如书或交通标识。能识别出输入图像中的文本将非常有助于分类这些图像。

最后给大家展示一个应用特征可视化的案例——被 Google 工程师创建的称为“DeepDream”的项目。在Deep Dream 中,选择一张输入图像,输入网络后选出一些神经元,通过梯度下降法,逐渐调整输入图像,以尽可能多地激活那些选定的神经元。

这里可以看到,如果我们选择较为浅层的神经元,实际得到的是对于那些第一层就可以得到的,像边缘、线条这样简单特征的增强;但如果我们选择,那些较为高层的特征,就可以识别突然出现在图像中的特定的物体,比如脸、眼睛。这也是为什么他们称之为“Deep Dream”。可以看到,选择特征并将它们可视化,用代码将周围环境进行处理,就能产生出惊人的效果。

总结

总结一下,如果我们选择深度神经网络,并使用反向传播在训练集上训练它,最终它会在第一层学到非常简单的特征,在后面各层组合这些特征,直到得到非常复杂的、足以为任务所用的特征。作为网络训练的目标,简单地将特征可视化的方式,是查看训练集中最能激活选定神经元的数据。一种更好的方式是用梯度信号来从零开始生成图像,以最大限度的激活给定神经元。这种方法的优势是不需要处理所有相关的输入数据,仅需要可视化一个特征本身其中正则化是关键。

以上就是特征可视化的部分,下一节我们将讨论对抗的例子。我们可以生成一些图像,当我们将这些图像输入神经网络时,网络将它们误分类为错误的标签,这并不是我们希望看到的。但这些误分类可以给我们带来一些关于如何改善神经网络的灵感线索。

雷锋网注:Arxiv是收录论文预印本的网站,可以证明论文原创性。

视频来自 Arxiv Insights ,雷锋网雷锋字幕组编译。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180108C0AMHZ00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区