22、期望最大化算法与KL散度及狄利克雷先验平滑的深入解析

期望最大化算法与KL散度及狄利克雷先验平滑的深入解析

1. 期望最大化(EM)算法概述

期望最大化(EM)算法是一种用于最大似然估计的通用算法,适用于数据“不完整”或似然函数包含潜在变量的情况。“不完整数据”和“潜在变量”的概念密切相关:当存在潜在变量时,由于无法观测到其值,可将数据视为不完整;反之,当数据不完整时,通常也能为缺失数据关联一些潜在变量。在语言建模中,EM算法常用于估计混合模型的参数,其中数据点的具体生成组件模型是未知的。

1.1 EM算法的基本步骤

EM算法首先随机为所有待估计参数赋值,然后迭代地交替进行两个步骤:
- 期望步骤(E-step) :根据当前参数设置和观测到的(不完整)数据,计算潜在变量(即“隐藏变量”)的条件分布,进而计算完整数据的期望似然(即Q函数)。
- 最大化步骤(M-step) :通过最大化Q函数来重新估计所有参数。

重复这两个步骤,直到似然收敛到局部最大值。直观地说,EM算法通过“猜测”隐藏变量的值来迭代地扩充数据,并假设这些猜测值为真实值来重新估计参数。

1.2 EM算法的局限性与解决策略

EM算法是一种爬山法,只能保证收敛到局部最大值。当存在多个最大值时,是否能达到全局最大值取决于初始点的选择。若从“正确的山峰”开始,就有可能找到全局最大值,但当存在多个局部最大值时,很难确定“正确的山峰”。常用的解决策略有两种:
- 尝试多个初始值 :尝试许多不同的初始值,选择收敛似然值最高的解。
- 使用简单模型确定初始值 :使用一个更简单的模型(理想情况下具有唯一的全局最大值)来为更复杂的模型确定初始值,以帮助定位全局最优解所在的大致区域。

2. 简单混合一元语言模型

2.1 模型假设

在混合模型反馈方法中,假设反馈文档 $F = {d_1, \ldots, d_k}$ 由一个包含两个多项分布组件模型的混合模型“生成”。一个组件模型是背景模型 $p(w | C)$,另一个是待估计的未知主题语言模型 $p(w | \theta_F)$。其目的是用 $p(w | C)$ 对 $F$ 中的常见(无区分性)单词进行建模,使主题模型 $\theta_F$ 能吸引更多具有区分性的内容承载词。

2.2 对数似然函数

该混合模型的反馈文档数据的对数似然函数为:
[
\log L(\theta_F) = \log p(F | \theta_F) = \sum_{i=1}^{k} \sum_{j=1}^{|d_i|} \log((1 - \lambda)p(d_{ij} | \theta_F) + \lambda p(d_{ij} | C))
]
其中,$d_{ij}$ 是文档 $d_i$ 中的第 $j$ 个单词,$|d_i|$ 是 $d_i$ 的长度,$\lambda$ 是一个表示反馈文档中“背景噪声”量的参数,需通过经验设置。假设 $\lambda$ 已知,目标是估计 $p(w | \theta_F)$。

2.3 最大似然估计

一种常见的估计 $\theta_F$ 的方法是最大似然(ML)估计器,即选择使 $F$ 的似然最大化的 $\theta_F$。估计的主题模型 $\hat{\theta} F$ 为:
[
\hat{\theta}_F = \arg \max
{\theta_F} L(\theta_F) = \arg \max_{\theta_F} \sum_{i=1}^{k} \sum_{j=1}^{|d_i|} \log((1 - \lambda)p(d_{ij} | \theta_F) + \lambda p(d_{ij} | C))
]

由于该函数涉及两个项之和的对数,通过拉格朗日乘数法很难得到简单的解析解,因此通常需要依赖数值算法。EM算法是其中一种自然且能保证收敛到局部最大值的方法,在这种情况下,也是全局最大值,因为似然函数可以证明具有唯一的最大值。

2.4 不完整数据与完整数据

EM算法的主要思想是用一些潜在变量“扩充”数据,使“完整”数据的似然函数更简单,便于找到最大值。原始数据被视为“不完整”数据。通过最大化完整数据似然的期望来最大化不完整数据的似然,因为完整数据似然包含隐藏变量,而原始不完整数据似然不包含。

