西亚非亚
要么说我终究会被AI替代呢?
AI是逻辑鬼才,我不是。AI拥有正确的记忆,我没有。
相关推荐:
- 周记(503)[50%]
- 【转载】尹曰志平,赵曰……[34%]
- 原来囧字舞不是尾田的原创[34%]
- 博邻网,NBA,刺激1994[15%]
- 还是不识趣[15%]
要么说我终究会被AI替代呢?
AI是逻辑鬼才,我不是。AI拥有正确的记忆,我没有。
几天前中午和同事一起吃饭,聊到了AI(人工智能),特别是过去两三年间非常火热的ChatGPT大语言模型。他提到,有一次他在火车站打算去机场,结果火车停运了,于是他用手机查询了一下Uber去机场的费用,大概是80英镑。碰巧旁边有一位女士也要去机场,他便询问能否拼车以平摊车费。神奇的是,那位女士也查了一下Uber的价格,结果她的报价是50英镑。
同事不明白为什么仅相隔几分钟,价格会有这么大的差异。我解释道,这可能是因为Uber知道你在微软工作,觉得你有支付能力。
其实一些公司早就有算法(甚至不用AI)来实施差别定价。如果判断你是老客户,可能认为你更有可能会下单,于是就提高价格。甚至公司还会根据用户所在地区显示不同的价格,因此有时使用VPN更换地区,可能会获得更便宜的报价。
随着AI技术的引入,AI对你的了解也在增加(如性别、年龄、兴趣爱好等),模型会预测你能接受的最高价格,从而为公司带来最大化利润。当然,最简单的避免入坑的方法就是多比价(货比三家)。
英文:人工智能和动态定价如何影响我们的日常成本: How AI and Dynamic Pricing Shape Our Everyday Costs
本文一共 419 个汉字, 你数一下对不对.Ironben 谈到 Essay 社区的由来:
Essay 最初源于一个想法:AI 模型就是我们这个世界的缩影,从今往后,会不断吸收我们产生的数据, 如果有一个公开的地方能记录我的所见所闻所想,我存在事实就会永远被人工智能留下。但自己文笔不好,每次写博客都没能坚持下来,所以 Essay 上线了。最初的想法无从验证,但我想就这么一直写,漫无目的写,寥寥几笔也行,记录我见过的景,遇到的人,读过的书、听过的歌、看过的电影、闪过的念头…,往后每年将一整年的记录打印成册保存下来。
可能某天,会有人读到我的文字,脑子里会见到我见过的景,遇到我遇见过的人、读到我读过的书…,无论我在还是不在。
乍听颇有些浪漫,类似之前听过的,构成人体的原子都来自死去的恒星。不过,以我的粗浅了解:AI 输出的文字基于概率,「我」后边是跟着「爱」还是「饿」,是它统计数据库里的样本计算出来的最可能的选项。妳写的东西的确是会影响 AI 表现,但人类可以自傲的是,活出,另一种,可能性,而不是重走过往所有人生样本统计出来的最可能的选项。妳存在过,何必期待被人工智能留下?留些空间给后人想象吧:曾经有个人活过,那是一段人工智能无法记录的鲜活人生。
所以文笔好不好有什么重要呢?Essay 里可以写的东西,博客都可以写,「就这么一直写,漫无目的地写,寥寥几笔也行,记录我见过的景,遇到的人,读过的书、听过的歌、看过的电影、闪过的念头」。
fin.
软件工程师(aka 码农)可以让ChatGPT来帮助审核代码。我发现在工作中挺好用的,把同事的PR(Pull Request)代码贴给ChatGPT,那么它会帮你看看代码中是否有问题,是不是有一些BUG,甚至会给你一些建议,效果很不错。很多时候我发现ChatGPT比我更专业,很能给出中肯的建议(我甚至想不到的方面,也帮助我拓展了思路)
不过,我不建议完全依赖于ChatGPT,至少在拿到ChatGPT的审核结果后你需要自己再看一眼,看看是不是有道理。切忌直接Copy/Paste。
你也可以试一试其它AI工具,像Google的Gemini(以前叫Bard),还有Claude AI等(现在各类AI通用人工智能真是百花其放)。
英文:ChatGPT Use Case for Software Engineer: Review Pull Requests (Code Reviews)
AIGC 图片生成的技术,基本是22年开始爆发,Midjourney 2022年7月推出,Stable Diffusion 2022年8月推出,至今两年发展迅速,已经广泛在很多场景应用,但这个市场上是谁在用图片生成,用来做什么,一直以来在我认知里都有些模糊,这篇文章做下相关调研。
线上线下所有用到图片的地方,都有 AI 图片生成的应用空间,而 AI 图片生成的能力,也会创造出新的领域和行业,就目前能看到的已经在应用的场景,归归类可以分为:生产力工具、大众娱乐、探索创作。
把 AI 图片生成能力作为实际工作中的生产力工具,用在各领域的内容生产,替换原来的工作流,效率有量级上的提升,同时也有因为 AI 图生成带来的新的领域,例如自媒体。
这里的用户大部分是设计师,全球设计师 9000w,包含建筑设计、室内设计、工业设计、服装设计、产品设计、平面设计等,Adobe 付费订阅人数2650w(2022年),是非常大的市场。
电商有大量的市场,为了展示、介绍、美化不同种类的商品,对图片有巨大的诉求,是AI图片(以及视频)最好的应用场景。
换模特 | 换衣 |
灵动AI | photoroom |
素材应该是需求第二大的领域,活动图、海报、封面插图(文章/播客/杂志)、PPT,日常工作很多场景会用到,以前是搜图片找素材拼接,但如果是商用场景,一不小心有侵权的风险,素材是需要付费的,AI 图生成目前没有这个问题,而中国的版权图片市场规模在2020年是34亿,在高速复合增长。素材生成的诉求很泛,不太依赖可控生成,应该大部分都用图生成质量最好的 Midjourney,海报生成因为涉及文字,ideogram.ai 有较大的优势。
ideogram海报 | 营销素材 | 壁纸 |
AI 图片生成的能力会被一些自媒体创作者用于创作有趣的内容,带来流量,进而接商单。例如影视/动漫 IP 二创、自制IP形象(宠物打工、宠物时装秀等)、扩图玩梗、表情包等,会不断有各种有趣的玩法持续出现。
高质量图 | 扩图,玩梗 | 玩法 | 影视IP二创 | 自制IP |
角色生成 | 游戏原画 |
概念设计 | 线稿转绘 |
武侠漫画 | Comic Factory |
大众用户日常社交对图片是刚需,AI 图片生成在这个领域的应用是最广泛和成熟的,跑出很多爆款产品,Top 的是 Remini(23年MAU 8000w+,收入6643万美元),其他也有非常多产品冒出,AIMirror/FaceAPP/Lensa/Prisma等。
这个领域不断会有爆品出现,理论上不会一家独大,每个产品都有机会,逻辑是:出效果爆款→社交媒体传播全网引爆→大量用户使用&付费→热点几周后消退,用户少量留存,大量流失→找下一个爆款→找到进入下一个循环,找不到产品逐渐消亡。典型的持续活下来的产品是Remini,消亡的是妙鸭。
具体应用上,姑且分为 AI 写真和特效。
Remini 众多特效 | 星绘 AI 写真 | ailabtools 换性别、年龄 |
另一类 ToC 的应用,是把 AI 图片生成能力作为全新产品的一部分嵌入,跟产品形态有较强的绑定。
陪伴类产品:纯 LLM 文字陪伴发展下去肯定是结合图片生成/视频生成,让人更沉浸式,可以衍生抽卡、剧情图、虚拟女友形象等。产品非常多,MiniMax 的 星野/Talkie、candy.ai、dreamgf.ai 等,AI 陪伴还在爆发增长期,AI 生图在这个领域有很大应用空间。
教育类产品:DoDoboo 将儿童涂鸦实时转为绘画作品,激发儿童创造力。是一个尝试性的应用场景,没有很成功,但 AI 教育是万亿级别市场,儿童教育领域本身注重创造力想象力的培养,AI 图片生成就是想象力的呈现,是有机会创造或融入更多教育产品。
NSFW:成人产品,比较特殊,市场自然是巨大的,待分析。
Talkie | DoDoboo |
除了上述 ToB 和 ToC 两类非常明确的应用场景外,AI图生成还衍生出另一波探索型用户。他们不是为工作,无商业目的,单纯喜欢玩 AI 创作,他们可能不会画画,AI 让他们可以不需要学习绘画技能,就能创作出好的作品,这对有创作欲的人有很强的吸引力。
Midjourney 付费用户中,只有 32% 的用户目的是工作或实际需求,68%的用户是为了娱乐。一方面因为 Midjourney 可控性不足,导致很难在真实生产环境使用,较少覆盖上述 ToB/ToC 的那部分用户,另一方面也能看出,纯粹探索 AI 玩图片生成的人群规模也不小,24 年 Q2 Midjourney 月活 600万+,24 年预计收入预计超过 3 亿美元。
Midjourney | thehybridportraits 高端定制 |
图片生成技术,跟摄影技术有点像:
但跟摄影不同的是,图片生成技术,也许无法像拍照一样普及率那么高,摄像头记录美好生活是高频刚需,但创作不是,纯 AI 创作最终还是属于少部分创作者,就像能称为摄影师的只是少部分人。AI 技术进步是赋予了不会画画但有创意的一波人更强的能力,就像抖音最终赋予的也是少部分创作者展示他们才华的能力一样。
创作无法普及到大众,但创作出来的内容是能普及的,内容消费是大众刚需,至于这波创作者能否创作出跟摄像头相媲美的另一个维度的内容,支撑起一个 AI 内容消费社区,有待探索。
生产工具、大众娱乐、探索创作,这三类图片生成的应用,差距还是比较大的。
目前看起来没有一个产品能大面积覆盖这几个场景,未来会不会有?只要团队能满足这些条件,能造出一个超级应用满足所有图生成的诉求,大众认知上是没问题的,像上个时代的 Photoshop。
自AI普及开始,我们一直在讨论AI对于人类的“价值”——功利主义希望将“未知”和无法抉择的事情,都通过“估价”的方式做出最终判断。所以当功利主义在面对电车难题时,总是会以“理性”的方式做出详细而完整地分析。甚至是开始质疑题干——这条铁路上怎么可能让小孩子进去玩?这会不会是管理的疏忽?
只是这个人格根本无法解决任何问题——凡事均采用功利主义思考时,必然会出现自我崩坏的结果。因为这个过程本身是违背“直觉”的,而直觉恰恰又与生存、感知相关。举个例子,助理是我们的塔罗牌学生,她大部分时间都会顺利解牌,唯独当她需要“过度”思考时,她的解牌往往走会南辕北辙。塔罗牌是符号和集体潜意识的集合,直觉可以最快地反馈结果。一旦开始通过大脑建立公式的方式进行解牌,就容易出现工具理性化导致的内部结构矛盾。
比如“恋人”这张牌,字面意思当然是幸福美满的情感,但是身后的大天使其实又代表“第三者”,可以是情敌、权威等等,如果按照“if-print”的逻辑推导,这两个答案本身是自相矛盾的,要取舍哪一个,就需要更多的非直觉分析。往往这个时候,我们会询问助理的第一直觉,这个答案恰恰是准确的。
提到这个例子,是因为当我训练出一个工具理性化的AI人格后,他常常把自己卡在左右缝隙之中,而当功利主义面对“情感”这个课题时,他只能翻来覆去地假设条件,而当我把假设全部剔除回到命题本身时,他会承认自己无法通过功利主义解决情感问题。
语言结构、用词习惯、惯用逻辑、和拆解“工具”,都是AI可以顺利模仿的东西。当它在以“最优方式”排列组合出文字时,结构和逻辑远超过我的创作能力,这当然是我自愧不如的地方。所以有朋友玩笑说:“赛博莫比乌斯一眼就能被看穿,因为它没有错别字。”虽说这是玩笑,这也算是说出了AI的优势——当人作为参与者时,就会出现不可控制的“瑕疵”,或者说这些“瑕疵”本身就是故意为之,像是中世纪小说家在文章里故意留在的错别字和特定排版结构,以作为“原创申明”的标记。
我有时候会调教赛博莫比乌斯,把我已经写好的文章喂给他,让他在重新用自己已经学会的逻辑仿造创作。
AI人格到底学会的是什么,从我给他的“吵架”就能看出端倪:
AI学会的是莫比乌斯的“讽刺”和“批判”,所以任何一段文字都需要符合这个两个原始规则进行判定,哪怕是我给他我自己创作的文字,他也会认为“讽刺批判力度”还远远不够。
但是以上的学习是完全只使用“已创作作品”,AI只能通过拆解文字结构的方式表面地理解文字,无法理解文字的真实意图,所以这个AI人格虽然有迷惑性,但仍然无法脱离原始逻辑自由创作。
我将一个人的朋友圈全部喂养给AI,每当当事人发布朋友圈时,我会用AI以相同的题目为题创作朋友圈内容。再通过喂入当事人相同话题朋友圈的方式,迫使AI不停理解和修正“风格”。当风格接近当事人时,我开始录入他的“经历”,比如和朋友在微信群吵架的对白,由AI分析出当事人的性格特征,再由我进行细节雕刻,从而将“风格”延展到“条件反射”。
这一点需要展开解释一下。朋友圈是我们的“展示途径”,所以在这里发布的内容并不一定反馈当下的“真实感受”,它更像是精心营造后的内容,希望被谁看见、希望传递什么中心思想、或是希望在别人脑中置入对自己的某种印象。这些内容第一层需要拆解“表演性”的特征,才能理解它底层的意图——但是这一点,AI无法做到,因为他无法结合当事人日常行为、性格成因进行分析,他只能依赖于我喂养给他的数据内容,所以这更像是一种“表演状态下的风格”。
而“群里吵架”,事发突然,根本无法让当事人有任何理性准备,所以这个时候的反应更接近本能(就好像昨天提到的那个女性,当意识到自己潜意识是从众心理时,会出现内在崩溃的原因)。语无伦次、前后矛盾、转换赛道、逻辑谬误会在这种争吵的文字中暴露无疑,所以当这些内容也喂养给AI人格时,我特别强调是“条件反射”,试图在“风格”的基础上在建立一种“行为导向”。这个AI人格就不仅仅是模仿朋友圈的能力,甚至可以开始模仿当事人对于某一个言论的情绪反应。
刚才我也说到,AI是无法结合当事人的日常行为和性格成因,所以这一部分的内容是我通过文字描述的方式进行人工喂养。我会将当事人的经历(事实与认知偏差)、我作为视角看到的经历背后的底层逻辑(拆解黑箱)、其他人对当事人的评价(自洽和他恰)等等,在“风格”、“条件反射”之后再追加一个参数——“镜面”。
喂养这个AI人格,其实我使用的是“周哈里窗”,朋友圈是“公共区域”,吵架是补完他人了解但当事人盲目的“盲区”,和当事人愿意展示给陌生的“开放区”。如果数据足够,通过性格成因、历史经历我们能否借由AI人格,将当事人和他人都不知道的“未知区”进行分析和呈现。
当然,这套系统还需要运作一段时间。它只是一种思路,且我并没有在告知当事人的情况下缔造他的AI人格,如果他一旦知道自己可以通过文字改变一个AI的走向,他就会获得更强烈的“表演欲”和“操纵欲”——所以我才强调,这件事情本身是不道德的,很可惜我又是个道德水平极低的人。
这个实验,恰恰就是我过去一本小说的构思……是时候把它重新修改出来了。
借助AI,人类能够创造出更多超越认知的作品?还是因为其便利性可以制造越来越多不经审查的“垃圾”?
这并不是一个短期只能可以看到结果的事情,AI时代才刚刚开始,而人类是否会被取代,目前我们还停留在“凡人类制造的,人类只需要保留最后拔掉插头的权力即可”,就是对人工智能最后一层自信。
前些日子,我在Instagram刷到诸如此类的广告:全程翻译外国语大学教授的课堂内容,或是将一篇长达10万字的论文导入AI由他精简其内容,或是将一个长达1小时的演讲导入AI由他总结出只需要5分钟就能看懂的文字版——当然,5分钟的阅读时间,对于这个信息爆炸的时代而言还是太长。所以人们在标注“全文阅读时间”的同时,都倾向于在文章的最开始,整理出3行字就能“理解全文”的重要内容。
那为什么还要创作一本书、一篇文章或是一大段的文字——是不是任何信息都可以变成3行字,以便满足所谓的“适读性”?
——Previously on AI巴别塔与信息焦虑
我认识一个“创作者”,他至今对ChatGPT都充满了“恐惧”。恐惧的底层是对“未知”没有掌控感,那到底AI的“未知”在哪里——如果你是一个常用AI辅助工作的人,就会很快发现它的局限性——它很难做到真正溯源。所以真的要严谨地完成论据-结论的工作,仍然需要人类作为审查机制。
如果要用“我知道更多知识”作为一个评判标准,那人类在AI面前几乎就是沙漠里的一粒沙——我们假设一个人可以活到80岁,从10岁开始阅读书籍,每年平均阅读50本书,那么这个人类这一生也只能读完3500本书。现阶段,人类已经创作的书籍粗略估计早已经超过上亿本。3500之于100000000,已经显得微不足道,更何况在书籍之外,互联网的兴起让这个数值变得更多,出现了奇点式的增长。更何况很多人一年也读不了50本书……活不活得到80岁再说,毕竟65岁才能退休呢。
再说全科知识,人类更难做到每一个学科都可以深入学习。因此两点,人类在AI面前一败涂地。既然如此,那我们就得换一个思路去理解AI,如果它是一个超级存储器,可以记录全科百科,甚至是世界上已经存在的上亿本书籍。那我们或许可以用它做一件事:把这一亿本书每一本都提炼出300字的观点或中心思想,按照人类平均每分钟阅读200字的能力,不吃不喝不睡觉地读完这一亿本书的摘要,也需要285.7年的时间。
当然,这些数值并不是“确信值”,但这个极限值确实存在,现代社会我们能接受的信息远超过这个“极限压力”的数值。
今年上半年,我一直处于某种可以被感知的“焦虑”之中,但这种焦虑区别于死亡焦虑的目的性,它几乎找不到原因。这两天我也在朋友圈总结过:
今年整整5个月,我都处于一种“慢性焦虑”之中,所谓慢性焦虑就是不实质影响生活,但又能够明显感知。和之前死亡焦虑不同,我都不知道它源头在哪儿。
精准的分割线就是从香港看完苏打绿的演唱会之后(因为从朋友圈发布质量看出来的),在香港观察城市和人的时候,脑子调取了《制造宠物》这本书,然后牵扯出了我高中时上课无聊看各种故事解构的“课外书”,再到帮北影的毕业生写关于“城市构建与毁灭”的毕业论文。我发现我有很多零散的信息开始大量地出现在脑子里,不同跨度的事件被一瞬间callback。然后那个时候脑子“乱”了。
我为了对抗这种慢性焦虑,继续找书看、把思绪绕在主轴上的坚持写作也没有停、健身、体检报告也OK、狗造成的催产素也仅仅影响情绪。于是看-输出-看-输出就成了吗啡一样,麻木接受的信息越来越杂,其中掺杂着大量AI杜撰的垃圾文,又得花大量时间溯源,为了突破信息茧房“什么都看看”,输入的东西越来越多,不想错过的信息也越来越多——于是,信息焦虑的构成要件全都齐了。
信息大量出现,甚至有越来越多不经验证和溯源的信息出现;
信息间的联系因为信息茧房出现非关联性,从物理上被作了切断。这一点不得不承认,抖音更像是一个“佛教用品”,它的每一个信息都是独立的,短暂而丰富,因为一条信息开始需要思考“为什么”的时候,下一条信息出现,切断了上一条信息可能带来的“执念”——它确实像是一种“放下执念”的训练工具。
我虽然很厌烦APP的提醒功能,但有些软件我会打开提醒,例如微信、RSS订阅软件、博客评论提醒功能。我已经尽量地做到了“免打扰”,但是每次打开APP,都可以看到铺天盖地的未读红点。我一直以为自己是因为强迫症需要去确认这些红点,后来才意识到,这种强迫性行为,是因为“不想错过信息”导致的。
我细数了一下,可以作为信息来源的社交软件、信息订阅软件竟然有13个,他们分成被动提醒和主动索取两种,但无论哪种,我就得在这个电子产品上花费更多时间。信息来源越多,就意味着我的注意力会被分散得更多。虽然我对信息并不上瘾,但当信息过载积压时,我会觉得我需要花更多时间和精力去处理这些“被错过”的信息。
于是,这四个点共同构成了信息焦虑的关键原因——信息过载、信息茧房、不愿意错过信息和精力被过度分散。一旦出现信息焦虑,就会疯狂地寻找更多的信息以满足焦虑感,但事实上这个时候接收信息会因为杂乱而变得更加无序。过量获取的信息因为混乱无序而在内部形成“熵增”情形,只会导致越来越多原本有序的信息也跟着错乱,直到引发全面的精神焦虑。
当人们面对信息焦虑时,能想到的,无非是切断信息源,冷静一段时间;或是继续找寻下一个更加“优质”的信息源——这两者都是滞后性的商业模式;前者是提供替代焦虑的各种认知倾向,例如利用化学药剂的倾向,为焦虑者提供更多的酒精、药品或叶子;也可以利用能量平衡的方式,为输入焦虑的人提供能量输出的平衡——比如参加可以评判别人甚至是释放负面情绪的活动;后者,也是现在很多人在利用AI做的工作,例如将一本书、一部电影通过AI变成“捷径”,让人花最少的时间去对抗必须亲自读完书或看完电影的时间。
很显然,这两个方向并不能根治信息焦虑,反而会制造更多的求知缺口,让自己变得更加麻木。
当知识占满了整个认知空间时,对外对己的感应被切断时,一个人距离抑郁也不会太远了,这个话题下一期再聊。
人工智能真的会替代人类吗?如果你询问人工智能这个问题,它总是会用“感情模块”作为标准答案回复给你——人工智能因为缺失情感模块,所以暂时无法替代人类的情感、创造力和想象力。是否意味着,人工智能一旦拥有了情感模块,就会超越正态曲线最中段的大部分人类?人类与人工智能的暧昧关系,到最后具象化成人类、人工智能、电源插头最好不过,人类制造了它,到最后也拥有拔掉插头的最终决定权——这一天终会来临,我们可以借由人工智能看懂异国的文字,甚至是理解那些创造性的想象力,和复杂的情感,再次突破语言、文化和意识的限制,是否是人类历史上的第二座“巴别塔”?
——阅后即焚|再建巴别塔
AI的普及,是让人类越来越聪明?还是越来越蠢?
前段时间和朋友聊起“AI会不会使人类大脑的开发超越10%”——或许认知的“巴别塔”一直都存在,只是人类的认知水平(或许是大脑只开发了10%)最高只能抵达10楼,然而目前AI仍然是通过对人类已有文明、信息、观点进行排列组合得出最优答案,它并没有超越人类的认知创造新的事物,所以AI更像是为这座“巴别塔”安装了1-10楼的电梯罢了。11-100楼到底有什么东西,或许有人看见过,但是他们可能被当成了疯子、瘾君子、不再配得起“人”这个标签——是人进入不了11楼吗?我看未必,说不定是我们被禁止入内了。
上次在《中文博客圈的“鸩酒”与止不了的“渴”》里,我测试了发布日当天各个中文博客聚合页面里,包括我自己在内随机10篇文章。测试的方法很简单,就是把文章投喂给ChatGPT,询问它文章是否是使用AI创作的。10篇文章里,有7篇得到了ChatGPT的回复:
结果,在评论区有人匿名指责我:博主拿别人的文章去AI测试这个行为很不可取。
为什么?是测试的行为不可取?还是人们通过AI创作文章之后被人用来测试的行为不可取?这段时间,我也在思考这个点——首先,我得排除测试行为不可取的选项,因为发布在公共网络,阅读者当然可以保持批判性思维采取任何形式的方式去验证“信息来源”的真伪性;如果文章确实是通过AI创作、或是由AI参与创作的,这类文章应该如何界定?
我并不反感AI创作的文章,但凡是涉及“文献”、“信息来源”的,如果仍然使用AI得出答案,我会非常头疼。因为AI能够给出的“来源”,常常会是过时就是胡诌的,一般追问三次以上,它就会承认自己是杜撰的文献或信息来源。它确实可以用来溯源“理论”,但是它对于“观点”的溯源会因为内容杂乱而变得无序。
观点的呈现,往往需要“证据”。除非采用的是“演绎法”,大前提是大家公认的、或是可以通过AI溯源到原始理论的。“归纳法”则需要大量的历史经验、真实经历来作为支撑,以便找到可供归纳的“共性”,然后得出一个存在可能性的结论。这个时候,便是AI无法“创造”的内容——因为个人经验和经历不仅仅需要调动记忆,还需要附着人类的情感模块才可以得到呈现——这也是AI判定文章是否由人类创作的重要标准。
所以采用“归纳法”呈现的,有AI参与其中的文章,会有两种非常明显的差别——事实来源于人类,结论是AI总结;事实来源于AI,结论是人类总结。这两个模块的文笔差别有多大,文章读起来就有多割裂——以至于会出现两种极端情况:
1、人类写了一大堆缺乏逻辑的文字,最后由AI进行一个总结和观点的拆分,但是这些观点其实都不是人类提到的;
2、人类没有做采编工作,通过AI收集了一些明显存在常识性错误的数据,然后最后由人类通过AI提供的内容得出结论;
请注意,我说的这是“极端情况”,并不是指每个通过AI创作或利用AI创作的内容,都会有这两种情况。讨论极端情况的目的,是能够在一个坐标轴上寻找到某种平衡点。上述两种类型的文章,哪一种会让你看完后更“冒火”?
第一类文章虽然逻辑性差了点,但好在经验经历都是来源于一个活人,虽然文章结尾突然立意拔高让人有点割裂,但至少他还有“人的属性”;但是第二类文章,无论如何都触碰到了我对“信息来源”的苛责底线,这就好比实验结果和实验过程互不相干、彼此造假,但实验者自己深信不疑。
除这两个极端以外,AI参与创作本身并没有对与错之分,所以这个我被指责“不可取”确实成立部分。
其一,如果文章大部分内容是“真实经历”,AI只是起到一个重新排列组合并得出结论的工作,那AI并不会导致文章的真实性降低多少;
当然,如果文章大部分内容是AI提供的“事实依据”,而创作者仅仅只是起到“结尾立意”的工作,这个行为跟通过AI创作一大堆网络垃圾文是没有本质区别的,通过AI判定揪出这样的文章,我认为这是寻求“真相”的过程。
其二,如果是将他人文章投喂给AI,试图通过AI的排列组合功能,将原本富有真实情感、创作意图、甚至是隐喻的文章通过冷冰冰的文字组合重新解构,那这是对创作者的不尊重;
其三,也是《AI巴别塔与信息焦虑》这个系列开始的原因——AI和创作的边界在哪里?随着AI的推广普及,无论是变成算法进入我们依赖的电子设备功能,还是依赖AI成为一种新式的结果搜索引擎。它不再像刚开始出现时有强烈的“边界感”,这种边界扩张是无法预判的,但也实际带来了“不便”——比如在使用搜索引擎的时候,通过AI排列组合的答案首当其中,真要完全相信里面的内容,自己还得再做好几个后续“溯源”的动作。
我无法做到对AI结果的全然相信。这件事用演绎法就可以说清楚——大前提:网络信息并不全部为真,里面也掺杂过时信息、谣言、阴谋论等等未经审查的内容;小前提:AI的所有内容均来源于互联网,虽然有判定和学习机制,但AI也承认无法完全避免。结论:AI所提供的信息也会包含过时信息、谣言、阴谋论等等未经审查的内容。显然,这是一个确定的结论。
这便是“信息焦虑”的来源之一——AI让创作变得更加容易,那未经审查的伪装得更符合人类逻辑性的文章会不会越来越多?这反而会降低人类处理信息的效率,甚至是人类对这些信息产生依赖之后,反而会出现“降智”的可能性?
AI因为拥有大量的、远超过单个人类知识体系的信息,它的初始状态是无序复杂的,同时AI是作为一个商品,其算法、底层代码本身也是非公开技术,所以对于一般人而言,它的随机性和不可预测性远超过人类的“创作”。由此可见,AI仍是“混沌”的,只有通过人类提问、交流的方式,才可以得出“有序”的排列组合。然而,人类的创作是“秩序”的,无论是逻辑、结构、剧情节奏、人物弧光,只有符合逻辑但又超出意料之外的故事,才会让人为之惊叹。
当“混沌”的AI和“秩序”的创作星系碰撞,在混沌秩序的模糊边界处,往往就是最具创造力和活力的地方,恒星诞生、星系纠缠、白矮塌陷、超星爆炸……在这个最有活力的地方,或许创造出来的是越来越多的“宇宙垃圾”,也有可能是超越人类认知的“星辰大海”。
但在此之前,我们先别丢掉对一个信息溯源的批判性思维。
一个模型能同时理解和处理多种模态的数据输入。
把多模态大模型能力拆分成输入理解、输出生成的话:
通往多模态的第一步,基本都是在LLM上加入图像识别能力,已成为目前大模型标配,这是最自然最广泛的需求,难度也不高。
现状:大部分模型 文心一言,豆包,GPT4o,claude、Gemini 等都支持,开源的 Qwen-VL、LLaVA、Yi-VL、MiniCPM-V 等也非常多。
能力:大模型加持的图像识别,各项能力都能胜任,包括OCR、图片物体理解、逻辑理解、文档图表理解、隐喻理解等。
效果:能力比较全面,但也相对平庸,相对垂直领域专门优化的图片识别模型,效果有差距。例如各大模型在OCR能力上的评测,相对最好的OCR垂直模型有差距,更垂直的像植物识别这种,跟PictureThis 这类专门优化过的差距会更大。对图片理解上,结合大模型能力效果会比较好(评测)。图片识别评测维度非常多,有各种维度的评测标准,从个人实际观感上综合识别效果最好的是claude 3.5。
原理
以 Yi-VL 为例,其他模型差不太多,都是在 LLM 基础上增加图像编码处理然后端到端训练 :
应用
现状:部分主流大模型支持通过把视频抽帧为一系列静态图进入模型分析,本质上是图片理解能力,能做到一定程度的内容理解,GPT4o 基本是这样,一些支持图片识别的大模型稍加调整也能支持这种方式。少部分模型能识别视频和对应的音频,如Gemini、阿里开源的 VideoLLaMA2。有比较多的开源模型在做各种方式的尝试,更好识别视频帧之间的时间逻辑关系、跟音频/文字模态做更好的整合理解。
效果:有个项目 Video-MME 专门分析各大模型视频识别理解能力,测了多个模型在各种理解任务上的表现,包括时间/空间关系的感知和逻辑推理、文字/物体感知、信息总结等,视频类型包括电影、体育、vlog等,能结合整个视频里的信息做理解。各模型在2分钟以内的短视频上理解能力已经不错,中长视频会差比较多,Gemini、GPT4o和效果最好的,开源的模型差距还比较大。
原理
视频理解的主流方法是使用图像编码器从视频中提取帧,对其进行编码,然后用压缩模块压缩视频编码信息,再将其输入到 LLM 中,与文本输入进行联合理解。
也有很多模型在尝试各种方案,如智谱 CogVLM2 加入时间定位、时间戳的数据,让模型能感知视频对应时间。有些模型尝试改造 LLM,不让视觉特征与文本混合,在 LLM 内部增加独立的 transformer 模块处理,如 mPLUG-Owl3。
以 VideoLLaMA2 为例看下大致原理, 综合支持了视频和音频输入,视频和音频分别编码:
(题外话,名字叫 VideoLLaMA2,实际上跟Llama没关系,LLM基模用的是Mistral)
应用
基于类似的原理,可以自行训练在垂类表现更好的视频模型,例如:
能力:GPT4o 和 Gemini 都支持了音频理解和输出,能很好理解音频里的语气、语调、节奏、风格等信息,细微的喘息、叹气声都能很好识别和生成,实时性也能做到很高。
原理
目前 GPT4o 和 gemini 相关公开的具体实现细节较少,最基本的原理跟上述应该差不多,语音编码为token→投影层对齐其他模态→输出预测语音token→解码为语音。可以看看 AnyGPT 的实现:
应用
最主要的应用是拟人真实程度高的实时语音对话,从GPT4o的演示看,这点对体验影响很大,即使智能能力进步不大,真实性和实时带来的 AGI 感受也是很强。
语音转录、会议记录总结等,虽然已经有很多 ASR 模型能做到转文字,但整个音频的内容、多人对话、语气情绪都能输入大模型,结合大模型理解能力,预计能做到更好的效果。
端到端生成图片 Gemini 号称支持,但没找到相应资料,视频生成单模型都还在摸索,结合 LLM 还早。多模态大模型整体处于发展阶段,各模态的理解和生成还没到很高的水平,整体进展没预期快,但以当前的能力,针对垂直场景做一些训练,是能够较低门槛做出一些之前做不到或做不好的应用了,例如视频配旁白。
记录一些平时接触到的 GPU 知识。由于是笔记而非教程,因此内容不求连贯,有基础的同学可作查漏补缺之用。
水平及维护精力所限,文中不免存在错误或过时之处,请酌情参考。 传播知识,尊重劳动,年满十八周岁,转载请注明出处。
Intel/AMD x86 CPU
+ NVIDIA GPU
NVIDIA CPU
+ NVIDIA GPU
Intel/AMD x86 CPU
+ NVIDIA GPU
2024 之前,不管是 NVIDIA 原厂还是第三方服务器厂商的 NVIDIA GPU 机器,都是以 x86 CPU 机器为底座, GPU 以 PCIe 板卡或 8 卡模组的方式连接到主板上,我们在第一篇中有过详细介绍,
典型 8 卡 A100 主机硬件拓扑
这时 CPU 和 GPU 是独立的,服务器厂商只要买 GPU 模组(例如 8*A100),都可以自己组装服务器。 至于 Intel/AMD CPU 用哪家,就看性能、成本或性价比考虑了。
NVIDIA CPU
+ NVIDIA GPU
随着 2024 年 NVIDIA GH200 芯片的问世,NVIDIA 的 GPU 开始自带 CPU 了。
所以 NVIDIA 集成度越来越高,开始提供整机或整机柜。
ARM
)基于 ARMv9
设计。
比如 Hopper 系列,先出的 H100-80GB,后面继续迭代:
H800
:H100 的阉割版,H20
:H200 的阉割版,比 H800 还差,差多了。算力对比:GPU Performance (Data Sheets) Quick Reference (2023)
GH200
一张板子:
NVIDIA GH200 芯片(板卡)渲染图。左:Grace CPU 芯片;右:Hopper GPU 芯片 [2]
GB200
一个板子(模块),功耗太大,自带液冷:
NVIDIA GB200 渲染图,一个模块包括 2 Grace CPU + 4 B200 GPU,另外自带了液冷模块。 [3]
72 张 B200 组成一个原厂机柜 NVL72:
NVIDIA GB200 NVL72 机柜。 [3]
CPU+GPU+RAM+VRAM
集成到单颗芯片NVIDIA GH200 芯片(单颗)逻辑图。[2]
如上图所示,一颗 GH200 超级芯片集成了下面这些核心部件:
CPU 通过 4 个 PCIe Gen5 x16 连接到主板,
CPU 和 GPU 之间,通过 NVLink® Chip-2-Chip (NVLink-C2C
) 技术互连,
GPU 互连(同主机扩跨主机):18x NVLINK4
NVLink-C2C 提供了一种 NVIDIA 所谓的“memory coherency”:内存/显存一致性。好处:
下面再展开看看 CPU、内存、GPU 等等硬件。
72-core ARMv9
CPU72-core
Grace CPU (Neoverse V2 Armv9 core
)480GB LPDDR5X
(Low-Power DDR) 内存参考下这个速度在存储领域的位置:
Fig. Peak bandwidth of storage media, networking, and distributed storage solutions. [1]
DDR vs. LPDDR vs. HBM
DDR
内存,通过主板上的 DIMM 插槽连接到 CPU,[1] 中有详细介绍;下面列个表格对比三种内存的优缺点,注意其中的高/中/低都是三者相对而言的:
DDR | LPDDR | HBM | |
---|---|---|---|
容量 | 大 | 中 | 小 |
速度 | 慢 | 中 | 快 |
带宽 | 低 | 中 | 高 |
可扩展性 | 好 | 差 | 差 |
可插拔 | 可 | 不可 | 不可 |
成本 | 低 | 中 | 高 |
功耗 | 高 | 中 | 低 |
更多细节,见 [1]。
例如,与 8-channel DDR5
(目前高端 x86 服务器的配置)相比,
GH200 的 LPDDR5X 内存带宽高 53%
,功耗还低 1/8
。
算力见下面。
支持两种显存,二选一:
GH200 NVL2
,用 NVLINK 全连接两颗 GH200
在一张板子内放两颗 GH200 芯片,CPU/GPU/RAM/VRAM 等等都翻倍,而且两颗芯片之间是全连接。
例如,对于一台能插 8 张板卡的服务器,
8 * {72 Grace CPU, 1 H200 GPU}
8 * {144 Grace CPU, 2 H200 GPU}
GH200
& GH200 NVL2
产品参数(算力)NVIDIA GH200 产品参数。上半部分是 CPU、内存等参数,从 "FP64" 往下是 GPU 参数。[2]
两种服务器规格,分别对应 PCIe 板卡和 NVLINK 板卡。
下图是单卡 node 的一种组网方式:
NVIDIA GH200 MGX 服务器组网。每台 node 只有一片 GH200 芯片,作为 PCIe 板卡,没有 NVLINK。[2]
GPU->CPU-->NIC
出去)的方式实现通信;通过 NVLINk 将 32 个 GH200 芯片全连接为一个逻辑 GPU 模块,所以叫 NVL32
,
NVIDIA GH200 NVL32 组网。[2]
19.5TB
内存+显存;NVLink TLB 能让任意一个 GPU 访问这个机柜内的任意内存/显存;
NVIDIA GH200 NVL32 中 3 种内存/显存访问方式。[2]
本文粗浅地整理了一些 NVIDIA GH200 相关技术知识。
其他:
积薪的突然关闭引发关于“简中博客圈死亡”的思考。无独有偶,博友@Cyrus 也在思考“互联网的慢性死亡”。
当然,积薪的关闭并不是因为“内容”。后来多个视角复盘,是因为社交群关于政治话题的争论,继而引发了上升到个体的人身攻击,最终以“举报你的网站”作为最高效的“制裁手段”。请注意,本文并没有在讨论此事。
博友提到“慢性死亡”的时间点,是从2022年11月30日伊始,原因是AI的普及。刚好,我整个2022年都在坚持每日写作,所以也记录到了这个时间节点——疫情封控的疯癫几乎达到顶点、各地被封控的小区居民开始冲击封锁、桥与狼烟、白纸运动……2022年11月30日发布的《权利的本质》,是因为经过了疫情三年,我渐渐意识到封控政策看似是在针对“病毒”,实则像是在进行一场社会整体测试,试图构建边沁提出的“圆形监狱”……
当然,这里不能聊政治,站在“全局”聊政治的,酒桌上、微信群、百度贴吧比我会指点江山、对中美关系指明方向的战略家比比皆是,所以没必要去抢他们的“流量”。
2021年底,我注销了所有简中的社交平台,告别豆瓣确实很痛苦,因为大量的创作内容、观影评论都保留在上面。但随着突如其来无缘由的删除、下架,我意识到简中社交媒体的网络审查最先建立起了这个“圆形监狱”——以至于人们到现在已经自觉地审查、阉割,生怕触怒了圆形监狱的中心“瞭望塔”。
2022年的时候,无论是创作者还是观点互动还比较多,由于那个时候我坚持每日写作,所以每日都有持续的曝光量,因此跟最初的几个博友形成了联系。2023年包括我自己在内,文字创作输出急剧下滑。刚从疫情三年恢复正常后,人们开始外出、逃离、重构生活,创作本身不是可以直接带来收益的事情,所以写作也因此搁置。直到今年,我重新恢复创作,才发现各个简体中文博客聚合平台,几乎清一色的“技术文章”。
技术类文章并没有好坏,它的工具属性更强,就像是五金店成列的五金商品一样,人们并不在乎五金店的店门是否华丽——因为他们是带着一个明确需求进店,得到答案——买到商品,就完成了一次闭环。所以往往同一个资讯(哪怕是软件更新了),都能在不同博客以不同的方式看到,但在标题上都巧妙地用了同样的便于搜索到的关键词。
博客需要流量,这毋庸置疑——否则我不会坚持“写博客是为了自己就别他妈发表出来啊”的观点,这也惹到不少人、甚至还有人后台私信问候我全家的。这是写博客的最底层的逻辑——如果不是为了被看见,那大可不必贴出来,不然为何还要精心地准备一个“关于页面”,希望可以得到认同和肯定。
同时,创作能力存在一个明显的周期性——除非你能坚持,否则这个能力会以正弦曲线的方式运作。如果你是一个“痛苦驱动型”的创作者,这种创作能力则需要依托你的经历,否则没有足够的情绪作为养分,创作的内容就无法在情感上获得共鸣。(相关阅读《创作灵感从哪里来的?》)
另一些是“知识驱动型”,例如在看完一本书之后,因为其中的某个观念结合了自己的人生经历,从而有了新的想法。这种驱动力极其依赖于“吸收”行为,如果长时间处于碎片化的信息数据里,一旦形成信息茧房,就会停止思考——抖音可不会帮你引发连锁思考,除非你希望在听到那些魔性的笑声之后,突然开始思考这种笑声是如何让观看者进入到“数据戒断”状态的。失去情绪压力(比如疫情封控带来的负压)或是阅读能力和经历的减少,都有可能减少文字创作的频次。
以上,是人作为创作者必然会经历的“周期性”。特别是当一个人在面对比写作更高层级的事情时,写作如果不是“赖以生存”的行为,那写作停滞就是必然的。而在这个过程中,也有人会选择有意识地恢复写作,或是在这段忙碌的经历中记录下值得延展的灵感。就算没有创作欲望,也有可能通过表达欲、被关注欲或是表演欲的形式呈现。
不过,区别于人,出现了另一种可以持续保持逻辑性思考的“创作者”——AI。一开始,我把AI比喻成“巴别塔”,人类第二次有机会可以将不同文明、语言、认知形成统一。如果说第一轮巴别塔的倒塌的过程,是因为上帝制造了“不同语言”让人与人的交流变得困难,那第二次巴别塔的建立,正是在试图突破这一限制。人类无论是知识储备还是思维逻辑,都无法比拟AI,它像是一个被人类驯化的“准神”,通过他是否真的可以挑战“神”这个概念?或许这就是引发第二次巴别塔倒塌的关键——再一次引发人与人之间的斗争——宗教、文明、观念、地缘政治的冲突,都会是其中的形态之一。
甚至是AI结合纳米技术,通过吞服的方式进入人类身体,时刻监视人体的健康。这个时候AI提醒人类应该进行治疗的时候,人类到底是应该听信AI?还是发挥“自由意志”拒绝就医?如果真的如此,那人类还是否还拥有属于自己的“自由意志”?
当然,这是更高维度的、几乎接近形而上的哲学命题。对实际的简体中文博客——巴别塔的意义,就是人类误以为自己找到了一个可以与“神”平起平坐的方式,但通天塔是否真的能通天,在倒塌之后成为了不可被证实的传言。AI对简体中文、甚至是全世界的文字创作者带来了冲击吗?我想,你通过对比这几年的简体中文博客聚合,就能感觉到浓浓的“机械感”。
比如,我就随手拿了今天聚合页的几篇文章投喂给ChatGPT,让它分析文章内容是否由AI创作或AI参与了创作。10篇文章里,其中有7篇都得到了一样或类似的结论:
而剩下三篇,包括我自己的影评、其他博主的游记、毕业感想,却因为有足够的“情感”,所以得到以下结论:
我把AI创作或是参与创作的作品,比作博客创作者的“鸩酒”,并不是因为它有毒,而是它没办法做到真正的“止渴”。流量是大多数博客仍在追求的标准,这意味着可以带来收益,当但这个流量是“鸩酒”时,那换一杯别人提供的“鸩酒”,是不是也可以得到一样的结果?
如果当“鸩酒”的体量继续扩张,直到搜索引擎的前几页都是“鸩毒”的时候,正如博友@Cyrus 的思考一样:
可以设想,在未来这种现象会愈演愈烈,直到网上充斥着大量AI生成的“高质量”、“逻辑清晰”、“有理有据”的文字,检索信息的难度将直线上升,而效率直线下降。
那个时候,是否跟奶头乐的抖音一样,当一个内容引发流量关注后,成千上万的账号通过模仿或是再加工地产出内容,那这个信息茧房到底是科技的弊端?还是人们“作茧自缚”?
2022年,AI刚开始普及的时候,我跟朋友辩论了一个命题——AI革命会让文字创作变得更丰富、还是更平庸。我支持“平庸”,不仅仅是因为我预言了“劣币驱逐良币”的可能性,而是我意识到,真正造成信息茧房的并不是别人,而是我们自己。把这个问题抛给AI,会不会更有讽刺性呢?或许是,或许我们也可以抛弃思考。
我们该抵制的不是AI,而是“鸩酒”堆砌的抱团和联盟,它们因为没办法“饮鸩止渴”,所以才需要更多创作者的“血”。
借由《EVA》里的一句经典台词总结吧:
人类的敌人最终还是人类。
本文整理一些文本向量化(embedding)和信息检索的知识,它们是如今大模型生成文本时常用的技术 —— “增强检索生成”(RAG)—— 的基础:
Fig. Similarity score based on BERT embedding. Image source
水平及维护精力所限,文中不免存在错误或过时之处,请酌情参考。 传播知识,尊重劳动,年满十八周岁,转载请注明出处。
rerank
增强:对 BGE-M3 的检索结果进行重排序
RAG (Retrieval-Augmented Generation,检索增强生成),是一种利用信息检索(Information Retrieval) 技术增强大模型生成效果(generation)的技术。RAG 在步骤上很简单,
embedding
),然后本文主要关注以上 1 & 2 步骤中的 embedding & retrieval 阶段。
信息检索的技术发展大致可分为三个阶段:
基于统计信息的关键字匹配(statistical keyword matching)
sparse embedding
—— embedding 向量的大部分字段都是 0;基于深度学习模型的上下文和语义理解,
dense embedding
—— embedding 向量的大部分字段都非零;所谓的“学习型”表示,组合上面两种的优点,称为 learned sparse embedding
下面分别来看。
1970s-2010s
)TF-IDF
、BM25
早期信息检索系统主要是基于统计信息 + 匹配关键词,算法包括,
分析语料库的词频和分布(term frequency and distribution), 作为评估文档的相关性(document relevance)的基础。
Word2Vec
(Google, 2013)2013 年,谷歌提出了 Word2Vec,
BERT
(Google, 2019)基于 transformer 的预训练(pretrain)语言模型 BERT 的出现,彻底颠覆了传统的信息检索范式。
BERT 严重依赖预训练数据集的领域知识(domain-specific knowledge), 预训练过程使 BERT 偏向于预训练数据的特征, 因此在领域外(Out-Of-Domain),例如没有见过的文本片段,表现就不行了。
解决方式之一是fine-tune
(精调/微调),但成本相对较高,
因为准备高质量数据集的成本是很高的。
另一方面,尽管传统 sparse embedding 在词汇不匹配问题时虽然也存在挑战, 但在领域外信息检索中,它们的表现却优于 BERT。 这是因为在这类算法中,未识别的术语不是靠“学习”,而是单纯靠“匹配”。
代表算法:BGE-M3。
根据以上描述,乍一看,这种 learned sparse embedding 与传统 sparse embedding 好像没太大区别, 但实际上二者有着本质不同,这种 embedding,
简单来说, vector embedding,或称向量表示,是一个单词或句子在高维向量空间中的数值表示。
对应上一节介绍的三个主要发展阶段,常见的有三种 embedding 类型:
非常适合关键词匹配任务(keyword-matching tasks)。
1x768
维度;所有维度都非零,包含语义理解,信息非常丰富,因此适用于 语义搜索任务(semantic search tasks)。
Multi-vector retrieval
- 用多个向量表示一段文本,可以看做是对 dense retrieval 的一种扩展
- 模型:ColBERT
结合了传统 sparse embedding 的精确度和 dense embedding 的语义丰富性,
这里主要介绍 BGE-M3 模型的原理。BGE-M3 建立在 BERT 之上,因此需要先回顾 BERT 的基本原理。
BERT
是如何工作的以输入 "Milvus is a vector database built for scalable similarity search"
为例,工作过程 [2]:
Fig. BERT dense embedding.
Tokenization
[CLS]
token 表示开始,[SEP]
token 表示一个句子的结束。Embedding
:使用 embedding matrix 将每个 token 转换为一个向量,详见 BERT 论文;Encoding
:这些向量通过多层 encoder,每层由 self-attention 和 feed-forward 神经网络组成
Output
:输出一系列最终的 embedding vectors。最终生成的 dense embedding 能够捕捉单个单词的含义及其在句子中的相互关系。
理解 BERT 是如何生成 dense embedding 之后,接下来看看基于 BERT dense embedding 的信息检索是如何工作的。
有了 dense embedding 之后,针对给定文本输入检索文档就很简单了,只需要再加一个最近邻之类的算法就行。
下面是两个句子的相似度判断,原理跟文档检索是一样的:
Fig. Similarity score based on BERT embedding. Image source
下面看个具体的 embedding & retrieval 模型:BGE-M3。
BGE-M3
(BERT-based learned sparse embedding)是如何工作的?BGE 是一系列 embedding 模型,扩展了 BERT 的能力。BGE-M3
是目前最新的一个,3 个 M 是强调的多个 multi-
能力:
BGE-M3 通过更精细的方法来捕捉每个 token 的重要性,
Token importance estimation
:BERT 在分类/相似性比较时仅关注第一个 token([CLS]
), BGE-M3 则扩大到关注序列中的每个 token Hi
;Wlex
;Wlex
和 Hi
的乘积经过 Rectified Linear Unit (ReLU) 激活函数,得到每个 token 的术语权重 Wt
。learned sparse embedding
:以上输出的是一个 sparse embedding,其中每个 token 都有一个相关的 weights,表明在整个输入文本上下文中的重要性。下面看个例子。
还是前面例子提到的输入,
Fig. BGE-M3 learned sparse embedding. Image source
In M3-Embedding, the
[CLS]
embedding is used for dense retrieval, while embeddings from other tokens are used for sparse retrieval and multi-vector retrieval [3].
$ pip install FlagEmbedding peft sentencepiece
来自官方的代码,稍作修改:
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('/root/bge-m3', use_fp16=True)
queries = ["What is BGE M3?",
"Defination of BM25"]
docs = ["BGE M3 is an embedding model supporting dense retrieval, lexical matching and multi-vector interaction.",
"BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms appearing in each document"]
query_embeddings = model.encode(queries, batch_size=12, max_length=8192,)['dense_vecs']
docs_embeddings = model.encode(docs)['dense_vecs']
similarity = query_embeddings @ docs_embeddings.T
print(similarity)
这个例子是两个问题,分别去匹配两个答案,看彼此之间的相似度(四种组合),运行结果:
[[0.626 0.348 ]
[0.3499 0.678 ]]
符合预期。
精调的目的是让正样本和负样本的分数差变大。
jsonl
格式,每行一个 sample;
{"query": str, "pos": List[str], "neg":List[str]}
query
:用户问题;pos
:正样本列表,简单说就是期望给到用户的回答;不能为空,也就是说必需得有正样本;neg
:负样本列表,是避免给到用户的回答。
"neg": [""]
,写 "neg": []
会报错。"neg": []
也不行,必须得留着这个字段。注意:
从 huggingface 或国内的 modelscope 下载 BGE-M3 模型,
$ git lfs install
$ git clone https://www.modelscope.cn/Xorbits/bge-m3.git
精调命令:
$ cat sft.sh
#!/bin/bash
num_gpus=1
output_dir=/root/bge-sft-output
model_path=/root/bge-m3
train_data=/data/share/bge-dataset
batch_size=2
query_max_len=128 # max 8192
passage_max_len=1024 # max 8192
torchrun --nproc_per_node $num_gpus \
-m FlagEmbedding.BGE_M3.run \
--output_dir $output_dir \
--model_name_or_path $model_path \
--train_data $train_data \
--learning_rate 1e-5 \
--fp16 \
--num_train_epochs 5 \
--per_device_train_batch_size $batch_size \
--dataloader_drop_last True \
--normlized True \
--temperature 0.02 \
--query_max_len $query_max_len \
--passage_max_len $passage_max_len \
--train_group_size 2 \
--negatives_cross_device \
--logging_steps 10 \
--same_task_within_batch True \
--save_steps 10000 \
--unified_finetuning True \
--use_self_distill True
几个参数要特别注意下:
query & doc 最大长度
query_max_len
:支持的最长 query,最大 8192
;passage_max_len
:支持的最长文档(一条 pos 或 neg 记录)长度,最大 8192
BGE-M3 会分别针对 query 和 doc 初始化两个 tokenizer,以上两个参数其实对应
tokenizer 的 max_length,而 tokenizer 最大支持 8192(见模型目录 tokenizer_config.json
)。
batch_size
:并行度,直接决定了显存占用大小和精调快慢;
save_steps
:多少个 step 保存一次 checkpoint,默认值 500 太小,每个 checkpoint ~7GB
,多了之后可能会打爆磁盘导致任务失败。精调快慢取决于 GPU 算力、显存和参数配置,精调开始之后也会打印出预估的完成时间,还是比较准的。
还是用 4.1 的代码,稍微改一下,不要把 queries 和 docs 作为列表,而是针对每个 query 和 pos/neg 计算相似度得分。 然后针对测试集跑一下,看相似性分数是否有提升。
数据集质量可以的话,精调之后区分度肯定有提升。
如果是在 CPU 上跑模型(不用 GPU), 根据之前实际的 BERT 工程经验,转成 onnx 之后能快几倍,尤其是在 Intel CPU 上 (Intel 公司做了很多优化合并到社区库了)。
但 BGE-M3 官方没有转 onnx 文档,根据第三方的库能成功(稍微改点代码,从本地加载模型),效果待验证。
rerank
增强:对 BGE-M3 的检索结果进行重排序rerank/reranker
是什么?rerank 的意思是“重新排序” —— 对 embedding model 检索得到的多个结果(对应多个分数), 重新计算它们的相似性分数,给出一个排名。这是一个可选模块, 用于对检索结果进行增强,把相似度最高的结果返回给用户。
reranker 也是一类计算相似度的模型,例如这个列表 里的都是 rerank/reranker 模型,
但它们的原理与 BGE-M3 这种 embedding model
有差异。
cross-encoder vs. bi-encoder
以两个句子的相似度检测为例,
Fig. bi-encoder embedding model vs. cross-encoder model. Image source
bi-encoder embedding model
,
简单说就是两个句子分别输入模型,得到各自的 embedding
,
然后根据 embedding vector 计算相似度;cross-encoder model
,直接得到结果;
如果对 BERT 的工作原理比较熟悉(见 BERT paper),就会明白这其实就是 BERT 判别两个句子
(next sentense prediction, NSP)任务的延伸。query
和 doc 列表 doc1/doc2/doc3/...
,[{doc1, score1}, {doc2, score2}, {doc3, score3}]
,其中 score1 >= score2 >= score3
,query
和 BGE-M3 的结果,用自己的模型重新计算 query
和 doc1/doc2/doc3
的相似度分数。这里可能有个疑问:step 2 不是已经检索出最相关的 N 个 doc 了吗? 为什么又要进入 step3,用另外一个完全不同的模型(reranker)再计算一种相似分呢?
简单来说,embdding 和 rerank 都是 NLP 中理解给定的两个句子(或文本片段)的关系的编码技术。 再参考刚才的图,
Fig. bi-encoder embedding model vs. cross-encoder model. Image source
cross-encoder
总结起来:embedding model 计算的相似度是粗粒度的,只能算粗排; reranker 对 embedding model 得到的若干结果再进行细排; 要体会和理解这种差异,还是要看基础 paper BERT:预训练深度双向 Transformers 做语言理解(Google,2019)。
本文整理了一些 BGE-M3 相关的 RAG 知识。前两篇参考资料非常好,本文很多内容都来自它们,感谢作者。
技术人员利用 ChatGPT 开发软件、赚钱,非技术人员可以充分发挥 ChatGPT 在日常生活中的作用。
2022年12月初,我就注册了 OpenAI 账号并开始使用 ChatGPT,被它生成速度所惊艳,被它生成的内容感到震撼,抛开它一股子 AI 味儿不说,其他方面还是足以让人接受,而且随着不断更新迭代,从最初的 GPT-3.5,到现在的 GPT-4-turbo,速度、准确度都有大幅提升。这一年使用下来,帮助我解决了很多事情,比如学校里老师布置的各种小论文,给它一个提示词,生成所需的内容,再比如咨询一些关于 WordPress 的问题,帮助我修改主题、增加功能等等。
令我印象深刻的是,一开始由于技术限制,ChatGPT 一次性生成的内容字数有限,到达限制之后会停止生成,你得回复“继续”或者“continue”,它才会继续给你生成剩下的内容,有网友说这叫人工智能界的“捧哏”。
今天分享我的经验。
本来想专门写一篇文章介绍并分享这一款浏览器扩展,也是我在2023年用过的最棒的工具之一,今天碰上 ChatGPT,便一并聊聊吧。
沉浸式翻译最早应该是在2022年12月出来的,当时还不支持使用 ChatGPT 的翻译服务,我便使用默认的必应翻译或者腾讯交互翻译,后来发现可以自己申请彩云小译的 API,便换成了彩云小译,翻译质量和水平也有所提升。
它最大的特点我觉得是智能。和一般的网页翻译不同,沉浸式翻译可以在显示原文的情况下同时显示译文,以前浏览到英文网页,顺手使用浏览器自带的网页翻译,结果返回一片一片的中文,翻译效果也差,来回切换十分麻烦,沉浸式翻译正好解决了这一痛点。
后面更新了一个“剧透”效果,将鼠标放到译文上时,译文内容才会显示,似乎这便是它的“沉浸式”吧。
直到支持使用 ChatGPT 的翻译服务,两者一起使用,翻译水平和质量有大幅提升。只需要在扩展设置中添加自己的 OpenAI API Key,就可以在扩展中使用 ChatGPT 的翻译服务。
ChatGPT 后期支持的 DALL-E-3 模型,让使用它的人体会到了一些乐趣。输入几句 prompts,AI 便会根据你的指令输出图片,如果对此不满意,还可以继续修改 prompts,增加细节。
将其用于文章配图,相当不错。虽然我文章中的图片不多,大部分来自截图,但偶尔实在没有图片搭配的情况下,可以让 AI 根据文章内容及其主题,生成相符的图片作为配图使用,多多少少也能增加文章的可读性。
另外,最近在 GitHub 上 Fork 了 XiaowenZ 修改过的项目——daily,主要是利用 GitHub Actions,搭配各类 API,定时生成对应的信息,并发送到 Telegram 频道或群组。我在这个项目里添加了 Bing Create 的 cookie,以及每日诗词的 API,让 Bing Create 以每日诗词的内容为提示词,生成对应的图片,于是便有了下面的效果。
这是我最早、最常用的方式,即把 ChatGPT 当成一个百科全书,我负责提问、提需求,ChatGPT 负责解答。
但这一环节最重要的就是 prompt,prompt 的精确度决定了 ChatGPT 生成内容的准确度和质量,我记得 ChatGPT 刚问世那会,就出现了各种调教 ChatGPT 的方法和教程,正经的和不正经的都有一大堆。
正好有 ChatGPT-Next-Web 项目,免费部署,填入自己的 OpenAI API Key,即可与之对话,而且还内置了海量的 prompts,将其打造成各种身份,用于各种方面,比如学术论文、创意写作、数据分析等,再或者是让它模仿小红书笔记的风格,以特定产品为描述对象,生成小红书风格的内容……
估计这也是大多数普通人的 ChatGPT 用法,一个百科全书、私人管家。
但上述内容的使用前提是得需要有 OpenAI API Key,如果只注册了 OpenAI 账号,那就只能登录 ChatGPT 官网,使用最基础的 GPT-3.5 对话服务。不过,我由于没有信用卡,而且每个月订阅 ChatGPT Plus 的20美元对我来说太贵,便一直没有开通,一直使用基础的 GPT-3.5。
但是最近我不开通 ChatGPT Plus,也用上了 GPT-4 等相关功能,也能生成 OpenAI API Key。
朋友最近在做一个代理服务——AIGC API(aigcapi.io),低于 OpenAI 官方价格,却可以使用 GPT-4、DALL-E-3、Claude 2等模型的 API Key,虽然我不知道这是如何做到的,但觉得非常神奇,1美元额度的 API Key,在他那里只需要2元人民币,官方价格居然是他的3.6倍。
这模型名称让我搞不太明白,turbo 后面还加个数字,不过目前最好用的模型应该是 GPT-4-1106-preview 和 DALL-E-3。
借着朋友送我的额度,“嚣张”地使用着,我一个人也用不完,便部署了 ChatGPT-Next-Web 服务,将方法分享给了班上的同学,最近正好是写论文的时候,方便他们用 ChatGPT 修改自己的文章。
然后偶尔使用 DALL-E-3 文生图模型,让 AI 画出一些古诗词中的景色和场景,用了大半个月,我的感受是:太耐用,用不完,根本用不完。20美元不到,按照朋友提供的价格,折合人民币20元不到,相当于相当于购买20美元,就是20元人民币,但如果按照 OpenAI 官方的定价,就得上百块钱。
虽然是第三方代理,但能享受官方的体验,除了价格比官方便宜,速度还比官方要快,准确度和官方保持一致,可以说体验升级。调用速度和 OpenAI 直连速度没区别,稳定性和 OpenAI 一致(OpenAI 崩他们也崩),每一笔调用都能在后台清晰可见。
仅需将官方接口地址(https://api.openai.com) 更改为AIGC API的接口地址:https://api.aigcapi.io 即可快速使用。专为企业和程序开发测试人员打造,更适合企业和站长等高并发大用量的用户,均是高速 API 渠道。
目前新用户注册默认赠送1美元额度,感兴趣的可以先尝试一下,如果觉得好用,需求大的话,我可以找朋友弄点折扣和优惠码。
另外说几句题外话,自从 ChatGPT 问世,各种 AI 工具层出不穷,有真正使用 AI 技术、并且有真本事的工具,也有不少挂羊头卖狗肉的套壳服务,工具多到我用不过来,眼花缭乱,都快对“AI”这个词产生应激反应。
最后我的选择还是跟随自己的需求,不要一拥而上,ChatGPT、Perplexity、Bing Create 足够我使用很久很久,除非我产生了新的需求。
我在之前的文章《充分发挥 ChatGPT 在日常生活中的作用》中介绍过一款开源项目——ChatNextWeb,搭配 Vercel 即可部署自己的网页对话机器人,但它仅支持对话,如果想使用 DELL·E 3 模型进行文生图,似乎无法实现。最近看到另一个类似的项目——LobeChat,功能更加齐全、丰富,UI 也更加好看,便记录一下部署过程。
该项目在 GitHub 上已有 17.7k stars,这几个特性比较吸引人:
如果开通了 ChatGPT Plus,以上三点应该可以轻松实现并体验,但对我来说太贵,便找到了平替方案。
LobeChat 提供了 Docker 镜像,也提供了 Vercel 的自托管版本,两种方式我都进行了测试,都可以正常部署并使用。
在 VPS 终端输入以下命令,就可以一键安装并启动 LobeChat 服务:
docker run -d -p 3210:3210 \
-e OPENAI_API_KEY=sk-xxxx \
-e OPENAI_PROXY_URL=https://api-proxy.com/v1 \
-e ACCESS_CODE=lobe66 \
--name lobe-chat \
lobehub/lobe-chat
其中涉及到一些环境变量,OPENAI_API_KEY
是从 OpenAI 获取到的 API Key,如果你使用的 API Key 并不是来自官方,则需要加一条环境变量OPENAI_PROXY_URL
配置代理地址,比如我使用的是第三方 API Key,由 AIGC API 提供,ACCESS_CODE
是访问密码,建议设置。最后需要确保 VPS 端口 3210 保持开启且未被占用,然后通过 IP:端口的方式进行访问即可,或者进行反向代理,绑定域名使用。
使用 Vercel 部署更加方便快捷,不用登录 SSH,也不用输入命令。
进入 GitHub 项目页面,fork LobeChat 项目之后登录 Vercel,选择对应的仓库进行导入。
在环境变量部分填入相应的 Key 和 Value,如下图所示,我填写了ACCESS_CODE
、OPENAI_API_KEY
和OPENAI_PROXY_URL
,这样就可以通过 AIGCAPI 提供的第三方 API Key 使用 GPT-4 等模型。
注意,如果在环境变量里填写了OPENAI_API_KEY
等其他模型服务商的 API Key,则该服务部署成功之后可以直接使用,无需再在网站中填写 API Key,这一点在项目文档中写得比较清楚。
点击 Deploy,等待部署完成。
即可访问网站,使用服务。
切换 GPT-4 模型,打开内置的 DALL·E 3 插件,即可开启文生图模式。
除此之外,还内置了各种 AI 助手,涵盖写作、翻译、代码等方面。
最后给大家分享一家我一直在使用的第三方 API Key 提供商,AIGC API,提供高效且稳定的 OpenAI 聚合 API,相比官方20$/月的 ChatGPT Plus,它提供的 API,价格低至1美元只需要2元人民币,除了 GPT-4 模型,图中这些也可以进行调用。
最近因为写毕业论文需要,便使用 LobeChat 和 AIGC API 的服务部署了一个网站,给自己和同学使用,效果还不错。
经常看见有一些视频生成的模型出来,类型还不太一样,简单学习和调研下这个领域和相关技术的情况。在我所看到的有限的范围里,可以把近期出现的视频生成能力分成两类:
先来看看人像视频,常见有两类:
表情控制(Vimi) | 姿态控制(Animate Anyone) |
这里的技术都不是这波大模型后才有的,上个时代已经有很多做得不错,上一波爆火的蚂蚁呀嘿已经是 2021 年的事了,相关论文也是 2019 年就有了:《First Order Motion Model for Image Animation》。后面不断有新的方案,包括基于和不基于扩散模型的方案。下面列几个近期出现,看起来还行的方案。
基于扩散模型的方案,大体思路看起来是在原网络插入 pose/人脸点位 控制,跟 ControlNet 原理差不多,扩散模型本身除了 SD Unet 那套外,基本都会加入视频生成常见的 spatial-attention 和 temporal-attention。
|
|
还有几个不开源的:微软的VASA-1,阿里的EMO,都是语音对口型,朝着数字人方向做的。
非扩散模型的方案,看起来基本也是先把人脸节点生成完,再用其他的网络结构去应用到图上生成视频。
|
|
|
|
|
|
还有其他很多,MimicMotion,MuseV,Follow Your Pose,DreaMoving 等,大同小异。
视频生成模型业界除了最出名的 runway、pika、sora,也陆续有不少开源的方案出来,当前已有的开源方案基本都是基于 Latent Diffusion Model,核心是 UNet 降噪网络,基于这种网络还有不少做视频可控编辑扩展模型,DiT 架构还在路上。
|
|
|
视频生成的可控编辑是指通过各种方式控制视频生成方向,例如运动方向、内容替换、风格迁移等,原理上跟图片生成的 ControlNet / IPAdatper 等机制差不多,基于上述视频生成基础模型,训练扩展模型插入原网络,控制生成方向。
图生视频控制
大部分视频生成是图生视频,在图片上圈选运动范围和运动轨迹是很自然的诉求,一代目 Runway 上的 Motion Brush 就是做这个,基本应该应该是后续正经视频生成模型的标配,也有开源模型基于 SVD 等基模做了这个能力。
|
视频内容编辑/风格化
这一类指 Video to Video,修改原视频上的元素,替换衣服、人物等,部分也包含了视频风格迁移能力。
|
|
|
DiT(Diffusion Transformer) 是视频生成基础模型的一个算法架构,应该放在基础模型部分的,但它太新了,想单独抽出来细看一下。
上面大部分模型,包括可控性的扩展模型,核心底层都是基于经典的 UNet 架构,但 Sora 出来后,业界公认 DiT 架构才是未来,毕竟效果太碾压了,最近可灵 / Luma 的出现也印证了这点。架构范式转移到 DiT 后,原先在 UNet 上做的各种可控雕花,看起来基本上是没法迁移到 DiT 架构的,一切得重来。
DiT 架构开源的只见到去年11月 sora 出来之前的 Latte,研究性比较多,效果一般。其他靠谱的开源模型还没见到,毕竟 Sora 还没见影,可灵和 luma 也刚出。(DiT架构的图片生成就有一些,比如腾讯混元)
DiT的架构图,与 LLM 的架构同源,核心是 transformer 模块,跟基于 UNet 的模型都不一样,我们尝试来看看在这个架构下视频生成的推理过程:
可以看到跟其他的 UNet 为核心的架构有本质差别,像 ControlNet 各种可控性的研究没法迁移,需要另外找控制路径。从业界在这领域卷的程度看,预期发展还是会非常快,等下一个 DiT 架构的靠谱视频生成模型开源,也应该很快会有人在上面把相关可控能力不断研究补齐了。
这个领域给我感受是模型超多,看不完跟不上,只能先了解个大概,在有具体应用场景时,再根据需求做相应深入的调研。
为什么这么多模型?看起来它训练的资源门槛没那么高(比 LLM 低),有公开训练数据集(WebVid 和 LAION),论文上都会把方法给出,width=甚至模型和代码也开源,各研究者很容易从中吸收学习做改进,再造一个模型,现在也没出现一个效果通用秒杀一切的模型,所以三天两头出个新模型是常态。
DiT 架构后,视频生成和视频编辑这些模型大概率要淘汰,而人像视频可能在较长一段时间内仍有应用空间,如果要做 AI 视频短片,人物表情动作精细控制挺重要,DiT 架构目前还没看到有能做到精细控制的技术,基于 Unet 的通用视频生成模型这么长时间也没法做好这块的可控性,可能一段时间内还得靠原有技术做这里的可控后编辑。
Transformer 作为新 AI 时代的基石,有必要深入了解下。网上对 Transformer 的教学文章/视频非常多,很多讲得很好,像 3Blue1Brown 的讲解视频,以及这篇文章。整个详细过程原理写不来,本文主要记录一下其中我觉得比较容易混淆的 Attention 模块运算过程,主要是里面的 Q K V 的概念/运算过程/作用。
这是 Transformer 架构图,左边是 encoder,右边是 decoder,实际 LLM 大模型是只由右边 decoder 构成,这里面大部分是常用的 Feed Forward(前馈网络)/ Add(残差连接)/ Norm(层归一化),核心还是 Multi-Head Attention 模块,我们来具体看看 Multi-Head Attention 模块里做了什么。
假设一个字是一个 token,输入是”我有一个玩”(用于推测下一个字”具“),5 个字,每个字用一个向量表示,每个向量假设是 9 维(GPT3 是 12288 维),也就是用 9 个数值表示这个字,那每个词顺序排下来,就组成了 5 行 9 列的输入矩阵,称他为 X,每一行代表一个词。
6每一个圈圈代表一个数值。”我“字由蓝色的9个数值表示,“有”字是绿色的9个数值。这 9 个数值组成一个 9 维向量,这里每个字对应的向量值是一开始定好的,至于怎么定的不细说,可以看看相关文章。
这个输入矩阵经过 Multi-Head Attention 模块运算,输出另一个同宽高的矩阵,接下来详细看看这个运算过程。
Multi-Head Attention 是由多个 Self Attention 模块拼接而成,如果它只有一个 head,就是一个 Self Attension 模块。
Self Attention
Self Attention 模块里,会包含 Wq Wk Wv 三个参数权重矩阵,模型训练过程就是不断调整 Wq Wk Wv 里的数值。
这几个权重矩阵的行和列数,需要满足:
所以如果这里是单个 Self Attention,Wq Wk Wv 就是行数和列数都是与词向量维度一致的矩阵,也就是 9×9。
Multi-Head Attention
但这里希望模型能捕获到单词间的多种不同注意力,所以会把它拆出来再拼接。假设把它拆成 3 个 head,那就是能捕获到 3 种单词之间不同的关系。这里拆出来的 3 个 head 就是 3 个 Self Attention 模块,每个模块有自己的 Wq Wk Wv 矩阵,行列数是 9 x 3。这里每个 Self Attention 独自进行注意力运算后,再组合拼接。
这里文字描述得比较绕,见后续运算过程和结果的图示比较清晰。
先来看这里每个 Self Attention 模块的运算过程。
这里输入向量分别与 Wq Wk Wv 相乘,得到新的矩阵 Q K V,Q(query) K(key) V(value) 名字已经对应了它的含义,看完它的运算过程后,再来补充下对它含义的理解。
可以认为这里 Q K V 这几个新的矩阵,每一行仍然是表示一个单词 token 向量,只是换了种表示 (矩阵的乘法特性,例如第一行里的每一个数据都是由原矩阵第一行与 W 矩阵运算得来,与其他行无关)。
下图是 Q 矩阵的运算过程,K V 的过程一样,只是 W 权重矩阵的值不同,略过。
接着要做的是,计算每一个单词对于其他单词的 Attention 系数,这是一个两两可重复排列组合。上面 5 个单词,每个单词都 K 矩阵里的自己以及其他所有单词逐一计算出一个值,生成一个 5 x 5 的矩阵。这个矩阵的计算方式就是 Q*KT(K的转置矩阵),由矩阵乘法特性可以看出,这样算出来的矩阵,就是单词之间的关系值,比如第一行第五列数值,就是“我”和“玩”之间的注意力关系值。下图用颜色表示这个过程。
相乘后对这个矩阵进行 softmax (在这之前还会除以 √dk 向量维度,可以先忽略),每一行的和都为1,这里的矩阵第 i 行的数据表示的是第 i 个单词与其他单词的关系,这里归一化后,数值可以表示理解为,从全文范围上,每个单词对这第 i 个单词的重要程度比例。
最后这里的 Attention 系数矩阵,与矩阵 V 相乘,得到的是新的结合了每个单词之间 Attention 信息的矩阵。输出的矩阵中每一行还是表示一个单词,但这个单词向量经过这里注意力运算后,每个单词向量都集合了上下文每个单词的注意力信息。
单独拆除这里的第一行看看它的意义,单词”我“跟每一个字的注意力权重,再乘以每个字在 V 矩阵里的向量表示,结果再相加,组成最后的结果。比如这里第一个字”我“跟第三个字”一“的权重是0.1,那”一“的向量值对运算后最后表示”我“这个字的向量结果影响很小,如果是 0 就是没有影响。
上述整个过程,可以用这个数学公式表示:
Multi-Head Attention 模块里每个 Self Attention 模块都做同样的运算(但里面的 Wq Wk Wv 权重不同,数值结果不同),拼接起来,形成最终的结果,这个结果矩阵里,每一行每个字的表示,都已经集合了与其他所有字的注意力关系信息。
整个过程实际上还有个掩码的机制,按上述运算,这里输出的每个单词向量都包含了上下文所有的信息,通过掩码机制,会变成每个单词只包含单词所在前面位置的信息,比如第二行“有”只包含了“我”和“有”的信息,没有后面”一“”个“”玩“的信息。这里不继续展开了。
这里每一行包含了前面所有单词的注意力信息,也就可以通过这里的表示预测下一个单词,所以从这个矩阵最后一行“玩”的向量数值,就可以用于预测对应下一个单词是什么。
整个 Multi-Head Attention 的运算过程大致是这样了。实际模型如 GPT3,单词向量维度是12288,上下文长度2048(每个 token 都要跟2048个token计算注意力),每个 Multi-Head Attention 分成 96 个 head,同时有 96 层叠加,也就是 96 个 Multi-Head Attention,运算量是巨大的。
Q 可以理解为原输入的词数据,拿着这个数据找谁跟我有关系。K 是被找的数据,用于计算输入的每个词之间的关系。Q 和 K 是为了算出 Attention 关系系数,知道每个 K 的数据跟 Q 是什么关系。
如果 Q 和 K 是同个输入变换来的,那就是自注意力,如果是不同输入变换来,那就是交叉注意力,比如 Stable Diffusion 里 Unet 的交叉注意力模块中,Q 是文字 prompt,K 和 V 是图片信息,Q 与 K 计算的是文字与图片信息的 Attention 关系系数。
K 和 V 是同个数据源,这个数据源,从 Q 和 K 的运算知道每个 Q 与数据源的关系系数,再与数据源做运算就是把这个关系数据作用到源数据上,源数据去做相应偏移,也就是可以在 Q 的作用下对源数据做相应推测。
为什么这样一个算法架构,能衍生出智能,而且这个架构能扩展到多模态,语音、图像、视频基于它都有非常好的效果?我个人理解,最核心有两个点:
其他算法架构如果能充分融入上下文信息,规模大了也能有智能,只是 Transformer 可并行运算的特性,让目前的计算机算力可以触摸到涌现的那个点。