MoreRSS

site iconShadow Walker | 松烟阁修改

Where other men are limited by morality or law, remember, everything is permitted. I walk in the darkness to serve the light.
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Shadow Walker | 松烟阁的 RSS 预览

Weekly Collections 10

2025-03-08 23:30:13

我相见恨晚的 50 个清洁好物

items Details
by 即刻
date 2025-03-04 13:47:08
source 我相见恨晚的 50 个清洁好物

原文链接我相见恨晚的 50 个清洁好物 电器 1. 小米 除湿机 - 即刻App


和曾经的朋友渐行渐远怎么办? 其实,我们人生中遇到的大多数

items Details
by 即刻
date 2025-03-04 13:51:03
source 和曾经的朋友渐行渐远怎么办?

和曾经的朋友渐行渐远怎么办?

其实,我们人生中遇到的大多数朋友,最终的结局就是渐行渐远。有些是因为物理距离的改变:毕业了、换工作了、又去读书了,大家逐渐四散到不同城市。有些是因为人生阶段的不同:陷入热恋的、结婚的、尤其是生娃的朋友,生活和话题都逐渐不再重叠。还有一些是因为成长速度的差距:你突然觉得,以前很聊得来的朋友,渐渐没话题了。

这些都是很常见,很自然,也很正常的。

如果把人生比作一个游戏,那么这个游戏最初会有很长一段时间,大家是在一个play

ground上玩的。在这个大广场上,你会遇到很多不同的朋友,其中要好的会经常跟你在这个广场上碰面一起玩。但花无百日红,这个游戏的下一环,就是要离开这个广场,踏上自己的旅程。

有些朋友会在各自踏上旅程的时候就不得不分道扬镳,有些会跟你同路,但随着岔路的出现,朋友会陆续跟你走上不同的方向,还能留在你身边的人,必然是越来越少的。

这种时候,最好的心态是:let it be。你还是可以努力去维系你们的友谊,如果能维系成功那非常棒,如果觉得越来越勉强,或对方的态度已经发生了改变,那随TA去吧。这不代表我们不珍惜友谊,这只代表我们成熟起来了,能面对人生真相。

接下来怎么办呢?

☀️

短期内,你需要不定期结交新的朋友。

每个人都应该养成这样的习惯,因为对绝大多数人来说,身边能谈得来的朋友越来越少是必然的事

前面说的三个理由总会至少中一个。哪怕你们一直在一起(物理距离没变),人生阶段也同步(差不多时间结婚,差不多时间生娃),那也可能因为成长速度不一致而越来越没有话聊,或有一些生活变化导致你们暂时聊不到一块去了。

我十多年前回国的,当时一起玩的十几个朋友中,现在还经常一起玩的,只剩一两个了。我在香港的时候,也有一大波玩得很好的朋友,现在还经常一起玩的,也只剩下一两个了。但是我一路在逐渐结交新的好朋友。这是我对自己的责任,也是我的机会。

我有一个朋友,认识非常久了。他是上海人,因此跟同是上海人的几个哥们(大学同学),一直保持非常亲近的关系,每周必约出来吃几次饭玩几次游戏,几十年了仍然交往频繁。他跟我这种蒲公英型人(到处飘)完全相反,拥有最稳定的朋友圈。但他最近被公司外派去外地了,你看,还不是要开始结交新朋友🤭。

所处,结交新朋友,才是人生常态。很多人只是在play

ground上太久,没有意识到那种大家都经常能碰到的状态才是暂时的,流动和变化才是常态罢了。一旦你开始接受和习惯这种不断流动的人生,你就更容易打开自己,结交跟当下自己的人生阶段和状态更相似的新朋友。

☀️

还有一个好消息是,长期来看,很多朋友会兜回来,重新相遇。

我刚回国玩的那批朋友中,有一个后来公司外派去了新加坡,就此失去了联系。后来她其实回来了,但结婚、生子、一阵忙乱,我们也没有重建联系。现在孩子五六岁了,她新工作也更熟练了,终于有空约了,我们又重新建立了联系。

还有一个朋友,距离我们上一次见面,她经历了投资人撤资,合伙人撕破脸,自己生娃养娃,各种鸡飞狗跳,现在公司已回正轨,娃也更好带了,我们最近又见上了。

上野千鹤子也曾经表述过类似的过程,日本女性一结婚,回家做了家庭主妇,后续又开始生娃养娃,友谊的小船就会暂时收帆靠岸。但等到孩子们长大离巢,或其中有一些朋友开始离婚,她们就逐渐又回到了女性朋友们的这个小团体,友谊的小船又会扬帆出海。

所以大家面临暂时的分别,也不用太伤感。大家只是阶段性地有自己要单独探索的路走,但兜兜转转,总会在某个角落重逢,讲起这些年各自的精彩,然后再度启航。

这些我们无法预测的岔道、离别、重逢,和与新旅伴的相遇,都是旅程精彩的一部分呀。

原文链接和曾经的朋友渐行渐远怎么办? 其实,我们人生中遇到的大多数 - 即刻App


乾隆的性格

items Details
by hutusi
date 2025-03-04 14:40:33
source 乾隆的性格

探讨了乾隆皇帝的统治特点,包括他的幸运、聪明、仁慈以及节制。乾隆继承了祖父康熙和父亲雍正打下的坚实基础,在位期间中国人口和实际控制领土面积均达到了历史巅峰,创造了康雍乾盛世。但其闭关锁国政策、对文字狱的滥用及对臣民思想的严格控制也导致清朝逐渐走向衰落。乾隆个人虽极为聪明且在初期表现出勤奋与节制,但晚年却沉迷于收藏并纵容腐败,为后世留下了深刻教训。

原文链接乾隆的性格


肖恩·贝克:边缘世界的温柔记录者 |【经纬低调分享】

items Details
by 微信公众平台
date 2025-03-04 14:46:57
source 肖恩·贝克:边缘世界的温柔记录者 |【经纬低调分享】

本文介绍了导演肖恩·贝克及其电影《阿诺拉》在2025年奥斯卡颁奖典礼上获得四项大奖的情况。贝克以记录社会边缘人物的故事而闻名,其作品包括《外卖》、《佛罗里达乐园》等。文章回顾了贝克的职业生涯,特别是他如何通过低成本制作和非传统演员来讲述被主流忽视的故事,并且强调了他的电影对性工作者、无家可归者以及移民群体的人文关怀。

原文链接肖恩·贝克:边缘世界的温柔记录者 |【经纬低调分享】


说说你们步入社会的第一课吧

items Details
by V2EX
date 2025-03-04 14:48:49
source 说说你们步入社会的第一课吧 - V2EX

我是指被教做人的那种,或者是说上的第一当,见识到社会的险恶。我自己是上班两三年的时候出租房被入室盗窃后在 58 同城上想买个备用电脑,是面交的,到地方被带到一个破铁皮房里,里面什么都没有,就一个挺破的电脑,这我都没意识到上当,还看了配置,去的路上那女的还探我的口风,看我懂不懂电脑,怎么说呢,真的就鬼迷心窍了,非得相信能捡个大便宜。

另外我也好奇有没有人生来比较精明,就完全没有这个上当的经验。

原文链接说说你们步入社会的第一课吧 - V2EX


人艰不拆啦 - 即刻App

items Details
by 即刻
date 2025-03-04 19:37:12
source 人艰不拆啦 - 即刻App

原文链接人艰不拆啦 - 即刻App


最全梳理:一文搞懂 RAG 技术的 5 种范式! | BestBlogs.dev

