大模型为何读不懂"不"字:从注意力机制到训练数据的否定词困境
当你告诉大模型"不要在代码中使用eval函数",它偏偏生成了包含eval的代码;当你问"哪些水果不是红色的",它列出了红苹果和草莓。这不是个例,而是一个困扰了自然语言处理领域十年的顽疾。 ...
当你告诉大模型"不要在代码中使用eval函数",它偏偏生成了包含eval的代码;当你问"哪些水果不是红色的",它列出了红苹果和草莓。这不是个例,而是一个困扰了自然语言处理领域十年的顽疾。 ...
当你问一个大语言模型"法国的首都是哪里?",它回答"巴黎"。这个看似简单的过程背后,模型经历了一系列复杂的计算。在最终的文字出现之前,模型首先要给出一个答案:对于词表中的每一个词,它认为这个词作为下一个输出的可能性有多大。这个"可能性"的原始形式,就是logits。 ...
一行代码的魔法 在PyTorch中实现一个简单的语言模型时,你可能会看到这样一行看似普通的代码: self.lm_head.weight = self.embedding.weight 这行代码做的事情非常简单:让输出层的权重指针直接指向嵌入层的权重。但就是这样一行代码,却能够为一个典型的70亿参数大模型节省约2亿个参数——相当于模型总参数量的3%左右。 ...
从一个预测游戏说起 当我们在说话或写作时,大脑在不停地进行一个预测游戏:根据已经说出的内容,预测下一个最可能出现的词。这个看似简单的认知过程,恰恰是现代大语言模型的核心工作原理。 ...
训练一个能够生成文本的模型,听起来是一个简单的任务:给它看很多文本,让它学会预测下一个词。但真正动手实现时,一个根本性的问题会摆在面前——训练时模型应该看到什么? ...
当一个语言模型预测下一个词时,它输出的是整个词表上的概率分布。比如在"今天天气很"这个上下文后,模型可能给出"好"的概率是0.7,“差"的概率是0.2,“热"的概率是0.08,其他词的概率更低。如果真实的下一个词确实是"好”,我们如何量化模型预测的质量?更进一步,如何设计一个可微分的损失函数,让模型能够通过梯度下降不断优化这个预测能力? ...
当你向大语言模型提问时,可能注意过一个现象:模型的回答是逐字逐句流式出现的,而不是瞬间生成整段文本。这并非产品设计的"打字机效果",而是大模型生成机制的本质特性。 ...