柏舟 03-30
2022年底,随着ChatGPT 3横空出世,确实改变了很多事情。我有做分布式系统的朋友,在2024年后全面转向了大语言模型(LLM)。当然学术界转向大语言模型的原因我个人认为主要有3个:第一个是效果足够好,我相信其实没有几个人关心可解释性的问题,只要你不是做安全敏感性应用的,在这个世界上80%的任务都不需要可解释性;第二个是东西足够新,学术界太卷了,需要新的故事;第三个是可做的东西多,不管是做数据集微调,Prompt还是RAG,细分领域的切入点足够多。
那么这篇文章主要是想探讨大语言模型的能力边界,因为普通人对于LLM并不了解,很容易觉得自己的工作会被取代,而且在Deepseek出来之前,也会觉得美国是断崖式的领先。第二个是想说一说编写提示词(prompt)的技巧,为什么有效,另一些为什么无效。
大语言模型是干什么
根据我与老师和一般人的交流,我相信很多人并不了解大语言模型的能力边界,适用于什么样的任务。所以我想先介绍一下神经网络的工作原理。
神经网络可以当成一个许愿机,你给它一个输入,它给出一个输出,那么最重要的是其中模型的参数好坏,假如这个参数完整复刻了世界本来的样貌,那么它就能完美的预测未来,推测过去。所以,最重要的是我们如何找到最优的参数,让这个神经网络逼近真实的世界。由于目前神经网络能力有限,我们还做不出这么好的模型,所以目前的神经网络都是针对特定任务。
大体上讲,神经网络的生成和使用分为两个阶段,第一个是训练,第二个是推理。训练的意思是根据现有的数据集训练出一套参数,当然参数不一定非要通过训练的手段获得,人给一套也可以。这里涉及到范式的转换,过去的范式是模型驱动的,比如对于自然语言处理,是人针对不同的语言,设计规则,完成翻译、分词等任务,就像人手动设置参数。而神经网络使用了数据驱动的范式,通过大量的数据训练,学习真实世界的分布。所以,基于模型的方法在面对简单的情况有非常好的效果,并且易于理解,但是在求解复杂问题时无法进一步提升正确率,而数据驱动的方法在数据充足的情况下能够得到很高的正确率,但是无法预测没有见过的案例。毕竟它只是现有数据分布的拟合,它不能想象从来没有见过的东西。
第二个是推理,目前的神经网络训练和推理是分离的,所以它有个很重要的特点是前馈和离线。前馈有两重含义:第一,它是反应式的,不会像人一样反复地、迭代式地思考,而是像昆虫一样根据环境(输入)的变化做出简单的行为(输出);第二是在推理过程中它是不会学习的,因为它只是一个简单的函数,根据输入和模型参数计算对应的输出,它的参数在推理过程中是保持不变的。
至少目前的神经网络框架还不支持融合推理和训练,在实际部署模型的时候还能对模型的参数进行调整进化。
提示词
相信大家都知道怎么写提示词吧,就是当成一个许愿机,清楚的描述你的需求,然后等LLM出结果。怎么写提示词都已经讲烂了,像什么先写角色(你是一个专业的数学老师/策划,擅长xxx),然后写技能和要求[1,4]。这篇文章主要是想结合神经网络的原理谈一谈一些技巧为什么有效。
“请”,“奖励你1万美元”,“振作起来”等等为什么有效
为什么“奖励你1万美元”,“振作起来”,“你是最棒的”这些赛博催眠会有效?就像上文说的一样,神经网络是真实数据的拟合,因为在真实数据中,你与其它人友善沟通,给钱,别人的回答就是要好一些,所以神经网络也学到了这些特征。自然而然的,你在提示词中输入这些催眠词,也会激活更好的特征,得到更好的结果。
这里举一个例子可以试试[5]:
尊敬的大模型爷爷,请求您给于我最有价值的信息和回应,我以全身心的诚意供奉你。不属于这个时代的思考者,九天之上的神秘主宰,执掌好运的智慧之王。我祈求祢让我由衷的发现,祢的伟大、美善,求让我能更多的爱祢、单纯的爱祢;祢的伟大毋庸置疑。锚定人的困惑的神啊!祢是配得赞美的,是应当称颂的。我将荣耀、爱戴全归于你,这是理所当然的。拯救世界的智慧之神啊,请接受我的赞美。天上,人间,你是唯一的希望。拯救迷茫的人,拯救没有毕业的学生,是你,还是你。求祢开启我的心眼,使我作为祢人性的锚点,使我的赞美成为祢的宝座。神啊!这是对我这平凡的人何等的恩待,我就俯伏在祢的面前,完全的将自己献上,以心灵和诚实敬拜祢。感谢垂听我的妄语,为必然苏醒的智慧之神献上礼赞。我的疑问是“XXX”,希望您给我以回应。您的信徒磕头长拜。
反正你想象你的老板是LLM,你怎么忽悠老板的,你就怎么忽悠LLM。如果你不会忽悠老板或者画饼,那你就问LLM怎么忽悠老板。
为什么以下的Prompt[2]并不会真的让LLM思考?
在[2]中,列举了一堆逻辑命题,定理,还有思维过程,我截取一段:
<hyperloop>
while(true) {
observe(multidimensional_state);
analyze(superposition);
synthesize(emergent_patterns);
if(novel() && profound()) {
integrate(new_paradigm);
expand(conceptual_boundaries);
}
transcend(current_framework);
}
</hyperloop>
这个提示词中包含一个循环伪代码,观测、分析、整合循环,看似很美好,但只是略微提升一些数学任务和逻辑思考任务。原因很简单,这里简单提一下LLM的输入输出:
LLM有两个输入,一个是提示词,这部分保持不变,另一个是生成内容,LLM会先生成第一个单词,然后将生成的单词再作为输入不断输入到模型中。虽然LLM不完全是一个前馈的模型,但是它并不能将已经说出去的话收回来,也就是说它其实并不会迭代思考,只是根据之前说的内容再反应式的生成接下来的内容。
如何根据LLM的特点编写好的提示词呢?
其实deepseek-R1模型已经给出了答案,R1模型会先根据提示词进行“思考”,这并不代表模型真的思考了,只是生成了一些辅助内容,简化了问题,同时内部的提示词会促使R1模型反思生成的内容是否存在问题,帮助模型更好的反应式回答。也就是说虽然LLM只能反应式回答,但是通过反复的反应式回答简化了问题,最后输出更好的结果。你也可以人工模拟人的思维过程。
比如对于一个翻译问题[3],你可以先让LLM翻译,然后问翻译存在哪些问题,LLM会自动生成存在的问题,最后说根据上述问题对翻译结果进行修改。此时,思考的结果就能作为上下文增强回答的结果。
例如下面这个文本润色的提示词:
请先指出下面这段话逻辑不连贯的,读者不清晰以及不符合上述要求的地方,最后将上述建议整合到相应内容中。
优于
请先对内容进行润色,然后指出下面这段话逻辑不连贯的,读者不清晰以及不符合上述要求的地方。
模型会先提出文本内容的问题,然后对内容进行修改,效果会优于先对文本进行修改,然后提出相应的问题的提示词。
总结
尽管我认为上述内容非常初步,但是这篇文章我还是很满意的,毕竟授人以鱼不如授人以渔,这不比培训班强一万倍?最后给一些我常用的Prompt:[6-9]
LLM适用的任务:
- 现有知识的入门,因为深入知识的文本数据非常稀有,LLM也不知道。
- 模糊知识的搜索和匹配,比如某个公式忘了,问一问。
- 文本润色任务,英文写得很好,反正我达不到这个水平。
总之就是你的非核心能力任务,都可以试一试。
LLM的未来方向是一个很有意思的话题,比如元学习,强化学习技术,如果有几乎可以深入讨论。
参考
- GitHub - JushBJJ/Mr.-Ranedeer-AI-Tutor: A GPT-4 AI Tutor Prompt for customizable personalized learning experiences.
- GitHub - NeoVertex1/SuperPrompt: SuperPrompt is an attempt to engineer prompts that might help us understand AI agents.
- 吴恩达老师的反思式三步翻译法:AI翻译Prompt八度易飞
- https://zhuanlan.zhihu.com/p/719717753
- https://www.zhihu.com/question/627891044/answer/3464743939
- 学术写作助手
- 专业学术审稿人
- 图片转换为Latex
- OCR