items Details
by 张龙斐
date 2025-03-04 19:55:15
source [最全梳理:一文搞懂 RAG 技术的 5 种范式!

本文回顾了检索增强生成(RAG)技术的发展历程,从最初的朴素RAG到最新的AgenticRAG。文章介绍了RAG的基本概念、发展历程以及五种主要范式:朴素RAG、高级RAG、模块化RAG、GraphRAG和AgenticRAG。每种范式都有其特点和改进之处,例如高级RAG通过优化检索策略提高了检索质量,模块化RAG提供了更高的灵活性,而GraphRAG则利用知识图谱增强了信息检索的准确性。此外,文章还讨论了RAG在工程实践中的应用工具和常见问题,并总结了构建RAG系统时的最佳实践。

原文链接最全梳理:一文搞懂 RAG 技术的 5 种范式! | BestBlogs.dev


发现一个摸鱼好去处, 情感话题比较多 - V2EX

items Details
by V2EX
date 2025-03-05 14:07:32
source 发现一个摸鱼好去处, 情感话题比较多 - V2EX

Dcard 论坛

链接: dcard.tw/f/relationship

哈哈哈 内容有点刺激 看嗨了

原文链接发现一个摸鱼好去处, 情感话题比较多 - V2EX


美元降息之后,你还需要知道的5件事

items Details
by 刘润
date 2025-03-05 14:23:01
source 美元降息之后,你还需要知道的5件事

这篇文章解释了美联储降息对全球经济的影响。首先介绍了中央银行的作用,特别是美联储作为美国的中央银行,如何通过调整利率来实现经济平稳增长和抑制通货膨胀的目标。接着详细说明了利息的本质,即资金在时间维度上的价格,并讨论了货币供应量与利息这两个调控工具。最后,文章探讨了美元在全球经济中的特殊地位——美元霸权,以及为什么美联储的决策会引起全球关注。

原文链接美元降息之后,你还需要知道的5件事


「刷题、考试、升学、考证、毕业、找工作、结婚、买房」

items Details
by 即刻
date 2025-03-05 14:29:57
source 「刷题、考试、升学、考证、毕业、找工作、结婚、买房」- 即刻App

「刷题、考试、升学、考证、毕业、找工作、结婚、买房」

这是一条非常典型的东亚社会的人生发展路径。这条路径本质是在为你积累人力资本,有了人力资本之后,你可以用它换取生存资料。然后你就可以结婚生子,让这种模式自我复制下去。

​如果你人生的前三分之一只专注为自己积累人力资本,你会缺少一样东西:社会资本。

​社会资本简单说就是,你在群体里面,通过贡献、合作、交换资源,从而获得群体对你的信任、认可和声望。社会资本可以转化成其他资本形态。

​只求人力资本不求社会资本,不会影响你进入社会,以及实现温饱。可能

35

岁之前,你都不会觉得没有它有什么影响。

但当你有了孩子想给

ta

更好的资源,或者你想往管理岗发展,或者你想跳出来自己攒局,那你就会发现:没有社会资本,寸步难行。

你努力拼搏很多年,才考取了好学校,找到了好工作,人力资本的积累不是一日之功。

社会资本也是一样,你不要指望一天就能完成积累,这里面的学问不亚于你再读一个学位。

举一个最简单的例子,很多人搞社群,搞着搞着就死掉了。想着发红包来暖群,一开始有用,但发着发着就没效果了。人家只会觉得有便宜不占白不占,并不会记着你。这就是想快速积累社会资本,但是失败的例子。

还有一个误区,有人以为积累社会资本=攀附权贵。

很多权贵离开了他的位置,他就没有影响力了。如果你是在攀附他,这时候你也会毫不犹豫地离开他,对吧?

这就不是一种健康的共生关系,而是单纯的利用。

习惯攀附别人的人,也是从小欠缺了社会资本的积累,不懂得如何在强者面前不卑,在弱者面前不亢。

怎样才算有社会资本的意识呢?

比如你会开始看重自己的声誉,你不会随便拿别人对你的信任来牟利;比如你父母对你的教育很全面,你们还有家学家风的传统;比如你在和小朋友打球,你偶尔会故意输给他,让他很开心;比如你在一个社区里,大家都很尊重你,不全是因为你的权力和金钱…这些都是有社会资本意识的显现。

有时候在职场上发展不顺利,不是因为你不懂套路,不会攀附上级。如果你的解决方案是去攀附上级,那你还要确保你的上级,和他的上级也是穿一条裤子的,这就没完没了。

套路是在教你零和博弈,而积累社会资本需要你学会跟他人互利共生,不是一个方向。

尽早意识到我们在追求人力资本的时候,也需要积累社会资本。人力资本让我们有饭吃,社会资本让我们吃的更好。

​那些周末到图书馆组织读书会的年轻人,他们可能没有意识到,自己正在积累社会资本。在开源社区分享的人也是一样。

原文链接「刷题、考试、升学、考证、毕业、找工作、结婚、买房」- 即刻App


都不容易

items Details
by 即刻
date 2025-03-05 14:33:43
source 都不容易 - 即刻App

原文链接都不容易 - 即刻App


我要你葳蕤且长青 - 读书成诗 - LINUX DO

items Details
by LINUX DO
date 2025-03-06 10:55:09
source 我要你葳蕤且长青 - 读书成诗 - LINUX DO

我要你葳蕤且长青

每一次的旧事重提
都像在过往的漩涡里风声鹤唳
一生要淋一万场雨
才能邂逅春和景明
骤雨初歇后
携一瓣桃花
与二两浊酒共饮
敬颂这顽强且鲜活的生命

0
粘贴的图像

原文链接我要你葳蕤且长青 - 读书成诗 - LINUX DO


日本,旅人的形狀

items Details
by 張維中官方網站
date 2025-03-06 11:44:50
source 日本,旅人的形狀

日本,旅人的形狀 :從長野出發,東北下車,33種日本在地人的自遊之道

日本,旅行的模樣
大到一座阿蘇火山,小到一份盤中蕨餅
體驗旅途上的「非日常」

和家人搭上日歸巴士、在火山騎馬、吃著蕨餅去旅行
草原上的瑜珈課、來去鄉下住一晚
  
路途中,
形塑旅人另一種可能性

原文链接日本,旅人的形狀


拿自己的预期作为Base line,必然会评价两极化

items Details
by 即刻
date 2025-03-07 10:49:30
source 拿自己的预期作为Base line,必然会评价两极化:「神了 - 即刻App

李继刚

拿自己的预期作为Base line,必然会评价两极化:「神了!」 「就这?」

因为「自己」的预期,不是一个Solid的基准平台。多读一篇文章,可能都会影响它的上下波动。更何况千人千面,众口难调。

更好地观测视角,是不是可以尝试放在相对值上面?

  • 这东西进化速度如何?
  • 未来三个月它会变成什么样?未来一年呢?
  • 它是不是代表着更好的未来?

尝试着切换到「相对时间内的相对进步」的斜率视角,看看如何?

热门评论

是不该跟着媒体高估短期的改变,但也不要低估长期的改变。我还记得木遥23年评价chatgpt,“大家都在耻笑大猩猩算数算错了,却没人思考到大猩猩会算数意味着什么”

原文链接拿自己的预期作为Base line,必然会评价两极化


刚才连线听了 Manus team 早晨的小型朋友沟通会

items Details
by 即刻
date 2025-03-07 10:56:01
source 刚才连线听了 Manus team 早晨的小型朋友沟通会 - 即刻App

杨远骋

刚才连线听了 Manus team 早晨的小型朋友沟通会,几点 takeaway:

  1. 做产品实现了 SOTA,打榜超越 OpenAI DeepResearch 的那一晚, @PeakJi
    @hidecloud 泪洒办公室;
  2. 做垂直领域的 AI Agent “可能有点不靠谱”,Manus 打败了 YC W25 几乎 3/4 的 Agent startups
  3. 团队做 Manus 过程中,最关键的一个信念:「Less Structure, More Intelligence」
  4. AI Agent 产品的指标不应该是 DAU,而是:AHPU - Agentic Hours Per User
  5. 从 Manus 开始,AI Agent 相比于 Chatbot,对 token 的消耗是指数级的翻越,今年的推理需求会 100-1000 倍的上涨。利好 NVDIA 和云厂商。
  6. 目前 Manus 单任务成本 2 USD,是远低于业内平均的水平,但仍有继续优化的弹性。
  7. 最后一个(不是今天分享会上提到的)小彩蛋,在给 Manus 起名字时,我也参与了一丢丢脑爆和讨论,一度很上头「dodo.ai」这个名字(域名注册 get),slogan 就叫做「Just DODO it」,会非常有记忆点。但最后选择「Manus」,它是拉丁语中「手」的意思。
  8. 从 2025 年开始,AI 要卷的不再是「思考」能力,而是「行动」能力,这也是「十字路口」2025 开年第一期播客,和 @yusen(同样是 Manus 投资人)对谈的标题:《2025 开年对谈: AI 关键之年,Agent 开启元年》

————
看到 Manus 掀起这样的热浪,我从昨晚到现在都非常兴奋,this is the best age.

也想起昨天「暗涌」文章末尾的这句话:等到 2035 年,回看这十年发生什么,我赌 AI 跟机器人会到处都是,新一代的创业者还会打造更多大疆和 DeepSeek。那时候,我们一定会清醒自己经历了以最好的 vintage。

Manus单任务成本2美元

原文链接刚才连线听了 Manus team 早晨的小型朋友沟通会,几 - 即刻App


判断人生是否成功的标准,是问高中的你自己

items Details
by 即刻
date 2025-03-07 10:58:31
source 判断人生是否成功的标准,是问高中的你自己 我最近时长在想, - 即刻App

判断人生是否成功的标准,是问高中的你自己

我最近时长在想,怎么去判断自己现在的生活是否“成功”,是不是真的开心,是不是真的认可自己呢?抑或其实你意识不到自己一直活在迎合外面的世界之中

比如,外面的世界当然提供了各种“成功”人生的判断标准,最广受认可的当然是赚钱能力,退而求其次还有社会地位,是否赢得某些荣誉等等…

但我发现,最终能够让你达到了所谓的外界认可的成功标准后,在深夜审视自己的内心时依然不觉得人生空虚和失败的方法,就是问问年轻时的自己,尤其是高中时的自己

为啥?

在教育界有一句格言,“高中永不结束。”,意思是一个人的三观基本是在高中就形成了,你这辈子的行为方式基本就是高中时的复刻

而且高中阶段是你拥有了基本稳定的三观后,又不用面对进入社会养活自己的“现实压力”的一段很微妙的时光,于是你会发现,高中时大家都会在完全理想化的想象中畅想自己未来最好的样子,但又不至于太过脱离现实

于是,高中的你自己可能就是你这辈子最理想化的自己

那么,判断你自己的人生是否“成功”,不妨每年坐下来花几分钟和高中的自己完成一次对话,想象他就坐在你的对面,陌生而又好奇地看着你,你向他娓娓道来

你是谁?你现在在做着什么事情?曾经做过哪些你觉得最自豪的事?爱过恨过哪些人?现在有哪些痛苦和烦恼…

那么,在讲完这些后,你觉得对面那个高中的孩子未来会想成为现在的你吗?

“你还年轻,可以成为任何你想成为的样子。”——《蓝色大门》

原文链接判断人生是否成功的标准,是问高中的你自己 我最近时长在想, - 即刻App


女性营销say no ,38条

items Details
by 数英网
date 2025-03-07 11:03:29
source 女性营销say no ,38条

01

不要把女性,当作营销里的ZZ议题。

02

不需要在这一天,唯女独尊。

03

一年365天,女性不需要在这一天尤其觉醒,尤其独立,尤其变大变强变锋利。
省省要付费的仪式感。

04

和她们的所有一切,平摊在了每一个日日夜夜,而且还会持续下去。

突然的仪式感,突然的关注行为,怎能不算是可疑?

05

不要用文案中的「女性」,套路收买活在真实的女性。

06

不要用煽情的音乐、三流的心理学名词,习惯性地制造一种弱女叙事、被压迫者/受委屈形象。

弱,是会循环的。

07

不要假以共情的名义,制造必要性不足话题性有余的男女对立。

让她们更加自我垂怜于女性处境,也让性别之间的有效对话,越来越难发生。

08

没有异性参与的女性议题讨论,真实的价值性又有几何?

更糟的是这种情况——在一场女性对话的背后,有力量在操控,带着目的悄悄退出。

09

不要表演。

10

不要贩卖。

11

不要明明是满屏的商业符号,偏偏要等价代换成女性精神。

12

数学好的女性,有很多。

那种将数字游戏包装成文科话题的把戏,无论是女性还是文科生,都能一眼看穿并狠狠讽刺。

13

也停一停内衣、月经之类的过度叙事吧。

14

完全不必通过关注女性特征的方式,来关注女性。

理由这么含混,究竟只是因为思考上的偷懒,还是潜意识里物化/性征化女性的表现。

15

反过来说,男性对内衣的要求就低到,广告人都懒得营销的地步了吗?

还是,男性的生理结构就简单到,无需科普生理卫生知识?

16

尤其是习惯性给卫生巾话题,蒙上一层公益色彩或苦情叙事氛围的,

除了显得正确之外,别无高尚可言。

17

当然也别将“强女叙事”,刻意削尖成一把利刃。

方便谁,插向任何一个有利可图的话题或讨论圈。

18

总之,不要把女性单独作为一种方法。

19

不要让女性这个中性词,变得主义。

20

不要组织一场数字游行队伍,振臂高呼女性口号。

究竟其中有几个具体的女性,是在参与。

21

僵尸ID的背后,只有目的,没有性别。

22

不要根据性别,划分榜样力量。

23

不要因为一个榜样是女性,就唯一定性为女性力量。

24

谷爱凌、郑钦文、李娟、滕丛丛、邵艺辉……

哪一个个体,不是闪闪发光。

她们的名字,先于她们的性别之前。

25

在真正的杰出面前,“女性力量”这个定义就会显示出它的局限性,或一种隐形的天花板。

26

不要对于女性的成就,大惊小怪。

27

也不要因为成就者是女性,就上纲上线上价值。

28

不要对女性,单独画一个圈。

29

也不要用女性这个圈,圈住所有性别是女的,她们。

30

不要武器化。

31

不要议题化。

32

不要政治化。

33

不要怂恿站队。

34

不要绝对正确。

35

不要社交货币化,又俗又臭。

36

借用一句“不要走在我的后面,因为我可能不会引路;

不要走在我前面,因为我可能不会跟随;请走在我的身边,做我的朋友。”

37

不要之前,也不要之后,来到女性的身边,做我们的朋友。

38

最后:你怎么知道,这个叼着烟斗的账号下正在码字的,不是一个女性。

原文链接女性营销say no ,38条


《浮生六记》中的美味与苦涩

items Details
by 经观书评©
date 2025-03-07 11:10:35
source 《浮生六记》中的美味与苦涩

文章讲述了沈复与陈芸的爱情故事,通过一碗粥串联起他们的生活点滴。从相识到相守,二人经历了许多甜蜜和坎坷。文中还提到饮食观、空调观等现代婚姻观念的重要性,并以《浮生六记》中的情节为例,展示了古代夫妻间的相处之道。

原文链接《浮生六记》中的美味与苦涩


孤独正在啃食你的大脑?

items Details
by 追问Nextquestion
date 2025-03-07 18:59:12
source 孤独正在啃食你的大脑?

这篇文章探讨了孤独对大脑的影响,特别是在极端条件下如南极科考站的研究。研究发现,长期社交孤立会减少前额叶皮层体积和神经营养因子水平,这些变化与决策能力、情绪处理有关。此外,孤独感与默认网络(default network)的活动增强相关,而这一网络涉及想象中的社交互动。文章还提到,孤独可能是进化过程中的一种适应机制,类似于饥饿感,促使人们寻求社会联系。解决孤独的方法包括认知行为疗法、鼓励信任和同步性以及药物治疗等。

原文链接孤独正在啃食你的大脑?


小本本系列:langchain编程框架(2)

2025-03-08 14:43:17

AI Agent 作为2025年的绝对的技术风口,程序员比较关心的是如何开发 AI Agent,Agent 本质上是基于大型语言模型(LLM)的应用程序,所以这个问题本质上就是程序员如何基于大语言模型开发应用。

LangChain 是一个开源框架,用于构建基于大型语言模型(LLM)的应用程序,LangChain 提供各种工具和抽象,以提高模型生成的信息的定制性、准确性和相关性。例如,开发人员可以使用 LangChain 组件来构建新的提示链或自定义现有模板。LangChain 还包括一些组件,可让 LLM 无需重新训练即可访问新的数据集。

架构设计领域有个比较流行的术语——乐高架构,当然也可以叫可插拔架构。说白了就是通过对系统基本组件的合理抽象,找到构造复杂系统的统一规律和可达路径,从而实现在降低系统实现复杂度的同时,提升系统整体的扩展性。LangChain 实际上也遵循了乐高架构的思想。当然,作为最关键的乐高组件之一,LLM 的能力自然是我们优先了解的对象,那我们就从 Qwen 的 API 开始吧!

初步封装--SDK

使用 LangChain community 集成包来进行 Qwen 调用可以大大降低代码的开发成本。

代码示例参考:

# %pip install langchain langchain-core langchain-community
from langchain_community.chat_models import ChatTongyi

llm = ChatTongyi(temperature=1.0, model="qwen-turbo", max_retries=50)
response = llm.invoke("介绍一下langchain框架")

print(response)

数据抽象--IO

对于文本生成模型服务来说,实际的输入和输出本质上都是字符串,因此直接裸调用LLM服务带来的问题是要在输入格式化和输出结果解析上做大量的重复的文本处理工作。LangChain当然考虑到这一点,提供了Prompt和OutputParser抽象,用户可以根据自己的需要选择具体的实现类型使用。

代码示例参考:

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatTongyi

# 创建LLM
llm = ChatTongyi(temperature=1.0, model="qwen-turbo", max_retries=50)

# 创建Prompt
prompt = ChatPromptTemplate.from_template("{question}")

# 创建输出解析器
output_parser = StrOutputParser()

# 调用LLM
message = prompt.invoke({'question': '介绍一下langchain框架'})
response = llm.invoke(message)
answer = output_parser.invoke(response)
print(answer)

链式调用--chain

模型的 IO 组件确实可以减少重复的文本处理工作,但形式上依然不够清晰,这里就引入了 LangChain 中的关键概念:链(Chain)。

LangChain 的表达式语言(LCEL)通过重载__or__运算符的思路,构建了类似 Unix 管道运算符的设计,实现更简洁的 LLM 调用形式。

代码示例参考:

# 创建Chain
chain = prompt | llm | output_parser

# 调用Chain
answer = chain.invoke({'question': '介绍一下langchain框架'})
print(answer)

Runnablethrough

当然,为了简化 Chain 的参数调用格式,也可以借助RunnablePassthrough透传上游参数输入。

from langchain_core.runnables import RunnablePassthrough

# 创建Chain
chain = {"question": RunnablePassthrough()} | prompt | llm | output_parser

# 调用Chain
answer = chain.invoke('介绍一下langchain框架')
print(answer)

DAG

Chain 也可以分叉、合并,组合出更复杂的 DAG 计算图结构。

代码示例参考:

from operator import itemgetter

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_community.chat_models import ChatTongyi

# 创建LLM
llm = ChatTongyi(temperature=1.0, model="qwen-turbo", max_retries=50)

# 创建输出解析器
output_parser = StrOutputParser()

# 创建Prompt
topic_prompt = ChatPromptTemplate.from_template("生成一种'{input}'的名称")
good_prompt = ChatPromptTemplate.from_template("列举{topic}的好处:")
bad_prompt = ChatPromptTemplate.from_template("列举{topic}的坏处:")
summary_prompt = ChatPromptTemplate.from_messages(
    [
	    ("system", "生成最终结论"),
        ("ai", "{topic}"),
        ("human", "好处:\n{good}\n\n坏处:\n{bad}"),
    ]
)

# 创建组合Chain
topic_chain = topic_prompt | llm | output_parser | {"topic": RunnablePassthrough()}
goods_chain = good_prompt | llm | output_parser
bads_chain = bad_prompt | llm | output_parser
summary_chain = summary_prompt | llm | output_parser
chain = (
    topic_chain
    | {
        "good": goods_chain,
        "bad": bads_chain,
        "topic": itemgetter("topic"),
    }
    | summary_chain
)

# 调用chain
answer = chain.invoke({"input": '常见水果'})
print(answer)

通过调用chain.get_graph().print_ascii()可以查看 Chain 的计算图结构。

                                   +-------------+                               
                                   | PromptInput |                               
                                   +-------------+                               
                                          *                                      
                                          *                                      
                                          *                                      
                               +--------------------+                            
                               | ChatPromptTemplate |                            
                               +--------------------+                            
                                          *                                      
                                          *                                      
                                          *                                      
                                   +------------+                                
                                   | ChatTongyi |                                
                                   +------------+                                
                                          *                                      
                                          *                                      
                                          *                                      
                                 +-----------------+                             
                                 | StrOutputParser |                             
                                 +-----------------+                             
                                          *                                      
                                          *                                      
                                          *                                      
                              +-----------------------+                          
                              | StrOutputParserOutput |                          
                              +-----------------------+                          
                                          *                                      
                                          *                                      
                                          *                                      
                                   +-------------+                               
                                   | Passthrough |                               
                                   +-------------+                               
                                          *                                      
                                          *                                      
                                          *                                      
                          +-------------------------------+                      
                          | Parallel<good,bad,topic>Input |                      
                          +-------------------------------+                      
                        ******            *             *****                    
                   *****                   *                 *****               
                ***                        *                      ******         
+--------------------+          +--------------------+                  ***      
| ChatPromptTemplate |          | ChatPromptTemplate |                    *      
+--------------------+          +--------------------+                    *      
           *                               *                              *      
           *                               *                              *      
           *                               *                              *      
    +------------+                  +------------+                        *      
    | ChatTongyi |                  | ChatTongyi |                        *      
    +------------+                  +------------+                        *      
           *                               *                              *      
           *                               *                              *      
           *                               *                              *      
  +-----------------+             +-----------------+               +--------+   
  | StrOutputParser |             | StrOutputParser |             **| Lambda |   
  +-----------------+***          +-----------------+        *****  +--------+   
                        ******             *           ******                    
                              *****       *       *****                          
                                   ***    *    ***                               
                         +--------------------------------+                      
                         | Parallel<good,bad,topic>Output |                      
                         +--------------------------------+                      
                                          *                                      
                                          *                                      
                                          *                                      
                               +--------------------+                            
                               | ChatPromptTemplate |                            
                               +--------------------+                            
                                          *                                      
                                          *                                      
                                          *                                      
                                   +------------+                                
                                   | ChatTongyi |                                
                                   +------------+                                
                                          *                                      
                                          *                                      
                                          *                                      
                                 +-----------------+                             
                                 | StrOutputParser |                             
                                 +-----------------+                             
                                          *                                      
                                          *                                      
                                          *                                      
                              +-----------------------+                          
                              | StrOutputParserOutput |                          
                              +-----------------------+                          

LangGraph

基于LCEL确实能描述比较复杂的LangChain计算图结构,但依然有DAG天然的设计限制,即不能支持 “循环”。于是LangChain社区推出了一个新的项目——LangGraph,期望基于LangChain构建支持循环和跨多链的计算图结构,以描述更复杂的,甚至具备自动化属性的AI工程应用逻辑,比如智能体应用。其具体使用方式可以参考LangGraph文档

LangGraph声称其设计理念受Pregel/Beam的启发,构建支持多步迭代的计算能力,支持“流 / 批 / 图”等能力是构建AI Agent的工程基础。

开启记忆--Memory

通过 Chain,LangChain 相当于以 “工作流” 的形式,将 LLM 与 IO 组件进行了有秩序的连接,从而具备构建复杂 AI 工程流程的能力。而我们都知道 LLM 提供的文本生成服务本身不提供记忆功能,需要用户自己管理对话历史。因此引入 Memory 组件,可以很好地扩展 AI 工程的能力边界。

短期记忆 short-term memory

短期记忆让你的应用程序能够在单一的线程或对话中记住之前的交互,对话历史是表示短期记忆的最常见形式。

长对话管理

由于LLM的限制,完整的对话历史(长对话)可能甚至无法适应LLM的上下文窗口,导致不可恢复的错误。即使如果您的LLM在技术上支持完整的上下文长度,大多数LLMs在处理长上下文时仍然表现不佳。它们会被过时或离题的内容“分散注意力”,同时响应时间变慢且成本更高。

管理短期记忆是平衡精准度与召回率与其他性能要求(延迟和成本)的练习。始终重要的是,要批判性地思考如何为您的 LLM 表示信息,并查看您的数据。我们在下面介绍了一些常见的管理消息列表的技术,希望提供足够的背景,让您能够为应用程序选择最佳的权衡方案:

编辑消息列表

在将消息列表传递给语言模型之前进行裁剪和过滤。

def manage_list(existing: list, updates: Union[list, dict]):
    if isinstance(updates, list):
        # Normal case, add to the history
        return existing + updates
    elif isinstance(updates, dict) and updates["type"] == "keep":
        # You get to decide what this looks like.
        # For example, you could simplify and just accept a string "DELETE"
        # and clear the entire list.
        return existing[updates["from"]:updates["to"]]
    # etc. We define how to interpret updates

class State(TypedDict):
    my_list: Annotated[list, manage_list]

def my_node(state: State):
    return {
        # We return an update for the field "my_list" saying to
        # keep only values from index -5 to the end (deleting the rest)
        "my_list": {"type": "keep", "from": -5, "to": None}
    }

总结过去的对话

修剪或移除消息存在的问题是:我们可能会因消息队列的裁剪而丢失信息,针对这个问题可以通过模型来总结消息历史的方法来解决。

def summarize_conversation(state: State):

    # First, we get any existing summary
    summary = state.get("summary", "")

    # Create our summarization prompt
    if summary:

        # A summary already exists
        summary_message = (
            f"This is a summary of the conversation to date: {summary}\n\n"
            "Extend the summary by taking into account the new messages above:"
        )

    else:
        summary_message = "Create a summary of the conversation above:"

    # Add prompt to our history
    messages = state["messages"] + [HumanMessage(content=summary_message)]
    response = model.invoke(messages)

    # Delete all but the 2 most recent messages
    delete_messages = [RemoveMessage(id=m.id) for m in state["messages"][:-2]]
    return {"summary": response.content, "messages": delete_messages}

长期记忆 long-term memory

LangGraph 中的长期记忆使系统能够在不同的对话或会话中保留信息。不同于短期记忆,它是线程范围的,长期记忆是保存在自定义的“命名空间”中。

存储记忆

LangGraph 将长期记忆存储为 store (参考文档) 中的 JSON 文档。每个记忆都在自定义 命名空间(类似于文件夹)和唯一的 键(类似于文件名)下组织。命名空间通常包括用户或组织 ID 或其他有助于整理信息的标签。这种结构支持记忆的层次化组织。通过内容过滤器支持跨命名空间搜索。请参见下面的示例。

from langgraph.store.memory import InMemoryStore


def embed(texts: list[str]) -> list[list[float]]:
    # Replace with an actual embedding function or LangChain embeddings object
    return [[1.0, 2.0] * len(texts)]


# InMemoryStore saves data to an in-memory dictionary. Use a DB-backed store in production use.
store = InMemoryStore(index={"embed": embed, "dims": 2})
user_id = "my-user"
application_context = "chitchat"
namespace = (user_id, application_context)
store.put(
    namespace,
    "a-memory",
    {
        "rules": [
            "User likes short, direct language",
            "User only speaks English & python",
        ],
        "my-key": "my-value",
    },
)
# get the "memory" by ID
item = store.get(namespace, "a-memory")
# search for "memories" within this namespace, filtering on content equivalence, sorted by vector similarity
items = store.search(
    namespace, filter={"my-key": "my-value"}, query="language preferences"
)

长期记忆技术选型

长期记忆是一个复杂的挑战,没有一种通用的解决方案。

  • 记忆类型,不同的记忆类型对应的技术选择不同,具体可以参考Memory Types
  • 何时更新记忆,hot path更新使得记忆立刻生效但会导致延时,background更新灵活没有延时但会有更新不及时的问题,这种技术选型需要更具实际情况和场景考量;

增强工具--Tool

这里不得不提到 OpenAI 的 Chat Completion API 提供的函数调用能力(注意这里不是 Assistant 的函数调用),通过在对话请求内附加 tools 参数描述工具的定义格式(原先叫 functions calling),LLM 会根据提示词推断出需要调用哪些工具,并提供具体的调用参数信息。用户需要根据返回的工具调用信息,自行触发相关工具的回调。

为了简化代码实现,我们用 LangChain 的注解 @tool 定义了一个测试用的 “获取指定城市的当前气温” 的工具函数。然后通过bind_tools方法绑定到 LLM 对象即可。需要注意的是这里需要用JsonOutputToolsParser解析结果输出。

import random

from langchain_core.output_parsers.openai_tools import JsonOutputToolsParser
from langchain_core.runnables import RunnablePassthrough
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI


# 定义Tool
@tool
def get_temperature(city: str) -> int:
    """获取指定城市的当前气温"""
    return random.randint(-20, 50)


# 创建LLM
llm = ChatOpenAI(model_name='gpt-4')

# 创建JSON输出解析器
output_parser = JsonOutputToolsParser()

# 创建Chain
chain = (
    RunnablePassthrough()
    | llm.bind_tools(tools=[get_temperature])
    | output_parser
)

# 调用Chain
print(chain.invoke('杭州今天多少度?'))

对于Qwen也有自己的tools可以用,推荐使用dashscope sdk,同时百炼平台还支持更多的tools/app调用。

后续

langchain 框架的基本开发就已经完成了,剩下更进阶的内容就是:

消除幻觉--RAG

Retrieval-Augmented Generation,RAG指的是在LLM回答问题之前从外部知识库中检索相关信息,RAG有效地将LLM的参数化知识与非参数化的外部知识库结合起来,使其成为实现大型语言模型的最重要方法之一:

  • 早期的神经网络模型,在处理需要依赖外部知识或特定信息的任务时遇到了瓶颈。
  • LLM的问题: 幻觉、依赖信息过时、缺乏专业领域知识
  • RAG的提出,是为了解决如何将广泛的、分布式的外部信息库与生成模型相结合,从而提高模型在问答、摘要等任务中的性能和准确度

后续我们会继续看看怎么基于langchain框架开发RAG。

走向智能--Agent

AI Agent(人工智能代理)是一种能够感知环境并根据感知到的信息采取行动以实现特定目标的自主系统。它可以在不同的环境中运行,如虚拟环境、物理环境或混合环境。AI Agent 通常具有感知、决策和行动的能力,并且可以通过学习和适应来改进其性能。

Agent当下是兵家必争之地,需要加大投入进行研究和学习,后续先看看langchain框架是如何支持Agent开发的。

P.S. 后续会在 GitHub 开源该文章相关的 ipython noteook,stay tuned

References

  1. Memory | 🦜️🔗 Langchain
  2. Memory Types
  3. LangChain Expression Language (LCEL) | 🦜️🔗 LangChain
  4. langchain-ai/langgraph: Build resilient language agents as graphs.
  5. LangGraph
  6. Storage

关于DeepSeek我是怎么研究的(4)

2025-03-02 11:30:04

经历了3篇长文的先验知识的准备:

  1. 关于DeepSeek我是怎么研究的(1):通识RLM推理模型;
  2. 关于DeepSeek我是怎么研究的(2):了解推理模型背后的模仿人类的背景知识,system 1 & system 2 thinking;
  3. 关于DeepSeek我是怎么研究的(3):RLM推理机制的详细拆解;

终于来到正主DeepSeek了。

DeepSeek能够引起轰动甚至能把OpenAI等领跑者吓出一身冷汗,除了它的模型性能、成本优势之外,我个人更多的觉得是它的毫无保留和开源贡献,这让绝大多数没有足够资金支持的学术机构、中小企业看到了自己拥有自己大模型的可能性且有非常高的性价比。同时DeepSeek的论文事无巨细,毫无保留一步一步的介绍了自己的如何训练DeepSeek的,这样的开源精神远远超越了OpenAI论文中暧昧与含糊其辞。

2024年春节期间引起全员关注的DeepSeek主要有两个模型:DeepSeek-V3以及DeepSeek-R1,这两个模型均有对应的论文、测试数据、开源模型等原始资料可以支撑。这篇文章我先来研究一下DeepSeek-V3模型:

DeepSeek-V3 架构

DeepSeek-V3 基于 Transformer 框架,采用 MLA 和 DeepSeekMoE 架构。MLA 通过低秩联合压缩注意力键和值,减少推理过程中的 KV 缓存。DeepSeekMoE 使用更细粒度的专家和隔离的共享专家,以提高模型性能。此外,DeepSeek-V3 引入了无辅助损失的负载平衡策略,通过动态调整每个专家的偏差项来实现负载平衡,避免了辅助损失对模型性能的负面影响。多令牌预测(MTP)训练目标则通过预测多个未来 token 来增强模型性能。

DeepSeek MoE

图中展示了 DeepSeek 从传统 MoE 模型架构1的基础上,做的两部分改进2与3:

  1. 传统 MoE 模块: MoE 模块包含 \( N \) 个前馈神经网络(Feed-Forward Network, FFN)专家,每个专家在处理特定类型的数据上具有独特的优势。MoE 模块通过路由机制,根据输入数据的特征动态选择最合适的\( K \)个专家进行处理,而不是激活所有专家。所有专家的参数总和构成了整个 MoE 模块的参数量,在前向计算过程中,由于只激活了部分专家,实际参与计算的参数量被称为激活参数量。例如,Mixtral 8x7B 模型包含8个专家,每次选择其中的2个专家进行计算,模型的总参数量为46.7B,而激活参数量为12.9B。
  2. 细粒度专家划分: 不同于传统 MoE ,DeepSeek 把 \( N \) 个专家做更细粒度的划分,降低每一个专家的参数量,增大专家数量。图中b将 \( N \) 个专家拆分为 \( mN \) 个,每一个专家的隐层维度变为原来的\( 1/m \),相应地激活\( mK \)个专家。如此 MoE 模块的参数量以及激活参数量均保持不变,同时还可以更加灵活地组合多个专家。
  3. 共享专家分离: 把激活专家区分为共享专家(Shared Experts)和路由专家(Routed Experts)时,图中c所示,共享专家和路由专家在数据处理流程上有显著的区别。对于共享专家,输入数据无需经过路由模块的计算,所有数据都会直接通过共享专家进行处理。相反,对于路由专家,输入数据会先经过路由模块,该模块根据输入数据的特征选择最合适的专家进行计算。在这种架构中,路由模块通过计算输入数据与各个专家的匹配概率,选择概率最高的专家进行处理。最终,将路由专家和共享专家的计算结果相加,形成 MoE 模块的最终输出。通过这种方式,模型能够在处理不同输入数据时,既能捕捉到输入数据的共性,也能关注到输入数据的差异性。这种设计能够提高模型的泛化能力和适应性。

更进一步地,DeepSeek-V3 针对 MoE 中常见的负载不均衡问题,提出了一种新的负载均衡策略。在用于选择专家的 Gate 模块中引入了一个可学习的偏置项。在计算路由得分时,这个偏置项会被动态地加到每个路由专家的得分上。该方式的主要特点在于:

  • 动态调整路由倾向: 通过学习偏置项,模型可以动态地调整对不同路由专家的偏好。如果某个专家的负载过重,其对应的偏置项可能会被学习为负值,从而降低其被选择的概率。反之,对于负载较轻的专家,其偏置项可能会被学习为正值,提高其被选择的概率。
  • 无额外损耗: 该偏置项是直接通过模型的训练目标进行优化的,而不是通过一个独立的负载均衡损失函数。这意味着,模型在努力提高主要任务性能的同时,也会自然而然地学习到一种更均衡的路由策略,而不会因为额外的负载均衡损失而影响性能。

DeepSeek MLA

在标准的 Transformer 模型中,多头注意力(Multi-Head Attention, MHA)机制通过并行计算多个注意力头来捕捉输入序列中的不同特征。每个注意力头都有自己的查询(Query, Q)、键(Key, K)和值(Value, V)矩阵。对于序列中的每一个 token,都需要计算各自的 QKV,进而计算注意力。在推理过程中,当前大模型所采用的 token by token 递归生成方式,上文 token 的 KV 计算不会受到后续生成 token 的影响,因此可以缓存下来,避免重复计算,提高推理效率,这就是 KV cache 的由来。也就是说,当生成第\( t+1 \)个 token 时,可以利用之前事先算好的上文\( t \)个 token 的 KV 值。同样地,\( t+1 \)位置 token 的 KV 值计算出来后也将保存在 KV cache 中。

目前大模型对于注意力机制做的一些改进,包括MQA (Multi-Query Attention)、GQA (Group Query Attention)都是为了想方设法减少 KV Cache。DeepSeek 提出的 MLA 的出发点也是如此。减少KV Cache就可以实现在更少的设备上推理更长的Context,或者在相同的Context长度下让推理的batch size更大,从而实现更快的推理速度或者更大的吞吐总量。最终目的都是为了实现更低的推理成本。

如上图所示,MQA 与 GQA 的办法是通过共享 K,V 的注意力头,降低 KV Cache的数据维度。MLA 的办法本质上是对原本 MHA 的 KV Cache 作低秩分解,得到一个低维的隐向量(Latent Vector)。在推理阶段,MLA 只需要缓存该隐向量,由此大大降低需要缓存的数据量。

具体地,对于某一层某一个 token 的表征 \( h_{t} \), MLA 通过降维映射矩阵(down-projection matrix)\( {W}^{DKV} \)得到对 \( K \) 、\( V \) 压缩后的隐向量:

\( {c}^{KV}_{t}={W}^{DKV}{h}_{t} \)

在前向过程中,需要对此隐向量进行升维还原,即:

\( {k}^{C}_{t}={W} ^{UK}{c} ^{KV}_{t} ; {v} ^{C}_{t}={W} ^{UV}{c} ^{KV}_{t} \)

其中,\( {W}^{UK} \) 与 \( {W}^{UV} \) 为对应的升维映射矩阵(up-projection matrix),可得到\( h_{t} \)对应的 \( K \) 、\( V \)向量 \( {k}^{C}_{t} \)、\( {v}^{C}_{t} \)可以这么理解,MLA利用低秩分解的办法,通过增加少量的模型参数变量(降维映射矩阵与升维映射矩阵),引入低维隐向量 \( {k}^{C}_{t} \)作为 KV Cache,降低 KV Cache 所带来的显存压力,以此降低推理成本。

此外,DeepSeek 还将 Query 也进行了低秩分解,能够在训练过程中降低显存占用,以此提高训练资源利用率。

上述方案还需要针对位置编码RoPE(Rotary Position Embedding)进行处理。因为如果在隐向量\( h_{t} \)中包含RoPE,经过升降维操作后,会对位置信息造成破坏。为了解决这个问题,MLA(Multi-Head Linear Attention)提出了“解耦RoPE”的方法。具体来说,对于隐向量\( {c}^{KV}_{t} \),不将位置编码包含在其中,而是专门为注意力头的 Query 和 Key 新增向量维度,以添加 RoPE 的位置信息。

DeepSeek MTP

当前主流的采用自回归的大模型都是单 token 预测。即根据当前上文预测下一个最可能的 token。而 MTP 的核心思想是让模型一次性预测多个 token,以提升了模型的训练效率、生成质量和推理速度。

比如现在上文是“今年春节的天气”,传统的单 token 预测模式会逐 token 预测“真的”、“好”、“冷”、“。”;而 MTP 会并行地预测这几个 token 。因此,模型不仅要学习预测下一个 token 的能力,还需要同时具备预测下\( n \)个token的能力。

这种方式在推理角度的好处显而易见,一次性生成多个 tokens,减少自回归生成的步数,达到推理加速效果。而在训练过程中,MTP 的训练目标函数同时考虑了多个 token 的估计准确性,因此被认为可以捕捉 token 间的依赖关系,从而提升模型效果。

这里将简单介绍 DeepSeek V3 的 MTP 模块采用了级联式的结构,使用k个串行模块来预测k个token,保留因果语言模型(Causal Language Model)的连接关系,有利于效果的提升,如下图所示:

图中展示了模型用\( D \)个顺序的模块,预测\( D \)个 tokens。定义预测深度为\( k \)的含义为,预测后续第\( k \)个 token。

首先,在每一个预测深度模块中,都共享了一个嵌入层(embedding layer),即模型除了最后负责最后预测部分的层之外,其他的所有层,用于得到 token 的 embedding。对于输入的第\( i \)个token,在第\( k \)个预测深度处,模型将前一个深度的表示与第\( i+k-1 \) 的 embedding 拼接,作为新的输入表示。

然后通过一个预测深度\( k \)专用的 Transformer 模块,生成当前预测深度的输出表示,将用于下一个深度的表示计算,同时用共享的输出层获得 token 预测, 与训练样本中\( i+k \)计算损失。

值得注意的是 DeepSeek V3 论文中根据使用 MTP 模块的实验结果,他们在推理过程中不使用 MTP 模块,只在训练过程中利用该模块约束模型的优化。

基础设施

DeepSeek-V3 在由 2048 个 NVIDIA H800 GPU 组成的集群上进行训练,采用 16-way Pipeline Parallelism (PP)、64-way Expert Parallelism (EP) 和 ZeRO-1 Data Parallelism (DP)。为了提高训练效率,设计了 DualPipe 算法,通过计算和通信的重叠来减少管道气泡。此外,开发了高效的跨节点 All-to-All 通信内核,充分利用了 InfiniBand (IB) 和 NVLink 带宽。

DeepSeek 模型训练

大模型训练大体可以分为3种模式,预训练(Pretraining),有监督精调(Supervised Fine-Tuning, SFT),基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)。SFT让模型通过学习训练数据数据分布的方式来提高模型在特定任务或指令上的表现,与其不同的是,RLHF使用人类反馈来定义奖励函数,然后通过强化学习算法优化模型。让模型能生成符合人类喜好的回复。

