第十七周:机器学习

目录

摘要

Abstract

一、MCMC

1、马尔科夫链采样

 step1 状态设定

step2 转移矩阵

step3 马尔科夫链的生成

step4 概率分布的估计

2、蒙特卡洛方法

step1 由一个分布产生随机变量

step2 用这些随机变量做实验

3、MCMC算法 

4、参考文章

二、flow-based GAN 

1、引入 

2、数学基础回顾 

总结 


摘要

本周主要学习了MCMC算法,其中包含马尔科夫链采样和蒙特卡洛方法。通过视频资料的学习,对以上提到的两种方法进行规律总结以及简单的代码实践。还回顾了flow-based GAN理论的简单数学基础。

Abstract

This week is focused on MCMC algorithm which contains Markov chain sampling and Monte Carlo method. The video material was used to summarize the laws of the two methods mentioned above as well as simple code practice. The simple mathematical foundations of flow-based GAN theory are also reviewed. 

一、MCMC

1、马尔科夫链采样

 Markov Chains马尔科夫链:未来的状态只取决于前一个状态,而不依赖于更往前的状态。并且所有状态出箭头的概率之和都为1。

随机漫步random walk 

问题:行走着无规则的向着四面八方行走,最终形成的各个方向的概率是否收敛于一定值?

解决:稳态分布(平衡状态) 

稳态分布:与初始概率分布无关,马尔科夫链在有限次状态转移之后到达的平稳状态分布即为稳态分布。

\pi (j)=\sum_{i=0}^{\infty }\pi (i)P_{ij} 

\pi (j)所得到的向量值代表了某个时刻(第j个时刻)的概率分布值\pi (i)则代表i个状态的概率分布。由于每个状态的输出之和都为1,所以有\sum_{i=0}^{\infty }\pi (i)=1


 step1 状态设定

一家快餐店售卖三种食物:pizza、buger、hotdog。将每种食物设定为不同状态分别为1、2、3

#定义3种状态
state = {0 : "Burger",1 : "Pizza",2 : "Hotdog"
}
state

step2 转移矩阵

每个数值代表着对应行列的权重,如果两个节点之间用箭头连线连接,那么该数值也叫转移概率

#定义过渡矩阵
A = np.array([[0.2, 0.6, 0.2], [0.3, 0.0, 0.7], [0.5, 0.0, 0.5]])

step3 马尔科夫链的生成

#随机生成马尔科夫链——random walk的过程
n = 15
start_state = 0
curr_state = start_state
print(state[curr_state], "--->", end=" ")while n-1:curr_state = np.random.choice([0, 1, 2], p=A[curr_state])print(state[curr_state], "--->", end=" ")n-=1
print("stop")

随机选定一个初始状态,接着用np库中的random.choice函数在备选状态集中选择下一状态,直至循环到设置最大值。 生成结果如下:

step4 概率分布的估计

法一:Monte Carlo方法

steps = 10**6
start_state = 0  #其中A[curr_state]只有三种状态:pizza、buger、hotgog
curr_state = start_state
pi = np.array([0, 0, 0])  #初始状态均为0
pi[start_state] = 1   #把初始状态开始的state设为1i = 0
while i<steps:curr_state = np.random.choice([0,1,2], p=A[curr_state])  #随机从p中选择一种状态pi[curr_state]+=1i +=1print("π = ", pi/steps)

输出结果如下:

法二:矩阵连乘法 

steps = 10**3  #设置矩阵相乘的次数
A_n = Ai=0
while i<steps:A_n =  np.matmul(A_n, A)  #矩阵乘法i+=1print("A^n = \n", A_n, "\n")
print("π = ", A_n[0])

输出结果如下:

法三:求解左特征值

pi向量代表各个状态的概率分布,也就是每一行的概率分布

可以看出,上面关于pi的等式要成立,有些类似于线性代数中特征值和特征向量的求解,pi相当于是特征向量,特征值为1

import scipy.linalg
values, left = scipy.linalg.eig(A, right = False, left = True)  #计算左特征向量和特征值print("left eigen vectors = \n", left, "\n")
print("eigen values = \n", values)

特征值和特征向量输出结果如下:

 将特征向量进行归一化处理:

pi = left[:,0]  #提取第一个左特征向量
pi_normalized = [(x/np.sum(pi)).real for x in pi]   #归一化第一个左特征向量

pi的向量输出结果如下:

Markov Chains的概率预测

def find_prob(seq, A, pi):start_state = seq[0]prob = pi[start_state]prev_state, curr_state = start_state, start_statefor i in range(1, len(seq)):curr_state = seq[i]prob *= A[prev_state][curr_state]prev_state = curr_statereturn probprint(find_prob([1, 2, 2, 0], A, pi_normalized))

预测一条给定的markov chains的概率P(pizza——>hotdog——>hotdog——>burger)

预测结果如下:

2、蒙特卡洛方法

step1 由一个分布产生随机变量

step1 分布函数CDF的反函数

#随机线性选取x,得到概率密度f和概率分布F
x = np.linspace(0,3,100)  #初始、结束、总数
f = 2*np.exp(-2*x)
F = 1-np.exp(-2*x)#绘图
plt.figure(figsize=(8,3))
plt.plot(x, f, label=r'$f(x)$')
plt.plot(x,F, label=r'$F(x)$')
plt.legend()
plt.xlabel('$x$', fontsize=20)
plt.legend()
plt.show()

上述代码以泊松分布为例 

分布函数的反函数 

#设定反函数
Us = np.random.rand(10000)
F_inv_Us = -np.log(1-Us)/2#绘图
plt.figure(figsize=(8,3))
plt.plot(x, f, label=r'$f(x)$')
plt.hist(F_inv_Us, histtype='step', color='red', density='norm', bins=100, label='$F^{-1}(u)$')
plt.legend()
plt.xlabel('$x$', fontsize=20)
plt.legend()
plt.show()

step2 查找排序算法 

#设定自变量及概率密度和分布函数的定义式
x, y, F1, F2, E1, E2 = smp.symbols('x y F_1 F_2 E_1 E_2', real=True, positive=True)
fs = F1*smp.exp(-smp.sqrt(x/E1)) + F2*smp.exp(-smp.sqrt(x/E2))
Fs = smp.integrate(fs, (x,0,y)).doit()#写成只需要传递参数的函数形式
Fn = smp.lambdify((y, E1, E2, F1, F2), Fs)  #目的就是输入前面的数值y, E1, E2, F1, F2)带入后面的式子Fs中去
fn = smp.lambdify((x, E1, E2, F1, F2), fs)#给定参数的实际数值
E1 = E2 = 0.2
F1 = 1.3
F2 = 1.4
x = np.linspace(0,5,1000)
f = fn(x, E1, E2, F1, F2)
F = Fn(x, E1, E2, F1, F2)#绘图
plt.figure(figsize=(8,3))
plt.plot(x,f, label=r'$f(x)$')
plt.plot(x,F, label=r'$F(x)$')
plt.legend()
plt.xlabel('$x$', fontsize=20)
plt.legend()
plt.show()

加入分布函数的反函数

#反函数
F_inv_Us = x[np.searchsorted(F[:-1], Us)]#绘图
plt.figure(figsize=(8,3))
plt.plot(x, f, label=r'$f(x)$')
plt.hist(F_inv_Us, histtype='step', color='red', density='norm', bins=100, label='$F^{-1}(u)$')
plt.legend()
plt.xlabel('$x$', fontsize=20)
plt.legend()
plt.xlim(0,2)
plt.show()

上面的函数分布是正太分布 

step3 建立随机变量 

#rayleigh分布
r = np.random.rayleigh(size=1000)#绘图
plt.hist(r, bins=100)
plt.show()

step2 用这些随机变量做实验

累积计算detector的energy  

N = 100000# Part 1 
X = np.random.poisson(lam=4, size=N)  #采样泊松分布# Part 2
x = np.linspace(0,5,1000)   
F = Fn(x, E1, E2, F1, F2)   #分布函数
Us = np.random.rand(X.sum()) #随机生成指定维度的样本数据  
E = x[np.searchsorted(F[:-1], Us)]  #样本数据在分布函数中的索引,E是分布中的原有数据

在n轮实验之后,检测到的粒子总数净和 

idx = np.insert(X.cumsum(), 0, 0)[:-1] #累积求和插入到空列表中
E_10s = np.add.reduceat(E, idx)  #分段求和,E是一个完整的数组,ind给出的是分段的位置,然后每一段分别进行求和
#也就是,0-2求和、3-5求和、6-11求和#绘图
plt.figure(figsize=(5,3))
plt.hist(E_10s, bins=100)
plt.xlabel('Energy [GeV]', fontsize=20)
plt.ylabel('# Occurences')
plt.show()

结果绘制如下: 

3、MCMC算法 

MCMC:该方法将马尔科夫(Markov)过程引入到Monte Carlo模拟中,实现抽样分布随模拟的进行而改变的动态模拟,弥补了传统的蒙特卡罗积分只能静态模拟的缺陷。 

4、参考文章

参考视频:https://www.youtube.com/watch?v=i3AkTO9HLXo

 https://www.youtube.com/watch?v=U00Kseb6SB4

参考文章: 动态规划之——矩阵连乘(全网最详细博文,看这一篇就够了!)-CSDN博客

原创 | 一文读懂蒙特卡洛算法

二、flow-based GAN 

1、引入 

 

问题:一般的GAN无法直接optimize模型的function,也就是无法使得G^*取得最大值

解决:flow-based GAN 

2、数学基础回顾 

Jacobian matrix 

向量z是输入、向量x是输出 ,Jacobian matrix 就是分别在各自位置上进行偏微分操作。由此引申出了Jacobian的逆矩阵。二者互为逆矩阵的关系,有公式如下:

J_fJ_f^{-1}=1

determinant 

 

几何意义的表示如下: 

 

几维向量就代表了该矩阵能够组成几维空间的图形。 

change of variable theorem

 

已知输入z的正态分布\pi (z)以及输出的一个复杂分布p(x)。首先,将z作为输入、x作为输出,f是连接输入输出的函数,体现二者之间的关系;接着,将z{}'对应到x{}'上去,找到x{}'在分布中对应的p({x}');最后,找到两个分布之间的关系。

无论输入输出是什么分布,蓝色方块和绿色方块的面积要保持一致。

 

 

总结 

本周对GAN的变形算法进行数学基础学习,并且拓展学习了MCMC算法的基本内容和代码。下周将继续学习flow-based GAN算法的基本理论推导,并且对MCMC算法进行总结,找到马尔科夫链和蒙特卡罗方法的关联及在该算法中各自的应用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux网络】Linux网络基础入门:初识网络,理解网络协议

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;Linux “ 登神长阶 ” &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀Linux网络 &#x1f4d2;1. 计算机网络背景发展历程"协议" &#x1f4dc;2. 网络协…

UML外卖系统报告(包含具体需求分析)

1、系统背景 随着互联网技术的快速发展&#xff0c;外卖订餐服务逐渐成为人们生活中的一部分。传统的电话订餐方式面临诸多不便和限制&#xff0c;而基于互联网的外卖订餐系统则提供了更加便捷、快速和高效的订餐服务。这种系统通过将餐厅、顾客和配送人员连接起来&#xff0c…

Sentinel详解

参考博客&#xff1a; SpringCloud Sentinel集成到微服务项目中&#xff08;保姆级教程&#xff09; 什么是Sentinel Sentinel 是面向分布式服务架构的轻量级流量控制产品&#xff0c;主要以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来保护服务…

Vue学习记录之二十五 Vue3中Web Componets的使用

一、webcomponets介绍 在Vue 3中使用Web Components可以通过多种方式实现。Web Components是一组允许你创建可重用、封装良好的自定义元素的标准技术。它们包括Custom Elements、Shadow DOM、HTML Templates等。 Vue3 支持原生模式&#xff0c;可以让单个文件的js,css,html以h…

移植rv1106SDK的ipcweb到ubuntu

移植minilogger 在sdk中找到minilogger&#xff0c;复制到任意的文件夹&#xff0c;执行 cmake ./ make make install把minilogger 安装到系统 修改Makefile 在上次那个基础上&#xff0c;修改Makefile #* 这里原来要包含../Makefile.param&#xff0c;但含有sdk的很多参数…

w003基于Springboot的图书个性化推荐系统的设计与实现

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Mysql(十) --- 用户权限和管理

文章目录 前言1. 应用场景2.用户2.1. 查看用户2.2. 创建用户2.2.1 语法2.2.2. 注意事项 2.2.3.示例2.3. 修改密码2.3.1. 语法2.3.2. 示例 2.4.删除用户2.4.1.语法2.4.2.示例 3. 权限和授权MySQL内置支持的权限列表3.1.给用户授权3.1.1.语法3.1.2. 示例 3.2.回收权限3.2.1.语法3…

Golang Agent 可观测性的全面升级与新特性介绍

作者&#xff1a;张海彬&#xff08;古琦&#xff09; 背景 自 2024 年 6 月 26 日&#xff0c;ARMS 发布了针对 Golang 应用的可观测性监控功能以来&#xff0c;阿里云 ARMS 团队与程序语言与编译器团队一直致力于不断优化和提升该系统的各项功能&#xff0c;旨在为开发者提…

基于SpringBoot的中药材进存销管理系统设计与实现

摘要 中药材进存销管理系统是为了满足中药材生产和销售企业的高效管理需求&#xff0c;涵盖了药材采购、库存管理和销售跟踪等主要功能。本系统采用Spring Boot框架进行开发&#xff0c;结合了前端和数据库设计&#xff0c;构建了一个实用的中药材管理平台&#xff0c;为企业提…

