学习观察神经网络:可视化整个模型训练中卷积层的激活

109 阅读9分钟

全文共3425字,预计学习时长10分钟

图源:www.raincent.com


深度学习是机器学习领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能。


深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。因此,它在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。


与其他机器学习技术相比,深度学习的主要优势在于能够自动学习输入数据的抽象表示。然而,这一点却鲜为人知。


图源:Sian Molloy


早在1969年,Minkey和Papert就出版了一本著作,证明了单层感知器,即人工神经网络的前身,不能解决异或问题。


对于没有计算机科学背景或其他行业的人来说,异或问题就是指两个二进制输入:A和B。当且仅当A或B中有一个为真时返回真,因此得名“异或(exclusive or”)”。单层感知器不能解决这一问题的原因是它们只能解决线性可分的类。如果设置异或问题的可能输入及其输出,可以用下图说明:

世界上最烂的井字游戏(来源:维基共享资源)


你能在这个图上画一条直线,把圆圈和十字分开吗?


不,你不能,感知器也不能。


幸运的是,某些富有洞察力的人将两个感知器放在一起,深度学习领域就此诞生。这样做的原因是,神经网络的每一层都可以被认为是前一层的嵌入;虽然上图中的圆圈和十字在初始形态中可能不是线性可分的,但是通过简单的编码,它们就变得线性可分了。


记住图的左上角和右下角。然后,想象一下通过第三维度将图像对折,将右上角拖出屏幕,并将其向下压到左下角。正确的做法应该是这样的:

仔细看的话会发现我没什么艺术细胞


现在,你能在这个图上画一条直线,把圆圈和十字分开吗?应该可以了。神经网络擅长的主要任务是将信息提取出来,并将其编码为其他更有效的形式。事实上,训练神经网络不是为了其预测能力,而是为了发现学习到的表示,这一直是深度学习研究的支柱。


学习观察


卷积神经网络(CNNs)是将深度学习应用于图像数据的最流行的架构。简单地说,卷积神经网络学习许多滤波器,将这些滤波器应用到图像的每个像素及其层上。通过对图像应用这些滤波器,以及重复的下采样,神经网络学会在其第一层识别简单的、低级的特征,在其最后一层识别复杂的、高级的特征。这就是一般的解释。


图片来源:卷积深度信念网络用于分层表示的可扩展无监督式学习,Lee等著。


如图所示,模型学习识别各种边缘,然后是面部特征,然后是整个人脸(许多中间层被移除)。如果你用谷歌搜索“卷积神经网络层可视化”,会发现很多类似的图片。


然而,我从未见过在训练过程中可视化的卷积神经网络图层,所以我想进行一下尝试。在这个实验中,我使用了通用的MNIST数据集,这是一组黑白手绘数字,共有六万个,每个数字的高度和宽度都为28个像素。我使用了一个简单的卷积模型,如下所示:


网络结构包括6个卷积层和3个密集层


可视化


对神经网络进行了五个epoch的训练,1024幅图像分为一小批,共290个训练步骤。在每一步之后,将一组预先选择的10个样本图像(每个数字中的一个)输入到模型中,且保存每个卷积层的激活。虽然最近几年它已经过时了,更容易训练的ReLU函数更受欢迎,但我还是决定使用tanh作为卷积层中的激活函数。这是因为tanh限制在-1和1之间,使得它易于可视化。当第一层的激活应用于红蓝颜色图时,结果如下:


Conv1:输入图像(顶行)和卷积层1中四个通道的激活。激活范围从+1(蓝色)到0(白色)到-1(红色)。Frame(左上)是所用的训练步骤数。

Conv1似乎已经学会了识别第一通道和第二通道中的笔画宽度,因为每个数字的内侧是暗红色,而外侧是浅红色。在第三和第四通道中,它似乎学会了识别边缘,数字是蓝色的,背景是粉红色的,数字边缘是白色的。然而,这些激活是深度学习标准教程中的一小部分,即每个通道将学习一个清晰和独特的特征,如垂直和水平边缘;Conv1在很大程度上复制了原始输入,并略作了注释。