FP8 训练

DeepSeek-V3 采用了 FP8 混合精度训练框架,通过细粒度的量化策略和高精度累加来提高训练精度。FP8 训练框架通过将激活和权重量化为 FP8 格式,减少了内存消耗并加速了训练过程。此外,通过低精度存储和通信进一步降低了内存和通信开销。

为了增强训练稳定性以及维持训练效果不至于下降太多,DeepSeek 提出了一种精细的量化策略,另外为了进一步减少 MoE 训练中的内存和通信开销,在 FP8 中缓存和分发激活值,同时以BF16格式存储低精度优化器状态。在实验中,FP8 训练模型与 BF16 基线相比,相对损失误差始终低于0.25%,在训练随机性范围内是可以接受的。

基于此,DeepSeek-V3 文中提出了一种 FP8 训练的混合精度框架。在这个框架中,大多数计算密集型操作在 FP8 中进行,而一些关键操作则保持其原始数据格式,以平衡训练效率和数值稳定性。为了加速模型训练,主要的核心计算内核(如 General Matrix Multiplication,GEMM 操作)在 FP8 精度下实现,这些操作接受 FP8 张量作为输入,并生成 BF16 或 FP32 格式的输出。所有与线性操作相关的三个 GEMM(前向传播、激活反向传播和权重反向传播)都在 FP8 中执行,这种设计理论上将计算速度提高了一倍。此外,FP8 权重反向传播 GEMM 允许激活值以 FP8 格式存储,以便在反向传播中使用,从而显著减少了内存消耗。

