硕鼠的博客站

范路的博客主站,时而会发些东西。

大家好,欢迎收听老范讲故事的YouTube频道。今天咱们来讲一讲Deepseek V3搅动风云的事情。Deepseek V3到底先进在什么地方?我在这一段时间呢,也看了一些人的介绍,甚至也看了一些人的视频,尝试用人话来讲清楚,还是很困难的。有一些人很扑克脸,上来就把论文念了一遍,底下一堆人在那评论说有听没有懂。咱们呢尽量避免看这个事情,想办法呢,用举例子和讲故事的方式,让大家能够稍微的了解一下Deepseek V3到底干了点什么。

但是呢,这个里头就会有一个问题,就是例子跟故事呢,有时候不一定准确。所以呢,我们尽量的传递,让大家可以对相关的概念有一个感性的认知。跟大家先讲一个故事吧,这样的话,你们就可以理解待会我要讲的故事大概在什么层面上了。

说爱因斯坦在晚年,有一次去参加美国的一个慈善晚会,来了位盲人。说:“您看,这是个盲人,您能给他解释一下什么是相对论吗?”从来也没见过任何的光,也就没见过任何东西。你告诉我怎么叫相对论。爱因斯坦想了想,说:“这个相对论呢,就是相对的,就是黑的跟白的,你能理解吗?”这个盲人说:“我生下来就是盲人,我没法理解什么是黑的跟白的。”爱因斯坦说:“那你想想有一只大鹅,大鹅你知道吗?这个鹅是白的。”盲人说:“我从小就是盲人,我没见过鹅。”爱因斯坦继续说:“鹅有一个长长的脖子,你能想象吗?”盲人说:“哎呀,我从小是盲人,我没见过鹅,也没见过什么叫长长的脖子。”爱因斯坦说:“这个鹅的长长的脖子是可以弯的。”盲人问:“怎么弯呢?”爱因斯坦说:“来,我给你比划一下。你把这个手伸出来,这个手伸出来,然后呢,这是直的,这是弯的,你懂了吧?”盲人说:“哎呀,我好像已经懂了,什么是脖子是直的是弯的,也能够想象一下什么是鹅了,甚至呢,我都觉得我理解了什么是相对论了。”

所以今天有很多的故事呢,可能是按照这个力度跟大家讲的,但我觉得我应该比爱因斯坦还稍微差一点点。大家也肯定比这个盲人的理解能力要强。首先,Deepseek呢,它是一个MoE的模型。

这个MoE呢,叫做混合专家模型。这个混合专家模型的概念呢,是1991年由Jeffrey Hinton和Michael Jordan这两个人提出的,发表的论文在91年就提出来了。这个Hinton老爷子是今年还得了诺贝尔奖的那个老爷子,所以这个混合模型专家是非常非常早就有了。

从17年以后,谷歌开始持续使用这种MoE的模型去推出各种产品,Gemini也是MoE的模型。这种叫混合专家模型,跟它对应的就是这种密集模型。像咱们用的LLama,梅塔做的这套东西都是密集模型,Claude也是密集模型。至于OpenAI的GPT到底是什么呢,不确定,因为它没有公开,大家猜测它是MoE,但既然它自己不说,也就没办法去说它是什么。

现在比较有名的MoE模型,第一个是法国的叫Mixtra,这个是微软投资的。另一个非常非常有名的MoE模型是谁呢,就是马斯克XAI里边用的Grok,Grok 1和Grok 2都是MoE模型。然后GPT-4呢,大家猜测它是MoE,但它自己既没有承认,也没有否认。GPT-4OMINI呢,最近微软泄密了,写了篇论文出来,说这个GPT-4OMINI只有8B,也就是80亿参数的一个模型。

现在大家普遍猜测GPT-4OMINI是一个MoE模型,为什么呢?因为每一个专家可能是8B,最后可能是7*8B或者8*8B这样的一个模型。因为单纯的8B模型是不太可能达到GPT-4OMINI这样的回复能力的。Gemini的话,现在确认是在1.5以后的版本,肯定是MoE,前面的不太好说。

