Skip to main content

生成模型中的采样技巧

参考资料:Sampling for Text Generation

引言

生成模型的核心任务是学习数据的概率分布,并能够生成新的样本。采样(Sampling)是模型从其内部概率分布中生成新数据的关键步骤。采样不仅决定了生成数据的质量和多样性,还影响着模型对潜在空间的探索方式。

没有合适的采样策略,生成的结果可能会过于保守(总是生成相似的内容)或者过于随机(生成无意义的数据)。

为什么需要采样?

生成模型通常通过学习训练数据中的复杂概率分布来工作。这些模型试图捕捉到数据之间的统计规律,并以此为基础生成新的样本。我们通常希望模型能够捕捉到数据的复杂分布,并能够生成新的、合理的样本。如果不使用采样,模型可能会倾向于生成最常见的样本,这会导致生成的样本缺乏多样性,无法覆盖数据分布的全貌。直接从模型的概率分布中采样往往会带来一些问题,例如:

  • 确定性解:模型可能倾向于给出单一最优解,这会导致生成结果缺乏多样性。
  • 过拟合:模型可能过度拟合训练数据,从而在生成时重复相同的模式。
  • 非典型样本:由于概率分布的长尾效应,直接采样可能会生成非常罕见且不符合实际的样本。

长尾效应

概率的长尾效应是指在概率分布中,某些事件虽然发生的概率非常小,但在分布的尾部仍存在一定的非零概率。在语言模型和其他生成模型中,长尾效应同样存在,指的是模型可能为一些非常罕见的词汇或序列分配非零的概率。

在生成模型中,长尾效应可能导致的问题在于模型有时会生成那些在训练数据集中很少见甚至从未出现过的样本。这是因为模型试图捕获训练数据中的所有统计特性,包括那些稀有的事件。在训练过程中,即使这些稀有事件只出现了一次,模型也可能学会为它们分配一定的概率。

当我们在生成过程中直接从模型的概率分布中采样时,如果模型的输出分布具有长尾特性,那么即使是那些概率很小的事件也可能被选中。例如,在文本生成中,模型可能会生成一些非常罕见的词汇组合,这些组合在语义上可能并不合理,或者语法上不符合常规。

采样技巧

为了克服上述问题,研究人员开发了多种采样技巧,旨在控制生成过程中的随机性和多样性。

温度(Temperature)

温度是一种调整模型输出多样性的方法,它通过改变模型预测概率分布的形状来实现。较低的温度值会使得概率分布更加尖锐,而较高的温度值则会让分布变得更加平坦。

假设模型的原始概率分布为 p(xi)p(x_i),那么通过温度调整后的概率分布可以表示为:

p(xi)=exp(log(p(xi))T)jexp(log(p(xj))T)p'(x_i) = \frac{\exp\left(\frac{\log(p(x_i))}{T}\right)}{\sum_j \exp\left(\frac{\log(p(x_j))}{T}\right)}
  • p(xi)p(x_i):表示原始模型对第 ii 个选项的预测概率。
  • TT:温度参数,一般是一个正数。

T>1T > 1 时,分布变得更平坦,这意味着模型更倾向于生成概率较低但仍然合理的样本;当 T<1T < 1 时,分布变得更尖锐,模型倾向于生成高概率的样本,这会降低生成内容的多样性。

Top-k 采样

Top-k 采样是一种减少模型输出中低概率事件的方法。这种方法仅考虑最有可能发生的 k 个候选结果进行采样,从而避免生成那些极不可能出现的样本。

Top-k 采样算法从输出概率分布中选择概率最高的前 k 个候选项,并在这些候选项中进行随机采样。具体步骤如下:

  1. 获取模型输出的概率分布 P={p1,p2,,pV}P=\left\{p_1, p_2, \ldots, p_V\right\} ,其中 VV 是词汇表的大小

  2. 选择概率最高的前 k 个候选项。设这些候选项的集合为 CkC_k

  3. 对于 CkC_k 中的每个候选项,重新归一化它们的概率,使得这些候选项的概率和为 1

  4. 从归一化后的概率分布中随机采样一个候选项。

公式化表示如下:

Ck={wipi is among the top k probabilities in P}C_k=\left\{w_i \mid p_i \text{ is among the top k probabilities in }P\right\} pi=piwjCkpj for wiCkp_i^{\prime}=\frac{p_i}{\sum_{w_j \in C_k} p_j} \text { for } w_i \in C_k

其中, pip_i^{\prime}​ 是重新归一化后的概率。

Top-p 采样(Nucleus Sampling)

Top-p 采样,也称为 Nucleus 采样,是一种更加灵活的采样方法,它不是固定选择前 k 个元素,而是选择累积概率达到某个阈值 p 的最小集合进行采样。

  1. 获取模型输出的概率分布 P={p1,p2,,pV}P=\left\{p_1, p_2, \ldots, p_V\right\} ,其中 VV 是词汇表的大小
  2. 将概率分布按从高到低排序,得到排序后的候选项和对应的概率 {(w1,p1),(w2,p2),,(wV,pV)}\left\{\left(w_1, p_1\right),\left(w_2, p_2\right), \ldots,\left(w_V, p_V\right)\right\} ,其中 p1p2pVp_1 \geq p_2 \geq \ldots \geq p_V
  3. 找到最小的 k,使得前 k 个候选项的概率和大于等于阈值 pp,设这些候选项的集合为 CpC_p
  4. 对于 CpC_p 中的每个候选项,重新归一化它们的概率,使得这些候选项的概率和为 1
  5. 从归一化后的概率分布中随机采样一个候选项
Cp={wij=1ipjp}C_p=\left\{w_i \mid \sum_{j=1}^i p_j \geq p\right\} pi=piwjCppj for wiCpp_i^{\prime}=\frac{p_i}{\sum_{w_j \in C_p} p_j} \text { for } w_i \in C_p

其中,pip_i^{\prime} 是重新归一化后的概率。

结论

采样技巧对于生成模型的成功至关重要。它们不仅可以帮助我们生成更加多样的结果,还可以改善生成质量。通过适当调整温度参数、使用 Top-k 或 Top-p 采样,我们可以有效地控制生成过程中的随机性,确保模型既能探索多样化的可能性,又能保持生成内容的合理性。