训练框架在以下组件中保持了原始精度(如 BF16 或 FP32):Embedding 模块、输出头、MoE 门控模块、归一化算子和注意力算子等。这些高精度的保留确保了 DeepSeek-V3 的稳定训练动态。为了进一步保证数值稳定性,作者将模型的主权重、权重梯度和优化器状态均存储在更高的精度中。该混合精度框架示意图可见下图。

预训练

DeepSeek-V3 在 14.8 万亿个高质量 token 上进行了预训练,数据包括数学、编程样本和多语言覆盖。预训练过程中,采用了 Fill-in-Middle (FIM) 策略,以提高模型对中间文本的预测能力。此外,通过优化数据处理流程,减少了冗余并保持了语料库的多样性。

后训练

DeepSeek-V3 的后训练包括监督微调(SFT)和强化学习(RL)阶段。SFT 阶段使用了 1.5M 个实例,涵盖多个领域。RL 阶段则通过奖励模型和组相对策略优化(GRPO)来提升模型性能。奖励模型包括基于规则的奖励模型和基于模型的奖励模型,以确保模型输出的准确性和可靠性。

主流的 RLHF 算法有 PPO(Proximal Policy Optimization)、DPO(Direct Preference Optimization)以及 DeepSeek 用到的 GRPO 算法等(强化学习的基础理论具有较高的综合性以及深度,我就不深入学习了,主要也是弄不明白)。