在示例中,为每个单词 $w$ 的出现引入一个二元隐藏变量 $z$,用于指示该单词是由背景模型 $p(w | C)$ 还是主题模型 $p(w | \theta_F)$ “生成”。对于文档 $d_i$ 中的第 $j$ 个单词 $d_{ij}$,定义相应的变量 $z_{ij}$ 如下:
[
z_{ij} =
\begin{cases}
1, & \text{如果单词 } d_{ij} \text{ 来自背景模型} \
0, & \text{否则}
\end{cases}
]
假设完整数据不仅包含 $F$ 中的所有单词,还包含它们对应的 $z$ 值。完整数据的对数似然为:
[
L_c(\theta_F) = \log p(F, z | \theta_F) = \sum_{i=1}^{k} \sum_{j=1}^{|d_i|} [(1 - z_{ij}) \log((1 - \lambda)p(d_{ij} | \theta_F)) + z_{ij} \log(\lambda p(d_{ij} | C))]
]
注意 $L_c(\theta_F)$ 和 $L(\theta_F)$ 的区别:$L_c(\theta_F)$ 中的求和在对数之外,这是因为假设知道每个单词 $d_{ij}$ 是由哪个组件模型生成的。

一般来说,如果参数为 $\theta$,原始数据为 $X$,用隐藏变量 $H$ 扩充数据,则有 $p(X, H | \theta) = p(H | X, \theta)p(X | \theta)$,因此:
[
L_c(\theta) = \log p(X, H | \theta) = \log p(X | \theta) + \log p(H | X, \theta) = L(\theta) + \log p(H | X, \theta)
]

2.5 似然的下界

算法上,EM的基本思想是从参数值 $\theta^{(0)}$ 的初始猜测开始,然后迭代地寻找更好的参数值。假设当前参数估计为 $\theta^{(n)}$,目标是找到另一个 $\theta^{(n+1)}$ 来提高似然 $L(\theta)$。

考虑潜在更好的参数值 $\theta$ 处的似然与当前估计 $\theta^{(n)}$ 处的似然之差,并将其与完整似然的相应差值相关联:
[
L(\theta) - L(\theta^{(n)}) = L_c(\theta) - L_c(\theta^{(n)}) + \log \frac{p(H | X, \theta^{(n)})}{p(H | X, \theta)}
]
目标是最大化 $L(\theta) - L(\theta^{(n)})$,这等价于最大化 $L(\theta)$。对该方程关于隐藏变量在数据 $X$ 和当前参数估计 $\theta^{(n)}$ 下的条件分布 $p(H | X, \theta^{(n)})$ 取期望,得到:
[
L(\theta) - L(\theta^{(n)}) = \sum_{H} L_c(\theta)p(H | X, \theta^{(n)}) - \sum_{H} L_c(\theta^{(n)})p(H | X, \theta^{(n)}) + \sum_{H} p(H | X, \theta^{(n)}) \log \frac{p(H | X, \theta^{(n)})}{p(H | X, \theta)}
]
方程左边保持不变,因为变量 $H$ 不在其中出现。最后一项是 $p(H | X, \theta^{(n)})$ 和 $p(H | X, \theta)$ 的KL散度,始终非负。因此有:
[
L(\theta) - L(\theta^{(n)}) \geq \sum_{H} L_c(\theta)p(H | X, \theta^{(n)}) - \sum_{H} L_c(\theta^{(n)})p(H | X, \theta^{(n)})
]

[
L(\theta) \geq \sum_{H} L_c(\theta)p(H | X, \theta^{(n)}) + L(\theta^{(n)}) - \sum_{H} L_c(\theta^{(n)})p(H | X, \theta^{(n)})
]
从而得到原始似然函数的下界。EM算法的主要思想是最大化这个下界,以最大化原始(不完整)似然。注意,下界中的最后两项可以视为常数,因为它们不包含变量 $\theta$,所以下界本质上是第一项,即完整似然的期望,称为Q函数,记为 $Q(\theta; \theta^{(n)})$:
[
Q(\theta; \theta^{(n)}) = E_{p(H|X,\theta^{(n)})}[L_c(\theta)] = \sum_{H} L_c(\theta)p(H | X, \theta^{(n)})
]
对于我们的混合模型,Q函数为:
[
Q(\theta_F; \theta_F^{(n)}) = \sum_{z} L_c(\theta_F)p(z | F, \theta_F^{(n)}) = \sum_{i=1}^{k} \sum_{j=1}^{|d_i|} [p(z_{ij} = 0 | F, \theta_F^{(n)}) \log((1 - \lambda)p(d_{ij} | \theta_F)) + p(z_{ij} = 1 | F, \theta_F^{(n)}) \log(\lambda p(d_{ij} | C))]
]

