【机器学习】 贝叶斯理论的变分推理
许志永
一、说明
贝叶斯原理,站在概率角度上似乎容易解释,但站在函数立场上就不那么容易了;然而,在高端数学模型中,必须要在函数和集合立场上有一套完整的概念,其迭代和运算才能有坚定的理论基础。
二、贝叶斯概念的难处
2.1 并不简单
贝叶斯定理看起来天真地简单。但是,分母是在 z 上积分的分区函数,就不简单了。一般来说,它不能通过分析来解决。即使我们可以对已知分布族的先验和可能性进行建模,后验 p(z|x)总体上仍然难以解决。
让我们用一个简单的例子来演示它的复杂性。我们使用多项式分布来选择 K 正态分布之一。然后,我们使用选定的正态分布对 xi 进行采样。如图所示,后部的复杂性已经无法控制。
从源代码修改
另一种方法是近似解。在 ML 中,有两种主要的近似方法。它们是采样和变分推理。在本文中,我们将讨论后者。
在变分推理中,给定观测值 X,we 为潜在变量 z 构建概率模型 q,即 q ≈p(z|X)。
上面的边际 p(X) 可以计算为:
在变分推理中,我们避免计算边际 p(X)。这种分区功能通常很讨厌。相反,我们选择一些易于处理的分布族q来近似p。
我们将 q 与样本数据拟合,以了解分布参数 θ。当我们为 q 做出选择时,我们确保它易于操作。例如,它的期望和归一化因子可以直接从分布参数计算。由于这个选择,我们可以用 q 代替 p 进行任何推断或分析。
2.2 概述
虽然这个概念听起来很简单,但细节却并非如此。在本节中,我们将详细介绍著名的主题建模算法(称为潜在狄利克雷分配(LDA)的主要步骤。我们希望这能为您提供一个顶级概述,然后再深入研究细节和证明。
以下是 LDA 的图形模型。
该模型包含变量 α、β、θ、z 和 w。不要担心变量的含义,因为它在我们的上下文中并不重要。 w 是我们的观察结果。 θ 和 z 是我们想要发现的隐藏变量(潜在因子)。 α 和 β 在我们的讨论中是固定且已知的。图形模型中的箭头表示依赖性。例如,w 仅取决于 z 和 β。因此,p(w|α, β, θ, z) 可以简化为 p(w|z, β)。
与许多概率模型一样,我们感兴趣的是在给定已知输入的情况下对联合分布 p(w, θ, z |α, β) 进行建模。我们应用链式法则来扩展联合概率,使其仅由单个变量的分布组成。然后,我们应用图中的依赖关系来简化每一项。我们得到:
基于主题建模问题,θ和w可以用狄利克雷分布建模,z可以用多项式分布建模。我们的目标是用 q 近似所有隐藏变量 θ 和 z。
我们定义了一个目标来最小化 p 和 q 之间的差异。这可以通过最大化下面的ELBO(证据下限)来完成。
即使不是那么明显,当 p 和 q 相同时,ELBO 会最大化。然而,联合概率q(θ, z)仍然很难建模。我们将它分解并近似为 q(θ, z) ≈ q(θ) q(z)。即使它可能不完美,经验结果通常也是好的。 z 由多个变量 z₁、z₂、z₃、... 组成。并且可以分解为单个组件,如 Q(z₁)Q(z₂)...因此,q 的最终模型为:
根据主题建模问题,我们可以对具有狄利克雷分布的 θ 和具有多项分布的 zi 进行建模,并使用 γ 和 φi 对相应的分布参数进行建模。 这是一个伟大的里程碑,因为我们设法用单个隐藏变量的分布对复杂模型进行建模,并为每个隐藏变量选择一个可处理的分布。剩下的问题是如何学习γ和φi。让我们回到ELBO目标:
在许多 ML 问题中,为了有效地对问题进行建模,隐藏变量通常相互依赖。我们无法一步优化它们。相反,我们一次优化一个变量,同时保持其他变量固定。因此,我们轮流旋转隐藏变量以交替步骤进行优化,直到解决方案收敛。在 LDA 中,z 和 θ 分别在下面的步骤 5 和 6 中进行优化。
源
剩下的主要问题是如何在修复其他参数的同时优化变分参数。在每次迭代中,目标隐变量 zk 的最佳分布为:
分子对除 zk 之外的所有隐藏变量进行积分。
听起来我们正在重新引入邪恶的双胞胎:正常化因素。尽管如此,这不会成为问题。我们选择 q 作为可处理的分布。它们的期望和归一化可以从分布参数分析中得出。
等式中的分子值得更多解释。对于正则期望 E[f(x₁, x₂, x₃)],我们评估所有变量的 f。
但是对于我们的分子,我们省略了目标变量。
即,
-k 是以下的缩写:
但是,我们不会在计算期望时执行积分。我们对 qi 的选择使我们能够简化 ELBO 最大化中的许多计算。让我们更详细地介绍一下。
在 LDA 中,q 近似为:
其中 θ 和 z 分别由 γ 和 φ 建模。我们的计算涉及:
- 将 ELBO 扩展到单个变量
- 计算预期值
- 优化 ELBO
展开 ELBO
使用图形模型和链式规则,我们将ELBO扩展为:
计算预期值
我们不想用细节让您不知所措。因此,我们仅演示如何仅计算第一个项的期望。首先,θ 由参数为 α 的狄利克雷分布建模。
接下来,我们将计算其期望值 w.r.t. q。
这里没有证明,E[log θi] 可以直接从γ计算出来。
我们深思熟虑地选择 q,通常使用基于问题陈述中隐藏变量属性的已知分布。数学家已经分析解决了这些期望表达式。我们甚至不担心归一化因素。
优化 ELBO
在我们扩展 ELBO 中所有剩余的项后,我们可以将其区分为 w.r.t. γi(γ 中的第 i 个参数)和φ ni(第 n个单词中的第 i个参数)。 通过将导数设置为零,我们找到了γi的最佳解:
φni 的最佳解决方案将是:
由于γ和φ ni之间存在依赖关系,我们将以交替的步骤迭代优化参数。
Source
以下是概述。对于其余的文章,我们将介绍变分推理、证明和详细示例中的一些主要设计决策。
三、KL-背离
为了找到q,我们将问题变成优化问题。我们计算 q 的最佳参数,以最小化目标 p* 的反向 KL 发散。
如前所述,KL-发散不是对称的。q的最优解只有在q复杂到足以对p进行建模时,KL(p,q)和KL(q,p)的最优解才会相同。这就提出了一个重要的问题,即当KL-发散KL(p,q)与p的期望更匹配时,为什么使用反向KL-散度KL(q,p)。例如,当使用高斯分布对蓝色双峰分布进行建模时,反向KL散度解将是图中的红色曲线(b)或(c)。两种解决方案仅涵盖一种模式。
源
但是,(a) 中的 KL 散度解将覆盖大部分原始分布,其均值将与 p* 的均值匹配。
矩(包括均值和方差)描述了分布。KL-散度解是力矩投影(m-投影)。它将 q 与 p 的矩匹配。如果我们匹配所有矩参数,它们将完全相同。如果 q 使用指数分布族,我们可以使用 KL-散度将 q 的矩与 p* 精确匹配。这里没有太多解释,他们预期的足够统计数据将匹配。
(即 p=q)反向KL散度是一种信息投影(i-投影),不一定产生正确的时刻。由此判断,我们可以得出结论,m投影是优越的。但是,如果一个机制可以完全匹配p*,那么这样的机制也需要完全理解p*,这首先是困难的。所以听起来并不像它可能的那样好。
在变分推理中,使用 i 投影代替。为了证明我们的选择是合理的,让我们提出一些我们想要遵循的约束。首先,我们要避免分区函数的计算,计算困难。其次,我们希望避免计算p(z),因为我们需要分区函数来计算它。因此,让我们为 p 定义一个新术语,即非规范化分布,它将分区函数分开。
让我们将新定义代入反向KL背离。
Z 不会改变 w.r.t. q。当我们最小化反向KL发散时,可以忽略它。
这是个好消息。在图形模型中,非规范化的 p 是使用因子明确定义的。它们易于计算,并且 R.H.S. 中的目标不需要任何规范化。使用反向KL散度是一个很好的折衷方案,即使在某些情况下它可能并不完美。对于 q 与 p* 相比过于简单,结果可能会造成伤害。然而,变异推断通常显示出良好的经验结果。接下来,让我们看看如何优化反向KL发散。
四、证据下限
让我们在下面介绍凸函数 f 和称为证据下界 (ELBO) 的项的詹森不等式

ELBO 实际上是在最后一步中对凹函数应用詹森不等式后的证据的下限(log p(x))。
从源代码修改
ELBO与KL背离有关:
从源代码修改
现在让 Z 成为边际 p(x)。不要将 Z 与隐藏变量 z 混淆。不幸的是,我们需要用大写字母重载符号,因为 Z 在其他文献中经常使用。
Z 不会改变我们对 q 的建模方式。所以从优化 q 的角度来看,log Z 是一个常数。
因此,最小化KL发散度将与最大化ELBO相同。直观地说,给定任何分布 q,ELBO 始终是 log Z 的下限。但是,当 q 等于 p* 时,差距减小到零。因此,最大化ELBO将KL发散度降低到零。
通过最大化证据下限ELBO,我们最小化了两个数据分布的差异。
让我们将 ELBO 概括为
其中 Z 现在是一般归一化因子。
同样,如上所示,最大化ELBO与最小化KL散度相同,因为Z不会因我们对q进行建模的方式而变化。
这比KL背离带来了一个主要优势。ELBO 适用于归一化和非归一化分布,无需计算常规 KL 散度定义所需的 Z。
ELBO 和图形模型(可选)
让我们演示如何使用图形模型在 ELBO 中计算非归一化分布。联合概率分布可以通过马尔可夫随机场建模为:
我们将ELBO中的非规范化p替换为上面φ因子。
因此,最小化KL发散等效于最小化吉布斯自由能。我们称之为自由能,因为它是我们可以通过改变配置来操纵的能量的一部分。如果我们使用能量模型扩展模型,则可以进一步扩展此模型。
五、平均场变分推理
(信用:证明和方程起源于这里。
不要太快开心。我们错过了变分推理中重要而困难的一步。q的选择是什么?当 q 包含多个变量时,即 q(z) = q(z₁, z₂, z₃, ...),这可能非常困难。为了进一步降低复杂性,平均场变分推理做出了一个大胆的假设,即分布可以分解为分布,每个分布仅涉及一个隐藏变量。
然后,我们根据问题使用可处理的分布对每个分布进行建模。我们选择的分布将易于分析。例如,如果 z₁ 是多项式,我们使用多项式分布对其进行建模。如前所述,许多隐藏变量相互依赖。因此,我们将使用坐标下降来优化它。我们将隐藏变量分组为每个包含自变量的组。我们交替旋转和优化每组变量,直到解决方案收敛。
所以最后一个难题是如何在每个迭代步骤中优化qi(zi)。我们将首先介绍几个概念。当 x 不依赖于 z 时,概率链式规则可以写成如下:
其次,由于我们将q(z)建模为独立分量qi(zi),我们可以将熵建模为单个熵的总和。
有了这些信息,我们扩展了ELBO
到
zj 在 z 中的排序是非常随意的。在下面的等式中,我们使 zk 成为最后一个元素。并将与 z 无关的所有内容分组到一个常量中。因此,等式变为
我们进一步删除与zk无关的项,然后以积分形式表示。
我们取导数并将其设置为零以找到优化的分布 q(zk)。
最佳解决方案是
所有不断吸收并转化为Z'。我们可以用贝叶定理扩展分子。同样,相应的分母将与 zk 无关,因此被吸收为归一化因子。
这与我们在概述部分得到的等式相同。
还有其他方法可以找到优化的 q。让我们把所有内容都放在MRF的上下文中。如前所述,我们的目标是
让我们用 q(x) 将其扩展为 q(x₁) q(x₂) q(x₃) ...
这个方程可以用类似于MAP推理的线性代数来解决。但是我们不会在这里详细说明解决方案。
六、回顾
我们知道分布 p 的方程。但是分析或操纵它是令人讨厌的。
因此,根据观察结果,我们将为每个单独的模型参数使用可处理的 qi 对 p 进行建模。例如
为了最小化 p 和 q 之间的差异,我们最大化下面的 ELBO。
在每个迭代步骤中,相应模型参数 zj 的最佳解为:
由于每个q都被选择为易于处理的,因此可以通过分析方式找到期望值或归一化因子(如果需要),并且非常简单。
七、示例
(图片来源:这个例子和一些方程都来自这里。
让我们用一个例子来演示变化推断。考虑下面的分布 p(x):
其中μ(平均值)和τ(精度)分别由高斯分布和伽马分布建模。因此,让我们用 q(μ, τ) 近似 p(x, μ, τ)。通过方差推断,我们可以从数据中学习这两个参数。每次迭代中 μ 和 τ 的最优值将满足
因此,让我们首先用链式规则扩展 p(x, μ, τ),然后从问题定义中扩展 p 的定义来评估它。
我们的下一个任务是使用下面的平均场变分推理通过 q 近似 p。
现在,应用平均场变化推断,我们得到:
对数 q 是二次的。所以q是高斯分布的。
我们的下一个任务是将上面的方程与高斯定义进行匹配,以找到参数 μ 和 τ (τ ⁻¹ = σ²)。
因此,μ 和 τ 是:
如前所述,计算归一化 Z 通常很困难,但对于这些众所周知的分布来说并非如此。如果需要,可以通过分布参数计算归一化因子。我们需要专注于查找这些参数。
我们在计算日志 q(τ) 时重复相同的过程。
τ 是伽马分布,因为上面的分布仅依赖于 τ 和 对数 τ。 伽马分布的相应参数 a 和 b 为:
现在,我们有两个可处理的分布,我们希望找到它们的参数μ和τ。
同样,让我们将一些术语重写为期望表单。
如前所述,数学已经通过分析解决了这些期望项。我们甚至懒得计算任何归一化因子。
μ和 a 可以立即解决。但是 τ 依赖于 b,b 依赖于 τ。
因此,我们将交替步骤迭代地解决它们。
- 将 τn 初始化为某个任意值。
- 用上面的等式求解 bn。
- 用上面的方程求解 τn。
- 重复最后两个步骤,直到值收敛。
八、抽样与变分推理
抽样方法存在一个主要缺点。我们不知道目前的采样解决方案与实际情况有多远。我们希望,如果我们进行足够的采样,解决方案是接近的,但没有定量测量。为了测量这样的距离,我们需要一个目标函数。由于变分推理被表述为优化问题,因此我们确实对进展有一定的指示。但是,变分推理近似于解,而不是找到确切的解。事实上,我们的解决方案不太可能是准确的。
相关文章:

【机器学习】 贝叶斯理论的变分推理
许志永 一、说明 贝叶斯原理,站在概率角度上似乎容易解释,但站在函数立场上就不那么容易了;然而,在高端数学模型中,必须要在函数和集合立场上有一套完整的概念,其迭代和运算才能有坚定的理论基础。 二、贝叶…...

Flink之RedisSink
在Flink开发中经常会有将数据写入到redis的需求,但是Flink官方并没有对应的扩展包,这个时候需要我们自己编译对应的jar资源,这个时候就用到了bahir,barhir是apahce的开源项目,是专门给spark和flink提供扩展包使用的,bahir官网,这篇文章就介绍下如何自己编译RedisSink扩展包. 下…...
STM32CubeMx学习与K210串口通信+识别橘色色块——点亮小灯
K210模块的串口发送代码 引入模块 import sensor, image,time,lcd,utime import KPU as kpu import gc, sys from fpioa_manager import fm from machine import UART 锁定引脚 和 申明串口 fm.register(9, fm.fpioa.UART1_TX, forceTrue) fm.register(10, fm.fpioa.UART1_R…...

睿讯微带你深度了解汽车交流充电桩
这几年随着新能源汽车的普及,充电桩也越来越多的出现在我们的视野中。新能源纯电汽车就好比一种大号的电子产品,而充电桩则是它不可缺少的子系统,是新能源车主们的必要选择。 汽车充电桩分为直流和交流两种,2022年底全国公共充电桩…...

word怎么压缩到10m以下?文件压缩很简单
Word文档是我们工作和学习中一直需要用到的,但有时候Word文档体积过大,给存储和传输带来了不便,这时候我们可以做的就压缩Word。 通常情况下,影响Word文档过大的主要因素主要是图片过多、音视频插入、格式的设置、文字内容的增多以…...

I.MX6ULL_Linux_驱动篇(43)linux通用LED驱动
前面我们都是自己编写 LED 灯驱动,其实像 LED 灯这样非常基础的设备驱动, Linux 内核已经集成了。 Linux 内核的 LED 灯驱动采用 platform 框架,因此我们只需要按照要求在设备树文件中添加相应的 LED 节点即可,本章我们就来学习如…...
OPTEE之sonarlint静态代码分析实战二——optee_client
ATF(TF-A)/OPTEE之静态代码分析汇总 目录 一、optee_client源码下载及分析 二、扫描类型归类...
c++调用ffmpeg api将视频文件内容进行udp推流
代码及工程见https://download.csdn.net/download/daqinzl/88156926 开发工具:visual studio 2019 播放,采用ffmpeg工具集里的ffplay.exe, 执行命令 ffplay udp://238.1.1.10:6016 主要代码如下: #include "pch.h" #include <iostream&g…...

助力工业物联网,工业大数据之服务域:油站主题分析【二十六】
文章目录 07:服务域:油站主题分析08:服务域:油站主题实现 07:服务域:油站主题分析 目标:掌握油站主题的需求分析 路径 step1:需求step2:分析 实施 需求:统计…...

MySql之索引
MySql之索引 1.索引概述 MySql官方对索引的定义为:索引是帮助MySql高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这样就可以在这些数据结构上实现高级查找…...
adb调试
连不上 adb 如果还遇到5037端口被占用的问题,就找出进程号用taskkill命令杀死该进程即可 1、查找5037端口对应的进程:netstat -ano|findstr 5037 2、杀死该进程:taskkill /F /PID pid 连接unity profiler 打开发包,并安装在手机…...

ElasticSearch_学习笔记
一、初始elasticsearch 什么是elasticsearch? 一个开源的分布式搜索引擎,可以用来时限搜素、日志统计、分析、系统监控等功能。什么是elasitc stack(ELK)? 是以elasticsearch为核心的技术栈,包括 beats、L…...

Portraiture 4.0.3 for windows/Mac简体中文版(ps人像磨皮滤镜插件)
Imagenomic Portraiture系列插件作为PS磨皮美白必备插件,可以说是最强,今天它更新到了4.0.3版本。但是全网都没有汉化包,经过几个日夜汉化,终于汉化完成可能是全网首个Portraiture 4的汉化包,请大家体验,有…...

Java精品项目源码第152期火车票预订系统(编号M062)
Java精品项目源码第152期火车票预订系统(编号M062) 大家好,小辰今天给大家介绍一个基于Spring Springboot MyBatis实现的火车票预订系统,演示视频文章末尾公众号对号查询观看即可 文章目录 Java精品项目源码第152期火车票预订系…...
嵌入式软件C/C++(技术面试题)
一,网络 1,TCP窗口机制 TCP(传输控制协议)是一种可靠的、面向连接的传输层协议。其中的窗口机制是TCP协议中的一项重要功能,用于控制数据在发送和接收之间的流程。 TCP窗口机制是利用滑动窗口的方式来进行拥塞控制和…...

Idea中侧面栏不见了,如何设置?
一、打开idea点击File然后点击Setting 二、点击Appearance,然后划到最下面,勾选Show tool windows bars和Side-by-side layout on the left 三、侧面栏目正常显示...
构建高效读写分离MySQL主从复制架构,应对高可用挑战!
前言 在现代数据库架构中,MySQL主从复制技术扮演着重要角色。它不仅可以提升数据库性能和可扩展性,还赋予系统卓越的高可用性和灾难恢复能力。本文将深入剖析MySQL主从复制的内部机制,同时通过一个实际案例,展示其在实际场景中的…...

Stable Diffusion系列课程二:ControlNet
AUTOMATIC1111/stable-diffusion-webui参考B站Nenly视频《零基础学会Stable Diffusion》、视频课件推荐网站:stable-diffusion-art、Civitai(魔法) 、libilibi、AI艺术天堂推荐Stable Diffusion整合资料: NovelAI资源整合、《AI绘…...

【css】使用float实现水平导航栏
该实例使用float 浮动实现元素浮动在水平方向,从而实现水平导航栏效果。 overflow: hidden:当不给父级元素设置高度的时候,其内部元素浮动后会导致下面的元素顶上去,这是因为子元素浮动后,子元素脱离标准流࿰…...

IDEA超强XSD文件编辑插件-XSD / WSDL Visualizer
前言 XSD / WSDL Visualizer可以简化XML架构定义(XSD)和WSDL文件编辑过程; 通过使用与IntelliJ无缝集成的可视化编辑器,转换处理XSD和WSDL文件的方式。告别导航复杂和难以阅读的代码的挫败感,迎接流线型和直观的体验。 插件安装 在线安装 IntelliJ IDE…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...