在介绍GRPO之前,需要先了解PPO算法,因为GRPO可以算作是PPO的计算效率优化版本,在保持效果的同时,降低计算资源消耗。在强化学习领域,PPO 算法被广泛认为是强化学习中的基准算法之一。PPO 采用了 Actor-Critic 架构,这一架构可以形象地理解为:有一个演员(actor)在舞台上表演,而一个评论家(critic)在台下观看。演员的目标是通过不断调整自己的表演行为来获得观众的认可,并从观众那里获得及时反馈。而评论家的任务则是评估演员的表演,并提供全面的建议。

在自然语言处理(NLP)生成模型的场景中,被训练的模型相当于演员,其表演即为生成的回复。相应地,会有评论家和观众模型来评价回复的质量。具体来说,PPO使用了四个模型:(有没有发现对应了 Reasoning Schema)

  • Policy 模型(又称 Actor):输入一段上文,输出下一个token的概率分布。该模型需要训练,是我们最终得到的模型。输出下一个token即为Policy模型的“行为”。
  • Value 模型(又称 Critic):用于预估当前模型回复的总收益。该总收益不仅局限于当前token的质量,还需要衡量当前token对后续文本生成的影响。该模型需要训练。
  • Reward 模型:事先用偏好数据进行训练,用于对Policy模型的预测进行打分,评估模型对于当前输出的即时收益。
  • Reference 模型:与 Policy 模型相同,但在训练过程中不进行优化更新,用于维持模型在训练中的表现,防止在更新过程中出现过大偏差。

为了更直观地理解 Value 模型的总收益和 Reward 模型的即时收益,可以用“磨刀不误砍柴工”来举例说明。假设现在有一把钝刀,一分钟可以劈一根柴火;如果把刀磨锋利了,一分钟就可以劈两根柴火。现在你可以选择直接用钝刀劈柴,或者先把刀磨锋利。前者的当前收益比后者高,但未来的收益会低。也就是说,Value 模型会对后者“磨刀”这一行为更为推崇,而 Reward 模型会给前者“直接砍柴”一个更高的分数。

PPO 在大模型的 RLHF 阶段被成功应用,不断提升模型回复表现的上限。然而,PPO 在计算成本和训练稳定性方面仍然存在一定的挑战。GRPO 算法对此进行了优化,其核心目标是去除 Value 模型,以此来减少训练的计算资源。

References

  1. DeepSeek-V3
  2. Deepseek moe
  3. Deepseek math
  4. Deepseek-v2

Weekly Collections 09

2025-03-01 22:58:33

The Snowflake Method For Designing A Novel

items Details
by Advanced Fiction Writing
date 2025-02-25T15:06:32+08:00
source The Snowflake Method For Designing A Novel

This page introduces the Snowflake Method, a structured approach to writing a novel. Developed by Randy Ingermanson, who has published multiple novels and won awards, this method involves 10 steps that help writers design and organize their stories, from a one-sentence summary to detailed character charts and scene lists. The method is flexible and can be used for planning a new novel, revising a draft, or organizing a completed manuscript. It emphasizes the importance of design in creating good fiction and aims to make the writing process more efficient and enjoyable.

原文链接The Snowflake Method For Designing A Novel


打伞的蜗牛.bit分享了图片 - 即刻App

items Details
by 即刻
date 2025-02-25T15:17:30+08:00
source 打伞的蜗牛.bit分享了图片 - 即刻App

你先帮公司做事,月底才发工资,是你相信公司;如果公司拖欠工资了,是。。。

原文链接打伞的蜗牛.bit分享了图片 - 即刻App


长达20年!复盘Linux之父对C++的「炮轰」史:C++究竟为何被“拉黑”?

items Details
by 微信公众平台
date 2025-02-25 16:46:51
source 长达20年!复盘Linux之父对C++的「炮轰」史:C++究竟为何被“拉黑”?

本文讨论了Linux内核创始人Linus Torvalds对C++的批评及其背后的技术原因。Linus反对将C++用于Linux内核开发,主要论点包括:C++异常处理机制不可预测、编译器隐藏内存管理带来的性能风险、面向对象编程在C语言中也可以实现、引入C++库和依赖项的稳定性问题、低效且臃肿的抽象、最终还是会用回纯C语言等。文章强调,在追求高性能和稳定性的Linux内核中,这些因素使得C++并不适合。通过分析这些观点,我们可以学到在软件开发中选择合适工具的重要性以及对依赖关系进行明智决策的重要性。

原文链接长达20年!复盘Linux之父对C++的「炮轰」史:C++究竟为何被“拉黑”?


你要试着不做,以前觉得不做天会塌的事 想起几年前在新能源行 - 即刻App

items Details
by 即刻
date 2025-02-25 17:10:32
source 你要试着不做,以前觉得不做天会塌的事 想起几年前在新能源行 - 即刻App

你要试着不做,以前觉得不做天会塌的事

想起几年前在新能源行业有一次和同事聊天,他是公司的运营总监,也是小镇做题家出身,人非常聪明且有责任感,对做事有一种洁癖般的执着

那时公司刚渡过Virus的劫难稳定下来,我们聊到这一年个人有啥收获。他说,“以前以为事项清单上的事情必须做完,否则到了deadline就完蛋了,搞得自己和部门的人都压力很大。”

后来还是开会的时候总裁告诉他,“你要再成长一步的话,就是要学会有些事不做,你会发现以前觉得不得不做的事真的没做,其实没什么大不了,天不会塌下来。”

他后来就真的像唐僧惦着一只脚尖一样试着跨出了火圈,发现一些事没做,那就仅仅是没做而已,并没什么严重的后果,反倒是自己的精神状态好了很多,也有更多时间去做一些“不着调”的探索,以及更关注自己的同事和家人的感受

放弃了一点执念,生活一下子就变好了

最后我想起那个所谓的做事经典四象限分类,“紧急重要,紧急不重要,重要不紧急,不重要不紧急。”

其实这个世界上的真相是【只有三个象限】,不重要不紧急的事,为什么要花精力去做?尽快把它从你的生命中去掉

这时候你会发现自己的多出了比做另外三个象限还多的时间...

“给张卷子就把题给做了,也不看看这是不是自己应该考的试。”

这是我等小镇做题家从小被培养出来的惯性,也是一些异常努力,却依然把生活过得很糟的人的问题所在