2.6 EM算法的一般步骤

  • 初始化 :根据关于最优参数值可能位置的任何先验知识,随机或启发式地初始化 $\theta^{(0)}$。
  • 迭代更新 :通过交替进行以下两个步骤来迭代改进 $\theta$ 的估计:
  • E-step :计算 $Q(\theta; \theta^{(n)})$。
  • M-step :通过最大化Q函数重新估计 $\theta$:$\theta^{(n+1)} = \arg\max_{\theta} Q(\theta; \theta^{(n)})$。
  • 停止条件 :当似然 $L(\theta)$ 收敛时停止。

E-step的主要计算是计算 $p(H | X, \theta^{(n)})$,在我们的例子中,$p(z_{ij} = 1 | F, \theta_F^{(n)}) = \frac{\lambda p(d_{ij} | C)}{\lambda p(d_{ij} | C) + (1 - \lambda)p(d_{ij} | \theta_F^{(n)})}$,且 $p(z_{ij} = 0 | F, \theta_F^{(n)}) = 1 - p(z_{ij} = 1 | F, \theta_F^{(n)})$。M-step涉及最大化Q函数,在我们的例子中,可以使用拉格朗日乘数法找到解析解。

我们得到以下简单混合模型的EM更新公式:
[
p(z_w = 1 | F, \theta_F^{(n)}) = \frac{\lambda p(w | C)}{\lambda p(w | C) + (1 - \lambda)p(w | \theta_F^{(n)})} \quad \text{(E-step)}
]
[
p(w | \theta_F^{(n+1)}) = \frac{\sum_{i=1}^{k} (1 - p(z_w = 1 | F, \theta_F^{(n)}))c(w, d_i)}{\sum_{i=1}^{k} \sum_{w’} (1 - p(z_{w’} = 1 | F, \theta_F^{(n)}))c(w’, d_i)} \quad \text{(M-step)}
]

1.7 EM算法流程

graph TD;
    A[初始化参数θ<sup>(0)</sup>] --> B[迭代开始];
    B --> C[E-step: 计算Q(θ; θ<sup>(n)</sup>)];
    C --> D[M-step: 最大化Q函数得到θ<sup>(n+1)</sup>];
    D --> E{似然L(θ)是否收敛};
    E -- 否 --> C;
    E -- 是 --> F[结束迭代];

3. KL散度与狄利克雷先验平滑

3.1 KL散度的定义

给定两个概率质量函数 $p(x)$ 和 $q(x)$,$p$ 和 $q$ 之间的Kullback-Leibler散度(或相对熵)定义为:
[
D(p \parallel q) = \sum_{x} p(x) \log \frac{p(x)}{q(x)}
]
容易证明 $D(p \parallel q)$ 始终非负,且当且仅当 $p = q$ 时为零。尽管它不是分布之间的真正距离(因为它不对称且不满足三角不等式),但通常仍可将其视为分布之间的“距离”。

3.2 使用KL散度进行检索

假设查询 $q$ 由生成模型 $p(q | \theta_Q)$ 生成,文档 $d$ 由生成模型 $p(d | \theta_D)$ 生成。如果 $\hat{\theta} Q$ 和 $\hat{\theta}_D$ 分别是估计的查询和文档语言模型,则文档 $d$ 相对于查询 $q$ 的相关性值可以通过以下负KL散度函数来衡量:
[
-D(\hat{\theta}_Q \parallel \hat{\theta}_D) = \sum
{w} p(w | \hat{\theta} Q) \log p(w | \hat{\theta}_D) + (-\sum {w} p(w | \hat{\theta}_Q) \log p(w | \hat{\theta}_Q))
]
公式右边的第二项是与查询相关的常数,即查询模型 $\hat{\theta}_Q$ 的熵,在文档排名时可以忽略。一般来说,上述公式的计算涉及对所有根据 $p(w | \hat{\theta}_Q)$ 具有非零概率的单词求和。但当 $\hat{\theta}_D$ 基于某些通用平滑方法时,计算只涉及对那些根据 $p(w | \hat{\theta}_Q)$ 具有非零概率且在文档 $d$ 中出现的单词求和,这种求和可以使用倒排索引更高效地计算。

3.3 通用平滑方案

