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

全文共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,一经查实,立即删除!

相关文章

Maven的作用

Maven 主要用处一:相同的项目结构 使用Maven管理的Java 项目都有着相同的项目结构 1. 有一个pom.xml 用于维护当前项目都用了哪些jar包 2. 所有的java代码都放在 src/main/java 下面 3. 所有的测试代码都放在src/test/java 下面 Maven 主要用处二:统一…

python函数可以提高运行效率吗_python 多进程如何提高函数效率?

1 如何利用multiprocessing 库提高单个函数的执行效率2 代码如下:def f():urls [http://yanbao.stock.hexun.com/listnews1_{}.shtml.format(i) for i in range(1,5)]d {}l1 []l2 []for url in urls:con requests.get(url).textsoup BeautifulSoup(con, lxml)…

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

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

python怎么发送邮件_Python面试题之如何用Python来发送邮件?

1 #! /usr/bin/env python2 #codingutf-83 import sys4 import time5 import poplib6 import smtplib7 #邮件发送函数8 def send_mail():9 try:10 handle smtplib.SMTP(smtp.126.com,25)11 handle.login(XXXX126.com,**********)12 msg To: XXXXqq.com\r\nFrom:XXXX126.com\r…

MySQL通过父id递归查询子节点

1.业务需求,需要选择二级节点后,获取他的所有子节点数据 2.思路通过Mysql的递归查询来获取子节点数据 SELECTpd.id,pd.parent_id,pd.name FROM( SELECT * FROM p_document_directory_record WHERE parent_id IS NOT NULL ) pd,( SELECT pid : 父id ) a…

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

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

request.setCharacterEncoding(“utf-8“) 失效问题

指定后可以通过request.getParameter()获取自己想要的字符串,如果没有提前指定,则会按照服务器端默认的“iso-8859-1”来进行编码;该方法只对post请求有效,对get请求无效;对于get请求,应该在server.xml中指定&#xff…

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

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

python中使用什么来实现异常捕捉_Python异常原理及异常捕捉实现过程解析

关于选课程序,最近着实有点忙,没机会复习os、pickle两部分模块,所以数据储存和字典读取成为了一个问题,大致原理知道,但是具体操作可能还是得返回去再好好看看,所以目前就提前开始学习新的知识了&#xff0…

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

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

python读取文件内容操作_Python 3.6 读取并操作文件内容

下面为大家分享一篇Python 3.6 读取并操作文件内容的实例,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧所使用python环境为最新的3.6版本Python中几种对文件的操作方法:将A文件复制到B文件中去(保持原来格式)读取文件中的内容,返回…

python scikit learn 关闭开源_慕课|Python调用scikit-learn实现机器学习(一)

一、机器学习介绍及其原理1.什么是人工智能?机器对人的思维信息过程的模拟,让它能相认一样思考。a.输入 b.处理 c.输出根据输入信息进行模型建构、权重更新,实现最终优化。特点:信息处理、自我学习,优化升级2.人工智能…

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

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

风变编程python论文_如何看待风变编程的 Python 网课?

作为风变推出的python课程的一名学员,很幸运能与风变相遇,更庆幸自己选择学习python,我学习的是python基础课程和爬虫精进课程,目前已经学完了python基础课程,不得不说对我的感触很深,非常想要继续学下去&a…

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

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

POI读取word文件,(支持HSSF和XSSF两种方式)

POI读取word文件&#xff0c;&#xff08;支持HSSF和XSSF两种方式&#xff09; 参考&#xff1a;HSSF&#xff0c;XSSF&#xff0c;SXSSF三种方式 1.引用maven&#xff08;版本必须一致&#xff09; <dependency><groupId>org.apache.poi</groupId><art…

pythonsqlite事务_python sqlite3 的事务控制

Python sqlite3 的事务控制官方文档的描述&#xff1a;Controlling TransactionsBy default, the sqlite3 module opens transactions implicitly before a Data Modification Language (DML) statement (i.e. INSERT/UPDATE/DELETE/REPLACE), and commits transactions implic…

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

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

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

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

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

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