原文链接你要试着不做,以前觉得不做天会塌的事 想起几年前在新能源行 - 即刻App


不被AI取代的工程师

items Details
by. 从码农到工匠
date 2025-02-25 20:00:56
source 不被AI取代的工程师

作者讲述了使用AI帮助解决设计挑战的经历,通过编程生成了一个丝绸质感的logo。随后讨论了AI在软件工程中的作用,强调虽然AI可以显著提高效率和知识获取速度,但远不能替代人类工程师。文章指出实现通用人工智能(AGI)至少还需要100年的时间,即便实现了AGI,管理大规模软件系统的复杂性对AI来说仍然是个挑战。某些技能如问题结构化、提示工程及批判性判断的重要性增加,而快速编码和小规模重构等能力的价值则有所下降。结论是AI将作为助手,使工程师能够专注于软件开发中更有价值的部分。

原文链接不被AI取代的工程师


时间、精力、生命力是你逆袭人生的三个血条 其实每个人是有三 - 即刻App

items Details
by 即刻
date 2025-02-26 11:52:05
source 时间、精力、生命力是你逆袭人生的三个血条 其实每个人是有三 - 即刻App

时间、精力、生命力是你逆袭人生的三个血条

其实每个人是有三个血条的,它们分别是【时间】【精力】【生命力】,那这三个有啥不同?

你要和一般人的生命质量区别开来的话,你就要知道一个道理,每个人每天都有24个小时,大家在“同一起跑线上”,除非你比别人活得久睡得少,否则很难拉开差距。但在【时间】之上的更高纬度杠杆就是【精力】,而比【精力】更高一个维度的杠杆就是【生命力】或者叫心力

首先来说精力,你会发现人每天精力充足的时间其实是非常有限的,24小时里可能只有10个小时是精力充沛的黄金状态,而每一次运用理性去思考问题和做决策都会耗费精力,所以你会发现为什么乔布斯、扎克伯格、黄仁勋这些科技大佬都喜欢每天穿同一套衣服,就是为了不在这些细枝末节上耗费宝贵的精力

如果你迅速耗光了你自己的精力,这一天剩下的时间就都是“垃圾时间”,不仅学习效率很低,处理人际关系和做决策也都会非常糟糕

所以聪明人都是在每天的“黄金时间”高效处理工作和决策,在“滚刀肉时间”运动或娱乐。比如拿我自己举例,我再想看视频看电影也会忍住等晚上洗完澡再看,而之前的时间都是用来工作、思考、写作,而且基本是晚上才运动…

所以谈判专家熊浩就有句名言,“不要在能量不足的时候做决策。”就是这么个道理

其次比精力更珍贵的是生命力。举个例子,你会发现很多老人六七十岁就好像无所事事,每天只能晒太阳打瞌睡,而巴菲特在65岁后才赚到了他人生99%的财富,今年已经90多岁高龄还在工作;以及任正非已经80岁了,还在带领华为发展;小一点的雷军也已经55岁了,依然压上全部身家重新带小米做汽车…

这些企业家和一般“老头”的区别是什么?就是生命力大小的区别,而你需要知道,生命力也是可以补充的

如果被人说过感觉缺乏一些活力;年纪轻轻却过着“老年人”的生活;太佛了缺少年轻人的“干劲”等等…甚至你自己都感觉有时候浑浑噩噩的,就是缺乏生命力的表现

而心理学认为人生命力来自于3个方面,自我欣赏、性、攻击性

比如,为什么很多老人会让人觉得缺乏生命力,就是因为在退休后丧失了社会身份的老人,同时随着年岁渐长性和攻击性也都减弱了,就会给人没有生命力的感觉

但你肯定会发现像上面举例的企业家们,从自我欣赏方面补充了足够多的生命力,依然能让别人感知到非常旺盛的生命力

当然,除了自我欣赏,还有一个快速补充生命力的方式,就是释放你自己的攻击性

在《蜘蛛侠》里我们会发现,蜘蛛侠一开始是一个经典的好男人:羞涩、封闭、宅,虽然会感动你,但总会让人感觉缺少一些魅力

但在第2部里,当外星的黑色能量附在了蜘蛛侠身上,他化身为带着点邪气的男人时,有意思的改变就出现了,他一下子就变帅了,走路昂首挺胸,浑身都放着电,所到之处异性被迷倒一片

所以,怎样让你更有【生命力】这个问题的解法就不言自明了,你需要让自我欣赏、攻击性、甚至是通过健身或规律作息等建立性魅力,让自己的生命力更适当地释放和流动起来
![[Pasted image 20250226144200.png|300]]

原文链接时间、精力、生命力是你逆袭人生的三个血条 其实每个人是有三 - 即刻App


如何寻找自己需要的AI工具: 1。 豆包:查资料、聊天、写 - 即刻App

items Details
by 即刻
date 2025-02-26 11:55:14
source 如何寻找自己需要的AI工具: 1。 豆包:查资料、聊天、写 - 即刻App

如何寻找自己需要的AI工具:

  1. 豆包:查资料、聊天、写文章、翻译等,功能特别全。
  2. Kimi:处理长文章,能看懂也能写!
  3. 海豚配音:有300+种适合自媒体的声音。
  4. FishAudio:快速复制声音,操作简单。
  5. iSlide:一句话就能做出PPT。
  6. 可灵:能把文字和图片变成视频。
  7. 即梦:只要简单描述,就能生成图片。
  8. 有言:3D数字人,能代替真人出镜。
  9. 迅捷OCR文字识别:精准提取图片和文档里的文字,识别又快又准。
  10. 剪映专业版:功能强大,素材特效丰富,剪视频轻松搞定。
  11. 美图秀秀AI绘画:输入创意点子,一键生成精美画作。
  12. 知学云AI知识服务平台:提供智能知识管理、问答等功能,帮助高效利用信息。
  13. 达观数据智能写作平台:擅长写新闻、商业文案,写作速度快。
  14. 易企秀:能快速做H5页面,模板种类多,适合活动宣传、产品推广。
  15. 来画动画:不用专业技能,就能轻松做出各种风格的动画视频,表达创意更简单。
  16. MindShow:输入文字大纲,自动整理成思维导图,还能一键转换成演示文稿。
  17. 文心一格:百度出的AI绘画工具,能生成很有艺术感的图片。
  18. 图怪兽:在线设计神器,有超多海报、logo模板,简单改改就能出图。
  19. 秒出PPT:输入主题和要点,几分钟就能搞定排版漂亮、逻辑清晰的PPT,大幅提升效率。
  20. 智影:集视频剪辑、抠图、配音等功能于一体,界面清爽,新手也能快速上手。
  21. 闪剪:专注短视频制作,智能剪辑,能快速把素材拼成吸引人的短视频。
  22. 熊猫办公:办公资源丰富,不止PPT模板,还有Word、Excel模板和各种设计素材。
  23. 稿定设计:涵盖平面设计、电商设计等,提供超多可编辑模板,满足各种设计需求。
  24. Deepseek:文章、推理、写代码

原文链接如何寻找自己需要的AI工具: 1。 豆包:查资料、聊天、写 - 即刻App


什么是产品力?产品定价的能力!(5000字中长文) – 人人都是产品经理

items Details
by
date 2025-02-26 15:05:45
source 什么是产品力?产品定价的能力!(5000字中长文) – 人人都是产品经理

本文探讨了产品力在商业竞争中的重要性,从产品定义、构成要素到定价策略。首先,文章解释了产品的三个层次(核心产品、形式产品、附加产品)和四种价值(使用价值、功能价值、形象价值、社会价值)。接着,通过Lululemon的案例展示了如何通过强特性与强功能占据市场。文章还强调了找对标、造场景、占空位和差异化的重要性,并提出了产品力的四个关键步骤:从品类入手、从概念入手、从定价入手以及正确的营销口号。

原文链接什么是产品力?产品定价的能力!(5000字中长文) – 人人都是产品经理


✨分享一下山竹小香薰✨ - 即刻App

items Details
by 即刻
date 2025-02-26 15:42:50
source ✨分享一下山竹小香薰✨ - 即刻App

✨分享一下山竹小香薰✨

原文链接✨分享一下山竹小香薰✨ - 即刻App


武则天的无限游戏,藏着多少当代生存法则?|小宇宙

讲武则天的播客中有一段聊到了一人公司、数字游民【54:14】,这引发了我对自由向往的新的反思:想要自由需要先学会规则,人是社会动物所以肯定逃脱不了社会规则,即便是一人公司、数据游牧,其实你还是到了另外一个环境,还是要遵循那个环境、那个阶段的规则。在追求爽感的同时需要看到这背后的代价,离职获得自由的代价是你以后的社保没人交了,一人公司的获得话语权的代价是承担一定的经济压力乃至生活的不稳定。遵循规则和妥协并不是懦弱,它只是一种处事方式而已。

原文链接:武则天的无限游戏,藏着多少当代生存法则?|小宇宙


盘点2024年十大营销事件 – 人人都是产品经理

items Details
by
date 2025-02-27 11:27:49
source 盘点2024年十大营销事件 – 人人都是产品经理

营销的核心驱动力已经从追求最低价格转变为建立最高级别的信任,这一转变标志着商业策略的重点首次完全转向以用户为中心。

周至说

  • 营销,不再只是把价格打下来,而是真诚地帮助别人,为向往的生活找到解决方案。
  • 营销底层驱动逻辑已从 “地板价” 迅速转变为 “天花板级信任”,其本质首次从企业视角全面切换至以人为本的用户视角。

原文链接盘点2024年十大营销事件 – 人人都是产品经理


Semantic search with embeddings: index anything

items Details
by Romain Beaumont
date 2025-02-27 16:56:43
source Semantic search with embeddings: index anything

The article discusses the concept and implementation of semantic search, which uses small vectors (embeddings) to represent items. It covers the motivation for semantic search, how it differs from classical search, and its applications in various domains like fashion, music, and news. The article also delves into the technical details of building a semantic search system, including encoding items as embeddings, indexing them, and using these indices for fast search. It explores different types of encoders for images, text, and other content, as well as methods for combining and training embeddings. Additionally, it provides practical solutions and tools for building semantic search systems, such as Jina, Milvus, and Elastic Search, and discusses the broader implications of representation learning.

原文链接Semantic search with embeddings: index anything


Unlocking the Power of Contextual Document Embeddings: Enhancing Search Relevance

items Details
by shashank Jain
date 2025-02-27 17:09:50
source Unlocking the Power of Contextual Document Embeddings: Enhancing Search Relevance

The page discusses the concept of contextual document embeddings (CDE) and their importance in improving information retrieval. It explains that while traditional embeddings represent documents or queries independently, CDEs consider the broader context of the document corpus, leading to more accurate and relevant search results. The benefits include better understanding of relationships, improved performance in large datasets, and handling out-of-domain queries. The post also provides a step-by-step guide on implementing CDE using a pre-trained model, including loading the model and dataset, preparing a mini corpus for contextual embeddings, embedding the mini corpus, and embedding queries and documents with context. Finally, it shows how to compare queries to documents using cosine similarity.

原文链接Unlocking the Power of Contextual Document Embeddings: Enhancing Search Relevance


好奇一个技术问题:现在各家的「联网搜索」都是用的什么引擎?都 - 即刻App

items Details
by 即刻
date 2025-02-28 10:34:47
source 好奇一个技术问题:现在各家的「联网搜索」都是用的什么引擎?都 - 即刻App

好奇一个技术问题:现在各家的「联网搜索」都是用的什么引擎?都是自建的爬虫系统,还是有一些公开的引擎调用?

热门评论

  • 不可能自建爬虫的,太贵了。都是用一些搜索接口,用Bing的,或者Brave.com/search/api/
  • 好问题 Google和bing有2b的服务提供 但好像要求绑定他们的cloud
  • DeepSeek 说的:
    当前各大AI厂商的「联网搜索」技术实现方式主要分为三类,以下是详细解析:成本对比分析:
    1. 自建搜索引擎体系(头部厂商专属)
      典型案例:Google Gemini、Microsoft Copilot
      技术特点:
      • 直接调用现有搜索引擎基础设施(Google Search/Bing)
      • 深度融合搜索索引与AI模型,实现毫秒级响应
      • 拥有PB级网页索引库,支持多语言/多模态检索
      • 部署分布式爬虫集群(日均抓取量可达数十亿页面)
      • 采用动态渲染技术应对SPA等现代网页框架
    2. 第三方API集成(主流解决方案)
      典型用户:ChatGPT(Bing API)、Claude(混合方案)
      技术实现:
      • 付费调用Bing Search API($7/千次请求)或Google Programmable Search
      • 结合SerpApi/ScrapingBee等代理服务规避反爬机制
      • 采用结果后处理技术:去重/质量过滤/时效性分级
      • 缓存机制优化(热点数据TTL动态调整)
    3. 混合架构(平衡成本与覆盖率)
      创新实践:Perplexity、You.com
      架构设计:
      • 核心数据层:自建垂直领域爬虫(医疗/学术等)
      • 通用搜索层:聚合多个搜索引擎API结果
      • 实时索引系统:对高频更新源(社交媒体/新闻)实施增量抓取
      • 部署边缘计算节点实现地域化内容优化
        技术演进趋势:
      • 动态渲染技术:采用无头浏览器集群(Headless Chrome + Puppeteer)
      • AI增强型爬虫:使用LLM解析页面语义结构,突破传统XPath/CSS选择器限制
      • 合规性增强:基于robots.txt的智能限速策略,GDPR合规数据清洗
      • 联邦式索引:区块链技术实现分布式网页快照存储
    • 自建系统初期投入:$5M+(服务器集群+带宽+存储)
    • API方案边际成本:$0.005-0.03/次查询
    • 混合架构年运营成本:$1.2-3M(中型规模)

当前行业呈现明显的马太效应,头部厂商通过搜索+AI的闭环构建护城河,而创新企业则通过「API组合+垂直爬虫」实现差异化竞争。未来随着W3C推出ML-enhanced crawling标准,可能会催生新的技术范式。

原文链接好奇一个技术问题:现在各家的「联网搜索」都是用的什么引擎?都 - 即刻App


Material Theme has been pulled from VS Code's marketplace | Hacker News

items Details
by
date 2025-02-28 11:45:49
source Material Theme has been pulled from VS Code's marketplace | Hacker News

The discussion revolves around a security issue with a VS Code theme extension, which was found to contain potentially malicious code. The VS Code team removed the extension and uninstalled it from all instances. Users faced issues manually uninstalling the extension due to an infinite loop. There is debate over the security model of VS Code, with concerns about the lack of sandboxing for extensions. The community discusses the implications of relying on third-party code and the need for better security measures. Some users suggest running development environments in a VM or using alternative IDEs. The maintainer of a forked version of the theme has taken steps to remove suspicious code and is working with the VS Code team to ensure its safety.

松烟阁评论:值得围观的年度安全事件,vscode 主题“包含恶意代码”,微软下场直接删,作者声称是obfuscate,替代者直接改Apache License。值得围观吃瓜

原文链接Material Theme has been pulled from VS Code's marketplace | Hacker News


关于DeepSeek我是怎么研究的(3)

2025-02-23 22:30:21

先看一个DeepSeek算24点游戏的例子:

跟准备数学考试一样,这道题的结果不重要,重要是学习思考过程,这样下次再碰到类似的问题我们才能自己解决问题。那么看看DeepSeek是怎么思考的:

可以看出来DeepSeek在生成最后答案之前经过了40秒的思考,按照问题的规则约束一步一步的思考、试错,最终得出答案,这个过程就是今天我要介绍的RLM的推理机制(Reasoning Schema)。首先回顾一下关于DeepSeek我是怎么研究的-1中RLM的架构,看看推理机制在RLM中处于什么位置(蓝色框):

推理机制(Reasoning Schema)是推理语言模型(Reasoning Language Models,简称RLMs)的核心组成部分,它定义了推理过程的结构和策略。推理机制决定了模型如何组织和推进推理步骤,以逐步解决复杂问题。

推理机制的定义

推理机制(Reasoning Schema) 是指在RLMs中用于组织和推进推理过程的一套规则和策略。它包括以下几个关键部分:

  1. 推理结构(Reasoning Structure):定义了推理步骤如何组织和连接,形成一个整体的推理路径。
  2. 推理策略(Reasoning Strategy):定义了推理结构如何演变和扩展,以探索可能的解决方案。
  3. 推理操作(Reasoning Operators):定义了在推理过程中可以执行的具体操作,如生成新的推理步骤、评估现有步骤、选择下一步要探索的步骤等。

推理机制的组成部分

1. 推理结构(Reasoning Structure)

推理结构是推理机制的基础,它定义了推理步骤如何组织和连接。常见的推理结构包括:

  • 树状结构(Tree Structure):每个节点代表一个推理步骤,分支代表不同的推理路径。树状结构允许模型并行探索多个可能的解决方案,选择最有希望的路径。
  • 链状结构(Chain Structure):推理步骤按顺序排列,每个步骤直接依赖于前一个步骤。链状结构适用于线性推理任务,推理路径单一。
  • 图状结构(Graph Structure):推理步骤之间可以有任意的依赖关系,允许更复杂的推理路径。图状结构适用于需要处理多个相互依赖的推理步骤的任务。

2. 推理策略(Reasoning Strategy)

推理策略是推理机制的核心,它定义了推理结构如何演变和扩展。常见的推理策略包括:

  • 蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)
    • 选择(Selection):从根节点开始,选择最有希望的子节点进行扩展。选择过程通常基于上置信区间(Upper Confidence Bound, UCB)公式,平衡探索和利用。
    • 扩展(Expansion):在选定的节点上生成新的推理步骤,扩展推理结构。
    • 评估(Evaluation):使用价值模型评估新生成的推理路径,预测其最终结果的质量。
    • 回溯(Backpropagation):将评估结果回溯到根节点,更新路径的价值,为后续选择提供更准确的评估。
  • 束搜索(Beam Search)
    • 定义:束搜索是一种宽度受限的搜索算法,每次只保留固定数量的最有希望的推理路径。它在每一步选择固定数量的候选步骤,进行扩展。
    • 作用:束搜索在解码过程中保持多样性,避免陷入局部最优解,同时控制计算复杂度。
  • 集成方法(Ensemble Methods)
    • 定义:集成方法通过组合多个独立的推理结构(如多个树或链),增强模型的鲁棒性和准确性。例如,森林(Forest)方法使用多个推理树,最终选择最优的解决方案。
    • 作用:集成方法通过并行探索多个推理路径,减少单一路径的不确定性,提高推理的准确性和可靠性。

3. 推理操作(Reasoning Operators)

推理操作是推理机制的具体实现,定义了在推理过程中可以执行的具体操作。常见的推理操作包括:

  • 生成(Generate):在推理结构中添加新的推理步骤。在MCTS中,生成操作通常由策略模型实现。
  • 细化(Refine):优化现有的推理步骤,提高其质量和准确性。例如,通过自批评(Self-Critique)生成改进建议。
  • 聚合(Aggregate):将多个推理步骤或路径合并为一个更高级别的推理步骤。例如,在图状结构中,聚合操作可以将多个相关步骤合并为一个连贯的推理路径。
  • 剪枝(Prune):移除推理结构中被认为不重要的节点或路径,优化推理效率。
  • 重构(Restructure):对推理结构进行任意变换,例如将树状结构转换为链状结构,以适应不同的推理需求。
  • 选择(Select):从当前推理结构中选择最有希望的节点进行进一步扩展或评估。选择操作通常基于启发式评分或搜索策略。
  • 回溯(Backtrack):在推理过程中返回到之前的节点,尝试不同的推理路径。回溯操作有助于模型纠正错误或探索其他可能的解决方案。

推理机制的工作原理

推理机制通过以下步骤在RLMs中工作:

  1. 初始化:从用户输入的问题或任务描述开始,构建初始的推理结构。
  2. 生成推理步骤:使用策略模型生成新的推理步骤,扩展推理结构。
  3. 评估推理路径:使用价值模型评估推理路径的质量,选择最有希望的路径。
  4. 选择和扩展:根据推理策略(如MCTS)选择最有希望的节点进行扩展,生成新的推理步骤。
  5. 回溯和更新:将评估结果回溯到根节点,更新路径的价值,为后续选择提供更准确的评估。
  6. 终止条件:当达到终止条件(如找到解决方案或达到最大推理深度)时,推理过程结束,形成最终答案。

推理机制的特点

  • 灵活性:推理机制支持多种推理结构和策略,可以根据任务需求进行调整和优化。
  • 可扩展性:通过模块化设计,推理机制可以轻松扩展,支持更复杂的推理任务。
  • 高效性:通过优化推理策略和操作,推理机制能够高效地探索和评估推理路径,减少计算资源的浪费。
  • 可解释性:推理机制通过明确的推理结构和步骤,提高了模型的可解释性,便于理解和验证推理过程。

推理机制(Reasoning Schema) 是RLMs的核心组成部分,它通过定义推理结构、推理策略和推理操作,组织和推进推理过程。推理机制不仅提高了模型的推理能力,还增强了其灵活性、可扩展性和可解释性。通过结合多种推理策略和操作,RLMs能够高效地解决复杂问题,生成高质量的推理路径。

Inference V.S. Reason

最后插一个题外话,解释一下我自己在学习Reason Schema过程的一个困惑:DeepSeek流行之前大多使用的是System 1 Thinking的大模型,也接触到推理(Inference),DeepSeek出现之后也有推理(Reason),字面中文看上去是一样,两者到底有什么区别呢?

先说我自己的总结:「Inference和Reason它们都涉及从已知信息或数据中得出结论的过程,但在具体的应用场景和侧重点上有所不同。Inference主要是指LLM根据已知的参数权重和激活函数等推断相应token的概率高低(System 1);Reason主要是指分析问题的思考逻辑和推理过程(System 2);」

Reason

Reason(推理)通常是指一个理性思维的过程,它涉及到一系列逻辑步骤,从已知的前提或假设出发,通过逻辑规则、第一性原理或经验规则推导出结论。这个过程可以是演绎的(从一般到具体)或归纳的(从具体到一般),并且通常需要更强的逻辑结构和解释性。

特点:

  • 逻辑性和系统性:推理过程强调逻辑的连贯性和系统的组织,通常需要明确的规则和步骤。
  • 深度和复杂性:推理往往涉及多步骤的分析和决策,能够处理复杂的问题和情境。
  • 解释性和透明性:推理过程通常需要能够被解释和验证,因为每一步的逻辑推导都需要清晰和透明。
  • 目标导向:推理通常是为了解决特定问题或验证某个假设,有一个明确的目标。

Inference

Inference(推断)是指从已知的数据或信息中得出新的知识或结论的过程。推断可以是统计的、概率的或基于模式的,它更多地依赖于数据和模型的预测能力,而不一定需要完全理解其背后的逻辑过程。

特点:

  • 数据驱动:推断通常依赖于数据和统计模型,通过观察数据中的模式和关系来得出结论。
  • 预测性和概率性:推断的结果往往是概率性的,表示对未知变量的预测或估计。
  • 自动化和高效性:推断过程通常由算法自动执行,能够快速处理大量数据。
  • 适应性和灵活性:推断模型可以适应不同的数据分布和复杂场景,不需要明确的逻辑规则。

比较与举例

