首页 > 其他分享 >VAE 学习笔记

VAE 学习笔记

时间:2023-09-21 21:56:32浏览次数:46  
标签:right frac log int 笔记 VAE 学习 dz left

VAE 是 AE的变体。主要目的是让模型学习数据的分布,最后让解码器(decoder)部分具有生成样本的能力。
VAE可看做高斯混合模型(GMM)的扩展。
GMM中,数据由多个高斯分布来描述:

\[p(x) = \sum_{k=1}^{K}P(z_{k})P(x|z_{k}) \]

其中 $z \sim P(z^{k}) $, \(x|z^{k} \sim N(\mu^{k}, \sigma^{k})\)
此处,高斯分布的数量是有限的。

因此,这种编码方式编码能力有限。因此需要对这种方式拓展为连续编码。

\[p(x) = \int_{z} p(x|z)p(z)d z \]

其中 \(z\sim N(0,1), x|z \sim N(\mu (z), \sigma (z))\).

求解方式是最大化似然:

\[\max L = \sum_{x} \log p(x) \]

我们引入\(q(z|x)\), 它可以是任意一个概率分布。做如下等价变化。

\[\begin{align} \log p(x) & = \int_{z}q(z|x)\log p(x) dz \\ & = \int_{z}q(z|x)\log \frac{p(z, x)}{p(z|x)} dz \\ & = \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \frac{q(z| x)}{p(z|x)}\right) dz \\ & = \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz + \int_{z}q(z|x) \left(\frac{q(z| x)}{p(z|x)}\right) dz \\ & = \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz + KL(q(z| x)||p(z|x)) \\ & \geq \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz \end{align} \]

也即是

\[\log p(x) \geq \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz \]

我们定义

\[L_{b} = \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz \]

优化目标变为了同时优化\(q(z|x)\) 和 \(p(z|x)\)。

如果仅仅优化\(q(z|x)\), 由于\(\log p(x)\) 与\(q(z|x)\) 无关,那么 \(\log p(x)\) 不变化,它仅仅会增大\(L_{b}\), 因此,也缩小了KL. 如果KL缩小为0, 那么调节KL就会增大\(\log p(x)\). 而且最后,因为KL的缩小,最后的 \(q(z|x)\) 可以近似 \(p(z|x)\).

对于\(L_{b}\),我们作进一步分解。

\[\begin{align} L_{b} &= \int_{z}q(z|x)\log \left(\frac{p(x|z) p(z )}{q(z|x)} \right) dz \\ &= \int_{z}q(z|x)\log p(x|z) dz + \int_{z} q(z|x) \log \frac{p(z)}{q(z|x)} dz \\ &= -KL(q(z|x)||p(z)) + \int_{z}q(z|x)\log p(x|z) dz \end{align} \]

第一项展开如下(可参考VAE原文附录):

\[\sum_{i=1}^{l}(\exp(\sigma_{i}) - (1 + \sigma_{i}) + (m_{i})^{2}) \]

对于第二项,

\[\begin{align} & \max \int_{z}q(z|x)\log p(x|z) dz \\ & = \max E_{q(z|x)}[\log p(x|z)] \end{align} \]

这里其实就是auto-encoder的损失。
参考:
李宏毅机器学习 https://www.bilibili.com/video/av15889450/?p=33
https://www.gwylab.com/note-vae.html

标签:right,frac,log,int,笔记,VAE,学习,dz,left
From: https://www.cnblogs.com/lif323/p/17721045.html

相关文章

  • JAVA基础学习——面型对象进阶
    1static2继承   1static1.1内存图静态对象是随着类加载,非静态对象随着对象来的: 引用类型初始化时null值。 1.2static静态变量、静态方法 1.3总结  ①静态方法中没有this,非静态方法中有静态的一般用于共享,不面向某一个对象,所以没有this;而非......
  • openGauss学习笔记-76 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT简介
    openGauss学习笔记-76openGauss数据库管理-内存优化表MOT管理-内存表特性-MOT简介本节介绍了openGauss内存优化表(Memory-OptimizedTable,MOT)的简介。76MOT简介openGauss引入了MOT存储引擎,它是一种事务性行存储,针对多核和大内存服务器进行了优化。MOT是openGauss数据库最先进......
  • 为什么要学习敏捷?敏捷有哪些好处以及敏捷工具推荐
    敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。那企业为什么要进行变革,实施敏捷开发呢?企业进行敏捷开发的原因主要有以下几点:1、拥抱变化敏捷开发的一个重要特点是能够快速响应和适应市场环境的变化。在竞争激烈的市场环境中,产品的需求和方向经常需要调整,传统的大规模、长......
  • 服务网格化Service mesh 学习01 架构发展历史
    一、架构发展历史......
  • 「学习笔记」树链剖分
    树链剖分用于将树分割成若干条链的形式,以维护树上路径的信息。具体来说,将整棵树剖分为若干条链,使它组合成线性结构,然后用其他的数据结构维护信息。树链剖分有很多种形式,本文要讲的是其中的轻重链剖分。树链剖分本质上就是把链从树上砍下来,然后放到树状数组或线段树上来维护。......
  • C++系列十:日常学习-进程间通讯
    目录前言介绍照片:后续:前言V~~~V。介绍进程间通讯(Inter-ProcessCommunication,IPC)是操作系统中的一个重要概念,用于不同进程之间的数据传输和交互。有多种方式可以实现进程间通讯,以下是其中一些常见的方式:管道(Pipe):管道是一种单向通信方式,通常用于具有父子关系的进程之间。它分......
  • Qt开发学习笔记
    很久以前写的笔记,综合了很多内容,主要是来源于传智教育的Qt教学视频。时间久远,排版可能有点问题。Qt相关内容解释.pro文件解释QT+=coregui#Qt包含的模块greaterThan(QT_MAJOR_VERSION,4):QT+=widgets#大于4版本以上包含widget模块CONFIG+=c++11DEF......
  • 学习笔记418—删掉对称矩阵中的NaN,对角线为1【已解决!】
    问题:删掉对称矩阵中的NaN,对角线为1如下图矩阵A所示:解决办法:B=A+diag(NaN+zeros(1,length(A))); %将对角线改为NaNB(all(isnan(B),2),:)=[];%删除所有行为NaNB(:,all(isnan(B),1))=[];%删除所有列为NaNB(find(isnan(B)))=1;%再将对角线值改为1结果新矩......
  • linux操作系统基础知识学习
    Q1.什么是GNU?Linux与GNU有什么关系?A:1)GNU是GNUisNotUnix的递归缩写,是自由软件基金会(FreeSoftwareFoundation,FSF)的一个项目,该项目已经开发了许多高质量的编程工具,包括emacs编辑器、著名的GNUC和C++编译器(gcc和g++);2)Linux的开发使用了许多GNU工具,Linux系统上用于实现POSIX.......
  • DesignWare Building Block IP学习
    DesignWareBuildingBlock1.基本介绍DesignWareBuildingBlockIP(以下简称DWBB),也叫做FoundationLibrary,是一个紧密集成在Synopsys综合环境中的可重用智能功能块集合。使用DWBB可以在综合时实现透明且高水平的性能优化。DWBB中含有大量组件,可以实现设计重用并显著地提升生......