然后国内呢,其实很多模型也是MoE的,比如说Minimax,他们号称是中国的第一个MoE模型。今天我们要讲的Deepseek,也一直在搞MoE,Deepseek从V1、V2、V2.5到今天的V3,实际上都是MoE模型。通义千问就是阿里的这套模型。

是在1.5以后的版本引入了MoE的架构。它里头就是有一部分是MoE,有一部分不是。零一万物李开复的这个模型呢,是到后面1 lighting这个模型,应该是一个MoE模型,应该是从Deepseek的这个架构转过来的。因为李开复的零一万物在早期是使用的LLama的架构,后面的使用的是Deepseek的架构。腾讯的浑元大模型也是个MoE,豆包的最新的模型已经转型向MoE了,就是豆包早期模型不是,现在最新的已经转到MoE去了。

百度的文心一言呢,号称的是MoE,或者说采用了类似这样的架构。但是这种完全不开源的项目,你就听他说就完了,这个不是那么重要的一个事情。然后Deepseek本身的发展历程是什么样的呢?2023年Deepseek当时出的这个模型叫Deepseek code,就是做编码的。Deepseek V1这个模型呢,当时其实并没有大张旗鼓地去发布,所以呢没有说Deepseek V1到底是哪天发布的。Deepseek V1的模型呢,算是验证了MoE模型的一个架构。

到2024年的5月份呢,Deepseek V2这个模型就出来了。在V1的基础上,参数量扩大。Deepseek V2呢,就已经在当时国内的各种模型里边算是能打的了。到2024年的12月份,Deepseek呢就出了V2.5的一个模型,进行了大量的优化以及提速。Deepseek 2.5出来以后,在国内的各种应用上,很多人就会去使用了。原来国内普通人去用的时候的话,如果不是说是这种系统集成签单的说,我必须要用谁家的模型,原来很多人会去喜欢用通义千问,喜欢用Moonshot Kimi后边那个模型。后来呢,到2024年12月份,大家就普遍的开始向Deepseek 2.5上去转了。到2024年12月26号,上面这个2.5模型发布了,不到一个月的时间,Deepseekk V3的模型就出来了。

Deepseekk V3的模型到底创新在什么地方呢?前面那么多的中国模型,甭管是通义千问,还是零一万物,也在四处打榜,也在四处刷排行榜,但是国际上基本上没声音。为什么呢?因为你拿别人的模型架构,甚至是用别人的大模型生成的数据,回来训练,没有对底层架构做出任何贡献。即使是在中文方面有一些进展,也不会引起关注的,也不会有人来重视你。

但是,Deepseekk V3就不一样了。国际上各个大厂的专家们发现了,他们对MoE模型做了很多的改进,使得这个模型的训练成本和推理成本都急剧下降。他们觉得,唉,这个确实是值得大家去学习一下,值得大家去研究一下。所以,Deepseekk V3是在国际上炸出声音来了。

而且,Deepseekk V3是一个真正的开源模型。它不像Kimi等这些模型,我是闭源的,我就自己在这闷头干,嗯,到底好不好使,我反正评测完了就这样了,其他的我不管了。但Deepseekk V3开源了,论文也发了,代码也在GitHub上,Hugging Face上都有。有谁愿意去折腾这个事,你们自己就下载去试去。

所以,现在很多人都在尝试部署Deepseekk V3。对于MoE架构所做出来的调整,很多人也开始在尝试在自己的架构中使用。就像前面我们讲的李开复的零一万物,发现Deepseekk的模型很好,他就直接把人的架构用到自己的1 Lighting里边去了。那么,未来肯定也有很多人继续做这个事情。现在,甚至还有人在尝试微调Deepseekk V3,这其实是一个挺麻烦的事情,后边我们再去详细讲。

那么,Deepseekk V3到底对于MoE模型做了哪些改变呢?它叫细颗粒度专家模型。传统的MoE模型是什么样的?就是上面有一个路由网络,下头有若干个专家,每次调用一个或者两个专家,然后把问题解决掉。比如说像前面我们讲的这个Grok或者是Mixtra这样的模型,它一般是8个专家。