特性 Reason(推理) Inference(推断)
侧重点 逻辑结构和解释性数据 处理和预测能力
过程 多步骤的逻辑分析和决策 数据驱动的统计或概率预测
透明度 高(每一步都需要解释) 低(模型内部决策过程可能不透明)
应用场景 解决复杂问题、验证假设 数据分析、模式识别、预测
依赖 逻辑规则、第一性原理 数据、统计模型
结果 明确的结论或解释 概率性的预测或估计
效率 较低(需要详细分析) 较高(自动化处理大量数据)
适应性 较低(依赖于明确规则) 较高(适应不同数据和场景)
  • Reason(推理)示例:
    在医疗诊断中,医生根据患者的症状、病史和实验室检查结果,通过一系列逻辑推理步骤(如排除法、归纳法)来确定病因。
  • Inference(推断)示例:
    在金融预测中,算法根据历史市场数据和模型,预测股票价格的走势,结果以概率形式表示。

References

  1. Monte Carlo Tree Search (MCTS)
  2. Reasoning Language Models: A Blueprint
  3. 大模型基础|激活函数|从ReLU 到SwiGLU
  4. DeepSeek

关于DeepSeek我是怎么研究的(2)

2025-02-15 22:08:37

书接上回:关于DeepSeek我是怎么研究的(1),继续我的DeepSeek研究之旅。

这次主要是研究清楚出 DeepSeek 在它的论文中提到的 System 1 Thinking 和 System 2 Thinking,这个概念其实源自于诺贝尔经济学奖得主丹尼尔·卡尼曼(Daniel Kahnemann),他最著名的研究是关于人类决策以及影响我们决策过程的各种缺陷/偏见。在他的《思考,快与慢》这本书中有详细研究和说明了这个概念:

  • System 1: 快速、自动、直观且情感化,这是我们的大脑默认运行的系统;
  • System 2: 缓慢、费力、逻辑严谨且深思熟虑,我们必须有意激活这个系统,使用这个系统需要很多努力,所以我们不能将其作为默认选项;
  • System 1 经常会影响 System 2 的分析,例如我们的分析(System 2)经常会根据符合我们最初概念/直觉(System 1)的精选例子构建叙述,这就是为什么 DeepSeek 会研究用 RL、MoE 等方法来优化模型,这是帮助抵消 System 1 Thinking 对模型决策产生的部分潜在影响;

P.S. :当我发现诺贝尔经济学奖关于人的研究居然应用到了 AI 领域之后,我有点反应过来大模型已经从表层的模仿人类向深层的学习人类过渡了,或许很快就会找到《超验骇客 Transcendence》中的奇异点 Technological Singularity 创造出了能够超越人脑的 AI。

下面我就研究一下 DeepSeek 如何在 RLM 中应用 System 1、2 Thinking 的:

System 1 V.S. System 2

System 1 Thinking(系统1思维)

定义:
System 1 Thinking 是一种快速、直观、基于模式匹配的思维方式。它依赖于预训练的模式和统计规律,能够迅速生成响应。这种思维方式与人类心理学中的“直觉系统”相对应,主要通过识别输入与训练数据中的相似模式,直接生成最可能的输出。

特点:

  1. 快速响应:能够迅速生成响应,因为它依赖于预训练的模式和统计规律。
  2. 基于模式匹配:通过识别输入与训练数据中的相似模式,直接生成最可能的输出。
  3. 启发式方法:使用启发式规则来简化复杂的决策过程,这些规则通常是基于经验或常见的模式。
  4. 缺乏深度推理:缺乏对复杂问题的深入分析和逐步推理能力,更多地依赖于表面的模式匹配。
  5. 依赖于训练数据:高度依赖于训练数据中的模式,如果训练数据中没有类似的模式,模型可能无法生成准确的响应。
  6. 缺乏灵活性:缺乏动态调整推理策略的能力,难以适应新的任务或情境。

System 2 Thinking(系统2思维)

定义:
System 2 Thinking 是一种缓慢、深思熟虑、基于逻辑和结构化分析的思维方式。它依赖于逻辑推理和逐步分析,能够处理复杂的任务和问题。这种思维方式与人类心理学中的“逻辑系统”相对应,主要通过逐步推理和全局评估来生成解决方案。

特点:

  1. 缓慢且深思熟虑:进行更深入的分析和逐步推理,能够处理复杂的任务。
  2. 逻辑推理:依赖于逻辑和结构化的分析,能够逐步解决问题。
  3. 灵活性:能够适应不同的任务和情境,通过动态调整推理策略来解决问题。
  4. 创新性:能够探索新的解决方案,而不仅仅是依赖于已知的模式。
  5. 全局评估:通过全局评估推理路径的质量,选择最优的解决方案。
  6. 依赖于逻辑规则:高度依赖于逻辑规则和推理步骤,能够进行复杂的逻辑分析。

System 1/2对比

特性 System 1 Thinking System 2 Thinking
速度 快速生成响应 较慢,需要更多时间进行分析
推理深度 缺乏深度推理 深入分析和逐步推理
灵活性 缺乏灵活性 高度灵活,能够适应不同任务
依赖 依赖于训练数据中的模式 依赖于逻辑规则和推理步骤
结果 生成连贯但可能缺乏深度的文本 生成经过深思熟虑的解决方案
应用场景 适合生成连贯文本和快速响应 适合处理复杂问题和需要深入分析的任务

System 1/2 在 RLM 的应用

System 1与System 2的交互

人类思考的过程中 System 1 经常起主导作用,它高效运行防止我们的大脑因过度分析而陷入困境。这是通过使用认知偏差来实现的。尽管偏差通常被视为贬义词,但实际上它们是一种中性的现象。从信息理论的角度来看,偏差只是决策模型(无论是我们的大脑还是 AI)用来优先处理和使用信息的一种捷径。 这种偏差可以是积极的(因为某物气味奇怪而不吃它),中性的(我喜欢巧克力牛奶),或者是消极的(种族偏见)。

人类和 AI 偏差之间的主要区别在于其来源:人类的偏差源于结构,而 AI 的偏差则揭示了我们数据的深层次问题

在 AI 领域中,System 1 是一个简单的检查器,而 System 2 是一个功能强大的深度学习模型。然而,System 1 的作用并不仅限于此。在大多数情况下,System 1 还充当我们的特征提取器/数据管道,直接提供输入给 System 2。以下是两种主要方式:

  1. Confirmation Bias(确认偏误):System 1 的 Confirmation Bias 通过寻找支持我们现有信念的信息并忽略与之矛盾的信息来强化这些信念,这会形成对现实的扭曲认知。
  2. Framing Effects(框架效应): 信息的呈现方式(即“框架”)可以影响我们的决策,即使基本事实保持不变。System 1 更容易受到 Framing Effects 的影响,导致选择受呈现方式而非逻辑的影响。

System 1、2 的均值回归

Reversion to the Mean(均值回归)描述了极端结果或事件之后往往会跟随较不极端的结果,直到情况收敛回到平均值的统计倾向。这听起来非常显而易见,但理解其含义对任何决策者(尤其是那些处理数据的人)至关重要。几个因素促成了 System 1/2 的均值回归:

  • Random Variation(随机变异):任何结果都受偶然因素影响。一个 exceptional result 可能只是由于一连串的好运/外部因素,这种情况不太可能再次发生。
  • Measurement Error(测量误差): 测试和测量并非完美。异常高或低的分数可能部分受到测量误差的影响,导致后来的结果更为平均。
  • Underlying Stability(内在稳定性):大多数系统都有一个自然的平均值或平衡状态,它们倾向于向这个状态靠拢。偏离这个平均值的情况通常会随着时间自行纠正。

基于上面的 System 1、2 均值回归的理解,RLM 的设计、训练等过程中需要注意避免错误推理:

  • Misinterpreting Performance(误读表现):我们需要小心,不要高估一次极端表现(无论是正面的还是负面的)的影响。均值回归表明,这可能部分是偶然现象,而不是永久性变化的真实反映。
  • Evaluating Interventions(评估干预措施): 如果我们做出改变(比如启动一个新的员工培训计划),然后观察到极大的改进,我们可能会倾向于将这种变化完全归因于干预措施。然而,均值回归也可能在起作用,我们需要考虑到这一点,以便正确评估结果。
  • Predicting the Future(预测未来):均值回归表明,从最近的极端结果过度外推通常是误导性的。未来的结果可能会不那么极端。这就是为什么改进数据采样和理解底层领域至关重要,因为这两者都有助于我们评估某一组先前的数据是否是预测未来的良好模型。

P.S.:我慢慢理解为什么 DeepSeek 做数据蒸馏之后的训练效果还是那么好了!

损失规避

丹尼尔·卡尼曼关于损失厌恶的研究发现,避免损失的动机是追求同等规模胜利动机的 2.5 倍。


以下是跟 AI 相关的损失规避的规律:

  • Anchoring Bias(锚定偏差):我们倾向于过度关注所提供的第一个信息(“锚点”),可以使用完全不相关的事物作为锚点,锚定偏见可能会加剧自动化偏见的影响(我们倾向于对自动化决策系统的结果接受得更加不加批判)。
  • Framing Effects(框架效应):信息的呈现方式(“框架”)极大地影响我们如何感知它以及我们所做的决定,故意为其基准/技术命名以引导做出有利的决策,AI 的基准测试 TruthfulQA 非常好的说明了这一点。
  • Availability Heuristic(可用性启发式):我们通过例子浮现脑海的容易程度来评估事件的可能性或频率,而不是根据其真实的基本概率。这经常导致对真实概率的误判,社交媒体的性质倾向于推送最极端的内容/创作者,因此那些花很多时间上网的人可能会把这些异常情况误认为是“正常”的。
  • Representativeness Heuristic(代表性启发法):我们根据事物或人与典型例子的相似程度来做出判断,有时会忽略统计概率。LLMs 在模仿人类智能和语言理解的行为方面表现出色,但并未显示出智能的底层驱动因素。

P.S.:用 RL 在 RLM 的 post 阶段增强推理思考的处理看上去是有据可循的。

在 RLM 中的应用

System 1 Thinking 在 RLM 中的应用:

  • 生成推理步骤:在 RLM 中,System 1 Thinking 通过策略模型(Policy Model)生成新的推理步骤。策略模型基于大型语言模型(LLM),能够快速生成连贯的文本,推动推理过程的进展。
  • 模式匹配:策略模型依赖于模式匹配和统计规律,能够迅速生成下一个最可能的推理步骤,适用于快速生成推理路径的场景。

System 2 Thinking 在 RLM 中的应用:

  • 评估推理路径:在 RLM 中,System 2 Thinking 通过价值模型(Value Model)评估推理路径的质量。价值模型能够进行全局评估,选择最有希望的推理路径,优化推理过程。
  • 推理策略:System 2 Thinking 通过推理策略(如蒙特卡洛树搜索 MCTS)来平衡探索和利用,优化推理路径的选择和扩展。MCTS 通过模拟多个推理路径并选择最优路径,体现了 System 2 Thinking 的全局评估和逐步推理能力。

结合 System 1 和 System 2:

  • RLM 的推理过程:RLM 通过结合 System 1 和 System 2 的思维方式,实现了对复杂问题的高效解决。策略模型生成新的推理步骤(System 1),价值模型评估推理路径的质量(System 2),两者共同推动推理过程的进展。
  • 训练机制:RLM 的训练机制包括监督学习(SFT)和强化学习(RL),通过优化策略模型和价值模型,提高模型的推理能力和泛化能力。监督学习确保模型能够生成高质量的推理步骤,强化学习通过与环境的交互,进一步优化推理策略。

总结

System 1 Thinking 和 System 2 Thinking 在 RLM 中各有其独特的应用和优势。System 1 Thinking 通过快速生成推理步骤,推动推理过程的进展;System 2 Thinking 通过全局评估和逐步推理,优化推理路径的选择和扩展。通过结合这两种思维方式,RLM 能够高效地解决复杂问题,生成高质量的推理路径,并在各种任务中表现出色。

References

  1. What I Learned From Thinking Fast And Slow
  2. System 1 and System 2 Thinking
  3. DeepSeek V3 Technical Report