| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 与变分自编码器(Variational Auto-Encoder)的决一死战 -> 正文阅读 |
|
[人工智能]与变分自编码器(Variational Auto-Encoder)的决一死战 |
前言关于VAE,其实我在第一次自学李宏毅老师的课程时就已经写过一篇文章,之后在学校的Machine Learning2课程中也将原始paper-Auto-Encoding Variational Bayes 作为我的期末报告的对象。最近因为毕业论文又需要用到VAE,因此打算在这里对VAE再做一次复习与总结。 回归原文0.问题现在我们有一批数据{x1,x2,…,xn}, 采样自某随机变量x。我们希望构建一个模型来探究x的生成过程。首先作者假设这个生成过程分为2步,其中涉及某个隐变量z。即 当然,作者也提到了可以对整个过程,比如后验概率或者边际概率做一些简化性的假设来帮助模型的求解。但是作者并没有这么做,而是希望通过设计一个更一般性的算法来求解这个问题,下面我们就来看一看作者究竟是怎么做的。 1.基本思路既然我无法直接对真实的后验概率pθ(z|x) (绝大多数情况下非常复杂)进行操作,那么我们就引入另一个分布qφ(z|x)来近似真实的后验概率。这里其实就使用了变分推断的思想。 整个模型的基本框架可以用原文中的这张图来进行说明。 2.如何定义pθ(z|x) 与 qφ(z|x)的近似程度?既然我们需要一个近似的分布来代替真实的后验分布,那么我们必然需要一个度量手段来度量这两个分布之间的相似程度。这里我们使用KL散度,常用于度量两个分布之间的相似程度。 3.使用qφ(z|x)代替pθ(z|x)进行目标函数推导现在我们回到我们的目标—极大化边际似然函数p(x)(取log)。 事实上,它可以进一步被拆分成两个部分。如下 然后来看蓝色这一部分,这部分代表的是我们引入的变分近似分布qφ(z|x)与隐变量z的分布之间的负KL散度,为了让最终结果最大化,这项KL散度要尽可能地小,即我们希望让q分布和隐变量z的分布尽可能靠近。本质上这一项可以看作是正则项,如果没有这一项的约束,单纯地优化红色部分,那么模型会倾向于消除所有的噪声,过分地保证训练集中的输入与输出的高度一致,这不是我们想要的,我们希望地是模型更加具有创造性。 哦对了,说了这么多好像还没有说我们是如何从最初的对数似然函数推导到我们的变分下限函数的。以下是简单的推导过程。 4.如何优化新的目标函数L(θ,φ;x )?在前一部分,我们已经得到了我们的新目标函数,即变分下限函数L(θ,φ;x )。这里我们需要优化的参数有两个,即θ,φ。但是其中φ的求解存在一些问题。如果我们想直接利用梯度来优化φ是不行的。因为参数φ决定了隐变量的分布以及之后的采样结果,但是注意,采样这个过程是不可导的,因此梯度的反向传播也会因此受阻。 因此为了使得采样过后,参数φ能够依然留在表达式中,使得我们依旧能够对参数 事实上,在原文中变分下限函数L(θ,φ;x )有两种表达式,因此SGVB estimator自然也有对应的两种,这里我列举了第二种(B), 也是因为与我上文列出的变分下限表达式保持一致。 Anyway, 现在我们已经提出了对目标参数θ,φ可微的目标函数表达式,接下来我们可以来引出完整的算法了,也是这篇文章的核心算法—AEVB algorithm。 5.重要的应用VAE这篇文章提出了一个一般性的算法,用于求解包含隐变量的有向概率图模型。其中非常重要的一个应用就是VAE。 在上述的生成式概率图模型中,我们引入了一个变分近似qφ (z|x),用于近似表示未知的后验概率pθ(z|x)。这个部分可以被看作是一个编码(encoding)的过程,即将原始输入x转化为对应隐变量z的分布参数。在VAE中,我们使用一个神经网络来拟合这个过程。但是光这样还是不够的,因为我们对pθ(z|x)是完全未知的,因此能够使用的近似分布qφ (z|x)的形式存在太多不同的可能了。所以作者在这里做了一个假设,真实的后验概率为高斯分布。下面是原文中的相关描述。 6.Pytorch实现一个简单的VAE结构
这里只是一个示例代码,单纯是为了博客完整性而写的,我并没有在实际数据集上做任何实验。如果你想直接使用的话还需要注意以下问题: 1上面示例中我的output是没有最终还原到原始数据尺寸的。 以上就是这篇文章的全部内容了,谢谢大家的阅读。 参考文章: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 20:31:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |