论文阅读的附录(七):Understanding Diffusion Models: A Unified Perspective(二):公式46的推导
Understanding Diffusion Models: A Unified Perspective(二):公式46的推导
- 文章概括
- 要推导的公式
- 1. 条件概率的定义
- 2. 联合分布的分解
- 2.1 联合分布的定义
- 2.2 为什么可以这样分解?
- 2.3 具体意义
- 3. 分母的分解:边际化规则
- 4. 最终公式的推导
- 5. 为什么分母可以表示为 q ( x t − 1 ∣ x 0 ) q(x_{t-1}|x_0) q(xt−1∣x0)
- 6. 公式 (46) 的最终形式
- 7. 逐步推导总结
文章概括
引用:
@article{luo2022understanding,title={Understanding diffusion models: A unified perspective},author={Luo, Calvin},journal={arXiv preprint arXiv:2208.11970},year={2022}
}
Luo, C., 2022. Understanding diffusion models: A unified perspective. arXiv preprint arXiv:2208.11970.
原文: https://arxiv.org/abs/2208.11970
代码、数据和视频:https://arxiv.org/abs/2208.11970
文章解析原文:
论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(二)
要推导的公式
目标是推导公式:
q ( x t ∣ x t − 1 , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) . (46) q(x_t|x_{t-1}, x_0) = \frac{q(x_{t-1}|x_t, x_0) q(x_t|x_0)}{q(x_{t-1}|x_0)}. \tag{46} q(xt∣xt−1,x0)=q(xt−1∣x0)q(xt−1∣xt,x0)q(xt∣x0).(46)
1. 条件概率的定义
条件概率的基本定义为:
q ( A ∣ B ) = q ( A ∩ B ) q ( B ) , 其中 q ( B ) > 0. q(A|B) = \frac{q(A \cap B)}{q(B)}, \quad \text{其中 } q(B) > 0. q(A∣B)=q(B)q(A∩B),其中 q(B)>0.
对于多个条件的情况,比如 ( q(A|B, C) ),可以扩展为:
q ( A ∣ B , C ) = q ( A , B , C ) q ( B , C ) . q(A|B, C) = \frac{q(A, B, C)}{q(B, C)}. q(A∣B,C)=q(B,C)q(A,B,C).
在我们的目标公式中, q ( x t ∣ x t − 1 , x 0 ) q(x_t|x_{t-1}, x_0) q(xt∣xt−1,x0) 表示在 x t − 1 x_{t-1} xt−1 和 x 0 x_0 x0 已知的条件下, x t x_t xt 的分布。因此:
q ( x t ∣ x t − 1 , x 0 ) = q ( x t , x t − 1 , x 0 ) q ( x t − 1 , x 0 ) . (1) q(x_t|x_{t-1}, x_0) = \frac{q(x_t, x_{t-1}, x_0)}{q(x_{t-1}, x_0)}. \tag{1} q(xt∣xt−1,x0)=q(xt−1,x0)q(xt,xt−1,x0).(1)
2. 联合分布的分解
我们需要分解联合分布 q ( x t , x t − 1 , x 0 ) q(x_t, x_{t-1}, x_0) q(xt,xt−1,x0)。以下是基础逻辑:
2.1 联合分布的定义
联合分布 q ( x t , x t − 1 , x 0 ) q(x_t, x_{t-1}, x_0) q(xt,xt−1,x0) 表示 x t , x t − 1 , x 0 x_t, x_{t-1}, x_0 xt,xt−1,x0 同时发生的概率。根据 概率链式法则(Chain Rule of Probability),联合分布可以逐步分解为条件概率的乘积:
q ( x t , x t − 1 , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) . (2) q(x_t, x_{t-1}, x_0) = q(x_{t-1}|x_t, x_0) q(x_t|x_0). \tag{2} q(xt,xt−1,x0)=q(xt−1∣xt,x0)q(xt∣x0).(2)
这一步基于条件概率的定义:
- q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt−1∣xt,x0):在 x t x_t xt 和 x 0 x_0 x0 已知的条件下, x t − 1 x_{t-1} xt−1 的分布。
- q ( x t ∣ x 0 ) q(x_t|x_0) q(xt∣x0):在 x 0 x_0 x0 已知的情况下, x t x_t xt 的边际分布。
2.2 为什么可以这样分解?
根据概率论的链式规则:
q ( A , B , C ) = q ( A ∣ B , C ) q ( B , C ) . q(A, B, C) = q(A|B, C) q(B, C). q(A,B,C)=q(A∣B,C)q(B,C).
在这里,设 A = x t − 1 A = x_{t-1} A=xt−1, B = x t B = x_t B=xt, C = x 0 C = x_0 C=x0,我们可以写成:
q ( x t − 1 , x t , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t , x 0 ) . q(x_{t-1}, x_t, x_0) = q(x_{t-1}|x_t, x_0) q(x_t, x_0). q(xt−1,xt,x0)=q(xt−1∣xt,x0)q(xt,x0).
接着,再对 q ( x t , x 0 ) q(x_t, x_0) q(xt,x0) 应用链式规则:
q ( x t , x 0 ) = q ( x t ∣ x 0 ) q ( x 0 ) . q(x_t, x_0) = q(x_t|x_0) q(x_0). q(xt,x0)=q(xt∣x0)q(x0).
因此:
q ( x t − 1 , x t , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) q ( x 0 ) . q(x_{t-1}, x_t, x_0) = q(x_{t-1}|x_t, x_0) q(x_t|x_0) q(x_0). q(xt−1,xt,x0)=q(xt−1∣xt,x0)q(xt∣x0)q(x0).
在本问题中, q ( x 0 ) q(x_0) q(x0) 是常量,不影响条件概率的形式,所以我们可以简化为:
q ( x t , x t − 1 , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) . q(x_t, x_{t-1}, x_0) = q(x_{t-1}|x_t, x_0) q(x_t|x_0). q(xt,xt−1,x0)=q(xt−1∣xt,x0)q(xt∣x0).
2.3 具体意义
-
分解的直观意义:假设我们已经知道 x t x_t xt 和全局变量 x 0 x_0 x0 的值,那么我们可以首先用 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt−1∣xt,x0) 表示 x t − 1 x_{t-1} xt−1 的条件概率,再用 q ( x t ∣ x 0 ) q(x_t|x_0) q(xt∣x0) 表示 x t x_t xt 的边际分布。
-
为什么分解成这两项?
- 这是因为 q ( x t ∣ x 0 ) q(x_t|x_0) q(xt∣x0) 表示的是全局信息(全局分布)。
- 而 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt−1∣xt,x0) 捕捉的是局部的条件关系。
3. 分母的分解:边际化规则
分母 q ( x t − 1 , x 0 ) q(x_{t-1}, x_0) q(xt−1,x0) 是 x t − 1 x_{t-1} xt−1 和 x 0 x_0 x0 的联合分布,可以通过边际化 x t x_t xt 得到:
q ( x t − 1 , x 0 ) = ∫ q ( x t , x t − 1 , x 0 ) d x t . (4) q(x_{t-1}, x_0) = \int q(x_t, x_{t-1}, x_0) dx_t. \tag{4} q(xt−1,x0)=∫q(xt,xt−1,x0)dxt.(4)
将公式 (2) 中的分解 q ( x t , x t − 1 , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) q(x_t, x_{t-1}, x_0) = q(x_{t-1}|x_t, x_0) q(x_t|x_0) q(xt,xt−1,x0)=q(xt−1∣xt,x0)q(xt∣x0) 代入公式 (4):
q ( x t − 1 , x 0 ) = ∫ q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) d x t . (5) q(x_{t-1}, x_0) = \int q(x_{t-1}|x_t, x_0) q(x_t|x_0) dx_t. \tag{5} q(xt−1,x0)=∫q(xt−1∣xt,x0)q(xt∣x0)dxt.(5)
4. 最终公式的推导
将公式 (5) 的分母代入公式 (3),得到:
q ( x t ∣ x t − 1 , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) ∫ q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) d x t . q(x_t|x_{t-1}, x_0) = \frac{q(x_{t-1}|x_t, x_0) q(x_t|x_0)}{\int q(x_{t-1}|x_t, x_0) q(x_t|x_0) dx_t}. q(xt∣xt−1,x0)=∫q(xt−1∣xt,x0)q(xt∣x0)dxtq(xt−1∣xt,x0)q(xt∣x0).
现在,我们需要注意的是:
- 分子部分完全匹配公式 (46)。
- 分母部分的归一化形式也与公式 (46) 一致。
为了便于理解,分母中的积分项 ∫ q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) d x t \int q(x_{t-1}|x_t, x_0) q(x_t|x_0) dx_t ∫q(xt−1∣xt,x0)q(xt∣x0)dxt 在公式 (46) 中直接用 q ( x t − 1 ∣ x 0 ) q(x_{t-1}|x_0) q(xt−1∣x0) 表示。
5. 为什么分母可以表示为 q ( x t − 1 ∣ x 0 ) q(x_{t-1}|x_0) q(xt−1∣x0)
通过边际化定义:
q ( x t − 1 ∣ x 0 ) = ∫ q ( x t − 1 , x t ∣ x 0 ) d x t . q(x_{t-1}|x_0) = \int q(x_{t-1}, x_t|x_0) dx_t. q(xt−1∣x0)=∫q(xt−1,xt∣x0)dxt.
进一步分解 q ( x t − 1 , x t ∣ x 0 ) q(x_{t-1}, x_t|x_0) q(xt−1,xt∣x0):
q ( x t − 1 , x t ∣ x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) . q(x_{t-1}, x_t|x_0) = q(x_{t-1}|x_t, x_0) q(x_t|x_0). q(xt−1,xt∣x0)=q(xt−1∣xt,x0)q(xt∣x0).
1. 条件概率的链式规则
根据条件概率的定义,联合概率 q ( A , B ∣ C ) q(A, B|C) q(A,B∣C) 可以分解为: q ( A , B ∣ C ) = q ( A ∣ B , C ) q ( B ∣ C ) . q(A, B|C) = q(A|B, C) q(B|C). q(A,B∣C)=q(A∣B,C)q(B∣C).
符号解释:
- q ( A , B ∣ C ) q(A, B|C) q(A,B∣C):表示在 C C C 已知的条件下,事件 A A A 和 B B B 同时发生的概率。
- q ( A ∣ B , C ) q(A|B, C) q(A∣B,C):表示在 B B B 和 C C C 已知的条件下,事件 A A A 的条件概率。
- q ( B ∣ C ) q(B|C) q(B∣C):表示在 C C C 已知的条件下,事件 B B B 的条件概率。
代入后得到:
q ( x t − 1 ∣ x 0 ) = ∫ q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) d x t . q(x_{t-1}|x_0) = \int q(x_{t-1}|x_t, x_0) q(x_t|x_0) dx_t. q(xt−1∣x0)=∫q(xt−1∣xt,x0)q(xt∣x0)dxt.
因此,分母 q ( x t − 1 ∣ x 0 ) q(x_{t-1}|x_0) q(xt−1∣x0) 确实是公式 (46) 中的形式。
6. 公式 (46) 的最终形式
结合以上推导,公式 (46) 的最终形式是:
q ( x t ∣ x t − 1 , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) . q(x_t|x_{t-1}, x_0) = \frac{q(x_{t-1}|x_t, x_0) q(x_t|x_0)}{q(x_{t-1}|x_0)}. q(xt∣xt−1,x0)=q(xt−1∣x0)q(xt−1∣xt,x0)q(xt∣x0).
7. 逐步推导总结
-
从条件概率的定义出发:
q ( x t ∣ x t − 1 , x 0 ) = q ( x t , x t − 1 , x 0 ) q ( x t − 1 , x 0 ) . q(x_t|x_{t-1}, x_0) = \frac{q(x_t, x_{t-1}, x_0)}{q(x_{t-1}, x_0)}. q(xt∣xt−1,x0)=q(xt−1,x0)q(xt,xt−1,x0). -
联合分布的分解:
q ( x t , x t − 1 , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) . q(x_t, x_{t-1}, x_0) = q(x_{t-1}|x_t, x_0) q(x_t|x_0). q(xt,xt−1,x0)=q(xt−1∣xt,x0)q(xt∣x0). -
分母的边际化:
q ( x t − 1 , x 0 ) = ∫ q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) d x t . q(x_{t-1}, x_0) = \int q(x_{t-1}|x_t, x_0) q(x_t|x_0) dx_t. q(xt−1,x0)=∫q(xt−1∣xt,x0)q(xt∣x0)dxt. -
最终公式的组合:
q ( x t ∣ x t − 1 , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) . q(x_t|x_{t-1}, x_0) = \frac{q(x_{t-1}|x_t, x_0) q(x_t|x_0)}{q(x_{t-1}|x_0)}. q(xt∣xt−1,x0)=q(xt−1∣x0)q(xt−1∣xt,x0)q(xt∣x0).
相关文章:
论文阅读的附录(七):Understanding Diffusion Models: A Unified Perspective(二):公式46的推导
Understanding Diffusion Models: A Unified Perspective(二):公式46的推导 文章概括要推导的公式1. 条件概率的定义2. 联合分布的分解2.1 联合分布的定义2.2 为什么可以这样分解?2.3 具体意义 3. 分母的分解:边际化规…...
BGP分解实验·12——配置路由反射器
当一个AS包含多个iBGP对等体时,路由反射器(Route-Reflector)非常有用,因为相对于iBGP路由反射器指定的客户端只需要和路由反射器建立邻居关系,从而降低了iBGP全互连的连接数量。路由反射器(RR)和…...
PCIe 个人理解专栏——【2】LTSSM(Link Training and Status State Machine)
前言: 链路训练和状况状态机LTSSM(Link Training and Status State Machine)是整个链路训练和运行中状态的状态转换逻辑关系图,总共有11个状态。 正文: 包括检测(Detect),轮询&…...
cmake 编译QT之JKQtPlotter-4.0.3
cmake 编译 JKQtPlotter-4.0.3 1.下载源码 源码地址:https://github.com/jkriege2/JKQtPlotter 2.编译 mkdir build cd buildDCMAKE_PREFIX_PATH指编译器目录 D:\ProgramFiles\cmake-3.25.0-rc1-windows-i386\bin\cmake.exe -G "Visual Studio 16 2019&qu…...
【C】memory 详解
<memory.h> 是一个 C 标准库头文件,提供了一组内存管理函数,用于分配、释放和操作动态内存。这些函数主要操作的是未初始化的内存块,是早期 C 编程中常用的内存操作工具。 尽管在现代 C 编程中更推荐使用<cstring>或<memory&…...
Python 爬虫 - Selenium 框架
Python 爬虫 - Selenium 框架 安装安装 Selenium安装 WebDriver 操作浏览器打开浏览器普通方式加载配置方式Headless 方式 设置浏览器窗口最大化显示最小化显示自定义大小 前进后退前进后退 元素定位根据 id 定位根据 name 定位根据 class 定位根据标签名定位使用 CSS 定位使用…...
mysql的having语句
MySQL的HAVING语句用于在GROUP BY子句对数据进行分组后,过滤满足特定条件的组。与WHERE子句不同,HAVING子句可以在过滤条件中使用聚合函数,而WHERE子句则不能。通常,HAVING子句与GROUP BY子句一起使用,以实现对分组数据…...
华为数据之道-读书笔记
内容简介 关键字 数字化生产 已经成为普遍的商业模式,其本质是以数据为处理对象,以ICT平台为生产工具,以软件为载体,以服务为目的的生产过程。 信息与通信技术平台(Information and Communication Technology Platf…...
CDN、源站与边缘网络
什么是“源站” 源服务器 源服务器的目的是处理和响应来自互联网客户端的传入请求。源服务器的概念通常与边缘服务器或缓存服务器的概念结合使用。源服务器的核心是一台运行一个或多个程序的计算机,这些程序旨在侦听和处理传入的客户端请求。源服务器可以承担为网…...
工业相机 SDK 二次开发-Sherlock插件
本文介绍了 sherlock 连接相机时的插件使用。通过本套插件可连接海康的工业相机。 一.环境配置 1. 拷贝动态库 在用户安装 MVS 目录下按照如下路径 Development\ThirdPartyPlatformAdapter 找到目 录为 DalsaSherlock 的文件夹,根据 Sherlock 版本找到…...
FlinkSql使用中rank/dense_rank函数报错空指针
问题描述 在flink1.16(甚至以前的版本)中,使用rank()或者dense_rank()进行排序时,某些场景会导致报错空指针NPE(NullPointerError) 报错内容如下 该报错没有行号/错误位置,无法排查 现状 目前已经确认为bug,根据github上的PR日…...
VS C++ 配置OPENCV环境
VS C 配置OPENCV环境 1.下载opencv2.安装环境3.opencv环境4.VS配置opencv环境5.EXE执行文件路径的环境lib和dll需要根据是debug还是release环境来区分使用哪个 6.Windows环境 1.下载opencv 链接: link 2.安装环境 双击运行即可 3.opencv环境 include文件路径:opencv\build\…...
【SpringSecurity】基本开发流程
文章目录 概要整体架构流程实现流程1、编写各种Handler2 、AccessToken处理器3、定义AuthenticationFilter 继承 OncePerRequestFilter (OncePerRequestFilter是Spring提供的一个过滤器基类,它确保了在一次完整的HTTP请求中,无论请求经过多少…...
Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)
redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…...
ChatGPT从数据分析到内容写作建议相关的46个提示词分享!
在当今快节奏的学术环境中,研究人员面临着海量的信息和复杂的研究任务。幸运的是,随着人工智能技术的发展,像ChatGPT这样的先进工具为科研人员提供了强大的支持。今天就让我们一起探索如何利用ChatGPT提升研究效率进一步优化研究流程。 ChatG…...
在 Windows 11 中设置 WSL2 Ubuntu 的 `networkingMode=mirrored` 详细教程
在 Windows 11 中设置 WSL2 Ubuntu 的 networkingModemirrored 详细教程 引言环境要求配置 .wslconfig 文件重启 WSL2验证镜像网络模式解决常见问题其他注意事项结论 引言 在 Windows 11 中使用 WSL2(Windows Subsystem for Linux 2)时,默认…...
万字长文总结前端开发知识---JavaScriptVue3Axios
JavaScript学习目录 一、JavaScript1. 引入方式1.1 内部脚本 (Inline Script)1.2 外部脚本 (External Script) 2. 基础语法2.1 声明变量2.2 声明常量2.3 输出信息 3. 数据类型3.1 基本数据类型3.2 模板字符串 4. 函数4.1 具名函数 (Named Function)4.2 匿名函数 (Anonymous Fun…...
怎么样把pdf转成图片模式(不能复制文字)
贵但好用的wps, 转换——转为图片型pdf —————————————————————————————————————————— 转换前: 转换后: 肉眼可见,模糊了,且不能复制。 其他免费办法,参考&…...
本地centos网络配置
1、路径 2、配置 另外还需要...
kotlin内联函数——runCatching
1.runCatching作用 代替try{}catch{}异常处理,用于捕获异常。 2.runCatching函数介绍 参数:上下文引用对象为参数返回值:lamda表达式结果 调用runCatching函数,如果调用成功则返回其封装的结果,并可回调onSuccess函…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
