文字层一点就变红_学习观察神经网络:可视化整个模型训练中卷积层的激活

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

72d824a883a6c2145f1b67cb90c75a87.png

图源:www.raincent.com

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

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

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

f4f6526bd16f9caf28687ede7ad4da6a.gif

图源:Sian Molloy

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

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

35b439946fe42f4c291bdd59e0a34d80.png

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

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

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

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

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

d664c937594e2dc68c7fcf5e26e6eecc.png

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

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

10a3edcb2af9e2549b65f549b3b6c38e.png

学习观察

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

f73a9c8f69354393ba3a803bd6cf203a.png

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

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

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

c98e55d767f9558938d85c56ec041559.png

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

可视化

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

b4c705b0c178673f06c296a6bb63ac79.gif

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

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

45e1f5a0bcd637e6ceb88bdccb5bbe9b.gif

Conv2: 设置与Conv1相同。

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

e7613f2d5e92c499a793b253e4dae416.gif

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

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

f25304ed0820ea9be144b4fb6d066026.gif

Conv4: 设置同Conv3。

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

d1daf5dc7ddb69e5ca563e5db4f07b8e.png

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

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

68b5aee45f8bfc5c0c3607182b8ce9a8.png

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

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

cb841124849053680aac55a9656acdac.png

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

10a3edcb2af9e2549b65f549b3b6c38e.png

结语

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

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

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

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

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

be6ec95bae7fc969a4c84b9ea7f9ef16.png

图源:百家号

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

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

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

努力学习,祝你好运~

a7d4b5ae934934a4607148d348db99cc.png
c1b7f70e4919f55f89bbd73d986a81a5.png

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git清除无需提交文件版本操作说明

将已提交的此类文件移动(剪切)到电脑其他位置 主要目录如下 说明:如果本地target目录已经提交,则直接删除 提交本地代码(commit)拉取远程代码(pull)将第1步中移动的文件还原到项目中指定位置将第4步中还原…

tcp out of order解决_Java解决CAS机制中ABA问题的方案

通过对atomic包的分析我们知道了CAS机制,我们在看一下CAS的公式。CAS(V,A,B)1:V表示内存中的地址2:A表示预期值3:B表示要修改的新值CAS的原理就是预期值A与内存中的值相比较,如果相同则将内存中的值改变成新值B。这样比…

java 观察者模式_重学 Java 设计模式:实战观察者模式「模拟类似小客车指标摇号过程,监听消息通知用户中签场景」...

一、前言知道的越多不知道的就越多编程开发这条路上的知识是无穷无尽的,就像以前你敢说精通Java,到后来学到越来越多只想写了解Java,过了几年现在可能想说懂一点点Java。当视野和格局的扩大,会让我们越来越发现原来的看法是多么浅…

图纸管理软件_造价20万以内的农村别墅长啥样?挑选5套图纸,让城里人羡慕吧...

在老家盖房算是一件“光宗耀祖”的事情,现在的物价高,想盖一栋房随便都要几十万,对于一般家庭来说,要拿出这笔数字并不是一件容易的事,通常大家的预算都有限,希望能花最少的钱盖最好的房,这种心…

python+ BeautifulSoup抓取“全国行政区划信息查询平台”的省市区信息

全国行政区划信息查询平台地址:http://xzqh.mca.gov.cn/map 检查网页源码: 检查网页源码可以发现: 所有省级信息全部在javaScript下的json中,会在页面加载时加载json数据,填充到页面的option中。 1.第一步&#xff1…

32利用文件系统保存数据_网易技术实践|Docker文件系统实战