每一次调其中的两个专家解决问题。而Deepseek V3的话,它就把这个专家变得很细碎。它呢,一共在模型上分了61层。首先是分层,前三层呢叫密集的多层感知机,咱们就不用去管这个名字到底是什么意思了。我们举一个例子,它像什么呢?像医院门口的分诊台。你说我现在要看病了,我到底要看哪个大夫,这就在前三层给你处理掉,告诉你应该从哪走,上哪上楼,下哪下楼,在这哪个大夫那去看病,给你做这个分诊。这个前三层是像干这个似的。

后边呢是58层,这58层呢叫混合专家层。每一层呢有一个共享专家和256个路由专家。每次共享专家都会参与,路由专家呢启动8个。每一次干活的时候,一个共享专家和8个路由专家一起干活。所以呢,每层有9个专家干活。对于所有的输入数据来说呢,相当于什么呢?它会激活9乘以58等于522个专家。但是不是每一次都会这样。他有的时候,比如走了几层以后发现这个结果已经可以用了,就直接把这个结果输出了。如果说走完这一层以后,发现结果不可以用,他就走下一层,走到头就是58层。522个专家为我们服务,得到一个结果。

咱们还是以医院为例吧。如果在医院里头,我们使用像Claude这样的密集型模型,相当于什么呢?他有一个全知全能的专家。我们甭管得什么病,有什么问题,我就坐在这,应该怎么怎么治,在这他就给你去解答,这类似于这样。

那你说Mixtral或者是Grok他们是怎么干活的呢?Mixtral是32层,Grok是64层,每一层呢有八个专家。你前头分诊也是要干这个事,干完了以后,你到每一层去,他们动用两个专家来替你服务。他是这样的一个工作方式。Grok也是这样,每层8个专家,每次动用两个。Deepseek V3呢,它就跟刚才这个状态不一样了。为什么呢?它是门口分诊,这个大家都要干,前面也分层。Mixtral是32层,Grok是64层,每个环节、各层级之间呢,就相当于有一科室。

Grok也好,Mixtral也好,是每层有8个专家,给你挑俩专家会诊一下就完事了。到这个Deepseek V3,这不这样了。它相当于每个科室里头做了一个分诊护士,就是他这个叫做通用专家,啥都懂点。然后呢,有256个实习生。你说256个,你再管人叫专家有点不大合适,太多了。

然后每次来了这个病人之后呢,你先走到这个科室去。到了科室以后,分诊护士要过一下手,然后呢再分配8个实习生过来会诊。会诊完了以后,看看你是不是需要到下一个环节去。比如说检查完了说没毛病,滚吧;或者检查完了去开药吧;再检查完了你开完药还得去上药,或者还要做个手术,还要去做康复。他得一个环节一个环节这么往下走。这就是Deepseek的V3干的活。

原来是每层还是有专家,现在等于每层上了一大堆实习生。所以呢,这个训练成本和这个推理成本就急剧下降了。这是他的整个架构上做的一个重大贡献吧。

然后他们做的另外一项特别大的贡献是什么呢?叫多头潜在注意力机制MLA。原来呢是叫MHA,就是叫多头注意力机制。这个东西什么意思呢?这个东西也很简单,像GPT也好,像任何这个大模型,写一句话进去,输入了一个东西,然后呢他会把这一句话分拆成很多段。每一段呢去来决定说:“我到底应该是在说什么?”然后把这个多段就变成多头了。

比如说我今儿说了一句话:“明天我们一起去吃炸酱面吧。”明天我们一起去吃炸酱面吧,然后再写个问号,这就是可能分成这么多头。他拿着这些东西干嘛使呢?拿着这些东西呢要进行匹配,说我到底应该让哪一部分知识,哪一科专家来给你干活。我要把它拆吧拆吧。

那么怎么匹配呢?在这个大模型的空间里头呢,它是一个矢量空间。矢量空间就是,如果你只有一个坐标的时候就在一条线上,两个坐标是一个平面,三个坐标就是一个空间。但是呢,在这个大模型的这个空间里,它的可能是512个坐标,或者是1,024个,有的是2,048个坐标。它是一个非常复杂的这种空间。

