深度学习与神经网络:AutoEncoder自编码

今天让我们来看一下深度学习与神经网络里边的自编码.

其实自编码严格来说不能算作是深度学习的内容,我们在之前的机器学习算法中也了解到自编码,并且我们会通过一个简单的例子来去说说自编码的理解.

首先,我们听到自编码,一定会想到,AutoEncoder会是个什么码呢?是条形码,二维码 NO.NO.NO,和他们都没有关系,其实自编码是一种神经网络形式.

现在我们先构架一个神经网络模型,这个模型是收集一张图片,接受这个图片后,神经网络给这个图片压缩,最后再从压缩的图片中还原,是不是感觉有点抽象,其实我也觉得这样的解释不太恰当,那就让我们更加的具体一点来深入了解下这个自编码。

现在假设我们刚才构建的模型是这个样子,我们可以从图片中看出来,我们刚才上传给自编码模型的图片实质上是经过压缩以后再进行解压的一个过程。当压缩的时候,原有的图片的质量被缩减(降维),解压的时候,用信息量小却包含了所有信息的文件来恢复出原来的图片(还原)。

那么,为什么要这么做呢?当神经网络要输入大量的信息,比如高清图片的时候,输入的图像数量可以达到上千万,要神经网络直接从输入的数据量中进行学习,是一件非常费力不讨好的工作,因此我们就想,为什么不压缩一下呢?提取出原图片中最具有代表性的信息,缩减输入中的信息量,然后在把缩减过后的信息放入到神经网络中学习,这样学习起来就变得轻松了,所以自编码就是能在这个时候发挥作用,现在我们假设从上图中的输入层中的信息A解压缩到隐含层中得到a,然后用隐含层的a和输入层的A进行对比,得到预测误差,再进行反向传递,然后逐步的提高自编码的准确率,训练一段时间后在中间隐含层获得的一个部分的数据a就是源数据的精髓,可以从上面那个模型看出,从头到尾,我们只用到了这个输入的信息A,并没有用到数据A所对应的数据标签,所以我们这时候可以得出结论,自编码是一种非监督学习,通常我们在使用自编码的时候通常只会使用自编码的前半部分,这个部分也叫作EnCode,编码器,编码器可以得到源数据的精髓,如下图所示:

然后我们只需要在创建一个小的神经网络模型再去学习这个精髓中的数据,不仅可以减少神经网络的负担,并且同样可以达到一个很好的效果。

同样的如果我们通过自编码整理数据,他能从各种数据中筛选总结出各种数据的特征,如果把这个图片的类型特征都整理好放到一个图片上,那么数据类型都可以很好的用源数据的类型区分出来,如果你了解PCA主成分分析,自编码的功能和他类似,甚至在某些部分超出了PCA,换句话说,自编码可以和PCA一样可以给特殊属性降维.

而下一篇文章,我们来说一说稀疏自编码,当我们给隐藏神经元加入稀疏性限制,那么自编码神经网络即使在隐藏神经元数量较多的情况下仍然可以发现输入数据中一些有趣的结构。

祝大家五一快乐,玩的开心(*^▽^*)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

Spark踩坑——java.lang.AbstractMethodError

百度了一下说是版本不一致导致的。于是重新检查各个jar包,发现spark-sql-kafka的版本是2.2,而spark的版本是2.3,修改spark-sql-...

1200
来自专栏xingoo, 一个梦想做发明家的程序员

AOE关键路径

这个算法来求关键路径,其实就是利用拓扑排序,首先求出,每个节点最晚开始时间,再倒退求每个最早开始的时间。 从而算出活动最早开始的时间和最晚开始的时间,如果这两个...

2507
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

19110
来自专栏desperate633

LeetCode Invert Binary Tree题目分析

Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9 to4 / \ 7 2 / \ / \9 6 3 1 Tri...

841
来自专栏Hongten

ArrayList VS Vector(ArrayList和Vector的区别)_面试的时候经常出现

1692
来自专栏拭心的安卓进阶之路

Java 集合深入理解(12):古老的 Vector

今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相...

2437
来自专栏Java Edge

AbstractList源码解析1 实现的方法2 两种内部迭代器3 两种内部类3 SubList 源码分析4 RandomAccessSubList 源码:AbstractList 作为 Lis

它实现了 List 的一些位置相关操作(比如 get,set,add,remove),是第一个实现随机访问方法的集合类,但不支持添加和替换

422
来自专栏java闲聊

JDK1.8 ArrayList 源码解析

当运行 ArrayList<Integer> list = new ArrayList<>() ; ,因为它没有指定初始容量,所以它调用的是它的无参构造

1192
来自专栏开发与安全

算法:AOV网(Activity on Vextex Network)与拓扑排序

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex ...

2517
来自专栏刘君君

JDK8的HashMap源码学习笔记

3008

扫码关注云+社区