为什么交叉熵是语言预训练的一个好损失函数? 注意:这都是众所周知的;有趣的是,尽管对“为什么使用交叉熵”有许多观点和直觉,但它们都可以从一个单一的出发点得出。 这里有一个简单的第一原则推导,不假设任何关于数据分布的内容。它来自一个非常合理的操作要求:) “我希望我的模型听起来聪明” 但我们无法测量这一点,所以我们问 “我希望我的模型听起来像人类” 虽然我们可以访问所有曾经写过的文本,但我们也无法准确测量这一点,因此我们改为问 “我希望我的模型尽可能有可能生成任何曾经写过的文本” 或者更直白地说: “我希望我的模型记住训练数据。” 考虑这个思想实验: 给定一个数据集 S,包含人类所写的所有文本,我们对 S 中的每个“文本”进行独立试验: 从我们的模型中抽样:“样本文本” Pr( ;W) 检查:“样本文本”是否与原始文本完全匹配?注意:我们不对任何内容进行条件限制!我们只是问,在模型可以生成的所有内容中,我们是否得到了“文本”。 将成功定义为事件 E = “所有每个样本检查成功” E 的概率是,你的模型 W 对正确真实值分配的概率的乘积 Pr(E) = Π_{text in S} Pr(text; W) 最大化 log Pr(E) 相对于 W 给你交叉熵目标。 你如何用 SGD 优化这个? 从语料库中抽样文本 计算每个文本前缀的 grad log Pr(token|prefix) 更新模型 优雅的是,这同样同时: 1) 最小化模型 P( ;W) 下数据的描述长度(压缩视角) 2) 最小化与真实分布的 KL 散度——如果存在的话(尽管我们从未假设存在) 3) 实现最大似然估计 推导是直接且众所周知的,但它突出了一个重要的事情: 交叉熵自然地从想要精确重现训练数据中出现。 附言:你本可以选择最大化 Pr(模型生成的文本在真实值中) 有趣的是,优化这个可能导致模式崩溃,因为一个最优解是始终预测语料库中的单一文本。然而,梯度再次看起来像交叉熵,但带有一个乘法因子 即,Pr(text;W) grad log Pr(text;W)
57.78K