他把所有的知识放在这些空间里头去。我们拿着一句话,把它拆成一大堆头了,然后把每一个头呢,也在尺量空间里去做映射。映射完了以后呢,找到这个多头所映射的这些点,每一个点离他们最近的这个位置。你们到底要去回答什么东西,然后再把要去回答的这句话拼出来。这就是大模型干活的一个过程。

包括咱们前头讲了要去分诊,你到底分给哪个模型干呢?他也是要靠这种矢量空间去分,找离你这个矢量空间里最近的那几个点来。你们这几个专家或者实习生去给我干活去。那么在这个里头就有一个问题,是什么呢?数据在拆开了以后呢,它会形成一个叫KV对,对key and value,就是一个是键值,一个是里头的数值。那什么意思呢?比如说像刚才我们讲的这个拆分的过程,我把它拆成了一个,比如说1,024个维度的这样的一个坐标。那么这个key呢,就是一个1,024个数,这个坐标肯定是由1,024个数组成的吧。value,比如说是吃炸酱面,我到那个里头找,离这个点最近的8个专家,你来干活来,去处理一下吃炸酱面的事情。这叫key value。

那么大家发现了一个问题没有?1,024个整数那很大的呀。在这个MLA里头,就是说叫多头潜在注意力机制里头呢,他们把这玩意做了个压缩,就不会再有1,024个整数在对应后面那个炸酱面了。然后至于怎么去压缩降维这个事呢,说实话咱也没看懂。但是呢,可以给大家举例子。你想他如果前面这个数变少了,不是1024个了,比如说我就变成一个数,那肯定你在每一次进行比较的时候,每一次内存里边去存的时候,就会极大的提升比较速度,降低内存占用空间嘛。

那么他呢,干的活其实有点像什么呢?这个咱们讲一个我去新加坡的故事吧。就是我那时候去新加坡, 经常找不着地。一问你们在哪,哪个街哪个哪个路哪个号。后来人家那个新加坡的坡县朋友跟我讲了,说你不要这么去问路,在新加坡不是这么问路的。我说那怎么问呢?他说这个新加坡……

有一种非常有效的地址压缩方式,就是邮政编码。新加坡是每一栋建筑有一个邮政编码,每一个邮政编码呢,也就对应一栋建筑。所以这个呢,其实有点像key和value,邮政编码就是这个key,这栋建筑呢,就是这个value。

所以呢,你只要知道邮政编码了,你就肯定能找着他。大家把这个压缩的过程,就是key value压缩的过程,基本上可以把它看作一个什么样的过程。就是原来我记得是哪个区,哪条路多少号,哪个建筑物,现在呢,变成一个邮政编码,他就这么给你做压缩了。然后你要去找到他,也相对来说要容易一些,而且是一一对应的。所有key跟value的这个东西,就是一一对应。如果说一个邮政编码对应好多个建筑物的话,那就不叫key value了。像中国大陆,因为邮政编码比较少,所以我们经常是一片地区是一个邮政编码。但是新加坡这种,就是他每个邮政编码就一栋建筑物。

当然像这个Deepseek呢,并不是说把一个矢量的空间就压成了一个数,但是呢,他压少了。原来比如说是1024个,现在呢,压完了以后,比如剩了64个,这个呢,比较起来去做存储都会提高很多的效率。

那你说这两个点之间算距离怎么算?这个咱们学过数学,学过几何。如果是二维平面,就是x方加y方,那边呢是x1方加y1方。只要是俩数呢一减,如果这个数很小,就说明离得比较近,大概就这样的一个状态。三维空间呢,就是XYZ,那边也是XYZ,把这个东西都平方了以后,然后一减,如果这个数值很小,就说明比较近。如果是数值是0,那就说明这是在同一个地方。它就是这样的一个计算方式。

如果这个更多的维度,你就需要好多好多的XYZE,什么什么这样的坐标,然后都是平方,把它加起来,然后算出一个这个距离位置来。肯定是数越小,他算的越快,占的空间越小。这个是这一次Deepseek做出的一个重大贡献,就是两个贡献。大家记住了,第一个是细颗粒度专家模型,第二个贡献呢,就是叫做多头潜在注意力机制。

