【文生图系列】基础篇-马尔可夫链

news2024/12/23 13:07:25

文章目录

    • 马尔可夫链
    • 转移矩阵
      • 例子
    • 应用实例
    • 参考

在阅读论文Denoising Diffusion Probabilistic Models时,发现论文里面介绍扩散概率模型(diffusion probabilistic model)是一个参数化的马尔科夫链(parameterized Markov chain),使用变分推理进行训练,以便能在有限的时间后产生与数据匹配的样本。为了能够深层次全面了解扩散模型的原理,所以先搁浅论文阅读,复习一些什么是马尔科夫链。

马尔可夫链

马尔可夫链是一个数学系统,它根据某些特定的概率规则从一个状态转换到另一个状态。马尔科夫的定义特征是:无论过程如何到达当前的状态,未来的状态都是固定的。也就是说,转换到任何特定状态的概率都取决于当前的状态和过去的时间。马尔可夫链是一个随机过程,而上述的特性也让它与一般的随机过程不同。马尔可夫链必须是“无记忆的”,未来行动的概率不取决于导致当前状态的步骤。,这被成为马尔可夫性质。

举一个小例子,便于快速理解马尔可夫性质。假设一个包里面有多个颜色的球,每次从包里面取出一个球,求每次得到一个特定颜色球的概率。这就构成了一个随机过程,随机变量是球的颜色。但是上述随机过程并不满足马尔科夫性质,每次取出球之后,包里球的总数会发生变化,那么 t t t时刻取出特定颜色球的概率受前 t − 1 t-1 t1时刻所取球颜色的影响。那如何更改取球规则,才能使此随机过程满足马尔可夫性质呢?马尔可夫性质要求 t t t时刻取出特定颜色球的概率不受前 t − 1 t-1 t1时刻的取球行为的影响,也就是说,每个时刻取球的概率是独立的。那我们更改条件,每次取球时记录球的颜色,然后将球再放入包中。这样,不论哪个时刻,包里球的总数是不变的,取出特定颜色的球的概率不受前几个时刻的取球动作的影响。这个随机过程满足马尔可夫链性质。

在这里插入图片描述

直白地说,一个马尔科夫链就是一系列满足条件独立规则的随机变量 X 0 , X 1 , X 2 , ⋯ X n X_{0}, X_{1}, X_{2}, \cdots X_{n} X0,X1,X2,Xn。对任何正整数 n n n和随机变量的可能状态 i 0 , i 1 , ⋯   , i n i_{0}, i_{1}, \cdots, i_{n} i0,i1,,in,马尔可夫性质可用公式表示为:

P ( X n = i n ∣ X n − 1 = i n − 1 ) = P ( X n = i n ∣ X 0 = i 0 , X 1 = i 1 , ⋯   , X n − 1 = i n − 1 ) P\left( X_{n} = i_{n} | X_{n-1} = i_{n-1} \right) = P\left( X_{n} = i_{n} | X_{0}=i_{0}, X_{1} = i_{1}, \cdots, X_{n-1} = i_{n-1} \right) P(Xn=inXn1=in1)=P(Xn=inX0=i0,X1=i1,,Xn1=in1)

转移矩阵

马尔科夫链 { X } \{X\} {X}在时刻 t t t的转移矩阵 P t P_{t} Pt是一个包含状态之间转换概率信息的矩阵。矩阵 P t P_{t} Pt i i i行第 j j j列的元素信息,用数学公式表示为: ( P t ) i , j = P ( X t + 1 = j ∣ X t = i ) \left( P_{t} \right)_{i,j} = \mathbb{P} \left( X_{t+1}=j | X_{t} = i \right) (Pt)i,j=P(Xt+1=jXt=i)。由上述公式可以看出,转换矩阵的每一行是一个概率向量,向量里面元素和为1。