假设通用平滑方案如下:
[
p(w | \hat{\theta} D) =
\begin{cases}
p_s(w | d), & \text{如果单词 } w \text{ 被观察到} \
\alpha_d p(w | C), & \text{否则}
\end{cases}
]
其中,$p_s(w | d)$ 是文档中观察到的单词的平滑概率,$p(w | C)$ 是集合语言模型,$\alpha_d$ 是控制分配给未观察到单词的概率质量的系数,使得所有概率之和为1。一般来说,$\alpha_d$ 可能依赖于文档 $d$。如果 $p_s(w | d)$ 已知,则有:
[
\alpha = \frac{1 - \sum
{w:c(w;d)>0} p_s(w | d)}{1 - \sum_{w:c(w;d)>0} p(w | C)}
]
因此,不同的平滑方法本质上在于 $p_s(w | d)$ 的选择。集合语言模型 $p(w | C)$ 通常通过 $\frac{c(w,C)}{\sum_{w’} c(w’,C)}$ 或平滑版本 $\frac{c(w,C)+1}{V + \sum_{w’} c(w’,C)}$ 来估计,其中 $V$ 是估计的词汇表大小。平滑版本的一个优点是不会给任何项赋予零概率,但在检索性能方面,这两个版本没有显著差异。

在这种平滑方案下,KL散度评分公式本质上为:
[
\sum_{w} p(w | \hat{\theta} Q) \log p(w | \hat{\theta}_D) = \left[ \sum {w:c(w;d)>0,p(w|\hat{\theta}_Q)>0} p(w | \hat{\theta}_Q) \log \frac{p_s(w | d)}{\alpha_d p(w | C)} \right] + \log \alpha_d
]
评分现在基于对所有根据 $p(w | \hat{\theta}_Q)$ 具有非零概率且在文档中出现的项的求和,即所有“匹配”项。

3.4 使用狄利克雷先验平滑

狄利克雷先验平滑是一种遵循上述通用平滑方案的特定平滑方法。具体来说:
[
p_s(w | d) = \frac{c(w, d) + \mu p(w | C)}{|d| + \mu}
]
[
\alpha_d = \frac{\mu}{\mu + |d|}
]
将这些代入KL散度评分公式,得到使用狄利克雷先验平滑的KL散度评分公式为:
[
\left[ \sum_{w:c(w;d)>0,p(w|\hat{\theta}_Q)>0} p(w | \hat{\theta}_Q) \log(1 + \frac{c(w, d)}{\mu p(w | C)}) \right] + \log \frac{\mu}{\mu + |d|}
]

3.5 计算查询模型 $p(w | \hat{\theta}_Q)$

计算 $p(w | \hat{\theta} Q)$ 有以下两种方法:
- 最大似然估计 :使用查询文本作为证据,通过最大似然估计器估计该概率,得到 $p
{ml}(w | \hat{\theta} Q) = \frac{c(w, q)}{|q|}$。使用这个估计值,KL散度评分公式本质上与查询似然检索公式相同。
- 利用反馈文档 :将简单的 $p
{ml}(w | \hat{\theta} Q)$ 与基于反馈文档估计的反馈模型 $p(w | \theta_F)$ 进行插值,即 $p(w | \hat{\theta}_Q) = (1 - \alpha)p {ml}(w | \hat{\theta}_Q) + \alpha p(w | \theta_F)$,其中 $\alpha$ 是一个需要通过经验设置的参数。

要估计 $p(w | \theta_F)$,可以假设反馈文档的以下双组件混合模型:
[
\log p(F | \theta_F) = \sum_{i=1}^{k} \sum_{w} c(w; d_i) \log((1 - \lambda)p(w | \theta_F) + \lambda p(w | C))
]
其中,$F = {d_1, \ldots, d_k}$ 是反馈文档集,$\lambda$ 是另一个需要通过经验设置的参数,表示反馈文档中的“背景噪声”量。给定 $\lambda$、反馈文档 $F$ 和集合语言模型 $p(w | C)$,可以使用EM算法计算 $\theta_F$ 的最大似然估计。

3.6 KL散度检索流程

graph TD;
    A[计算查询模型p(w | θQ)] --> B[选择平滑方法计算p(w | θD)];
    B --> C[计算KL散度评分];
    C --> D[对文档进行排名];

综上所述,EM算法和KL散度及狄利克雷先验平滑在语言建模和信息检索中都具有重要的应用价值。EM算法通过迭代的方式处理不完整数据,能够有效地估计混合模型的参数;而KL散度和狄利克雷先验平滑则为文档与查询的相关性评估提供了一种有效的方法,通过合理的平滑处理,可以提高检索性能。在实际应用中,可以根据具体的问题和数据特点选择合适的算法和方法。