所以呢,就是Deepseek。你说,唉,到底先进在哪?就是这两个先进度,这个到底怎么回事?你们记住我前面讲的这个医院看病的故事和后边这个地址编邮政编码的故事,就可以大概有一个感性的认识了。

那么,下边一个问题是什么呢?你说这么好的技术,为什么不每个公司都用呢?Meta你做Lama的时候,为什么不用MoE呢?Claude你为啥不用MoE呢?这个技术这么好,为什么还会有人做这种叫密集模型呢?这个MoE它是有好多缺点,咱们刚才光讲优点了。优点就是说,你这个训练的时候比较省成本,推理的时候比较省成本,而且跑得很快。MoE模型要比密集型模型跑得要快得多,而且呢,他对于这个显卡要求没有那么高,比较适合于穷人玩这个东西。

那你说MoE模型的缺点是什么?第一个呢,它对于存储的要求是很大的。这些模型虽然很多在干活的时候,这些专家没干活,但是呢,你也得给他个屋子,你也得让他坐在那个诊疗室里等着。哪怕现在没有病人,你也得在那等着。所以呢,他们特别耗地儿,这个是MoE模型的一个非常讨厌的地方。

然后第二个讨厌的地方是什么呢?就是它微调非常麻烦。因为如果你要是做这种大的模型,就是做这种密集型模型,你是可以对它比较简单的行微调的。但是MoE模型呢,因为它本身的架构非常非常复杂。咱们就还是想刚才医院那例子吧,你有这么多实习生在里头做好了,你现在想让他们学习一个新技能,对于他们来说是很麻烦的一个事情。而且学完了以后,到底会有什么样的效果,这个事是比较难以预期的。所以呢,MoE模型比较难微调。

还有什么呢?就是负载均衡。咱呢还想回刚才那个医院那故事。有的医生一堆的病人在那看他,有的医生没人理他,这对MoE模型来说也是很灾难的。他们希望呢,尽可能所有的医生也好,专家也好,或者是实习生也好,都有事干,谁也别太累了,谁也别太闲了。但是呢,这件事情呢,是比较难以控制的。有些医生他就经常遇到相同的这种问题,可能就都是他管。

其他的医生,可能我们就是顺着这个罕见病的,可能就很少有人过来。这个事呢,你是在设计架构的时候,就比较难以去搞定。然后呢,MoE模型的下一个缺点是什么?就是通信开销很大。你想,他这么多的模型,又分层又分专家,还需要各种调度。他就会进行很多的计算机与计算机,或者显卡与显卡之间的这个调度,这块是相对来说要慢一点点。还有呢,就是部署比较麻烦。刚才我们讲这过程,你就知道这事部署有多费劲。你说我有一个大专家,坐在一个巨大的房子里头给大家看病,这玩意部署起来多简单。比如刚才我们讲的分58层,每层256个实习生,加一个会诊护士,这玩意多费劲。你还得盖多大的楼,把他们塞进去,这个部署很麻烦。

最后,有一个MoE模型比较难以避免的问题在哪呢?就是现在很多的大公司不愿意用,它的一个核心原因是这种小规模任务的容器出现过拟合。那有人问了,什么叫过拟合?这个老范你又在说黑话了。这个过拟合的意思呢,是小规模数据训练之后,在这个训练数据范围内,效果特别特别好。这不是好事吗?但是呢,你一旦遇到新的数据了,超出数据范围呢,效果的波动就会很大。有的时候可能还不错,有的时候就会变得很差。这个过程呢,就叫过拟合。

说还是听不懂,那么咱再讲一个故事吧。咱按刚才那实习生看病的故事。为什么我一定要强调这个是实习生,他不是专家呢?正常的学习,咱们是怎么学的?咱们正常的学习呢,是学习基础知识,做实验做练习,考试循序渐进这么学上来的。当你说:“哎,我这做一屋子实习生,我们没有空给你做”,这样比较慢的学习了,那怎么办呢?这个实习生要看病了,那咱们干脆分科目刷题吧。就跟这个咱们考驾照似的,上来有一个题目库,800道题,刷完了以后,到时候再考的时候呢,抽100道题考。你只要是在这800道题里头抽出来的,那我肯定是考得好。而且我可以通过快速的刷题,我没准可能两三天的时间,就可以把这个题都刷好了,然后我就可以去考,考试100分。