假设有 n n n个随机变量,其 t t t t − 1 t-1 t1时刻的转移矩阵分别为 P t P_{t} Pt P t + 1 P_{t+1} Pt+1,设 M = P t ⋅ P t + 1 M = P_{t} \cdot P_{t+1} M=PtPt+1,计算 M M M i i i行第 j j j列的转移概率 M i , j M_{i,j} Mi,j
M i , j = ∑ k = 1 n ( P t ) i , k ( P t + 1 ) k , j = ∑ k = 1 n P ( X t + 1 = k ∣ X t = i ) P ( X t + 2 = j ∣ X t + 1 = k ) = P ( X t + 2 = j ∣ X t = i )      \begin{array}{l} M_{i,j} & =\sum_{k=1}^{n} \left( P_{t} \right)_{i,k} \left( P_{t+1} \right)_{k,j} \qquad \qquad \qquad \qquad \qquad \qquad \\ &= \sum_{k=1}^{n} \mathbb{P} \left( X_{t+1}=k | X_{t} = i \right) \mathbb{P} \left( X_{t+2}=j | X_{t+1} = k \right) \\ &= \mathbb{P} \left( X_{t+2}=j | X_{t} = i \right) \qquad \qquad \qquad \qquad \qquad \qquad \; \; \end{array} Mi,j=k=1n(Pt)i,k(Pt+1)k,j=k=1nP(Xt+1=kXt=i)P(Xt+2=jXt+1=k)=P(Xt+2=jXt=i)
那么 P ( X t + 2 = j ∣ X t = i ) = ( P t ⋅ P t + 1 ) i , j \mathbb{P} \left( X_{t+2}=j | X_{t} = i \right) = \left( P_{t} \cdot P_{t+1} \right)_{i,j} P(Xt+2=jXt=i)=(PtPt+1)i,j,依次类推,第 k k k步的转移方程为 P t ( k ) = P t ⋅ P t + 1 ⋯ P t + k − 1 P_{t}^{\left(k\right)} = P_{t} \cdot P_{t+1} \cdots P_{t+k-1} Pt(k)=PtPt+1Pt+k1。那么 P t ( k ) P_{t}^{\left(k\right)} Pt(k)的矩阵元素也可以表示如下:

在这里插入图片描述

例子

上述公式晦涩难懂,我们举一个小例子便于理解。下图描述的与时间无关的马尔科夫链,计算它的第二步转移矩阵?
在这里插入图片描述

如上所示,有两个变量 A A A B B B A A A A A A的概率为 0.3 0.3 0.3 A A A B B B的概率为 0.7 0.7 0.7 B B B A A A的概率为 0.9 0.9 0.9 B B B B B B的概率为 0.1 0.1 0.1,那么它的初始转移矩阵为 ( 0.3 0.7 0.9 0.1 ) \begin{pmatrix} 0.3 & 0.7 \\ 0.9 & 0.1 \end{pmatrix} (0.30.90.70.1)

第二步时的转移矩阵计算如下所示,

在这里插入图片描述

初始状态为 A A A走两步到 A A A的概率为 0.72 0.72 0.72
初始状态为 A A A走两步到 B B B的概率为 0.28 0.28 0.28
初始状态为 B B B走两步到 A A A的概率为 0.36 0.36 0.36
初始状态为 B B B走两步到 B B B的概率为 0.64 0.64 0.64

应用实例

马尔可夫链在生活中被广泛应用,比如语音识别中的声学模型、天气的预测和股票价格的预测等等。与马尔可夫链最相关应用最广泛是隐马尔可夫模型(hidden Markov model,HMM),HMM是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可预测的状态随机序列,再由各个状态生成一个观测从而产生观测随机序列的过程。HMM的具体实现见我的博文隐马尔可夫模型。

参考

  1. Markov Chains

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

List数组高效率去重

