Noise Conditional Score Networks 简单总结

2024-08-23 15:20

本文主要是介绍Noise Conditional Score Networks 简单总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Noise Conditional Score Networks

Score

S c o r e = ∇ x l o g p ( x ) (1) Score = \nabla_xlog~{p(x)} \tag{1} Score=xlog p(x)(1)

Score 是论文中的一个定义,表示概率密度 p ( x ) p(x) p(x)的梯度,沿着概率密度的梯度向前走,会走到概率密度最高的点。

郎之万动力学采样

x ~ t = x ~ t − 1 + ϵ 2 ∇ x ~ log ⁡ p ( x ~ t − 1 ) + ϵ z t (2) \tilde{x}_t = \tilde{x}_{t-1} + \frac{\epsilon}{2} \nabla_{\tilde{x}} \log p(\tilde{x}_{t-1}) + \sqrt{\epsilon} z_t \tag{2} x~t=x~t1+2ϵx~logp(x~t1)+ϵ zt(2)

z t z_t zt表示高斯噪声, ϵ \epsilon ϵ表示步长,这个公式表示沿着Score向前走,会走到概率密度最高的点,也就是真实的数据分布

Score learning

要想从公式(2)得到真实的数据分布,关键是要学习Score。
L = 1 2 E P data ( x ) [ ∥ s θ ( x ) − ∇ x log ⁡ p ( x ) ∥ 2 2 ] (3) L = \frac{1}{2} \mathbb{E}_{P_{\text{data}}(x)} \left[\left\| s_{\theta}(x) - \nabla_{x} \log p(x) \right\|_2^2 \right] \tag{3} L=21EPdata(x)[sθ(x)xlogp(x)22](3)

直接通过公式(3)学习存在1个问题:

数据密度分布存在低密度区域,对应的样本少, s θ ( x ) s_{\theta}(x) sθ(x)学习不充分,在这些样本点上不能得到足够准确的梯度分数。

通过在真实数据中引入微小的高斯噪声来模拟密度低的样本点,使 s θ ( x ) s_{\theta}(x) sθ(x)学习充分。刚开始的噪声大,后面的噪声小

Noise Conditional Score learning

L = 1 2 E P data ( x ) E x ~ ∼ N ( x ; σ 2 I ) [ ∥ s θ ( x ~ ; σ ) + x ~ − x σ 2 ∥ 2 2 ] (4) L = \frac{1}{2} \mathbb{E}_{P_{\text{data}}(x)} \mathbb{E}_{\tilde{x} \sim \mathcal{N}(x; \sigma^2 I)} \left[ \left\| s_{\theta}(\tilde{x}; \sigma) + \frac{\tilde{x} - x}{\sigma^2} \right\|_2^2 \right] \tag{4} L=21EPdata(x)Ex~N(x;σ2I)[ sθ(x~;σ)+σ2x~x 22](4)

加噪的目的是让样本分布的空间扩大,前期加噪越强,分布空间越大。到后期,加噪小,几乎等于真实样本分布。Score也会越来越准确

这篇文章是一个简单总结,详细的推导 可以看这篇文章和这篇文章。

补充知识:

郎之万动力学[^1]用随机微分方程描述粒子的运动,粒子运动的方向由当前位置的能量密度函数的梯度来指导(粒子会朝着从能量密度高向密度低的地方运动)而且受到微弱的随机噪声的影响。通常表示为
x t + 1 = x t − ϵ ∇ E ( x t ) + 2 ϵ η t x_{t+1} = x_t -\epsilon \nabla E(x_t)+\sqrt{2\epsilon}\eta_t xt+1=xtϵE(xt)+2ϵ ηt
x x x,表示分子的位置, E ( x ) E(x) E(x)表示分子的能量密度函数, ϵ \epsilon ϵ表示步长, η \eta η表示高斯噪声, t t t表示当前时刻。

参考:

[^1] 郎之万动力学

[^2] NCSN视频讲解

文章信息

发表时间:2019,发表地点:NuerPIS,作者:Song, Yang,机构:Stanford.

原文:Generative Modeling by Estimating Gradients of the Data Distribution

原发表网站引用模板:

@inproceedings{NEURIPS2019_3001ef25,author = {Song, Yang and Ermon, Stefano},booktitle = {Advances in Neural Information Processing Systems},editor = {H. Wallach and H. Larochelle and A. Beygelzimer and F. d\textquotesingle Alch\'{e}-Buc and E. Fox and R. Garnett},pages = {},publisher = {Curran Associates, Inc.},title = {Generative Modeling by Estimating Gradients of the Data Distribution},url = {https://proceedings.neurips.cc/paper_files/paper/2019/file/3001ef257407d5a371a96dcd947c7d93-Paper.pdf},volume = {32},year = {2019}
}

这篇关于Noise Conditional Score Networks 简单总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099757

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter