本文介绍一些 LLM API 调用过程中涉及的常见超参数,这些超参数一般是用以完成生成过程中 多样性 和 生成质量 的平衡。
Temperature
Softmax 是先取指数再求平均,因此哪怕本来差别不大,上指数之后大家的差别就会变地非常大。因此可以大家都先除以一个 Temperature 再求指数 & 平均,也就是先把大家的差距进一步降低再用指数拉回去。
$$
\text{softmax}i(\mathbf{z}; \tau) = \frac{\exp\left(\frac{z_i}{\tau}\right)}{\sum{j=1}^K \exp\left(\frac{z_j}{\tau}\right)}
$$
Temperature 越大,前期的差别就会越小,最终的差别也越小,长板也就没那么长了。下面这张动图更为形象:
显然,分母不能为 0。因此一般约定如果温度设为 0,那么就是禁用 Temperature Sampling,回退到 Greedy Sampling,也就是直接取 logit 最大的那个选项。
顺带一提,Softmax 本身就是归一化操作了,因此不需要在 Softmax 前进行额外的标准化 (Standardization, 转换为标准正态) 或归一化 (Normalization, 单纯把范围拉到 [0, 1] 之间)。
Top-K & Top-P
简言之是,K 表示候选 token 的最大数量,P 表示候选 token probability 加起来的最大值。这俩都会限制采样集的大小,只是 K 直接限死了 len()
,而 P 是当场根据大家的概率分布来拉一个包含总和上限的临时小团体。
根据 IBM 的文档,如果两个参数都设置了,那么会先执行 Top-K 筛选出一个初始团体,再根据 Top-P 筛选最后的常务委员会。
各种 Penalty
Frequency Penalty & Presence Penalty 频率与存在性惩罚
根据 OpenAI 的文档,会对 logits $\mu_j$ 做如下处理:
$$
\mu_j := \mu_j-c_j \cdot\alpha_{freq}-\epsilon_j\cdot\alpha_{presence}
$$
其中 $c_j$ 是这个 token 在前文出现了多少次,$\epsilon_j$ 是这个 token 在前文有没有出现过。