在本文中,我们来实战构建一个Docker镜像,然后实例化容器,在Docker的生命周期中详细分析一下Docker的文件存储情况和DockerFile优化策略。在开始实战之前,我们先介绍一个概念,联合文件系统(Union File Syste…

二叉树遍历的超简单方法(详细、简单)

二叉树遍历的超简单方法 参考链接:https://wenku.baidu.com/view/e5463e4203d8ce2f0166230a.html 已修改部分问题。 三种常见二叉树的遍历: 先序遍历的递归算法定义(简称根左右) 若二叉树非空,则依次执行如下操作&a…

怎么看我装的sql能不能用_深入浅出sql优化(三)之单表索引优化

大家好,我是闲水,每天更新java最新最热技术,对java感兴趣的朋友记得关注一下哦。注意 :这是SQL性能优化第三章,点击关注查看前置内容。上篇文章我们主要了解了索引优化的标尺"Explain"怎么用,这一…

java类加载顺序(spring容器下)

执行顺序:父类静态块–>子类静态块–>父类非静态块–>父类构造方法–>子类非静态块–>子类构造方法–>自动装载的方法 子类和父类均加上Service注解,将其交给spring容器管理。 父类: Service public class Father {publ…

jwt token 太长_理解 JWT 鉴权的应用场景及使用建议

JWT 介绍JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用于在各方之间以JSON对象安全传输信息。这些信息可以通过数字签名进行验证和信任。可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥…

microsoft vbscript编译器错误怎么解决_win7系统ie应用程序错误怎么办 ie应用程序错误解决方法【详解】...

windows系统自带的ie浏览器很少用户会去使用到,它运行起来比其他的浏览器要慢很多,而且经常会出现各种各样的问题,最近有位win7系统用户,在使用ie浏览器的时候,发生了应用程序错误的情况,那么win7系统ie应用…

修改固态硬盘的物理序列号_买固态怕踩坑?收下这些软件,轻松鉴别好坏

再有半个月,就迎接年中的促销旺季。不少朋友都希望趁着各种优惠、跳楼价,组一台梦想机、升级一下自己的电脑。说到体验升级,相信就算是DIY新手和硬件小白都知道,要想电脑快,必须选固态。但是固态参数多,又是…

《常用控制电路》学习笔记——数控锁相环调速电路

序言 今天开始我将把自己学习《常用控制电路》的一些内容发到互联网上,希望能和大家交流学习。 这本书主要介绍了一系列控制电路的经典案例,进行了电路和代码的设计,我将把这本书中学习到的内容和学习的过程尽量准确的分享出来与大家交流&…

《常用控制电路》学习笔记——数字控制直流电动机调速电路

书中该节讲述的电路通过ADC芯片将电位器的阻值转换为电压量,然后使用单片机输出PWM进行电路控制。本电路也可扩展应用至需要模拟量输入与输出的场合。 目录 一、系统设计思路 二、各模块电路分析 2.1电路构成 2.2工作状态分析 三、程序分析 3.1 变量定义 3.…

《常用控制电路》学习笔记——数控直流恒流源电路

书中该项目内容设计了一个从交流220V市电作为供电电源的恒流源电路,并且此电路可由加减计数器74LS193控制输出的电流大小。 目录 一、系统方案 二、各模块电路分析 整流滤波及稳压电路 数字量控制电路 数模转换电路 数控恒流源产生电路 三、电路仿真结果 四…

图像太宽无法输出请裁剪图像或降低分辨率然后重试_真·无监督!延世大学提出图像到图像无监督模型,实验结果超SOTA...

作者 | 蒋宝尚编辑 | 丛 末图像翻译目的是用模型将源域图像转换到目标域图像,通常涉及标签图到场景图的转换、图像风格、人脸的属性变换、标签图到场景图的转换。图像翻译任务自生成对抗网络提出就得到了快速发展,例如经典的pix2pix、CycleGAN、StarGAN。…

php serialize和json_encode哪个更快_世界 10 大编程语言,Java 不是第一,PHP 才第五...

来源:toutiao.com/a6764554659349676557/如果你是软件开发领域的新手,那么你会想到的第一个问题是“如何开始?”编程语言有数百种可供选择,但是你怎么发现哪个最适合你,你的兴趣和职业目标又在哪里呢?选择最…

tomcat7.0支持什么版本的jdk_恭喜你喜提JDK,那你知道JDK是什么吗?先来看看吧

点击蓝字关注一行JDK 大家都知道电脑的操作系统是由汇编和C语言写出,因此操作系统无法直接识别其他语言。这时我们就需要为我们写的Java程序配备一名翻译官 ----- 编译环境,将Java程序翻译成电脑可以识别的程序,C或者汇编。 那么对于这个…

我的python 入门 安装 -- hello world

我的python 安装–>“hello world” 最近老听到关于python的声音,而且越来越强烈。就好奇下载了下,在win10 的应用商店下载的 够傻瓜了吧 环境变量也不用配置 直接上手 hello world了 cmd 窗口 输入 python -v 正常显示 显示版本号 不能正常显示…

记录spring、springboot集成apollo配置中心

一, spring集成apollo,前提是apollo配置中心服务端已经在运行中 上面是我在阿里云服务搭建的apollo配置中心服务端,登录后的样子。没有搭建服务端的小伙伴,请先搭建好apollo的服务端 然后点击‘创建项目’,新建测试用的项目 填…