Conv2: 设置与Conv1相同。

与Conv1类似,Conv2似乎也在复制原始输入。第一、第二、第四通道彼此之间几乎相同,并且与Conv1突出显示边缘几乎相同,第三通道只是对输入进行模糊复制。


Conv3:设置与Conv1相同,只是采用8个通道。这一层的分辨率是原始图像的一半,因此提高了激活而没有实现可视化的插值。

在Conv3中,我们看到了可能是第一个真正学习到的特征。在第六通道,接近训练结束时,可以看到数字是蓝色的,大部分背景是粉红色的,而数字的每一部分正下方的背景是红色的。这表明这个通道已经学会识别水平边缘的底部。同样,第七通道有红色的数字,粉红色的背景,每个数字上方有白色的水平边缘。然而,其他通道似乎只是简单复制了原始图像。


Conv4: 设置同Conv3。

在Conv4中,可以看到更清晰确定的特征。尤其是,可以看到不同角度的边缘。第一、第二和第六通道识别水平边缘的顶部。第三、第七和第八通道识别对角线边。另外两个通道则是粗略复制原始图像。


Conv5:设置同Conv1,只是采用了16个通道。这一层的分辨率是原始图像的四分之一,因此提高了激活而没有实现可视化的插值。(图片过大,此处展示完成后)

Conv5进行了大量的下采样,分辨率仅为7x7像素,但其特征提取似乎更具意义。在训练的最初阶段,每个通道都是粉红色的背景,缺乏大量信息。到步骤70,层已经学会产生模糊地类似于输入的斑点。然而,到训练结束时,这些通道已经明显地彼此区分开来,并且激活呈现出急剧的变化。由于“独立特征”的低分辨率和纠缠,因此不清楚这里学习到了什么特征,显然,此处的每个通道都有各自的意义。


Conv6:此图像体积过大,所以此处展示训练完成后的激活。

不幸的是,Conv6超过了Medium的文件大小限制,所以请点击此处以观察学习。与Conv5类似,学习到的特征是清晰可见的,但几乎不能分辨出它们实际对应的是什么。

训练过程中的精度和损耗(categorical_crossentropy)


结语


那么本文讲了什么呢?有三点。


首先,深度学习的结果很少像标准教程所说的那样清晰明了。许多教科书,包括《深度学习》(Goodfellow等著),将低层卷积层比作Gabor滤波器和其他手动制作的计算机视觉滤波器。尽管该模型在测试数据上达到了95%以上的准确率,但前四个卷积层在特征提取方面收效甚微。


诚然,这是一个非常简单的模型,可以完成简单的任务。而对于更复杂的任务,更高级的模型很可能会学习到一些有用的低级特征,但深度学习的一般教授方式(以我的经验来看)表明,即使对于简单的任务,特征细化和提取也是必需的;事实显然并非如此。


第二点是,学习到的特征不太可能是人类会选择的、直接的、独立的特征。Conv5和Conv6显然学到了某些特征,原始图像的编码方式使得网络的密集层可以按照数字类型对它们进行分类,但它们学到的并不会很快地观察到。


这是深度学习中的一个常见问题,尤其是在生成建模中。在生成建模中,一个模型可能会学习将两个或更多看似不相关的特征嵌入作为单一特征。


图源:百家号


第三点是我,笔者作为一名数据科学家,每天都会提醒自己的,那就是把一切都可视化是值得的。我参加这个项目,希望能写出一篇完全不同的文章。我很高兴能展示网络学习和细化的特性,从低级的边缘检测到高级的循环和回旋。我还发现了一个闲置的家伙,直到最后都几乎没有进行特征细化。


最值得注意以及令我惊讶的是,一旦层学习了输入的某种表示,它们在训练过程中几乎不会改变。


可视化这一点加强了我对卷积神经网络训练的理解。希望你在阅读完这篇文章后也能学到一些东西。


努力学习,祝你好运~

留言 点赞 关注

我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”


(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)