4. 方法对比与应用场景分析

4.1 EM算法与其他参数估计方法对比

方法 优点 缺点 适用场景
EM算法 能处理不完整数据和潜在变量,保证收敛到局部最大值 可能陷入局部最优,计算复杂度较高 数据存在缺失值、需要估计混合模型参数的场景
最大似然估计(无EM) 原理简单,直观易懂 难以处理复杂的似然函数,可能无法得到解析解 似然函数形式简单,数据完整的场景
拉格朗日乘数法 可得到解析解 对函数形式要求高,不适用于复杂的对数和形式的似然函数 目标函数和约束条件简单的优化问题

4.2 KL散度与其他相关性度量方法对比

方法 优点 缺点 适用场景
KL散度 考虑了分布差异,可用于衡量文档与查询的相关性 不对称,不满足三角不等式 基于概率分布模型的信息检索场景
余弦相似度 计算简单,适用于高维向量空间 未考虑向量的概率分布信息 文本向量表示的相似度计算场景
欧氏距离 直观反映向量间的距离 对向量的尺度敏感 数据具有明确的几何意义,需要计算距离的场景

4.3 不同平滑方法的应用场景

平滑方法 特点 适用场景
狄利克雷先验平滑 考虑了集合语言模型,对未观察到的单词进行合理处理 数据稀疏,需要对未出现单词进行平滑处理的场景
通用平滑方案(自定义 $p_s(w d)$) 灵活性高,可根据具体需求调整

5. 实践案例:基于EM算法和KL散度的信息检索系统

5.1 系统架构

graph LR;
    A[数据收集] --> B[数据预处理];
    B --> C[模型训练];
    C --> D[查询处理];
    D --> E[文档排名];
    E --> F[结果展示];
    G[反馈文档] --> C;

5.2 详细步骤

  1. 数据收集 :收集文档集合和查询数据。
  2. 数据预处理 :对文档和查询进行分词、去除停用词等操作,构建词汇表。
  3. 模型训练
    • 使用EM算法估计主题模型 $p(w | \theta_F)$,具体步骤如下:
      • 初始化参数 $\theta^{(0)}$。
      • 迭代进行E-step和M-step:
        • E-step:计算 $p(z_{ij} = 1 | F, \theta_F^{(n)}) = \frac{\lambda p(d_{ij} | C)}{\lambda p(d_{ij} | C) + (1 - \lambda)p(d_{ij} | \theta_F^{(n)})}$ 。
        • M-step:更新 $p(w | \theta_F^{(n+1)}) = \frac{\sum_{i=1}^{k} (1 - p(z_w = 1 | F, \theta_F^{(n)}))c(w, d_i)}{\sum_{i=1}^{k} \sum_{w’} (1 - p(z_{w’} = 1 | F, \theta_F^{(n)}))c(w’, d_i)}$ 。
        • 直到似然 $L(\theta)$ 收敛。
    • 估计集合语言模型 $p(w | C)$,可以使用 $\frac{c(w,C)}{\sum_{w’} c(w’,C)}$ 或平滑版本 $\frac{c(w,C)+1}{V + \sum_{w’} c(w’,C)}$ 。
  4. 查询处理
    • 计算查询模型 $p(w | \hat{\theta} Q)$,可以选择最大似然估计 $p {ml}(w | \hat{\theta} Q) = \frac{c(w, q)}{|q|}$ 或利用反馈文档进行插值 $p(w | \hat{\theta}_Q) = (1 - \alpha)p {ml}(w | \hat{\theta}_Q) + \alpha p(w | \theta_F)$ 。
    • 选择平滑方法计算文档模型 $p(w | \hat{\theta}_D)$,如狄利克雷先验平滑 $p_s(w | d) = \frac{c(w, d) + \mu p(w | C)}{|d| + \mu}$ ,$\alpha_d = \frac{\mu}{\mu + |d|}$ 。
  5. 文档排名
    • 计算KL散度评分 $-D(\hat{\theta} Q \parallel \hat{\theta}_D) = \sum {w} p(w | \hat{\theta} Q) \log p(w | \hat{\theta}_D) + (-\sum {w} p(w | \hat{\theta}_Q) \log p(w | \hat{\theta}_Q))$ ,忽略查询模型的熵项。
    • 根据评分对文档进行排名。
  6. 结果展示 :将排名后的文档展示给用户。