因为大家知道考驾照这个事是100道题,错5个以上就不及格。你至少要考到95分才可以去过关。这些实习生我们就用这种方式去训练。他在题库范围内表现都非常好,但是这些人一旦超出题库范围了,没学过呀,怎么办?不会了。他就会出现这样的问题,这个过程就是过拟合。他呢,现在把这种模型缩得这么小颗粒度,所以呢,每一个这个小颗粒度的专家,或者叫实习生,他们其实可以处理的问题是很少的。他们都是这种刷题、紧急训练出来的实习生。一旦超出了一定的范围以后,他的结果大家就比较难以去处理。

现在有很多人在去尝试使用Deepseek V3。就是你用这个正常的东西跟他沟通和交流,让他写程序什么的,效果都很好。但是呢,一些比较偏门的这个语言,或者一些比较小众的语言,跟他讲完了以后,他会出现听不懂的情况。你要求他去做一些比较复杂的、比较小众的算法的时候,他输出的效果也会明显下降。这个就跟我们每天上街去开车,像我开车肯定是个熟练工,但是我们跟赛车手比起来,我们这个技术还是差的比较远的,所以他会有这样的缺陷。

现在呢,MoE模型跟这种密集型模型呢,各有各的使用场景。MoE模型呢是大规模多任务学习,就是我们任务很杂,什么都干一点点,什么都懂一点。这有点像老范,老范就属于是什么都懂一点,但哪块都不是特别精通,受资源限制的这种环境。因为你如果资源多的话,谁跟你费这劲,MoE直接上密集模型就完事了。

需要处理多样化的数据场景,就是什么事都要去折腾一下。所以呢,这个MoE模型呢,很适合中国的一条道路,因为我们缺乏高性能显卡,也没有办法去搞这种高运算密度的集群出来,所以咱们比较适合干MoE。密集型的模型,就是像Claude、Kimi的这个moonshot模型,还有像Llama这样的模型,都是密集型模型,单一任务、同质化任务,这是他们比较擅长的,高稳定性要求的任务是他们比较擅长的。

它有一个比较大的好处,是什么呢?叫做训练容易。刚才我们讲到58层,每层256个专家。那你要想训练这些人,刚才不是说吗?我们不是刷题就行了吗?对,但是呢,你要给58层每一层256个实习生确定不同的题目让他们刷,这个过程是很麻烦的。如果你说刷的题不对了,那最后他们就没有办法很好地配合在一起工作。

我们要整体设计这个体系架构,这个事情是很麻烦的。所以,MoE模型本身的训练不是那么简单,虽然它的训练成本并不高,但你要去规划它的训练进程,规划它的训练数据,这个事情是非常非常麻烦的。我们给这么多的实习生,每个人出一套不同的题目让他们去刷题,这事有多费劲。

密集型模型呢,只要有数据就开始升榜,这个是比较容易的。还有一个就是密集型模型比较容易去做微调,因为我就是训练了一个学生,从头到尾都训练下来了,那我在后边给你加一门课或者什么的,你去微调一下,这块也比较方便。

那么我个人的使用感受呢,正常的沟通和回答基本上可以达到GPT-4O的水平了。刷题就是因为现在有很多测试题嘛,刷的肯定也是很高的。但是呢,一些比较偏门的东西,有的时候还是会出现“咦,没见过呀,不会玩了”,这个事情还是会发生的。GPT-4O在这一点上要比它强一些。

上下文的这个参数呢,不太够多,这是现在我遇到的一个问题,因为它现在应该是128K。像我们使用GPT-4O也好,使用Gemini也好,现在都已经可以达到每一次输入到100万到200万这个TOKEN进去了。所以呢,在这一块,Deepseek V3还是要稍微差一些。目前呢还不支持多模态,据说是在开始做了。在国内的或者资源受限的情况下,处理纯文本内容,包括编程或者说普通编程吧,Deepseek V3应该已经是完完全全够用的一个状态。这就是今天跟大家讲的Deepseek V3技术上的故事吧。

 

Both comments and pings are currently closed.

Comments are closed.

Close Bitnami banner
Bitnami