深度学习入门:用MNIST完成Autoencoder(续)

简介:


其实通常情况下,Autoencoder做数据压缩,性能并不怎么样。以图片压缩为例,想要训练一个能和JPEG性能相提并论的自编码器非常困难,并且要达到这个性能,你还必须要把图片的类型限定在很小的一个范围内(例如JPEG不怎么行的某类图片)。自编码器依赖于数据的特性使得它在面对真实数据的压缩上并不可行,你只能在指定类型的数据上获得还可以的效果,但谁知道未来会有啥新需求?在实际应用中用的很少,2012年人们发现在卷积神经网络中使用自编码器做逐层预训练可以训练深度网络,但很快人们发现良好的初始化策略在训练深度网络上要比费劲的逐层预训练有效得多,2014年出现的Batch Normalization技术使得更深的网络也可以被有效训练,到了2015年底,通过使用残差学习(ResNet)我们基本上可以训练任意深度的神经网络。

变分自编码器(Variational autoencoder,VAE)

VAE是更年轻也更有趣的一种Autoencoder,它为码字施加约束,使得编码器学习到输入数据的隐变量模型。在章末的Reference部分有VAE的ArXiv原文,有兴趣的同学可以去了解一下,不过论文这种东西面向对象毕竟不是所有人,使得有些同学读起来有点累,虽然VAE的文章很多,我在这里简单介绍一下我的理解。

VAE和GAN同是生成模型(Generative Models)。而所有的生成模型都是定义在一些潜藏高位空间数据点X的概率分布,而生成模型(Generative Models)就是在X附近产生一个差不多接近X的值。如果你想装逼的话,可以这么念:“一个向量在其高维空间内有一个潜变量,这个能够让我们依据概率密度函数(PDF)(他真的叫PDF)来定义”——总之就是很不像人话。GAN源于博弈论(Game Theory),是为了找到生成网络和对抗网络之间的纳什均衡(Nash Equilibrium),意思就是同一时间内每个参与人的策略是对其他参与人策略的最优反应,你们可以理解成一个聪明的好人和一个聪明的坏人单挑,他们最坏的就是“鱼死网破”,而纳什均衡是能让他们双方收益最高的一个反应或者说决策。比如说坏人好人打架,有一个和事佬说,“你们不要打架不要打架”毕竟如果实力差不多的话,两方打起来的结果哪一方都不会讨好,在这里,不打架似乎损失是0,而各种打之类的都会造成损失,因此此时不打架就是好的,就是双方收益最高,就是纳什均衡了。GAN在Training部分与VAE有比较大的区别,毕竟VAE源于贝叶斯推理,对数据的概率分布进行建模,然后从这个分布中获得新的数据。

在这里不给大家引入大量的数学公式和证明,就给大家说一个小故事,来理解。

我先举一个例子:首先让你猜一个东西(data),比如说我让你猜一个动物,这个动物有四只脚,会游泳——刷刷刷的啥河马啥鸭嘴兽都出来了。

在我们猜这个动物是啥玩意的过程呢,我们的想象的对象比如河马啦鸭嘴兽啦,就是一个Latent Variable(实在不知道该如何翻译。。。)

首先我为了猜到河马或者鸭嘴兽这个答案,我们首先要缩小范围,我们不能瞎猜猜什么飞机大炮的,而是动物,然后我们的大脑就去思考动物了,但是问题是,假如你不知道是动物呢?在VAE中,我们用贝叶斯推理常用到的变分推理(Variational Inference),VI的先进性比MCMC(Markov Chain Monte Carol)是好很多。用KL divergence来判定一个分布与另一个分布的差异性,也就是说,KL Divergence可以判定人与人的差异和人与狗的差异。在我们不知道那个结果是什么的时候,在这里,也就是我们不知道那是动物这个集合的时候,我们可以用植物、无机物这些集合去和我们的目标进行比较。在真实世界,这个比较的动作其实很快,电光火石之间对比完事儿,Cell的那篇著名的Paper告诉我们人脸识别只有200多个细胞,而我们的算法。。。别提了。。。也算是真实世界与数学的逻辑世界的一点小小的不同吧。这一点我可能解释的不太好,还请有关大佬能告知我的错误。通过这种方式我们能够。。又好又快的得到我们想要的集合?

对,VAE玩了一个“大概”,要不怎么我猜猜猜,猜到最后可以出犀牛和鸭嘴兽呢?但是这并没有影响VAE在一个高水平、高容量的model里面表现出色。

VAE当然难度与Autoencoder相比更大了许多,如果只用Tensorflow的话,洋洋洒洒写了一百来行(主要是自身水平有限),放在这里就有一种水文的感觉,有兴趣的童鞋可以来Github上看一看。



原文发布时间为:2017-08-10
本文作者:那只猫
本文来自云栖社区合作伙伴“ Python中文社区”,了解相关信息可以关注“ Python中文社区”微信公众号
相关文章
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
2月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习入门案例:运用神经网络实现价格分类
深度学习入门案例:运用神经网络实现价格分类
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
软件工程师,入门下深度学习吧
软件工程师,入门下深度学习吧
56 9
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门与实践
【8月更文挑战第62天】本文以浅显易懂的方式介绍了深度学习领域中的核心技术之一——卷积神经网络(CNN)。文章通过生动的比喻和直观的图示,逐步揭示了CNN的工作原理和应用场景。同时,结合具体的代码示例,引导读者从零开始构建一个简单的CNN模型,实现对图像数据的分类任务。无论你是深度学习的初学者还是希望巩固理解的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:从理论到实践
【9月更文挑战第22天】本文将带你走进深度学习的世界,从基础的理论概念出发,逐步深入到实践应用。我们将探讨神经网络的工作原理,以及如何通过编程实现一个简单的深度学习模型。无论你是初学者还是有一定基础的学习者,都能在这篇文章中找到有价值的信息。让我们一起揭开深度学习的神秘面纱,探索这个充满无限可能的领域吧!
|
1月前
|
机器学习/深度学习 自然语言处理 TensorFlow
课外阅读之深度学习如何入门?
课外阅读之深度学习如何入门?
28 0
|
1月前
|
机器学习/深度学习 自然语言处理 算法
深度学习如何入门?
深度学习入门的指南,包括准备基础知识、学习深度学习理论、实践操作、进阶学习、参与社区和不断实践与反思等步骤。
43 0
|
1月前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
1月前
|
机器学习/深度学习 PyTorch API
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)