5.3 优化建议

  • 参数调优 :通过交叉验证等方法,调整 $\lambda$、$\mu$、$\alpha$ 等参数,以提高系统的性能。
  • 并行计算 :在EM算法的迭代过程中,可以使用并行计算来加速计算速度。
  • 增量更新 :当有新的文档或查询加入时,采用增量更新的方式更新模型,避免重新训练整个模型。

6. 总结与展望

6.1 总结

本文详细介绍了EM算法、KL散度和狄利克雷先验平滑的原理、应用和实践案例。EM算法通过迭代的方式处理不完整数据,能够有效地估计混合模型的参数;KL散度为衡量文档与查询的相关性提供了一种有效的方法;狄利克雷先验平滑则对数据稀疏问题进行了合理处理。在实际应用中,这些方法可以结合使用,构建高效的信息检索系统。

6.2 展望

  • 深度学习融合 :将EM算法、KL散度和狄利克雷先验平滑与深度学习模型相结合,如神经网络、Transformer等,以提高信息检索的性能和效果。
  • 多模态信息处理 :随着多模态数据的不断增加,研究如何将这些方法应用于图像、音频、视频等多模态信息的检索和处理。
  • 自适应平滑方法 :开发自适应的平滑方法,根据数据的特点和查询的需求自动调整平滑参数,提高系统的适应性和灵活性。

通过不断的研究和实践,这些方法将在信息检索、自然语言处理等领域发挥更加重要的作用。

### PPO算法中的KL实现 PPO(Proximal Policy Optimization)是一种强化学习算法,其核心目标是在更新策略时不偏离旧策略太远。为了控制新旧策略之间的差异,可以引入KL作为约束条件之一[^1]。 尽管PPO-clip版本通过裁剪机制来间接限制策略的变化,但在某些情况下仍然可以通过显式计算KL来进行更精确的约束。以下是基于TensorFlow框架的一个简单示例代码片段,展示如何在PPO中实现KL: #### KL计算代码示例 ```python import tensorflow as tf from scipy.stats import norm def kl_divergence(old_probs, new_probs): """ 计算两个概率分布之间的KL。 参数: old_probs (list): 旧策略的概率分布。 new_probs (list): 新策略的概率分布。 返回: float: KL值。 """ epsilon = 1e-8 # 防止log(0) old_pdf = norm.pdf(old_probs) new_pdf = norm.pdf(new_probs) ratio = new_pdf / (old_pdf + epsilon) log_ratio = tf.math.log(ratio + epsilon) kl = tf.reduce_mean(old_pdf * log_ratio) return kl # 假设这是模型预测的动作概率 old_action_probabilities = [0.7, 0.3] new_action_probabilities = [0.6, 0.4] kl_value = kl_divergence(old_action_probabilities, new_action_probabilities) print(f"KL Divergence Value: {kl_value.numpy()}") ``` 上述代码定义了一个函数`kl_divergence`用于计算两组动作概率分布之间的KL。该函数接受旧策略和新策略的动作概率分布作为输入参数,并返回它们之间的KL值[^2]。 需要注意的是,在实际应用中,通常会将KL作为一个辅助指标或者正则化项加入到损失函数中,从而进一步稳定训练过程。 ### 结合PPO算法的完整流程 当我们将KL融入PPO算法时,可以在每次迭代过程中动态监控KL变化情况。一旦发现KL超过预设阈值,则提前终止当前轮次的梯下降操作。这种做法有助于防止策略过调整而导致性能退化。 ```python METHOD = {'epsilon': 0.2} # 裁剪范围超参设置 MAX_KL = 0.01 # KL最大允许值 for epoch in range(EPOCHS): with tf.GradientTape() as tape: surr = ratio * tfadv clipped_surr = tf.clip_by_value( ratio, 1. - METHOD['epsilon'], 1. + METHOD['epsilon'] ) * tfadv actor_loss = -tf.reduce_mean(tf.minimum(surr, clipped_surr)) # 添加KL惩罚项至总损失 kl_penalty = kl_divergence(old_policy_distribution, current_policy_distribution) total_loss = actor_loss + LAMBDA * kl_penalty grads = tape.gradient(total_loss, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables)) # 如果KL过大,则停止优化 if kl_penalty > MAX_KL: break ``` 此部分展示了如何将KL纳入整个PPO训练循环之中,同时提供了关于何时中断优化的具体逻辑判断依据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值