List数组高效率去重 一、环境准备–生成包含重复元素的list数组 /*** 生成包含重复元素的list数组* return*/ private static List<String> getList(){List<String> list new ArrayList<>();for (int i 1; i < 10000; i) {list.add(String.valueOf(i)…

Kendo UI for jQuery---03.组件___网格---02.开始

网格入门 本指南演示了如何启动和运行 Kendo UI for jQuery Grid。 完成本指南后&#xff0c;您将能够实现以下最终结果&#xff1a; 1. 创建一个空的 div 元素 首先&#xff0c;在页面上创建一个空元素&#xff0c;该元素将用作 Grid 组件的主容器。 <div id"my-…

SpringMVC组件原理剖析

文章目录 SpringMVC组件原理剖析一、 前端控制器初始化1.1 初始化SpringMVC容器1.2 注册了 SpringMVC的 九大组件1.3 处理器映射器初始化细节 二、前端控制器执行主流程2.1 定位doDispatcher方法2.2 验证HandlerExecutionChain2.3 HandlerAdapter执行目标方法 SpringMVC组件原理…

64位和32位相比优势是什么(一)

前置知识&#xff1a;程序是如何执行的&#xff1f; 一道常规的面试题&#xff1a;相比 32 位&#xff0c;64 位的优势是什么&#xff1f; 面试官考察这种类型的问题&#xff0c;主要是想看求职者是否有扎实的计算机基础&#xff0c;同时想知道求职者在工作中是否充满好奇&am…

路径规划算法:基于未来搜索优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于未来搜索优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于未来搜索优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

【硬件专题】案例:怎么通过元件丝印信息反查芯片

今天同事和昨天因为工作上的原因,问我一个问题,就是怎么通过丝印(Marking code)知道用的是什么芯片。以下列举几个方法: 凭经验 比如昨天给出的一张图片,看图片是比较模糊的。但是根据之前的使用,看芯片LOGO很明显是ST的,然后看上面的型号是STM**F1*VCT*,那么…

Go语言环境安装和程序结构

Go语言环境安装和程序结构 1、Go环境安装 Go安装包下载地址为&#xff1a; https://golang.org/dl/ https://golang.google.cn/dl/ 1.1 Windows下的安装 Windows 下可以使用.msi 后缀的安装包来安装&#xff0c;我这里下载的安装包是 go1.18.4.windows-amd64.msi&#xf…

C\C++ Thread-

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介 说明 时间 c语言的时间处理&#xff1a;time.h 获取从1970年1月1日到当前经过的秒数: long t0 time(NULL); 让程序暂停3秒&#xff1a; sleep(3); 当前时间的3秒后&#x…

Pycharm 通过 SVN 直接管理控制代码,原来这么方便又高级!

做自动化测试的小伙伴都知道&#xff0c;代码不会只放到本地管理&#xff0c;需要托管到远端进行管理&#xff01; 一方面&#xff0c;发布在不同的电脑上进行同步开发&#xff0c;不需要用U盘拷来拷去&#xff1b;另外一方面&#xff0c;可以轻松找回代码&#xff0c;避免本地…

【UE】玻璃材质

效果 步骤 1. 新建一个材质&#xff0c;这里命名为“M_GLASS” 双击打开“M_GLASS”&#xff0c;左下角混合模式设置为半透明 光照模式设置为表面前向着色 将基础颜色提升为参数 同样还需提升为参数的有“高光度”、“粗糙度”、“不透明度”、“折射” 设置高光度的默认值和最…

【软件测试面试】几句话让面试官再掏3K,轻松应对测试面试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 面试官&#xff1…

查看网卡中断在哪个CPU核处理

本文目录 1、查看CPU占用率2、查看系统的中断处理在各个CPU核间的分布情况3、查看用于处理网卡中断的CPU核4、修改用于处理网卡中断的CPU核 在默认的情况下Linux默认一个网卡的中断操作都在一个CPU核里处理&#xff0c;在大数据量或者说是对网卡的收发包性能PPS进行测试时&…

2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现?

2023-06-13&#xff1a;统计高并发网站每个网页每天的 UV 数据&#xff0c;结合Redis你会如何实现&#xff1f; 答案2023-06-13&#xff1a; 选用方案&#xff1a;HyperLogLog 如果统计 PV &#xff08;页面浏览量&#xff09;那非常好办&#xff0c;可以考虑为每个网页创建…

像医生一样的大规模AI模型

目录 华佗&#xff1a;BenTsao相关工作华佗模型实验 HuatuoGPT动机解决方案混合数据的SFT基于AI反馈的RL 医学中的LLM指令微调 华佗&#xff1a;BenTsao 大型语言模型&#xff08;LLM&#xff09;&#xff0c;如LLaMA模型&#xff0c;已经证明了它们在各种通用领域自然语言处理…

《代码随想录》(8)反转链表

LeeCode题号&#xff1a; 206 【题目描述】 给你单链表的头节点 head&#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 【示例1】 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]【示例2】 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]【示…

实现Vue3和UE5.2进行通信(Pixel Streaming)

文章目录 1. 从UE5.2到前端页面的通信1.1 编写蓝图脚本1.2 编写前端的响应函数1.3 功能验证 2. 从Vue3到UE5.2的信息发送2.1 UE5.2蓝图的设计2.2 前端发送消息功能的实现2.3 功能验证 3. 参考资源 这篇文章简单讲解一下如何实现vue3和UE5进行数据的通信。 如果有同学还不清楚如…

3.数据操作

SQL句子中语法格式提示&#xff1a; 1.中括号&#xff08;[]&#xff09;中的内容为可选项&#xff1b; 2.[&#xff0c;...]表示&#xff0c;前面的内容可重复&#xff1b; 3.大括号&#xff08;{}&#xff09;和竖线&#xff08;|&#xff09;表示选择项&#xff0c;在选择…

Jenkins集成钉钉通知插件的具体步骤怎么做你知道吗?

最近公司要求工作务必使用钉钉&#xff0c;其他聊天软件不再用于工作沟通了。虽然很抓狂&#xff0c;但是上面的决定不可违逆&#xff0c;只好转战钉钉。虽然强制使用钉钉挺令人反感的&#xff0c;但阿里在这款软件上确实下了些功夫&#xff0c;比如jenkins集成钉钉通知插件后&…

(原创)自定义控件:写一个瀑布流效果

效果展示 最近要业务中需要做一个瀑布流的效果&#xff0c;按理说正常的瀑布流网上已经有很多解决方案了。 但我还是想自己尝试写一下。 又因为这块要求有一点特殊&#xff0c;下面大概讲下需求&#xff1a; 首先子元素的对方肯定还是和其他瀑布流一样&#xff0c;按照子View的…

对任意给定的NFA M进行确定化操作(附详细注释)

对任意给定的NFA M进行确定化操作&#xff08;附详细注释&#xff09; DFA实体类 package Beans;import java.util.List;public class DFA {private List<Integer> K; // 状态集private char[] letters; // 字母表private String[][] f; // 转换函数priva…