游戏服务器被攻击有办法防护吗

游戏服务器受到攻击时比较常见的。就算是刚上线的游戏&#xff0c;都会有被攻击的时候。游戏服务器受到攻击的原因以及解决方案有哪些呢&#xff1f; 游戏服务器被攻击的原因有哪些呢&#xff1f; 1、常见的攻击&#xff0c;大部分来自于同行之间的恶意竞争&#xff0c;你的游…

【QT】Qt窗口(上)

个人主页~ Qt窗口 一、菜单栏二、工具栏三、状态栏四、浮动窗口 Qt窗口是通过QMainWindow类来实现的&#xff0c;我们之前的学习是通过QWidget类实现的 QMainWindow包含一个菜单栏Menu Bar②&#xff0c;多个工具栏Tool Bars③&#xff0c;多个浮动窗口Dock Widgets&#xff0c…

OpenRTP 传输增加OpenRTPServer

开源地址 最近增加了OpenRTPServer&#xff0c; 已经修改完成一版放在了目录下&#xff0c;window和linux下编译都成功了&#xff0c;不过由于修改代码CMakefile 需要修改&#xff0c;先放放 OpenRTP开源地址 vlc得纠错传输方式 我发现我代码写错以后&#xff0c;vlc 依然能…

大数据Azkaban(二):Azkaban简单介绍

文章目录 Azkaban简单介绍 一、Azkaban特点 二、Azkaban组成结构 三、Azkaban部署模式 1、solo-server ode&#xff08;独立服务器模式&#xff09; 2、two server mode&#xff08;双服务器模式&#xff09; 3、distributed multiple-executor mode&#xff08;分布式多…

【Rust】环境搭建

▒ 目录 ▒ &#x1f6eb; 导读需求 1️⃣ 安装Chocolatey安装依赖 2️⃣ 安装RustRover安装toolchain&#xff08;rustup、VS&#xff09;重启配置生效设置安装插件 &#x1f4d6; 参考资料 &#x1f6eb; 导读 需求 重装系统&#xff0c;记录下环境搭建遇到的问题。 1️⃣ …

【最全基础知识2】机器视觉系统硬件组成之工业相机镜头篇--51camera

机器视觉系统中,工业镜头作为必备的器件之一,须和工业相机搭配。工业镜头是机器视觉系统中不可或缺的重要组成部分,其质量和性能直接影响到整个系统的成像质量和检测精度。 目录 一、基本功能和作用 二、分类 1、按成像方式分 2、按焦距分 3、按接口类型分 4、按应用…

如何制定有效的学习计划

文章目录 第一章&#xff1a;目标设定1.1 目标的重要性1.2 SMART原则1.3 目标设定公式 第二章&#xff1a;时间管理2.1 时间的重要性2.2 制定时间表2.3 时间管理公式2.4 番茄工作法2.5 时间分配公式 第三章&#xff1a;学习策略3.1 学习方法3.2 学习材料的选择3.3 学习效果公式…

量子计算突破:下一个科技革命的风口浪尖在哪里?

内容概要 在当今科技飞速发展的时代&#xff0c;量子计算如同一颗璀璨的明珠&#xff0c;正闪烁着无尽的可能性。它不仅是解决科学难题的钥匙&#xff0c;更是即将引领科技革命的先锋。如今&#xff0c;随着技术的不断突破&#xff0c;量子计算已经步入了一个崭新的阶段。想象…

【ZZULI】数据库第二次实验

【ZZULI】数据库第二次实验 创建学生信息管理系统的数据库通过T-SQL语句创建学生表、课程表、选课表创建学生表创建课程表创建选课表 修改表结构。为SC表添加写的列&#xff0c;列名为备注修改备注列的数据长度。删除SC表的备注列。 通过T-SQL语句对表的列添加约束&#xff0c;…

iOS静态库(.a)及资源文件的生成与使用详解(OC版本)

引言 iOS静态库&#xff08;.a&#xff09;及资源文件的生成与使用详解&#xff08;Swift版本&#xff09;_xcode 合并 .a文件-CSDN博客 在前面的博客中我们已经介绍了关于iOS静态库的生成步骤以及关于资源文件的处理&#xff0c;在本篇博客中我们将会以Objective-C为基础语言…

实验:使用Oxygen发布大型手册到Word格式

此前&#xff0c;我曾发表过一篇文章《结构化文档发布的故事和性能调优》&#xff0c;文中讨论了在将大型DITA手册转换为PDF格式时可能遇到的性能挑战及相应的优化策略。 近日&#xff0c;有朋友咨询&#xff0c;若将同样的大型手册输出为MS Word格式&#xff0c;是否也会面临…