前几天我刷手机,看到一个AI生成的视频,把我笑得不行——一只猫在弹钢琴,旁边还有只狗在翻谱子。我就在想,这玩意儿到底是怎么理解“猫弹钢琴”这种鬼畜场景的?后来我查了一堆资料,发现所有答案都指向同一个东西——Transformer架构。
别被这个词吓到,它其实就是一种处理信息的方法。我打个比方,你想象一下你在读一本小说,传统的AI读法是“一个字一个字顺着读”,读到后面忘了前面,就像你追剧追到一半忘了第一集在讲啥。但Transformer不一样,它像是一个特别会做笔记的读者,看完一整段后,能随时翻回去看前面哪里跟现在有关系。
我第一次接触这个概念是在2021年,当时想用GPT-2生成点搞笑文案,结果折腾了一下午,死活搞不懂为啥它能把“我昨天吃了一个”接成“超级难吃的榴莲蛋糕”。后来我才知道,这个“超级难吃”跟“榴莲”之间的关联,就是Transformer的核心工作——它给每个词和其他词之间打分,算出一个“注意力分数”。比如“榴莲”这个词,“吃”跟它的分数是0.8,“蛋糕”是0.9,“昨天”可能只有0.1。分数越高,说明关系越密切,模型就越会参考那个词。
这个过程有个专业叫法:自注意力机制。听起来玄乎,其实就是“自己看自己”。比如你写作文写到“小明虽然很努力,但他还是没能及格”,普通人一眼就看出“他”指的是小明。但机器看不懂,Transformer就用自注意力去算:“他”这个字,跟前面哪个名字最相关?一算,“小明”得分最高,好了,认准了。
这玩意儿最骚的操作是它能并行处理。传统模型比如RNN(循环神经网络),处理一句话要一个字一个字来,就像你排队买奶茶,前面的人不买完,你永远轮不到。而Transformer不一样,它像是一个开了十个窗口的奶茶店,十个顾客同时下单,效率直接起飞。我试过在Google Colab上跑一个BERT模型(Transformer的一种变体),处理一段500字的新闻,传统模型要跑大概3秒,Transformer只要0.3秒,虽然现在看起来都不算快,但在当年这已经是降维打击了。
Transformer最早是Google在2017年的一篇论文里提出来的,论文标题叫《Attention is All You Need》。我当初下载了这篇论文,想装个逼,结果看了两页就放弃了——满屏的矩阵运算、多头注意力、位置编码,我数学水平还停留在大学高数挂科阶段。后来我找到一个叫“Transformer图解”的博客,作者用了很多方块图和箭头,才让我勉强看懂。
说个具体的例子。我去年用Hugging Face的transformers库,加载了一个中文的BERT模型,想让它做情感分析。代码就几行:
“`python
from transformers import pipeline
classifier = pipeline(“sentiment-analysis”, model=”bert-base-chinese”)
result = classifier(“我今天心情糟透了”)
“`
输出结果是:[{‘label’: ‘NEGATIVE’, ‘score’: 0.98}]
它判断对了。但有意思的是,我把句子改成“我今天心情糟透了,但看到你来了就好”,它居然还是输出NEGATIVE,得分0.89。为啥?因为Transformer模型没有真正的“理解”,它只是根据训练数据里的统计规律做判断。在它的训练数据里,“糟透了”这个词出现的上下文,大概率是负面情绪,哪怕后面跟了转折,它还是更看重“糟透了”这个词的高分数。这就是上面说的“注意力分数”在实际应用中暴露的问题——它会过度关注某些高频词。
Transformer还有一个关键设计叫“位置编码”。因为它是并行处理的,不像人一样知道词语的顺序。比如“我打你”和“你打我”,词是一样的,但顺序不同,意思完全相反。Transformer怎么区分?它给每个词的位置加了一个特殊的“坐标”,就像给每个座位贴了标签,1号位、2号位、3号位,这样即使同时处理,也知道谁在前谁在后。
这个编码方式挺有意思的,用的是sin和cos函数。我当时看到这个设计,第一反应是:这他妈也行?但仔细一想,确实妙——因为sin和cos的数值是连续的,模型可以学到相对位置的关系,比如第3个词和第5个词之间的距离,可以通过函数值计算出来。
聊到这儿,你可能会问,那Transformer跟ChatGPT有什么关系?关系大得很。ChatGPT就是OpenAI用Transformer架构加上大量数据训练出来的。只不过他们把Transformer的Decoder部分(解码器)单独拿出来,改造成了一个能生成文本的模型。我试过用GPT-3的API,输入“写一个关于程序员加班的笑话”,它给我回了:“程序员加班到凌晨三点,老婆打电话问:你什么时候回来?程序员说:等这个循环结束。老婆说:你那个循环是死循环吧?”虽然不好笑,但至少它理解了“加班”和“死循环”这种程序员的梗。
Transformer也不是没有缺点。它太吃算力了,我当初想自己训练一个小的Transformer模型,就跑了三天三夜,结果显卡温度飙到85度,差点把电脑烧了。后来查了一下,训练一个GPT-3级别的模型,电费大概要花460万美元。普通人玩不起,真的玩不起。
还有一个问题是上下文窗口有限。比如GPT-3的上下文长度是2048个token,大约1500个汉字。你给它讲一个超长的故事,它读到后面就会忘记前面说了啥。现在GPT-4已经扩展到32000个token了,但跟人类的长期记忆比起来还是差得远。
说到底,Transformer就是一个特别擅长找“关联”的工具。它不聪明,甚至有点笨,但它快,能同时处理大量信息,而且通过堆叠层数(比如BERT有12层、24层),能捕捉到越来越抽象的规律。第一层可能只关注“猫”和“狗”这种词的关系,到了第12层,它就能理解“猫在弹钢琴”这种离谱场景的合理性了。
我用Transformer写过诗歌、翻译过论文、甚至帮我妈写过几段广场舞的解说词。它确实改变了我的生活方式,但我心里清楚,它从来不会真的“懂”我在写什么。它只是用数学的方式,把人类的语言拆解成无数个“注意力分数”,然后拼凑出一个看起来合理的答案。
就像那只弹钢琴的猫,看起来很聪明,但其实它只是在执行一套精密的代码。Transformer也是,它只是个工具,只不过这个工具,恰好学会了用我们的方式说话。