# 0.contents

github地址：<https://github.com/daiwk/collections>

附：最近vibe出来的一些东西：

* autoresearch：<https://daiwk.github.io/auto-research/>, 代码：<https://github.com/daiwk/auto-research>
* 从0搞一个agent：<https://daiwk.github.io/building-agents-from-scratch/>，代码：<https://github.com/daiwk/building-agents-from-scratch>

本网站目录：

* 大模型相关：
  * 大模型之前的时代：[pre\_llm](https://www.daiwk.net/1.1.pre_llm)
  * 大模型介绍：[llm\_intro](https://www.daiwk.net/1.2.llm_intro)
  * 大模型工程架构：[llm\_archs](https://www.daiwk.net/1.3.llm_archs)
  * 大模型的监督微调：[llm\_sft\_and\_usages](https://www.daiwk.net/1.4.llm_sft_and_usages)
  * 大模型的对齐：[llm\_alignment](https://www.daiwk.net/1.5.llm_alignment)
  * 多模态大模型：[llm\_multimodal](https://www.daiwk.net/1.6.llm_multimodal)
  * 大模型与推荐：[llm\_recommend](https://www.daiwk.net/1.7.llm_recommend)
  * O1类的推理大模型：[llm\_o1](https://www.daiwk.net/1.8.llm_o1)
  * 大模型其他：[llm\_others](https://www.daiwk.net/1.9.llm_others)
* 推荐：[recommend](https://www.daiwk.net/2.recommend)
* 大模型+推荐的一些个人总结：[llm\_rec\_summary](https://www.daiwk.net/3.llm_rec_summary)
* 大模型的学习笔记：[llm\_note](https://www.daiwk.net/4.llm_note)
* 大模型agentic：[llm\_agentic](https://www.daiwk.net/5.llm_agentic)
* 机器学习面试汇总：[int-ml](https://www.daiwk.net/8.int-ml)
* 之前的一些总结：[collections](https://www.daiwk.net/9.collections)

***

所有pdf详见

链接: <https://pan.baidu.com/s/11YH16592t\\_SRTK2zFEDrrQ?pwd=8sgt> 提取码: 8sgt

***


# 00.bitter\_lesson

<http://www.incompleteideas.net/IncIdeas/BitterLesson.html>

中文：

从 70 年的人工智能研究中可以得出的最大教训是，利用计算的通用方法最终是最有效的，而且效率更高。其根本原因是摩尔定律，或者更确切地说，是其对单位计算成本持续呈指数级下降的概括。大多数人工智能研究都假设智能体可用的计算量是恒定的（在这种情况下，利用人类知识将是提升性能的唯一途径之一），但与典型的研究项目相比，在稍长的时间内，不可避免地会出现大量的计算量。为了寻求短期内带来显著效果的改进，研究人员试图利用他们在该领域的人类知识，但从长远来看，唯一重要的是利用计算。这两者并不一定相互矛盾，但在实践中往往如此。花在一种方法上的时间就等于没有花在另一种方法上的时间。人们在心理上会倾向于投资于一种方法或另一种方法。而基于人类知识的方法往往会使方法复杂化，使其不太适合利用利用计算的通用方法。人工智能研究人员迟迟未能吸取这一惨痛教训的例子不胜枚举，回顾其中一些最为突出的案例颇具启发意义。

在计算机象棋领域，1997年击败世界冠军卡斯帕罗夫的方法正是基于大规模深度搜索。当时，大多数致力于利用人类对象棋特殊结构理解的计算机象棋研究人员对此感到沮丧。当一种更简单的、基于搜索的方法，结合特殊的硬件和软件，被证明更为有效时，这些基于人类知识的象棋研究人员便不再是输不起的人了。他们表示，“蛮力”搜索或许这次赢了，但它并非通用策略，而且无论如何，这也不是人类下象棋的方式。这些研究人员希望基于人类输入的方法能够获胜，但最终却未能如愿，他们为此感到失望。

计算机围棋的研究也呈现出类似的模式，只是晚了20年。最初，人们投入了巨大的努力，试图利用人类的知识或围棋本身的特性来规避搜索，但一旦搜索被大规模有效地应用，所有这些努力都被证明是无用的，甚至更糟。同样重要的是利用自我对弈学习来学习价值函数（就像在许多其他游戏甚至国际象棋中一样，尽管在1997年首次击败世界冠军的程序中，学习并没有发挥重要作用）。自我对弈学习以及一般的学习，就像搜索一样，能够运用大规模计算。搜索和学习是人工智能研究中利用大规模计算的两大最重要的技术。在计算机围棋中，就像在计算机国际象棋中一样，研究人员最初的努力是利用人类的理解力（这样就需要更少的搜索），直到很久以后，通过拥抱搜索和学习才取得了更大的成功。

在语音识别领域，早在20世纪70年代就有一个由美国国防部高级研究计划局（DARPA）赞助的早期竞赛。参赛方法包括一系列利用人类知识（例如词汇、音素、人类声道等知识）的特殊方法。另一方面，还有一些基于隐马尔可夫模型 (HMM) 的新方法，它们本质上更具统计性，计算量更大。统计方法再次胜过基于人类知识的方法。这导致了整个自然语言处理领域的重大变革，几十年来，统计和计算逐渐占据了主导地位。语音识别领域深度学习的兴起正是朝着这一方向迈出的最新一步。深度学习方法对人类知识的依赖程度更低，使用更多的计算，并结合在海量训练集上进行学习，从而显著提升了语音识别系统的性能。就像在游戏中一样，研究人员总是试图构建出符合他们自身思维方式的系统——他们试图将这些知识融入到自己的系统中——但最终却适得其反，浪费了研究人员大量的时间。而随着摩尔定律的出现，大规模计算成为可能，人们也找到了充分利用计算资源的方法。

在计算机视觉领域，也存在类似的模式。早期的方法将视觉理解为搜索边缘、广义圆柱体或 SIFT 特征。但如今，所有这些都已被摒弃。现代深度学习神经网络仅使用卷积和某些类型的不变性概念，但性能却显著提升。

这是一个重要的教训。作为一个领域，我们至今仍未彻底汲取教训，因为我们仍在不断犯同样的错误。为了认识到这一点并有效地抵制它，我们必须理解这些错误的吸引力。我们必须汲取惨痛的教训，那就是，从长远来看，固守我们固有的思维方式是行不通的。这个惨痛的教训基于以下历史观察：

1）人工智能研究人员经常尝试将知识融入他们的智能体；

2）这在短期内总是有帮助的，并且能让研究人员个人感到满意，但

3）从长远来看，它会停滞不前，甚至会阻碍进一步的进步；

4）突破性的进展最终会通过一种基于搜索和学习扩展计算能力的相反方法实现。最终的成功往往带着一丝苦涩，而且往往难以完全消化，因为它是对一种备受青睐的、以人为本的方法的成功。

从这个惨痛的教训中，我们应该汲取的一点是通用方法的强大威力，即使可用的计算能力已经非常庞大，这些方法仍然能够随着计算能力的增加而不断扩展。似乎可以以这种方式任意扩展的两种方法是*搜索*和*学习*。

从惨痛教训中可以吸取的第二个普遍观点是，思维的实际内容极其复杂，无可救药；我们应该停止试图寻找思考思维内容的简单方法，例如思考空间、物体、多主体或对称性的简单方法。所有这些都是任意的、本质上复杂的外部世界的一部分。它们不是应该内置的东西，因为它们的复杂性是无穷无尽的；相反，我们应该只内置能够发现和捕捉这种任意复杂性的元方法。这些方法的本质是它们可以找到好的近似值，但寻找它们应该由我们的方法来完成，而不是由我们来完成。我们想要的是能够像我们一样发现的人工智能代理，而不是包含我们已经发现的东西的代理。内置我们的发现只会让我们更难看出发现过程是如何完成的。

英文：

The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin. The ultimate reason for this is Moore's law, or rather its generalization of continued exponentially falling cost per unit of computation. Most AI research has been conducted as if the computation available to the agent were constant (in which case leveraging human knowledge would be one of the only ways to improve performance) but, over a slightly longer time than a typical research project, massively more computation inevitably becomes available. Seeking an improvement that makes a difference in the shorter term, researchers seek to leverage their human knowledge of the domain, but the only thing that matters in the long run is the leveraging of computation. These two need not run counter to each other, but in practice they tend to. Time spent on one is time not spent on the other. There are psychological commitments to investment in one approach or the other. And the human-knowledge approach tends to complicate methods in ways that make them less suited to taking advantage of general methods leveraging computation.  There were many examples of AI researchers' belated learning of this bitter lesson, and it is instructive to review some of the most prominent.

In computer chess, the methods that defeated the world champion, Kasparov, in 1997, were based on massive, deep search. At the time, this was looked upon with dismay by the majority of computer-chess researchers who had pursued methods that leveraged human understanding of the special structure of chess. When a simpler, search-based approach with special hardware and software proved vastly more effective, these human-knowledge-based chess researchers were not good losers. They said that \`\`brute force" search may have won this time, but it was not a general strategy, and anyway it was not how people played chess. These researchers wanted methods based on human input to win and were disappointed when they did not.

A similar pattern of research progress was seen in computer Go, only delayed by a further 20 years. Enormous initial efforts went into avoiding search by taking advantage of human knowledge, or of the special features of the game, but all those efforts proved irrelevant, or worse, once search was applied effectively at scale. Also important was the use of learning by self play to learn a value function (as it was in many other games and even in chess, although learning did not play a big role in the 1997 program that first beat a world champion). Learning by self play, and learning in general, is like search in that it enables massive computation to be brought to bear. Search and learning are the two most important classes of techniques for utilizing massive amounts of computation in AI research. In computer Go, as in computer chess, researchers' initial effort was directed towards utilizing human understanding (so that less search was needed) and only much later was much greater success had by embracing search and learning.

In speech recognition, there was an early competition, sponsored by DARPA, in the 1970s. Entrants included a host of special methods that took advantage of human knowledge---knowledge of words, of phonemes, of the human vocal tract, etc. On the other side were newer methods that were more statistical in nature and did much more computation, based on hidden Markov models (HMMs). Again, the statistical methods won out over the human-knowledge-based methods. This led to a major change in all of natural language processing, gradually over decades, where statistics and computation came to dominate the field. The recent rise of deep learning in speech recognition is the most recent step in this consistent direction. Deep learning methods rely even less on human knowledge, and use even more computation, together with learning on huge training sets, to produce dramatically better speech recognition systems. As in the games, researchers always tried to make systems that worked the way the researchers thought their own minds worked---they tried to put that knowledge in their systems---but it proved ultimately counterproductive, and a colossal waste of researcher's time, when, through Moore's law, massive computation became available and a means was found to put it to good use.

In computer vision, there has been a similar pattern. Early methods conceived of vision as searching for edges, or generalized cylinders, or in terms of SIFT features. But today all this is discarded. Modern deep-learning neural networks use only the notions of convolution and certain kinds of invariances, and perform much better.

This is a big lesson. As a field, we still have not thoroughly learned it, as we are continuing to make the same kind of mistakes. To see this, and to effectively resist it, we have to understand the appeal of these mistakes. We have to learn the bitter lesson that building in how we think we think does not work in the long run. The bitter lesson is based on the historical observations that 1) AI researchers have often tried to build knowledge into their agents, 2) this always helps in the short term, and is personally satisfying to the researcher, but 3) in the long run it plateaus and even inhibits further progress, and 4) breakthrough progress eventually arrives by an opposing approach based on scaling computation by search and learning. The eventual success is tinged with bitterness, and often incompletely digested, because it is success over a favored, human-centric approach.

One thing that should be learned from the bitter lesson is the great power of general purpose methods, of methods that continue to scale with increased computation even as the available computation becomes very great. The two methods that seem to scale arbitrarily in this way are *search* and *learning*.

The second general point to be learned from the bitter lesson is that the actual contents of minds are tremendously, irredeemably complex; we should stop trying to find simple ways to think about the contents of minds, such as simple ways to think about space, objects, multiple agents, or symmetries. All these are part of the arbitrary, intrinsically-complex, outside world. They are not what should be built in, as their complexity is endless; instead we should build in only the meta-methods that can find and capture this arbitrary complexity. Essential to these methods is that they can find good approximations, but the search for them should be by our methods, not by us. We want AI agents that can discover like we can, not which contain what we have discovered. Building in our discoveries only makes it harder to see how the discovering process can be done.


# 1.1.pre\_llm

## 从word2v到Transformer

### LSTM

[超生动图解LSTM和GRU，一文读懂循环神经网络！](https://mp.weixin.qq.com/s/vVDAB2U7478yOXUT9ByjFw)

### fasttext\&word2vec

注：w2v训练时的内积不是2个emb-in的内积，而是emb-in和emb-out的内积

[fasttext源码解析](https://my.oschina.net/u/3800567/blog/2877570)

* `Dictionary::readWord`：空格分割，一次读出来一个word
* `Dictionary::add`：每个word求个hash，加进词典时，id就是从0开始的序号，同时记录一下词频
* `Dictionary::threshold`：按词频排序，扔掉低频词
* `Dictionary::initNgrams`：每个词，加上前缀BOW（<）和后缀（>），然后先扔进这个词的subwords里，然后再调用 `Dictionary::computeSubwords`把这个词的ngrams也扔进它的subwords里

整个词表，是word数+bucket这么大，其中bucket表示可容纳的subwords和wordNgrams的数量，默认200w

[为什么Word2Vec训练中, 需要对负采样权重开3/4次幂？](https://zhuanlan.zhihu.com/p/144563199?utm_id=0)

[Distributed Representations of Words and Phrases and their Compositionality](https://arxiv.org/pdf/1310.4546.pdf)里提到

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-09345514cb46f9b8ee60b131a129a35c07675478%2Fword2vec_3_4_sample.jpeg?alt=media)

通过对权重开3/4次幂，可以提升低频词被抽到的概率。在保证高频词容易被抽到的大方向下，通过权重3/4次幂的方式，适当提升低频词、罕见词被抽到的概率。如果不这么做，低频词，罕见词很难被抽到，以至于不被更新到对应的Embedding。

### BPE/WordPiece分词

[【Subword】深入理解NLP Subword算法：BPE、WordPiece、ULM](https://mp.weixin.qq.com/s/U9F8G-OUCb9kunTk_tZYFw)

### Transformer原理

[从三大顶会论文看百变Self-Attention](https://mp.weixin.qq.com/s/R9FoceRsPB3ceqKpnYPvbQ)

[包学包会，这些动图和代码让你一次读懂「自注意力」](https://mp.weixin.qq.com/s/Z0--eLLiFwfSuMvnddKGPQ)

<http://jalammar.github.io/illustrated-transformer/>

[从熵不变性看Attention的Scale操作](https://kexue.fm/archives/8823)

[Transformers Assemble（PART I）](https://mp.weixin.qq.com/s/NZM05zyUkldOwpNIbsOtDQ) 讲了3篇

[Transformers Assemble（PART II）](https://mp.weixin.qq.com/s/JdUVaQ3IyrflHvxIk5jYbQ) 又讲了三篇

#### 为什么层次化softmax没人用了

[Transformer 结构中最后一层 softmax 为什么不再使用 层次化softmax了呢？](https://www.zhihu.com/question/310845030/answer/595573391?hb_wx_block=0\&utm_source=wechat_session\&utm_medium=social\&utm_oi=632586637935251456)

主要还是计算资源的问题。

Mikolov发明word2vec的几个版本大概在13-14年前后。那个时候GPU非常少见，印象里面CMU的NLP组没有GPU，Stanford NLP lab只有6块K40。

大规模直接算softmax是在google的14年那篇seq2seq做MT的文章。为了快，把一个softmax并行在4块GPU上，每个GPU负责四分之一。那个年代，大多数NLP组全组都不会有4块GPU。

hierarchical softmax是softmax的近似，suboptimal的。当如今计算资源足够大的时候，当然包括时间和显存 (BERT 和 Elmo 都没有用hierarchical)，hierarchical softmax就逐渐退出了历史舞台。

#### Transformer会不会规划未来

[Transformer本可以深谋远虑，但就是不做](https://mp.weixin.qq.com/s/1kolCWSsFAp4e9MGG089vQ)

[Do Language Models Plan for Future Tokens?](https://arxiv.org/pdf/2404.00859.pdf)

在训练期间的梯度既会为**当前token位置**的损失优化权重，也会为该序列**后面的token**进行优化，那么这二者会以怎样的比例分配资源？

* 预缓存假设（pre-caching hypothesis）：在时间步$$t$$计算与**当前时间步的推理任务无关**但**可能对未来时间步**$$t + \tau$$**有用**的特征
* 面包屑假设（breadcrumbs hypothesis）：与时间步$$t$$**最相关的特征**已经**等同**于将在**时间步**$$t + \tau$$**最有用**的特征。

设计了一种合成场景，其中**只能通过显式的预缓存完成任务**，即模型必须为下一token预先计算信息，\*\*否则就无法在一次单向通过中准确计算出正确答案。\*\*发现明显的证据说明transformer可以学习预缓存，即当必须预计算信息来最小化损失时，它们就会这样做。

但在真实语言数据上，语言模型并不会显著地准备用于未来的信息。相反，它们是计算对预测**下一个token有用的特征**——事实证明**这对未来的步骤也很有用**。

### 矩阵乘法的一些trick

<https://www.thonking.ai/p/what-shapes-do-matrix-multiplications>

<https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#tile-quant>

<https://github.com/stanford-cs336/spring2025-lectures/blob/main/nonexecutable/2025%20Lecture%205%20-%20GPUs.pdf>

一些结论：

* 矩阵size能被k整除时，k的取值变化对应的速度变化：2<8<16<32
* 矩阵是连续分块读取的，通常会读连续的几个块出来，如果矩阵shape变化导致不连续了，就会导致访问时间上涨。如下例子：
* A100有108的SM，例如分块为$$256\times 128$$，一个(2304,1536)的矩阵划分为$$9\times 12=108$$个tiles，刚好全部利用，如果矩阵略大一点比如(2304,1538), 划分为$$9\times 13=117$$个tiles，就需要多整整一倍的运行时间。

\==>尽量保证矩阵乘法的dim，dim/head等都尽量被2的幂次整除，同时尽量的保证分块数接近SM数的倍数

### Transformer的FLOPS和访存带宽

**这个总结得不错**：<https://jax-ml.github.io/scaling-book/transformers/>

我问了下gpt qwen3的flops：<https://chatgpt.com/share/69faee2a-176c-83a1-9f74-dc869f7c9509>

<https://zhuanlan.zhihu.com/p/624740065>

$$A$$的shape是$$m\times k$$，$$B$$的shape是$$k\times n$$，那么矩阵乘法$$AB$$需要$$m\times k\times n$$次的乘法，也需要同样多次的加法，所以FLOPS是$$2\times m\times k\times n$$

假设batchsize是$$b$$，序列长度$$s$$，原来的emb是$$d$$，即输入的是$$\[b,s,d]$$，一般$$d=d\_k=d\_v=d\_q$$，$$W\_Q$$、$$W\_K$$、$$W\_V$$都是$$d\_v\times d\_v$$，对应的Q、K、V矩阵都是$$s\times d\_v$$，有$$head\_num$$个头，每个头的维度$$per\_head\_d=\frac{d}{head\_num}$$

#### attention的FLOPS

attention的公式：

$$
\begin{aligned}
\&Q=x W\_Q, K=x W\_K, V=x W\_V\\
\&x\_{\text {out }}=\operatorname{softmax}\left(\frac{Q K^T}{\sqrt{h}}\right) \cdot V \cdot W\_o+x
\end{aligned}
$$

* 计算3个Q、K、V：要算三次$$s\times d$$和$$d\times d\_v$$的矩阵乘法，所以是：$$3\times 2\times b\times s\times d\times d\_v$$
  * 输入：$$\[b, s, d]$$和3个$$\[b, d, d\_v]$$
  * 输出：$$\[b, s, d\_v]$$，再把最后一维$$d\_v$$拆成$$head\_num$$份，再把中间两维互换一下，得到$$\[b, head\_num, s, per\_head\_d]$$
* 计算Q和K的相似度：要算一次$$s\times d\_v$$和$$d\_v\times s$$的矩阵乘法，$$2\times b\times s^2\times d\_k$$
  * 输入：$$\[b, head\_num, s, per\_head\_d]$$和$$\[b, head\_num, per\_head\_d, s]$$
  * 输出：$$\[b, head\_num, s, s]$$
* 把相似度用到V上：要算一次$$s\times s$$和$$s\times d\_v$$的矩阵乘法，，$$2\times b\times s^2 \times d\_v$$
  * 输入：$$\[b, head\_num, s, s]$$和$$\[b, head\_num, s, per\_head\_d]$$
  * 输出：$$\[b, head\_num, s, per\_head\_d]$$
* 最后过一个线性映射：要算一次$$s\times d\_v$$的和$$d\_v\times d\_v$$的矩阵乘法，$$2\times b\times s\times d\_v\times d\_v$$
  * 输入：$$\[b, s, d\_v]$$和$$\[d\_v, d\_v]$$
  * 输出：$$\[b, s, d\_v]$$

因为$$d\_k=d\_v=d\_q=d$$，单纯计算attention总共就是$$8bsd^2 + 4bs^2d$$

#### FFN的FLOPS

FFN的公式：

$$
x=f\_{\text {gelu }}\left(x\_{\text {out }} W\_1\right) W\_2+x\_{\text {out }}
$$

在原始Transformer中，$$W\_1$$的shape是$$\[d,4d]$$，$$W\_2$$的shape是$$\[4d,d]$$，

* 第一个线性层：$$2\times b\times s\times\ d\times 4d=8\times b\times s\times\ d^2$$
  * 输入：$$\[b, s, d]$$和$$\[d,4d]$$
  * 输出：$$\[b, s, 4d]$$
* 第二个线性层：$$2\times b\times s\times\ 4d\times d=8\times b\times s\times\ d^2$$
  * 输入：$$\[b, s, 4d]$$和$$\[4d,d]$$
  * 输出：$$\[b, s, d]$$

所以一层Transformer，即attention+FFN的计算量为$$(8bsd^2 + 4bs^2d)+16bsd^2=24bsd^2+4bs^2d$$

有两点需要注意的：

* 对NLP任务来讲，一般$$d$$是个比较固定的值，如512，而$$s$$变大，效果会更好，所以一般是$$s>d$$，所以复杂度取决于$$s$$的大小。
* 但有些模型的初始设置不是这样的，例如GPT3的175B模型里，$$s=2048,d=12288$$，当然，算力够的话也可以把$$s$$变大

自己感觉：既然是$$24bsd^2+4bs^2d$$，其实就是$$6sd^2$$和$$s^2d$$的大小，即$$6d$$和$$s$$的大小，如果$$6d>s$$，则$$d^2$$起主导，反之$$s^2$$起主导

#### DIN的FLOPS

特殊地，对于推荐中的DIN那种，看当前item和历史s个item的相关性，即q的序列长度只有1，不考虑多头，而这其实也是decoder预测下一个词时过一层Transformer的复杂度

已经有3个序列长度为$$s-1$$的QKV的cache，要算第$$s$$个词和这$$s-1$$个词的attention

* 计算第$$s$$个词的3个Q、K、V：要算三次$$1\times d$$和$$d\times d\_v$$的矩阵乘法，所以是：$$3\times 2\times b\times 1\times d\times d\_v$$
  * 输入：$$\[b, 1, d]$$和3个$$\[b, d, d\_v]$$
  * 输出：$$\[b, 1, d\_v]$$
* 计算Q和K的相似度：要算一次$$1\times d\_v$$和$$d\_v\times s$$的矩阵乘法，$$2\times b\times 1\times d\_k\times s$$【这里的K是历史$$s-1$$长度的序列拼上当前词，当然对DIN来讲要去掉当前词，这里先忽略这个】
  * 输入：$$\[b, 1, d\_v]$$和$$\[b, d\_v, s]$$
  * 输出：$$\[b, 1, s]$$
* 把相似度用到V上：要算一次$$1\times s$$和$$s\times d\_v$$的矩阵乘法，，$$2\times b\times 1 \times d\_v \times s$$【同样地，这里的V是历史$$s-1$$长度的序列拼上当前词，当然对DIN来讲要去掉当前词，这里先忽略这个】
  * 输入：$$\[b, 1, s]$$和$$\[b, s, d\_v]$$
  * 输出：$$\[b, 1, d\_v]$$
* 最后过一个线性映射：要算一次$$1\times d\_v$$的和$$d\_v\times d\_v$$的矩阵乘法，$$2\times b\times 1\times d\_v\times d\_v$$
  * 输入：$$\[b, 1, d\_v]$$和$$\[d\_v, d\_v]$$
  * 输出：$$\[b, 1, d\_v]$$
* 第一个线性层：$$2\times b\times 1\times\ d\times 4d=8\times b\times 1\times\ d^2$$
  * 输入：$$\[b, 1, d]$$和$$\[d,4d]$$
  * 输出：$$\[b, 1, 4d]$$
* 第二个线性层：$$2\times b\times 1\times\ 4d\times d=8\times b\times 1\times\ d^2$$
  * 输入：$$\[b, 1, 4d]$$和$$\[4d,d]$$
  * 输出：$$\[b, 1, d]$$

总共是$$6bd^2+2bds+2bds+2bd^2+8bd^2+8bd^2=24bd^2+4bds$$

#### Transformer的访存

GPU架构的介绍参考<https://developer.nvidia.com/blog/nvidia-ampere-architecture-in-depth/>和<https://www.zhihu.com/question/319355296/answer/2193938981>，GPU对比CPU如下：

* 任务模式
  * CPU由专为顺序串行处理而优化的几个核心组成
  * GPU则拥有一个由数以千计的更小、更高效的核心（专为同时处理多重任务而设计）组成的大规模并行计算架构。同时CPU相当的一部分时间在执行外设的中断、进程的切换等任务，而GPU有更多的时间并行计算。
* 功能定位
  * CPU不但要承担计算任务还有承担逻辑控制等任务。
  * GPU在渲染画面时需要同时渲染数以百万记的顶点或三角形，故GPU的设计是可以充分支持并行计算。
* 系统集成
  * GPU作为一类外插设备，在尺寸、功率、散热、兼容性等方面的限制远远小于CPU，这样可以让GPU有较大的显存和带宽。

以A100为例，整体架构如下

![ga100-full-gpu-128-sms](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-622da2e98c482349ec21297207b3bcebf28eea0f%2Fga100-full-gpu-128-sms.png?alt=media)

1. PCIE层：通过PCIE接口以外设的方式集成到服务器上。
2. 中间一坨绿色的部分是GPU的计算核心**SM(Streaming Multiprocessor)**，在A100中，一个SM有64个用于计算的Core，共108个SM(图里是GA100,有128个SM)，故共6192个Core。
3. 中间蓝色部分是L2缓存
4. NVLink：**多个GPU间进行通信**的组件，会优化GPU间的通信，提升传输效率。
5. 两侧的HBM2是显存，目前的A100的显存有两种40G and 80G

A100的SM如图所示，

![a100-sm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9b24bfefdc2b7070e11de40b4b399d8dd9ee46b0%2Fa100-sm.png?alt=media)

GPU的显存分成两部分：

* Global Memory：整体架构图中的**两侧HBM2**部分，例如A100 80G就有80G的global memory，**2TB/s带宽**，访问速度比较慢
* Shared Memory：SM图中**浅蓝色**的L1 Data Cache，例如A100中每个SM中有**192KB**，访问速度比较快

从图中可见，A100的**FP16**有**312T的FLOPS**

![A100-tensorcore-performance](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-94140a4b74f3396e4ebfe63d3084d7114354516b%2FA100-tensorcore-performance.png?alt=media)

以矩阵乘法为例，$$\[M, K] \times \[K, N] -> \[M,N]$$，

* 计算时间：$$2MKN/FLOPS$$
* 访存时间为：$$(MN+MK+KN)/memory\_bandwidth$$，因为首先要**读取**$$MK$$和$$NK$$这两个矩阵，然后结果还要**写入**$$MN$$这个矩阵里。假设是fp16，占2bytes，那就还要乘以2

假设$$b=1,s=4096,d=d\_k=2048$$，以计算Q和K的相似度为例，对比一下训练和预测时的**计算耗时**和**访存耗时**

* **训练时**：$$M=4096,K=2048,N=4096$$==>**计算是瓶颈**
  * FLOPS：$$2\times b\times s^2\times d\_k=2\times 1\times 4096^2\times 2048=68719476736$$
  * 计算耗时：$$FLOPS/max\_FLOPS=68719476736/(312\times 10^{12})=0.00022s=220\times 10^{-6}s=220us$$
  * 访存耗时：$$(MN+MK+KN)/memory\_bandwidth=2\times (4096\times 4096+4096\times 2048+2048\times 4096)/(2\times 10^{12})=3.35544\times 10^{-5}s=33.544\times 10^{-6}=33.5544us$$
* **预测时**：$$M=1,K=2048,N=4096$$==>**访存是瓶颈**
  * FLOPS：$$2\times b\times 1\times d\_k\times s=2\times 1\times 2048\times 4096=16777216$$
  * 计算耗时：$$FLOPS/max\_FLOPS=16777216/(312\times 10^{12})=5.38\times 10^{-8}s=0.0538\times 10^{-6}s=0.0538us$$
  * 访存耗时：$$(MN+MK+KN)/memory\_bandwidth=2\times (1\times 4096+1\times 2048+2048\times 4096)/(2\times 10^{12})=8.3948\times 10^{-6}s=8.3948us$$

一些常见的名词：

* H2D：host to device，从cpu拷贝到gpu
* D2H：device to host，从gpu拷贝到cpu

320GB/s（MLU580） vs 64GB/s（L20） L20缺乏高速NVLink，卡间通信只能依赖于PCIE 4.0（速率约16-22GB/s），远低于NVLink（通常>750GB/s）

#### 一些特殊结构的flops

GQA：以qwen3-1.7b为例，

```python
hidden_size = 2048
num_attention_heads = 16
num_key_value_heads = 8
head_dim = 128
```

意味着Q和O是用的16head，每个head是128，即$$16\times 128=2048$$；但K和V是用的8head(即8个Group，每个group里共享)，每个head也是128，那就是$$8\times 128=1024$$；

所以Q和O的矩阵是$$2048\times 2048$$，而K和V的矩阵是$$2048\times 1024$$，至于multi head其实是先concat再reshape，这个前面算attn flops时讲了。

所以，假设序列长度是768，那么，Q和O的flops是$$2\times 768 \times 2048 \times 2048=6.44\times 10^9=6.44B FLOPS$$，K和V是$$2\times 768 \times 2048 \times 1024=3.22\times 10^9=3.22B FLOPS$$

#### 一些注意点

美国的芯片禁令主要是减小带宽

F是理论flops, B是理论访存带宽，模型的计算flops是f，模型的访存是b，MFU=f/F

一个$$m\times k$$和$$k\times n$$的矩阵乘法的延时就是$$max(2mkn/F, (mk+kn+mn)/B)$$

roofline：参考[Roofline: An Insightful Visual Performance Model for Floating-Point Programs and Multicore Architectures](https://people.eecs.berkeley.edu/~kubitron/cs252/handouts/papers/RooflineVyNoYellow.pdf)

计算强度(Arithmetic Intensity, AI)$$AI\_{max}=F/B,\ AI=f/b$$，计算强度其实就是每加载1字节数据，能做多少计算，

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4a35b3f893e104d731d1af046994de492d828cfa%2Froofline.png?alt=media)

图的纵轴是flops，横轴是AI，算力决定“屋顶”的高度；带宽决定“房檐”的斜率

* 计算瓶颈(Compute-Bound)：模型的AI大于$$AI\_{max}$$时，模型把大部分时间花费在计算上，MFU较高
* 访存瓶颈(Memory-Bound)：当模型的AI小于$$AI\_{max}$$时，模型把大部分时间花费在读写显存上，MFU较低

一些常见结构的瓶颈：

* 大型矩阵乘（GEMM：Attention QK/KV/FFN）：AI非常高==>计算bound
* LayerNorm/RMSNorm/SwiGLU/BiasAdd/Dropout：AI极低，基本不计算，只是HBM读写==>访存bound
* 越长条形的矩阵（某一维特别小）越容易进入访存bound，因为tile和warp很难排满，Tensor Core 吃不饱，导致AI下降。

优化MFU的主要手段：

1. 让模型更加计算bound
   * batchsize变大：可以减少kernel启动次数
   * kernel融合：把多个细碎算子合并成一个大算子
   * 增加并行度：让TP变大（例如从1变成8），这样模型能算更大矩阵乘，而大GEMM的MFU是高的
   * 减少CPU/GPU之间等待：例如dataloader读数据慢
2. 加快通信：
   * 提高通信带宽：卡内nvlink通信、卡间网络通信
   * 减小通信量：例如通信量`ZeRO1<ZeRO2<ZeRO3`
   * 更好的通信调度：把计算和通信overlap，即在GPU上跑某个compute kernel（例如GEMM）时，不阻塞通信（NCCL allreduce/allgather）等，例如Megatron-LM的`--overlap-grad-reduce`和`--overlap-param-gather`

流水线：

计算和通信是2个不同硬件，算一半就通信一半，通信的时候并行算另一半，xxx

tensor core：专门算矩阵乘 cuda core：算特征函数，例如exp，elementwise乘

华为卡：算dropout很挫,模型里尽量不要有这个算子

因为dropout的随机数发生器，底层是用cuda core里的计算，但华为有一个指令没在底层支持，所以后来专门搞了一个芯片来产生随机数，但这样就有带宽问题

flash-attn的核心：搬到sram上

\==>L和D的关系，决定fa的收益

triton最简单的是做fuse，即节省访存

pytorch的compile会自己fuse

### Transformer加速

#### lightseq

&#x20;

[LightSeq: A High Performance Inference Library for Transformers](https://arxiv.org/pdf/2010.13887.pdf)

[LightSeq2: Accelerated Training for Transformer-based Models on GPUs](https://arxiv.org/pdf/2110.05722.pdf)

<https://github.com/bytedance/lightseq>

## PLM：仅编码器/仅解码器/编码器+解码器

### 仅编码器的BERT

[BERT小学生级上手教程，从原理到上手全有图示，还能直接在线运行](https://mp.weixin.qq.com/s/ltVuXZ4nJh8Cb5X2UhB6tQ)

[BERT源码分析（PART I）](https://mp.weixin.qq.com/s/sSmTQ_cOLyAUV0aV0FkDvw)

[BERT源码分析（PART II）](https://mp.weixin.qq.com/s/1NDxWfBu_csu8qHV2tmmVQ)

[Dive into BERT：语言模型与知识](https://mp.weixin.qq.com/s/NjQtSKY85Np5IodRiKsrvg)

[关于BERT，面试官们都怎么问](https://mp.weixin.qq.com/s/c2PktKruzq_teXm3GAwe1Q)

主要讲了下面3篇：

[Language Models as Knowledge Bases?](https://arxiv.org/abs/1909.01066)

[Linguistic Knowledge and Transferability of Contextual Representations](https://arxiv.org/abs/1903.08855)

[What does BERT learn about the structure of language?](https://hal.inria.fr/hal-02131630/document)

[A Primer in BERTology: What we know about how BERT works](https://arxiv.org/pdf/2002.12327.pdf)

摘要：目前，基于 Transformer 的模型已经广泛应用于自然语言处理中，但我们依然对这些模型的内部工作机制知之甚少。在本文中，来自麻省大学洛威尔分校的研究者对流行的 BERT 模型进行综述，并综合分析了 40 多项分析研究。他们还概览了对模型和训练机制提出的改进，然后描画了未来的研究方向。

[Pre-trained Models for Natural Language Processing: A Survey](https://arxiv.org/abs/2003.08271)

[BERT系列文章汇总导读](https://mp.weixin.qq.com/s/oT2dtmfEQKyrpDTOrpzhWw)

[ALBERT、XLNet，NLP技术发展太快，如何才能跟得上节奏？](https://mp.weixin.qq.com/s/Toth-XKn2WKYkyDw6j5F3A)

[绝对干货！NLP预训练模型：从transformer到albert](https://mp.weixin.qq.com/s/Jgx9eHk9xiSOWEy0Ty3LoA)

[ALBERT一作蓝振忠：预训练模型应用已成熟，ChineseGLUE要对标GLUE基准](https://mp.weixin.qq.com/s/mvkFDy09BdKJC4Cja11PAA)

[有哪些令你印象深刻的魔改Transformer？](https://mp.weixin.qq.com/s/HS2tlT7t18cFytZVIsOXUg)

[BERT模型超酷炫，上手又太难？请查收这份BERT快速入门指南！](https://mp.weixin.qq.com/s/jVSW0KDhaXuaIeOzoPmCJA)

#### multi-head att 实现

输入原始的query(即from\_tensor)之后, 把`[batch, from_seq, emb]`变成`[?, emb]`，其中`?=batch*from_seq`

```python
from_tensor_2d = reshape_to_matrix(from_tensor)

def reshape_to_matrix(input_tensor):
    """Reshapes a >= rank 2 tensor to a rank 2 tensor (i.e., a matrix)."""
    ndims = input_tensor.shape.ndims
    if ndims < 2:
        raise ValueError("Input tensor must have at least rank 2. Shape = %s" %
            (input_tensor.shape))
    if ndims == 2:
        return input_tensor
    width = input_tensor.shape[-1]
output_tensor = tf.reshape(input_tensor, [-1, width])
    return output_tensor
```

然后再接一个fc，把`[?, emb]`变成`[?, head_num * per_head]`，一般`head_num * per_head=emb`。

```python
query_layer = tf.layers.dense(
        from_tensor_2d,
        num_attention_heads * size_per_head,
        activation=query_act,
        name="query",
        kernel_initializer=create_initializer(initializer_range))
```

因为`?=batch*from_seq`，所以可以直接做如下变换

```python
query_layer = transpose_for_scores(query_layer, batch_size,
        num_attention_heads, from_seq_length,
        size_per_head)
```

实际就是把`?`拆开成`batch, from_seq`，整个变成`[batch, from_seq, head_num, per_head]`，然后做了个 transpose，把1和2互换了下，得到`[batch, head_num, from_seq, per_head]`

```python
def transpose_for_scores(input_tensor, batch_size, num_attention_heads,
        seq_length, width):
    output_tensor = tf.reshape(
            input_tensor, [batch_size, seq_length, num_attention_heads, width])

    output_tensor = tf.transpose(output_tensor, [0, 2, 1, 3])
    return output_tensor
```

然后key也做完全一样的操作(不过处理的是to\_tensor，如果是self-attention，那to\_tensor=from\_tensor), 得到`[batch, head_num, to_seq, per_head]`：

```python
to_tensor_2d = reshape_to_matrix(to_tensor)
key_layer = tf.layers.dense(
        to_tensor_2d,
        num_attention_heads * size_per_head,
        activation=key_act,
        name="key",
        kernel_initializer=create_initializer(initializer_range))

key_layer = transpose_for_scores(key_layer, batch_size, num_attention_heads,
        to_seq_length, size_per_head)
```

然后就算$$QK^T$$了，注意这里对key取了转置，也就是`[batch, head_num, from_seq, per_head]`乘以`[batch, head_num, per_head, to_seq]`，得到的结果是`[batch, head_num, from_seq, to_seq]`：

```python
attention_scores = tf.matmul(query_layer, key_layer, transpose_b=True)
attention_scores = tf.multiply(attention_scores,
    1.0 / math.sqrt(float(size_per_head)))

if attention_mask is not None:
    # `attention_mask` = [B, 1, F, T]
    attention_mask = tf.expand_dims(attention_mask, axis=[1])

    # Since attention_mask is 1.0 for positions we want to attend and 0.0 for
    # masked positions, this operation will create a tensor which is 0.0 for
    # positions we want to attend and -10000.0 for masked positions.
    adder = (1.0 - tf.cast(attention_mask, tf.float32)) * -10000.0

    # Since we are adding it to the raw scores before the softmax, this is
    # effectively the same as removing these entirely.
    attention_scores += adder
attention_probs = tf.nn.softmax(attention_scores)
attention_probs = dropout(attention_probs, attention_probs_dropout_prob)
```

然后看下value的操作：

```python
value_layer = tf.layers.dense(
        to_tensor_2d,
        num_attention_heads * size_per_head,
        activation=value_act,
        name="value",
        kernel_initializer=create_initializer(initializer_range))

# `value_layer` = [batch, to_seq, head_num, per_head]
value_layer = tf.reshape(
            value_layer,
            [batch_size, to_seq_length, num_attention_heads, size_per_head])

# `value_layer` = [batch, head_num, to_seq, per_head]
value_layer = tf.transpose(value_layer, [0, 2, 1, 3])

# `context_layer` = [batch, head_num, from_seq, per_head]
context_layer = tf.matmul(attention_probs, value_layer)

# `context_layer` = [batch, from_seq, head_num, per_head]
context_layer = tf.transpose(context_layer, [0, 2, 1, 3])
```

再确认一点，$$softmax(QK^T)$$是`[batch, head_num, from_seq, to_seq]`，而$$V$$是`[batch, head_num, to_seq, per_head]`，所以context\_layer是`[batch, head_num, from_seq, per_head]`

最后，再搞一下，变回`[batch, from_seq, head_num * per_head]`：

```python
if do_return_2d_tensor:
# `context_layer` = [B*F, N*H]
    context_layer = tf.reshape(
        context_layer,
        [batch_size * from_seq_length, num_attention_heads * size_per_head])
else:
# `context_layer` = [B, F, N*H]
    context_layer = tf.reshape(
        context_layer,
        [batch_size, from_seq_length, num_attention_heads * size_per_head])
```

如上过程是$$Concat(head\_1, ..., head\_h)$$，其中$$head\_i = Attention(QW\_i^Q, KW\_i^K, VW\_i^V)$$。包装在了函数`attention_layer`之中，我们注意到原文还有一个大小为$$hd\_v \times d\_{model}$$的$$W^O$$，也就是大小为$$d\_{model}\times d\_{model}$$，再看看源码。。也就是说，正常的bert里，`attention_heads`就只有一个元素，然后接了个`hidden_size`的fc，而前面的代码里也提到了`hidden_size`正好就是$$d\_{model}$$，所以这就是$$W^O$$。

```python
attention_heads = []
with tf.variable_scope("self"):
    attention_head = attention_layer(xxxxx)
    attention_heads.append(attention_head)
    attention_output = None
    if len(attention_heads) == 1:
        attention_output = attention_heads[0]
    else:
        # In the case where we have other sequences, we just concatenate
        # them to the self-attention head before the projection.
        attention_output = tf.concat(attention_heads, axis=-1)
    # Run a linear projection of `hidden_size` then add a residual
    # with `layer_input`.
    with tf.variable_scope("output"):
        attention_output = tf.layers.dense(
            attention_output,
            hidden_size,
            kernel_initializer=create_initializer(initializer_range))
        attention_output = dropout(attention_output, hidden_dropout_prob)
        attention_output = layer_norm(attention_output + layer_input)

```

关于 mask，可以看看这个<https://juejin.im/post/5b9f1af0e51d450e425eb32d>

摘抄一下：

什么是padding mask呢？回想一下，我们的每个批次输入序列长度是不一样的！也就是说，我们要对输入序列进行对齐！具体来说，就是给在较短的序列后面填充0。因为这些填充的位置，其实是没什么意义的，所以我们的attention机制不应该把注意力放在这些位置上，所以我们需要进行一些处理。 具体的做法是，把这些位置的值加上一个非常大的负数(可以是负无穷)，这样的话，经过softmax，这些位置的概率就会接近0！

而sequence mask是为了使得decoder不能看见未来的信息。也就是对于一个序列，在time\_step为t的时刻，我们的解码输出应该只能依赖于t时刻之前的输出，而不能依赖t之后的输出。因此我们需要想一个办法，把t之后的信息给隐藏起来。 那么具体怎么做呢？也很简单：产生一个上三角矩阵，上三角的值全为1，下三角的值权威0，对角线也是0。把这个矩阵作用在每一个序列上，就可以达到我们的目的啦。

#### masked-language-model的实现

<https://github.com/google-research/bert/blob/eedf5716ce1268e56f0a50264a88cafad334ac61/run_pretraining.py#L240>

如下，其中`hidden_size`就是是$$d\_{model}$$：

```python
def get_masked_lm_output(bert_config, input_tensor, output_weights, positions,
                         label_ids, label_weights):
  """Get loss and log probs for the masked LM."""
  input_tensor = gather_indexes(input_tensor, positions)

  with tf.variable_scope("cls/predictions"):
    # We apply one more non-linear transformation before the output layer.
    # This matrix is not used after pre-training.
    with tf.variable_scope("transform"):
      input_tensor = tf.layers.dense(
          input_tensor,
          units=bert_config.hidden_size,
          activation=modeling.get_activation(bert_config.hidden_act),
          kernel_initializer=modeling.create_initializer(
              bert_config.initializer_range))
      input_tensor = modeling.layer_norm(input_tensor)

    # The output weights are the same as the input embeddings, but there is
    # an output-only bias for each token.
    output_bias = tf.get_variable(
        "output_bias",
        shape=[bert_config.vocab_size],
        initializer=tf.zeros_initializer())
    logits = tf.matmul(input_tensor, output_weights, transpose_b=True)
    logits = tf.nn.bias_add(logits, output_bias)
    log_probs = tf.nn.log_softmax(logits, axis=-1)

    label_ids = tf.reshape(label_ids, [-1])
    label_weights = tf.reshape(label_weights, [-1])

    one_hot_labels = tf.one_hot(
        label_ids, depth=bert_config.vocab_size, dtype=tf.float32)

    # The `positions` tensor might be zero-padded (if the sequence is too
    # short to have the maximum number of predictions). The `label_weights`
    # tensor has a value of 1.0 for every real prediction and 0.0 for the
    # padding predictions.
    per_example_loss = -tf.reduce_sum(log_probs * one_hot_labels, axis=[-1])
    numerator = tf.reduce_sum(label_weights * per_example_loss)
    denominator = tf.reduce_sum(label_weights) + 1e-5
    loss = numerator / denominator

  return (loss, per_example_loss, log_probs)
```

其中的gather如下：

```python
def gather_indexes(sequence_tensor, positions):
  """Gathers the vectors at the specific positions over a minibatch."""
  sequence_shape = modeling.get_shape_list(sequence_tensor, expected_rank=3)
  batch_size = sequence_shape[0]
  seq_length = sequence_shape[1]
  width = sequence_shape[2]

  flat_offsets = tf.reshape(
      tf.range(0, batch_size, dtype=tf.int32) * seq_length, [-1, 1])
  flat_positions = tf.reshape(positions + flat_offsets, [-1])
  flat_sequence_tensor = tf.reshape(sequence_tensor,
                                    [batch_size * seq_length, width])
  output_tensor = tf.gather(flat_sequence_tensor, flat_positions)
  return output_tensor
```

注意调用时传的是如下参数

```python
    (masked_lm_loss,
     masked_lm_example_loss, masked_lm_log_probs) = get_masked_lm_output(
         bert_config, model.get_sequence_output(), model.get_embedding_table(),
         masked_lm_positions, masked_lm_ids, masked_lm_weights)
```

#### BERT的可解释性

[ACL 2019 | 理解 BERT 每一层都学到了什么](https://mp.weixin.qq.com/s/w2Cwo--GTKp5o8YKRtbl7g)

[What does BERT learn about the structure of language?](https://hal.inria.fr/hal-02131630/document)

探索BERT深层次的表征学习是一个非常有必要的事情，一是这可以帮助我们更加清晰地认识BERT的局限性，从而改进BERT或者搞清楚它的应用范围；二是这有助于探索BERT的可解释性

### 更复杂的BERT

[站在BERT肩膀上的NLP新秀们（PART III）](https://mp.weixin.qq.com/s/CxcyX5V9kBQDW8A4g0uGNA)

[BERT时代与后时代的NLP](https://mp.weixin.qq.com/s/U_pYc5roODcs_VENDoTbiQ)

[美团BERT的探索和实践](https://mp.weixin.qq.com/s/qfluRDWfL40E5Lrp5BdhFw)

[Bert时代的创新（应用篇）：Bert在NLP各领域的应用进展](https://mp.weixin.qq.com/s/dF3PtiISVXadbgaG1rCjnA)

#### 中文BERT

**WWM**

[哈工大讯飞联合实验室发布基于全词覆盖的中文BERT预训练模型](https://mp.weixin.qq.com/s?__biz=MzIxMjAzNDY5Mg==\&mid=2650794872\&idx=1\&sn=dccd856283bdd4edcdad08cf75506697\&chksm=8f477e93b830f7850e6c0ffe684264f704c6fcc4e126a6300b5ae33916aa676a279206e1e4ce\&mpshare=1\&scene=1\&srcid=0701DAFsQt28gF1hGzH4llaM\&pass_ticket=8wChBZeeRNV5mWLFKMXfVyWjwTb94XookbbSJiYpmEClqUrpybiGPpfilXkL5UQN#rd)

<https://github.com/ymcui/Chinese-BERT-wwm>

论文：[Pre-Training with Whole Word Masking for Chinese BERT](https://arxiv.org/abs/1906.08101)

**ERNIE**

参考[中文任务全面超越BERT：百度正式发布NLP预训练模型ERNIE](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650758722\&idx=1\&sn=6742b0f86982890d78cb3ec3be9865b3\&scene=0#wechat_redirect)

[ERNIE: Enhanced Representation through Knowledge Integration](https://arxiv.org/pdf/1904.09223.pdf)

使用entity-level masking和phrase-level masking两种mask方法

输入的每个样本由5个 ';' 分隔的字段组成，数据格式：

* token\_ids
* sentence\_type\_ids：两句话，第一句都是0，第二句都是1
* position\_ids
* seg\_labels：分词边界信息: 0表示词首、1表示非词首、-1为占位符, 其对应的词为 CLS 或者 SEP；
* next\_sentence\_label

例如：

```shell
1 1048 492 1333 1361 1051 326 2508 5 1803 1827 98 164 133 2777 2696 983 121 4 19 9 634 551 844 85 14 2476 1895 33 13 983 121 23 7 1093 24 46 660 12043 2 1263 6 328 33 121 126 398 276 315 5 63 44 35 25 12043 2;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55;-1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 -1 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 -1;0
```

和bert在mask上的区别：

![ernie-bert-masking-diff](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6f84aa57d8a037765b14b7259752bfd885ed8711%2Fernie-bert-masking-diff.png?alt=media)

一个句子的不同level的mask方式：

![ernie-different-mask-level](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-58c4da0464de2e9efd9d5ab3ce757e778f7da18d%2Fernie-different-mask-level.png?alt=media)

[ERNIE 2.0: A CONTINUAL PRE-TRAINING FRAMEWORK FOR LANGUAGE UNDERSTANDING](https://arxiv.org/pdf/1907.12412v1.pdf)

![ernie-2.0-loss](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-330aba9a2cb9defcbb2084d59ecc8175e6f82c33%2Fernie-2.0-loss.png?alt=media)

#### 跨语言

**XLM**

[Massively Multilingual Sentence Embeddings for Zero-Shot Cross-Lingual Transfer and Beyond](https://arxiv.org/abs/1812.10464)，XLM的主要思想还是来自于这篇文章，借用了BERT的框架最后成了XLM。本文提出了LASER（Language-Agnostic SEntence Representations）

XLM：facebook提出[Cross-lingual Language Model Pretraining](https://arxiv.org/abs/1901.07291)，加了language emb

* 无监督的方法：只依赖单语种数据（monolingual data）
* 有监督的方法：对平行语料使用新的跨语言loss

![xlm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-608408f7f1eb51ddf8504f403355b14d8d9352e2%2Fxlm.png?alt=media)

[Facebook最新语言模型XLM-R：多项任务刷新SOTA，超越单语BERT](https://mp.weixin.qq.com/s/6oK-gevKLWDwdOy4aI7U7g)

XLM-R

[Unsupervised Cross-lingual Representation Learning at Scale](https://arxiv.org/abs/1911.02116)

来自facebook。针对多种跨语言的传输任务，大规模地对多语言语言模型进行预训练可以显著提高性能。在使用超过 2TB 的已过滤 CommonCrawl 数据的基础上，研究者在 100 种语言上训练了基于 Transformer 的掩模语言模型。该模型被称为 XLM-R，在各种跨语言基准测试中，其性能显著优于多语言 BERT（mBERT），其中 XNLI 的平均准确度为+ 13.8％，MLQA 的平均 F1 得分为+ 12.3％，而 FQ 的平均 F1 得分为+ 2.1％ NER。XLM-R 在低资源语言上表现特别出色，与以前的 XLM 模型相比，斯瓦希里语（Swahili）的 XNLI 准确性提升了 11.8％，乌尔都语（Urdu）的准确性提升了 9.2％。研究者还对获得这些提升所需的关键因素进行了详细的实证评估，包括（1）积极转移和能力稀释；（2）大规模资源资源的高低性能之间的权衡。最后，他们首次展示了在不牺牲每种语言性能的情况下进行多语言建模的可能性。XLM-Ris 在 GLUE 和 XNLI 基准测试中具有强大的单语言模型，因此非常具有竞争力。

#### 更长序列

**transformer-xl**

[Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context](https://arxiv.org/pdf/1901.02860.pdf)

![vanilla-segment](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c93fe9405426899ef82d493bbcbf88394c0f42b7%2Fvanilla-segment.png?alt=media)

最简单的处理长文本方法：对长文本直接切成多个segment，每个segment独立过transformer，**segment间是没有信息流动的**

![transformer-xl](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-267ec1efaedbe63da1bec38696ae0551048fce69%2Ftransformer-xl.png?alt=media)

transformer-xl的处理方法：参考RNN的**隐藏记忆单元**，对**上一个segment**计算的隐藏状态序列进行**fixed和cached**，并在模型处理下一个新的segment时将其缓存为**可重用的扩展上下文**。

如图，第k+1层的第i个元素，用到了第k层的第i-1, i-2, ...,i - segment\_len+1这几个元素，所以**对于最顶层的来讲，实际看到的窗口就更长了**。为此还提出了**相对位置编码**，即使用两个token的**相对距离**代替之前的绝对位置。

此外，[Stabilizing Transformers for Reinforcement Learning](https://arxiv.org/abs/1910.06764)说明了为什么标准的transformer架构很难在强化学习中优化。研究者同时提出了一种架构Gated Transformer-XL(GTrXL)，可以很好地提升transformer架构和变体的稳定性，并加速学习，可以超过LSTM，在多任务学习 DMLab-30 基准上达到 SOTA 的水平。

**XLNet**

[XLNet : 运行机制及和 Bert 的异同比较](https://mp.weixin.qq.com/s/VCCZOKJOhCEjxfnoLSuRKA)

[Transformer-XL与XLNet笔记](https://mp.weixin.qq.com/s/g7I_V5a3Puy9uK11A--Xqw)

[什么是XLNet中的双流自注意力](https://mp.weixin.qq.com/s/9QmhN4KfukCtAxzprKDbAQ)

[20项任务全面碾压BERT，CMU全新XLNet预训练模型屠榜（已开源）](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650764408\&idx=1\&sn=92196097be1a5f993ef02de0bac8128d\&chksm=871ab006b06d3910ec88e57598d6c8b1a38dead073b3f417b793ba71ac4750ae2a8263537fa2\&mpshare=1\&scene=1\&srcid=\&pass_ticket=%2BD9Ask8qPVeDCkEHTF8NEBVBQX9YmDDkPy9VdMIfOYJ2VtpyHOOhIYdS3wUnvPjn#rd)

参考[拆解XLNet模型设计，回顾语言表征学习的思想演进](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650765039\&idx=3\&sn=5f21b702a06b2b3c12c1e5f327c0b744\&chksm=871ab291b06d3b87a7b35ff2e69bbaa6863e7737510783f0d7913bc575e759a6662242e6b97a\&scene=0\&xtrack=1\&pass_ticket=6OQo9SLhUprzhz9WVqt5LanZi%2Bu5pLbXWpLouCtQ6gkfTHAGY5Li3M%2BDR0n3drA2#rd)

[他们创造了横扫NLP的XLNet：专访CMU博士杨植麟](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650767073\&idx=1\&sn=3a1014852f0ba8caaee9fdfadd344503\&chksm=871aba9fb06d33891731e38d7ca2010516a73cff72c1569c89962160d0fc15ef0b747f9ff7f5\&scene=0\&xtrack=1\&pass_ticket=Kz97uXi0CH4ceADUC3ocCNkjZjy%2B0DTtVYOM7n%2FmWttTt5YKTC2DQT9lqCel7dDR#rd)

[XLNet: Generalized Autoregressive Pretraining for Language Understanding](https://arxiv.org/pdf/1906.08237.pdf)

代码：<https://github.com/zihangdai/xlnet>

* 自回归（autoregressive, AR）：主要的论文有这几篇：[Semi-supervised sequence learning](https://arxiv.org/abs/1511.01432)、[Deep contextualized word representations](https://arxiv.org/abs/1802.05365)、[Improving language understanding by generative pre-training](https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf)。通过一个autoregressive的模型来估计文本语料库的概率分布。也就是给定一个文本序列$$\mathbf{x}=\left(x\_{1}, \cdots, x\_{T}\right)$$，AR将likelihood因式分解(factorize)成一个前向的乘积$$p(\mathbf{x})=\prod\_{t=1}^{T} p\left(x\_{t} | \mathbf{x}*{\<t}\right)$$，或者是一个后向的乘积$$p(\mathbf{x})=\prod*{t=T}^{1} p\left(x\_{t} | \mathbf{x}\_{>t}\right)$$。由于 AR 语言模型仅被训练用于编码**单向(uni-directional)语境（前向或后向）**，因而在深度双向语境建模中效果不佳。而下游语言理解任务通常需要双向语境信息，导致 AR 语言建模无法实现有效预训练。
* 自编码（autoencoding, AE）：相关的预训练模型不会进行明确的密度估计(explicit density estimation)，而是从残缺的(corrupted)输入中**重建原始数据**。例如bert，使用一定比例的`[MASK]`，然后预测被mask掉的是什么东西。由于目标并不是密度估计，所以在重建的时候，可以考虑双向的上下文信息。但存在如下两个问题：
  * **finetune**时的真实数据**缺少**预训练期间使用的`[MASK]`这些**mask信息**，这导致**预训练和微调效果的差异（pretrain-finetune discrepancy）**。
  * 输入中要预测的token是被mask掉的，所以无法像AR那样使用乘积rule来建立联合概率分布。也就是说，给定未mask的 token，BERT**假设预测的token**之间**彼此独立**，这其实是对自然语言中普遍存在的**高阶、长期依赖关系**的一种**过度简化**。

基于这些优缺点，提出了一种泛化的自回归预训练模型XLNet：

* Permutation Language Model(PLM)：在自回归LM模式下，最大化所有可能的**因式分解顺序**的对数似然，学习双向语境信息；
  * 把原来的`[MASK]`这个token干掉了，转而用attention mask来搞
  * 引入了排列：即原来是1234，可以输入3241，这个时候改一下mask就行
* 引入了Transformer-XL的主要思路：**相对位置编码**以及**分段RNN机制**，实践已经证明这两点对于长文档任务是很有帮助的

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8eb0ab5c9fd2585ca8d9baf0131e9213efe31f54%2Fxlnet.png?alt=media)

#### 更多的任务

**MT-DNN**

[Multi-Task Deep Neural Networks for Natural Language Understanding](https://arxiv.org/abs/1901.11504)

#### 其他改进

**RoBERTa**

参考[重回榜首的BERT改进版开源了，千块V100、160GB纯文本的大模型](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650766934\&idx=2\&sn=54c479dd8e8e69cd9617b9a1962443e1\&chksm=871aba28b06d333e0d5dc64754b7280776ba5c17577831077dc5cd2caa4c2335beec3afd8d34\&scene=0\&xtrack=1\&pass_ticket=zAXdHORK5tTx549e9RwAgNcm7bjJrH4ENwbbTYVrAZDqpsE%2Fu1hY63b%2FoRfnZQdM#rd)

[RoBERTa: A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/pdf/1907.11692.pdf)

* 修改了一些超参
* 删掉nsp任务
* 更大的batchsize和学习率

[RoBERTa中文预训练模型，你离中文任务的「SOTA」只差个它](https://mp.weixin.qq.com/s/EKFa40rLQlnEVuu9V7GDmg)

<https://github.com/brightmart/roberta_zh>

**DeBERTa**

[Deberta: Decoding-enhanced bert with disentangled attention](https://arxiv.org/pdf/2006.03654.pdf)

* disentangled attention mechanism：每个词使用2个向量，$$H$$编码内容，$$P$$编码相对位置，i和j间的attention如下：

$$
\begin{array}{r}
\mathrm{A}*{\mathrm{i}, \mathrm{j}}=\left{\mathrm{H}*{\mathrm{i}}, \mathrm{P}*{\mathrm{i} \mid \mathrm{j}}\right} \times\left{\mathrm{H}*{\mathrm{j}}, \mathrm{P}*{\mathrm{j} \mid \mathrm{i}}\right}^{\mathrm{T}} \\
\=\mathrm{H}*{\mathrm{i}} \mathrm{H}*{\mathrm{j}}^{\mathrm{T}}+\mathrm{H}*{\mathrm{i}} \mathrm{P}*{\mathrm{j} \mid \mathrm{i}}^{\mathrm{T}}+\mathrm{P}*{\mathrm{i} \mid \mathrm{j}} \mathrm{H}*{\mathrm{j}}^{\mathrm{T}}+\mathrm{P}*{\mathrm{i} \mid \mathrm{j}} \mathrm{P}\_{\mathrm{j} \mid \mathrm{i}}^{\mathrm{T}}
\end{array}
$$

* 预训练：使用enhanced mask decoder，把绝对位置信息引入解码层，来预估被mask掉的token
* finetune：virtual adversarial training

**ELECTRA**

[2019最佳预训练模型：非暴力美学，1/4算力超越RoBERTa](https://mp.weixin.qq.com/s/_R-Bp5lLov-QIoPRl6fFMA)

[ELECTRA: 超越BERT, 19年最佳NLP预训练模型](https://mp.weixin.qq.com/s/fR5OrqxCv0udKdyh6CHOjA)

[ELECTRA: pre-training text encoders as discriminators rather than generators](https://openreview.net/pdf?id=r1xmh1btvb)

使用新的预训练task：RTD(replaced token detection)：

* 使用一个**生成网络**采样出token，替换一些原有的token
* 训练一个**判别模型**，预估一个token**是否是被替换的**

RTD比MLM**更sample-efficient**，因为RTD只做二分类，而MLM需要做全词表的softmax

**Matryoshka**

[俄罗斯套娃 (Matryoshka) 嵌入模型概述](https://mp.weixin.qq.com/s/H3LWIs4hBQ-b_XLxICw7Dg)

[Matryoshka representation learning](https://arxiv.org/pdf/2205.13147.pdf)

俄罗斯套娃嵌入模型旨在将**更重要的信息存储在早期的维度中**，将不太重要的信息存储在后面的维度中。俄罗斯套娃嵌入模型的这一特点允许我们截断模型产生的原始 (大) 嵌入，同时仍保留足够的信息以在下游任务上表现良好。

基本原理：假设是一个L分类的多分类问题，把原来的x先通过F映射到d，然后取前m维出来，再通过W把m映射到L，去和label算loss，再乘以权重c。这么搞几次，相当于搞了多个mlp，把不同的m映射到L。

假设输入一个llm产出的4096维向量，那这个llm就是F，假设是一个2分类问题，期望降维到(64,128,1024)，那就是取前64出来，映射成2维，算个loss，再取前128维出来，映射成2维，算个loss，再取前1024出来，算个loss

但这样比较粗暴，合理的方式是在gpt的建议下，通过如下方式来循序渐进地完成降维：

```python
multi_stage_cfg = [
    {"stage": "stage1_high_dim", "dims": [4096, 2048], "weights": [0.7, 0.3]},
    {"stage": "stage2_mid_dim", "dims": [2048, 1024, 512], "weights": [0.5, 0.3, 0.2]},
    {"stage": "stage3_low_dim", "dims": [512, 128, 64], "weights": [0.2, 0.3, 0.5]},
]

def train_stage(model, mrl_dims, mrl_weights, output_dir,
    train_dataset, eval_dataset, lr=5e-6, bs=32, acc=2, 
    max_steps=None, stage_name=""):
    
    if wandb.run:
        wandb.finish()  
    if rank == 0:
        wandb.init(project="xxx", name=stage_name)
    loss_fn = losses.MultipleNegativesRankingLoss(model)
    loss = losses.MatryoshkaLoss(model, loss_fn, 
        matryoshka_dims=mrl_dims, matryoshka_weights=mrl_weights)

    trainer = SentenceTransformerTrainer(
        model=model,
        args=args,
        train_dataset=train_dataset,
        eval_dataset=eval_dataset,
        loss=loss,
    )
    trainer.train()
    # 其他    

def train():
    for stage_cfg in multi_stage_cfg:
        if stage_cfg["stage"] == "stage1_high_dim":
            model = load_model(base_model_path)
        stage_dir = f"./outputs/{stage_cfg['stage']}"
        print(f"\n Training {stage_cfg['stage']}... dims={stage_cfg['dims']}")
        train_stage(
            model=model,
            mrl_dims=stage_cfg["dims"],
            mrl_weights=stage_cfg["weights"],
            output_dir=stage_dir,
            stage_name=stage_cfg["stage"],
            train_dataset=train_dataset,
            eval_dataset=eval_dataset,
            lr=5e-6,
            bs=bs,
            acc=acc,
            max_steps=max_steps 
        )
        torch.cuda.empty_cache()
        torch.cuda.synchronize()  
        gc.collect()
        model = load_model_continue(stage_dir)

```

![matryoshka-representation-learning](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-59ee85ff0e08be78a71c165e1cf9bd2145e8c77b%2Fmatryoshka-representation-learning.png?alt=media)

<https://sbert.net/examples/training/matryoshka/README.html>

训练+预测

```python
model_name = "./bge-large-zh-v1.5" 
out_model_name = "./new-bge-large-zh-v1.5"
model = SentenceTransformer(model_name)


sentences = ["这是一个测试句子", "这是另一个例子"]
embeddings = model.encode(sentences)
print(f"嵌入维度：{embeddings.shape}")

train_dataset = Dataset.from_dict({
    "anchor": ["It's nice weather outside today.", "He drove to work."],
    "positive": ["It's so sunny.", "He took the car to the office."],
})
loss = losses.MultipleNegativesRankingLoss(model)
loss = losses.MatryoshkaLoss(model, loss, [768, 512, 256, 128, 64])

trainer = SentenceTransformerTrainer(
    model=model,
    train_dataset=train_dataset,
    loss=loss,
)
trainer.train()
trainer.save_model(out_model_name)

model = SentenceTransformer(out_model_name)

matryoshka_dim = 64
embeddings = model.encode(
            [
                "The weather is so nice!",
                "It's so sunny outside!",
                "He drove to the stadium.",
                ]
            )
embeddings = embeddings[..., :matryoshka_dim] # Shrink the embedding dimensions
print(embeddings.shape)

```

注意，如果嵌入已经归一化，那么在截断后它们将不再归一化，因此你**可能需要重新归一化**。

```python
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
import torch.nn.functional as F

model = SentenceTransformer("nomic-ai/nomic-embed-text-v1.5", trust_remote_code=True)

matryoshka_dim = 64
embeddings = model.encode(
    [
        "search_query: What is TSNE?",
        "search_document: t-distributed stochastic xxx.",
        "search_document: Amelia Mary Earhart was xxx.",
    ],
    convert_to_tensor=True,
)
# The Nomic team uses a custom architecture, 
# making them recommend Layer Normalization before truncation
embeddings = F.layer_norm(embeddings, normalized_shape=(embeddings.shape[1],))
embeddings[..., :matryoshka_dim] # Shrink the embedding dimensions

similarities = cos_sim(embeddings[0], embeddings[1:])
# => tensor([[0.7154, 0.4468]])
```

**Piccolo2**

[拿下SOTA！最强中文Embedding模型对标OpenAI，技术路线公开](https://mp.weixin.qq.com/s/G9izxyzyIHtGDb6kAYD-qg)

[Piccolo2: General Text Embedding with Multi-task Hybrid Loss Training](https://arxiv.org/pdf/2405.06932)

<https://huggingface.co/sensenova/piccolo-large-zh-v2>

**Conan-Embedding**

[通过负样本挖掘炼出更强Embedding模型](https://mp.weixin.qq.com/s/z0jgPnvaPO6RTzgFzB8TFQ)

[Conan-embedding: General Text Embedding with More and Better Negative Samples](https://arxiv.org/pdf/2408.15710)

**MEXMA**

[MEXMA: Token-level objectives improve sentence representations](https://arxiv.org/abs/2409.12737)

<https://huggingface.co/facebook/MEXMA>

<https://github.com/facebookresearch/mexma>

**ModernBert**

[时隔6年，谷歌BERT终于有替代品了！更快更准更长，还不炒作GenAI](https://mp.weixin.qq.com/s/QDtl2Q_BHdL1PZw5wCUBaw)

[Smarter, Better, Faster, Longer: A Modern Bidirectional Encoder for Fast, Memory Efficient, and Long Context Finetuning and Inference](https://arxiv.org/pdf/2412.13663)

### 更小的BERT

[BERT 瘦身之路：Distillation，Quantization，Pruning](https://mp.weixin.qq.com/s/ir3pLRtIaywsD94wf9npcA)

#### albert

[刚刚，Google发布24个小型BERT模型，直接通过MLM损失进行预训练](https://mp.weixin.qq.com/s/s0ysFH4CRvsHY1Gp3b4DPQ)

[ALBERT：用于语言表征自监督学习的轻量级 BERT](https://mp.weixin.qq.com/s/0V-051qkTk9EYiuEWYE3jQ)

[谷歌ALBERT模型V2+中文版来了：之前刷新NLP各大基准，现在GitHub热榜第二](https://mp.weixin.qq.com/s/nusSlw28h4bOlw5hDsc-Iw)

[超小型BERT中文版横空出世！模型只有16M，训练速度提升10倍](https://mp.weixin.qq.com/s/eVlNpejrxdE4ctDTBM-fiA)

<https://github.com/brightmart/albert_zh>

[预训练小模型也能拿下13项NLP任务，谷歌ALBERT三大改造登顶GLUE基准](https://mp.weixin.qq.com/s/kvSoDr0E_mvsc7lcLNKmgg)

ALBERT 模型在 GLUE、RACE 和 SQuAD 基准测试上都取得了新的 SOTA 效果，并且参数量还少于 BERT-large。

[ALBERT: a lite bert for self-supervised learning of language representations](https://openreview.net/pdf?id=H1eA7AEtvS)

通过对词嵌入矩阵进行因式分解，再为下游任务共享不同层的所有参数，这样可以大大降低 BERT 的参数量。

还提出了一种新型句间连贯性损失函数，它可以强迫模型学习句间的连贯性表达，从而有利于各种下游 NLP 任务。

ALBERT 通过两个参数削减技术克服了扩展预训练模型面临的主要障碍。

* 对嵌入参数化进行因式分解：将大的嵌入矩阵分解为两个小的矩阵，从而将隐藏层的大小与词汇嵌入的大小分离开来。这种分离使得隐藏层的增加更加容易，同时不显著增加词汇嵌入的参数量。
* 跨层参数共享：避免参数量随着网络深度的增加而增加。

两种技术都显著降低了 BERT 的参数量，同时不对其性能造成明显影响，从而提升了参数效率。ALBERT 的配置类似于 BERT-large，但参数量仅为后者的 1/18，训练速度却是后者的 1.7 倍。这些参数削减技术还可以充当某种形式的正则化，可以使训练更加稳定，而且有利于泛化。

为了进一步提升 ALBERT 的性能，还引入了一个自监督损失函数，用于句子级别的预测（SOP）。SOP 主要聚焦于**句间连贯**，用于解决原版 BERT 中下一句预测（NSP）损失低效的问题。

albert\_tiny：

input\_ids先查word\_embeddings(`\(V\times E=21118*128)`)，得到dim=128的表示，再查word\_embeddings\_2(`\(E\times M =128*312\)`)，得到dim=312的表示。

搞positionembedding时，并不用输入0 1 2...，只需要做一些slice的变换就行了

```python
    with tf.control_dependencies([assert_op]):
      full_position_embeddings = tf.get_variable(
          name=position_embedding_name,
          shape=[max_position_embeddings, width],
          initializer=create_initializer(initializer_range))
      # Since the position embedding table is a learned variable, we create it
      # using a (long) sequence length `max_position_embeddings`. The actual
      # sequence length might be shorter than this, for faster training of
      # tasks that do not have long sequences.
      #    
      # So `full_position_embeddings` is effectively an embedding table
      # for position [0, 1, 2, ..., max_position_embeddings-1], and the current
      # sequence has positions [0, 1, 2, ... seq_length-1], so we can just
      # perform a slice.
      position_embeddings = tf.slice(full_position_embeddings, [0, 0],
                                     [seq_length, -1]) 
      num_dims = len(output.shape.as_list())

      # Only the last two dimensions are relevant (`seq_length` and `width`), so
      # we broadcast among the first dimensions, which is typically just
      # the batch size.
      position_broadcast_shape = [] 
      for _ in range(num_dims - 2):
        position_broadcast_shape.append(1)
      position_broadcast_shape.extend([seq_length, width])
      position_embeddings = tf.reshape(position_embeddings,
                                       position_broadcast_shape)
      output += position_embeddings
```

然后会通过create\_attention\_mask\_from\_input\_mask把input\_ids和input\_mask搞一下，得到attention\_mask去和attention做mask，主要是算loss啥的，把后面的mask掉不算

#### distillbert

参考[小版BERT也能出奇迹：最火的预训练语言库探索小巧之路](https://mp.weixin.qq.com/s/a0d0b1jSm5HxHso9Lz8MSQ)

1.4w个stars。。

<https://huggingface.co/transformers>

[DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter](https://arxiv.org/abs/1910.01108)

#### tinybert

[TinyBERT：模型小7倍，速度快8倍，华中科大、华为出品](https://mp.weixin.qq.com/s/VL7TSHmZPKD-xGdOxNmnHw)

[TinyBERT: Distilling BERT for Natural Language Understanding](https://arxiv.org/abs/1909.10351)

提出了一个two-stage learning framework，在pre-training阶段和task-specific阶段都进行distill。

相比baseline，只有28% parameters和31%的inference时间

在glue上，7.5x小，infer上有9.4x快。

[哪吒”出世！华为开源中文版BERT模型](https://mp.weixin.qq.com/s/He6Xujoe5Ieo95Tshx7PnA)

[NEZHA: Neural Contextualized Representation for Chinese Language Understanding](https://arxiv.org/abs/1909.00204)

<https://github.com/huawei-noah/Pretrained-Language-Model>

[华为诺亚方舟开源哪吒、TinyBERT模型，可直接下载使用](https://mp.weixin.qq.com/s/cqYWllVCgWwGfAL-yX7Dww)

#### reformer

[哈希革新Transformer：这篇ICLR高分论文让一块GPU处理64K长度序列](https://mp.weixin.qq.com/s/QklCVuukfElVDBFNxLXNKQ)

[Reformer: The Efficient Transformer](https://openreview.net/forum?id=rkgNKkHtvB)

<https://github.com/google/trax/blob/master/trax/models/research/reformer.py>

大型的 Transformer 往往可以在许多任务上实现 sota，但训练这些模型的成本很高，尤其是在序列较长的时候。在 ICLR 的入选论文中，我们发现了一篇由谷歌和伯克利研究者发表的优质论文。文章介绍了两种提高 Transformer 效率的技术，最终的 Reformer 模型和 Transformer 模型在性能上表现相似，并且在长序列中拥有更高的存储效率和更快的速度。论文最终获得了「8，8，6」的高分。在最开始，文章提出了将点乘注意力（dot-product attention）替换为一个使用局部敏感哈希（locality-sensitive hashing）的点乘注意力，将复杂度从 O(L2 ) 变为 O(L log L)，此处 L 指序列的长度。此外，研究者使用可逆残差（reversible residual layers）代替标准残差（standard residuals），这使得存储在训练过程中仅激活一次，而不是 n 次（此处 n 指层数）。最终的 Reformer 模型和 Transformer 模型在性能上表现相同，同时在长序列中拥有更高的存储效率和更快的速度。

[大幅减少GPU显存占用：可逆残差网络(The Reversible Residual Network)](https://mp.weixin.qq.com/s/j6-x9ANF9b3Q1I_os_LJSw)

#### LTD-bert

[内存用量1/20，速度加快80倍，腾讯QQ提出全新BERT蒸馏框架，未来将开源](https://mp.weixin.qq.com/s/W668zeWuNsBKV23cVR0zZQ)

#### Q-bert

[AAAI 2020 | 超低精度量化BERT，UC伯克利提出用二阶信息压缩神经网络](https://mp.weixin.qq.com/s/0qBlnsUqI2I-h-pFSgcQig)

[Q-BERT: Hessian Based Ultra Low Precision Quantization of BERT](https://arxiv.org/pdf/1909.05840.pdf)

#### Adabert

[推理速度提升29倍，参数少1/10，阿里提出AdaBERT压缩方法](https://mp.weixin.qq.com/s/mObuD4ijUCjnebYIrjvVdw)

[AdaBERT: Task-Adaptive BERT Compression with Differentiable Neural Architecture Search](https://arxiv.org/pdf/2001.04246v1.pdf)

### 仅解码器的GPT

[AI也能精彩表达：几种经典文本生成模型一览](https://mp.weixin.qq.com/s/GfP76I-BzzQcyLqQJoeXxw)

#### GPT

2018年的[Improving language understanding by generative pre-training](https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf)，生成式预训练（Generative pre-training, gpt），用transformer的decoder，参数量117m（0.1b），无监督预训练和有监督微调。

![gpt1](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b0cfcf6609fb80942496d4cdd585bba547dbe814%2Fgpt1.png?alt=media)

微调阶段为每种下游任务专门设计：

* 分类：输入一段文本，经过transformer，最后接一个Linear
* entailment(蕴含)：输入2段文本，premise(假设)和hypothesis(假说)，经过transformer，最后接一个Linear
* 相似度：输入2段文本a和b，a+b过transformer，b+a过transformer，再合起来接一个Linear
* 多选题：输入context+答案1过transformer+Linear，答案2、答案3同样操作，将3个输出合在一起求softmax

#### GPT2

2019年的[Language models are unsupervised multitask learners](https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf)模型结构小改，增加数据，参数量变大为15亿（1.5b），无监督语言建模。

* layernorm前移到每个sub-block之前
* additional layernorm在最后的self-attention block才加上
* 修改初始化方法，以考虑残差路径上的累积并缩放残差层的权重

[15亿参数最强通用NLP模型面世！Open AI GPT-2可信度高于所有小模型](https://mp.weixin.qq.com/s/nu2egJuG_yxIVfW9GfdlCw)

中文GPT2

[只需单击三次，让中文GPT-2为你生成定制故事](https://mp.weixin.qq.com/s/FpoSNNKZSQOE2diPvJDHog)

<https://github.com/imcaspar/gpt2-ml>

<https://colab.research.google.com/github/imcaspar/gpt2-ml/blob/master/pretrained_model_demo.ipynb>

[语言模型秒变API，一文了解如何部署DistilGPT-2](https://mp.weixin.qq.com/s/5B8bN2kplB4t1ctYJjN1zw)

huggingface的distill gpt-2：<https://github.com/huggingface/transformers>

#### nanogpt代码解读

简化版的gpt， tiktoken：gpt2中使用的开源分词工具，比huggingface的tokenizer快得多

```python
import tiktoken
enc = tiktoken.get_encoding("gpt2")

# 字节对编码过程，我的输出是[31373, 995]
encoding_res = enc.encode("hello world")
print(encoding_res)

# 字节对解码过程，解码结果：hello world
raw_text = enc.decode(encoding_res)
print(raw_text)
```

类似的：<https://github.com/karpathy/llm.c>

<https://github.com/karpathy/build-nanogpt/tree/master>

fork了一个：<https://github.com/daiwk/build-nanogpt>

GPT的整体结构：

```python
class GPT(nn.Module):

    def __init__(self, config):
        super().__init__()
        self.config = config

        self.transformer = nn.ModuleDict(dict(
            wte = nn.Embedding(config.vocab_size, config.n_embd),
            wpe = nn.Embedding(config.block_size, config.n_embd),
            # 这里有n层，每层是一个Block
            h = nn.ModuleList([Block(config) for _ in range(config.n_layer)]),
            # 最后一层需要加一个layer norm
            ln_f = nn.LayerNorm(config.n_embd),
        ))
        # 最后一层的linear
        self.lm_head = nn.Linear(config.n_embd, config.vocab_size, bias=False)

        # weight sharing scheme
        self.transformer.wte.weight = self.lm_head.weight

        # init params
        self.apply(self._init_weights)
```

```python
class Block(nn.Module):

    def __init__(self, config):
        super().__init__()
        self.ln_1 = nn.LayerNorm(config.n_embd)
        self.attn = CausalSelfAttention(config)
        self.ln_2 = nn.LayerNorm(config.n_embd)
        self.mlp = MLP(config)

    def forward(self, x):
        # 这里对原来的add&norm进行了改造，保留一个从始至终的+x的操作，让梯度能够直通输入
        x = x + self.attn(self.ln_1(x))
        x = x + self.mlp(self.ln_2(x))
        return x
```

```python
class MLP(nn.Module):

    def __init__(self, config):
        super().__init__()
        self.c_fc    = nn.Linear(config.n_embd, 4 * config.n_embd)
        self.gelu    = nn.GELU(approximate='tanh')
        self.c_proj  = nn.Linear(4 * config.n_embd, config.n_embd)
        self.c_proj.NANOGPT_SCALE_INIT = 1

    def forward(self, x):
        x = self.c_fc(x)
        x = self.gelu(x)
        x = self.c_proj(x)
        return x
```

```python
class CausalSelfAttention(nn.Module):

    def __init__(self, config):
        super().__init__()
        assert config.n_embd % config.n_head == 0
        # key, query, value projections for all heads, but in a batch
        self.c_attn = nn.Linear(config.n_embd, 3 * config.n_embd)
        # output projection
        self.c_proj = nn.Linear(config.n_embd, config.n_embd)
        self.c_proj.NANOGPT_SCALE_INIT = 1
        # regularization
        self.n_head = config.n_head
        self.n_embd = config.n_embd
        # not really a 'bias', more of a mask, but following the OpenAI/HF naming though
        self.register_buffer("bias", torch.tril(torch.ones(config.block_size, config.block_size))
                                     .view(1, 1, config.block_size, config.block_size))

    def forward(self, x):
        B, T, C = x.size() # batch size, sequence length, embedding dimensionality (n_embd)
        # calculate query, key, values for all heads in batch and move head forward to be the batch dim
        # nh is "number of heads", hs is "head size", and C (number of channels) = nh * hs
        # e.g. in GPT-2 (124M), n_head=12, hs=64, so nh*hs=C=768 channels in the Transformer
        qkv = self.c_attn(x)
        q, k, v = qkv.split(self.n_embd, dim=2)
        k = k.view(B, T, self.n_head, C // self.n_head).transpose(1, 2) # (B, nh, T, hs)
        q = q.view(B, T, self.n_head, C // self.n_head).transpose(1, 2) # (B, nh, T, hs)
        v = v.view(B, T, self.n_head, C // self.n_head).transpose(1, 2) # (B, nh, T, hs)
        y = F.scaled_dot_product_attention(q, k, v, is_causal=True) # flash attention
        y = y.transpose(1, 2).contiguous().view(B, T, C) # re-assemble all head outputs side by side
        # output projection
        y = self.c_proj(y)
        return y
```

### 编码器+解码器

#### T5

[谷歌T5模型刷新GLUE榜单，110亿参数量，17项NLP任务新SOTA](https://mp.weixin.qq.com/s/YOMWNV5BMI9hbB6Nr_Qj8w)

[谷歌最新T5模型17项NLP任务霸榜SuperGLUE，110亿参数量！](https://mp.weixin.qq.com/s/rFT37D7p0MiS8XGZM35bYA)

[Exploring the limits of transfer learning with a unified text-to-text transformer](https://arxiv.org/pdf/1910.10683.pdf)

将所有NLP任务都建模成text-to-text的生成任务，

mT5（[mt5: A massively multilingual pre-trained text-to-text transformer](https://arxiv.org/pdf/2010.11934.pdf)）是T5的变种，基于新的Common Crawl的数据集（包括101种语言）上预训练

#### MASS

[MASS: Masked Sequence to Sequence Pre-training for Language Generation](https://arxiv.org/abs/1905.02450v5)

bert只使用了Transformer的encoder部分，其下游任务也主要是适用于自然语言理解（NLU），对于类似文本摘要、机器翻译、对话应答生成等自然语言生成（NLG）任务显然是不太合适的。MASS 采用了编码器-解码器框架，并尝试在**给定部分句子**的情况下**修复整个句子**。MASS输入句子包含了一些连续的 Token，并且中间会带有一些**连续的Mask**，模型的任务是**预测出被Mask掉的词**是什么。相比 BERT 只有编码器，MASS 联合训练编码器与解码器，能获得更适合机器翻译的表征能力。

训练步骤主要分为两步：

* Encoder： 输入为被随机mask掉连续部分token的句子，使用Transformer对其进行编码；这样处理的目的是可以使得encoder可以更好地捕获没有被mask掉词语信息用于后续decoder的预测；
* Decoder： 输入为与encoder同样的句子，但是mask掉的正好和encoder相反，和翻译一样，使用attention机制去训练，但只预测encoder端被mask掉的词。该操作可以迫使decoder预测的时候更依赖于source端的输入而不是前面预测出的token，防止误差传递。

#### BART

[多项NLP任务新SOTA，Facebook提出预训练模型BART​](https://mp.weixin.qq.com/s/1-EJ36-lY9YZSLBG5c2aaQ)

[BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension](https://arxiv.org/pdf/1910.13461.pdf)

BART是一个适用于seq2seq模型的去噪自编码器。预训练包括两个阶段：

* 使用**任意噪声**函数**破坏文本**
* 用seq2seq模型来**重建原始文本**


# 1.2.llm\_intro

## 一些思考

[The Second Half](https://ysymyth.github.io/The-Second-Half/)

[OpenAI姚顺雨：欢迎来到AI下半场！](https://zhuanlan.zhihu.com/p/1896310535865233616)

数十年来，人工智能主要致力于开发新的训练方法和模型。

我们不再仅仅问：“我们能否训练一个模型来解决X问题？”而是问：“我们应该训练人工智能去做什么，以及我们如何衡量真正的进步？”要在下半场取得成功，我们需要及时转变思维方式和技能组合，这些可能更接近产品经理的思维方式。

[Welcome to the Era of Experience](https://storage.googleapis.com/deepmind-media/Era-of-Experience%20/The%20Era%20of%20Experience%20Paper.pdf)

[强化学习之父当头一棒：RL版「苦涩的教训」来了！通往ASI，绝非靠人类数据](https://mp.weixin.qq.com/s/MGrSWh-wcBrLKPboUmg05w)

[被《经验时代》刷屏之后，剑桥博士长文讲述RL破局之路](https://mp.weixin.qq.com/s/dLfbu56f02BtQR4bCjzNfw)

[生成式AI进入第二幕：交大携手创智学院提出「认知工程」，AI新纪元开始了](https://mp.weixin.qq.com/s/G3WTW2RiYNA6epyQoZZ9Ng)

[Generative AI Act II: Test Time Scaling Drives Cognition Engineering](https://arxiv.org/pdf/2504.13828)

<https://github.com/GAIR-NLP/cognition-engineering>

[中文版](https://github.com/GAIR-NLP/cognition-engineering/blob/main/assets/Cognition_Engineering_zh.pdf)，自己转存了[一份](https://github.com/daiwk/collections/blob/master/assets/Cognition_Engineering_zh.pdf)

[刚刚！北大校友Lilian Weng最新博客来了：Why We Think](https://mp.weixin.qq.com/s/fcDRzd3cwuM_JOnQW5XRMQ)

<https://lilianweng.github.io/posts/2025-05-01-thinking/>

### 上半场

上半场的游戏：专注于构建新的模型和方法（如Alexnet、transformer、GPT-3），而评估和基准测试（如Imagenet、WMT'14翻译）是次要的。原因：

* 方法比任务更难、更令人兴奋，需要非凡的洞察力和工程能力；而定义任务往往更简单：只是把人类已经做的事情（比如翻译、图像识别或国际象棋）变成基准测试，没有太多洞察力甚至工程能力。
* 方法也往往比单独的任务更通用、更广泛适用，因此它们特别有价值。

### 方案(the recipe)

在强化学习中，有三个关键组成部分：**算法**、**环境**和**先验知识**。长期以来，强化学习研究人员主要关注**算法**（例如REINFORCE、DQN、actor-critic、PPO、TRPO等），即智能体学习的智力核心，而**将环境和先验知识视为固定或最小化的**。

在深度强化学习时代，环境很重要：如果你忽略环境，你可能会构建一个只在玩具环境中表现出色的“最优”算法。所以，OpenAI设想的就是一旦我们**将所有数字世界变成一个环境**，用聪明的强化学习算法解决它，我们就拥有了数字通用人工智能（AGI），就搞了如下的项目：

* gym：各种游戏的标准强化学习环境
* World of Bits和Universe项目：将互联网或计算机变成一个游戏。

在GPT-3出现之后，才发现缺失的部分是**先验知识**，需要强大的语言预训练（language pre-training），将一般常识和语言知识提炼到模型中，然后可以对其进行微调。因此，强化学习中最重要的部分可能甚至不是强化学习算法或环境，而是**先验知识**，而这些先验知识可以**通过与强化学习完全无关的方式获得**。

**思考**（thinking，或者说**推理**，reasoning），是一种奇怪的动作（action），它并不直接影响外部世界，而且**推理的空间是开放的、组合上是无限的**。在经典的强化学习理论中，这是一个糟糕的交易，使得决策变得不可能。但是，通过在任何强化学习环境的动作空间中加入推理，我们利用语言预训练的**先验知识来实现泛化**，并且我们可以在不同的决策中使用**灵活的测试时计算**。可以参考论文[ReAct: Synergizing Reasoning and Acting in Language Models](https://arxiv.org/a/2210.03629)

一旦我们有了正确的强化学习**先验知识（语言预训练）和强化学习环境（将语言推理加入到动作中）**，事实证明强化学习**算法可能就是最不重要的部分**了。因此我们有了o系列、R1、深度研究、计算机使用智能体，还有更多即将出现的东西。

### 下半场

上半场的游戏是

* 开发**新的训练方法或模型**，不断**改进基准测试的效果**。
* 创建**更难的基准测试**，并继续这个循环。

但目前这种游戏正在被破坏，因为：

* 方案本质上已经**标准化并工业化**了，**无需太多的新想法**。一个针对特定任务的新方法可能提升5%，但下一个o系列模型可能没有明确针对这个任务，但能提升30%
* 即使有更难的基准测试，很快（并且越来越快）它们也会被方案解决，下图是最近5年基准测试的准确率变化情况：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9407c0069bc2f84c7fc2e70fcdd4a27210b3833c%2Fsecond-half-progress.png?alt=media)

但问题是：人工智能已经在国际象棋和围棋中击败了世界冠军，在SAT和律师资格考试中超越了大多数人类，并在国际信息学奥林匹克竞赛（IOI）和国际数学奥林匹克竞赛（IMO）中达到了金牌水平。但世界并没有发生太大变化，至少从经济和GDP的角度来看。这个问题可以称为**效用（utility）问题，根源可能很简单：我们的评估设置**与**现实世界的设置**在很多基本方式上不同：

* 评估“应该”**自动**运行：通常智能体接收任务输入，自主执行操作，然后接收任务奖励。但现实中，智能体需要**和人类互动**。因此需要新的基准测试，例如：
  * 将真实人类纳入其中，例如<https://lmarena.ai/>
  * 将用户模拟纳入其中，例如下图的[tau-bench](https://arxiv.org/a/2406.12045)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5c884ef718854e38989327ce74809aab69e0bb42%2Ftau-bench.png?alt=media)

* 评估“应该”**独立同分布**（i.i.d.）运行：如果你有一个包含500个任务的测试集，你独立运行每个任务，平均任务指标，然后得到一个总体指标。但现实中，你是**按顺序解决任务**，而不是并行解决。例如一个工程师在越来越熟悉代码库的过程中，会越来越擅长解决具体的代码问题，而目前的评测做不到这一点。所以需要**长期记忆**方法（而且确实有[AGENT WORKFLOW MEMORY](https://arxiv.org/pdf/2409.07429)），但学术界没有合适的基准测试来证明这种需求。

下半场的游戏可能是：

* 开发**针对现实世界效用**的新的评估设置或任务。
* 用方案解决它们，或者用新组件增强方案。继续这个循环。

上半场的参与者在解决视频游戏和考试，充满了渐进式的方法和模型，而下半场的参与者可以通过构建有用的产品来建立价值数十亿甚至数千亿美元的公司，使用通用方案会轻易击败渐进式方法，除非你创造出打破方案的新假设。

### 如何持续地评估AI产品

[姚顺雨提到的「AI下半场」，产品评估仍被误解](https://mp.weixin.qq.com/s/ToqvRCuBXrDkNUH1Pe1Jfw)

<https://eugeneyan.com/writing/eval-process/>

总有人以为再加个工具、添个指标，或者让大语言模型当裁判（LLM-as-judge），就能解决问题拯救产品。这根本是在回避核心问题，逃避真正该做的工作。评估并非一劳永逸，也不是什么快速起效的方法——它是**运用科学方法的持续实践**，是评估驱动开发，是AI输出的持续监测。

构建产品评估体系，本质上是一个**不断提问、实验和分析的循环**。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-53f0d03c41ef0b1b3b012c58d3360df3a70be81d%2Fai-product-cycle.png?alt=media)

* **观察数据**：审视输入内容、AI输出结果，以及用户与系统的交互情况。数据会告诉我们系统哪里运转良好，更重要的是，哪里会出问题。发现这些故障模式才是有效改进的起点。
* **标注数据**：优先处理问题输出。这意味着要**对成功和失败的样本进行标记**，建立**平衡且有代表性的数据集**。理想情况下，正负样本应该五五开，并覆盖各类输入场景。这个数据集将成为针对性评估的基础，帮我们追踪已发现问题的改进情况。
* **提出假设**：为什么会出现这个错误？可能是RAG检索没返回相关上下文，也可能是模型处理复杂（有时自相矛盾）的指令时力不从心。通过分析检索文档、推理轨迹和错误输出等数据，我们能确定要优先修复的问题以及要验证的假设。
* **设计实验验证假设**：比如重写提示词、更新检索组件或切换不同模型。好的实验要能明确验证假设是否成立，最好还设置基线对照组进行比较。
* **测量(measure)和错误分析**：这不同于随意的感觉判断，**必须量化**实验改动是否真有效果：准确率提升了吗？缺陷减少了吗？新版本在对比测试中表现更优吗？无法量化的改进根本不算改进。
* **实验成功就应用更新，失败就继续迭代**。

评估驱动的开发（Eval-driven development，EDD）：开发AI功能前，先通过产品评估**定义成功标准**，确保从第一天就有**明确目标**和**可衡量的指标**。

**评估指引开发方向**。我们先评估基线（比如简单提示词）获取基准数据。之后每个提示词调整、系统更新和迭代都要评估：简化提示词提升了准确性吗？检索更新增加了相关文档召回率吗？还是反而让效果变差了？

EDD是如下的**写评估->做改动->跑评估->整合改进**的循环，确保了可衡量的改进，建立的不是模糊的直觉判断，而是扎根于软件工程实践的反馈闭环。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5fca9bf4307cea62b63c6ae97240142373a002fe%2Fedd.png?alt=media)

自动化评估工具（LLM-as-judge）也离不开**人工监督**。如果我们不主动审查AI输出和用户反馈，再多自动评估工具也救不了产品。

要评估和监测 AI 产品，通常需要**采样输出**并**标注质量缺陷**。有了足够多高质量标注数据，我们就能**校准自动评估工具**，使其与人类判断一致。这可能涉及测量二元标签的召回率/准确率，或通过两两比较决定输出之间的相关性。校准后的评估工具能有效扩展AI系统的持续监测能力。

但自动评估工具不能取代人工监督。我们仍需要定期采样、标注数据，分析用户反馈。理想情况下，我们应该设计能够**通过用户交互获取隐式反馈**的产品。不过，显式反馈虽然不那么频繁，偶尔也会有偏见，但也很有价值。**自动化评估工具本质上是人工标注与反馈流程的放大器。**

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-06a3856f31eaac8988d6e8c8fd101e380f6f363a%2Fauto-monitor.png?alt=media)

### 趋势

[AI开源狂飙，OpenAI们慌了！GenAI大洗牌，2025趋势深度解读](https://mp.weixin.qq.com/s/h47YCdzC9hUk64Sr3IBHlg)

[硅谷今夜集体失眠！互联网女皇340页AI报告猛料刷屏，大佬熬夜头秃](https://mp.weixin.qq.com/s/QqWM36GvUc8FwS2FqYmk-w)

[AI 推理成本暴跌，「互联网女皇」 Mary Meeker 从中看到了什么？](https://mp.weixin.qq.com/s/Iy2PxBLtE6n3EOI_vjdOcQ)

[52页PPT，谷歌Gemini预训练负责人首次揭秘！扩展定律最优解](https://mp.weixin.qq.com/s/IB_Bum3Md5mafAaEVxk9QA)

<https://vladfeinberg.com/assets/2025-04-24-princeton-talk.pdf>

[刚刚，谷歌AI路线图曝光：竟要抛弃注意力机制？Transformer有致命缺陷！](https://mp.weixin.qq.com/s/SEyuyCjnL17rZwuIPfRQYg)

s：短期/即将上线；m：中期，开发中的项目；r：研究、长期项目；

* 全模态（r）：已经原生支持图像+音频生成，接下来是视频
* Diffusion的早期实验（r）：详见[diffusion-llm部分](https://www.daiwk.net/1.2.llm_intro#diffusion-llm)
* 默认具备Agent能力（m）：从单纯的token处理器转向具备系统化推理能力的智能体
  * 之前：输入token，输出token，然后在外部构建各种scaffolding（支架）以增强功能。
  * 现在：模型自身越来越系统化，越来越能自主做事，不再只是「被动计算器」。
  * 未来：过去外部做的很多scaffolding，是否会被整合进模型的内部推理流程？
* 推理能力持续扩展（s）：
* 更多小模型（s）：很快会有更多内容可以分享
* 无限上下文（r）：以当前注意力机制和上下文处理方式，这是不可能实现的，需要在核心架构层面进行全新创新，才能实现这一目标，例如：[moneta+yaad+memora](https://www.daiwk.net/1.2.llm_intro#monetayaadmemora)
* 大模型：规模即一切

AI的下一个阶段：“主动式AI”（Proactive AI），AI主动为你发现问题、提供建议、自动处理任务。

### AI时代对（跨境）电商的启示

[专访阿里国际站总裁张阔：给AI时代生意人的9条启示](https://mp.weixin.qq.com/s/Hc-wvJawKsl8DpUN8NRy1g)

* **放弃流量焦虑，拥抱需求思维**

越来越多的人开始用自然语言、长句子、图片和文件去表达自己的需求，传统的关键词搜索根本无法理解，但AI可以精确理解，所以商家不需要自己费尽心思去复制商品、改标题了，而是需要清晰、完整、结构化地描述你的产品和能力，平台把商家从和机器博弈的流量焦虑中解放出来，让他们重新回到“以用户为中心”的正确轨道上。

* **忘掉花哨的技巧，回归生意的本质**

以前商家为了迎合搜索引擎，标题里恨不得把所有能想到的关键词都塞进去，甚至会出现“既是黑色又是白色”这种自相矛盾的描述。机器看着可能觉得相关性高，但真人一看就知道毫无意义。把那些花在研究平台规则上的精力收回来，全部投入到打磨产品、服务和供应链这些生意的本质上去。

* **把AI当成合伙人，别当普通员工**

AI对于中小企业来说，不止是一个简单的提效的工具，更像一个超级合伙人，能帮你补齐几乎所有的短板。以前一个外贸新手，要成长为一个成熟的业务员，需要很长的培养周期。现在，一个刚入行的新人，只要有基本的商业判断力，配齐了AI这套工具，他的起点可能就是一个过去需要干三五年的老业务员的水平。所以，不要把AI仅仅看作是替代重复劳动的工具，而要把它当成一个全能的、不知疲倦的、而且成本极低的合伙人。

* **审美和提问，是AI时代的新核心能力**

外贸的本质，就是八个字：供需匹配，交钱易货。以前，发现需求靠老板有钱，派一堆人去全球各地调研、开头脑风暴。现在，AI可以帮你实时捕捉全世界的需求脉搏。

发现需求、定义产品、满足审美的能力，变得空前重要，AI可以帮你把产品卖到全世界，但前提是，你得先做出一个值得被卖到全世界的好产品。

提问的能力也同样重要，你向AI提问的方式，决定了它能给你什么样的答案，无论是用AI去发现蓝海赛道，还是用AI去生成营销文案，你都需要具备精准定义问题、并与AI进行多轮高质量交互的能力。

\-->**审美决定了你生意的上限，而提问的能力决定了你利用AI的效率。**

* **不要害怕AI犯错，建立人机协同的工作流**：在设计AI的时候，需要设置非常明确的硬边界：
  * AI不知道的事，就不说
  * 涉及到拍板决策，必须由人来做。
* **小团队也能办大事，组织要因AI而变**

做AI的目的，绝对不是让企业去减员增效，而是让现有的人可以做更多的事，去扩大生意的规模。AI可以放大优秀人才的能力。AI时代的组织架构，不应该是简单的裁员，而应该是重构。企业需要思考的是，如何围绕AI这个新的生产力核心，去重新设计岗位职责和团队协作方式。

* **B2B的AI革命，会比C端来得更猛烈**
  * 2C的电商，买家的决策链路相对简单。用户搜索、点击、下单，链路就结束了，本质是“多快好省”。有没有AI，对这个核心体验的影响不是颠覆性的。
  * 2B的电商，决策非常复杂和昂贵。采购需要考虑的是能生产这个商品的全套供应链，另外跨境贸易的流程极其繁琐，而这些复杂的、长链条的需求，天生就适合用AI去理解和匹配。
* **AI是加速器，但不是点金石**

商业的本质是供需匹配。AI能帮你更精准地找到需求，能帮你更高效地触达客户，能帮你提升转化率。但是，它不能替代你做出一个好产品的价值，也不能替代你提供差异化服务的能力。最重要的事情，永远是打磨好自己的“产品”这个内核。

* **我们正处在一个时代的关口**
  * 第一阶段：从黄页到交易。平台通过提供担保交易，解决了信任问题，让大规模的在线跨境交易成为可能。
  * 第二阶段：从PC到无线。这是互联网人口红利的自然迁移。
  * 第三阶段：AI驱动的智能时代。AI带来的生产力变革，其深刻程度，丝毫不亚于前两个时代，甚至可能性更大。

### HAI对2026年AI发展趋势的总结

[斯坦福大学教授李飞飞团队：2026年人工智能发展报告总结！](https://mp.weixin.qq.com/s/eW8RMtuQCtlFRU-IlEtrQg)

<https://hai.stanford.edu/ai-index/2026-ai-index-report>

存了一份：<https://github.com/daiwk/collections/blob/master/assets/ai_index_report_2026.pdf>

## LLM概述

PLM（pretrained language models），即bert等

### LLM简史

* 2017年的[Learning to generate reviews and discovering sentiment](https://arxiv.org/pdf/1704.01444.pdf)尝试用rnn来实现智能系统
* 2018年的gpt1：[Improving language understanding by generative pre-training](https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf)，生成式预训练（Generative pre-training, gpt），用transformer的decoder，参数量117m（0.1b），无监督预训练和有监督微调。确定对自然语言文本建模的基本原则为**预测下一个单词**。
* 2019年的gpt2：[Language models are unsupervised multitask learners](https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf)模型结构小改，增加数据，参数量变大为15亿（1.5b），无监督语言建模，**无需使用标记数据进行显式微调**。
  * 参考[The natural language decathlon: Multitask learning as question answering](https://arxiv.org/pdf/1806.08730.pdf)中**多任务求解的概率形式**： $$p(output|input,task)$$ 。
  * 提出“由于特定任务的有监督目标与无监督目标（语言建模）相同，只是在序列的子集上进行评估，因此，无监督目标的全局最小值也是有监督目标的全局最小值”，即每个NLP任务可以看作**世界文本子集的单词预测问题**，如果模型有足够能力来复原世界文本，无监督语言建模可以解决各种问题。
  * 仅无监督与监督微调的SOTA相比效果还是不太行。虽然GPT2模型规模相对较小，但如对话等任务在其基础上做微调还是能拿到很好的效果的，例如[DIALOGPT : Large-scale generative pre-training for conversational response generation](https://arxiv.org/pdf/1911.00536.pdf)、[End-to-end neural pipeline for goal-oriented dialogue systems using GPT-2](https://aclanthology.org/2020.acl-main.54.pdf)
* 2020年的gpt3：[Language models are few-shot learners](https://arxiv.org/pdf/2005.14165.pdf)，175b（1750亿）参数，当参数量到达千亿时出现了『涌现』现象，发现可以in-context learning（这点在**3.3亿的BERT和15亿的gpt2中看不到**）。**预训练和ICL有相同的语言建模范式**：预训练预测给定上下文条件下的后续文本序列，ICL预测正确的任务解决方案，其可被格式化为给定任务描述和示范下的文本序列。
* GPT-3的两种改进方法：
  * 使用代码数据训练：GPT-3主要问题是缺乏对复杂任务的推理能力，2021年openai提出了Codex（[Evaluating Large Language Models Trained on Code](https://arxiv.org/pdf/2107.03374.pdf)），在github代码上微调的GPT。[A neural network solves and generates mathematics problems by program synthesis: Calculus, differential equations, linear algebra, and more](https://arxiv.org/pdf/2112.15594.pdf)发现Codex能解决非常困难的编程问题，还能在数学问题上有显著提升。[Text and code embeddings by contrastive pre-training](https://arxiv.org/pdf/2201.10005.pdf)提出了训练文本和代码emb的对比学习，在线性探测分类、文本搜索、代码搜索等任务上有所提升。GPT-3.5就是在基于代码的GPT（code-davinci-002）的基础上开发的。
  * 与人类对齐：2017年openai就在[learning from human preference](https://openai.com/research/learning-from-human-preferences)的博客中提出了应用强化学习来学习由人类标的偏好比较，此后2021年7月openai发表了PPO。2020年GPT-2用RL进行微调，[Deep reinforcement learning from human preferences](https://arxiv.org/pdf/1706.03741.pdf)，[Learning to summarize from human feedback](https://arxiv.org/pdf/2009.01325.pdf)也做了相似工作。2022年提出了RLHF的InstructGPT([Training language models to follow instructions with human feedback](https://arxiv.org/pdf/2203.02155.pdf))，其中的**SFT就对应于常说的指令微调**。在openai的博客[Our approach to alignment research](https://openai.com/blog/our-approach-to-alignment-research)中提出了训练AI系统的3个有前途的方向：**使用人类反馈、协助人类评估、做对齐研究**。
* 2022年的ChatGPT：用类似InstructGPT的方式进行训练，专门**对对话能力进行优化**，将人类生成的对话（**扮演用户和AI两个角色**）与InstructGPT数据集结合起来**以对话形式生成**。
* 2023年的GPT-4：将文本输入扩展到**多模态信号**。此外，
  * 提升安全性：在RLHF训练中加入**额外的安全奖励信号**，采用多种干预策略如Anthropic提出的[Red teaming language models to reduce harms: Methods, scaling behaviors, and lessons learned](https://arxiv.org/pdf/2209.07858.pdf)提到的红队评估（read teaming）机制以减轻幻觉、隐私和过度依赖问题。
  * 改进的优化方法：使用**可预测扩展**（predictable scaling）的机制，使用模型训练期间的一小部分计算量**以预测最终性能**。
  * 迭代部署的工程方案：[Lessons learned on language model safety and misuse](https://openai.com/research/language-model-safety-and-misuse)，遵循5阶段的开发和部署生命周期来开发模型和产品。

### LLM列表（持续更新中）

* 百亿：除了LLaMA（最大650亿）和NLLB（最大545亿），大多数在100亿-200亿之间，通常需要**数百甚至上千**个GPU或TPU。
* 千亿：OPT、OPT-IML、BLOOM和BLOOMZ与GPT-3(175B)大致相同，GLM有1300亿，Galactica有1200亿，通常需要**数千**个GPU或者TPU。

| ckpt? | 模型                                                                                                                      | 发布时间    | 大小    | 预训练数据规模      | 硬件              | 训练时间  |
| ----- | ----------------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------------ | --------------- | ----- |
| Y     | [T5](https://arxiv.org/pdf/1910.10683.pdf)                                                                              | 2019.10 | 11B   | 1万亿tokens    | 1024 TPU v3     | -     |
| N     | [GPT-3](https://arxiv.org/pdf/2005.14165.pdf)                                                                           | 2020.05 | 175B  | 3000万亿tokens | -               | -     |
| N     | [GShard](https://arxiv.org/pdf/2006.16668.pdf)                                                                          | 2020.06 | 600B  | 1万亿tokens    | 2048 TPU v3     | 4天    |
| Y     | [mT5](https://arxiv.org/pdf/2010.11934.pdf)                                                                             | 2020.10 | 13B   | 1万亿tokens    | -               | -     |
| Y     | [PanGu-$$\alpha$$](https://arxiv.org/pdf/2104.12369.pdf)                                                                | 2021.04 | 13B   | 1.1TB        | 2048 Ascend 910 | -     |
| Y     | [CPM-2](https://arxiv.org/pdf/2106.10715.pdf)                                                                           | 2021.06 | 198B  | 2.6TB        | -               | -     |
| N     | [Codex](https://arxiv.org/pdf/2107.03374.pdf)                                                                           | 2021.07 | 12B   | 1000万亿tokens | -               | -     |
| N     | [ERNIE 3.0](https://arxiv.org/pdf/2107.02137.pdf)                                                                       | 2021.07 | 10B   | 3750亿tokens  | 384 v100        | -     |
| N     | [Jurassic-1](https://uploads-ssl.webflow.com/60fd4503684b466578c0d307/61138924626a6981ee09caf6_jurassic_tech_paper.pdf) | 2021.08 | 178B  | 3000亿tokens  | 800 GPU         | -     |
| N     | [HyperCLOVA](https://arxiv.org/pdf/2109.04650.pdf)                                                                      | 2021.09 | 82B   | 3000亿tokens  | 1024 A100       | 13.4天 |
| N     | [FLAN](https://arxiv.org/pdf/2109.01652.pdf)                                                                            | 2021.09 | 137B  | -            | 128 TPU v3      | 60小时  |
| N     | [Yuan 1.0](https://arxiv.org/pdf/2110.04725.pdf)                                                                        | 2021.10 | 245B  | 1800亿tokens  | 2128 GPU        | -     |
| Y     | [T0](https://arxiv.org/pdf/2211.01786.pdf)                                                                              | 2021.10 | 11B   | -            | 512 TPU v3      | 27小时  |
| N     | [Anthropic](https://arxiv.org/pdf/2112.00861.pdf)                                                                       | 2021.12 | 52B   | 4000亿tokens  | -               | -     |
| N     | [WebGPT](https://arxiv.org/pdf/2112.09332.pdf)                                                                          | 2021.12 | 175B  | -            | -               | -     |
| N     | [Gopher](https://arxiv.org/pdf/2112.11446.pdf)                                                                          | 2021.12 | 280B  | 3000亿tokens  | 4096 TPU v3     | 920小时 |
| N     | [ERNIE 3.0 Titan](https://arxiv.org/pdf/2112.12731.pdf)                                                                 | 2021.12 | 260B  | -            | -               | -     |
| N     | [GLaM](https://arxiv.org/pdf/2112.06905.pdf)                                                                            | 2021.12 | 1200B | 2800亿tokens  | 1024 TPU v4     | 574小时 |
| N     | [LaMDA](https://arxiv.org/pdf/2201.08239.pdf)                                                                           | 2022.01 | 137B  | 7680亿tokens  | 1024 TPU v3     | 57.5天 |
| N     | [MT-NLG](https://arxiv.org/pdf/2201.11990.pdf)                                                                          | 2022.01 | 530B  | 2700亿tokens  | 4480 80G A100   | -     |
| N     | [AlphaCode](https://arxiv.org/pdf/2203.07814.pdf)                                                                       | 2022.02 | 41B   | 9670亿tokens  | -               | -     |
| N     | [InstructGPT](https://arxiv.org/pdf/2203.02155.pdf)                                                                     | 2022.03 | 175B  | -            | -               | -     |
| N     | [Chinchilla](https://arxiv.org/pdf/2203.15556.pdf)                                                                      | 2022.03 | 70B   | 1.4万亿tokens  | -               | -     |
| Y     | [CodeGen](https://arxiv.org/pdf/2203.13474.pdf)                                                                         | 2022.03 | 16B   | 5770亿tokens  | -               | -     |
| Y     | [GPT-NeoX-20B](https://arxiv.org/pdf/2204.06745.pdf)                                                                    | 2022.04 | 20B   | 825GB        | 96 40G A100     | -     |
| Y     | [Tk-Instruct](https://arxiv.org/pdf/2204.07705.pdf)                                                                     | 2022.04 | 11B   | -            | 256 TPU v3      | 4小时   |
| N     | [PaLM](https://arxiv.org/pdf/2204.02311.pdf)                                                                            | 2022.04 | 540B  | 7800亿tokens  | 6144 TPU v4     | -     |
| Y     | [UL2](https://arxiv.org/pdf/2205.05131.pdf)                                                                             | 2022.05 | 20B   | 825GB        | 96 40G A100     | -     |
| Y     | [OPT](https://arxiv.org/pdf/2205.01068.pdf)                                                                             | 2022.05 | 175B  | 1800亿tokens  | 992 80G A100    | -     |
| Y     | [NLLB](https://arxiv.org/pdf/2207.04672.pdf)                                                                            | 2022.07 | 54.5B | -            | -               | -     |
| N     | [AlexaTM](https://arxiv.org/pdf/2208.01448.pdf)                                                                         | 2022.08 | 20B   | 1.3万亿tokens  | 128 A100        | 120天  |
| N     | [Sparrow](https://arxiv.org/pdf/2209.14375.pdf)                                                                         | 2022.09 | 70B   | 64 TPU v3    | -               | -     |
| N     | [WeLM](https://arxiv.org/pdf/2209.10372.pdf)                                                                            | 2022.09 | 10B   | 3000亿tokens  | 128 A100 40G    | 24天   |
| N     | [U-PaLM](https://arxiv.org/pdf/2210.11399.pdf)                                                                          | 2022.10 | 540B  | -            | 512 TPU v4      | 5天    |
| N     | [Flan-PaLM](https://arxiv.org/pdf/2210.11416.pdf)                                                                       | 2022.10 | 540B  | -            | 512 TPU v4      | 37小时  |
| N     | [Flan-U-PaLM](https://arxiv.org/pdf/2210.11416.pdf)                                                                     | 2022.10 | 540B  | -            | -               | -     |
| Y     | [GLM](https://arxiv.org/pdf/2210.02414.pdf)                                                                             | 2022.10 | 130B  | 4000亿tokens  | 768 40G A100    | 60天   |
| Y     | [Flan-T5](https://arxiv.org/pdf/2210.11416.pdf)                                                                         | 2022.10 | 11B   | -            | -               | -     |
| Y     | [BLOOM](https://arxiv.org/pdf/2211.05100.pdf)                                                                           | 2022.11 | 176B  | 3660亿tokens  | 384 80G A100    | 105天  |
| Y     | [mT0](https://arxiv.org/pdf/2211.01786.pdf)                                                                             | 2022.11 | 13B   | -            | -               | -     |
| Y     | [Galactica](https://arxiv.org/pdf/2211.09085.pdf)                                                                       | 2022.11 | 120B  | 1060亿tokens  | -               | -     |
| Y     | [BLOOMZ](https://arxiv.org/pdf/2211.01786.pdf)                                                                          | 2022.11 | 176B  | -            | -               | -     |
| Y     | [OPT-IML](https://arxiv.org/pdf/2212.12017.pdf)                                                                         | 2022.12 | 175B  | -            | 128 40G A100    | -     |
| Y     | [LLaMA](https://arxiv.org/pdf/2302.13971.pdf)                                                                           | 2023.02 | 65B   | 1.4万亿tokens  | 2048 80G A100   | 21天   |
| N     | [GPT-4](https://arxiv.org/pdf/2303.08774.pdf)                                                                           | 2023.03 | -     | -            | -               | -     |
| Y     | [CodeGeeX](https://arxiv.org/pdf/2303.17568.pdf)                                                                        | 2022.09 | 13B   | 8500亿tokens  | 1536 Ascend 910 | 60天   |
| N     | [PanGU-$$\Sigma$$](https://arxiv.org/pdf/2303.10845.pdf)                                                                | 2023.03 | 1085B | 3290亿tokens  | 512 Ascend 910  | 100天  |
| Y     | [Pythia](https://arxiv.org/pdf/2304.01373.pdf)                                                                          | 2023.04 | 12B   | 3000亿tokens  | 256 40G A100    | -     |

可以直接把对应的md丢给gpt，叫它导出一个excel，然后就可以自定义排序或者画散点图看了

### LLM结构汇总

<https://sebastianraschka.com/llm-architecture-gallery/>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9a4534f970f5a9cafceeca9ca3dff61a108a9ccc%2Farchitecture-gallery-hero.webp?alt=media)

汇总的分辨率有点低，可以点进去源网站看单模型的

### LLM开源库

* transformers：huggingface的库
* [deepspeed](https://github.com/microsoft/DeepSpeed)：微软的库，与pytorch兼容，训练了MT-NLG、BLOOM等模型，包括各种分布式训练优化技术，如**内存优化**（**ZeRO**、**梯度检查点**等）和**管道并行**。
* megatron-lm：英伟达的库，同样包括各种分布式训练技术，包括**模型和数据并行**、**混合精度**训练和**FlashAttention**。（[Megatron-lm: Training multi-billion parameter language models using model parallelism](https://arxiv.org/pdf/1909.08053.pdf)、[Efficient large-scale language model training on GPU clusters using megatron-lm](https://arxiv.org/pdf/2104.04473.pdf)和[Reducing activation recomputation in large transformer models](https://arxiv.org/pdf/2205.05198.pdf)）
* [jax](https://github.com/google/jax)：google的库，允许用户在**带有硬件加速（GPU或TPU）的情况下进行数组的高效运算**，可以在**各种设备**高效计算，支持**自动微分**和**即时编译**等功能。
* [colossal-AI](https://arxiv.org/pdf/2110.14883.pdf)：HPC-AI Tech的库，基于pytorch，可以使用\[PatrickStar]\(Patrickstar: Parallel training of pre-trained models via a chunk-based memory management)提出的方法优化异构内存管理，分布了基于LLaMA的[ColossalChat](https://medium.com/pytorch/colossalchat-an-open-source-solution-for-cloning-chatgpt-with-a-complete-rlhf-pipeline-5edf08fb538b)
* [BMTrain](https://github.com/OpenBMB/BMTrain)：openBMB的库，强调代码简洁、低资源占用和高可用性
* \[FastMoE]\(Fastmoe: A fast mixture-of-expert training system)：专门用于MoE模型的训练库，基于pytorch，简化了将transformer转换为MoE模型的过程
* [semantic-kernel](https://github.com/microsoft/semantic-kernel)：微软的开源库

![AI的4场景战役](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ad6c7b2c6ff73e7a3786353fcf6d60bfdfff00e2%2F4wars-in-aistck.png?alt=media)

一些开源的小模型：[从零训练的 1B 以下小模型汇总](https://mp.weixin.qq.com/s/IWuMj6ywge2NAUhYmYQBLA)

### 一些综述

* [Foundation Models for Natural Language Processing -- Pre-trained Language Models Integrating Media](https://github.com/daiwk/collections/blob/master/assets/LLM/foundation%20models%20NLP.pdf)
* [大规模语言模型：从理论到实践](https://github.com/daiwk/collections/tree/master/assets/LLM/LLM-TAP.pdf)，[Pre-trained Models for Natural Language Processing: A Survey](https://arxiv.org/pdf/2003.08271.pdf)邱锡鹏等
* 人大的大模型综述：<https://github.com/RUCAIBox/LLMSurvey>，（**！！！本文大部分内容按这个来组织！！！**），出书和课件了：<https://llmbook-zh.github.io/>
* [Talking about large language models](https://arxiv.org/pdf/2212.03551.pdf)
* [Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing](https://arxiv.org/pdf/2107.13586.pdf)，引用数2k+
* [A comprehensive survey on pretrained foundation models: A history from BERT to chatgpt](https://arxiv.org/pdf/2302.09419.pdf)，唐杰等
* [Pre-Trained Models: Past, Present and Future](https://arxiv.org/pdf/2106.07139.pdf)
* [A Comprehensive Survey of AI-Generated Content (AIGC): A History of Generative AI from GAN to ChatGPT](https://arxiv.org/pdf/2303.04226.pdf)
* [Pretrained Language Models for Text Generation: A Survey](https://arxiv.org/pdf/2105.10311.pdf)
* [A survey for in-context learning](https://arxiv.org/pdf/2301.00234.pdf)
* [Towards reasoning in large language models: A survey](https://arxiv.org/pdf/2212.10403.pdf)
* [Reasoning with language model prompting: A survey](https://arxiv.org/pdf/2212.09597.pdf)
* [Dense Text Retrieval based on Pretrained Language Models: A Survey](https://arxiv.org/pdf/2211.14876.pdf)
* [Fine-tune之后的NLP新范式：Prompt越来越火，CMU华人博士后出了篇综述文章](https://zhuanlan.zhihu.com/p/395795968)
* [如何高效部署大模型？CMU最新万字综述纵览LLM推理MLSys优化技术](https://mp.weixin.qq.com/s/Uue0SxH6W_tI8K4Zb0igLQ)：[Towards Efficient Generative Large Language Model Serving: A Survey from Algorithms to Systems](https://arxiv.org/a/2312.15234)
* [一篇对大语言模型（LLMs）进行全面、深入分析的43页综述（Word2Vec作者出品）](https://mp.weixin.qq.com/s/5fbx0lM9V-Q7xYbeDauuHw)==>[Large Language Models: A Survey](https://arxiv.org/pdf/2402.06196.pdf)，[自己存了一份](https://github.com/daiwk/collections/blob/master/assets/LLM/Large%20Language%20Models-%20A%20Survey.pdf)
* [Large Language Models for Information Retrieval: A Survey](https://arxiv.org/pdf/2308.07107v3.pdf)
* [awesome-LLM-resourses](https://github.com/WangRongsheng/awesome-LLM-resourses)
* [14天速成LLM高手！大佬开源学习笔记，GitHub狂揽700星](https://mp.weixin.qq.com/s/aDkH9E5b0yNd1J_Kthkh5Q)：<https://github.com/hesamsheikh/ml-retreat>
* [GitHub超火开发者路线图库有AI学习路线了！star数近30万](https://mp.weixin.qq.com/s/P9hWHGsiWcfEfMq54E02xg)：<https://github.com/kamranahmedse/developer-roadmap>
* [写的真好，万字长文串烧LLM大模型技术原理](https://mp.weixin.qq.com/s/ArTr-Df10LiTkJ4k9zlmZA)：<https://zhuanlan.zhihu.com/p/713794852>
* [Jeff Dean演讲回顾LLM发展史，Transformer、蒸馏、MoE、思维链等技术都来自谷歌](https://mp.weixin.qq.com/s/5EUQlD5isnEEzXBw1AJEig)
* [盘一盘，2017年Transformer之后，LLM领域的重要论文](https://mp.weixin.qq.com/s/1lUSlc0tvEWLuOFOP0WkUA)
* [2023-2025大模型领域2年发展综述](https://mp.weixin.qq.com/s/ZJIYSjYVQZrKImc1hWKftQ)
* 一个google大佬的笔记：[google doc](https://docs.google.com/document/d/1WUk_A3LDvRJ8ZNvRG--vhI287nDMR-VNM4YOV8mctbI/edit?tab=t.u5rxkidg8s5c)，我copy了一份：[google doc](https://docs.google.com/document/d/1EG-iWPa6G21id2l15biw5QShKokz-prgBupvs45UQf0/edit?usp=sharing)，同时导出了一个[pdf](https://github.com/daiwk/collections/blob/master/assets/BAK-Reasoning-Engines-gulli.pdf)
* **这个真的不错**：<https://github.com/changyeyu/LLM-RL-Visualized>，自己fork了一份：<https://github.com/daiwk/LLM-RL-Visualized>
* Learning Deep Representations of Data Distributions：[马毅团队重磅发布新书：从MCR²到白盒Transformer，重构深度学习的第一性原理](https://mp.weixin.qq.com/s/8497sJmKh8V9GE4M9NWU3g)，<https://ma-lab-berkeley.github.io/deep-representation-learning-book/index.html>

### 课程

<https://github.com/mlabonne/llm-course>

<https://github.com/PacktPublishing/LLM-Engineers-Handbook>

<https://github.com/decodingml/llm-twin-course>

[Sebastian Raschka著作免费开放！《机器学习与AI核心30问》，新手专家皆宜](https://mp.weixin.qq.com/s/Q1j1Obk5ayhE_WzIofYZTA)

<https://sebastianraschka.com/books/ml-q-and-ai/#table-of-contents> 对应的代码：<https://github.com/rasbt/MachineLearning-QandAI-book>

### 面试题

[大模型面试八股](https://zhuanlan.zhihu.com/p/643560888)

[大模型八股答案（一）——基础知识](https://zhuanlan.zhihu.com/p/643829565)

[大模型八股答案（二）——训练框架](https://zhuanlan.zhihu.com/p/643836163)

[信息过载时代，如何真正「懂」LLM？从MIT分享的50个面试题开始](https://mp.weixin.qq.com/s/u7aIm6jP1Nblfjr2NvakLw)

<https://github.com/daiwk/collections/blob/master/assets/interviews/MIT_LLM_Interview_Questions.pdf>

[openai面试题](https://www.xiaohongshu.com/explore/685a7116000000002400e64f?app_platform=ios\&app_version=8.90.1\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBLkfmUrg27yzxETfpVDlCe_lcUfEv_jhc7i0jIROhNaY=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1752123606\&share_id=9f48342872094d8783a8309cfcf6ecd0)

### 扩展法则(scaling law)

#### openai的扩展法则

2020年,openai的[Scaling laws for neural language models](https://arxiv.org/pdf/2001.08361.pdf)通过拟合模型在不同数据大小（2000w到230亿个token）、不同的模型大小（7.68亿到15亿个**非嵌入参数**）的性能，提出了在**计算预算**$$c$$的条件下，$$L$$是用nats(信息量的单位，底数为e的ln，即交叉熵是用的ln，不是log2)表示的交叉熵损失，模型性能与**模型规模**$$N$$、**数据集规模**$$D$$以及**训练计算量**$$C$$间存在如下幂律关系：

$$L(N)=(\frac{N\_c}{N})^{\alpha \_N}, {\alpha}\_N\sim 0.076,N\_c\sim 8.8\times 10^{13}$$

$$L(D)=(\frac{D\_c}{D})^{\alpha \_D}, {\alpha}\_D\sim 0.095,D\_c\sim 5.4\times 10^{13}$$

$$L(C)=(\frac{C\_c}{C})^{\alpha \_C}, {\alpha}\_C\sim 0.05,C\_c\sim 3.1\times 10^{8}$$

其中，$$N\_c$$表示非嵌入参数数量，$$D\_c$$表示训练token数量，$$C\_c$$表示PF-days，其中$$1 PF-days = 10^{15}\times 86400=8.64\times 10^{19}$$浮点数运算。

[Go Wider Instead of Deeper](https://arxiv.org/pdf/2107.11817)说了，transformer效果的提升**不在于计算量的变大**，而应该在于通过**提升模型的hidden dim**来增加模型参数量

#### Chinchilla扩展法则

DeepMind在[Training compute-optimal large language models](https://arxiv.org/pdf/2203.15556.pdf)中提出了Chichilla扩展法则来指导LLM**最优计算量**的训练。通过变化更大范围的模型大小（7000w到160亿参数）和数据大小（50亿到5000亿个token）进行实验，拟合了如下的扩展法则：

$$
L(N, D)=E+\frac{A}{N^\alpha}+\frac{B}{D^\beta}
$$

其中$$E=1.69,A=406.4,B=410.7,\alpha = 0.34, \beta =0.28$$，通过在约束条件$$C\approx 6ND$$下优化损失$$L(N,D)$$，将计算预算最优地分配给模型大小和数据大小的方法：

$$
N\_{o p t}(C)=G\left(\frac{C}{6}\right)^a, \quad D\_{o p t}(C)=G^{-1}\left(\frac{C}{6}\right)^b
$$

其中$$a=\frac{\alpha}{\alpha+\beta}$$，$$b=\frac{\beta}{\alpha+\beta}$$，$$G$$是由$$A,B,\alpha,\beta$$计算出的扩展系数。

随着计算预算的增加，

* openai的扩展法则更偏向于将更大预算分给**模型大小**，因为其对比各模型时使用了固定的训练数据量和学习率等超参，低估了数据量的作用。每增加10倍的计算量，应该让数据集大小增加为约1.8倍，模型参数量增加为约5.5倍。即**模型参数量更加的重要**。
* Chinchilla扩展法则认为**模型大小和数据大小要同比例增加**，即$$a$$和$$b$$取值差不多。因为其在无视模型大小的前提下，发现设置与数据量差不多match的学习率能获得更好的loss。每增加10倍的计算量，应该让数据集大小增加为约3.16倍，模型参数量也增加为约3.16倍。即**数据集大小和模型参数量一样重要**。

然而，有一些能力（如涌现）无法根据扩展法则进行预测，只有当模型达到一定规模时才会出现。

![chinchilla-law](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3928626692b2199e6084cf698dcc3ff09b6cdcd8%2Fchinchilla-law.png?alt=media)

飘红的就是常见的10B模型，大概要205B的token来训练，能达到**计算最优点**，当然**并不一定是loss最小的点**，这个可以参考llama3的现象

#### scaling law的一些讨论

[Scaling Laws 又失灵了？谷歌新研究：扩散模型不是越大越好](https://mp.weixin.qq.com/s/ia9L6jr_lwowYHgLI1k_4g)

[Bigger is not Always Better: Scaling Properties of Latent Diffusion Models](https://arxiv.org/pdf/2404.01367.pdf)

[腾讯混元、北大发现Scaling law「浪涌现象」，解决学习率调参难题](https://mp.weixin.qq.com/s/ff5_O0H5VQNkArKroJkEZQ)

[Surge Phenomenon in Optimal Learning Rate and Batch Size Scaling](https://arxiv.org/pdf/2405.14578)

SIGIR24最佳论文：[Scaling Laws For Dense Retrieval](https://arxiv.org/pdf/2403.18684)

[中科大联合华为诺亚提出Entropy Law，揭秘大模型性能、数据压缩率以及训练损失关系](https://mp.weixin.qq.com/s/F4OFP1lzAGH4RSXcXBw7mw)

**词表的scaling law**

&#x20;

[NeurIPS 2024 | 大模型的词表大小，同样适用于Scaling Law](https://mp.weixin.qq.com/s/_DTvTMCtrW9WV3vELjU9jw)

[Scaling Laws with Vocabulary: Larger Models Deserve Larger Vocabularies](https://arxiv.org/a/2407.13623)

<https://github.com/sail-sg/scaling-with-vocab/>

**scaling law for precision**

[Scaling Laws终结，量化无用，AI大佬都在审视这篇论文](https://mp.weixin.qq.com/s/JhtOlj5Y4UYM3W3koeMmqw)

[Scaling Laws for Precision](https://arxiv.org/a/2411.04330)

你训练的 token 越多，你需要的精度就越高。

#### Densing law

[LLM最大能力密度100天翻一倍！清华刘知远团队提出Densing Law](https://mp.weixin.qq.com/s/O_jtO2ZuL11XB9GlaURsWg)

[Densing Law of LLMs](https://arxiv.org/pdf/2412.04315v2)

### 涌现能力

![llm-capabilities](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-453b3b4b7737118fae8ee3805bf8428406cf19da%2Fllm-capabilities.png?alt=media)

涌现能力：在小型模型中不存在而在大型模型中产生的能力，当规模达到一定程度时，性能显著提升，超出随机水平（参考 [Emergent Abilities of Large Language Models](https://arxiv.org/pdf/2206.07682.pdf)）。与物理学中的**相变**现象类似（物质从一种相（状态）转变为另一种相的过程，通常伴随着能量的吸收或释放，并且涉及不同的物理性质，例如固体、液体和气体之间的转变）。

[普林斯顿DeepMind用数学证明：LLM不是随机鹦鹉！「规模越大能力越强」有理论根据](https://mp.weixin.qq.com/s/oYYuqbelBfCCSLW4Qo4POA)

[A Theory for Emergence of Complex Skills in Language Models](https://arxiv.org/a/2307.15936)：

![涌现](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a4fa7c7c96ec565e2fafa3c21c5584a644bc2612%2Femergent%20ability.png?alt=media)

LLM的3种典型涌现能力及其对应代表模型：

#### 上下文学习(in-context learning)

GPT-3（[Language models are few-shot learners](https://arxiv.org/pdf/2005.14165.pdf)）提出，只要提供一个自然语言指令和/或几个任务演示，语言模型就能通过完成输入文本的词序列的方式来为测试实例生成预期输出，不用额外的梯度更新。

* ICL能力小模型不具备：1750亿的GPT-3有ICL能力，但GPT-1和GPT-2无此能力。
* ICL能力取决于具体下游任务：130亿的GPT-3能在算术任务上有ICL，但1750亿的GPT-3在波斯语QA上无能为力。

#### 指令遵循(instruction following)

使用**自然语言描述的混合多任务数据集进行微调（指令微调）**，LLM在**未见过的以指令形式描述的任务**上表现出色，具有更好的泛化能力。例如[Multitask prompted training enables zero-shot task generalization](https://arxiv.org/pdf/2110.08207.pdf)、[Training language models to follow instructions with human feedback](https://arxiv.org/pdf/2203.02155.pdf)、[Finetuned language models are zero-shot learners](https://arxiv.org/pdf/2109.01652.pdf)。

在[Finetuned language models are zero-shot learners](https://arxiv.org/pdf/2109.01652.pdf)的实验中，当模型大小达到680亿时，经过指定微调的LaMDA-PT开始在未见过的任务上显著优于未微调的模型，而80亿或更小的模型则没有这个现象。

在[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)的实验中，PaLM至少在620亿参数上才能在4个评估基准的各种任务上表现良好。

[精准0误差，输入价格打骨折！OpenAI官宣API支持结构化输出，JSON准确率100％](https://mp.weixin.qq.com/s/257SBcB2hr-xKPNYkUEErQ)

#### 逐步推理(multi-step reasoning)

对于涉及多个推理步骤的复杂任务（如数学），可以使用**思维链（Chain-of-Thought, CoT）提示策略（**[**Chain of thought prompting elicits reasoning in large language models**](https://arxiv.org/pdf/2201.11903.pdf)**），让LLM通过利用中间推理步骤的提示机制**来解决这类任务。

[Chain of thought prompting elicits reasoning in large language models](https://arxiv.org/pdf/2201.11903.pdf)发现，CoT在模型大于600亿的PaLM和LaMBDA变体中能够提升在算术推理基准任务的效果，而当模型大于1000亿时，相比标准提示的优势更明显。

[How does GPT Obtain its Ability? Tracing Emergent Abilities of Language Models to their Sources](https://yaofu.notion.site/How-does-GPT-Obtain-its-Ability-Tracing-Emergent-Abilities-of-Language-Models-to-their-Sources-b9a57ac0fcf74f30a1ab9e3e36fa1dc1)

### LLM关键点

如何让LLM能够**通用**且**有能力**？

#### 扩展

更大的模型、数据规模和更多的训练计算，但计算预算是有限的，可以用扩展法更高效地分配计算资源，如Chinchilla在**相同计算预算下增加训练token数**，优于更大模型规模的Gopher，同时需要数据清理。

#### 训练

* 分布式的训练框架：包括DeepSpeed（[Deepspeed: System optimizations enable training deep learning models with over 100 billion parameters](https://dl.acm.org/doi/a/10.1145/3394486.3406703)）和Megatron-LM（[Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism](https://arxiv.org/pdf/1909.08053.pdf)和[Efficient large-scale language model training on GPU clusters using megatron-lm](https://arxiv.org/pdf/2104.04473.pdf)）
* 优化技巧：有助于提升训练稳定性和模型性能，如**重新开始以克服训练损失激增**（[Palm: Scaling language modeling with pathways](https://arxiv.org/pdf/2204.02311.pdf)）和**混合精度训练**（[BLOOM: A 176b-parameter open-access multilingual language model](https://arxiv.org/pdf/2211.05100.pdf)）。

#### 能力引导

当LLM执行某些特定任务时，可能不会显式地展示出其通用求解器的能力，**设计合适的任务指令或具体的ICL策略**可以**激发**这种能力，例如

* 通过**包含中间推理步骤的CoT提示**
* 使用**自然语言表达的任务描述**，对LLM进行**指令微调**

#### 对齐微调

由于预训练语料库包括高质量和低质量的数据，LLM可能生成有毒、偏见甚至有害的内容，要让LLM和人类价值观保持一致，如**有用性、诚实性和无害性**。RLHF相关工作如[Training language models to follow instructions with human feedback](https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf)和[Deep reinforcement learning from human preferences](https://arxiv.org/pdf/1706.03741.pdf)能够产生高质量、无害的回答（例如拒绝回答侮辱性问题）。

#### 工具操作

LLM本质是基于海量文本语料库进行文本生成训练的，对于不适合以文本形式表达的任务表现不佳（如数字计算），且其能力受限于预训练数据，无法获取最新信息。可以利用外部工具：

* [Toolformer: Language models can teach themselves to use tools](https://arxiv.org/pdf/2302.04761.pdf)能利用计算器进行准确计算
* [Webgpt: Browser-assisted question-answering with human feed- back](https://arxiv.org/pdf/2112.09332.pdf)能利用搜索引擎检索未知信息

## LLM数据集

### 常用数据集

llm中文数据集：<https://juejin.cn/post/7238921093553438779>

* Books：
  * [BookCorpus](https://arxiv.org/pdf/1506.06724.pdf)：超过11000本电子书，用于GPT和GPT-2。
  * [Gutenberg](https://www.gutenberg.org/)：超过70000本文学作品，包括小说、散文、诗歌、戏剧、历史、科学、哲学和其他公共领域，用于MT-NLG和LLaMA。
  * Books1和Books2：比BookCorpus大得多，但未公开，用于GPT-3。
* CommonCrawl：最大的开源网络爬虫数据库之一，**百万亿字节**，有大量噪音和低质信息，需要过滤，有如下4个子集：
  * [C4](https://www.tensorflow.org/datasets/catalog/c4)：包括en（806G，训练T5、LaMDA、Gopher、UL2）、en.noclean（6T）、realnewslike（36G）、webtextlike（17G）、multilingual（38T，训练mT5）。
  * [CC-Stories](https://arxiv.org/pdf/1806.02847.pdf)：31G，内容以故事的形式展示
  * [CC-News](https://arxiv.org/pdf/1907.11692.pdf)：76G
  * [RealNews](https://arxiv.org/pdf/1905.12616.pdf)：120G
* Reddit Links：Reddit上的帖子，高赞通常比较有用，可以拿来创建高质量数据集。
  * [WebText](https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf)：由Reddit上的高赞链接组成，未公开，对应的开源版是[OpenWebText](https://skylion007.github.io/OpenWebTextCorpus/)。
  * [Pushshift.io](https://arxiv.org/pdf/2001.08435.pdf)：实时更新的数据集，包括Reddit自创建以来的历史数据，有数据存储，也有实用工具，供用户搜索、总结和统计分析。
* Wikipedia：大部分文章使用写作风格，并支持引用，英语版本用于大多数LLM，如GPT-3、LaMDA、LLaMA，还有多语言版。
* Code：包括开源许可证的公共代码库（如github）和与代码相关的问答平台（如StackOverflow）,Google公开了[BigQuery](https://cloud.google.com/bigquery?hl=zh-cn)数据集，CodeGen用的BIGQUERY是其的一个子集。
* 其他：
  * [The Pile](https://arxiv.org/pdf/2101.00027.pdf)有800G，包括书籍、网站、代码、科学论文和社交媒体平台，有22个子集，用于GPT-J(6B)、CodeGen(16B)、Megatron-Turing NLG（530B）。
  * [ROOTS](https://arxiv.org/pdf/2303.03915.pdf)由各种小数据集组成，共1.6T，包括59种语言（自然语言和编程语言），用于BLOOM。

### 数据收集

#### 数据获取

* 通用文本数据：
  * 网页：例如CommonCrawl，同时需要过滤和处理以提高质量
  * 对话文本：公共对话数据如PushShift.io，对于在线社交媒体的对话数据，可以**转换成树形结构**，每句话与回应其的话相连。多方的对话树可以划分为预训练语料库中的多个子对话。过度引入对话数据可能会有潜在风险（[OPT: open pre-trained transformer language models](https://arxiv.org/pdf/2205.01068.pdf)）：陈述性指令和直接疑问句被错误地认为是对话的开始，导致指令的有效性下降。
  * 书籍：更正式的长文本，利于**学习语言知识**、**建模长期依赖关系**、**生成叙述性和连贯的文本**。
* 专用文本数据：
  * 多语言文本：BLOOM的预训练语料中包括了46种语言，PaLM包含了122种
  * 科学文本：如arxiv论文、科学教材、数学 网页等，通常需要特定的标记化和预处理。
  * 代码：一是编程问答社区，二是开源代码仅为。对应长距离依赖和准确的执行逻辑，可能是复杂推理能力的来源。将推理任务格式化为代码形式还能帮LLM生成更准确的结果（如[Language models of code are few-shot commonsense learners](https://arxiv.org/pdf/2210.07128.pdf)和[Autoformalization with large language models](https://arxiv.org/pdf/2205.12615.pdf)）

#### 数据预处理

* 质量过滤：有一些基于分类器的方法，例如维基百科的数据为正样本，负采样其他数据训练二分类器，但这种方法会删除方言、口语和社会语言的高质量文本，可能导致有偏、减少多样性。还有启发式的方法，主要包括：
  * 基于语言的过滤：如果该llm主要用于某种语言，可以把其他语言删了
  * 基于度量的过滤：利用生成文本的评估度量（如**perplexity**）来检测和删除不自然的句子
  * 基于统计的过滤：如**标点符号分布**、**符号和单词比例**、**句子长度**等
  * 基于关键词的过滤：删除噪声或无用元素，如**HTML标签**、**超链接**、**模板**、**攻击性词语**等。
* 去重：[Scaling laws and interpretability of learning from repeated data](https://arxiv.org/pdf/2205.10487.pdf)中发现重复数据会降低多样性，可能导致训练不稳定。下面3个级的去重都很有用
  * 句子级：删掉包含重复单词和短语的句子，因为可能在语言建模中引入**重复模式**（[The curious case of neural text degeneration](https://arxiv.org/pdf/1904.09751.pdf)）(后面的章节会讲)
  * 文档级：通过文档间的表层特征（如n-gram或单词重合率）来删掉重复文档
  * 数据集级：训练集中删掉测试集可能出现的重复文本，防止训练集和评估集间的重叠
* 隐私去除：删掉可识别个人信息（PII），如基于关键词（姓名、地址、电话号码）识别。另外，[Deduplicating Training Data Mitigates Privacy Risks in Language Models](https://arxiv.org/pdf/2202.06539.pdf)发现LLM在隐私攻击下的脆弱性可能归因于预训练语料中存在**重复PII数据**。
* 分词：可以直接利用已有分词器，也可以使用专门为预训练语料库设计的分词器，如SentencePiece，而且**BPE**(byte pair encoding)能**确保分词后的信息不会丢失**，但其中的如NFKC([Unicode normalization forms](https://unicode.org/reports/tr15/))的**归一化技术**可能会**降低分词的性能**。

#### 预训练语料的重要性

* 混合来源：不同领域和场景的数据能让LLM有更强大的泛化能力。需要**仔细设置数据分布**，Gopher对数据分布消融，发现增加书籍数据可以提升捕捉长期依赖的能力，增加c4数据集比例可以提升其在c4验证集上的效果，但单独训练过多的某个领域数据会影响LLM在其他领域的泛化能力。
* 数据量：模型性能方面，**数据大小**也能看到与模型大小类似的**扩展法则**。LLaMA发现，用更多数据训练更长时间，较小的模型也能实现良好性能。
* 数据质量：Gopher、GLaM和T5都发现，在清理后的数据上训练能提升llm效果。数据的重复可能导致『双下降现象』（[Scaling laws and interpretability of learning from repeated data](https://arxiv.org/pdf/2205.10487.pdf)和[Deep double descent: Where bigger models and more data hurt](https://arxiv.org/pdf/1912.02292.pdf)），甚至会导致训练不稳定。此外，[Scaling laws and interpretability of learning from repeated data](https://arxiv.org/pdf/2205.10487.pdf)还发现，**重复数据会降低LLM从上下文复制的能力**，从而影响**ICL中的泛化能力**。

注：**双下降**指的是随着模型复杂性的增加，可能**loss先下降，然后再升高，最后又下降**：

* 当模型的复杂性低于数据的复杂性时，增加模型的复杂性可以帮助减少训练误差。
* 当模型的复杂性超过数据的复杂性时，增加模型的复杂性反而可能导致训练误差增加。这是因为模型开始过拟合数据，捕获数据中的噪声而非实际的模式。
* 当模型的复杂性远大于数据的复杂性时，训练误差可能再次开始减少。这是因为模型有足够的能力来对数据的噪声进行平滑，同时仍然能够捕获数据的实际模式。

### benchmark

MMLU

[Measuring massive multitask language understanding](https://arxiv.org/pdf/2009.03300)

## LLM模型架构

### MoE原理

[MoE模型的前世今生](https://mp.weixin.qq.com/s/jhT4kv9c7fJp4xwSfckoag)

[MoE 系列论文解读：Gshard、FastMoE、Tutel、MegaBlocks 等](https://mp.weixin.qq.com/s/T5eJZWGH3yRpK9bxmvhhTA)

[CMU开源GRIFFIN：一种新颖的无需训练的MoE方法，提高大模型的生成效率！](https://mp.weixin.qq.com/s/33ISRxfXp4Z7OCN1dBKGyA)

[Prompt-prompted Mixture of Experts for Efficient LLM Generation](https://arxiv.org/pdf/2404.01365.pdf)

[From Sparse to Soft Mixtures of Experts](https://arxiv.org/pdf/2308.00951): softmoe

MoE的核心问题是一个**如何把token分配给哪个专家**的**离散优化**问题，有如下离散+稀疏的分配方法，都需要**辅助loss**来**平衡每个专家的负载**，以减少drop tokens：

* 线性规划
* 强化学习
* 人为固定规则
* 最优运输方法
* 贪心topk token-choose-expert
* 贪心topk expert-choose-token

![softmoe](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-28752a93f92ad6f3937cca008a8910bb42c349f4%2Fsoftmoe.png?alt=media)

在softmoe中，假设N个token，S个slot，E个expert

代码：

<https://github.com/google-research/vmoe/blob/main/vmoe/projects/soft_moe/router.py#L97>和<https://github.com/google-research/vmoe/blob/main/vmoe/moe.py#L128>

[算法、系统和应用，三个视角全面读懂混合专家（MoE）](https://mp.weixin.qq.com/s/3UEFwy87f8O4H1Tt4VVnig)

[A Survey on Mixture of Experts](https://arxiv.org/pdf/2407.06204)

![moe-gating](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-43a990d03a0ab8b4934376bc3b2574344bac0acc%2Fmoe-gating.png?alt=media)

[从ACL 2024录用论文看混合专家模型（MoE）最新研究进展](https://mp.weixin.qq.com/s/BCsRHvHnn3B8oOODjim-Kg)

#### Dynamic MoE

[Harder Tasks Need More Experts: Dynamic Routing in MoE Models](https://arxiv.org/pdf/2403.07652)

<https://github.com/ZhenweiAn/Dynamic_MoE>

#### XMoE

是上面两种方法的并集

[XMoE: Sparse Models with Fine-grained and Adaptive Expert Selection](https://arxiv.org/pdf/2403.18926)

<https://github.com/ysngki/XMoE>

#### HyperMoE

[HyperMoE: Towards Better Mixture of Experts via Transferring Among Experts](https://arxiv.org/pdf/2402.12656)

<https://github.com/Bumble666/Hyper_MoE>

#### Expert Pruning

[Not All Experts are Equal: Efficient Expert Pruning and Skipping for Mixture-of-Experts Large Language Models](https://arxiv.org/pdf/2402.14800)

<https://github.com/Lucky-Lance/Expert_Sparsity>

#### MixLoRA

[Multimodal Instruction Tuning with Conditional Mixture of LoRA](https://arxiv.org/pdf/2402.15896)

#### ESFT

[Let the Expert Stick to His Last: Expert-Specialized Fine-Tuning for Sparse Architectural Large Language Models](https://arxiv.org/pdf/2407.01906)

#### 多模态MoE

[混合专家更有主见了，能感知多模态分情况行事，Meta提出模态感知型专家混合](https://mp.weixin.qq.com/s/1FNqu0CwPmMFuDTMhli7WA)

[Chameleon: Mixed-modal early-fusion foundation models](https://arxiv.org/pdf/2405.09818)单一Transformer架构，可以根据下一个token的预测目标，对由离散图像和文本token组成的混合模态序列进行建模，从而在不同模态之间进行无缝推理和生成。然而对于Chameleon这样各种模态会在模型训练的早期混合起来的模型，想要拓展它的能力，需要投入大量算力。

[MoMa: Efficient Early-Fusion Pre-training with Mixture of Modality-Aware Experts](https://arxiv.org/pdf/2407.21770)使用路由式稀疏架构（routed sparse architecture）

#### HMOE

[优化传统MoE结构，腾讯混元团队提出专家差异化新思路](https://mp.weixin.qq.com/s/gOXGL_MReneAZCmO7lBIng)

[HMoE: Heterogeneous Mixture of Experts for Language Modeling](https://arxiv.org/pdf/2408.10681)

在 HMoE 中，**每个专家的大小不再相同**，从而赋予了每个专家不同的表达能力。这种差异化设计使得路由可以根据专家的实际能力动态分配不同难度的 token，有效解决了专家专业化程度不足的问题。

#### OLMoE

[OLMoE: Open Mixture-of-Experts Language Models](https://arxiv.org/pdf/2409.02060)

<https://huggingface.co/allenai/OLMoE-1B-7B-0924>

<https://github.com/allenai/OLMoE>

#### 元象MOE

[中国最大开源MoE模型，255B参数无条件免费商用，元象发布](https://mp.weixin.qq.com/s/vX0gt2YfsbUbrCpvNBFHZw)

XVERSE-MoE-A36B，该模型总参数255B，激活参数36B，达到100B模型性能的「跨级」跃升。

<https://github.com/xverse-ai/XVERSE-MoE-A36B>

#### MoEUT

[Jurgen、曼宁等大佬新作：MoE重塑6年前的Universal Transformer，高效升级](https://mp.weixin.qq.com/s/CckHYrUpwCpft53-lZ4DwA)

[MoEUT: Mixture-of-Experts Universal Transformers](https://arxiv.org/pdf/2405.16039)

<https://github.com/robertcsordas/moeut>

#### MoA

[无问芯穹提出混合稀疏注意力方案MoA，加速长文本生成，实现最高8倍吞吐率提升](https://mp.weixin.qq.com/s/rjGAJfusY_CHSx3Q0SHVmg)

<https://github.com/thu-nics/MoA>

[MoA: Mixture of Sparse Attention for Automatic Large Language Model Compression](https://arxiv.org/a/2406.14909)

#### GRIN

[专家模型不要专家并行！微软开源MoE新路径](https://mp.weixin.qq.com/s/pt-AlH_z4e3PNiKC9Iyz7A)

[GRIN: GRadient-INformed MoE](https://arxiv.org/a/2409.12136)

### 主流框架

* **编码器-解码器架构(encoder-decoder)**：标准Transformer，如T5、BART，**只有少数LLLM还用这种结构**，如Flan-T5
* **因果解码器架构(causual decoder)**：也叫**decoder-only**，**单向注意力掩码**，输入和输出token通过解码器以相同方式进行处理，以GPT系列为代表，现有大部分LLM都是这种架构，如OPT、BLOOM、Gopher等。
* **前缀解码器架构(prefix decoder)**：修正因果解码器的掩码机制，使其能**对前缀token执行双向注意力**，并且**仅对生成的token执行单向注意力**（和encoder-decoder类似），即[Unified language model pre-training for natural language understanding and generation](https://arxiv.org/pdf/1905.03197.pdf)提出的uni-lm。[What language model architecture and pretraining objective works best for zero-shot generalization?](https://arxiv.org/pdf/2204.05832.pdf)建议不从头开始预训练，而是**继续训练因果编码器，然后将其转换成前缀编码器以加速收敛**。例如U-PaLM从PaLM演化而来，还有GLM-130B也是这种架构。

![uni-lm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3856486c37d59764525f9e75d3fd40cd49558551%2Funi-lm.png?alt=media)

<https://github.com/microsoft/unilm>

对于这3种架构，都可以用**MoE**进行扩展，每个输入的**一小部分神经网络权重**被**稀疏激活**，如[Switch Transformer](https://arxiv.org/pdf/2101.03961.pdf)和GLaM。[Unified scaling laws for routed language models](https://arxiv.org/pdf/2202.01169.pdf)发现，通过**增加专家数量或总参数大小**，性能会有显著改进。

#### 讨论：为什么现在的LLM都是Decoder only的架构？

&#x20;

<https://www.zhihu.com/question/588325646/answer/2940298964>

* **泛化性能强**：ICML 22的[What language model architecture and pretraining objective works best for zero-shot generalization](https://arxiv.org/pdf/2204.05832.pdf).在最大5B参数量、170B token数据量的规模下做了一些列实验，发现用next token prediction预训练的decoder-only模型在**各种下游任务上zero-shot泛化性能最好**；另外，ACL23的[Why Can GPT Learn In-Context? Language Models Implicitly Perform Gradient Descent as Meta-Optimizers](https://arxiv.org/pdf/2212.10559.pdf)等工作表明，decoder-only模型相当于基于给出的几个示例**隐式地进行梯度下降**，对应的in-context learning泛化能力更强，
* **秩**的讨论：[Attention is not all you need: pure attention loses rank doubly exponentially with depth](https://arxiv.org/pdf/2103.03404.pdf)的讨论，$$n\times d$$和$$d\times n$$相乘后（$$n\gg d$$）再加上softmax后，秩不超过$$d$$，而decoder-only中有一个下三角矩阵的mask，所以输入的是一个下三角矩阵，而下三角矩阵的行列式是对角线之积，且有softmax，对角线肯定大于0，所以是满秩的(行列式不为0-->矩阵经过变换后不会有一行或者一列全为0-->当前矩阵满秩)
* 预训练**任务难度**更大：相比encoder-decoder，decoder-only架构里**每个位置能接触到的信息更少**，故难度更高，当模型大小和数据量够的时候，上限更高
* 隐式学习了**位置信息**：[Transformer Language Models without Positional Encodings Still Learn Positional Information](https://aclanthology.org/2022.findings-emnlp.99.pdf)，encoder里对语序的区分能力较弱，需要结合position encoding，而causual attention隐式地具备了这种建模位置的能力。
* **工程效率**：支持**复用kv-cache**，对多轮对话更友好，\*\*『DIN的FLOPS』\*\*一节里有讲

[盛名一时的BERT哪去了？这个问题的答案昭示了LLM范式的转变](https://mp.weixin.qq.com/s/fKeorQYwRlmmepuG1_aJlQ)

[What happened to BERT & T5? On Transformer Encoders, PrefixLM and Denoising Objectives](https://www.yitay.net/blog/model-architecture-blogpost-encoders-prefixlm-denoising)

**去噪目标**

&#x20;

**去噪目标**指的是span corruption任务的任意变体，即填充(infilling)或填空(fill in the blank)。表达方式有很多，比如span长度、随机性、sentinel token等。

* BERT类的模型中，大部分是**in-place**的去噪目标，例如对mask tokens的分类head，
* T5的做法则是通过encoder-decoder或decoder-only模型来处理数据变换，即把masked token move to the back给模型预测。

去噪目标的效果很好，可以作为常规语言建模的**补充目标**，但不足以单独作为目标，因为去噪有两个缺点：

* **更少的loss exposure**：在去噪目标中，只有**少量token会被mask和学习**，而常规语言建模则接近100%，使得**每个FLOP的样本效率非常低**
* 比常规语言建模更不自然：以一种奇怪的方式重新设定输入输出格式，不太适合少样本学习

**PrefixLM vs decoder-only**

&#x20;

注：归纳偏置(inductive bias)指模型在预测未遇到的输入时，做的一些假设的集合，例如最小描述长度（奥卡姆剃刀）指的就是当构成一个假设时，试图去最小化其假设的描述长度。假设越简单，越可能为真的。

对语言模型来说，双向注意力是一种有趣的**归纳偏置**，相比于较小规模的场景，双向注意力**在规模较大时可能就没那么重要了**，或者可能对不同的任务或模态有不同的影响，例如PaliGemma就用的prefixLM（[PaliGemma: A versatile 3B VLM for transfer](https://arxiv.org/pdf/2407.07726)）

![paligemma](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1467a30e5792ab8dfc2edef70812b1685f9ae644%2Fpaligemma.png?alt=media)

PrefixLM也存在缓存问题，是这类架构的一个固有缺陷

**encoder-decoder的优缺点**

&#x20;

* 相比decoder-only的优势：endocer不受causal的限制，可以激进地试各种pooling/linear attention，因此可以offload一些**不那么重要的context到encoder中**，也可以**让encoder更小**，例如[Charformer](https://arxiv.org/pdf/2106.12672)
* 相比prefixLM的缺点：输入和目标必须分配固定的预算，例如输入预算是1024token，那么encoder就**必须pad**到1024，而这可能会浪费大量计算。相反，在 PrefixLM 中，输入和目标可以直接concat起来，从而可以缓解这个问题

### 组件配置

#### 标准化（norm）

&#x20;

LN(layer norm)能缓解LLM训练不稳定的问题，其位置很重要。

![pre-ln](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7e09c970e1c3136d16c13794ead13186aec7a535%2Fpre-ln.jpeg?alt=media)

* 前置LN：最初Transformer使用后置LN，但大多数LLM采用前置LN以实现更稳定的训练，尽管会有一些性能损失([On layer normalization in the transformer architecture](https://arxiv.org/pdf/2002.04745.pdf))。[Sandwich-LN](https://arxiv.org/pdf/2105.13290.pdf)在残差连接前添加额外的LN，虽然能避免数值爆炸，但有时会无法稳定LLM的训练，可能导致训练崩溃（[GLM-130B: an open bilingual pre-trained model](https://arxiv.org/pdf/2210.02414.pdf)）
* [RMS Norm](https://arxiv.org/pdf/1910.07467.pdf)：训练和性能都不错，在Gopher和Chinchilla里使用
* [Deep Norm](https://arxiv.org/pdf/2203.00555.pdf)：比LN有更好的训练稳定性，和后标准化一起用在GLM-130B里

![deep-norm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ef60452bc528d0272777a934320ea2372b96a5e4%2Fdeep%20norm.png?alt=media)

* [DyT](https://arxiv.org/pdf/2503.10622)：用$$tanh(\alpha x)$$替换掉layer norm里的normalize

```python
class DyT(nn.Module):
    def __init__(self, num_features, alpha_init_value=0.5):
        super().__init__()
        self.alpha = nn.Parameter(torch.ones(1) * alpha_init_value)
        self.weight = nn.Parameter(torch.ones(num_features))
        self.bias = nn.Parameter(torch.zeros(num_features))
    
    def forward(self, x):
        x = torch.tanh(self.alpha * x)
        return x * self.weight + self.bias
```

此外，**在emb后直接加额外的LN**能提升训练稳定性，但会导致**显著的性能下降**([What language model to train if you have one million GPU hours?](https://arxiv.org/pdf/2210.15424.pdf))，在后来的LLM中**被移除**（[BLOOM: A 176b-parameter open-access multilingual language model](https://arxiv.org/pdf/2211.05100.pdf)）。

[神经网络可能不再需要激活函数？Layer Normalization也具有非线性表达！](https://mp.weixin.qq.com/s/YRAcAKouScQGt3lOxe8fBQ)

[On the Nonlinearity of Layer Normalization](https://arxiv.org/pdf/2406.01255)

#### 激活函数

&#x20;

FFN中的激活函数：

* [GeLU](https://arxiv.org/pdf/1606.08415.pdf)：大部分都是这个
* [GLU(gated linear units)的变体](https://arxiv.org/pdf/2002.05202.pdf)：应用在PaLM和LaMDA等模型中，如SwiGLU和GeGLU有更好的效果，但在FFN中的参数量比GeLU要大50%

原始Transformer中

$$\operatorname{FFN}\left(x, W\_1, W\_2, b\_1, b\_2\right)=\max \left(0, x W\_1+b\_1\right) W\_2+b\_2$$

T5中把bias干掉了

$$\operatorname{FFN}\_{\operatorname{ReLU}}\left(x, W\_1, W\_2\right)=\max \left(x W\_1, 0\right) W\_2$$

然后，$$\operatorname{GELU}(x)=x \Phi(x)$$，同时$$\operatorname{Swish}\_\beta(x)=x \sigma(\beta x)$$，接下来

$$\operatorname{GLU}(x, W, V, b, c)=\sigma(x W+b) \otimes(x V+c)$$

$$\operatorname{Bilinear}(x, W, V, b, c)=(x W+b) \otimes(x V+c)$$

$$\operatorname{ReGLU}(x, W, V, b, c)=\max (0, x W+b) \otimes(x V+c)$$

$$\operatorname{GEGLU}(x, W, V, b, c)=\operatorname{GELU}(x W+b) \otimes(x V+c)$$

$$\operatorname{SwiGLU}(x, W, V, b, c, \beta)=\operatorname{Swish}\_\beta(x W+b) \otimes(x V+c)$$

对应起来就是

$$\operatorname{FFN}\_{\mathrm{GLU}}\left(x, W, V, W\_2\right)=(\sigma(x W) \otimes x V) W\_2$$

$$\operatorname{FFN}\_{\text {Bilinear }}\left(x, W, V, W\_2\right)=(x W \otimes x V) W\_2$$

$$\operatorname{FFN}\_{\operatorname{ReGLU}}\left(x, W, V, W\_2\right)=(\max (0, x W) \otimes x V) W\_2$$

$$\operatorname{FFN}\_{\text {GEGLU }}\left(x, W, V, W\_2\right)=(\operatorname{GELU}(x W) \otimes x V) W\_2$$

$$\operatorname{FFN}\_{\text {SwiGLU }}\left(x, W, V, W\_2\right)=\left(\operatorname{Swish}\_1(x W) \otimes x V\right) W\_2$$

#### 位置编码

&#x20;

Transformer的self-attention有转换不变性，故要位置编码以引入绝对或相对位置信息来建模序列。

* 绝对位置编码：
  * 正弦函数：原始Transformer中使用
  * 可学习的位置编码：LLM中常用
* 相对位置编码：[Exploring the limits of transfer learning with a unified text-to-text transformer](https://arxiv.org/pdf/1910.10683.pdf)提出，其实是在[Self-attention with relative position representations](https://arxiv.org/pdf/1803.02155.pdf)一文提出的，根据**k和q之间的偏移量**生成emb
* Alibi：[Train short, test long: Attention with linear biases enables input length extrapolation](https://arxiv.org/pdf/2108.12409.pdf)提出，使用**k和q之间距离的惩罚**来给注意力分数加bias，[What language model architecture and pretraining objective works best for zero-shot generalization](https://arxiv.org/pdf/2204.05832.pdf)发现其有更好的**零样本泛化能力**和更强的**外推能力**，能够在**比训练序列更长的序列**上表现良好。
* RoPE：[Roformer: Enhanced transformer with rotary position embedding](https://arxiv.org/pdf/2104.09864.pdf)提出，**k和q之间的分数用相对位置信息计算**，利于建模长序列，在PaLM、LLaMA、GLM-130B中都有应用。

#### 注意力机制和Bias

* 稀疏注意力：[Generating long sequences with sparse transformers](https://arxiv.org/pdf/1904.10509.pdf))，**计算复杂度更低**，GPT-3用了
* FlashAttention：[Flashattention: Fast and memory-efficient exact attention with IO-awareness](https://arxiv.org/pdf/2205.14135.pdf)，考虑显存访问
* 其他attention：如[Random feature attention](https://arxiv.org/pdf/2103.02143.pdf)、[Big bird: Transformers for longer sequences](https://arxiv.org/pdf/2007.14062.pdf)
* 移除bias：PaLM和Galactica中将bias删了，能够增加训练稳定性。

#### 小结

**归一化位置**

&#x20;

sublayer表示FFN或self-attention模块

| 方法            | 公式                                                                                           |
| ------------- | -------------------------------------------------------------------------------------------- |
| post Norm     | $$\operatorname{Norm}(\mathbf{x}+\operatorname{Sulayerb}(\mathbf{x}))$$                      |
| pre Norm      | $$\mathbf{x}+\operatorname{Sublayer}(\operatorname{Norm}(\mathbf{x}))$$                      |
| Sandwich Norm | $$\mathbf{x}+\operatorname{Norm}(\operatorname{Sublayer}(\operatorname{Norm}(\mathbf{x})))$$ |

**归一化方法**

| 方法         | 公式                                                                                                                                                               |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Layer Norm | $$\frac{\mathrm{x}-\mu}{\sqrt{\sigma}} \cdot \gamma+\beta, \quad \mu=\frac{1}{d} \sum\_{i=1}^d x\_i, \quad \sigma=\sqrt{\frac{1}{d} \sum\_{i=1}^d(x\_i-\mu)^2}$$ |
| RMSNorm    | $$\frac{\mathrm{x}}{\operatorname{RMS}(\mathrm{x})} \cdot \gamma, \quad \operatorname{RMS}(\mathbf{x})=\sqrt{\frac{1}{d} \sum\_{i=1}^d x\_i^2}$$                 |
| Deep Norm  | $$LayerNorm (\alpha \cdot \mathbf{x}+\operatorname{Sublayer}(\mathbf{x}))$$                                                                                      |

**激活函数**

| 方法     | 公式                                                                                                                                                                                |
| ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ReLU   | $$\operatorname{ReLU}(\mathbf{x})=\max (\mathbf{x}, \mathbf{0})$$                                                                                                                 |
| GeLU   | $$\operatorname{GeLU}(\mathbf{x})=0.5 \mathrm{x} \otimes\[1+\operatorname{erf}(\mathbf{x} / \sqrt{2})], \quad \operatorname{erf}(x)=\frac{2}{\sqrt{\pi}} \int\_0^x e^{-t^2} d t$$ |
| Swish  | $$\operatorname{Swish}(\mathbf{x})=\mathbf{x} \otimes \operatorname{sigmoid}(\mathbf{x})$$                                                                                        |
| SwiGLU | $$\operatorname{SwiGLU}\left(\mathbf{x}\_1, \mathbf{x}\_2\right)=\operatorname{Swish}\left(\mathbf{x}\_1\right) \otimes \mathbf{x}\_2$$                                           |
| GeGLU  | $$\operatorname{GeGLU}\left(\mathbf{x}\_1, \mathbf{x}\_2\right)=\operatorname{GeLU}\left(\mathbf{x}\_1\right) \otimes \mathbf{x}\_2$$                                             |

**位置嵌入**

* $$A\_{ij}$$：**q和k之间**的**注意力分数**
* $$r\_{i-j}$$：基于**q和k之间偏移**的可学习标量
* $$\mathbf{R}\_{\theta, i-j}$$：旋转角度为$$t\cdot \theta$$的旋转矩阵

| 方法     | 公式                                                                                                                                                                         |
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 绝对位置编码 | $$\mathbf{x}\_i=\mathbf{x}\_i+\mathbf{p}\_i$$                                                                                                                              |
| 相对位置编码 | $$A\_{i j}=\mathbf{W}\_q \mathbf{x}\_i \mathbf{x}\_j^T \mathbf{W}*k^T+r*{i-j}$$                                                                                            |
| RoPE   | $$A\_{i j}=\mathbf{W}\_q \mathbf{x}*i \mathbf{R}*{\theta, i-j} \mathbf{x}\_j^T \mathbf{W}\_k^T$$                                                                           |
| Alibi  | $$A\_{i j}=\mathbf{W}\_q \mathbf{x}*i \mathbf{R}*{\theta, i-j} \mathbf{x}\_j^T \mathbf{W}*k^T A*{i j}=\mathbf{W}\_q \mathbf{x}\_i \mathbf{x}\_j^T \mathbf{W}\_k^T-m(i-j)$$ |

### 预训练任务

#### 语言建模

&#x20;

语言建模是**仅解码器LLM**的常见目标，给定token序列$$\mathbf{x}=\left{x\_1, \ldots, x\_n\right}$$，旨在基于序列中前面的token，自回归地预估目标token：

$$
\mathcal{L}*{L M}(\mathbf{x})=\sum*{i=1}^n \log P\left(x\_i \mid x\_{\<i}\right)
$$

对应到代码里：

```python
hidden_states = outputs[0]
logits = self.lm_head(hidden_states)

# gemma系列模型会做soft-cap
cap = self.config.logits_soft_cap
logits = nn.functional.tanh(logits / cap) * cap

logits = logits.float()
loss = None
if labels is not None:
    # Shift so that tokens < n predict n
    ## 假设句子长度为4，词表有3个词，
    ## logits: [ [0.1, 0.2, 0.7], [0.3, 0.4, 0.3], [0.5, 0.2, 0.3], [0.6, 0.1, 0.3] ]
    ## labels: [0, 2, 1, 0]
    ## shift_logits: [ [0.1, 0.2, 0.7], [0.3, 0.4, 0.3], [0.5, 0.2, 0.3]
    shift_logits = logits[..., :-1, :].contiguous()
    ## shift_labels: [2, 1, 0]
    shift_labels = labels[..., 1:].contiguous()
    # Flatten the tokens
    loss_fct = CrossEntropyLoss()
    # [, seq_len - 1, vocab_size] 变为 [( * (seq_len - 1)), vocab_size]
    shift_logits = shift_logits.view(-1, self.config.vocab_size)
    # [, seq_len - 1] 变为 [( * (seq_len - 1))]
    shift_labels = shift_labels.view(-1)
    # Enable model parallelism
    shift_labels = shift_labels.to(shift_logits.device)
    loss = loss_fct(shift_logits, shift_labels)
```

**前缀解码器**架构使用的是前缀语言建模任务，其loss**不涉及对前缀内token的预测**，故预训练时**涉及的序列中token较少**，故当预训练token数相同时，前缀语言模型的**性能往往略低**于传统语言模型任务。

另外，自回归的loss：

* 训练时：是可以并行的，因为每个位置的label是已知的，可以并行算，
* 预测时：是串行的，因为得预测完了第t个词，才能去预测第t+1个词。

#### 去噪自编码

&#x20;

DAE是BERT待模型的常见任务，即MLM（masked language model），输入$$\mathbf{x}\_{\backslash \tilde{\mathbf{x}}}$$是一些**有随机替换区间的损坏文本**，目标是恢复被替换的token $$\tilde{\mathbf{x}}$$：

$$
\mathcal{L}*{D A E}(\mathbf{x})=\log P\left(\tilde{\mathbf{x}} \mid \mathbf{x}*{\backslash \tilde{\mathbf{x}}}\right)
$$

在T5和GLM-130B中使用，**自回归地恢复替换区间**。

#### 其他任务

multi-token prediction，一次预估未来的k个词

[Better & Faster Large Language Models via Multi-token Prediction](https://arxiv.org/pdf/2404.19737)

![multi-token-prediction](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3183fa8ee4be96501b96fdbe863f685db0ed2740%2Fmulti-token-prediction.png?alt=media)

## 典型LLM简介

llm榜单：

<https://huggingface.co/spaces/lmsys/chatbot-arena-leaderboard>

![llm-families](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0bb327582eb5c114f1431bd7d179388463612e37%2Fllm-families.png?alt=media)

### GPT系列

#### GPT3

&#x20;

2020年的gpt3：[Language models are few-shot learners](https://arxiv.org/pdf/2005.14165.pdf)，175b（1750亿）参数，当参数量到达千亿时出现了『涌现』现象，发现可以in-context learning。

#### CODEX

&#x20;

[Evaluating Large Language Models Trained on Code](https://arxiv.org/pdf/2107.03374.pdf)

能够解析自然语言，并生成代码。CODEX是gpt3在github上收集的代码语料上进行finetune得到的，并且在微软的copilot中使用。

#### WebGPT

&#x20;

[WebGPT: Browser-assisted question-answering with human feedback](https://arxiv.org/a/2112.09332)

<https://openai.com/blog/webgpt/>

为了回答开放性问题，使用基于文本的浏览器对gpt3进行finetune，包括如下3个步骤：

* 学习使用人类示范（demonstration）数据来模仿人类的浏览行为
* 学习一个reward函数来预测人类偏好
* 用强化学习和拒绝采样来优化reward函数

注：[重要性采样和拒绝采样](https://zhuanlan.zhihu.com/p/664233442)

* **重要性采样**的关键是**降低方差**：因为相同的样本量，用$$\pi(x)$$分布采样得到的结果方差较大(或者是$$\pi(x)$$不好采样)，而用$$p(x)$$采样的样本得到的结果方差较小，用来估计原分布$$\pi(x)$$
* **拒绝采样**：引入易于采样的分布$$Q(x)$$，然后从中随机地筛掉某些样本(根据**接受概率**接受或者拒绝样本)，使得剩下的样本服从分布$$P(x)$$

拒绝采样的步骤：

* 从辅助分布$$Q(x)$$中采样得到样本$$x\_i$$
* 计算接受概率$$A = P(x\_i) / (M \times Q(x\_i))$$，其中$$M$$是一个常数，满足$$P(x) \leq M \times Q(x)$$对于所有$$x$$成立
* 以概率$$A$$接受样本$$x\_i$$，即生成一个随机数$$u$$，如果$$u \leq A$$，则接受样本$$x\_i$$；否则拒绝样本$$x\_i$$。

重复上述步骤，直到获得足够数量的样本。

#### InstructGPT

&#x20;

[Training language models to follow instructions with human feedback](https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf)

sft+rm+rl，在最小性能降低的情况下，提升了生成结果的真实性，并降低了毒害性

#### ChatGPT\&GPT-4

&#x20;

2022.11.30推出了ChatGPT，基于GPT3.5，即InstructGPT的兄弟

2023.3推出了GPT-4，多模态LLM，能输入图像和文本

o3/o4-mini：[Agent 要被吃进大模型了](https://mp.weixin.qq.com/s/89QkOqY3vWzQvPPbGkBodQ)

### LLaMA系列

#### LLaMA

&#x20;

2023年2月发布，[LLaMA: Open and Efficient Foundation Language Models](https://arxiv.org/a/2302.13971)，开源的LLaMA-13B比 GPT3 175B在很多任务上都更好

参考代码： <https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/modeling_llama.py>

<https://github.com/meta-llama/llama>

之前的工作考虑的是在训练预算有限的前提下，如何提升模型性能（2022年deepmind的[Training Compute-Optimal Large Language Models](https://arxiv.org/pdf/2203.15556.pdf)的Chinchilla）,llama考虑在预测时的预算。例如chinchilla是一个10b的模型在200b的token上训练，但其实一个7b的模型当用了1T的token后，性能仍在提升。LLama-13b比gpt3在大多数benchmark上好，但size只有1/10，在一个GPU上就能跑。

llama只用公开数据训练，而Chinchilla、PaLM、GPT-3都有自己的未公开数据集。其他的OPT、GPT-NeoX、BLOOM、GLM虽然也只用公开数据集，但打不过PaLM-62B或者Chinchilla

**预训练数据**

&#x20;

* English CommonCrawl(67%)：使用CCNet pipeline，去重、用fasttext把非英文的页面删了，用n-gram把低质内容删了。此外，还训了一个线性模型，对页面进行分类：作为维基百科的引用 vs 随机采样的页面，最后把不属于引用这个类别的页面删了
* C4(15%)：与CCNet类似，主要区别在质量过滤是基于启发式的规则，如标点符号的存在，或者词数和句子数
* github(4.5%)：使用Google BigQuery里的公开github数据集，只用Apache、D和MIT证书的。低质判断是启发式规则，如字母数字占比、行的长度等，用正则删掉head等样式，最终以文件粒度进行去重。
* wikipedia(4.5%)：2022年6-8月的数据，包括20种语言
* Gutenberg and Books3(4.5%)：两个书籍数据集，对有90%以上内容重复的书籍做去重。
* Arxiv(2.5%)：拿原始的tex文件，删掉first section之前的东西，还有一些注释、宏
* Stack Exchange(2%)：高质量的问答网站，按答案的分数排序

![llama\_data](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-50c89c0cd6e79eb7de0a06c7d2c7b7385ffeb11c%2Fllama_data.png?alt=media)

tokenizer：BPE，使用sentencepiece的实现。将所有numbers切成单个数字，回退到字节去处理未知的utf8字符（fallback to bytes to decompose unknown UTF-8 characters）

总共有1.4T的token，对大部分训练数据，每个token在训练时只用了一次，除了维基和book大概用了两次。

附：gpt4说：当我们说"一个token只训练一次"，我们其实是在说在一个epoch（一个完整遍历训练集的过程）中，我们只遍历一次完整的数据集。如果一个特定的token在数据集中出现多次，那么在一个epoch中，这个token就会被用来训练模型多次。

![llama](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3d2608cb8fc0ee38a57cff6e91f73e24ce21458c%2Fllama_params.png?alt=media)

![一些大模型](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b5ca590085867c440b2a11f15e2435d9a51a1139%2FWechatIMG322.jpg?alt=media)

**网络结构**

&#x20;

* SwiGLU激活函数(PaLM)：取代ReLU，[Glu variants improve trans- former](https://arxiv.org/a/2002.05202)，把PaLM里的$$4d$$改了$$2/34d$$

说白了就是输入$$x$$，SwiGLU激活完是$$swish(w\_1(x)) \* w\_3(x)$$，其中swish又叫silu，是$$f(x)=x \cdot sigmoid(x)$$

然后再过一个$$w\_2$$，得到$$w\_2(swish(w\_1(x)) \* w\_3(x))$$就是最终的ffn输出

以下是transformers里的实现：<https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/modeling_llama.py>

```python
class LlamaMLP(nn.Module):
    def __init__(self, config):
        super().__init__()
        self.config = config
        self.hidden_size = config.hidden_size
        self.intermediate_size = config.intermediate_size
        self.gate_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
        self.up_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
        self.down_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=False)
        self.act_fn = ACT2FN[config.hidden_act] ## 默认是silu，即swish

    def forward(self, x):
        if self.config.pretraining_tp > 1:
            slice = self.intermediate_size // self.config.pretraining_tp
            gate_proj_slices = self.gate_proj.weight.split(slice, dim=0)
            up_proj_slices = self.up_proj.weight.split(slice, dim=0)
            down_proj_slices = self.down_proj.weight.split(slice, dim=1)

            gate_proj = torch.cat(
                [F.linear(x, gate_proj_slices[i]) 
                    for i in range(self.config.pretraining_tp)], dim=-1
            )
            up_proj = torch.cat([F.linear(x, up_proj_slices[i]) 
                for i in range(self.config.pretraining_tp)], dim=-1)

            intermediate_states = (self.act_fn(gate_proj) * up_proj).split(slice, dim=2)
            down_proj = [
                F.linear(intermediate_states[i], down_proj_slices[i]) 
                    for i in range(self.config.pretraining_tp)
            ]
            down_proj = sum(down_proj)
        else:
            down_proj = self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x))

        return down_proj
```

这个是llama官方代码的实现：<https://github.com/meta-llama/llama/blob/ef351e9cd9496c579bf9f2bb036ef11bdc5ca3d2/llama/model.py#L337-L345>

```python
class FeedForward(nn.Module):
    def __init__(
        self,
        dim: int,
        hidden_dim: int,
        multiple_of: int,
        ffn_dim_multiplier: Optional[float],
    ):
        """
        Initialize the FeedForward module.

        Args:
            dim (int): Input dimension.
            hidden_dim (int): Hidden dimension of the feedforward layer.
            multiple_of (int): Value to ensure hidden dimension is 
                a multiple of this value.
            ffn_dim_multiplier (float, optional): 
                Custom multiplier for hidden dimension. Defaults to None.

        Attributes:
            w1 (ColumnParallelLinear): Linear transformation for the first layer.
            w2 (RowParallelLinear): Linear transformation for the second layer.
            w3 (ColumnParallelLinear): Linear transformation for the third layer.

        """
        super().__init__()
        hidden_dim = int(2 * hidden_dim / 3)
        # custom dim factor multiplier
        if ffn_dim_multiplier is not None:
            hidden_dim = int(ffn_dim_multiplier * hidden_dim)
        hidden_dim = multiple_of * ((hidden_dim + multiple_of - 1) // multiple_of)

        self.w1 = ColumnParallelLinear(
            dim, hidden_dim, bias=False, gather_output=False, init_method=lambda x: x
        )
        self.w2 = RowParallelLinear(
            hidden_dim, dim, bias=False, input_is_parallel=True, init_method=lambda x: x
        )
        self.w3 = ColumnParallelLinear(
            dim, hidden_dim, bias=False, gather_output=False, init_method=lambda x: x
        )

    def forward(self, x):
        return self.w2(F.silu(self.w1(x)) * self.w3(x))
```

* Rotary embeddings(GPTNeo)：删掉原来的绝对位置编码，加上rotary positional embedding(RoPE)，网络的每一层都加，参考[Roformer: Enhanced transformer with rotary position embedding](https://arxiv.org/pdf/2104.09864.pdf)
* pre-normalization(gpt3)：提升训练**稳定性**，对每个子层的输入做norm，而非输出。此外，使用的是RMSNorm函数([Root mean square layer normalization](https://arxiv.org/a/1910.07467))取代标准的layer-norm
  * layernorm计算单个样本在单层中所有激活的均值和标准差，并使用这些统计数据来归一化该层的激活。
  * RMSnorm只计算激活的平方根均值（RMS），而不是标准差。这样做的一个好处是计算上更简单，因为它省去了计算均值的步骤，只关注激活的规模（scale）而非其准确的分布。$$\operatorname{RMSNorm}\left(x\_i\right)=\frac{x\_i}{\sqrt{\frac{1}{H} \sum\_{j=1}^H x\_j^2}+\epsilon}$$，其中$$H$$是该层的神经元个数，而且也不用求均值

```python
class RMSNorm(torch.nn.Module):
    def __init__(self, dim: int, eps: float = 1e-6):
        """
        Initialize the RMSNorm normalization layer.

        Args:
            dim (int): The dimension of the input tensor.
            eps (float, optional): A small value added to the denominator 
                for numerical stability. Default is 1e-6.

        Attributes:
            eps (float): A small value added to the denominator 
                for numerical stability.
            weight (nn.Parameter): Learnable scaling parameter.

        """
        super().__init__()
        self.eps = eps
        self.weight = nn.Parameter(torch.ones(dim))

    def _norm(self, x):
        """
        Apply the RMSNorm normalization to the input tensor.

        Args:
            x (torch.Tensor): The input tensor.

        Returns:
            torch.Tensor: The normalized tensor.

        """
        # rsqrt(x)= 1/ sqrt(x)
        return x * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)

    def forward(self, x):
        """
        Forward pass through the RMSNorm layer.

        Args:
            x (torch.Tensor): The input tensor.

        Returns:
            torch.Tensor: The output tensor after applying RMSNorm.

        """
        output = self._norm(x.float()).type_as(x)
        return output * self.weight
```

优化器：AdamW，cosine学习率schedule，最终学习率是最大学习率的10%。0.1的weight decay和1.0的gradient cliping，使用2000steps的warmup

**训练加速**

&#x20;

* 对causal multi-head attention加速：实现在<http://github.com/facebookresearch/xformers>中，降低内存使用和运行时间，参考[self-attention does not need $$o(n^2)$$ memory](https://arxiv.org/pdf/2112.05682.pdf)，以及[Flashattention: Fast and memory-efficient exact attention with io-awareness](https://arxiv.org/a/2205.14135)。思想是
  * 不存储attention weights
  * 不计算被mask的key/query得分
* 减少xxx：

#### LLaMA2

&#x20;

2023年7月，[Llama 2: Open Foundation and Fine-Tuned Chat Models](https://arxiv.org/pdf/2307.09288.pdf)

* 基于公开数据集预自监督地训练一个llama-2
* llama-2-chat模型:
  * sft后得到初始版本
  * 使用RLHF迭代地更新（拒绝采样+ppo）

![llama-2-chat](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-187e401e85ba9d50a1568c05d27ac4560c630014%2Fllama-2-chat.png?alt=media)

<https://zhuanlan.zhihu.com/p/636784644>

使用了GQA（grouped query attention）(参考[Gqa: Training generalized multi-query transformer models from multi-head checkpoints](https://arxiv.org/pdf/2305.13245.pdf))，在注意力机制中对**K/V进行参数共享**的方案，可以在**推理**过程中**减小KV缓存**。

![gqa](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a38048b0f5aecb6d1585308d1cc475e6da79385a%2Fgqa.png?alt=media)

#### LLaMA3

**原始LLaMa3**

&#x20;

2024年4月

[开源大模型Llama 3王者归来！最大底牌4000亿参数，性能直逼GPT-4](https://mp.weixin.qq.com/s/KCyL8WTzXutPQ_k0Vl9Vwg)

[Llama 3超大杯有何惊喜？Meta会一直开源吗？当初为何笃信元宇宙？扎克伯格新访谈回应一切](https://mp.weixin.qq.com/s/e2n4ttcT8raDU877t53GPQ)

[Llama 3细节公布！AI产品总监站台讲解：Llama系列超庞大生态系统](https://mp.weixin.qq.com/s/iDAlop_LNv9evZtfPMPyUg)

[OpenAI 前创始成员、特斯拉自动驾驶前负责人 Andrej Karpathy 发表 Meta Llama 3 笔记](https://mp.weixin.qq.com/s/701PSyi954QHz_mt6Ddn-Q)

[Karpathy称赞，从零实现LLaMa3项目爆火，半天1.5k star](https://mp.weixin.qq.com/s/1poG0tEjmym1456mmR66nQ)

[Karpathy点赞，这份报告教你如何用 LLaMa 3创建高质量网络数据集](https://mp.weixin.qq.com/s/luZGMG1RRUT4X_ckt8hsCQ)

<https://github.com/naklecha/llama3-from-scratch>

三个版本：8B 和 70B 参数的模型，还有一个 405B 参数的密集模型（还在训练之中，但已经在逼近GPT-4的领域，例如84.8 MMLU vs. 86.5 4Turbo），8B版本基本上与Llama-2的最大版本一样强大。

Llama 3的主要亮点：

* 训练语料：基于超过15T token训练，比Llama 2数据集(2T)的7倍还多：
  * **scaling law的新发现**：对于一个8B模型，Chinchilla的**计算最优点**将是训练约200B词汇(前面提到了10B模型，大概要205B的token来训练，以此类推)，所以这里**超出了75倍**，而且**还未收敛**。可见，我们经常使用的LLMs在训练上显著不足，可能是100-1000倍或更多，远未达到它们的收敛点。
* tokenizer：词汇数量从Llama 2的32K增加到Llama 3的128K，增加了4倍，拥有更多的词汇可以在长度上**更有效地压缩序列**。
* 上下文窗口：从Llama 2的4096和Llama 1的2048增加到了**8192**，相比GPT4的128k还差得很远
* 训练效率：比 Llama 2高3倍，做了很多工程优化；
* 模型结构：在Llama 2中，只在更大的模型使用了**分组查询注意力（GQA）**，但llama3的所有模型都使用了，包括最小的8B模型。
* 新能力范畴：Llama-2只能使用非常特定的工具，而 Llama-3 能使用好得多的工具，无需人工编程就能让其使用谷歌执行搜索，类似的功能还有编程和运行代码等。

<https://github.com/meta-llama/>

<https://github.com/meta-llama/llama3>

**多模态llama3**

&#x20;

[多模态 Llama-3 它来了 ！！\[全网首发微调教程\]](https://mp.weixin.qq.com/s/IFVIkVvMqeAL0lZF9OvRSA)

<https://github.com/InternLM/XTuner>

**中文llama3**

&#x20;

[首批中文版Llama3模型来了，解释成语、答弱智吧问题](https://mp.weixin.qq.com/s/ny0gBOxf4-tJiwjgp3o9HQ)

<https://github.com/CrazyBoyM/llama3-Chinese-chat>

<https://huggingface.co/shenzhi-wang/Llama3-8B-Chinese-Chat>

#### LLama3.1

[最强模型Llama 3.1 405B正式发布，扎克伯格：开源引领新时代](https://mp.weixin.qq.com/s/QUWumWsTF_Qq77tdlyCHdg)

[微调大模型，AMD MI300X就够了！跟着这篇博客微调Llama 3.1 405B，效果媲美H100](https://mp.weixin.qq.com/s/eJwg4GwH--9IVFedum_BnA)

[The Llama 3 Herd of Models](https://github.com/daiwk/collections/blob/master/assets/LLM/llama3.1.pdf)

[Llama3 92页技术报告中文全文详解](https://mp.weixin.qq.com/s/9Mnd1ass0XYUGW_UqDF8bw)

还开放了一个生态系统：

* model：<https://github.com/meta-llama/llama-models/tree/main/models/llama3_1>
* tool-chain：<https://github.com/meta-llama/llama-toolchain>
* agent-system：<https://github.com/meta-llama/llama-agentic-system>

**整体架构**

&#x20;

![multimodal-llama3.1](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-730dcf22567d56907a0cdeff8d3fd7b7b0153168%2Fmultimodal-llama3.1.png?alt=media)

有2个主要的stage：

* language model pre-training：用多语言的语料进行next token prediction
  * 使用超过15万亿(15T)个token训练Llama 3.1 405B，context window是8k tokens
  * 又加上一个continued pretraining stage，将context windows增加到128k tokens
* language model post-training：sft+dpo+新的能力（如工具使用，能提升代码和推理能力）+safety

(toread)

这里有一些总结：[关于post-training和一些思考](https://mp.weixin.qq.com/s/Bpd6_zq9kmTTeHxZ9WJJpw)

为了支持多模态，还加入了如下3个stage：

* 多模态encoder pre-training：
  * image encoder：在大量的img-text pair上训练，让模型能理解图片+描述
  * speech encoder：自监督，mask掉部分的speech输入，通过离散token表示来重建被mask的部分
* vision adapter training：
  * 训练一个adapter将pretrained的image encoder融入到pretrained language model里，adapter包括一系列的cross-attention层将image-encoder表示输入language model。在image-text pair上训练，对齐图文表示。训练时**更新image-encoder的参数**，但**不更新language model的参数。**
  * 基于这个image-encoder来训练一个video-adapter，用的是video-text数据，让模型能聚合多帧间的信息。视频侧的temporal aggregator是有一个perceiver的resampler
* speech adapter training：将speech encodings转成token表示，直接输入finetuned language model。在sft阶段，**adaper和encoder的参数联合更新**，但**不更新language model的参数**，还集成进了一个text-to-speech的系统。

**预训练**

&#x20;

在超过16,000个H100（80G HBM3）上训练，训练平台是[Meta open compute project, grand teton ai platform](https://engineering.fb.com/2022/10/18/open-source/ocp-summit-2022-grand-teton/)，基于[MAST: Global scheduling of ml training across geo-distributed datacenters at hyperscale](https://www.usenix.org/system/files/osdi24-choudhury.pdf)进行schedule

选择了decoder only transformer with minor adaptations，而**不是MOE**，以最大限度地**提高训练稳定性**。

* 使用GQA with 8 key-value heads，提升推理速度，在decoding时降低k-v cache的大小
* 使用attention mask，**让同一序列里的不同documents不计算self-attention**。在标准的pretraining中影响不大，但**对于超长序列的continued pre-training非常重要**
* 128K tokens的vocab，100k的tiktoken tokenizer+28k的额外token，更好地支持非英语的语言。相比llama2，每个token能压缩的字符3.17变成3.94，**压缩率更高了**，即同样计算量能读更多文本，同时也能提升下游任务效果。
* 把RoPE的base frequency超参**加大到500,000**，能更好地**支持更长contexts**，[Effective Long-Context Scaling of Foundation Models](https://aclanthology.org/2024.naacl-long.260.pdf)说这个值对32768长度的context很有效。

参数量：

|                           | 8B                          | 70B                         | 405B                        |
| ------------------------- | --------------------------- | --------------------------- | --------------------------- |
| **Layers**                | 32                          | 80                          | 126                         |
| **Model Dimension**       | 4,096                       | 8192                        | 16,384                      |
| **FFN Dimension**         | 6,144                       | 12,288                      | 20,480                      |
| **Attention Heads**       | 32                          | 64                          | 128                         |
| **Key/Value Heads**       | 8                           | 8                           | 8                           |
| **Peak Learning Rate**    | 3e-4                        | 1.5e-4                      | 8e-5                        |
| **Activation Function**   | SwiGLU                      | SwiGLU                      | SwiGLU                      |
| **Vocabulary Size**       | 128,000                     | 128,000                     | 128,000                     |
| **Positional Embeddings** | RoPE ($$\theta$$ = 500,000) | RoPE ($$\theta$$ = 500,000) | RoPE ($$\theta$$ = 500,000) |

**后训练**

&#x20;

采用iterative post-training procedure，即预训练后进行多轮对齐，每轮都使用sft、RS（拒绝采样）、直接偏好优化(DPO, Direct Preference Optimization)，能够为**每轮**创建**最高质量的合成数据**，并提高每项能力（capability）的性能。

* 使用**合成数据生成(synthetic data generation)来产生绝大多数SFT示例，并多次迭代**以在所有能力生成越来越高质量的合成数据。
* 采用了多种数据处理技术来过滤这些合成数据，达到最高质量，并可以**跨能力**来**扩展微调数据量**。

**推理**

&#x20;

从bf16量化为fp8

* 推理：对精度要求较高，对数值范围要求偏低，故一般用FP8-E4M3
* 训练：Gradients通常对精度损失不太敏感，但需要更高的范围(例如clip变小的时候，模型效果会变差，说明grad的range是比较大的)，故一般用FP8-E5M2

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8c57aa2c88692c1a11cb92687ba575e3accaaf05%2Ffp8.jpeg?alt=media)

* 离线量化： 在推理前，利用离线dump数据/训练依赖/权重本身，产生量化scale，保存在模型中，推理中直接使用。history
* 在线量化： 推理中，利用输入数据在线计算scale，需要在线统计a/b的amax，推理速度慢。就是current scale

#### LLama-3.1-Minitron

[英伟达玩转剪枝、蒸馏：把Llama 3.1 8B参数减半，性能同尺寸更强](https://mp.weixin.qq.com/s/zxW9EagxGJX-rS5loNLKXw)

[Compact Language Models via Pruning and Knowledge Distillation](https://www.arxiv.org/pdf/2407.14679)

NVIDIA用TensorRT-LLM优化了Llama 3.1 8B和Llama-3.1-Minitron 4B模型。

#### LLama-Nemotron

[英伟达253B开源新王登场，Llama 4三天变陪衬！直逼DeepSeek-R1成推理天花板](https://mp.weixin.qq.com/s/QbUTBKG9vrIVTA-6qII2gg)

[英伟达开源最新大模型Nemotron 70B后，只有OpenAI o1一个对手了](https://mp.weixin.qq.com/s/ebJkBkGAn8QS-_xVK__MMw)

[公开模型一切，优于DeepSeek-R1，英伟达开源Llama-Nemotron家族](https://mp.weixin.qq.com/s/Ofw7l6XPNNinXvFReGI3vw)

[Llama-Nemotron: Efficient Reasoning Models](https://arxiv.org/pdf/2505.00949)

<https://github.com/NVIDIA/NeMo-Aligner/tree/llama-nemotron-dev>

<https://github.com/NVIDIA/NeMo>

<https://huggingface.co/collections/nvidia/llama-nemotron-67d92346030a2691293f200b>

post training的数据集：

<https://huggingface.co/datasets/nvidia/Llama-Nemotron-Post-Training-Dataset>

开源了LN-Nano（8B）、LN-Super（49B）与LN-Ultra（253B），还有独立变体LN-UltraLong（8B，支持超长上下文）。

**构建面向推理优化的模型**

&#x20;

LN-Super和LN-Ultra通过Puzzle框架实现高效推理优化。Puzzle是一个神经网络架构搜索（Neural Architecture Search, NAS）框架，能够在真实部署约束条件下，将大型语言模型转化为面向硬件高效的变体([Puzzle: Distillation-Based NAS for Inference-Optimized LLMs](https://arxiv.org/a/2411.19146))

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e5ebba1587b03a0661f45c417ae80cca8b217057%2Fllama-nemotron-puzzle.png?alt=media)

以Llama 3 Instruct模型为起点（LN-Super(49B)基于Llama3.3-70B-Instruct，LN-Ultra(253B)基于Llama 3.1-405B-Instruct），Puzzle通过逐模块局部蒸馏（block-wise local distillation）方法构建可替代的Transformer模块库。每个模块独立训练且可**并行处理**，允许每个替代模块在**精度与效率之间进行权衡**（accuracy-efficiency tradeoff），模块变体主要包括以下几种类型：

* **移除注意力机制（Attention removal）**：部分模块**完全省略注意力机制**，从而显著减少计算开销和KV cache内存占用。
* **可变FFN维度（Variable FFN dimensions）**：通过调整**FFN的中间维度**，在不同粒度下实现模型压缩（如将隐藏层维度压缩至原始的87%、75%、50%，甚至低至 10%）。

尽管Puzzle同样支持其他结构替换方式（如多GQA中不同的kv head数、线性注意力替代方案、以及不执行操作的替换模块），但实际评估结果表明，在优化LN-Super和LN-Ultra两个模型的总体吞吐量与内存节省方面，最有效的技术仍是移除注意力机制与FFN压缩。

在模块库构建完成后，Puzzle通过逐层选取模块的方式组装完整模型。模块选择过程由**整数混合规划**（Mixed-Integer Programming, MIP）**求解器**控制，在给定的约束条件下（如硬件兼容性、最大推理延迟、总内存预算或指定推理吞吐量）确定效率最优的模块配置。

由于每一层支持多个具有不同精确度–效率权衡方案的模块变体，Puzzle允许用户精确定位至任何位于精度-效率帕累托前沿（Pareto frontier）上的模型配置点。例如，Puzzle 可生成满足特定智能体系统（agentic systems）或部署流程所需约束（如内存不可超出上限或端到端响应时间严格受限）的模型。

**用FFN融合实现纵向压缩（Vertical Compression with FFN Fusion）**：针对LN-Ultra模型，引入了一种额外的压缩技术——FFN融合（FFN Fusion），该方法旨在降低模型的序列深度，并进一步缩短推理延迟。利用Puzzle移除部分注意力层后的结构特性：在这种结构下，模型中经常会出现**连续的FFN模块序列**。FFN Fusion会识别出这类序列，并将其替换为**更少但更宽的FFN层**，这些宽层可并行执行，从而减少序列处理步骤的数量，同时保留模型的表达能力，还能显著提升计算资源的利用率，特别是在多GPU环境中，可以有效降低跨层通信带来的开销。

在NAS之后，进行了continue pretraining(CPT)：

* LN-Super：使用([Puzzle: Distillation-Based NAS for Inference-Optimized LLMs](https://arxiv.org/a/2411.19146)里的Distillation Mix数据集，以知识蒸馏目标函数训练了400亿个Token
* LN-Ultra：首先使用相同的蒸馏数据集进行了650亿Token的蒸馏训练，随后在Nemotron-H第四阶段预训练数据集上进行了额外880亿Token的持续预训练。

LN-Ultra不仅实现了与基准模型Llama 3.1-405B-Instruct相当的性能，还在多个关键基准测试上取得超越。说明**即使进行激进的架构优化，也可通过短周期的蒸馏与预训练恢复并提升模型性能。**

**合成数据**

&#x20;

设计了「detailed thinking on/off」指令机制，在合成数据中**显式标记是否需要展开详细推理过程**，引导模型在训练中学习何时进行逐步思考、展示推理链条，何时直接给出简明答案。指令为「on」时，模型输出完整的中间推理过程并展示解题思路；指令为「off」时，模型仅呈现最终结果。

拿deepseek-r1、llama-4等作为teacher来生产数据，产出的数据总共33,011,757条，里面66%是数学的，30%是代码的（这两部分里都是reasoning off占大头），剩下的是科学和instruction following

**SFT**

&#x20;

基于合成数据来进行SFT，不同大小的student用的seq\_len、epoch数不太一样，也有一些小trick，详见原文

**推理能力强化学习**

&#x20;

只蒸馏的话，student很难超越teacher，所以需要强化学习，考虑到资源问题，只对LN-Ultra搞了GRPO

两个reward：

* 准确率奖励（Accuracy rewards）：每个训练样本提供标准答案（数字、句子或段落），使用Llama-3.3-70B-Instruct模型判定策略模型响应是否与标准答案一致。
* 格式奖励（Format rewards）：和DeepSeek一致，在detailed thinking on时，需将推理过程置于`<think></think>`标签之中；而在off时，确保不包含思考标签。

一些trick：

* 样本过滤：由LN-Super为每道题生成8个独立回答，计算通过率，并过滤通过率大于等于0.75的样本，提升总体训练数据难度。
* 课程学习（curriculum learning）：渐进式批处理策略（progressive batching），使用预计算通过率作为样本难度指标，在固定batch size下，动态计算每个batch的目标难度分布。该分布以高斯函数建模，从早期批次集中在高通过率（简单样本），逐步过渡至后期批次的低通过率（高难度样本）。每个batch中，样本按目标分布随机分配，并根据不同通过率池中剩余样本量进行容量填充。**确保样本难度在batch层面逐步递进，同时batch内部保持随机性。**
* 基于fp8的生成阶段：修改vLLM，支持bf16转fp8，然后用fp8做gemm

**用于偏好优化的强化学习**

&#x20;

* 指令跟随：在前面的科学推理任务的强化学习之后，对LN-Super和LN-Ultra再进行短期的强化学习，提升指令跟随能力。参考[Instruction-following evaluation for large language models](https://arxiv.org/a/2311.07911)，生成包含1至10条详细指令的合成提示词，用RLOO（[Back to basics: Revisiting reinforce style optimization for learning from human feedback in llms](https://arxiv.org/a/2402.14740)）在batch128跑了120个steps，用自定义指令跟随验证器作为奖励函数。发现能同时提升指令跟随任务和推理类任务的效果。
* RLHF：增强模型的通用协助能力（helpfulness）与多轮聊天能力
  * LN-Super：用iterative online RPO（[ Reward-aware preference optimization: A unified mathematical framework for model alignment](https://arxiv.org/a/2502.00203)）来最大化HelpSteer2数据集上的Llama-3.1-Nemotron-70B-Reward
  * LN-Ultra：一样的方法，只是换成了GRPO
  * LN-Nano：2轮的offline RPO
    * 第一轮：用混合了reasoning和非reasoning的数据，来提升reasoning控制能力
    * 第二轮：用使用当前正在训练（优化）的策略生成的数据（on-policy的数据），来提升指令遵循能力

#### Llama-3.2

[刚刚，Llama 3.2 来了！支持图像推理，还有可在手机上运行的版本](https://mp.weixin.qq.com/s/3JP9UgfXNMlI5jaYHyekYA)

Llama 3.2

* 最大的两个模型11B和90B：都支持图像推理，包括文档级的图表理解、图像描述和视觉定位任务，比如直接根据自然语言描述定位图像中的事物。
* 轻量级的1B和3B：都是纯文本模型，但也具备多语言文本生成和工具调用能力。

[Sebastian Raschka最新博客：从头开始，用Llama 2构建Llama 3.2](https://mp.weixin.qq.com/s/RuTRkJPeEP1hqWevxn9h6Q)

#### Llama-3.3

[新版Llama 3 70B反超405B！Meta开卷后训练，谷歌马斯克都来抢镜](https://mp.weixin.qq.com/s/6Iv4VzMlYrkmSsAo_IRGTg)

Llama 3.3能用70B实现405B的效果，主要是“运用了后训练技术的最新进展”，其中包括在线偏好优化（online preference optimization）。

<https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct>

<https://github.com/meta-llama/llama-models/blob/main/models/llama3_3/MODEL_CARD.md>

#### Llama-4

[Meta深夜开源Llama 4！首次采用MoE，惊人千万token上下文，竞技场超越DeepSeek](https://mp.weixin.qq.com/s/Kqk36zfBrZvu6IpCp2lBbw)

<https://ai.meta.com/blog/llama-4-multimodal-intelligence/>

| 模型               | 结构                 | 参数量  | 特点                  |
| ---------------- | ------------------ | ---- | ------------------- |
| Llama 4 Behemoth | 多模态MoE，288B激活，16专家 | 2T   | 还没训完，暂未开源           |
| Llama 4 Maverick | 多模态MoE，17B激活，128专家 | 400B | 推理+编程与deepseek v3相当 |
| Llama 4 Scout    | 多模态MoE，17B激活，16专家  | 109B | 10M上下文窗口            |

* 架构：
  * iRoPE架构：使用无位置嵌入的交错注意力层（interleaved attention layers），并通过推理时的温度缩放([Scalable-Softmax Is Superior for Attention](https://arxiv.org/pdf/2501.19399))来增强长上下文泛化能力。
  * 原生多模态设计：通过早期融合将文本和视觉token无缝整合到统一的模型骨干中，能够使用大量未标记的文本、图像和视频数据对模型进行联合预训练。此外，还改进了Llama 4中的视觉编码器，基于MetaCLIP，以更好地使编码器适应LLM。
* 训练：
  * MetaP：能够可靠地设置模型超参数，例如每层的学习率和初始化规模。选定的超参数在不同批量大小、模型宽度、深度和训练 token 值之间具有良好的迁移性。
  * 数据：200种语言的数据，比llama3多了10倍的多语言token；训练所用的数据混合总量超过30万亿（30T）token，是Llama 3预训练数据混合量的两倍多，涵盖了多样化的文本、图像和视频数据集。
  * fp8训练：兼具质量并确保高FLOPs利用率，使用FP8和32K GPU预训练Llama 4 Behemoth模型时，实现了每GPU有390 TFLOPs。
* mid-training：
  * 利用专门的数据集扩展长上下文，使得Llama 4 Scout具备业界领先的1000万(10M)输入上下文长度。
* post-training：
  * 轻量级监督微调（SFT）> 在线强化学习（RL）> 轻量级直接偏好优化（DPO）。发现SFT和DPO可能会过度约束模型，限制在线RL阶段的探索能力:
    * 轻量级监督微调（SFT）：Meta 使用Llama模型作为评判，移除了超过50%的标记为简单的数据，并在剩余较难的数据集上进行SFT。剪枝比例：2T的模型95%，较小模型50%
    * RL：
      * 通过policy model进行pass\@k分析，采样难度较高的prompt，并构建难度逐渐增加的训练课程
      * 训练过程中动态过滤掉零advantage的prompt，并构建包含多种能力的混合prompt训练batch
      * 从多种系统指令中采样，确保模型在推理和编码任务中保持指令遵循能力(这个可能讲的是dpo？)
    * 轻量级直接偏好优化（DPO）：处理与模型响应质量相关的边缘情况，有效实现了模型智能与对话能力的良好平衡。
* 新的框架：
  * 现有的分布式训练框架为了将所有模型加载到内存中而牺牲了计算内存，Meta的新基础设施能够灵活地将不同模型分配到不同的GPU上，并根据计算速度在多个模型之间平衡资源。
  * 对MoE并行化的设计进行了优化
  * 完全异步的在线强化学习训练框架

#### Alpaca

[Alpaca: A Strong, Replicable Instruction-Following Model](https://crfm.stanford.edu/2023/03/13/alpaca.html?trk=cndc-detail)

Stanford的羊驼（Alpaca）模型，有70亿（7b）参数，**没有使用RLHF**，而是使用**监督学习**的方法，参考[Self-Instruct: Aligning Language Model with Self Generated Instructions](https://arxiv.org/pdf/2212.10560.pdf)（代码<https://github.com/yizhongw/self-instruct>）

数据集是通过查询基于GPT-3的text-davinci-003模型的结果，得到的52k的指令-输出对（instruction-output pairs）。

因此，Alpaca本质上使用的是一种弱监督（weakly supervised）或以知识蒸馏（knowledge-distillation-flavored）为主的微调，即“**用 LLM 来训练 LLM**”。

![Alpaca](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-502afc84a90688cc780fb651f40b9f8b36a12fb0%2Falpaca.jpeg?alt=media)

<https://github.com/tatsu-lab/stanford_alpaca>

#### Vicuna

通过ShareGPT收集的用户对话数据，对llama进行finetune得到的13B模型。效果接近chatgpt的92%，而且训练消耗比较低，大概只要300美元。

#### Guanaco

&#x20;

[QLoRA: Efficient Finetuning of Quantized LLMs](https://arxiv.org/pdf/2305.14314.pdf)也是对llama进行微调，使用了QLoRA，能够在一台48G的GPU上微调65B的模型。只需要在单台GPU上finetune 24小时就能达到99.3%的chatgpt的效果。

<https://github.com/artidoro/qlora>

<https://github.com/TimDettmers/bitsandbytes>

QLoRA将一个固定的4 bit量化的预训练权重转成low Rank Adapters来更新梯度

#### Koala

&#x20;

[Koala: A dialogue model for academic research](https://bair.berkeley.edu/blog/2023/04/03/koala/)

使用用户与闭源大模型交互的用户输入和模型返回数据进行训练

#### Mistral

&#x20;

[Mistral 7b](https://arxiv.org/pdf/2310.06825.pdf)

7B参数比最好的13B模型（llama-2-13B）要更好，而且比llama-34B在reasoning、数学、代码生成都更好。

* 使用**grouped-query attention**来做更快的infer
* 使用**滑动窗口attention**来用更低的infer消耗来高效地处理**任意长度的序列**。

<https://mistral.ai/news/mixtral-of-experts/> 提出了moe的8x7b

[Mixtral of Experts](https://arxiv.org/pdf/2401.04088.pdf)

[Mixtral 8x7B(Mistral MoE) 模型解析](https://mp.weixin.qq.com/s/-5yp0KU6_vkpWmY9wROWbg)

[Mistral开源8X22B大模型，OpenAI更新GPT-4 Turbo视觉，都在欺负谷歌](https://mp.weixin.qq.com/s/hf4uq3yrHxTGhQuzl61Imw)

<https://huggingface.co/mistral-community/Mixtral-8x22B-v0.1>

[Mistral AI两连发：7B数学推理专用、Mamba2架构代码大模型](https://mp.weixin.qq.com/s/fFB0A0vv_2Deb0rWd4tagw)

mathtral：<https://huggingface.co/mistralai/mathstral-7B-v0.1>

codestral-mamba: <https://huggingface.co/mistralai/mamba-codestral-7B-v0.1>，基于mamba2，可以直接用trt-llm启动

[准狙击Llama 3.1？Mistral AI开源Large 2，123B媲美Llama 405B](https://mp.weixin.qq.com/s/6_d_e6DlQpyONdWxd8EZvA)

Mistral AI 基于此前Codestral 22B和Codestral Mamba的经验，在很大一部分代码上训练了 Mistral Large 2。其表现远远优于上一代的Mistral Large，并且与GPT-4o、Claude 3 Opus和Llama 3 405B等顶尖模型相当。

<https://huggingface.co/mistralai/Mistral-Large-Instruct-2407>

[​Mistral首个多模态模型Pixtral 12B来了！还是直接放出24GB磁力链接](https://mp.weixin.qq.com/s/c_fmpkuimmEtY6pD9f_bZQ)

<https://huggingface.co/mistral-community/pixtral-12b-240910>

[发力了，Mistral对标ChatGPT全面升级le Chat，还祭出超大杯多模态模型](https://mp.weixin.qq.com/s/sABAaxKNGM-odULaM0-_Zg)

[最强代码模型刷新：Mistral新品上线即登顶，上下文窗口增至256k](https://mp.weixin.qq.com/s/BaZhEs7CV8-kQzdrkcMU2A)

[单个4090就能跑，Mistral开源多模态小模型，开发者：用来构建推理模型足够香](https://mp.weixin.qq.com/s/t173XAigACpw9NWPePhUUQ)

#### phi-3

[微软发布Phi-3，性能超Llama-3，可手机端运行](https://mp.weixin.qq.com/s/kb_gfaYkXiW_cR22K2bX9g)

[Phi-3 Technical Report: A Highly Capable Language Model Locally on Your Phone](https://arxiv.org/pdf/2404.14219)

#### phi-4

[微软首个多模态Phi-4问世，56亿参数秒杀GPT-4o！LoRA华人大佬带队](https://mp.weixin.qq.com/s/UQK5b2-ZobnQJwr73p5U8Q)

<https://huggingface.co/microsoft/Phi-4-multimodal-instruct>

### PaLM系列

#### PaLM

&#x20;

2022年4月提出了第一个PaLM：[Palm: Scaling language modeling with pathways](https://arxiv.org/pdf/2204.02311.pdf)，直到2023年3月还是private的。是一个540B(5400亿)参数的模型，在包含了780B的tokens的高质量数据集上预训练。使用Pathways的6144块TPU v4进行训练。

#### U-PaLM

&#x20;

[Transcending scaling laws with 0.1% extra compute](https://arxiv.org/pdf/2210.11399.pdf)提出了8B，62B和540B的U-PaLM模型，用**UL2R**来对PaLM进行继续训练，用的是UL2的**mixture-of-denoiser objective**([UL2: Unifying Language Learning Paradigms](https://arxiv.org/pdf/2205.05131.pdf))

#### Flan-PaLM

&#x20;

Flan-PaLM（[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)）是instrunction-finetuned版本的U-PaLM。使用了更多的任务、更大的模型，以及CoT数据。使用了473个数据集，146类的task，总共1836个task。

![flan-palm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7eee5c79b6a6950a7f7d7d9477b2183d98eaf585%2Fflan-palm.png?alt=media)

<https://huggingface.co/google/flan-t5-xl>

#### PaLM-2

&#x20;

[PaLM 2 Technical Report](https://arxiv.org/pdf/2305.10403.pdf)是一个更计算高效型的LLM，有更好的多语种和reasoning能力，在很多任务上都比PaLM好，并且在infer上比PaLM要更快更高效。

#### Med-PaLM

&#x20;

Nature的[Large language models encode clinical knowledge](https://www.nature.com/articles/s41586-023-06291-2)提出了Med-PaLM，在PaLM上用parameter-efficient方法进行instruction prompt tuning，使用少量的典型范例（exemplars）让LLM对齐到新领域。

Med-PaLM2([Towards expert- level medical question answering with large language models](https://arxiv.org/pdf/2305.09617.pdf))通过med-domain的finetuning和ensemble refinement prompting，效果比Med-PaLM要好。

### 其他LLM

#### FLAN

&#x20;

[Finetuned language models are zero-shot learners](https://arxiv.org/pdf/2109.01652.pdf)

通过instruction tuning，大模型能很好地提升在没见过任务上的zero-shot能力。对一个137B的预训练模型在60个NLP数据集上使用instruction template进行instruction tuning。

![flan](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3b9c3ae83a0fec805fc9a2bcdb92d2af80dfb65c%2Fflan.png?alt=media)

一些instruction template：

![flan-instruction-template](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-84ac8cb442ebb8113af453dee8938464c8542ef7%2Fflan-instruction-template.png?alt=media)

<https://github.com/google-research/flan>

#### Gopher

&#x20;

[Scaling language models: Methods, analysis & insights from training gopher](https://arxiv.org/pdf/2112.11446.pdf)基于152个多样的任务，对比了从44M到208B（Gopher）的不同transformer，发现Gopher在大多数任务上均达到sota：

| Model       | Layers | Number Heads | Key/Value Size | d\_model | Max LR                 | Batch Size |
| ----------- | ------ | ------------ | -------------- | -------- | ---------------------- | ---------- |
| 44M         | 8      | 16           | 32             | 512      | $$6 \times 10^{-4}$$   | 0.25M      |
| 117M        | 12     | 12           | 64             | 768      | $$6 \times 10^{-4}$$   | 0.25M      |
| 417M        | 12     | 12           | 128            | 1,536    | $$2 \times 10^{-4}$$   | 0.25M      |
| 1.4B        | 24     | 16           | 128            | 2,048    | $$2 \times 10^{-4}$$   | 0.25M      |
| 7.1B        | 32     | 32           | 128            | 4,096    | $$1.2 \times 10^{-4}$$ | 2M         |
| Gopher 280B | 80     | 128          | 128            | 16,384   | $$4 \times 10^{-5}$$   | 3M -> 6M   |

#### T0

&#x20;

[Multitask Prompted Training Enables Zero-Shot Task Generalization](https://arxiv.org/pdf/2110.08207)设计了一个系统，将任意nlp任务映射成一个人类可读的prompt格式。训练了一个encoder-decoder的T0模型，输入文本，输出文本，在混合数据集上进行多任务学习。

#### RETRO

&#x20;

[参数量仅为4%，性能媲美GPT-3：开发者图解DeepMind的RETRO](https://baijiahao.baidu.com/s?id=1721015293574115195\&wfr=spider\&for=pc)

<http://jalammar.github.io/illustrated-retrieval-transformer/>

[Improving language models by retrieving from trillions of tokens](https://arxiv.org/a/2112.04426)

Retrieval Enhanced Transformer(Retro)基于与preceding(前述) tokens的相似度，从大的语料库里检索出文档段（document chunks）作为条件，增强了自回归模型的能力。通过少25%的参数，在Pile数据集上达到了与gpt3和Jurassic-1相当的效果

![retro](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8f9910010545c8cdbc621c829e2b492d67c03e40%2Fretro.png?alt=media)

* 左图：
  * 输入一个长度为12的序列，每4个token一个chunk，切成3个chunk
  * 每个chunk通过freezed的bert去语料库中拿2个相似neighbors出来，每个neighbor过bert得到向量
  * 邻居作为k和v，原来的3个chunk作为k，做attention(CCA, chunked cross attention)
* 右图：CCA的结构
  * 保证了因果性，即chunk1的邻居只对chunk1的last token以及chunk2的所有token有影响

#### GLaM

&#x20;

[Glam: Efficient scaling of language models with mixture-of-experts](https://arxiv.org/pdf/2112.06905)提出了Generalist Language Model(GLaM)，用稀疏激活的MOE架构，同时能scale模型容量，也能相比dense更可观地降低训练成本。最大的模型有1.2T参数，是gpt3的7倍。但只需要GPT3的1/3的能量来训练，而且在infer时也只有一半的flops，且在29个NLP任务上都有更好的0/1/few shot效果。

![Glam](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-99a5ef13b12046389beffe0cfe680be1db8ee726%2Fglam.png?alt=media)

如图，2 in 64的结构，每个token只会取64个experts里的top 2相关的expert，对这两个的输出加权平均输入给后面的层

#### LaMDA

&#x20;

[Lamda: Language models for dialog applications](https://arxiv.org/pdf/2201.08239)，有137B的参数，在1.5T的公开对话数据和互联网文本上pretrain，用标注数据微调，以及让模型能够咨询（consult）外部知识源能够让模型在安全性和factual grounding上有很好的改进。

#### OPT

&#x20;

[OPT: Open Pre-trained Transformer Language Models](https://arxiv.org/pdf/2205.01068)提出了从125M到175B的预训练decoder-only模型

#### Chinchilla

&#x20;

#### Galactica

&#x20;

#### CodeGen

&#x20;

#### AlexaTM

&#x20;

#### Sparrow

&#x20;

#### MoD

&#x20;

#### BLOOM

&#x20;

#### GLM

&#x20;

ACL22 [GLM: General Language Model Pretraining with Autoregressive Blank Infilling](https://arxiv.org/a/2103.10360)

iclr23 [GLM-130B: An Open Bilingual Pre-trained Model](https://arxiv.org/a/2210.02414)

#### GLM-4

[GLM-4开源版本终于来了：超越Llama3，多模态比肩GPT4V，MaaS平台也大升级](https://mp.weixin.qq.com/s/MqxiXeYs8dg_lynsUIR0Tg)

<https://github.com/THUDM/GLM-4>

#### Pythia

&#x20;

#### Orca

&#x20;

#### StarCoder

&#x20;

#### KOSMOS

&#x20;

#### Claude

&#x20;

[全球最强大模型一夜易主，GPT-4时代终结！Claude 3提前狙击GPT-5，3秒读懂万字论文理解力接近人类](https://mp.weixin.qq.com/s/WqQWS-hiQ1i1Ve6IPH3djw)

[The Claude 3 Model Family: Opus, Sonnet, Haiku](https://www-cdn.anthropic.com/de8ba9b01c9ab7cbabf5c33b80b7bbc618857627/Model_Card_Claude_3.pdf)

* 对齐：使用Constitutional AI([Constitutional AI: Harmlessness from AI Feedback](https://arxiv.org/pdf/2212.08073.pdf))， explicitly specifying rules and principles based on sources like the UN Declaration of Human Rights.
* 基于Collective Constitutional AI([Collective Constitutional AI: Aligning a Language Model with Public Input](https://www.anthropic.com/news/collective-constitutional-ai-aligning-a-language-model-with-public-input))，added an additional principle to Claude’s constitution to encourage respect for disability rights
* 公开了部分RHLF数据：<https://huggingface.co/datasets/Anthropic/hh-rlhf>，对应的论文是[Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback](https://arxiv.org/pdf/2204.05862.pdf)

[力压GPT-4o！新王Claude 3.5 Sonnet来了，直接免费可用](https://mp.weixin.qq.com/s/HnQ7D4iDVgWteZZdTJoadg)

[大模型代肝，自动刷《崩铁》升级材料，Claude操纵计算机还能这么用！](https://mp.weixin.qq.com/s/F8CX6_VWebWLy26NeRNQsw)

[The Dawn of GUI Agent: A Preliminary Case Study with Claude 3.5 Computer Use](https://arxiv.org/pdf/2411.10323)

<https://github.com/showlab/computer_use_ootb>

#### Octopus

[超越GPT-4，斯坦福团队手机可跑的大模型火了，一夜下载量超2k](https://mp.weixin.qq.com/s/qnFZOPLpdRxW42_cLUcImA)

[Octopus v2: On-device language model for super agent](https://arxiv.org/pdf/2404.01744.pdf)

<https://huggingface.co/NexaAIDev/Octopus-v2>

[参数量不到10亿的OctopusV3，如何媲美GPT-4V和GPT-4？](https://mp.weixin.qq.com/s/mUpX-nvo221WVii-gnjUmQ)

[Octopus v3: Technical Report for On-device Sub-billion Multimodal AI Agent](https://arxiv.org/pdf/2404.11459.pdf)

[Octopus v4: Graph of language models](https://arxiv.org/pdf/2404.19296)

#### Cohere Command R+

[开源模型打败GPT-4！LLM竞技场最新战报，Cohere Command R+上线](https://mp.weixin.qq.com/s/uUeGQFWel5NLfFRFFF8w9g)

<https://huggingface.co/CohereForAI/c4ai-command-r-plus>

<https://huggingface.co/CohereForAI/c4ai-command-r-plus-4bit>

1040亿的参数量，相比于Grok-1（3140亿）还差了一些，但Command R+并非Grok那种MoE架构，所以这1040亿参数是实打实的完全用于推理，而Grok-1的活跃参数为860亿。相比commend R：

* 高级检索增强生成（RAG）与引用以减少幻觉
* 10种主要语言的多语言覆盖，支持全球业务运营
* 工具的运用以自动化复杂的业务流程

[明确了：文本数据中加点代码，训练出的大模型更强、更通用](https://mp.weixin.qq.com/s/3Ks72bIGZrNNUukqaHLSQg)

[To Code, or Not To Code? Exploring Impact of Code in Pre-training](https://arxiv.org/a/2408.10914)

#### CT-LLM：以中文为中心的LLM

[Chinese Tiny LLM: Pretraining a Chinese-Centric Large Language Model](https://arxiv.org/pdf/2404.04167.pdf)

当前，绝大多数LLM基本上都是以英文语料库训练得到的，然后经过SFT来匹配不同的语种。本文作者考虑以中文为基础的预训练模型是否可以激活对其它语言的能力。

作者从头开始训练中文大模型，在训练过程中「主要纳入中文文本数据」，最终作者得到了一个2B规模的中文Tiny LLM（CT-LLM）。结果表明，该模型在中文任务上表现出色，且通过SFT也能很好的支持英文。

#### OpenELM

[苹果卷开源大模型，公开代码、权重、数据集、训练全过程，OpenELM亮相](https://mp.weixin.qq.com/s/uwDoKG2Q9-w37ogewBJTrQ)

[OpenELM: An Efficient Language Model Family with Open-source Training and Inference Framework](https://arxiv.org/pdf/2404.14619.pdf)

<https://github.com/apple/corenet>

[超强Siri即将到来！苹果10篇重磅AI研究全总结，iOS 18关键一瞥](https://mp.weixin.qq.com/s/zQu0BtDYG-XAAX87i4MGIA)

[苹果智能背后模型公布：3B模型优于Gemma-7B，服务器模型媲美GPT-3.5-Turbo](https://mp.weixin.qq.com/s/xkZrD_8zsmVfYYohH7ucUw)

#### Arctic

[仅需Llama3 1/17的训练成本，Snowflake开源128x3B MoE模型](https://mp.weixin.qq.com/s/0mqx1xkyhOXDGpbu42d_5g)

[全球最大开源模型再刷爆纪录！4800亿参数MoE击败Llama 3、Mixtral](https://mp.weixin.qq.com/s/W30QvvtWtYB6mp47Z8NA)

<https://huggingface.co/Snowflake/snowflake-arctic-instruct>

#### FALCON 2

[时隔一年Falcon回归！110亿参数5.5万亿token，性能超越Llama 3](https://mp.weixin.qq.com/s/CZNVl_GmYm_aPidMJrRHUg)

#### MiniCPM

**MOEfication**

[大模型隐藏玩家上桌：DeepSeek 向左，面壁向右](https://mp.weixin.qq.com/s/DrtUv-7fMh8NqdaSHHJ8uQ)

[MoEfication：Transformer Feed-forward layers are Mixtures of Experts](https://arxiv.org/a/2110.01786)

**MiniCPM-Llama3-V**

[登顶Top2！MiniCPM-V 8B新版本：GPT-4V水准小钢炮，8G显存，4070轻松推理！](https://mp.weixin.qq.com/s/TQVHJlZDExD3nMPRsqa_5w)

[可信度超越GPT-4V，清华&面壁揭秘「小钢炮」模型背后的高效对齐技术](https://mp.weixin.qq.com/s/7otafJLrrj4jlZIltQxcjQ)

[RLAIF-V: Aligning MLLMs through Open-Source AI Feedback for Super GPT-4V Trustworthiness](https://arxiv.org/pdf/2405.17220)

<https://github.com/RLHF-V/RLAIF-V>

**MiniCPM 3.0**

[小模型杀疯了！仅4B参数性能超GPT-3.5！无限长文本性能超Kimi](https://mp.weixin.qq.com/s/qJM9OTDHS3pJB9ozFuRP1g)

[MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies](https://arxiv.org/pdf/2404.06395)

#### DCFormer

[彩云科技DCFormer大模型发布，效率是Transformer的两倍！](https://zhuanlan.zhihu.com/p/699582521)

[Improving Transformers with Dynamically Composable Multi-Head Attention](https://arxiv.org/pdf/2405.08553)

<https://github.com/Caiyun-AI/DCFormer>

#### hunyuan

[腾讯混元又来开源，一出手就是最大MoE大模型](https://mp.weixin.qq.com/s/GVFhlelNgrIDnzIIyW3yXg)

[Hunyuan-Large: An Open-Source MoE Model with 52 Billion Activated Parameters by Tencent](https://arxiv.org/a/2411.02265)

<https://github.com/Tencent/Hunyuan-Large>

<https://llm.hunyuan.tencent.com/>

#### hunyuan turbo-s

<https://github.com/Tencent/llm.hunyuan.turbo-s>

#### 阶跃星辰

[在「最难LLM评测榜单」上，阶跃万亿参数模型拿下中国第一](https://mp.weixin.qq.com/s/rGv2r_-owZ3jIx3IPk6XfQ)

[六小虎「阶跃星辰」疯狂了！连发6款大模型，多模态霸榜第一](https://mp.weixin.qq.com/s/qcFGKQlX6OnMoiMPJCze_w)

#### Tülu 3(基于llama3.1)

(toread)

[这才是真开源模型！公开「后训练」一切，性能超越Llama 3.1 Instruct](https://mp.weixin.qq.com/s/sTtBkVkqy0CQtpzcR6SN-A)

[TÜLU 3: Pushing Frontiers in Open Language Model Post-Training](https://arxiv.org/pdf/2411.15124)

<https://github.com/allenai/open-instruct>

提出了具有可验证奖励的强化学习(Reinforcement Learning with Verifiable Rewards, RLVR)，可能和openai的rft有关系

<https://huggingface.co/allenai/Llama-3.1-Tulu-3-70B>

#### baichuan

[百川新模型超GPT-4o近20%，首创自约束训练方案突破瓶颈，主打「领域增强」](https://mp.weixin.qq.com/s/7oupuln3BQHPa7zpfGdMXQ)

Baichuan4-Finance

评测benchmark：<https://github.com/FLAME-ruc/FLAME/tree/main>

### post training的一些总结

[工业界主流大语言模型后训练(Post-Training)技术总结](https://mp.weixin.qq.com/s/sm2HEKJaeIUy9yXZCj0L-g)

[长文 | 大模型Post-Training总结](https://mp.weixin.qq.com/s/mL3Zc85zoHCjNOaTX2icTA)

### 小模型

[权重、代码、数据集全开源，性能超越Mistral-7B，苹果小模型来了](https://mp.weixin.qq.com/s/M58y8F5WeOH6i5nNKhtHbw)

[DataComp-LM: In search of the next generation of training sets for language models](https://arxiv.org/pdf/2406.11794)

<https://huggingface.co/apple/DCLM-7B>

[小模型卷起来了：Mistral联合英伟达开源12B小模型，128k上下文](https://mp.weixin.qq.com/s/7oSxdFyqJ7MUpbfuNB_n5Q)

Mistral NeMo 使用基于 Tiktoken 的新分词器 Tekken，该分词器经过 100 多种语言的训练，能比以前 Mistral 模型中使用的 SentencePiece 分词器更有效地压缩自然语言文本和源代码。在压缩源代码、中文、意大利文、法文、德文、西班牙文和俄文时，它的效率要高出约 30%。在压缩韩文和阿拉伯文时，它的效率是原来的 2 倍和 3 倍。事实证明，与 Llama 3 分词器相比，Tekken 在压缩所有语言中约 85% 的文本方面更胜一筹。

Mistral NeMO 经历了高级微调和对齐阶段。与 Mistral 7B 相比，它在遵循精确指令、推理、处理多轮对话和生成代码方面的能力大大提升。

* 基础模型：<https://huggingface.co/mistralai/Mistral-Nemo-Base-2407>
* 指令微调模型：<https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407>

[大模型已过时，小模型SLM才是未来？苹果正在研究这个](https://mp.weixin.qq.com/s/vAa1Tmse-Sn_nhaceWC1lg)

[Computational Bottlenecks of Training Small-scale Large Language Models](https://arxiv.org/pdf/2410.19456)

[研究大模型门槛太高？不妨看看小模型SLM，知识点都在这](https://mp.weixin.qq.com/s/sg7HveGDjMEj-ZcHS3YizA)

[A Comprehensive Survey of Small Language Models in the Era of Large Language Models: Techniques, Enhancements, Applications, Collaboration with LLMs, and Trustworthiness](https://arxiv.org/a/2411.03350)

<https://github.com/FairyFali/SLMs-Survey>

#### BitNet

[微软开源爆火1.58bit大模型推理框架！千亿参数模型量化后单CPU可跑，速度每秒5-7个token](https://mp.weixin.qq.com/s/gerCRxj4eULOut9PtMlNog)

[BitNet: Scaling 1-bit Transformers for Large Language Models](https://arxiv.org/pdf/2310.11453)

[The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits](https://arxiv.org/pdf/2402.17764)

<https://github.com/microsoft/BitNet>

#### Zamba 2

[7B新王登基！Zamba 2完胜同级模型，推理效率比Llama 3提升20%，内存用量更少](https://mp.weixin.qq.com/s/6_dQod3hS1IJ_xU09x_jrg)

用了mamba 2

[Zamba: A Compact 7B SSM Hybrid Model](https://arxiv.org/pdf/2405.16712)

* hf版本：<https://huggingface.co/Zyphra/Zamba2-2.7B>
* 纯pytorch版本：<https://github.com/Zyphra/Zamba2>

### 小结

[开源模型进展盘点：最新Mixtral、Llama 3、Phi-3、OpenELM到底有多好？](https://mp.weixin.qq.com/s/bgdDYkGHbPZMMSJPIutFSQ)

## 外推问题

### 常见位置编码

#### Sinusoidal位置编码

[Transformer升级之路：Sinusoidal位置编码追根溯源](https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==\&mid=2247522799\&idx=1\&sn=97cc77f6be765bb6124e0f7c5c4e533e\&chksm=96ea466fa19dcf79e4cdeba36f41b17917a724cadfbe6d81f256526cef5c79199ac2708b7988\&scene=21#wechat_redirect)

其实就是transformer最开始的位置编码，其中$$\boldsymbol{p}*{k, 2 i}, \boldsymbol{p}*{k, 2 i+1}$$分别是位置$$k$$的编码向量的第$$2i,2i+1$$个分量，$$d$$是向量维度

$$
\left{\begin{array}{l}
\boldsymbol{p}*{k, 2 i}=\sin \left(k / 10000^{2 i / d}\right) \\
\boldsymbol{p}*{k, 2 i+1}=\cos \left(k / 10000^{2 i / d}\right)
\end{array}\right.
$$

#### ALiBi

[Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation](https://arxiv.org/a/2108.12409)，如下添加一个**不学习**的bias，ALiBi(Attention with Linear Biases)

$$
\operatorname{softmax}\left(\mathbf{q}\_i \mathbf{K}^{\top}+m \cdot\[-(i-1), \ldots,-2,-1,0]\right)
$$

其中的$$m$$是坡度（slope），和attention heads有关。假设有n个head，那取值范围就是$$2^{-8/n}, 2^{-8/n\times 2}, 2^{-8/n\times 3}, ...,2^{-8}$$

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b54e6ae1bbb4454eb706f22bec7c26f04402fb5a%2Falibi.png?alt=media)

#### RoPE

[Transformer升级之路：博采众长的旋转式位置编码](https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==\&mid=2247523398\&idx=1\&sn=a73bd746cee54a5a2b72a52127fba4d0\&chksm=96ea43c6a19dcad0fea381ed5f79a17a8350ba221975cb5d40b2410eb15ea8f442fad29e181c\&scene=21#wechat_redirect)

[Transformer升级之路：RoPE的底数设计原则](https://mp.weixin.qq.com/s/YhpfIz0Pi1OMLwN3V3J1mQ)

[Base of RoPE Bounds Context Length](https://arxiv.org/pdf/2405.14591)

[Decoder-only的LLM为什么需要位置编码？](https://mp.weixin.qq.com/s/3sBYrKyEPP93nwigaOAAAA)

[HuggingFace工程师亲授：如何在Transformer中实现最好的位置编码](https://mp.weixin.qq.com/s/_vhyBrTM041FfHEohwLqMA)

<https://github.com/ZhuiyiTechnology/roformer>

<https://zhuanlan.zhihu.com/p/359502624>

Sinusoidal位置编码是一种“想要成为相对位置编码的绝对位置编码”，RoPE是一种配合Attention机制能达到“绝对位置编码的方式实现相对位置编码”的设计，还是目前唯一一种可用于线性Attention的相对位置编码。

核心：给q和k添加绝对位置信息（位置m和位置n），

$$
\tilde{\boldsymbol{q}}\_m=\boldsymbol{f}(\boldsymbol{q}, m), \quad \tilde{\boldsymbol{k}}\_n=\boldsymbol{f}(\boldsymbol{k}, n)
$$

使得内积的结果能带有相对位置信息

$$
\langle\boldsymbol{f}(\boldsymbol{q}, m), \boldsymbol{f}(\boldsymbol{k}, n)\rangle=g(\boldsymbol{q}, \boldsymbol{k}, m-n)
$$

参考[让研究人员绞尽脑汁的Transformer位置编码](https://kexue.fm/archives/8130)，有如下公式，说明"两个二维向量的内积，等于把它们当复数看时，一个复数与另一个复数的共轭的乘积实部。"

$$
\left\langle\boldsymbol{q}\_m, \boldsymbol{k}\_n\right\rangle=\operatorname{Re}\left\[\boldsymbol{q}\_m \boldsymbol{k}\_n^\*\right]
$$

其中$$\*$$是共轭复数，右边的乘法是复数乘法，$$Re\[]$$表示取结果的实部。所以，如果对$$\boldsymbol{q}\_m, \boldsymbol{k}\_n$$分别乘以$$e^{\mathrm{i} m \theta}, e^{\mathrm{i} n \theta}$$得到$$\boldsymbol{q}\_m e^{\mathrm{i} m \theta}, \boldsymbol{k}\_n e^{\mathrm{i} n \theta}$$，就相当于加上了绝对位置编码，然后放到内积中，就有下式，即内积只依赖于**相对位置**

$$
\left\langle\boldsymbol{q}\_m e^{\mathrm{i} m \theta}, \boldsymbol{k}\_n e^{\mathrm{i} n \theta}\right\rangle=\operatorname{Re}\left\[\left(\boldsymbol{q}\_m e^{\mathrm{i} m \theta}\right)\left(\boldsymbol{k}\_n e^{\mathrm{i} n \theta}\right)^*\right]=\operatorname{Re}\left\[\boldsymbol{q}\_m \boldsymbol{k}\_n^* e^{\mathrm{i}(m-n) \theta}\right]
$$

#### longRoPE

[LongRoPE：超越极限，将大模型上下文窗口扩展超过200万tokens](https://mp.weixin.qq.com/s/4ryyv59ofNOD--RCSdqktQ)

#### CoPE

[解决Transformer根本缺陷，CoPE论文爆火：所有大模型都能获得巨大改进](https://mp.weixin.qq.com/s/JxB6JU6MxO3709mkg7penw)

[Contextual Position Encoding: Learning to Count What’s Important](https://arxiv.org/pdf/2405.18719)

#### DAPE

[NeurIPS 2024 | Transformer长度外推，全新位置编码DAPE大幅提升模型性能](https://mp.weixin.qq.com/s/-7YsAMYYO92nItRJbqSrpw)

[DAPE: Data-Adaptive Positional Encoding for Length Extrapolation](https://arxiv.org/a/2405.14722)

<https://github.com/chuanyang-Zheng/DAPE>

### 长上下文的问题

[长序列（Long Context）大模型笔记](https://mp.weixin.qq.com/s/nUX3MbKbyxw6b6mhgoL-Mw?poc_token=HK37E2ejmhfX-g6qnVG3pIxFJXZEVk-vPpwriYAj)

<https://zhuanlan.zhihu.com/p/689394585>

[LLM长上下文的问题](https://mp.weixin.qq.com/s/5e5HtxJrxNuhsVxrKsL2gA)

[专访月之暗面杨植麟：lossless long context is everything](https://mp.weixin.qq.com/s/UMY0qZsCGh87KnW4wjfvoA)

[语言模型窗口外推技术综述](https://mp.weixin.qq.com/s/5CqrlUZHrciMAFmeV2oYdw)

以中文为例，大部分模型每个token对应的中文字数都>1.5个字，所以200k的token就对应30w字的上下文

对长文本的几个要求：

* 在文本比较长的时候，还能保证通顺，**ppl要足够低**
* 能attention到前面提过的细节，**不能自我矛盾**

注意：如果训练时是2k长度的语料，而推理设定8k窗口，那么PPL会急剧上升，因为

* RoPE不能很好地处理没有训练过的**位置编码**
* 推理时**注意力机制**所处理的token数量远超训练时的数量，导致注意力机制的崩坏

#### 两阶段训练方式

* 直接输入连续长文本（如书籍）
* 多个中等文本拼接，再通过attention mask来限制各段文本之间注意力，让它们可以在各自的位置上各训各的，互不干扰。甚至实际上即使不做attention mask，效果也挺好。

如果简单地增加长度，例如从4k变到32k，长度增加8倍，为了加速计算需要缓存中间结果（如QK的结果是$$s^2$$的空间复杂度），所以显存会扩大$$8^2=64$$倍。一般的做法是2阶段：

* 第一阶段：用2k或者4k训练一个基础模型，让模型学好**文本内容**和**短位置关系**
* 第二阶段：用**比第一阶段小的数据量优化**模型在**长上下文的效果**

### 外推方法

#### 针对位置编码的插值类方法

**线性插值**

&#x20;

[Extending Context Window of Large Language Models via Positional Interpolation](https://arxiv.org/pdf/2306.15595.pdf)

**NTK-Aware Interpolation**

&#x20;

**NTK-by-parts**

&#x20;

**Dynamically NTK Scaled RoPE**

&#x20;

#### 针对attention score的缩放方法

**YaRN**

&#x20;

[Qwen和DeepSeek为何都选YaRN？](https://mp.weixin.qq.com/s/D6aHJT549iCwmctcdReR4w)

**logn**

&#x20;

#### lossless long context

## 新的模型结构

### retrieval head

[Retrieval Head Mechanistically Explains Long-Context Factuality](https://arxiv.org/pdf/2404.15574)

### Hawk & Griffin

[RNN效率媲美Transformer，谷歌新架构两连发：同等规模强于Mamba](https://mp.weixin.qq.com/s/RtAZiEzjRWgqQw3yu3lvcg)

[Griffin: Mixing Gated Linear Recurrences with Local Attention for Efficient Language Models](https://arxiv.org/pdf/2402.19427)

#### 简介

global attention在infer阶段的效率和序列长度成二次关系，而且序列长度与KV cache呈线性增长关系。[Fast Transformer Decoding: One Write-Head is All You Need](https://arxiv.org/pdf/1911.02150)提出的multi-query attention(MQA)可以通过一个**constant factor**来**减小cache size**，部分缓解这个问题，但cache还是与序列长度线性相关。

循环模型能够将整个序列压缩到一个**fixed-size的hidden state**，并通过迭代进行更新。但要想取代transformer，rnn不仅需要在效果上可比，还要相似的硬件效率，相关工作如下：

* [Efficiently modeling long sequences with structured state spaces](https://arxiv.org/pdf/2111.00396)
* [Long range language modeling via gated state spaces](https://arxiv.org/pdf/2206.13947)提出了GSS block
* [Simplified state space layers for sequence modeling](https://arxiv.org/pdf/2208.04933)
* [Resurrecting Recurrent Neural Networks for Long Sequences](https://arxiv.org/pdf/2303.06349)
* [Hungry hungry hippos: Towards language modeling with state space models](https://arxiv.org/pdf/2212.14052)
* [Hyena hierarchy: Towards larger convolutional language models](https://arxiv.org/pdf/2302.10866)
* [Mamba: Linear-time sequence modeling with selective state spaces](https://arxiv.org/pdf/2312.00752)

本文提出了新的**RG-LRU层**，一种新的gated linear recurrent layer，并基于此提出了将MLP和RG-LRU结合的Hawk，还有将MLP和RG-LRU与local attention混合的Griffin。

![griffin-hawk](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-99b762f331e6328978573497668f3baa18c77c3b%2Fgriffin-hawk.png?alt=media)

* 对于最多超过7B的模型，Hawk和Griffin发现了**held-out loss**和**训练FLOPS**间的**power law scaling**（上图左边）
* Hawk-3B比Mamba-3B在下游任务上要好，而训练的token数只有mamba的一半；Griffin-7B和14B与Llama-2效果相当，而训练数据只有其1/7
* 训练在TPU-v3上完成，用JAX中的Pallas实现了RG-LRU(Real-Gated Linear Recurrent Unit)层的内核(<https://jax.readthedocs.io/en/latest/pallas/index.html>)，减小内存transfer
* infer阶段比MQA的**吞吐高很多**（上图右边），而且对长序列有**更低的latency**
* 训练时在长序列上比transformer更好，而且能够高效地学习**复制和检索**的任务。但如果没有finetune，直接对比pretrain的效果，transformer会更好

#### 网络结构

包括三大类组件：

* residual block:
* MLP block：
* temporal-mixing block

![griffin-arch](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-69f03decaa0c856a6b1d15e610d8d86e59f2ab6a%2Fgriffin-arch.png?alt=media)

**Residual Block**

&#x20;

受pre-norm transformer的启发，用的RMSNorm

**MLP block**

&#x20;

参考[Language modeling with gated convolutional networks](https://arxiv.org/pdf/1612.08083)（类似star两个W直接element-wise product），采用了gated MLP，即如下两个linear的结果（输入维度$$D$$，输出维度都是$$MD,M=3$$）进行element-wise product(类似GeGLU（[Glu variants improve transformer](https://github.com/daiwk/collections/tree/master/posts/\(https:/arxiv.org/pdf/2002.05202.pdf\))）)，再过一个linear

* 直接过一个linear，但没有激活
* linear后加一个GeLU激活（实际用的`nn.functional.gelu(input, approximate="tanh")`）

看recurrentGemma-2b的[config](https://huggingface.co/google/recurrentgemma-2b-it/blob/main/config.json)，发现总共有26个block，一个block依次包括：

* rg-lru或者MQA，每个block里的选择方式是(rg,rg,att,rg,rg,att,rg,rg,att,...)
* 再过一个gated MLP

```python
  "_block_types": [
    "recurrent",
    "recurrent",
    "attention"
  ],
  "num_hidden_layers": 26,
  "attention_window_size": 2048,

```

**Temporal-mixing block**

&#x20;

**global Multi-Query Attention(MQA)**

&#x20;

[Fast Transformer Decoding: One Write-Head is All You Need](https://arxiv.org/pdf/1911.02150)中为了加速推理，采用了MQA的方法，本文固定了head的维度为$$D\_{head}=128$$，head的个数$$H$$也固定，且$$HD\_{head}=D$$，所以model的维度$$D$$需要是128的倍数。没用绝对位置编码，用了RoPE。

**local(sliding-window) MQA**

&#x20;

[Longformer: The long-document transformer](https://arxiv.org/pdf/2004.05150)提出了可以用local attention，即滑动窗口attention。让每个位置只和前面的固定个tokens去算attentioin，可以

* 降低计算的FLOPS
* 让KV cache的size的上界变成了**window的size**，从而不是序列长度的二次关系

**RG-LRU**

&#x20;

类似GSS block，也类似Mamba，输入$$D$$，分别过一个linear得到两个分支，均是$$D\_{RNN}$$：

* 分支1：过GeLU激活，同上，实际用的`nn.functional.gelu(input, approximate="tanh")`
* 分支2：
  * 参考[Hungry hungry hippos: Towards language modeling with state space models](https://arxiv.org/pdf/2212.14052)的H3模型里的Shift-SSM，过一个Conv1D，其temporal filter dim是4
  * Conv1D的参数只有$$4D\_{RNN}$$，因此再过一个RG—LRU模块

两个分支的输出element-wise product一下，再过一个linear得到$$d$$。

conv1d参考torch官方[doc](https://pytorch.org/docs/stable/generated/torch.nn.Conv1d.html)

* 输入：$$\left(N, C\_{i n}, L\_{i n}\right)$$
* 输出：$$\left(N, C\_{\text {out }}, L\_{\text {out }}\right)$$

其中，

$$
L\_{\text {out }}=\left\lfloor\frac{L\_{\text {in }}+2 \times \text { padding }- \text { dilation } \times(\text { kernel\_size }-1)-1}{\text { stride }}+1\right\rfloor
$$

当`groups==in_channels and out_channels=K*in_channels`，也叫depthwise convolution，K是depthwise乘子。即**每个输入通道都有自己的卷积核，并且只作用于该通道**。

```python
        ## conv1d_width = 4, 
        ## 对图像卷积来讲，padding就是让输出的shape不小于输入shape
        ## 输入是hidden_size=2560，而lru_width也是2560
        self.conv_1d = nn.Conv1d(
                    config.lru_width, # in_channels
                    config.lru_width, # out_channels
                    kernel_size=config.conv1d_width,
                    groups=config.lru_width,
                    padding=config.conv1d_width - 1,
                )
        
        ## 输入[, seq_len, hidden_size]
        x_branch = self.linear_x(input_states)
        ## 变成[, hidden_size, seq_len]
        x_branch = x_branch.transpose(1, 2)
        if use_cache:
            if cache_position.shape[0] != 1:  # prefill
                self.conv1d_state = nn.functional.pad(x_branch, 
                    (self.conv1d_width - x_branch.shape[-1] - 1, 0))
                x_branch = self.conv_1d(x_branch)[..., :seq_len]
            else:  # decoding
                conv_state = torch.cat((self.conv1d_state, x_branch), -1)
                x_branch = torch.sum(conv_state * self.conv_1d.weight[:, 0, :], dim=-1) 
                    + self.conv_1d.bias
                x_branch = x_branch.unsqueeze(-1)
                self.conv1d_state = conv_state[:, :, 1:]
        else:
            # 前面维度不变，最后一维截断到seq_len
            x_branch = self.conv_1d(x_branch)[..., :seq_len]
```

参考[Resurrecting Recurrent Neural Networks for Long Sequences](https://arxiv.org/pdf/2303.06349)提出的LRU(Linear Recurrent Unit)，并参考传统LSTM和GRU引入了gate：

$$
\begin{aligned}
r\_t & =\sigma\left(W\_a x\_t+b\_a\right), \quad \text { recurrence gate } \\
i\_t & =\sigma\left(W\_x x\_t+b\_x\right), \quad \text { input gate } \\
a\_t & =a^{c r\_t}, \\
h\_t & =a\_t \odot h\_{t-1}+\sqrt{1-a\_t^2} \odot\left(i\_t \odot x\_t\right) .
\end{aligned}
$$

其中，recurrent weight $$a=\sigma(\Lambda)$$是一个对角矩阵，$$\Lambda$$是一个可学习的参数。$$c$$是一个常数8，为了**计算稳定**，在log-space计算$$a^{c r\_t}$$，即先算出$$\log a\_t$$，再取exp。

$$
\log a\_t=\log a^{c r\_t}=\log \sigma(\Lambda)^{c r\_t}=-\operatorname{csoftplus}(\Lambda) \odot r\_t
$$

(这个公式可能有点问题，感觉应该是$$-\operatorname{csoftplus}(-\Lambda) \odot r\_t$$，不过$$\Lambda$$是一个可学习的nn.Parameter，其实这个错误无所谓吧)

```python
    def __init__(self, config):
        super().__init__()
        self.num_attention_heads = config.num_attention_heads
        self.block_width = config.lru_width // self.num_attention_heads

        self.recurrent_param = nn.Parameter(torch.empty([config.lru_width]))
        self.input_gate_weight = nn.Parameter(
            torch.empty([self.num_attention_heads, self.block_width, self.block_width])
        )
        self.input_gate_bias = nn.Parameter(torch.empty([self.num_attention_heads, self.block_width]))

        self.recurrent_gate_weight = nn.Parameter(
            torch.empty([self.num_attention_heads, self.block_width, self.block_width])
        )
        self.recurrent_gate_bias = nn.Parameter(torch.empty([self.num_attention_heads, self.block_width]))
        self.recurrent_states = None

    def forward(xxx):
        ## reshape成适合多头的情况
        reshape_act = activations.reshape(batch_size * seq_len, self.num_attention_heads, self.block_width)
        ## (num_attention_heads, batch_size * seq_len, block_width)
        reshape_act = reshape_act.permute(1, 0, 2)

        ## 批量矩阵乘法（baddbmm），在reshape_act和self.input_gate_weight之间进行，
        ## 并加上偏置self.input_gate_bias。这一步计算输入门的原始值。
        res = torch.baddbmm(self.input_gate_bias[:, None, :], reshape_act, self.input_gate_weight)
        input_gate = torch.sigmoid(res.transpose(0, 1).reshape(batch_size, seq_len, lru_width))

        ## 类似input_gate
        res = torch.baddbmm(self.recurrent_gate_bias[:, None, :], reshape_act, self.recurrent_gate_weight)
        recurrent_gate = torch.sigmoid(res.transpose(0, 1).reshape(batch_size, seq_len, lru_width))

        # Compute the parameter `A` of the recurrence.
        # 上面的公式
        log_recurrent_gate = -8.0 * recurrent_gate * nn.functional.softplus(self.recurrent_param)
        recurrent_gate = torch.exp(log_recurrent_gate)
```

还有如下几个特点：

* $$W\_a$$和$$W\_x$$用LeCun init初始化
* 初始化$$\Lambda$$，使得在训练开始时，$$a^c$$均匀分布在0.9和0.999之间，类似[Resurrecting Recurrent Neural Networks for Long Sequences](https://arxiv.org/pdf/2303.06349)
* 不像大部分SSM（例如[Hippo: Recurrent memory with optimal polynomial projections](https://arxiv.org/pdf/2008.07669)）基于orthogonal polynomials（正交多项式）理论进行初始化。
* 也不像[Efficiently modeling long sequences with structured state spaces](https://arxiv.org/pdf/2111.00396.pdf)在底层的连续系统上进行离散化定义
* 不像原始的LRU用了复数，虽然[ On the universality of linear recurrences followed by nonlinear projections](https://arxiv.org/pdf/2307.11888v1)说复数的表达能力更强，但在实践中对语言模型并没有什么用（[Mamba: Linear-Time Sequence Modeling with Selective State Spaces](https://arxiv.org/ftp/arxiv/papers/2312/2312.00752.pdf)）

**gate特点**

&#x20;

先复习一下LSTM：

![lstm-peephole-lstm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7cc6bbecbedb563522e83daf0544418f0182376c%2Flstm-peephole-lstm.png?alt=media)

GRU：

* 重置门（reset gate）：如果重置门关闭，会**忽略掉历史信息**，即历史不相干的信息不会影响未来的输出。
* 更新门（update gate）：将LSTM的**输入门和遗忘门合并**，用于控制**历史信息对当前时刻隐层输出的影响**。如果更新门接近1，会把历史信息传递下去。

![gru](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-639e1fd945c9c5666af02effc6f4d2685a7631ce%2Fgru.png?alt=media)

* 两个gate只和$$x\_t$$有关，**和**$$h\_{t-1}$$**无关**。
* input gate $$i\_t$$和LSTM类似，直接对输入$$x\_t$$进行filter或者scale down。
* recurrent gate $$r\_t$$和之前的gate机制不同：
  * mamba里的selection机制和GRU的**update gate**类似，在**之前的状态**和**当前输入**$$x\_t$$**之间进行插值（interpolate），功能类似LSTM的forget gate**，能够**reset状态，并遗忘之前的信息**
  * 本文的recurrent gate则类似于在LRU的更新和之前的隐藏状态之间进行插值，能够**有效地丢弃输入**，并且**保持之前历史里的所有信息**。使得模型在处理不相关或重复输入（**uniformative inputs**）时，更能达到**超指数的记忆能力**，以更有效地保留有用信息(因为这个gate**和**$$h\_{t-1}$$**无关**)。

### feedback attention memory

[TransformerFAM: Feedback attention is working memory](https://arxiv.org/pdf/2404.09173.pdf)

### infini-attention

[Leave No Context Behind: Efficient Infinite Context Transformers with Infini-attention](https://arxiv.org/pdf/2404.07143.pdf)

[【重磅】谷歌重塑Transformer：无限记忆力，无限长输入，LLM基础研究重大突破](https://mp.weixin.qq.com/s/bV2b9uJ4GFQPhhggHT3VIA)

将**压缩记忆**整合进标准的点积注意力机制，并在单个Transformer块内同时实现了**掩码局部注意力**和**长期线性注意力机制**

![infini-attention](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-340d5640807183dbc82a724befb2c55d419e489d%2Finfini-attention.png?alt=media)

与transformer-xl对比：

![infini-attention-vs-transformer-xl](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-88d0a86c1790a016064fa87b652e667c723ce04f%2Finfini-attention-vs-transformer-xl.png?alt=media)

<https://github.com/mustafaaljadery/gemma-2B-10M>

<https://github.com/dingo-actual/infini-transformer>

### MEGA

[Mega: Moving average equipped gated attention](https://arxiv.org/pdf/2209.10655.pdf)

<https://github.com/facebookresearch/mega>

#### 标准的self-attention公式

&#x20;

对于序列长度=$$n$$的输入$$\boldsymbol{X}=\left{\mathbf{x}\_1, \mathbf{x}\_2, \ldots, \mathbf{x}\_n\right} \in \mathbb{R}^{n \times d}$$，输出$$\boldsymbol{Y}=\left{\mathbf{y}\_1, \mathbf{y}\_2, \ldots, \mathbf{y}\_n\right} \in \mathbb{R}^{n \times d}$$

$$
\boldsymbol{Y}=\operatorname{Attn}(\boldsymbol{X})=f\left(\frac{\boldsymbol{Q} \boldsymbol{K}^T}{\tau(\boldsymbol{X})}\right) \boldsymbol{V}
$$

$$
\boldsymbol{Q}=\boldsymbol{X} W\_q+b\_q,\boldsymbol{K}=\boldsymbol{X} W\_k+b\_k,\boldsymbol{V}=\boldsymbol{X} W\_v+b\_v
$$

其中，$$\text { Attn : } \mathbb{R}^{n \times d} \rightarrow \mathbb{R}^{n \times d}$$，$$W\_q, W\_k, W\_v \in \mathbb{R}^{d \times d}$$，$$b\_q, b\_k, b\_v \in \mathbb{R}^d$$，而且有两种定义方式：

* $$f(\cdot)=f\_{\text {softmax }}(\cdot)$$，同时$$\tau(\boldsymbol{X})=\sqrt{d}$$，这是经典操作[Neural Machine Translation by Jointly Learning to Align and Translate](https://arxiv.org/pdf/1409.0473.pdf)
* $$f(\cdot)=f\_{\mathrm{relu}^2}(\cdot)$$即$$relu(x)^2$$，同时$$\tau(\boldsymbol{X})=n$$，这是[Primer: Searching for efficient transformers for language modeling](https://arxiv.org/pdf/2109.08668.pdf)和[Transformer Quality in Linear Time](https://arxiv.org/pdf/2202.10447.pdf)提出的

![gau](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6a1df1ff84c87e04bf71c67a9b4aac75b2163407%2Fgau.png?alt=media)

对于$$h$$个attention heads，计算$$\boldsymbol{A}=f\left(\frac{\boldsymbol{Q} \boldsymbol{K}^T}{\tau(\boldsymbol{X})}\right) \in \mathbb{R}^{n \times n}$$需要的时间和空间复杂度都是$$O(hn^2)$$

#### EMA

&#x20;

对于输出的序列$$\boldsymbol{Y}$$采用Exponential Moving Average(指数滑动平均)如下

$$
\mathbf{y}\_t=\boldsymbol{\alpha} \odot \mathbf{x}*t+(1-\boldsymbol{\alpha}) \odot \mathbf{y}*{t-1}
$$

其中，$$\boldsymbol{\alpha} \in(0,1)^d$$表示权重衰减，$$\odot$$是element-wise product

$$\boldsymbol{\alpha}$$越大，$$1-\boldsymbol{\alpha}$$越小，对历史的衰减也越快：

![ema](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e35bb0956a54ed43cbb4b552b2b7635583f7c3cf%2Fema.png?alt=media)

EMA的计算看成$$n$$个**独立的卷积**，可以通过\*\*FFT(快速傅立叶变换)\*\*来加速计算。具体。。。再看看

**Damped EMA**：由于输入的x是d维向量，可以引入一个因子$$\boldsymbol{\delta} \in(0,1)^d$$让EMA更鲁棒：

$$
\mathbf{y}\_t=\boldsymbol{\alpha} \odot \mathbf{x}*t+(1-\boldsymbol{\alpha} \odot \boldsymbol{\delta}) \odot \mathbf{y}*{t-1}
$$

#### MEGA

&#x20;

EMA可以看成是一种**与位置相关的归纳偏置（inductive bias）**，即假设当前位置与之前位置满足滑动平均的关系，而attention矩阵的计算其实并没有考虑位置信息，所以可以把二者结合一下。

![mega](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6f80c995b3fd01c702da9a7fdb5a83090cdc0744%2Fmega.png?alt=media)

其中的multi-dimensional damped EMA大致流程如下：

* **先变成h维**：先把$$\boldsymbol{X} \in \mathbb{R}^{n \times d}$$通过矩阵$$\beta$$映射成$$\boldsymbol{U}\in \mathbb{R}^{n \times h}$$
* **计算EMA**：然后通过EMA得到$$\boldsymbol{h}\in \mathbb{R}^{n \times h}$$（具体$$\mathbf{h}\_t^{(j)}=\boldsymbol{\alpha}\_j \odot \mathbf{u}\_t^{(j)}+\left(1-\boldsymbol{\alpha}\_j \odot \boldsymbol{\delta}*j\right) \odot \mathbf{h}*{t-1}^{(j)}$$）
* **再变回d维**：再通过一个矩阵$$\eta$$变回$$\boldsymbol{Y}\in \mathbb{R}^{n \times h}$$

然后看整个流程：

* 先计算EMA

$$
\begin{aligned}
\boldsymbol{X}^{\prime} & =\operatorname{EMA}(\boldsymbol{X}) & & \in \mathbb{R}^{n \times d} \\
\boldsymbol{Z} & =\phi\_{\text {silu }}\left(\boldsymbol{X}^{\prime} W\_z+b\_z\right) & & \in \mathbb{R}^{n \times z}
\end{aligned}
$$

* 再基于EMA的结果计算QK，基于原始的X计算V：

$$
\begin{array}{ll}
\boldsymbol{Q}=\boldsymbol{\kappa}\_q \odot \boldsymbol{Z}+\boldsymbol{\mu}\_q & \in \mathbb{R}^{n \times z} \\
\boldsymbol{K}=\boldsymbol{\kappa}\_k \odot \boldsymbol{Z}+\boldsymbol{\mu}*k & \in \mathbb{R}^{n \times z} \\
\boldsymbol{V}=\phi*{\text {silu }}\left(\boldsymbol{X} W\_v+b\_v\right) & \in \mathbb{R}^{n \times v}
\end{array}
$$

* 计算带位置bias的attention：

$$
\boldsymbol{O}=f\left(\frac{\boldsymbol{Q} \boldsymbol{K}^T}{\tau(\boldsymbol{X})}+\boldsymbol{b}\_{\mathrm{rel}}\right) \boldsymbol{V} \quad \in \mathbb{R}^{n \times v}
$$

* 通过reset gate $$\boldsymbol{\gamma}$$和update gate $$\boldsymbol{\varphi}$$计算输出

$$
\begin{aligned}
\boldsymbol{\gamma} & =\phi\_{\text {silu }}\left(\boldsymbol{X}^{\prime} W\_\gamma+b\_\gamma\right) & & \in \mathbb{R}^{n \times v} \\
\boldsymbol{\varphi} & =\phi\_{\text {sigmoid }}\left(\boldsymbol{X}^{\prime} W\_{\varphi}+b\_{\varphi}\right) & & \in \mathbb{R}^{n \times d} \\
\hat{\boldsymbol{H}} & =\phi\_{\text {silu }}\left(\boldsymbol{X}^{\prime} W\_h+(\boldsymbol{\gamma} \boldsymbol{O}) U\_h+b\_h\right) & & \in \mathbb{R}^{n \times d} \\
\boldsymbol{Y}&=\boldsymbol{\varphi} \odot \hat{\boldsymbol{H}}+(1-\boldsymbol{\varphi}) \odot \boldsymbol{X} \quad & & \in \mathbb{R}^{n \times d}
\end{aligned}
$$

这里把attention里的softmax改成了如下的laplace函数：

$$
f\_{\text {laplace }}(x ; \mu, \sigma)=0.5 \times\left\[1+\operatorname{erf}\left(\frac{x-\mu}{\sigma \sqrt{2}}\right)\right]
$$

其中，$$\operatorname{erf}(x)=\frac{1}{\sqrt{\pi}} \int\_{-x}^x e^{-t^2} \mathrm{\~d} t=\frac{2}{\sqrt{\pi}} \int\_0^x e^{-t^2} \mathrm{\~d} t$$是[误差函数](https://zh.wikipedia.org/wiki/%E8%AF%AF%E5%B7%AE%E5%87%BD%E6%95%B0)，

为了让laplace逼近$$f\_{\text {relu }^2}$$，对于$$x=\sqrt{2}$$这个点，求解如下方程

$$
\begin{aligned}
& f\_{\text {relu2 }}(\sqrt{2})=f\_{\text {laplace }}(\sqrt{2}) \\
& f\_{\text {relu2 }}^{\prime}(\sqrt{2})=f\_{\text {laplace }}^{\prime}(\sqrt{2})
\end{aligned}
$$

可以得到$$\mu=\sqrt{1 / 2}$$，$$\sigma=\sqrt{1 / 4 \pi}$$，对应的曲线和准确率如下：

![laplace-vs-relu2](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ce7fb869e025c25d51080320e60fd8bd2a21794f%2Flaplace-vs-relu2.png?alt=media)

#### mega-chunk

![mega-chunk](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-638c84b30cbd432e2dbc72197c5fbd316682d029%2Fmega-chunk.png?alt=media)

将序列切分成长度固定为$$c$$的$$k=n/c$$个chunk，对**每个chunk独立计算**上面的attention，这样复杂度就变成了$$O(kc^2)=O(nc)$$，由于有EMA，所以这样做还是能够保持一定程度的长距离依赖。

### MEGALODON

[Meta无限长文本大模型来了：参数仅7B，已开源](https://mp.weixin.qq.com/s/VML5hExo5iPsyEavxzIZSA)

[革命新架构掀翻Transformer！无限上下文处理，2万亿token碾压Llama 2](https://mp.weixin.qq.com/s/xgP9P51gjqJ93FYSWfPeaA)

[MEGALODON: Efficient LLM Pretraining and Inference with Unlimited Context Length](https://arxiv.org/pdf/2404.08801.pdf)

<https://github.com/XuezheMax/megalodon>

[Megalodon: Efficient LLM Pretraining and Inference with Unlimited Context Length](https://arxiv.org/pdf/2404.08801.pdf)

基于MEGA进行改进，能够同时实现

* 高效训练（减少通信和计算量）
* 高效推理（保持恒定的KV缓存）

### MOD

[Mixture-of-Depths: Dynamically allocating compute in transformer-based language models](https://arxiv.org/pdf/2404.02258.pdf)

每层选不同的token过moe

### multi-head moe

[微软让MoE长出多个头，大幅提升专家激活率](https://mp.weixin.qq.com/s/ZCRyb63M2DL4hOQh7uxxaw)

[Multi-Head Mixture-of-Experts](https://arxiv.org/pdf/2404.15045)

<https://github.com/yushuiwx/MH-MoE>

### Lory

[150B token从头训练，普林斯顿Meta发布完全可微MoE架构Lory](https://mp.weixin.qq.com/s/UKIXGJTFzSeSZvoTe_c9CQ)

[Lory: Fully Differentiable Mixture-of-Experts for Autoregressive Language Model Pre-training](https://arxiv.org/pdf/2405.03133)

### Perciever

[Perceiver: General Perception with Iterative Attention](https://arxiv.org/pdf/2103.03206.pdf)

### Aaren

更早期的：[Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention](https://arxiv.org/abs/2006.16236)

[Bengio等人新作：注意力可被视为RNN，新模型媲美Transformer，但超级省内存](https://mp.weixin.qq.com/s/mRt2A1n1CmO7uqzuLQHxkw)

[Attention as an RNN](https://arxiv.org/pdf/2405.13956)

#### many-to-one RNN

对query向量$$q$$的attention可以看成是一个函数，对输入的$$N$$个token $$x\_{1: N}$$通过他们的key和value $$\left{\left(k\_i, v\_i\right)\right}*{i=1}^N$$ 变换成输出 $$\text { Attention }\left(q, k*{1: N}, v\_{1: N}\right)$$，假设$$\bar{s}\_i=\operatorname{dot}\left(q, k\_i\right)$$，那么输出就是

$$
o\_N=\sum\_{i=1}^N \operatorname{softmax}(s)*i v\_i=\frac{\sum*{i=1}^N \exp \left(s\_i\right) v\_i}{\sum\_{i=1}^N \exp \left(s\_i\right)}=\frac{\hat{a}\_N}{\hat{c}\_N}
$$

可以发现，分子和分母其实都可以写成递推形式$$\hat{a}*k=\hat{a}*{k-1}+\exp \left(s\_k\right) v\_k$$和$$\hat{c}*k=\hat{c}*{k-1}+\exp \left(s\_k\right)$$，由于直接这么做可能会产生很大或者很小的值（例如算exp），所以可以通过如下方式进行缓解：计录到第k步的最大值$$m\_k=\max *{i \in{1, \ldots, k}} s\_i$$，然后减掉它，即$$a\_k=\sum*{i=1}^k \exp \left(s\_i-m\_k\right) v\_i$$和$$c\_k=\sum\_{i=1}^k \exp \left(s\_i-m\_k\right)$$，这样就可以改写为如下形式：

$$
\begin{aligned}
a\_k & =a\_{k-1} \exp \left(m\_{k-1}-m\_k\right)+v\_k \exp \left(s\_k-m\_k\right) \\
c\_k & =c\_{k-1} \exp \left(m\_{k-1}-m\_k\right)+\exp \left(s\_k-m\_k\right) \\
m\_k & =\max \left(m\_{k-1}, s\_k\right)
\end{aligned}
$$

其中第一行其实就是$$s\_i-m\_k=s\_i-m\_k+m\_{k-1}-m\_k$$，然后exp一下，$$exp(s\_i-m\_k)=exp(s\_i-m\_k)exp(m\_{k-1}-m\_k)$$，总结成如下图：

![attention-rnn-cell](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8859c53e3242995ee793d3a2e4757423f3b8fef6%2Fattention-rnn-cell.png?alt=media)

所以Attention的RNN cell就是输入$$\left(a\_{k-1}, c\_{k-1}, m\_{k-1}, q\right)$$，输出$$\left(a\_k, c\_k, m\_k, q\right)$$，初始的状态是$$\left(a\_0, c\_0, m\_0, q\right)=(0,0,0,q)$$

然后就可以将之前的attention看成如下几类many-to-one的RNN了：

* 传统attention只计算最后的一个输出
* self-attention使用**输入token**作为初始状态
* Perceiver的cross-attention使用**依赖input的隐变量**作为初始状态

![many-to-one-rnn](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6b5bd89dab503e11d1c5622e35fc4b06923b7f61%2Fmany-to-one-rnn.png?alt=media)

对于新来的token而言：

* 传统的RNN一般是流式地输入数据，因此只需要O(1)的内存和计算就行了
* Transformer需要把这个新token当成一个初始状态加进来，所以需要把之前时间步的再重新算一次，需要O(N)的计算
* Perceiver中的隐变量是依赖输入的，而且这个新token会改变value，因此初始状态也会变，所以需要从头算一遍，需要O(NL)的计算，L是隐变量个数（可以参考代码[perceiver\_torch](https://github.com/lucidrains/perceiver-pytorch/blob/main/perceiver_pytorch/perceiver_pytorch.py)和如下gpt4o的回答）

![perceiver](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-85aad7e97c2bdb83268872dd32bc7907808b112d%2Fperceiver.png?alt=media)

#### many-to-many RNN

要计算$$\left{o\_i=\operatorname{Attention}\left(q, x\_{1: i}\right)\right}*{i=1}^N$$，通过如下的并行前缀扫描算法，对于$$N$$个序列数据的$$N$$个前缀，通过关联运算符$$\oplus$$并行计算，能够高效地通过$$\left{x\_k\right}*{k=1}^N$$计算$$\left{\bigoplus\_{i=1}^k x\_i\right}\_{k=1}^N$$

![parallel-prefix-scan](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6cffb5296ce826b75d9b3de5b2113a56d60d3d16%2Fparallel-prefix-scan.png?alt=media)

由于$$\operatorname{Attention}\left(\mathrm{q}, \mathrm{x}*{1: \mathrm{k}}\right)=o\_k=\frac{a\_k}{c\_k}$$，为了计算$$\left{\text { Attention }\left(\mathrm{q}, \mathrm{x}*{1: \mathrm{k}}\right)\right}*{k=1}^N$$，只需要先按这个并行扫描算法计算$$\left{a\_k\right}*{k=1}^N$$、$$\left{c\_k\right}*{k=1}^N$$和$$\left{m\_k\right}*{k=1}^N$$，再把$$a\_k$$和$$c\_k$$结合起来就行。

接来来定义三元组$$\left(\mathrm{m}\_A, \mathrm{u}\_A, \mathrm{w}\_A\right)$$，其中

* $$A$$：一些下标的集合
* $$\mathrm{m}\_A=\max \_{i \in A} s\_i$$
* $$\mathrm{u}*A=\sum*{i \in A} \exp \left(s\_i-\mathrm{m}\_A\right)$$
* $$\mathrm{w}*A=\sum*{i \in A} \exp \left(s\_i-\mathrm{m}\_A\right) v\_i$$

所以并行扫描算法的输入是$$\left{\left(\mathrm{m}*{{i}}, \mathrm{u}*{{i}}, \mathrm{W}*{{i}}\right)\right}*{i=1}^N=\left{\left(s\_i, 1, v\_i\right)\right}\_{i=1}^N$$，再来定义操作$$\oplus$$：

$$
\left(\mathrm{m}\_A, \mathrm{u}\_A, \mathrm{w}\_A\right) \oplus\left(\mathrm{m}*B, \mathrm{u}*B, \mathrm{w}*B\right)=\left(\mathrm{m}*{A \cup B}, \mathrm{u}*{A \cup B}, \mathrm{w}*{A \cup B}\right)
$$

其中，

* $$\mathrm{m}\_{A \cup B}=\max \left(\mathrm{m}\_A, \mathrm{\~m}\_B\right)$$
* $$\mathrm{u}\_{A \cup B}=\mathrm{u}\_A \exp \left(\mathrm{m}*A-\mathrm{m}*{A \cup B}\right)+\mathrm{u}\_B \exp \left(\mathrm{m}*B-\mathrm{m}*{A \cup B}\right)$$
* $$\mathrm{w} \_{A \cup B}=\mathrm{w}\_A \exp \left(\mathrm{m}*A-\mathrm{m}*{A \cup B}\right)+\mathrm{w}\_B \exp \left(\mathrm{m}*B-\mathrm{m}*{A \cup B}\right)$$

这个并行扫描算法最终输出下式，即$$\left{\left(m\_k, c\_k, a\_k\right)\right}\_{k=1}^N$$：

$$
\left{\left(\mathrm{m}*{{1, \ldots, k}}, \mathrm{u}*{{1, \ldots, k}}, \mathrm{w}*{{1, \ldots, k}}\right)\right}*{k=1}^N=\left{\left(m\_k, \sum\_{i=1}^k \exp \left(s\_i-m\_k\right), \sum\_{i=1}^k \exp \left(s\_i-m\_k\right) v\_i\right)\right}\_{k=1}^N
$$

![many-to-many-rnn](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b51f347ce9a2d021219cf5dddc73187a40fcfadb%2Fmany-to-many-rnn.png?alt=media)

#### Aaren

Aaren(attention as a recurrent newral network)的结构如下：

$$
\begin{aligned}
h\_1^{(0)}, \ldots, h\_N^{(0)} & \leftarrow x\_1, \ldots, x\_N \\
{\left\[h\_1^{(j+1)}, \ldots, h\_N^{(j+1)}\right] } & \leftarrow \operatorname{Aaren}\left(q^{(j)},\left\[h\_1^{(j)}, \ldots, h\_N^{(j)}\right]\right)
\end{aligned}
$$

transformer的query是输入的token，而Aaren的query token $$q$$是在训练的过程中通过bp学习的。迭代地计算$$y\_k$$只需要常数级的计算，因为它依赖$$h\_{k-1}$$和$$x\_k$$。

transformer：

* 使用kv cache时需要线性的内存
* 需要保存所有之前的tokens，包括在中间层的那些

aaren：

* 只需要常数级的内存
* 不需要保存之前的所有tokens

![stacking-aaren](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ebf5df78e7ce2ae0221dfa4684ea0a6c1314cb17%2Fstacking-aaren.png?alt=media)

### Matmul-free

[从LLM中完全消除矩阵乘法，效果出奇得好，10亿参数跑在FPGA上接近大脑功耗](https://mp.weixin.qq.com/s/HUvGGug48nGBx067nCbkag)

### H2O attention

[H2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models](https://arxiv.org/pdf/2306.14048)

* sparsity for small cache size：kv cache很稀疏，只要5%效果就可以了
* Heavy-Hitters for low miss rate：一小部分的token贡献了大部分attention score
* 贪心法选择需要干掉的token：假设总共需要保留k个token，对于第i个token，加进来后，遍历集合里的所有token，看干掉哪一个对attention score影响最小，就把它干掉

### TransNAR

[拯救Transformer推理能力！DeepMind新研究TransNAR：给模型嵌入「算法推理大脑」](https://mp.weixin.qq.com/s/YPICpkYHAC7zTLC_0M_XkQ)

[Transformers meet Neural Algorithmic Reasoners](https://arxiv.org/pdf/2406.09308)

基于：[Neural Algorithmic Reasoning](https://arxiv.org/pdf/2105.02761)

### softmax数学原理

[通向概率分布之路：盘点Softmax及其替代品](https://mp.weixin.qq.com/s/tA9kJqD279dHnivzPkvbjg)

把softmax的分母记为$$Z(x)$$，其对数是max的一个光滑近似：

$$
\begin{array}{r}
\log Z(\boldsymbol{x})=\log \sum\_{j=1}^n e^{x\_j}=\operatorname{logsumexp}(\boldsymbol{x}) \\
\lim \_{\tau \rightarrow 0^{+}} \tau \operatorname{logsumexp}(\boldsymbol{x} / \tau)=\max (\boldsymbol{x})
\end{array}
$$

当$$\tau$$取1时，可以得到$$\operatorname{logsumexp}(\boldsymbol{x}) \approx \max (\boldsymbol{x})$$

### StreamingLLM

[Efficient Streaming Language Models with Attention Sinks](https://arxiv.org/pdf/2309.17453)

[深度解析streamingLLM之无限长文本生成能力](https://mp.weixin.qq.com/s?__biz=Mzg2ODk4MzE2MQ==\&mid=2247484158\&idx=1\&sn=666bd5fed13815b5765124646206bac5\&chksm=cea54ae8f9d2c3fea1f3d5dfc94fc3d48abbd02a1278584bfd76ff8fe52ce59ce8966ced9cd5\&token=562866785\&lang=zh_CN#rd)

attention sink：输入给LLM推理开头的几个intial tokens是非常特殊的，就像水龙头一样，出水那一瞬间吸引了人们大量的attention。而且intial tokens与生成token的绝对距离距离和语义信息都不重要，重要的是这第一个或者前面几个token。

softmax需要所有位置的值的总和为1，因此必须给某些位置权重，即使这个位置对输出没有任何贡献，可能导致在backward的过程中产生错误的权重更新，而这个错误在后续的过程中很难被纠正。因此，模型倾向于将不必要的注意力值转嫁给特定的token。其实在<https://www.evanmiller.org/attention-is-off-by-one.html>就提出了，要给softmax的分母+1：$$(\operatorname{softmax\_1}(\mathrm{x}))\_i=\frac{\exp \left(x\_i\right)}{\sum\_j \exp \left(x\_j\right)+1}$$

当每个token都趋向负无穷时，softmax的极限是1/k（k是token数），也就是会让每个token的概率都是1/k

$$
\lim \_{x 1 \rightarrow-\infty} \ldots \lim \_{x\_k \rightarrow-\infty}(\operatorname{softmax}(x))\_i=\frac{1}{k}>0
$$

而$$softmax\_1$$因为分母有个1（即$$exp(0)=1$$），相当于在最前面引入了一个或者多个的无意义的global\_token。同样当每个token都趋向负无穷时，因为分母已经有一个1了，所以可以让其他正常token都趋于0

$$
\lim \_{x 1 \rightarrow-\infty} \ldots \lim \_{x\_k \rightarrow-\infty}\left(\operatorname{softmax}\_1(x)\right)\_i=0
$$

<https://github.com/mit-han-lab/streaming-llm>

集成到trt-llm里了：<https://github.com/NVIDIA/TensorRT-LLM/tree/main/examples/llama#run-llama-with-streamingllm>

* trtllm-build时，加上`--streamingllm enable`
* infer时，加上`--sink_token_length`设置sink的token数，加上`--max_attention_window_size`设置sliding\_window

### 是否还要RAG?

[谷歌重磅：告别RAG，长上下文的大语言模型无需检索增强](https://mp.weixin.qq.com/s/lOORnoyrA8lqOEXWKxhAQg)

### memory^3

[鄂维南院士领衔新作：大模型不止有RAG、参数存储，还有第3种记忆](https://mp.weixin.qq.com/s/_7mpswMvpg5sRrIKsF-Vvw)

[Memory3 : Language Modeling with Explicit Memory](https://arxiv.org/pdf/2407.01178)

### TSLLM

[没想到！AlphaZero式树搜索也能用来增强大语言模型推理与训练](https://mp.weixin.qq.com/s/k3HuSPGJFJ223thy316eCg)

[AlphaZero-Like Tree-Search can Guide Large Language Model Decoding and Training](https://arxiv.org/pdf/2309.17179)

<https://github.com/waterhorse1/LLM_Tree_Search>

### PEER

[单一作者论文，谷歌提出百万专家Mixture，超越密集前馈、稀疏MoE](https://mp.weixin.qq.com/s/-oocmPNRT5ddvNwIvYxiQA)

[MoE也有Scaling Law，「百万专家」利用率近100%！DeepMind华人挑战MoE极限](https://mp.weixin.qq.com/s/tBe9DZvzB6NB8HhLYP31CQ)

[Mixture of A Million Experts](https://arxiv.org/pdf/2407.04153)

### TTT

[彻底改变语言模型：全新架构TTT超越Transformer，ML模型代替RNN隐藏状态](https://mp.weixin.qq.com/s/QSw9PKB_HhSxeO7agnzBgQ)

[Learning to (Learn at Test Time): RNNs with Expressive Hidden States](https://arxiv.org/pdf/2407.04620)

<https://github.com/test-time-training/ttt-lm-jax>

<https://github.com/test-time-training/ttt-lm-pytorch>

![ttt](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9aadac4cc5ca1e0a81496a960c4b71216bb42cf2%2Fttt.png?alt=media)

[连OpenAI都推不动Scaling Law了？MIT把「测试时训练」系统研究了一遍，发现还有路](https://mp.weixin.qq.com/s/tfrG21mfteVAkjqYx5mDsQ)

[The Surprising Effectiveness of Test-Time Training for Atract Reasoning](https://ekinakyurek.github.io/papers/ttt.pdf)

和linear attn很像

### Axiomatic Training

[6700万参数比肩万亿巨兽GPT-4！微软MIT等联手破解Transformer推理密码](https://mp.weixin.qq.com/s/ySRE3MaEH539vqrWDi6KBQ)

[公理训练让LLM学会因果推理：6700万参数模型比肩万亿参数级GPT-4](https://mp.weixin.qq.com/s/Yera281WG8RNAOrRUYjH6g)

[Teaching Transformers Causal Reasoning through Axiomatic Training](https://arxiv.org/pdf/2407.07612v1)

训练大模型新范式——**公理框架（Axiomatic Framework）**，作者从头开始训练了6700万参数的模型，仅使用了简单的因果链作为训练数据。在推断复杂图表中的因果关系时，**67M模型的表现超越了十亿级参数LLM**，甚至可以与GPT-4相媲美。

### PNN

[AI大模型有望再扩1000倍！剑桥耶鲁康奈尔：PNN是变革关键](https://mp.weixin.qq.com/s/XjU-r2rKGWaatObzdh5TGw)

[Training of Physical Neural Networks](https://arxiv.org/pdf/2406.03372)

### JRT

[小技巧大功效，「仅阅读两次提示」让循环语言模型超越Transformer++](https://mp.weixin.qq.com/s/zdPlK4IHeEiW0ikmQMPJUA)，注：这里的transformer++指的就是llama2的架构

[Just read twice: closing the recall gap for recurrent language models](https://arxiv.org/pdf/2407.05483)

<https://github.com/HazyResearch/prefix-linear-attention>

![jrt](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-587efe5ccd47901908ba8d585e8cb040b6d90834%2Fjrt.png?alt=media)

#### order的重要性

&#x20;

线性attention的recurrent state很小，存储空间有限，往往很难选择要存储哪些state。

如果集合A和集合B有交集，且A元素比B多，先出现集合A的时候，需要存储整个A，而先出现集合B的时候，则只需要存储集合B

#### JRT-Prompt

&#x20;

上下文学习任务以$$(\mathcal{C}, \mathcal{Q}, \mathcal{Y})$$作为输入，$$\mathcal{C}$$为一些上下文来源（如文档或代码存储库），$$\mathcal{Q}$$为给定上下文时对模型的一些问题或请求，$$\mathcal{Y}$$为答案。

* 使用自回归的标准上下文学习模型$$\mathcal{A}$$，输入$$\mathcal{C}$$和$$\mathcal{Q}$$，并根据正确的完成情况$$Y$$来评估生成的输出$$\hat{\mathcal{Y}}=\mathcal{A}(\mathcal{C}, \mathcal{Q})$$。
* JRT-PROMPT：在提示模型输出答案之前会在上下文中重复提示中的信息（如问题和文档），例如$$\hat{\mathcal{Y}}=\mathcal{A}(\mathcal{C}, \mathcal{Q}, \mathcal{C}, \mathcal{Q})$$。在上下文第二次出现时，模型根据完整的上下文来决定存储哪些信息。

示例：

```shell
# 原来的prompt
## input: 
百度是一个xxx公司，1999年，xxxxx，2001年，xxx，2002年，xxxx。百度成立于
## output: 
2001年

# JRT的prompt
## input：
百度成立于哪一年？百度是一个xxx公司，1999年，xxxxx，2001年，xxx，2002年，xxxx。
百度是一个xxx公司，1999年，xxxxx，2001年，xxx，2002年，xxxx。百度成立于
## output: 
2001年
```

#### base的linear transformer

&#x20;

通过$$\phi: \mathbb{R}^d \rightarrow \mathbb{R}^{\tilde{d}}$$，使得$$\phi\left(\boldsymbol{q}\_i\right)^{\top} \phi\left(\boldsymbol{k}\_j\right) \approx \exp \left(\boldsymbol{q}\_i^{\top} \boldsymbol{k}\_j / \sqrt{d}\right) .$$

$$
\boldsymbol{y}\_i=\frac{\phi\left(\boldsymbol{q}*i\right) \sum*{j=1}^i\left(\phi\left(\boldsymbol{k}\_j\right)^{\top} \boldsymbol{v}\_j\right)}{\phi\left(\boldsymbol{q}*i\right) \sum*{j=1}^i \phi\left(\boldsymbol{k}\_j\right)}
$$

先计算k和v的乘法，时间和空间复杂度是$$\mathcal{O}(N d \tilde{d})$$，而softmax attention是$$O\left(N^2 d\right)$$

infer阶段包括两个phases：

* prefill：并行处理prompt，得到两个state：
  * KV-state：$$\boldsymbol{s}*l=\sum*{j=1}^l \phi\left(\boldsymbol{k}\_j\right)^{\top} \boldsymbol{v}\_j$$
  * K-state：$$\boldsymbol{z}*l=\sum*{j=1}^l \phi\left(\boldsymbol{k}\_j\right)^{\top}$$
* decoding：计算如下3步，其中$$\boldsymbol{s}\_i \in \mathbb{R}^{d \times \tilde{d}}$$，$$\boldsymbol{z}\_i \in \mathbb{R}^{\tilde{d}}$$，一个decode step有$$O(1)$$的时间和空间复杂度，而softmax attention加上kv-caching有$$O(N)$$
  * $$\boldsymbol{s}*i=\boldsymbol{s}*{i-1}+\phi\left(\boldsymbol{k}\_i\right)^{\top} \boldsymbol{v}\_i$$
  * $$\boldsymbol{z}*i=\boldsymbol{z}*{i-1}+\phi\left(\boldsymbol{k}\_i\right)^{\top}$$
  * $$\boldsymbol{y}\_i=\frac{\phi\left(\boldsymbol{q}\_i\right) \boldsymbol{s}\_i}{\phi\left(\boldsymbol{q}\_i\right) \boldsymbol{z}\_i}$$

#### JRT-RNN架构

&#x20;

PLA（Prefix Linear Attention）受Prefix-LM启发，主要有2个特点：

* prefix-LM在encoder和decoder的projection是共享的，而JRT-RNN的encoder用$$\boldsymbol{k}\_e, \boldsymbol{v}\_e$$，decoder用$$\boldsymbol{k}\_d, \boldsymbol{v}\_d$$
* 编码器使用了non-causal的线性注意力，而解码器使用标准causal线性注意力。

prefill阶段，并行地对长度为$$l$$的prompt进行如下计算，如果长度$$l< M$$，进行left-pad到$$M$$长度

$$
\boldsymbol{y}*i=\frac{\phi\left(\boldsymbol{q}*i\right)\left(\sum*{j=1}^i \phi\left(\boldsymbol{k}*{d\_j}\right)^{\top} \boldsymbol{v}*{d\_j}+\sum*{j=1}^M \phi\left(\boldsymbol{k}*{e\_j}\right)^{\top} \boldsymbol{v}*{e\_j}\right)}{\phi\left(\boldsymbol{v} q\_i\right)\left(\sum\_{j=1}^i \phi\left(\boldsymbol{k}*{d\_j}\right)^{\top}+\sum*{j=1}^M \phi\left(\boldsymbol{k}\_{e\_j}\right)^{\top}\right)}
$$

初始化如下：

$$
\boldsymbol{s}*M=\sum*{j=1}^M\left(\phi\left(\boldsymbol{k}*{e\_j}\right)^{\top} \boldsymbol{v}*{e\_j}+\phi\left(\boldsymbol{k}*{d\_j}\right)^{\top} \boldsymbol{v}*{d\_j}\right),\ \boldsymbol{z}*M=\sum*{j=1}^M\left(\phi\left(\boldsymbol{k}*{e\_j}\right)^{\top}+\phi\left(\boldsymbol{k}*{d\_j}\right)^{\top}\right)
$$

对于decoding阶段，输出$$y\_i, i>M$$，和base的linear transformer一样，不需要修改

训练loss是ntp和mlm的混合，假设序列长度是$$N$$，前$$M$$个token算MLM，后面的$$N-M$$个token算NTP：

$$
\mathcal{L}=\frac{w\_1 \mathcal{L}*{\mathrm{NTP}}+w\_2 \mathcal{L}*{\mathrm{MLM}}}{w\_1+w\_2}
$$

#### 效率提升

虽然Linear attention比softmax attention要快，但其实不如精心优化的softmax attention（如flash attention），[Simple linear attention language models balance the recall-throughput tradeof](https://arxiv.org/pdf/2402.18668)实现了一个io-aware的kernel（<https://github.com/HazyResearch/based/>），在prefill阶段精细地partitioning & storing暛的matrix-valued recurrent state across warp-registers，PLA参考这个实现了自己的加速版。

### LM-steer

ACL 2024

[LM-Steer: Word Embeddings Are Steers for Language Models](https://arxiv.org/pdf/2305.12798)

<https://github.com/Glaciohound/LM-Steer>

发现词向量空间上的线性变换空间等价于对语言模型生成样式的调节，并以此设计了名为 LM-Steers 的语言模型调控方法。我们发现词向量的这种调节作用普遍存在于各种尺寸的语言模型中。它只需要学习原始模型 0.2% 的参数就可以引导各种风格。在语言模型去毒化和生成情感控制等任务上，LM-Steers 可以实现与最先进的受控生成方法相当或更好的性能，同时保持更好的生成质量平衡。学习到的 LM-Steer 还可以充当文本风格的解读器：它可以解释各种文本样式与词向量哪些维度相关，并且可以用于寻找最具代表性的文本片段。 LM-Steer 可通过显式计算来在不同语言模型之间转移，而不需要额外训练。我们还可以简单地通过缩放 LM-Steer 来实现风格的连续控制，或者实现多种生成控制的组合。

### razerattention

减少kv-cache的大小

[RazorAttention: Efficient KV Cache Compression Through Retrieval Heads](https://www.arxiv.org/pdf/2407.15891)

受anthropic的induction head([In-context Learning and Induction Heads](https://transformer-circuits.pub/2022/in-context-learning-and-induction-heads/index.html))启发:

* short head：对长文没有任何响应
* long head(induction head)：对长文能直接找到对应位置，并且对那附近的词有很强的信号

### MLP-Mixer

[MLP-Mixer: An all-MLP Architecture for Vision](https://arxiv.org/pdf/2105.01601)

### sigmoid attention

[Sigmoid注意力一样强，苹果开始重新审视注意力机制](https://mp.weixin.qq.com/s/4DvgsqkyNcj6HBrAHTygCA)

[Theory, Analysis, and Best Practices for Sigmoid Self-Attention](https://arxiv.org/pdf/2409.04431)

<https://github.com/apple/ml-sigmoid-attention>

证明了从理论上讲，与 softmax 注意力相比，具有sigmoid注意力的Transformer是**通用函数逼近器**，并且受益于**改进的正则化**。

### lstm+transformer

[LSTM+Transformer王炸创新，荣登Nature](https://mp.weixin.qq.com/s/OTwbZEy-v93-fzvh1Z4m2Q)

### AnyGraph

[港大黄超团队推出AnyGraph, 首次揭秘图大模型的Scaling Law](https://mp.weixin.qq.com/s/iqQi4ZP7FdpHnMxZByOyoQ)

[AnyGraph: Graph Foundation Model in the Wild](https://arxiv.org/pdf/2408.10700)

<https://github.com/HKUDS/AnyGraph>

### 液态神经网络

[给机器人装上「虫脑」？非Transformer液态神经网络终于来了！MIT CSAIL负责人创业成果](https://mp.weixin.qq.com/s/oowid3yCpFNTALCvgdSwXg)

Liquid Foundation Models（LFM），1B、3B和40B LFM在各个规模上均能实现SOTA性能，同时保持更小的内存占用和更高效的推理。2020年就有了[Liquid Time-constant Networks](https://arxiv.org/a/2006.04439)

### 差分transformer

[这篇论文非常火！差分Transformer竟能消除注意力噪声，犹如降噪耳机](https://mp.weixin.qq.com/s/hG_S85HkyAkTFAI2iQjl6g)

[Differential Transformer](https://arxiv.org/pdf/2410.05258)

Transformer往往会过度关注不相关的上下文，即注意力噪声（attention noise），而差分Transformer则能放大对答案范围的注意力并消除噪音，从而增强上下文建模的能力。

### SparseLLM

[NeurIPS 2024｜SparseLLM：突破性全局剪枝技术，大语言模型稀疏化革命](https://mp.weixin.qq.com/s/mfdkUFXCsB50iqKgxv7hQQ)

[SparseLLM: Towards Global Pruning of Pre-trained Language Models](https://arxiv.org/a/2402.17946)

<https://github.com/BaiTheBest/SparseLLM>

### minLSTM+minGRU

[图灵奖得主Yoshua Bengio新作：Were RNNs All We Needed?](https://mp.weixin.qq.com/s/ueid-TAw-9OjtKFKA5lqSw)

[Were RNNs All We Needed?](https://arxiv.org/pdf/2410.01201v1)

### MixCon

[北大林宙辰团队全新混合序列建模架构MixCon：性能远超Mamba](https://mp.weixin.qq.com/s/FfCYq1Bx6d7NARKvDPwz2Q)

[MixCon: A Hybrid Architecture for Efficient and Adaptive Sequence Modeling](https://zhouchenlin.github.io/Publications/2024-ECAI-MixCon.pdf)

### self-lengthen

[阿里千问提出Self-Lengthen，大模型实现自迭代扩展输出长度](https://mp.weixin.qq.com/s/1m1hUkhs3altxjYP6IxUVw)

[Language Models Can Self-Lengthen to Generate Long Texts](https://arxiv.org/a/2410.23933)

<https://github.com/QwenLM/Self-Lengthen>

### BLT

[Tokenization不存在了？Meta最新研究，无需Tokenizer的架构来了](https://mp.weixin.qq.com/s/7ju-PjPZVPrBLQ1qFnFoKw)

[Byte Latent Transformer: Patches Scale Better Than Tokens](https://arxiv.org/pdf/2412.09871)

### R2L tokenizer

[从2019年到现在，是时候重新审视Tokenization了](https://mp.weixin.qq.com/s/zmeFYfxWD1nZq_MocgGeeQ)

<https://huggingface.co/spaces/huggingface/number-tokenization-blog>

### memory layers at scale

[Meta探索大模型记忆层，扩展至1280亿个参数，优于MoE](https://mp.weixin.qq.com/s/R5JOMkLVbbI7yPJmdcT2pQ)

[Memory Layers at Scale](https://arxiv.org/pdf/2412.09764)

<https://github.com/facebookresearch/memory>

### TITANS

(toread)

[谷歌新架构一战成名，打破Transformer记忆瓶颈，姚班校友钟沛林新作](https://mp.weixin.qq.com/s/APE_CJ4rEQYV8ngyaTAXWw)

[近8年后，谷歌Transformer继任者「Titans」来了，上下文记忆瓶颈被打破](https://mp.weixin.qq.com/s/EUCZ1oSuyzR9M9X9r5SYBw)

[Titans: Learning to Memorize at Test Time](https://arxiv.org/a/2501.00663v1)

### Miras

[谷歌Transformer过时了？清华姚班校友等三连击，爆改注意力！](https://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==\&mid=2652599608\&idx=2\&sn=788df4ed78ee5ac6b9498d645d57bfcb\&scene=21#wechat_redirect)

[It's All Connected: A Journey Through Test-Time Memorization, Attentional Bias, Retention, and Online Optimization](https://arxiv.org/pdf/2504.13173)

### atlas

[Atlas: Learning to Optimally Memorize the Context at Test Time](https://arxiv.org/pdf/2505.23735)

### Hope+Nested Learning

TITANS的改进版

[终结Transformer统治！清华姚班校友出手，剑指AI「灾难性遗忘」](https://mp.weixin.qq.com/s/1BBuGg95fVAuMbG7S8jg7A)

[Nested Learning: The Illusion of Deep Learning Architectures](https://abehrouz.github.io/files/NL.pdf)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c9f1a1782f32deba080d75df4dd3f548dc324da2%2Fnested-learning.png?alt=media)

嵌套学习将优化器（Optimizer，例如基于动量的优化器）视为一种联想记忆模块。这使我们能从联想记忆的角度重新设计优化算法。传统优化器通常依赖「点积相似度」来衡量样本间相似性，但这一机制无法考虑样本间的复杂关系。通过将优化目标改为标准损失函数，提出了新的动量更新公式，使优化过程对不完美数据更具鲁棒性。

在标准的Transformer模型中，

* 序列建模层承担短期记忆，保存当前上下文信息；
* 而前馈神经网络层则充当长期记忆，存储训练前的知识。

嵌套学习扩展了这一思想，提出「连续记忆系统」（Continuum Memory Systems，CMS），这是一种由多个模块组成的记忆谱系，每个模块以不同频率进行更新，这为持续学习创建了一个更加丰富、高效的记忆系统。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2cc38cc1e2c290190c9f31b4111ea42a425faf88%2Fhope-transformer.png?alt=media)

Hope是一种可自我修改的递归架构，能实现无限层级的上下文内学习。还结合了连续记忆系统，能够扩展到更大的上下文窗口。

...看不懂

### Transformer^2

[Transformer^2要做「活」的AI模型，动态调整权重，像章鱼一样适应环境](https://mp.weixin.qq.com/s/_vdA_KygkFWqFE5Xm6CDRg)

[TRANSFORMER2 : SELF-ADAPTIVE LLMS](https://arxiv.org/pdf/2501.06252)

### MTA

[Multi-Token突破注意力机制瓶颈，Meta发明了一种很新的Transformer](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650963426\&idx=2\&sn=4cb5432a3b547f12136a50fdebbb19f8)

[Multi-Token Attention](https://arxiv.org/pdf/2504.00927)

### Linear MOE

[Linear-MoE：线性注意力遇上混合专家的开源实践](https://mp.weixin.qq.com/s/Li6fP14bdwQweykdV6F3_g)

[Linear-MoE: Linear Sequence Modeling Meets Mixture-of-Experts](https://arxiv.org/a/2503.05447)

<https://github.com/OpenSparseLLMs/Linear-MoE>

### 记忆能力

[最新发现！每参数3.6比特，语言模型最多能记住这么多](https://mp.weixin.qq.com/s/DAoNui-_u0IlBjHl16wn-g)

[How much do language models memorize?](https://arxiv.org/pdf/2505.24832)

### MTLA

[时空压缩！剑桥大学提出注意力机制MTLA：推理加速5倍，显存减至1/8](https://mp.weixin.qq.com/s/uzuASmRbP1hsvxD3eFXL-Q)

[Multi-head Temporal Latent Attention](https://arxiv.org/pdf/2505.13544)

<https://github.com/D-Keqi/mtla>

### StreamBP

[无损减少80%激活值内存，提升5倍训练序列长度，仅需两行代码](https://mp.weixin.qq.com/s/YqQYtKqzCVFKzr3Z7bYHsg)

[StreamBP: Memory-Efficient Exact Backpropagation for Long Sequence Training of LLMs](https://arxiv.org/a/2506.03077)

<https://github.com/Ledzy/StreamBP>

### DnD

[LLM进入「拖拽时代」！只靠Prompt，几秒定制一个大模型，效率飙升12000倍](https://mp.weixin.qq.com/s/geOn7zyJRQwfJra38EjcxQ)

[Drag-and-Drop LLMs: Zero-Shot Prompt-to-Weights](https://arxiv.org/a/2506.16406)

### 2-simplicial attention

[原来Scaling Law还能被优化？Meta这招省token又提效](https://mp.weixin.qq.com/s/vXtPIifdG-k3t_jdYbrg)

[Fast and Simplex: 2-Simplicial Attention in Triton](https://arxiv.org/pdf/2507.02754.pdf)

将Transformer的点积注意力机制泛化到了三线性形式。

### EBT

[新范式来了！新能量模型打破Transformer++扩展上限，训练扩展率快35%](https://mp.weixin.qq.com/s/7o_zlIldFcFJfKY05bQnhg)

[Energy-Based Transformers are Scalable Learners and Thinkers](https://arxiv.org/pdf/2507.02092)

### MoR

[Transformer终结者！谷歌DeepMind全新MoR架构问世，新一代魔王来了](https://mp.weixin.qq.com/s/Uv-F9lIELcSr9PlTo9a6hQ)

[「有望成为Transformer杀手」，谷歌DeepMind新架构MoR实现两倍推理速度](https://mp.weixin.qq.com/s/6IUoCHjm9P_FZllxBlQHPQ)

[Mixture-of-Recursions: Learning Dynamic Recursive Depths for Adaptive Token-Level Computation](https://arxiv.org/pdf/2507.10524)

<https://github.com/raymin0223/mixture_of_recursions> 暂时还没有

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5a16a31a1a2a5c7378992737f5b11c0c1ccc9b21%2Fmor.png?alt=media)

* 每个recurrent step里有固定层数的transformer，router决定每个token是pass through还是exit
* recurrent block参数有一些是共享的
* 一个句子里，有的token需要过多个block，有的不重要的token只需要过很少的block

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-680f077b10d7184e4cd89dbdeac36f3de69cd133%2Fmor-cycle-strategy.png?alt=media)

其实就是哪些层在不同的recurrent block之间是共享的，总共有$$L$$个block，每个block里有$$N\_r$$层

* Cycle Strategy：所有block都共享
* Middle-Cycle Strategy：block里第0层和最后一层不共享，其他的共享。【实验发现这种效果最好】
* Sequence Strategy：参考下图(gpt解释的)
* Middle-Sequence Strategy：把middle-cycle的机制用到sequence strategy里

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0aea4c23fbd63777a4b30ef09aaa8cfe8eab83a0%2Fmor-sequence-cycle.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-97e4b1c1bfb69de2782d9b819cacc5e7d903cfa3%2Fmor-2.png?alt=media)

工程相关：

routing机制：

* Expert-choice routing：每个recursion step，routing选出top k的token继续，这里的k逐个step递减。优点是对计算负载均衡，缺点是会破坏causal，有泄露。
* Token-choice routing：每个token只做一次routing计算，决定它走后面多少个recursion step。优点是不会泄露，但缺点是可能负载不均

Kv caching机制：相比原始transformer都有优化

* recursion-wise KV caching：在某一个recursion step，只有对被路由过来的token做kv cache并计算attention。相比下面的方法，kv cache的io更小，attention flops更低
* recursive KV sharing：在第一个recursion step生成并缓存所有token的kv cache，然后在之后所有层中重复使用。相比上面的方法，kv cache存储更少，io更大，attention flops更高

对比如下：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f217aac3d78c3ba7544999f219420f29e468d9b0%2Fmor-routing-cache-compare.png?alt=media)

### Jet-Nemotron

[英伟达再出手！新型混合架构模型问世，两大创新实现53.6倍吞吐提速](https://mp.weixin.qq.com/s/UD6GxqPHmkItRlvrgJyAqQ)

[Jet-Nemotron: Efficient Language Model with Post Neural Architecture Search](https://www.arxiv.org/pdf/2508.15884)

* Post Neural Architecture Search，PostNAS：一种高效的后训练架构探索与自适应pipeline，可适用于任意预训练的Transformer模型。
* JetBlock：一种新型的线性注意力模块，其性能显著优于Mamba2等设计。

### TPA

[KV缓存不再爆！清华姚期智团队重写注意力维度，长上下文更省更强 | NeurIPS 2025 Spotlight](https://mp.weixin.qq.com/s/g48gyuHhn4NrD6ot8_3P2A)

[Tensor Product Attention Is All You Need](https://arxiv.org/pdf/2501.06425)

<https://github.com/tensorgi/TPA>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0ad402b8693c891a3999aade6adcc676c912b9ed%2Ftpa.png?alt=media)

* $$\mathbf{X} \in \mathbb{R}^{T \times d\_{\text {model }}}$$
* $$\mathbf{Q}, \mathbf{K}, \mathbf{V} \in \mathbb{R}^{T \times h \times d\_h}$$，共$$h$$个head，每个head的dim是$$d\_h=d\_k=d\_{model}/h$$，$$\boldsymbol{W}^O \in \mathbb{R}^{\left(h \cdot d\_h\right) \times d\_{\text {model }}}$$
* $$\mathbf{Q}\_i, \mathbf{K}\_i, \mathbf{V}\_i \in \mathbb{R}^{T \times d\_h}$$表示第$$i$$个head
* $$\boldsymbol{W}\_i^Q, \boldsymbol{W}\_i^K, \boldsymbol{W}*i^V \in \mathbb{R}^{d*{\text {model }} \times d\_k}$$表示第$$i$$个head的权重
* $$\mathbf{Q}\_t, \mathbf{K}\_t, \mathbf{V}\_t \in \mathbb{R}^{h \times d\_h}$$表示第$$t$$个token的Q/K/V
* 向量外积：给定$$\mathbf{a} \in \mathbb{R}^m, \mathbf{b} \in \mathbb{R}^n$$，外积$$\mathbf{a} \otimes \mathbf{b}=\mathbf{C} \in \mathbb{R}^{m \times n}$$，其中$$C\_{i j}=a\_i b\_j$$
* 矩阵外积：矩阵$$\mathbf{C} \in \mathbb{R}^{m \times n}$$，定义$$\operatorname{vec}(\mathbf{C}) \in \mathbb{R}^{m n}$$，即把矩阵flatten成一个长的**列向量**；也可以这么理解，$$\mathbf{C}=\left\[\mathbf{c}\_1, \mathbf{c}\_2, \ldots, \mathbf{c}\_n\right]$$，有n个列向量，那么，$$\operatorname{vec}(\mathbf{C})=\left\[\mathbf{c}\_1^{\top}, \mathbf{c}\_2^{\top}, \ldots, \mathbf{c}\_n^{\top}\right]^{\top}$$

TPA本质就是把$$\mathbf{Q}\_t, \mathbf{K}\_t, \mathbf{V}\_t \in \mathbb{R}^{h \times d\_h}$$进行分解，即$$h\times d\_h$$的矩阵拆成$$h$$的a向量，和$$d\_h$$的b向量的外积，还搞了R组的(a,b)，算R次外积并取平均值。

$$
\begin{gathered}
\mathbf{Q}*t=\frac{1}{R\_Q} \sum*{r=1}^{R\_Q} \mathbf{a}\_r^Q\left(\mathbf{x}\_t\right) \otimes \mathbf{b}\_r^Q\left(\mathbf{x}\_t\right), \quad \mathbf{K}*t=\frac{1}{R\_K} \sum*{r=1}^{R\_K} \mathbf{a}\_r^K\left(\mathbf{x}\_t\right) \otimes \mathbf{b}\_r^K\left(\mathbf{x}\_t\right), \\
\mathbf{V}*t=\frac{1}{R\_V} \sum*{r=1}^{R\_V} \mathbf{a}\_r^V\left(\mathbf{x}\_t\right) \otimes \mathbf{b}\_r^V\left(\mathbf{x}\_t\right),
\end{gathered}
$$

其中，$$\mathbf{a}\_r^Q\left(\mathbf{x}\_t\right), \mathbf{a}\_r^K\left(\mathbf{x}\_t\right), \mathbf{a}\_r^V\left(\mathbf{x}\_t\right) \in \mathbb{R}^h, \mathbf{b}\_r^Q\left(\mathbf{x}\_t\right), \mathbf{b}\_r^K\left(\mathbf{x}\_t\right), \mathbf{b}\_r^V\left(\mathbf{x}\_t\right) \in \mathbb{R}^{d\_h}$$

然后对rope也处理了一下

## OpenAI

### GPT-OSS

<https://github.com/openai/gpt-oss>

* 两个模型，一个是5.1 in 117b的大模型，一个是3.6 in 21b的小模型
* apache 2.0协议，看来可以随便用咯
* 可以自定义reasoning的预算
* 可finetune、有agentic能力
* 原生用混精度fp4训练moe层

gpt\_oss/torch/model.py里有naive版的torch实现，可以拿来理解模型结构

教程列表：<https://cookbook.openai.com/topic/gpt-oss>

finetune方法：<https://cookbook.openai.com/articles/gpt-oss/fine-tune-transfomers>

[model card](https://cdn.openai.com/pdf/419b6906-9da6-406c-a19d-1bb078ac7637/oai_gpt-oss_model_card.pdf)

117b的配置：

* sparse attn（滑动窗口是8）和full attn交替的，共32层
* 总共128专家，每个token激活4个，这个可以自己算一下，和官方model card里的参数是可以对应上的
* rope，并且通过yarn可以从4k外推到128k（rope\_scaling的factor是32）
* attention用的是gqa，q有64个head，kvheads是8，即分成64/8=8组，每组共享kv
* 这个是model card里提到的：每个attn head在softmax分母里还有一个learned bias，类似attention sink的作用，让attention可以起到对任何token都pay no attention的作用

#### 模型配置

```python
class ModelConfig:
    num_hidden_layers: int = 36
    num_experts: int = 128
    experts_per_token: int = 4
    vocab_size: int = 201088
    hidden_size: int = 2880
    intermediate_size: int = 2880
    swiglu_limit: float = 7.0
    head_dim: int = 64
    num_attention_heads: int = 64
    num_key_value_heads: int = 8
    sliding_window: int = 128
    initial_context_length: int = 4096
    rope_theta: float = 150000.0
    rope_scaling_factor: float = 32.0
    rope_ntk_alpha: float = 1.0
    rope_ntk_beta: float = 32.0
```

#### attention部分

几个点：

* 可以看下原始streaming-llm的实现，核心是在kvcache里的这段<https://github.com/mit-han-lab/streaming-llm/blob/main/streaming_llm/kv_cache.py>，即cache中一直保留前start\_size个token（sink token），还有当前token往前window\_size个token

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-343123f1d79072776760219bbc0c75459cfabefe%2Fstreaming-llm-kvcache.jpeg?alt=media)

* oss是用到了attention bias的，可以看代码self.qkv是torch.nn.Linear，而这个类默认的参数就是bias=True，这个和hf的transformers里的实现也对上了

```python

class AttentionBlock(torch.nn.Module):
    def __init__(
        self,
        config: ModelConfig,
        layer_idx: int = 0,
        device: torch.device | None = None,
    ):
        # 120b的模型head_dim是64
        self.head_dim = config.head_dim
        # 120b的模型num_attention_heads是64
        self.num_attention_heads = config.num_attention_heads
        # GQA的配置，K有多少个head，V有多少个head
        # num_attention_heads / num_key_value_heads就是分成多少组
        # 120b的模型num_key_value_heads是8
        self.num_key_value_heads = config.num_key_value_heads
        # 每隔一层搞一下sliding window
        self.sliding_window = config.sliding_window if layer_idx % 2 == 0 else 0
        # 实现attn sink的功能，长度为64，后面会拆成8*8
        self.sinks = torch.nn.Parameter(
            torch.empty(config.num_attention_heads, device=device, dtype=torch.bfloat16)
        )
        # 正常的rmsnorm
        self.norm = RMSNorm(config.hidden_size, device=device)
        # Q K V三个矩阵，Q的head数是64，K和V的head数都是8，这里是head_dim * head_num
        qkv_dim = config.head_dim * (
            config.num_attention_heads + 2 * config.num_key_value_heads
        )
        # 同上，对应的Q K V三个矩阵
        self.qkv = torch.nn.Linear(
            config.hidden_size, qkv_dim, device=device, dtype=torch.bfloat16
        )
        # attn算完后，还是和query一样的64个head
        self.out = torch.nn.Linear(
            config.head_dim * config.num_attention_heads,
            config.hidden_size,
            device=device,
            dtype=torch.bfloat16,
        )
        # 1/sqrt(head_dim)
        self.sm_scale = 1 / math.sqrt(config.head_dim)
        # rope，包括了yarn外推的功能
        self.rope = RotaryEmbedding(
            config.head_dim,
            config.rope_theta,
            torch.float32,
            initial_context_length=config.initial_context_length,
            scaling_factor=config.rope_scaling_factor,
            ntk_alpha=config.rope_ntk_alpha,
            ntk_beta=config.rope_ntk_beta,
            device=device,
        )

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        # pre-norm
        t = self.norm(x)
        qkv = self.qkv(t)
        # 就是把q k v从qkv里按顺序截取出来
        # 其中contiguous是把tensor转为内存连续存储的形式
        q = qkv[:, : self.num_attention_heads * self.head_dim].contiguous()
        k = qkv[
            :,
            self.num_attention_heads
            * self.head_dim : (self.num_attention_heads + self.num_key_value_heads)
            * self.head_dim,
        ].contiguous()
        v = qkv[
            :,
            (self.num_attention_heads + self.num_key_value_heads)
            * self.head_dim : (self.num_attention_heads + 2 * self.num_key_value_heads)
            * self.head_dim,
        ].contiguous()
        # seq_len, 8, 64/8, head_dim
        q = q.view(
            -1,
            self.num_key_value_heads,
            self.num_attention_heads // self.num_key_value_heads,
            self.head_dim,
        )
        # seq_len, 8, head_dim
        k = k.view(-1, self.num_key_value_heads, self.head_dim)
        v = v.view(-1, self.num_key_value_heads, self.head_dim)
        # q k过rope，v不用，因为只是对算attn score时考虑位置信息
        q, k = self.rope(q, k)
        t = sdpa(q, k, v, self.sinks, self.sm_scale, self.sliding_window)
        # 最终映射到了hidden_size，即d
        t = self.out(t)
        # residual连接，因为是pre-norm，所以这里不用norm了
        t = x + t
    
def sdpa(Q, K, V, S, sm_scale, sliding_window=0):
    # sliding_window == 0 means no sliding window
    # q_mult就是GQA里的多少组，即64/8=8
    # seq_len, 8, 64/8, head_dim
    n_tokens, n_heads, q_mult, d_head = Q.shape 
    assert K.shape == (n_tokens, n_heads, d_head)
    assert V.shape == (n_tokens, n_heads, d_head)
    # 把每个head的向量复制q_mult份
    K = K[:, :, None, :].expand(-1, -1, q_mult, -1)
    V = V[:, :, None, :].expand(-1, -1, q_mult, -1)
    # S是64，拆成8 * 8，并复制seq_len份
    S = S.reshape(n_heads, q_mult, 1, 1).expand(-1, -1, n_tokens, -1)
    # 搞一个全-inf的矩阵，然后把上三角取出来，即下三角都是0，上三角都是-inf
    mask = torch.triu(Q.new_full((n_tokens, n_tokens), -float("inf")), diagonal=1)
    if sliding_window > 0:
        # 把sliding_window外(即只有[i-wind,i]是可见的)的也mask成-inf
        mask += torch.tril(
            mask.new_full((n_tokens, n_tokens), -float("inf")), diagonal=-sliding_window
        )
    # 输入：q和k都是seq_len, 8, 64/8, head_dim
    # 输出：8, 64/8, seq_len, seq_len，即把d（即head_dim）消掉了
    QK = torch.einsum("qhmd,khmd->hmqk", Q, K)
    QK *= sm_scale
    QK += mask[None, None, :, :]
    # 把sink拼进来，sink是[8, 64/8, seq_len, 1]
    QK = torch.cat([QK, S], dim=-1)
    # 算softmax的时候带上sink
    W = torch.softmax(QK, dim=-1)
    # 把sink扔掉
    W = W[..., :-1]
    # W是8, 64/8, seq_len, seq_len
    # V是seq_len, 8, 64/8, head_dim
    # 输出seq_len, 8, 64/8, head_dim
    attn = torch.einsum("hmqk,khmd->qhmd", W, V)
    # reshape成seq_len, 8*64/8*head_dim=4096
    return attn.reshape(n_tokens, -1)
```

#### MOE部分

```python
# 这个是一个特殊的swiglu，多了clamp、最后+1
# 这里的1.702来自于[Gaussian Error Linear Units (GELUs)](https://arxiv.org/pdf/1606.08415)
def swiglu(x, alpha: float = 1.702, limit: float = 7.0):
    # 输入的x是[b,4,2d]，其实是当成2个
    # 最后一维的偶数下标当成gating
    # 最后一维的奇数下标元素当成linear
    # 在一个函数里实现了swiglu(gate, x)的操作
    x_glu, x_linear = x[..., ::2], x[..., 1::2]
    # Clamp the input values
    x_glu = x_glu.clamp(min=None, max=limit)
    x_linear = x_linear.clamp(min=-limit, max=limit)
    out_glu = x_glu * torch.sigmoid(alpha * x_glu)
    # Note we add an extra bias of 1 to the linear layer
    return out_glu * (x_linear + 1)

class MLPBlock(torch.nn.Module):
    def __init__(
        self,
        config: ModelConfig,
        device: torch.device | None = None,
    ):
        super().__init__()
        # 120b的模型是num_local_experts=128，这里是简化实现，估计也是128
        self.num_experts = config.num_experts
        # 120b的模型是experts_per_token=4
        self.experts_per_token = config.experts_per_token
        # 120b的模型是swiglu_limit=7.0
        self.swiglu_limit = config.swiglu_limit
        self.world_size = dist.get_world_size() if dist.is_initialized() else 1
        self.norm = RMSNorm(config.hidden_size, device=device)
        # d, expert数
        self.gate = torch.nn.Linear(
            config.hidden_size, config.num_experts, device=device, dtype=torch.bfloat16
        )
        assert config.intermediate_size % self.world_size == 0
        # expert数, 2d, d
        self.mlp1_weight = torch.nn.Parameter(
            torch.empty(
                (
                    config.num_experts,
                    config.intermediate_size * 2 // self.world_size,
                    config.hidden_size,
                ),
                device=device,
                dtype=torch.bfloat16,
            )
        )
        # expert数, 2d
        self.mlp1_bias = torch.nn.Parameter(
            torch.empty(
                (config.num_experts, config.intermediate_size * 2 // self.world_size),
                device=device,
                dtype=torch.bfloat16,
            )
        )
        # expert数, d, d
        self.mlp2_weight = torch.nn.Parameter(
            torch.empty(
                (
                    config.num_experts,
                    config.hidden_size,
                    config.intermediate_size // self.world_size,
                ),
                device=device,
                dtype=torch.bfloat16,
            )
        )
        # expert数, d, d
        self.mlp2_bias = torch.nn.Parameter(
            torch.empty(
                (config.num_experts, config.hidden_size),
                device=device,
                dtype=torch.bfloat16,
            )
        )

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        t = self.norm(x)
        # 这里把attn输出的d映射到了expert数
        g = self.gate(t)
        # 取出最大的4个，以及对应下标
        experts = torch.topk(g, k=self.experts_per_token, dim=-1, sorted=True)
        expert_weights = torch.nn.functional.softmax(experts.values, dim=1)
        expert_indices = experts.indices

        # MLP #1
        # 在[expert数, 2d, d]里把这4个expert对应的拿出来，得到[4, 2d, d]
        mlp1_weight = self.mlp1_weight[expert_indices, ...]
        mlp1_bias = self.mlp1_bias[expert_indices, ...]
        # b, 4, 2d, d和b, d乘，得到b, 4, 2d
        t = torch.einsum("beck,bk->bec", mlp1_weight, t) + mlp1_bias
        t = swiglu(t, limit=self.swiglu_limit)

        # MLP #2
        mlp2_weight = self.mlp2_weight[expert_indices, ...]
        mlp2_bias = self.mlp2_bias[expert_indices, ...]
        # swiglu后正常再过一层mlp
        t = torch.einsum("beck,bek->bec", mlp2_weight, t)
        if self.world_size > 1:
            dist.all_reduce(t, op=dist.ReduceOp.SUM)
        t += mlp2_bias

        # Weighted sum of experts
        t = torch.einsum("bec,be->bc", t, expert_weights)

        return x + t
```

## Gemmini\&Gemma系列

### Gemini 1.0

[Gemini: a family of highly capable multimodal models](https://arxiv.org/pdf/2312.11805.pdf)

### Gemini 1.5

[谷歌Gemini 1.5深夜爆炸上线，史诗级多模态硬刚GPT-5！最强MoE首破100万极限上下文纪录](https://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==\&mid=2652444347\&idx=1\&sn=51ae7e3e100e24fd49b0f75924e74695\&chksm=f093b48285369da37b6148803e41fb272c51c013bc31ac1ba6b09672ff1efd38269af1192b53\&scene=132\&exptype=timeline_recommend_article_extendread_samebiz#wechat_redirect)

[Gemini 1.5: Unlocking multimodal understanding across millions of tokens of context](https://storage.googleapis.com/deepmind-media/gemini/gemini_v1_5_report.pdf)

* 更新的 Gemini 1.5 Pro，其大部分功能和基准都超过了 2 月份的版本
* Gemini 1.5 Flash，一种更轻量级的变体，专为提高效率而设计，并且在性能方面的减益很小。

此前的SOTA模型能处理\*\*20万(200K)**的token，Gemini 1.5能稳定处理**100万(1M)**的token（极限为**1000万(10M)\*\*的token），能够处理11小时的音频、1小时的视频、超过3w行的代码库、超过70w个单词

### gemma

<https://blog.google/technology/developers/gemma-open-models/>

[Gemma: Open Models Based on Gemini Research and Technology](https://storage.googleapis.com/deepmind-media/gemma/gemma-report.pdf)

代码：

<https://github.com/huggingface/transformers/blob/main/src/transformers/models/gemma/modeling_gemma.py>

### codegemma

* 专门处理代码补全和代码生成任务的 7B 预训练变体
* 用于代码聊天和指令跟随的 7B 指令调优变体
* 在本地计算机上运行快速代码补全的 2B 预训练变体

[CodeGemma: Open Code Models Based on Gemma](https://storage.googleapis.com/deepmind-media/gemma/codegemma_report.pdf)

![codegemma](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-81219fe761d7cb54598269ea623bf24dc90b2e00%2Fcodegemma.png?alt=media)

### RecurrentGemma

[RecurrentGemma: Moving Past Transformers for Efficient Open Language Models](https://storage.googleapis.com/deepmind-media/gemma/recurrentgemma-report.pdf)

在infer阶段，需要检索**KV cache**，并加载到内存中，而KV cache会随着序列长度线性增长。[Longformer: The Long-Document Transformer](https://arxiv.org/pdf/2004.05150)通过**local attention**来降低cache大小，但模型效果会变差。recurrent gemma将输入序列**压缩到一个固定大小的state中**，从而不会降低效果，对长序列能降低内存占用并高效infer。

基于Griffin架构，将**门控线性递归**与**本地滑动窗口注意力**混合在一起，在生成长序列时实现快速推理，相比gemma：

* 减少内存用量：内存要求越低，就越能在内存有限的设备（例如单个 GPU 或 CPU）上生成较长的样本。
* 吞吐量较高：能够以明显较高的batch\_size执行推理，这意味着每秒可以生成更多tokens，尤其是在生成长序列时。

相比原始griffin：

* 对输入emb**乘以一个常数**（等于model width(下表中的2560)的平方根，如下代码所示）。输入和输出的emb是tied的，这个常数**没有乘到output上去**。gemma里也有一个类似的因子
* 对**recurrent layers（RG-LRU）在训练时并没有进行weight decay(本质是L2正则化，参考**[**https://zhuanlan.zhihu.com/p/607909453**](https://zhuanlan.zhihu.com/p/607909453)**)**，当bp到**开方操作**时，为了训练稳定会加最大值为1000的**梯度clip**

```python
def __init__(self, ...):
    #...
    self.register_buffer(
        "normalizer", torch.tensor(self.config.hidden_size**0.5, 
            dtype=torch.bfloat16), persistent=False
    )
def forward(self, ...):
    #...
    if inputs_embeds is None:
        inputs_embeds = self.embed_tokens(input_ids)

    hidden_states = inputs_embeds

    if use_cache and inputs_embeds.shape[1] != 1:  
        # TODO let's maybe only call in the `generate`?
        self._setup_cache(self.config, hidden_states.shape[0], 
        hidden_states.device, hidden_states.dtype)

    if cache_position is None:
        cache_position = torch.arange(hidden_states.shape[1], 
        device=hidden_states.device)
    if position_ids is None:
        position_ids = cache_position.unsqueeze(0)

    causal_mask = self._update_causal_mask(attention_mask, 
        inputs_embeds, cache_position)

    ## 这里就是那个因子
    hidden_states = hidden_states * self.normalizer.type(hidden_states.dtype)
```

具体参数：

| 变量                          | 大小                                 |
| --------------------------- | ---------------------------------- |
| 总参数量                        | 2.7b                               |
| 非emb参数量                     | 2.0b                               |
| emb参数量                      | 0.7b                               |
| vocab size                  | 256k                               |
| model width                 | 2560                               |
| rnn width                   | 2560                               |
| MLP expansion factor        | 3，即intermediate\_size=2560\*3=7680 |
| Depth                       | 26                                 |
| Attention heads             | 10                                 |
| local attention window size | 2048                               |

训练：

<https://github.com/huggingface/transformers/blob/main/src/transformers/models/recurrent_gemma/modeling_recurrent_gemma.py>

在线推理的C++实现(cpu版本)

<https://github.com/google/gemma.cpp>

### gemma-2

[单张A100全精度推理！谷歌明星开源模型Gemma 2上新9B/27B，挑战3140亿Grok-1](https://mp.weixin.qq.com/s/z3h1eExDgItDf38Xar6yPg)

[谷歌「诚意之作」，开源9B、27B版Gemma2，主打高效、经济！](https://mp.weixin.qq.com/s/0Iy3gOlWRLKRCMnrXQavaA)

<https://huggingface.co/collections/google/gemma-2-release-667d6600fd5220e7b967f315>

<https://blog.google/technology/developers/google-gemma-2/>

[Gemma 2: Improving Open Language Models at a Practical Size](https://arxiv.org/pdf/2408.00118)

用了RoPE和GeGLU，网络结构上：

* **局部滑动窗口**和**全局注意力**：在每隔一层中交替使用局部滑动窗口注意力([Longformer: The long-document transformer](https://github.com/daiwk/collections/tree/master/posts/\(https:/arxiv.org/pdf/2004.05150\)))和全局注意力（[Effective Approaches to Attention-based Neural Machine Translation](https://arxiv.org/pdf/1508.04025)），局部注意力层的滑动窗口大小设置为4096个token，而全局注意力层的跨度设置为8192个token。
* **Logit软封顶**：根据**Gemini 1.5的方法**，研究团队在每个注意力层和最终层限制logit，使得logit的值保持在$$−soft\_cap,+soft\_cap$$之间。对于9B和27B模型，注意力对数封顶设置为50.0，最终对数封顶设置为30.0。截至本文发表时，注意力logit软封顶与常见的FlashAttention实现不兼容，因此他们已从使用FlashAttention的库中移除了此功能。对模型生成进行了有无注意力logit软封顶的消融实验，发现大多数预训练和后期评估中，生成质量几乎不受影响。本文中的所有评估均使用包含注意力logit软封顶的完整模型架构。然而，某些下游性能可能仍会受到此移除的轻微影响。

$$
\text { logits } \leftarrow \text { soft\_cap } \* \text { tanh(logits } / \text { soft\_cap) }
$$

* **RMSNorm**进行post-norm和pre-norm。为了稳定训练，用RMSNorm对每个变换子层、注意力层和前馈层的输入和输出进行归一化。
* **gqa**：27B和9B模型均使用GQA，num\_groups = 2，基于消融实验表明在保持下游性能的同时提高了推理速度。

<https://github.com/huggingface/transformers/blob/v4.42.3/src/transformers/models/gemma2/modeling_gemma2.py>

[Gemma Scope: Open Sparse Autoencoders Everywhere All At Once on Gemma 2](https://storage.googleapis.com/gemma-scope/gemma-scope-report.pdf)

<https://huggingface.co/google/gemma-scope>

### datagemma

[整合海量公共数据，谷歌开源AI统计学专家DataGemma](https://mp.weixin.qq.com/s/Fr8I9VwiyHcMnhrWMcgDeQ)

[Knowing When to Ask - Bridging Large Language Models and Data](https://docs.datacommons.org/papers/DataGemma-FullPaper.pdf)

提出了一种名为\*\*检索交错生成（Retrieval Interleaved Generation，RIG）\*\*的新方法，可以可靠地将Data Commons中的公共统计数据整合到LLM的响应中。RIG是一种受工具启发的方法，可以将统计数据标记与适合从Data Commons检索的自然语言问题交错。

为了获得这种能力，他们利用Gemini 1.5的帮助生成了一个指令-响应数据集，并在此基础上对LLM进行了微调。RIG方法将事实准确性从5-7%提高到了约58%。

### gemini 2.0

[OpenAI深夜被狙，谷歌Gemini 2.0掀翻牌桌！最强智能体组团击毙o1](https://mp.weixin.qq.com/s/RfTGAlYVlH1RlTzuzugrKQ)

[谷歌“狙击”OpenAI，发布新一代大模型！主打Agent+多模态](https://mp.weixin.qq.com/s/c39MbjULBW5M_8vdO-VUXQ)

[我扒出了Gemini 2.0超实时多模态幕后的黑科技，第六代TPU芯片Trillium！](https://mp.weixin.qq.com/s/BZpL9PwvCWmR4R6h2502Kw)

[谷歌逆风翻盘暴击OpenAI，90天王者归来！44页报告押注25年三大技术前沿](https://mp.weixin.qq.com/s/b0yqPre6wMlP59cH6Qrbdw)

[data and ai trends report 2024](https://services.google.com/fh/files/misc/data_ai_trends_report.pdf)

### gemini 2.0 flash thinking

[推理最强也最快，谷歌发布Gemini 2.0 Flash Thinking，全面超越o1-preview](https://mp.weixin.qq.com/s/NkTP17j6HYIz95sHxCameA)

<https://ai.google.dev/gemini-api/docs/thinking-mode?hl=zh-cn>

<https://colab.research.google.com/github/google-gemini/cookbook/blob/main/gemini-2/thinking.ipynb>

我自己复制的一个：<https://colab.research.google.com/github/daiwk/llms_new/blob/main/gemini-2/thinking.ipynb>

对应的github：<https://github.com/daiwk/llms_new/blob/main/gemini-2/thinking.ipynb>

### gemini 2.5

[DeepSeek逼出谷歌新推理模型：40分优势超GPT4.5登顶竞技场，支持原生多模态，但依然败给了“竹竿问题”](https://mp.weixin.qq.com/s/U75bF7gQ6wlQlaflQvrIQQ)

[谷歌终于登顶一次了！最强推理模型Gemini 2.5 Pro实测体验，真的有点东西](https://mp.weixin.qq.com/s/unlZoM5oCH3HCw2kxy6X_w)

[谷歌首款混合推理Gemini 2.5登场，成本暴降600%！思考模式一开，直追o4-mini](https://mp.weixin.qq.com/s/Tx6dbqKwPTx9dqAW1xzT3w)

Gemini 2.5 Pro的上下文窗口是1M tokens，并且支持原生多模态：可以理解庞大数据集并处理来自不同信息源的复杂问题，包括文本、音频、图像、视频，甚至是整个代码库。2.5 pro擅长创造视觉上引人注目的Web应用程序和智能体代码。

[刚刚，Gemini 2.5 Pro升级，成编程模型新王](https://mp.weixin.qq.com/s/6wv6tUVYsJPfaN-7HxUjoQ)

[Gemini 2.5: Pushing the Frontier with Advanced Reasoning, Multimodality, Long Context, and Next Generation Agentic Capabilities.](https://arxiv.org/pdf/2507.06261)

模型架构是sparse moe，支持多模态输入，context可以达到1M+，flash是对pro的蒸馏，在多个8906卡TPUv5p集群上训练，引入一些容错和监控机制，缓解了SDC(silent data corruption)错误。别的细节没讲了…

### gemma-3

[Google 发布多模态开源模型 Gemma 3：性能与功能全面升级，附技术报告英中对照版](https://mp.weixin.qq.com/s/WyBNvIsPKMGjSMk_F2Xrpg)

* 架构设计：Gemma 3基于decoder-only架构，与前两代Gemma模型类似。但在细节上有所创新，例如采用GQA和RMSNorm，还引入了**QK-norm**替代Gemma 2中的软封顶机制，以提升性能和稳定性。
* 训练策略：Gemma 3的训练过程包括预训练和指令微调两个阶段。在预训练阶段，模型使用知识蒸馏技术，从大规模数据中学习语言和视觉表示。训练数据涵盖了文本、图像以及多语言等多种类型，且经过严格的筛选和清洗，以减少有害内容和低质量数据的影响。在指令微调阶段，Gemma 3 采用了新颖的训练方法，重点关注数学、聊天、指令遵循和多语言等能力的提升。

[一台3090就能跑Gemma 3 27B！谷歌发布Gemma 3全系QAT版模型](https://mp.weixin.qq.com/s/OlfazHQpsrkQ_CtyQvXbJg)

### gemini-cli

[谷歌杀疯！百万token神器免费开源，Claude和Codex都顶不住了？](https://mp.weixin.qq.com/s/5n3wKaRqtMhpeemV3RWXOA)

<https://github.com/google-gemini/gemini-cli>

### gemma-3n

[谷歌开源Gemma 3n：2G内存就能跑，100亿参数内最强多模态模型](https://mp.weixin.qq.com/s/64QtpHWYTwxZkCTHY74JQg)

<https://ai.google.dev/gemma/docs/gemma-3n>

<https://huggingface.co/collections/google/gemma-3n-685065323f5984ef315c93f4>

<https://developers.googleblog.com/zh-hans/introducing-gemma-3n-developer-guide/>

进一步地，可以开发一个ios的app

* <https://ai.google.dev/edge/mediapipe/solutions/genai/llm_inference/ios?hl=zh-cn>
* <https://github.com/google-ai-edge/mediapipe-samples/tree/main/examples/llm_inference/ios>

安卓的：<https://github.com/google-ai-edge/gallery>

用JAX和ML Pathways训练的模型

* 多模态：原生支持图像、音频、视频和文本输入和文本输出，输入最多可以有32K的tokens
* 内存优化：
  * E2B：原始参数数量5B，运行内存占用2GB，与传统的2B相当
  * E4B：原始参数数量8B，运行内存占用3GB，与传统的4B相当
* 架构：
  * MatFormer架构：提升infer速度、减小infer模型大小
  * PLE(Per-Layer Embedding)：提高内存效率
  * KV Cache Sharing：加速首token生成时间(time-to-first-token)
  * USM：通用语音模型（USM）的高级音频编码器
  * MobileNet-v5：视觉编码器
* 质量提升：在多语言（支持140种文本语言和35种语言的多模态理解）、数学、编码和推理方面均实现了质量提升。

#### MatFormer

&#x20;

[MatFormer: Nested Transformer for Elastic Inference](https://arxiv.org/pdf/2310.07707)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4aa6f3919be12b92df150c807ef143f330cf0df5%2Fmatformer.png?alt=media)

对FFN进行处理，原来中间的dim是$$d\_{ff}$$，取其中一小段搞出一些更小的，即$${d\_{ff}/8, d\_{ff}/4, d\_{ff}/2, d\_{ff}}$$，针对每层都是这个dim的各有一个transformer，共4个transformer，

* 训练：每条样本从这4个trans里随机选一个去训练
* infer：通过mix'n'match的启发式策略搞出给infer用的子网络，即每一层的粒度尽量慢慢变大，不要忽大忽小，即从2变到3比从1直接到4要好

gemma-3n里的两种模型配置

* E4B：35层，7个block，每个block里5层(4层sliding attn+1层full attn)，每层是8xFFN（即2048\*8=16384）
* E2B：30层，6个block，每个block里5层(4层sliding attn+1层full attn)，每层是4xFFN（即2048\*4=8192）

用户可以自己通过通过这个[代码](https://colab.research.google.com/github/google-gemini/gemma-cookbook/blob/main/Gemma/\[Gemma_3n]MatFormer_Lab.ipynb)来用mix'n'match搞一个自定义的模型，即模型里intermediate\_size这个参数，为list的时候就是指定每层的dim，否则就是每层都用这个dim

#### PLE

&#x20;

PLE允许很大一部分参数（与每层相关的嵌入）在CPU上加载并高效计算，即只有核心Transformer权重（E2B约为2B，E4B约为4B）需要存储在通常较为受限的加速器内存 (VRAM) 中。 原文讲得比较模糊，可以参考<https://www.reddit.com/r/LocalLLaMA/comments/1kuy45r/gemma_3n_architectural_innovations_speculation/>，看config里的text\_config里有laurel\_rank可能和[LAuReL: Learned Augmented Residual Layer](https://arxiv.org/pdf/2411.07501v3)有关

还有另一种Conditional parameter loading，可以skip掉一些参数的loading，并且是在运行时决定的。

#### KV Cache Sharing

&#x20;

优化了模型处理初始输入处理阶段（即prefill阶段）的方式，来自局部和全局注意力机制的中间层的k和v将直接与所有顶层共享，与Gemma3 4B相比，prefill性能显著提升了两倍，即模型能够比以往更快地提取和理解较长的prompt。

#### USM

&#x20;

[Google USM: Scaling Automatic Speech Recognition Beyond 100 Languages](https://arxiv.org/a/2303.01037)

每160毫秒的音频生成一个token（约每秒6个token）：

* 自动语音识别 (ASR)：直接在设备上实现高质量的语音到文本的转录
* 自动语音翻译 (AST)：将口语翻译成另一种语言的文本。英语与西班牙语、法语、意大利语和葡萄牙语之间的翻译AST效果尤为出色，可以通过如下的cot提升翻译效果

```xml
<bos><start_of_turn>user
Transcribe the following speech segment in Spanish, 
then translate it into English: 
<start_of_audio><end_of_turn>
<start_of_turn>model
```

#### MobileNet-v5

&#x20;

MobileNet-v5支持

* 多种输入分辨率：原生支持256x256、512x512和768x768像素的分辨率。
* 广泛的视觉理解：在广泛的多模式数据集上进行联合训练，在各种图像和视频理解任务中表现出色。
* 高吞吐量：在Google Pixel上每秒处理高达60帧，实现实时设备视频分析和交互式体验。

其架构创新包括：

* [MobileNetV4 -- Universal Models for the Mobile Ecosystem](https://arxiv.org/a/2404.10518)里的Universal Inverted Bottlenecks和Mobile MQA
* 显著扩大的架构：采用混合深度金字塔模型，比最大的MobileNet-V4变体大10倍。
* 一种新颖的多尺度(Multi-Scale)融合VLM适配器，可提高token的质量，从而提高准确性和效率。

蒸馏后的MobileNet-V5-300M比基线Gemma3里的SoViT（用SigLip训练，没蒸馏）效果更好。在Google Pixel Edge TPU上，在量化的情况下实现了13倍的加速（不使用量化的情况下为6.5倍），所需参数减少了46%，内存占用减少了4倍，同时在视觉语言任务上实现了显著更高的准确率。

要跑gemma3n需要`pip3 install timm transformers==4.53.0`

### Gemini 3

[Gemini 3深夜来袭：力压GPT 5.1，大模型谷歌时代来了](https://mp.weixin.qq.com/s/m5DnddinQuH_SxXEyUbYaA?poc_token=HCNkHWmjIJiuSBFCEk9z-r8_RnhTld9axD37VFCy)

[拆解Gemini 3：Scaling Law的极致执行与“全模态”的威力【101直播】](https://mp.weixin.qq.com/s/T6-xzbPm1ZftgK1wzi4l2A)

Gemini 3 Pro：

* 以1501 Elo的突破性高分登顶LMArena Leaderboard，在Humanity’s Last Exam（在不使用任何工具的情况下达到 37.5%）和GPQA Diamond（91.9%）上获得最高分，展示了博士级的推理能力。它还在数学方面为前沿模型树立了新标准，在MathArena Apex上达到了23.4%的最新SOTA水平。
* 在多模态上，在MMMU-Pro和Video-MMMU上分别斩获了81%和87.6%的高分，这意味着无论是解析复杂的科学图表还是理解动态视频流，它都游刃有余。
* 在SimpleQA Verified上取得了72.1%的成绩，显示出在事实准确性上的巨大进步

Gemini 3 Deep Think：

* 在Humanity's Last Exam（不使用工具的情况下得分41.0%）和 GPQA Diamond（得分93.8%）上的表现均优于Gemini 3 Pro
* 在ARC-AGI-2（代码执行，已通过ARC Prize验证）上也取得了前所未有的45.1%的得分，展现了其解决全新挑战的能力。

## Grok

### grok1

[马斯克开源Grok-1：3140亿参数迄今最大，权重架构全开放，磁力下载](https://mp.weixin.qq.com/s/hvt5zwoazDx26KOaKuTs_w)

<https://github.com/xai-org/grok-1>

[马斯克发布Grok 1.5！编码和数学能力大幅提升](https://mp.weixin.qq.com/s/QwM1uk61o1DMpe5EPq9giQ)

* 上下文窗口提升16倍，达到128k
* 不使用通用的Python语言+Pytorch框架，采用分布式训练架构，使用Rust、JAX+Kubernetes构建。
* 提出了自定义训练协调器，可自动检测到有问题的节点，然后剔除。
* 优化了checkpointing、数据加载和训练重启等流程，最大限度地减少故障停机时间。

[马斯克的首款多模态大模型来了，GPT-4V又被超越了一次](https://mp.weixin.qq.com/s/2GDjZS6ctayAF8e8eFb3CQ)

Grok-1.5V: <https://x.ai/blog/grok-1.5v>

grok-2：[Grok-2来了，能生图识图、性能比肩GPT-4o，马斯克：发展猛如火箭](https://mp.weixin.qq.com/s/nBaY2srcMSzvEoecOyh1Cg)

[目前对Grok 3分析最为透彻的一篇文章](https://mp.weixin.qq.com/s/h5cFZnU4T7K7YscMYc61pQ)

### grok2.5

[刚刚，马斯克开源Grok 2.5：中国公司才是xAI最大对手](https://mp.weixin.qq.com/s/SfS8ZxExG5EdJph4p8mH6A)

<https://huggingface.co/xai-org/grok-2>

## DeepSeek系列

### DeepSeek-V2

[一块钱100万token，超强MoE模型开源，性能直逼GPT-4-Turbo](https://mp.weixin.qq.com/s/tAA8XUbU__9FgvEvXxsykw)

<https://github.com/deepseek-ai/DeepSeek-V2>

[DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model](https://arxiv.org/pdf/2405.04434)

[从MHA到MLA看Attention优化：谈谈DeepSeek拼多多级的推理价格](https://mp.weixin.qq.com/s/l2uUXGQ-8Rj_nI3JG5lZ_g)

[缓存与效果的极限拉扯：从MHA、MQA、GQA到MLA](https://spaces.ac.cn/archives/10091)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d6c6a383b5fd9be043a3c57c44f2d8c2254dfebe%2Fmla-deepseekmoe.png?alt=media)

主要包括2部分：

#### MLA

输入第$$t$$个token $$h\_t$$，分别经过一个$$W^Q$$、$$W^K$$和$$W^V$$得到$$d$$维的$$q\_t=W^Qh\_t$$、$$k\_t=W^Kh\_t$$和$$v\_t=W^Vh\_t$$，split成$$n\_h$$份，每份的dim是$$d\_h=d/n\_h$$，**每一份就是图里的一条竖线**

* MHA(Multi-head Attention)：每个head各自算注意力，再拼接
* GQA(Grouped-Query Attention)：出自[GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints](https://arxiv.org/pdf/2305.13245)，将所有Head分为$$g$$个组（$$g$$可以整除$$n\_h$$），**每组共享**同一对K、V
* MQA(Multi-Query Attention)：出自[Fast Transformer Decoding: One Write-Head is All You Need](https://arxiv.org/pdf/1911.02150)，让**所有Attention Head共享同一个K、V**
* MLA(Multi-head Latent Attention)：
  * 降维：输入的$$h\_t$$先过一个$$W^{DKV}\in R^{d\_c\times d}$$，得到$$c\_t^{KV}=W^{DKV}h\_t$$，其中$$d\_c\ll d$$
  * 升维：$$k^C\_t=W^{UK}c\_t^{KV}$$，$$v^C\_t=W^{UV}c\_t^{KV}$$，其中$$W^{UK}\in R^{d\times d\_c}$$，$$W^{UV}\in R^{d\times d\_c}$$
  * 同时对q也降维，不过是降到$$d'\_c$$，$$c^Q\_t=W^{DQ}h\_t$$，$$q^C\_t=W^{UQ}c\_t^Q$$，其中$$c^Q\_t\in R^{d'\_c}$$，$$W^{UQ}\in R^{d\_hn\_h\times d'\_c}$$
  * 为了兼容RoPE，
    * $$q^R\_t=RoPE(W^{QR}c^Q\_t)$$，其中$$W^{QR}\in R^{d^R\_hn\_h\times d'*c}$$，再split成$$n\_h$$份：$$\[q^R*{t,1};q^R\_{t,2};...;q^R\_{t,n\_h}]$$，每一份的dim是$$d^R\_h$$
    * $$k^R\_t=RoPE(W^{KR}h\_t)$$
    * $$q\_{t,i}=\[q^C\_{t,i};q^R\_{t,i}]$$，$$k\_{t,i}=\[k^C\_{t,i};k^R\_t]$$，维度都是$$d\_h+d^R\_h$$，
    * 再拿这个q和k去算attn，$$o\_{t,i}=\sum ^t\_{j=1}softmax\_j(\frac{q^T\_{t,i}k\_{j,i}}{\sqrt {d\_h+d^R\_h}})v^C\_{j,i}$$
    * $$u\_t=W^O\[o\_{t,1};o\_{t,2};...;o\_{t,n\_h}]$$

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-11fe6ae9191b62adffb7e8a5ec5cb295f08ed103%2Fmha-gqa-mqa-mla.png?alt=media)

| attn | KV Cache per Token                             | Capability |
| ---- | ---------------------------------------------- | ---------- |
| MHA  | $$2n\_hd\_hl$$                                 | Strong     |
| GQA  | $$2n\_gd\_hl$$                                 | Moderate   |
| MQA  | $$2d\_hl$$                                     | Weak       |
| MLA  | $$(d\_c + d\_h^R)l \approx \tfrac{9}{2}d\_hl$$ | Stronger   |

最终在计算时，需要cache的是图中的蓝色部分，所以是$$(d\_c + d\_h^R)l$$，在Deepseek-v2中，设置$$d\_c=4d\_h, d^R\_h=d\_h/2$$

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-12d708d4acca230637deb8495b5f86841f80be54%2Fmla-kvcache.jpeg?alt=media)

MLA小结：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-64b3c2346b49a1ec6850e9f6985aabc797fe0fb1%2Fmla-attn.jpg?alt=media)

其中的absorb是结合率，参考[gpt解释的](https://chatgpt.com/share/6a1549fa-6518-83ec-8351-4ad95ad56f0d)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-04384acd48ebd0ade800eb056fcaa427da65dec7%2Fmla-absorb.png?alt=media)

#### DeepSeekMoE

&#x20;

[DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models](https://arxiv.org/pdf/2401.06066)

<https://github.com/deepseek-ai/DeepSeek-MoE>

FFN部分的MoE，相比传统的[GShard](https://arxiv.org/pdf/2006.16668.pdf) 等MoE架构，DeepSeekMoE用了**更细粒度的专家分配机制**，并将部分专家设置为**共享专家**。

细粒度专家分配：假设有$$N$$个专家，即么对于原来的每个专家，把它的intremediate hidden dim分成$$m$$份，每一份的长度是原来的$$\frac{1}{m}$$，这样就有了$$mN$$个专家，原来选$$K$$个，现在就选$$mK$$个

$$\mathbf{u}\_t$$表示FFN输入的第$$t$$个token，$$N\_s$$是shared experts的数量，$$N\_r$$是routed experts的数量，$$K\_r$$表示被激活的router专家数量，$$\mathbf{e}\_i$$表示第i个routed专家的centroid vector，即每个专家有一个向量

$$
\begin{aligned}
& \mathbf{h}*t^{\prime}=\mathbf{u}*t+\sum*{i=1}^{N\_s} \operatorname{FFN}*i^{(s)}\left(\mathbf{u}*t\right)+\sum*{i=1}^{N\_r} g*{i, t} \operatorname{FFN}*i^{(r)}\left(\mathbf{u}*t\right), \\
& g*{i, t}= \begin{cases}s*{i, t}, & s*{i, t} \in \operatorname{Topk}\left(\left{s\_{j, t} \mid 1 \leqslant j \leqslant N\_r\right}, K\_r\right), \\
0, & \text { otherwise },\end{cases} \\
& s\_{i, t}=\operatorname{Softmax}\_i\left(\mathbf{u}\_t^T \mathbf{e}\_i\right),
\end{aligned}
$$

score计算部分的代码实现：以[v3](https://github.com/huggingface/transformers/blob/849c3778c620004e8d117cfb66ceb332350a65c4/src/transformers/models/deepseek_v3/modular_deepseek_v3.py)为例，注意这里用的是sigmoid而非softmax，

```python
class DeepseekV3TopkRouter(nn.Module):
    def __init__(self, config):
        #...
        # 这个就是e，shape是[out_features, in_features]
        self.weight = nn.Parameter(torch.empty((self.n_routed_experts, config.hidden_size)))
    def forward(self, hidden_states):
        hidden_states = hidden_states.view(-1, self.config.hidden_size)
        # 这里算的就是u和e的矩阵乘
        router_logits = F.linear(hidden_states.type(torch.float32), self.weight.type(torch.float32))
        scores = router_logits.sigmoid()
```

device-limited routing：保证每个token的目标专家**分布在最多**$$M$$**个设备上**

* 首先选择有最高相关性（即上面的$$s\_{i,t}$$）的$$M$$个设备出来
* 再从这$$M$$个设备里选出top-K个专家出来

负载均衡的辅助loss：

* expert-level的负载均衡loss：$$\alpha\_1$$是超参

$$
\begin{aligned}
\mathcal{L}*{\text {ExpBal }} & =\alpha\_1 \sum*{i=1}^{N\_r} f\_i P\_i, \\
f\_i & =\frac{N\_r}{K\_r T} \sum\_{t=1}^T \mathbb{1}(\text { Token } t \text { selects Expert } i), \\
P\_i & =\frac{1}{T} \sum\_{t=1}^T s\_{i, t},
\end{aligned}
$$

* device-level的负载均衡loss：把所有routed专家分成$$D$$组$$\left{\mathcal{E}\_1, \mathcal{E}\_2, \ldots, \mathcal{E}\_D\right}$$，并把每一组放到一个单独的设备上：

$$
\begin{aligned}
\mathcal{L}*{\text {DevBal }} & =\alpha\_2 \sum*{i=1}^D f\_i^{\prime} P\_i^{\prime} \\
f\_i^{\prime} & =\frac{1}{\left|\mathcal{E}*i\right|} \sum*{j \in \mathcal{E}*i} f\_j \\
P\_i^{\prime} & =\sum*{j \in \mathcal{E}\_i} P\_j
\end{aligned}
$$

* 通信负载均衡loss：如果一个设备收到的token比较多，它的通信代价也比较大。因为要选$$M$$个设备出来，总共有$$T$$个词，所以，鼓励每个设备最多传输$$MT$$个隐层状态去其他设备，同时从其他设备接收到$$MT$$左右个的隐层状态。

$$
\begin{aligned}
\mathcal{L}*{\text {CommBal }} & =\alpha\_3 \sum*{i=1}^D f\_i^{\prime \prime} P\_i^{\prime \prime} \\
f\_i^{\prime \prime} & =\frac{D}{M T} \sum\_{t=1}^T \mathbb{1}(\text { Token } t \text { is sent to Device } i) \\
P\_i^{\prime \prime} & =\sum\_{j \in \mathcal{E}\_i} P\_j
\end{aligned}
$$

### DeepSeek-Prover-V1.5

[DeepSeek开源数学大模型，高中、大学定理证明新SOTA](https://mp.weixin.qq.com/s/q-CZWNrcka6ttLuDW_1itg)

[DeepSeek-Prover-V1.5: Harnessing Proof Assistant Feedback for Reinforcement Learning and Monte-Carlo Tree Search](https://arxiv.org/pdf/2408.08152)

<https://github.com/deepseek-ai/DeepSeek-Prover-V1.5>

### Deepseek-v3

[4篇DeepSeek神作论文速读，屠龙少年的名言：You play the game I play the rule.](https://mp.weixin.qq.com/s/AxwK_gtWQfxzT9aqPaVRGw)

[DeepSeek-V3 正式发布](https://mp.weixin.qq.com/s/iFZOQsUNkpkXPDvOkE99wQ)

[论文](https://arxiv.org/pdf/2412.19437)

[DeepSeek-V3技术报告解读](https://mp.weixin.qq.com/s/-Ggy94bM8k-AaYarTMSI5Q)

[Deepseek V3 预训练策略解读](https://mp.weixin.qq.com/s/TzaaOOwe32V1IXxiLwcKGw)

[MiniMax-01 与 DeepSeek-V3 对比](https://mp.weixin.qq.com/s/x7sN0RwaJjzxHiAReslSRQ)

[DeepSeek绕开CUDA垄断，V3论文细节再挖出！英伟达护城河不存在了？](https://mp.weixin.qq.com/s/t4VTGX7fMTFpur8F91fvjQ)

直接写PTX（并行线程执行），PTX是专门为其GPU设计的中间指令集架构，位于高级GPU编程语言（如CUDA C/C++或其他语言前端）和低级机器代码（流处理汇编或SASS）之间。PTX是一种接近底层的指令集架构，将GPU呈现为数据并行计算设备，因此能够实现寄存器分配、线程/线程束级别调整等细粒度优化，这些是CUDA C/C++等语言无法实现的

[首次披露！DeepSeek V3 发布软硬一体协同训练论文，公开「降成本」秘诀](https://mp.weixin.qq.com/s/LFOsOzINZNmyVDMRtGk83g)

[刚刚，DeepSeek首曝V3降成本秘诀！软硬协同突破Scaling天花板](https://mp.weixin.qq.com/s/JgIZD0IMxsH55Vg6-lfgkQ)

[DeepSeek-V3再发论文，梁文锋署名，低成本训练大模型的秘密揭开了](https://mp.weixin.qq.com/s/nTZH03aIIG1tQa7uiRc__A)

[Insights into DeepSeek-V3: Scaling Challenges and Reflections on Hardware for AI Architectures](https://arxiv.org/pdf/2505.09343)

#### deepseek-v3-moe

MLA部分和V2完全一样，DeepseekMoE和V2差不太多，结构上的diff：

* 算affinity score的时候用的sigmoid(最后一行)
* 然后在用所有affinity scores去算最后gate的时候加了norm（第二行）

$$
\begin{aligned}
& \mathbf{h}*t^{\prime}=\mathbf{u}*t+\sum*{i=1}^{N\_s} \operatorname{FFN}*i^{(s)}\left(\mathbf{u}*t\right)+\sum*{i=1}^{N\_r} g*{i, t} \operatorname{FFN}*i^{(r)}\left(\mathbf{u}*t\right), \\
& g*{i, t}=\frac{g*{i, t}^{\prime}}{\sum*{j=1}^{N\_r} g\_{j, t}^{\prime}}, \\
& g\_{i, t}^{\prime}= \begin{cases}s\_{i, t}, & s\_{i, t} \in \operatorname{Topk}\left(\left{s\_{j, t} \mid 1 \leqslant j \leqslant N\_r\right}, K\_r\right), \\
0, & \text { otherwise }\end{cases} \\
& s\_{i, t}=\operatorname{Sigmoid}\left(\mathbf{u}\_t^T \mathbf{e}\_i\right),
\end{aligned}
$$

太大的辅助Loss可能影响模型效果，用了[Fewer truncations improve language modeling](/1.2.llm_intro)里的auxiliary-loss-free的负载均衡策略，其实就是在算routing的时候加了个bias，给后面用的gating value还用的不带bias的。

$$
g\_{i, t}^{\prime}= \begin{cases}s\_{i, t}, & s\_{i, t}+b\_i \in \operatorname{Topk}\left(\left{s\_{j, t}+b\_j \mid 1 \leqslant j \leqslant N\_r\right}, K\_r\right), \ 0, & \text { otherwise. }\end{cases}
$$

还加了一个bias更新速度，即训练时，如果对应的experts overloaded了，会对bias减小$$\gamma$$倍，反之如果underloaded了，会对bias增加$$\gamma$$倍

为了防止单序列内部极端的不平衡，还是加了个sequence-wise的平衡loss(其实和v2的expert-level的负载均衡loss基本一样，只是多了个第三行的归一化)，式子中的$$\alpha$$是一个很小的值，$$T$$是序列中的token数：

$$
\begin{aligned}
\mathcal{L}*{\text {Bal }} & =\alpha \sum*{i=1}^{N\_r} f\_i P\_i \\
f\_i=\frac{N\_r}{K\_r T} \sum\_{t=1}^T \mathbb{1} & \left(s\_{i, t} \in \operatorname{Topk}\left(\left{s\_{j, t} \mid 1 \leqslant j \leqslant N\_r\right}, K\_r\right)\right) \\
s\_{i, t}^{\prime} & =\frac{s\_{i, t}}{\sum\_{j=1}^{N\_r} s\_{j, t}} \\
P\_i & =\frac{1}{T} \sum\_{t=1}^T s\_{i, t}^{\prime}
\end{aligned}
$$

可以实现不要让同一条sequence的token全挤到少数experts上

* $$f\_i$$：在当前sequence内，expert $$i$$实际被选中的频率
* $$P\_i$$：在当前sequence内，router对expert $$i$$的平均概率/平均分数
* $$f\_iP\_i$$：如果某个expert又常被选中、router又给它高分，就会被惩罚

和v2的device-limited routing类似，V3也对路由机制加了限制，即每个token最多被发送到个节点。对某一个MoE layer来说，它的256个routed experts均匀分布在64张GPU（8个节点）上，每个节点有256/8=32个专家，每个token最多会被发送到M(例如4)个节点，即只从最多128个专家里选top k（k=8）的专家出来。

由于这种有效的负载均衡策略，v3在训练时并不会drop任意的token。

#### deepseek-v3-mtp

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-44e961c89e1967dcbd0816abe7e938341ee87c54%2Fdeepseek-v3-mtp.png?alt=media)

### NSA

[刚刚！DeepSeek梁文锋亲自挂名，公开新注意力架构NSA](https://mp.weixin.qq.com/s/SlhNdGNFpGlicIkMUE21og)

[【手撕NSA】DeepSeek新作-原生稀疏注意力-超长文(附代码)](https://mp.weixin.qq.com/s/-sbxKky1qWBVYzuyNMg5jw)

[Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention](https://arxiv.org/pdf/2502.11089)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-761aa7de0c76fdda8bb2f70617c8f7fdcb912fb1%2Fnsa.png?alt=media)

#### 整体逻辑

整体逻辑：对于给定的kv，分别按3种策略compression(cmp)、selection(slc)、window(win)去和同一个q算attn，然后用gate把3个attn加权。

核心就是q是$$1\times d$$，压缩后的k是$$d'\times d$$, v是$$d'\times d$$，那$$softmax(qk^T)v$$就是$$1 \times d$$、$$d\times d'$$和$$d'\times d$$，得到的还是1\*d，这样3个就能相加了

#### token compression

$$l$$是block长度，$$d$$是相邻block间滑动的stride（即相邻两个block起点间的距离），共$$\left\lfloor\frac{t-l}{d}\right\rfloor$$个block，每个block把$$l$$压缩成1维，所以最后得到的是$$\tilde{K}\_t^{\mathrm{cmp}} \in \mathbb{R}^{d\_k \times\left\lfloor\frac{t-l}{d}\right\rfloor}$$

$$
\tilde{K}*t^{\mathrm{cmp}}=f\_K^{\mathrm{cmp}}\left(\mathbf{k}*{: t}\right)=\left{\varphi\left(\mathbf{k}\_{i d+1: i d+l}\right) \left\lvert, 0 \leqslant i \leqslant\left\lfloor\frac{t-l}{d}\right\rfloor\right.\right}
$$

自己画了个示意图

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-47c1995a1eda4e8733033998e1dd1fe30bbb25cb%2Fnsa-block.png?alt=media)

#### token selection

* Blockwise Selection：这里是以block为单位进行select，两点考虑，一是在gpu上计算效率高，因为block是连续的块；二是blockwise selection follow了固有的attention score的分布模式，[MInference 1.0: Accelerating Pre-filling for Long-Context LLMs via Dynamic Sparse Attention](https://arxiv.org/pdf/2407.02490)提到了相邻位置的attention score的量级是差不多的
* Importance Score Computation：拿q和压缩后的key算attn得分，其中$$\mathbf{p}\_t^{\mathrm{cmp}} \in \mathbb{R}^{\left\lfloor\frac{t-l}{d}\right\rfloor+1}$$，

$$
\mathbf{p}\_t^{\mathrm{cmp}}=\operatorname{Softmax}\left(\mathbf{q}\_t^T \tilde{K}\_t^{\mathrm{cmp}}\right)
$$

假设选出来的block size是$$l^{\prime}$$，如果$$l^{\prime}=l=d$$，即和token压缩的设置是一样的，那么很简单，选出来的attn score就是$$\mathbf{p}\_t^{\text {slc }}=\mathbf{p}\_t^{\text {cmp }}$$。但如果不一样，给定$$l \leqslant l^{\prime}$$，$$d \mid l$$（整除）且$$d \mid l^{\prime}$$，有如下公式，其中$$\[\cdot]$$是取下标，有点复杂，详见[gpt](https://chatgpt.com/s/t_6a22b41a4d8c8191a6a4b7865bd0cf2b)，本质是对第j个selection block，它聚合的是在空间上覆盖/邻近这个selection block的一组compressed block分数，然后不是均匀加，而是中间位置权重更高，即一个compressed block和selection block的空间重叠/邻近关系越强，贡献可能出现次数越多。

$$
\mathbf{p}*t^{\mathrm{slc}}\[j]=\sum*{m=0}^{\frac{l^{\prime}}{d}-1} \sum\_{n=0}^{\frac{l}{d}-1} \mathbf{p}\_t^{\mathrm{cmp}}\left\[\frac{l^{\prime}}{d} j-m-n\right]
$$

对于GQA和MQA来讲，$$\mathbf{p}*t^{\text {slc }^{\prime}}=\sum*{h=1}^H \mathbf{p}\_t^{\text {slc },(h)}$$，其中$$h$$是head的下标，$$H$$是每个group里的query heads数，这个聚合保证了同一group内，不同head选择block的一致性。

* Top-n Block Selection：

通过如下方式得到最终的$$\tilde{K}\_t^{\text {slc }} \in \mathbb{R}^{d\_k \times n l^{\prime}}$$

$$
\begin{aligned}
\mathcal{I}\_t & =\left{i \mid \operatorname{rank}\left(\mathbf{p}\_t^{\text {slc' }}\[i]\right) \leqslant n\right} \\
\tilde{K}*t^{\text {slc }} & =\operatorname{Cat}\left\[\left{\mathbf{k}*{i l^{\prime}+1:(i+1) l^{\prime}} \mid i \in \mathcal{I}\_t\right}\right]
\end{aligned}
$$

其中$$\operatorname{rank}(\cdot)$$表示降序的ranking位置，即1是score最高的

#### sliding window

最近的w个token一般比较重要，会有一条专门的sliding window分支直接看原始KV，不需要依赖compression/selection才能被看到。

#### NSA Kernel

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-80642874e44cb5617c88cbf874132b6c0e99dee1%2Fnsa-kernel.png?alt=media)

1. group-centric data loading：在每个inner loop中，对于位置$$t$$，加载一个GQA group内的所有query head $$Q \in \mathbb{R}^{\left\[h, d\_k\right]}$$，以及它们共享的sparse key/value block下标$$\mathcal{I}\_t$$
2. shared KV Fetching：inner loop中，为了最小化memory加载，按顺序将连续的下标$$\mathcal{I}\_t$$的key/value block $$K \in \mathbb{R}^{\left\[B\_k, d\_k\right]}, V \in \mathbb{R}^{\left\[B\_k, d\_v\right]}$$加载进SRAM，其中$$B\_k$$是满足$$B\_k \mid l^{\prime}$$的kernel block size
3. outer loop on grid：因为不同query blocks的inner-loop长度基本差不多（inner-loop长度主要和selected block count $$n$$成正比），所以把query/output的循环放到Triton的grid scheduler里，简化并优化 kernel。

这种设计能实现接近最优的arithmetic intensity，因为：

* 通过group-wise sharing，消除了重复的KV传输；
* 在GPU streaming multiprocessors之间更好地平衡计算负载

### FlashMLA

[“源神”DeepSeek！突破H800性能上限，FlashMLA重磅开源，算力成本还能降](https://mp.weixin.qq.com/s/OZmMTW4JyiP4GWkzShlqAg)

<https://github.com/deepseek-ai/FlashMLA>

### DeepEP

[DeepSeek开源第二弹，为MoE和EP量身定制的通信库！暂和英伟达显卡绑定](https://mp.weixin.qq.com/s/2ecxmq9zbwFlzOalprok0Q)

<https://github.com/deepseek-ai/DeepEP>

### DeepGEMM

[DeepSeek-R2曝5月前上线！第三弹DeepGEMM 300行代码暴击专家优化内核](https://mp.weixin.qq.com/s/4aKxWIpb2-9DZKrSSAYoWg)

<https://github.com/deepseek-ai/DeepGEMM>

### DualPipe

[DeepSeek一口气开源3个项目，还有梁文锋亲自参与，昨晚API大降价](https://mp.weixin.qq.com/s/aeK5eJMwqNuqJaZczKrhgQ)

<https://github.com/deepseek-ai/DualPipe>

### EPLB

<https://github.com/deepseek-ai/eplb>

### profile-data

<https://github.com/deepseek-ai/profile-data>

### 3fs

[DeepSeek开源周最后一天：让数据处理「从自行车升级到高铁](https://mp.weixin.qq.com/s/p8KGnYIqmCkXPF4jjRiKjQ)

<https://github.com/deepseek-ai/3FS>

在3fs上的数据处理框架：<https://github.com/deepseek-ai/smallpond>

### 推理系统

<https://zhuanlan.zhihu.com/p/27181462601>

中文版：<https://github.com/deepseek-ai/open-infra-index>

对应英文版：<https://github.com/deepseek-ai/open-infra-index/blob/main/202502OpenSourceWeek/day_6_one_more_thing_deepseekV3R1_inference_system_overview.md>

优化目标：更大的**吞吐**，更低的**延迟**。 方案：大规模跨节点专家并行(Expert Parallelism, EP)

EP好处：

* 增加batchsize，提高gpu矩阵乘法效率，**提升吞吐**
* 专家分散在不同GPU，每个GPU只计算少量专家，访存更少，**降低延迟**

EP的复杂性：

* 引入了跨节点传输，需要设计合理计算流程使**计算**和**传输**可以**同步进行**
* 因为多节点，需要**DP**（数据并行），不同DP间要**负载均衡**

#### 大规模跨节点专家并行

V3/R1的结构：从第4层开始是MOE，每层有**1个共享**专家和**256个路由**专家，每次激活8个路由专家，即**8 in 256**，稀疏度很高，因此需要用**更大的overall batchsize**，才能给每个专家提供足够的专家batchsize

* Prefill：
  * 路由专家EP32
  * MLA和共享专家DP32
  * 一个部署单元是4节点（32卡），每张卡包括：
    * 9个路由专家（共9\*32=288个专家），其中：
      * 1个冗余专家，共1\*32=32个
      * 8个路由专家，共8\*32=256个
    * 1个共享专家，共1\*32=32个
* Decode：
  * 路由专家EP144
  * MLA和共享专家DP144，
  * 一个部署单元是18节点(18\*8=144卡)，每张卡包括：
    * 2个路由专家，共2\*144=288
      * 总共32个冗余专家
      * 总共288-32=256个正常的路由专家
    * 1个共享专家，共1\*144=144个

#### 计算通信重叠

多机多卡的EP会引入较大的通信开销，可以用双batch重叠来掩盖通信开销，提升整体吞吐：

* **prefill阶段**：2个batch的计算和通信交错进行，一个batch计算时可以掩盖另一个batch的通信开销。即attn->dispatch->mlp->shared/combine这4步（这里是shared和combine并行）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-21450da6c21645c5d7bf250de910b49f85357754%2Foverlap-prefill.png?alt=media)

* **decode阶段**：不同阶段的执行时间有差别， attention部分拆成了两个stage（图中的attn-0（attn前的一些proj操作等）和attn-1（核心的attn计算等）），共5个stage的流水线（attn0->attn1->dispatch/shared->mlp->combine）来实现计算和通信的重叠（这里是shared和dispatch并行）。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c76c914afdf88c7a40cf4fb62ad703629553c1b3%2Foverlap-decode.png?alt=media)

细节可以参考<https://github.com/deepseek-ai/profile-data>

#### 尽可能地负载均衡

尽可能为每个GPU分配均衡的计算负载+通信负载

* prefill load balancer：
  * 问题：不同DP实例上的请求数、长度不同，导致core-attention的计算量、dispatch发送量不同
  * 目标：
    * 各GPU的**计算量**尽量相同==>core-attention计算负载均衡
    * **输入的token数量**尽量相同==>dispatch发送量负载均衡，避免部分GPU处理时间过长
* decode load balancer：
  * 问题：不同DP实例上的请求数量、长度不同，导致core-attention计算量（与 KVCache 占用量相关）、dispatch发送量不同
  * 目标：
    * 各GPU的**KVCache占用量**尽量相同==>core-attention计算负载均衡
    * **请求数量**尽量相同==>dispatch发送量负载均衡
* expert-parallel load balancer：
  * 问题：对于给定MoE模型，存在一些**天然的高负载专家**，导致不同GPU的专家计算负载不均衡
  * 目标：每个GPU上的**专家计算量均衡**==>最小化所有GPU的dispatch接收量(即MOE的输入)的最大值

#### 架构图

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-acff4009a1d9c1032bd352ab6699b7b5ec547295%2Fdeepseek-infer.jpg?alt=media)

prefill和decode拆了2个service，并且每个前面有负载均衡，内部有EP的负载均衡

#### 线上效果

H800，精度和训练一致：

* 矩阵计算和dispatch传输用fp8
* core-attn计算和combine用bf16

白天用所有节点部署服务，晚上减少节点，峰值278节点（每个节点8卡H800，共278 \* 8=2224卡，前面提到了prefill要32卡，decode要144卡，其实就是32x+14y=2224），平均占用226.75个节点，每张卡2美金1小时，那就是2 \* 226.75 \* 8 \* 24 = 87072美金/天

* 输入总token数608B，有342B命中kvcache缓存，命中率56.3%
* 输出总token数168B，平均输出速度20\~22tps(tokens per second)，这里指的应该是**单请求**的生成速度，平均每输出一个token的KVCache长度是4989。
* 平均每台H800(8卡)的吞吐量：
  * prefill任务：输入吞吐约 73.7k tokens/s（含缓存命中）。
    * 推测：每秒每8卡输入的token数是608000000000 / 226.75/86400=31k，好像对不太上这个73.7k，可能猜测：缓存那部分非常快，非缓存很慢，而这31k是假设全天流量不变的平均值
  * decode任务：输出吞吐约 14.8k tokens/s。
    * 推测：每秒每8卡输出的token数是168000000000 / 226.75 /86400=8575，前面提到了每个请求每秒的输出token数是20\~22，那就相当于每8卡机器每秒能处理有8575/21=408个请求，所以总的返回qps大概是408 \* 226.75=9.25k

### DeepSeek-Prover-V2

[DeepSeek开源Prover-V2强推理模型，网友：奥数从没这么简单过](https://mp.weixin.qq.com/s/UYn-9vX5rpWpB3Y1xFW8Jg)

专为Lean 4 打造的开源大语言模型，专注于形式化定理证明。

<https://github.com/deepseek-ai/DeepSeek-Prover-V2/blob/main/DeepSeek_Prover_V2.pdf>

下载了一份：[pdf](https://github.com/daiwk/collections/blob/master/assets/DeepSeek_Prover_V2.pdf)

两阶段训练，建立了两种互补的证明生成模式：

1. 高效非思维链（non-CoT）模式：针对快速生成正式的Lean证明代码进行优化，专注于生成简洁的证明，没有显式的中间推理步骤。
2. 高精度思维链（CoT）模式：系统地阐述中间推理步骤，强调透明度和逻辑进展，然后构建最终的正式证明。

与 DeepSeek-Prover-V1.5一致，这两种生成模式由两个不同的引导提示控制。

* 第一阶段采用专家迭代，在课程学习框架内训练一个非CoT证明模型，同时通过基于子目标的递归证明合成难题的证明。选择非CoT生成模式是为了加速迭代训练和数据收集过程。
* 在此基础上，第二阶段利用了冷启动链式思维（CoT）数据，通过将 DeepSeek-V3 复杂的数学推理模式与合成形式证明相结合而生成。CoT模式通过进一步的强化学习阶段得到增强，遵循了通常用于推理模型的标准训练流程。

DeepSeek-Prover-V2的非CoT模式训练过程遵循专家迭代的范式，这是开发形式化定理证明器广泛采用的框架。在每次训练迭代中，当前最佳证明策略用于生成那些在先前迭代中未解决的难题的证明尝试。这些成功的尝试经由Lean证明助手验证后，被纳入SFT数据集以训练改进的模型。

这一迭代循环不仅确保模型能够从初始演示数据集中学习，还能提炼出自己的成功推理轨迹，逐步提高其解决更难问题的能力。总体训练过程与 DeepSeek-Prover-V1 的训练过程大致一致，仅对训练问题的分布进行了两项修改：

* Prover-V2引入了来自自动形式化和各种开源数据集的额外问题，扩大了训练问题领域的覆盖范围。
* 新模型通过子目标分解生成的问题来扩充数据集，旨在解决MiniF2F基准测试有效划分中的更多挑战性实例。

在DeepSeek-V3-Base-671B上使用恒定的学习率5e-6，在16384个token的上下文中进行监督微调。训练语料库由两个互补来源组成：

* 通过专家迭代收集的非CoT数据，生成无需中间推理步骤的Lean代码；
* 冷启动CoT数据，将DeepSeek-V3的高级数学推理过程提炼为结构化的证明路径。非CoT组件强调精益定理证明器生态系统中的形式验证技能，而CoT示例明确地建模了将数学直觉转化为形式证明结构的认知过程。

Prover-V2采用GRPO，通过为每个定理提示采样一组候选证明并根据它们的相对奖励优化策略，消除了对单独critic模型的需求。训练使用二元奖励，每个生成的Lean证明如果被验证为正确则获得1个奖励，否则为0。为了确保有效学习，研究人员精心挑选训练提示，仅包括那些对监督微调模型具有足够挑战性但可解决的问题。模型在每次迭代中采样256个不同的问题，为每个定理生成32个候选证明，最大序列长度为32768个token。

模型蒸馏：

* 把DeepSeek-Prover-V1.5-Base-7B的最大上下文长度从4096个token扩展到了32768个，并使用DeepSeek-Prover-V2-671B强化学习阶段收集的rollout数据对这个扩展上下文模型进行微调。
* 除了CoT推理模式外，还整合了专家迭代过程中收集的非CoT证明数据，以实现一种成本效益高的证明选项，该选项能够生成简洁的形式化输出，并且模型规模较小。
* 7B模型也采用了与671B模型训练相同的强化学习阶段以提升性能。

### DeepSeek-V3.2-exp

<https://huggingface.co/deepseek-ai/DeepSeek-V3.2-Exp>

[刚刚，DeepSeek开源V3.2-Exp，公开新稀疏注意力机制DSA](https://mp.weixin.qq.com/s/WYze9rEZnuZ9l1Y132VJmA)

<https://github.com/deepseek-ai/DeepSeek-V3.2-Exp/blob/main/DeepSeek_V3_2.pdf>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bae4288792b242f5dc9a0696007bb2f094bb2dc8%2Fdsa.png?alt=media)

DSA（deepseek sparse attention）包括2部分：

* lightning indexer: 计算query token $$\mathbf{h}\_t \in \mathbb{R}^d$$和之间token $$\mathbf{h}*s \in \mathbb{R}^d$$的index score $$I*{t, s}$$：

$$
I\_{t, s}=\sum\_{j=1}^{H^I} w\_{t, j}^I \cdot \operatorname{ReLU}\left(\mathbf{q}\_{t, j}^I \cdot \mathbf{k}\_s^I\right)
$$

其中，$$H^I$$是indexer的head数；$$\mathbf{q}*{t, j}^I \in \mathbb{R}^{d^I}$$和$$w*{t, j}^I \in \mathbb{R}$$是从query token $$\mathbf{h}\_t$$派生的，$$\mathbf{k}\_s^I \in \mathbb{R}^{d^I}$$是从之前token $$\mathbf{h}\_s$$派生的。lightning index只有少量的head，且可以用fp8实现，计算效率很可观

* fine-grained token selection mechanism: attention ouput $$\mathbf{u}\_t$$是拿query token $$\mathbf{h}\_t$$和选出来的top-k个key和value去算的：

$$
\mathbf{u}\_t=\operatorname{Attn}\left(\mathbf{h}*t,\left{\mathbf{c}*s \mid I*{t, s} \in \operatorname{Top}-\mathrm{k}\left(I*{t,:}\right)\right}\right)
$$

核心代码[github](https://github.com/deepseek-ai/DeepSeek-V3.2-Exp/blob/main/inference/model.py#L457C1-L487C28)如下：

```python
    def forward(self, x: torch.Tensor, qr: torch.Tensor, start_pos: int, freqs_cis: torch.Tensor, mask: Optional[torch.Tensor]):
        bsz, seqlen, _ = x.size()
        end_pos = start_pos + seqlen
        # wq_b是映射到n_heads * head_dim
        q = self.wq_b(qr)
        q = q.view(bsz, seqlen, self.n_heads, self.head_dim)
        q_pe, q_nope = torch.split(q, [self.rope_head_dim, self.head_dim - self.rope_head_dim], dim=-1)
        # rope in indexer is not interleaved
        q_pe = apply_rotary_emb(q_pe, freqs_cis, False)
        q = torch.cat([q_pe, q_nope], dim=-1)
        # wk是映射dim->head_dim
        k = self.wk(x)
        k = self.k_norm(k)
        k_pe, k_nope = torch.split(k, [self.rope_head_dim, self.head_dim - self.rope_head_dim], dim=-1)
        # rope in indexer is not interleaved
        k_pe = apply_rotary_emb(k_pe.unsqueeze(2), freqs_cis, False).squeeze(2)
        k = torch.cat([k_pe, k_nope], dim=-1)
        q = rotate_activation(q)
        k = rotate_activation(k)
        q_fp8, q_scale = act_quant(q, block_size, self.scale_fmt)
        k_fp8, k_scale = act_quant(k, block_size, self.scale_fmt)
        self.k_cache[:bsz, start_pos:end_pos] = k_fp8
        self.k_scale_cache[:bsz, start_pos:end_pos] = k_scale
        # weights_proj也是映射dim->head_dim
        weights = self.weights_proj(x.float()) * self.n_heads ** -0.5
        weights = weights.unsqueeze(-1) * q_scale * self.softmax_scale
        """
        实现功能：
        fp8 q @ fp8 k -> fp32 logits
        relu(fp32 logits) * q_s (weights) -> fp32 logits
        fp32 logits -> fp32 logits_sum
        fp32 logits_sum * k_s (e8m0) -> fp32 index_score
        """
        index_score = fp8_index(q_fp8.contiguous(), 
            weights, # 这个其实是q_s(weights)
            self.k_cache[:bsz, :end_pos].contiguous(), 
            self.k_scale_cache[:bsz, :end_pos].contiguous()) # 就是k_s
        if mask is not None:
            index_score += mask
        topk_indices = index_score.topk(min(self.index_topk, end_pos), dim=-1)[1]
        topk_indices_ = topk_indices.clone()
        dist.broadcast(topk_indices_, src=0)
        assert torch.all(topk_indices == topk_indices_), f"{topk_indices=} {topk_indices_=}"
        return topk_indices
```

在deepseek-v3.1-Terminus里，训练和prefill用的是MHA模式，decoding时用的是MQA模式。deepseek-v3.2-exp是在MLA的MQA模式下实现的DSA

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-97a8697c8e77faf0be4e92c67897217e48fdc0e7%2Fmla-mqa-mha.png?alt=media)

### DeepSeek-OCR

[太强了！DeepSeek刚刚开源新模型，用视觉方式压缩一切](https://mp.weixin.qq.com/s/K6DVJGtJUuVudV4rFFS_8A)

[DeepSeek-OCR: Contexts Optical Compression](https://github.com/deepseek-ai/DeepSeek-OCR/blob/main/DeepSeek_OCR_paper.pdf)

<https://github.com/deepseek-ai/DeepSeek-OCR/>

一张包含文档文本的图像可以用比等效文本少得多的Token来表示丰富的信息，因此，初步探索了通过光学二维映射技术压缩长文本上下文可行性。

效果：当文本token数量在视觉token的10倍以内（即压缩率 <10x）时，模型的解码（OCR）精度可达97%；即使在压缩率达到20x的情况下，OCR准确率仍保持在约60%。在实际生产环境中，单张A100-40G GPU每天可生成超过20万页（200k+）的LLM/VLM训练数据。

* DeepEncoder：提取图像特征，并将视觉表示进行Token化和压缩，共380M参数
  * 80M的SAM-base：原始图像切成n个patch，单个patch大小为16x16，然后输入给SAM进行local attn
  * 2层的卷积模块：对视觉Token进行16倍的下采样，即得到n/16个token。参考[Vary: Scaling up the vision vocabulary for large vision-language model](https://arxiv.org/pdf/2312.06109)，每个卷积层的核大小为3，步长为2，pad为1，通道数从256增加到1024。具体过程如下：
    * 假设输入一张1024x1024的图像
    * 输入给sam的是$$1024\times 1024/16 \times 16 \times 16=64\times 64 \times (16\times 16)$$，即$$64\times 64$$个patch
    * 从sam输出的应该是$$64\times 64 \times 256$$。
    * 经过第一个conv后，宽度变成$$(64-2\times 1 - 3)/2 +1=32$$，所以shape是(32,32,256)，所以shape是(16,16,1024)，即token数变成了$$16\times 16=256$$，相比原来的$$64\times 64$$而言就是缩小了16倍。
  * 300M的CLIP-large：进行global attn
* DeepSeek3B-MoE-A570M解码器：根据图像Token和prompt生成所需的结果，用来重建文本表示。570M in 3B的MoE，64个router专家激活6个，还有2个共享专家

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f1f187fc59273c7884c1b402ad6ae07d25c502ec%2Fdeepseek-ocr.png?alt=media)

训练：先训encoder，再训decoder

支持不同模式：

* Native resolution(infer函数里crop\_mode=False)：
  * Tiny: 512×512 （64 vision tokens）
  * Small: 640×640 （100 vision tokens）
  * Base: 1024×1024 （256 vision tokens）
  * Large: 1280×1280 （400 vision tokens）
* Dynamic resolution(infer函数里crop\_mode=True)：
  * Gundam: n×640×640 + 1×1024×1024

相关prompt：

```
1. document: <image>\n<|grounding|>Convert the document to markdown.
2. other image: <image>\n<|grounding|>OCR this image.
3. without layouts: <image>\nFree OCR.
4. figures in document: <image>\nParse the figure.
5. general: <image>\nDescribe this image in detail.
6. rec: <image>\nLocate <|ref|>xxxx<|/ref|> in the image.
```

### DeepSeek-OCR-2

[刚刚，DeepSeek又探索新架构了，开源OCR 2](https://mp.weixin.qq.com/s/MgO1z-8EPq7e-Jt1h1DzYw)

<https://github.com/deepseek-ai/DeepSeek-OCR-2>

将原本基于CLIP的编码器替换为轻量级语言模型（Qwen2-500M），并引入了具有因果注意力机制的「因果流查询」。打破了传统模型必须按从左到右、从上到下的栅格顺序处理图像的限制，赋予了编码器根据图像语义动态重排视觉 Token 的能力。通过这种两级级联的 1D 因果推理结构（编码器重排与译码器解析），模型能够更精准地还原复杂文档（如带表格、公式和多栏布局）的自然阅读逻辑。

### DeepSeek-V4

<https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/DeepSeek_V4.pdf>

开始是[NSA](https://www.daiwk.net/1.2.llm_intro#nsa)，后再是[DSA](https://www.daiwk.net/1.2.llm_intro#deepseek-v3.2-exp)，

### Deepseek V4.1 Flash

[DeepSeek-V4.1-Flash: Pushing the Limits of KV Cache Compression](https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash/blob/main/DeepSeek_V41_Tech_Report.pdf)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b48d080656acf90930f1c66427e420d7f24cfca4%2Fdeepseek-v4.1-flash.png?alt=media)

* Causal Encoder-Decoder (CED)：参考YoLo（后面一半的层复用前面一半层的kvcache） +

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1f158a562e1092677eaefeb77728143a1b84b7c2%2Fcsa2-modes.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ea7c71cd35d8cb08424ad622254e681a4b3025e3%2Fhierarchical-sparse-indexer.png?alt=media)

## Qwen系列

### 早期的Qwen

早期的：

[Qwen1.5-110B：首个国产千亿参数开源大模型](https://mp.weixin.qq.com/s/Lb08elR2r23UN5kWnhF-BA)

4月26日，Qwen开源了其第一个千亿参数大模型Qwen1.5-110B，这应该也是国内第一个千亿规模的开源大模型。其包含1100亿参数，更重要的是这是一个Dense模型，而非MoE模型。从各项评测来看，Qwen1.5-110B足以与Llama3-70B相抗衡，部分指标也取得了更高的水平。

[阿里云Qwen2.5发布！再登开源大模型王座，Qwen-Max性能逼近GPT-4o](https://mp.weixin.qq.com/s/D2D9hga06bg2AMuGnizN5w)

所有 Qwen2.5 系列模型都在 18 万亿（18T）tokens 的数据上进行了预训练。在语言模型方面，Qwen2.5开源了7个尺寸：0.5B、1.5B、3B、7B、14B、32B、72B，每个都在同等参数赛道创造了业界最佳成绩。这些型号的设定充分考虑了下游场景的不同需求：

* 3B：适配手机等端侧设备的黄金尺寸；
* 32B：最受开发者期待的「性价比之王」，可在性能和功耗之间获得最佳平衡
* Qwen2.5-32B的整体表现甚至超越了Qwen2-72B。

[阿里除夕发布Qwen2.5-Max反超DeepSeek V3，一句话开发小游戏](https://mp.weixin.qq.com/s/4gf6qQXDlq0fc3rGkzJj2g)

Qwen2.5-Max同DeepSeek V3一样是超大规模的MoE模型，

### QwQ-max-preview

[阿里旗舰推理模型硬刚DeepSeek！官宣独立APP，发布公告AI亲自写](https://mp.weixin.qq.com/s/UjwuAKaRhKpQ-9eA2pSh8g)

<https://chat.qwen.ai>

### QWQ-32B

<https://qwenlm.github.io/blog/qwq-32b/>

<https://huggingface.co/Qwen/QwQ-32B>

目前只有博客，写得挺简单的，看介绍是用了两阶段RL：

* 1阶段RL：在冷启ckpt上，只拿代码和数学语料，基于outcome-base reward，随着训练的进行，发现这两方面的能力都有持续提升
  * 数学：有一个accuracy verifier，检查最终解决方案是否正确
  * 代码：有一个代码执行server，检查代码是否通过预定义好的测试用例
* 2阶段RL：没说用什么语料，但用的是general reward model加上rule-based verifiers产生的reward，发现只要少量的step就能提升模型的通用能力，如指令遵循、人类偏好对齐、agent性能，而且代码和数学能力下降不明显

### Qwen2.5-Omni

[阿里深夜开源Qwen2.5-Omni，7B参数完成看、听、说、写](https://mp.weixin.qq.com/s/BZv7tuMX6yZr5LvqKZBJCw)

[Qwen2.5-Omni Technical Report](https://github.com/QwenLM/Qwen2.5-Omni/blob/main/assets/Qwen2.5_Omni.pdf)

<https://github.com/QwenLM/Qwen2.5-Omni/tree/main>

<https://github.com/QwenLM/Qwen2.5-Omni>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-cdbcd183172dba87fe35b055996f4087a3b86eea%2Fqwen2.5-omni.png?alt=media)

### Qwen3

[猛击OpenAI o1、DeepSeek-R1！刚刚，阿里Qwen3登顶全球开源模型王座，深夜爆火](https://mp.weixin.qq.com/s/gvWJMfy2ah4IHqyO-tP8MA)

[Qwen3：思深，行速](https://mp.weixin.qq.com/s/OvoCPW0IwxeSm8pljv-A)

[Qwen3技术报告英中对照版.pdf](https://mp.weixin.qq.com/s/WJiW35ICxT7ox1-lGnqLIg)

[Qwen3 Technical Report](https://github.com/QwenLM/Qwen3/blob/main/Qwen3_Technical_Report.pdf)

<https://github.com/QwenLM/Qwen3>

[Qwen3技术报告首次全公开！“混合推理模型”是这样炼成的](https://mp.weixin.qq.com/s/VvugM54Z14mxGV-OOaVuwQ)

开源了两个MoE模型的权重：

* Qwen3-235B-A22B：拥有2350多亿总参数和220多亿激活参数
* Qwen3-30B-A3B：拥有约300亿总参数和30亿激活参数

此外，还有6个Dense模型：Qwen3-32B、Qwen3-14B、Qwen3-8B、Qwen3-4B、Qwen3-1.7B和Qwen3-0.6B

#### 网络结构

tokenizer用的是Qwen的，即BBPE（byte-level byte-pair encoding），词表大小是151,669

dense架构和Qwen2.5类似，

* 有GQA、SwiGLU、Rope和pre-normalization的RMSNorm等，
* 删掉了Qwen2中的QKV-bias
* 引入QK-Norm，保证训练稳定

MoE架构：

* 类似Qwen2.5-MoE，实现了DeepseekMoE的细粒度的专家切分
* 有128个专家，激活8个
* 不同于Qwen2.5-MoE，没有共享专家
* 使用global-batch load balancing loss来鼓励专家更专业化(specialization)，参考[Demons in the detail: On implementing load balancing loss for training specialized mixture-of-expert models](https://arxiv.org/a/2501.11873)

注：其中的tie embedding指的是输入的emb和输出的emb共享

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0665e7160279e940d4215b8d7dc0f0d06a0450fa%2Fqwen3-arch.png?alt=media)

#### 预训练

数据：

* 数据规模：Qwen2.5是在18万亿个token上进行预训练的，而Qwen3使用的数据量几乎是其两倍，达到了约36万亿(36T)个token，涵盖了119种语言和方言。
* 合成数据：
  * 先使用Qwen2.5-VL对大量类似PDF的文档进行文本识别。再利用Qwen2.5对识别出的文本进行优化以提升其质量。获得了额外的总量达数万亿tokens 的高质量文本。
  * 使用Qwen2.5、Qwen2.5-Math和Qwen2.5-Coder等模型合成了多种形式的文本token，包括教材、问答对、指令和代码片段等，覆盖数十个领域，总量达到数万亿tokens。

预训练过程分为三个阶段。

* general stage：各Qwen3的模型都在超过30T个token上进行了预训练，序列长度为**4K token**，为模型提供了基本的语言技能和通用知识。
* reasoning stage：通过增加如STEM(science/technology/engineering/mathematics)、编程和推理任务的数据比例来改进数据集，在这额外的5T个token上进行了预训练。
* long context stage：使用高质量的长上下文数据将序列长度扩展到**32K token**，确保模型能够有效地处理更长的输入。
  * 数据集里有75%的长度是16384到32768之间，剩下的25%是4096到16384之间
  * 通过ABF技巧([Effective long-context scaling of foundation models](https://arxiv.org/a/2309.16039))，将RoPE的base频率从10000增加到1000000
  * 使用YARN（[YaRN: Efficient context window extension of large language models](https://arxiv.org/a/2309.00071)）和DCA(Dual Chunk Attention, [Training-free long-context scaling of large language models](https://arxiv.org/a/2402.17463))，在推理阶段的序列长度capacity达到了4倍的增加

预训练效果：

* Qwen3 Dense基础模型的整体性能与参数更多的Qwen2.5基础模型相当：Qwen3-1.7B/4B/8B/14B/32B-Base分别与Qwen2.5-3B/7B/14B/32B/72B-Base表现相当。特别是在STEM、编码和推理等领域，Qwen3 Dense基础模型的表现甚至超过了更大规模的Qwen2.5模型。
* Qwen3 MoE基础模型在仅使用10%激活参数的情况下，达到了与Qwen2.5 Dense基础模型相似的性能，带来了训练和推理成本的显著节省。

#### 后训练

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-56eba8e9c3394d5e0d53fcfa5189ffdea244ecb5%2Fqwen3-post-training.png?alt=media)

四阶段：

**stage1: Long-CoT cold start**

&#x20;

使用多样的的长思维链数据对模型进行微调，涵盖了数学、代码、逻辑推理和STEM问题等多种任务和领域。每条样本都有验证过的reference答案或者是基于代码的测试用例。

* query filter：
  * 用Qwen2.5-72B-Instruct来判断并过滤那些不容易验证的query，例如一些包括多个子问题的query，或者通用的文本生成。
  * 过滤掉了Qwen2.5-72B-Instruct不需要CoT reasoning就能正确回答的那些query。确保只有那些需要更深reasoning的复杂问题才保留下来
  * 为每个query通过Qwen2.5-72B-Instruct标注了领域，确保数据集里每种领域的分布比较平衡。
* response filter：用QwQ-32B为每个query生成N个候选responses，当QwQ-32B一直没法生成正确解法时，人工介入来评估。对于pass\@N为正的query，进一步地过滤掉如下几类回答：
  * 最终答案错误
  * 包含大量重复内容
  * 明显只是猜测、缺乏充分推理支撑
  * 思路过程与总结结论不一致
  * 存在语言混用或风格突变问题的
  * 疑似过于接近潜在的验证集内容

精挑细选出一小部分来训练，目标是在**不过度追求中间推理准确性**的前提下，先建立模型的**基础推理模式**。可以确保模型的潜力不会被早期训练限制住，从而为后续的RL阶段提供更大的优化空间和灵活性。为达成这一目标，建议在该准备阶段**尽量减少训练样本数量和训练步数**。

**stage2: Reasoning RL**

&#x20;

重点是大规模强化学习，利用基于规则的奖励来增强模型的探索和钻研能力。query-verifer的pair数据必须满足4个条件：

* 没在cold start阶段用过
* 对cold start模型来说是可学习的
* 尽可能有挑战性
* 包括了很多子领域

最终收集了3995个pair对，用GRPO训练。用大的batchsize，每个query有很多的rollouts，再加上off-policy的训练来提升采样效率，对训练都是有益的。同时，通过控制模型的entropy的稳定增加，以平衡探索和利用，对稳定训练非常重要。

**stage3: Thinking Mode Fusion**

&#x20;

在一份包括长思维链数据和常用的指令微调数据的组合数据上对模型进行微调，**将非思考模式整合到思考模型中**。确保了推理和快速响应能力的无缝结合。

* sft数据构造：
  * 思考数据：拿stage1的query，用stage2的模型通过拒绝采样产出，保证sft不会让stage2的模型变差
  * 非思考数据：涵盖了很多tasks，例如代码、数学、指令遵循、多语言任务、创意写作、问答、角色扮演。此外，还用自动生成的checklists来评估非思考数据的回答质量
  * 为了增加在小语种上的效果，特地增加了翻译任务的占比
* chat template设计：non-thinking模式里直接把`<think>`和`</think>`间置空。为了实现默认是thinking模式，当用户query没有`/think`时，也加了一些thinking模式的样本。对于多轮会话，在用户query里随机插入`/think`或者`/no_think`，让模型根据最后一个flag来产出回答。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-eb1b810a6b11b4dbc2bfab445772972a25f2ed86%2Fqwen3-chat-template.png?alt=media)

* thinking预算：一旦模型学会了在non-thinking和thinking模式进行回复时，自发地产生了一种能力：能够基于不完整的thiking来产出结果。这也是实现thinking预算控制的基础。当thiking的长度达到一个用户定义的阈值后，会手动停止thking模式，并插入一个instrunction：`Considering the limited time by the user, I have to give the solution based on the thinking directly now.\n</think>.\n\n`，然后模型就会自己输出回答了。值得注意的是，这种能力并非通过显式训练获得，而是应用思考模式融合后自然涌现出的结果。

<https://muellerzr.github.io/til/end_thinking.html>

可以参考这个来直接改logit，大概意思是假设生成了k个token，设置了最多思考m个token，那`</think>`这个token的logit乘以$$1+\frac{m}{k}$$，如果超预算了，直接把这个token的概率改成0，并把其他所有token的概率改成-inf，相当于强制输出这个token。。

**stage4: General RL**

&#x20;

建立了一个复杂的奖励系统，覆盖超过20种不同的任务，每项任务都配有定制化的评分标准。提升如下几个能力：

* 指令遵循：模型准确地解释并遵循用户指令，包括内容、格式、长度、结构化输出等，与用户预期对齐
* 模版遵循：遵循特定的格式要求，例如thinking和non-thinking模式、用设计好的token（`<think>`和`</think>`）来区分thinking和回复
* 偏好对齐：对于开放性的问题，提升模型的helpfulness、engagement和style，提供更自然和令人满意的用户体验
* Agent能力：工具调用，在rl rollout期间，模型能够与真实环境进行完整的多轮交互，并且得到执行反馈，从而提升long-horizon决策任务上的性能和稳定性
* 特殊场景能力：例如RAG任务，设计reward，鼓励产生准确且符合上下文的答案，从而减小幻觉的风险

3种奖励机制：

* 基于规则的奖励：有助于产出高准确率的答案，缓解reward hacking
* 带参考答案的基于模型的奖励（Model-based Reward with Reference Answer）：对每个query给出一个参考答案，并用Qwen2.5-72B-Instruct基于这个参考答案对模型输出进行打分。相比规则reward更灵活，且能支持更多样的任务。
* 不带参考答案的基于模型的奖励：利用人类偏好数据，训练一个reward model，对模型回答输出一个scalar。能够适用于更多类型的query。

**strong-to-weak蒸馏**

&#x20;

包括5个密集模型（Qwen3-0.6B、1.7B、4B、8B和14B）以及一个MoE模型（Qwen3-30B-A3B），蒸馏过程主要分为两个阶段：

* **Off-policy蒸馏(即teacher产出样本)**：结合教师模型在 `/think`和`/no_think`两种模式下生成的输出，用于对学生模型进行回应蒸馏。有助于轻量级学生模型掌握基本的推理能力，并学会在不同思考模式之间切换。
* **On-policy蒸馏（即student产出样本）**：学生模型基于**当前策略**生成回应序列用于微调。对提示词进行采样，学生模型以 `/think` 或 `/no_think` 模式生成回应。随后，通过将其输出logits与教师模型（Qwen3-32B或Qwen3-235B-A22B）对齐，最小化两者之间的KL散度，从而对学生模型进行微调。

#### 使用

vllm：

```shell
vllm serve Qwen/Qwen3-30B-A3B --enable-reasoning --reasoning-parser deepseek_r1
# 要禁用思考模式，可以移除--reasoning-parser以及--enable-reasoning
```

软切换机制，可以在`enable_thinking=True`时动态控制模型的行为，即在用户prompt或系统prompt中添加`/think`和`/no_think`来逐轮切换模型的思考模式。

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

classQwenChatbot:
    def __init__(self, model_name="Qwen3-30B-A3B/Qwen3-30B-A3B"):
        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.model = AutoModelForCausalLM.from_pretrained(model_name)
        self.history = []

    def generate_response(self, user_input):
        messages = self.history + [{"role": "user", "content": user_input}]

        text = self.tokenizer.apply_chat_template(
            messages,
            tokenize=False,
            add_generation_prompt=True
        )

        inputs = self.tokenizer(text, return_tensors="pt")
        response_ids = self.model.generate\
          (**inputs, max_new_tokens=32768)[0][len(inputs.input_ids[0]):].tolist()
        response = self.tokenizer.decode(response_ids, skip_special_tokens=True)

        # Update history
        self.history.append({"role": "user", "content": user_input})
        self.history.append({"role": "assistant", "content": response})

        return response

# Example Usage
if __name__ == "__main__":
    chatbot = QwenChatbot()

    # First input (without /think or /no_think tags, 
    # thinking mode is enabled by default)
    user_input_1 = "How many r's in strawberries?"
    print(f"User: {user_input_1}")
    response_1 = chatbot.generate_response(user_input_1)
    print(f"Bot: {response_1}")
    print("----------------------")

    # Second input with /no_think
    user_input_2 = "Then, how many r's in blueberries? /no_think"
    print(f"User: {user_input_2}")
    response_2 = chatbot.generate_response(user_input_2)
    print(f"Bot: {response_2}") 
    print("----------------------")

    # Third input with /think
    user_input_3 = "Really? /think"
    print(f"User: {user_input_3}")
    response_3 = chatbot.generate_response(user_input_3)
    print(f"Bot: {response_3}")
```

MCP：可以使用MCP配置文件，使用Qwen-Agent内置的工具，或者自行集成其他工具。

```python
from qwen_agent.agents import Assistant

# Define LLM
llm_cfg = {
    'model': 'Qwen3-30B-A3B',
    # Use the endpoint provided by Alibaba Model Studio:
    # 'model_type': 'qwen_dashscope',
    # 'api_key': os.getenv('DASHSCOPE_API_KEY'),
    # Use a custom endpoint compatible with OpenAI API:
    'model_server': 'http://localhost:8000/v1',  # api_base
    'api_key': 'EMPTY',
    # Other parameters:
    # 'generate_cfg': {
    #         # Add: When the response content is `<think>this is the thought</think>this is the answer;
    #         # Do not add: When the response has been separated by reasoning_content and content.
    #         'thought_in_content': True,
    #     },
}

# Define Tools
tools = [
    {'mcpServers': {  # You can specify the MCP configuration file
            'time': {
                'command': 'uvx',
                'args': ['mcp-server-time', '--local-timezone=Asia/Shanghai']
            },
            "fetch": {
                "command": "uvx",
                "args": ["mcp-server-fetch"]
            }
        }
    },
  'code_interpreter',  # Built-in tools
]

# Define Agent
bot = Assistant(llm=llm_cfg, function_list=tools)

# Streaming generation
messages = [{'role': 'user', 'content': 
  'https://qwenlm.github.io/blog/ Introduce the latest developments of Qwen'}]
for responses in bot.run(messages=messages):
    pass
print(responses)
```

### ParScale

[ParScale：一种全新的大模型Scaling Law](https://mp.weixin.qq.com/s/Y51VKF7Kvd-avIvaYxjl0w)

[Parallel Scaling Law for Language Models](https://arxiv.org/a/2505.10475)

<https://github.com/QwenLM/ParScale>

### WorldPM

[建模世界偏好：偏好建模中的Scaling Laws](https://mp.weixin.qq.com/s/lI-2OxJ9zm7kBNK4TdorUw)

[WorldPM: Scaling Human Preference Modeling](https://arxiv.org/a/2505.10527)

<https://huggingface.co/Qwen/WorldPM-72B>

### QwenLong-L1

[强化学习解决长上下文推理问题：通义推出QwenLong-L1-32B](https://mp.weixin.qq.com/s/Q97BFZ79Ykczz3RSueIXHQ)

<https://github.com/Tongyi-Zhiwen/QwenLong-L1>

<https://huggingface.co/Tongyi-Zhiwen/QwenLong-L1-32B>

[QwenLong-L1: Towards Long-Context Large Reasoning Models with Reinforcement Learning](https://www.arxiv.org/a/2505.17667)

长上下文推理强化学习范式中的两个核心挑战：

* 次优的训练效率：
  * 奖励收敛较慢
  * 模型输出熵的显著降低，限制了优化过程中的探索行为。
* 不稳定的优化过程
  * KL散度突刺较多
  * 这是由于较长的输出长度和不均匀的输入长度导致方差变大，导致策略更新不稳定。

QwenLong-L1：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-fffba6c093182a8a44e9ed0cecbf9f8543d30aa4%2Fqwenlong-l1.png?alt=media)

* 渐进式上下文扩展：
  * 监督微调预热（Warm-Up Supervised Fine-Tuning）：使用蒸馏的长上下文推理数据来sft模型，获取稳定的初始策略，降低训练过程中的不稳定。
  * 课程引导的分阶段强化学习（Curriculum-Guided Phased Reinforcement Learning）：将强化学习训练分为两阶段，每阶段仅训练当前长度区间的样本，避免混合长度导致的优化冲突。
    * 阶段1：输入长度20K
    * 阶段2：扩展至60K，逐步适应长上下文。
  * 难度感知的回顾采样（Difficulty-Aware Retrospective Sampling）：根据样本平均奖励动态计算难度，低奖励样本（高难度）被优先保留至后续阶段。阶段2训练时，包含阶段1的高难度样本，强制模型持续探索复杂case。
* 混合奖励机制：
  * 规则奖励：与标准答案严格匹配，确保答案格式正确性，防止Reward Hacking。
  * 模型评判：用Qwen2.5-1.5B-Instruct作为轻量级评判模型，评估预测答案和标准答案之间语义等价性。
  * 组合策略：取规则与模型评判的最大值，兼顾精确性与答案多样性。

### token entropy

[Beyond the 80/20 Rule: High-Entropy Minority Tokens Drive Effective Reinforcement Learning for LLM Reasoning](http://arxiv.org/pdf/2506.01939)

推理能力的提升仅由高熵词贡献

### Qwen-VLo

[Qwen VLo：从“看懂”世界到“描绘”世界](https://mp.weixin.qq.com/s/E655CRmdgd5bySyuHPDoEw)

* 更精准的内容理解与再创造：以往的多模态模型在生成过程中容易出现语义不一致的问题，例如将汽车误生成其他类型的物体，或者无法保留原图的关键结构特征。而Qwen VLo通过更强大的细节捕捉能力，能够在生成过程中保持高度的语义一致性。例如，当用户输入一张汽车的照片并要求“更换颜色”时，Qwen VLo不仅能准确识别车型，还能保留其原有的结构特征，同时完成色彩风格的自然转换。
* 支持开放指令编辑修改生成：用户可以通过自然语言提出各种创意性指令，如“将这张画风改为梵高风格”、“让这张照片看起来像19世纪的老照片”或“给这张图片添加一个晴朗的天空”。Qwen VLo能够灵活响应这些开放性指令，并生成符合用户预期的结果。无论是艺术风格迁移、场景重构还是细节修饰，模型都能轻松应对。甚至一些传统的视觉感知人物如预测深度图、分割图、检测图以及边缘信息等也可以通过编辑指令轻松完成。更进一步，像很多更复杂的指令，比如一条指令中同时包含修改物体、修改文字、更换背景，模型也能轻松完成。
* 多语言指令支持：Qwen VLo支持包括中文、英文在内的多种语言指令。

训练：

* 采用动态分辨率训练，支持动态分辨率生成。无论是输入端还是输出端，模型都支持任意分辨率和长宽比的图像生成。这意味着用户不再受限于固定的格式，可以根据实际需求生成适配不同场景的图像内容，无论是海报、插图、网页Banner还是社交媒体封面，都能轻松应对。
* 创新性地引入了一种全新的生成机制：从上到下、从左到右逐步清晰的生成过程。这一机制不仅提升了生成效率，还特别适用于需要精细控制的长段落文字生成任务。例如，在生成带有大量文本的广告设计或漫画分镜时，Qwen VLo逐步生成慢慢修改。这种渐进式的生成方式让用户可以实时观察生成过程，并根据需要进行调整，从而获得最佳的创作效果。

### Qwen-Image

[告别文字乱码！全新文生图模型Qwen-Image来咯](https://mp.weixin.qq.com/s/CdLk_CwFk5Ui-JAvHV9-8Q)

<https://github.com/QwenLM/Qwen-Image>，集成在diffusers里了

[Qwen-Image Technical Report](https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/Qwen_Image.pdf)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-358755058284bd7d4f4938e0897912fe29236e04%2Fqwen-image-arch.png?alt=media)

* x1：文本经过Qwen2.5 VL得到的输出
* x2：图片经过VAE-encoder(用Wan-2.1-VAE)得到emb，和noise以及扩散时的timestep t一起经过patchify后得到的输出
* x3：timestep t直接过mlp得到的输出
* x3作为gate，x1和x2双流输入一个MM-DiT，中间过程可以理解为x1和x2分别得到qkv，对应地拼在一起，过一个self-attn，再和x3乘一下，和原来的x1或者x2相加，得到新的x1和x2

MM-Dit结构来自Stable Diffusion 3，即[Scaling Rectified Flow Transformers for High-Resolution Image Synthesis](https://openreview.net/pdf?id=FPnUhsQJ5B)，如下，c对应上面的x1，x对应上面的x2，y对应上面的x3

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c863712f0d3e5a060c9f45fe5f8ac21a89516570%2Fmm-dit.png?alt=media)

MSRoPE如图所示，即图像的位置编码完后，沿对角线把文本的加进去

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1286069954f3009a65038b60bedc4bdcd372d975%2Fqwen-image-msrope.png?alt=media)

关于汉字的渲染方面，没有像Seedream 2.0一样专门搞一个Glyph-ByT5的encoder，而是通过数据集构造来完成这一点

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-264195baa326b04626c4c71cee242a0359690a00%2Fseedream2.0.png?alt=media)

### Qwen3-Next

[Qwen3-Next：迈向更极致的训练推理性价比](https://mp.weixin.qq.com/s/STsWFuEkaoUa8J8v_uDhag)

* Qwen3-Next-80B-A3B-Base：实现了与Qwen3-32B dense模型相近甚至略好的性能，训练成本仅为Qwen3-32B的十分之一不到，在32k以上的上下文下的推理吞吐则是Qwen3-32B的十倍以上
* Qwen3-Next-80B-A3B-Instruct：与旗舰模型 Qwen3-235B-A22B-Instruct-2507表现相当，在256K超长上下文处理任务中展现出显著优势。
* Qwen3-Next-80B-A3B-Thinking：优于预训练成本更高的Qwen3-30B-A3B-Thinking-2507与Qwen3-32B-Thinking，且在多项基准测试中超越闭源模型Gemini-2.5-Flash-Thinking，部分关键指标已逼近Qwen3-235B-A22B-Thinking-2507

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bb5728c64c5d0d46bfc51d06dad5e22d438f10d0%2Fqwen3-next.png?alt=media)

* 混合架构：
  * Gated DeltaNet([Gated Delta Networks: Improving Mamba2 with Delta Rule](https://arxiv.org/pdf/2412.06464))比滑动窗口注意力（Sliding Window Attention）和Mamba2有更强的in-context learning能力。QK：16个head，V有32个head
  * 在3:1的混合比例（75%层使用Gated DeltaNet，25%层保留标准注意力）下，能超过超越单一架构，实现性能与效率的双重优化
  * 标准注意力中：
    * 沿用Qwen先前工作（[Gated Attention for Large Language Models: Non-linearity, Sparsity, and Attention-Sink-Free](https://arxiv.org/pdf/2505.06708)）中的输出门控机制，缓解注意力中的低秩问题。
    * 单个注意力头维度从128扩展至256
    * 仅对注意力头前25%的位置(前64维)维度添加RoPE，提高长度外推效果
    * Q：16个head，KV有2个head
* 极致稀疏MoE：仅激活3.7%参数
  * 512总专家，10路由(即激活)专家+1个共享专家，expert intermediat dim=512；而Qwen3-MoE是128个总专家和8个路由专家
  * 全局负载均衡([Demons in the Detail: On Implementing Load Balancing Loss for Training Specialized Mixture-of-Expert Models](https://arxiv.org/abs/2501.11873))：当激活专家固定时，持续增加专家总参数可以带来稳定的loss下降
* 训练稳定性：
  * QK-Norm：Zero-Centered RMSNorm([Gemma: Open Models Based on Gemini Research and Technology](https://arxiv.org/abs/2403.08295))，并在此基础上, 对norm weight施加weight decay, 以避免权重无界增长。
  * 初始化时归一化了MoE router的参数([Approximating Two-Layer Feedforward Networks for Efficient Transformers](https://arxiv.org/abs/2310.10837))，确保每个expert在训练早期都能被无偏地选中，减小初始化对实验结果的扰动。
* MTP：
  * 引入原生 Multi-Token Prediction机制([Better& faster large language models via multi-token prediction](https://arxiv.org/abs/2404.19737))，既得到了Speculative Decoding接受率较高的MTP模块，又提升了主干本身的综合性能。
  * 优化了MTP多步推理性能，通过训练推理一致的多步训练，进一步提高了实用场景下的Speculative Decoding接受率。

其中：<https://github.com/NVlabs/GatedDeltaNet>

### Qwen3-Omni

[又是深夜炸弹，Qwen3-Omni 和 Qwen3-TTS 同时发布！我是劳模…](https://mp.weixin.qq.com/s/CpuSr0W0VoA2qSnbSRVLVQ)

<https://github.com/QwenLM/Qwen3-Omni>

<https://huggingface.co/collections/Qwen/qwen3-omni-68d100a86cd0906843ceccbe>

<https://github.com/QwenLM/Qwen3-Omni/blob/main/assets/Qwen3_Omni.pdf>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-17866a38f26299d8368598808adc7fc7fb5b9212%2Fqwen3-omni.png?alt=media)

* Thinker：输入文本、图像和音频，生成文本
* Talker用于生成streaming speech tokens，输入是Thinker里图像和音频的高层语义表征，还有原始文本，这里不像Qwen2.5-Omni一样用Thinker的文本表征，可以更方便地给Talker嵌入其他外部模块（RAG/函数调用/安全过滤）方便人工干预，还可以为Thinker和Talker设置不同的prompt，例如分别控制Thinkier的风格和Talker的风格
* 为了极致地降低延时，自回归地预测多码本序列：在每一步解码中，MTP模块输出当前帧的残差码本，随后Code2Wav（轻量级的ConvNet）增量地合成对应波形，实现逐帧流式生成。
* 音频编码器：训了一个AuT(audio transformer)，attention-based encoder-decoder，基于2000万小时的音频数据(80%的中英文ASR数据，10%的其他语言ASR数据，10%的语音理解数据)训练。在attention layer之前，用Conv2D对filter bank特征进行8倍的下采样，将token rate降低到12.5Hz。用带了动态窗口的flash attention，来平衡实时的prefill caching效率和离线语音任务的效果。拿AuT的encoder来作为音频编码器，大概0.6B
* 文本处理：用Qwen的tokenizer，词表大小151k
* 视觉编码器：Qwen3-VL，543M参数，用SigLIP2-So400m初始化，在图片和视频的语料上训练
* 位置编码：TM-RoPE（Time-aligned Multimodal RoPE），在Multimodal RoPE的基础上引入了时间信息

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-76dce4c339532035bdb540eba44e1540dadd7535%2Faut.png?alt=media)

* 预训练：早期的预训练就混合了单模态和多模态的语料，并且设置了很多不同的prompt
  * Encoder Alignment Stage（S1）：LLM部分用Qwen3初始化，vision encoder用Qwen3-VL初始化，audio encoder用AuT初始化。之前的Qwen2.5-omni和Qwen2.5-VL是会fixed LLM，然后用图+文的数据去训练，同时在各encoder基础上有adapter去做模态对齐。这里把这个干掉了，而是这两个encoder只用单独自己模态的数据去训。
  * General Stage (S2)：在大约2T tokens的数据集（0.57T文本、0.77T语音、0.82T图像、0.05T视频、0.05T视频-语音）上训练
  * Long Context Stage (S3)：将最大的token length从8192扩展到32768，并把长语音和长视频的数据比例变大。
* 后训练：
  * Thinker：有文本对话数据、图文对话数据、语音对话数据、混合模态对话数据，处理成ChatML格式
    * 轻量SFT：用不会偏离预训练分布太远的指令遵循的数据集来训
    * strong-to-weak蒸馏：teacher是Qwen3-32B或者Qwen3-235B-A22B，和Qwen3一样，先off-policy蒸馏（用teacher模型产出结果，做response蒸馏），再on-policy蒸馏（用student产出结果，并用于finetune，最小化student的logit和teacher的KL散度）
    * GSPO：用了两种reward：rule-based和model-based（LLM-as-a-judge，对于通用任务用Qwen3，视觉相关的任务用Qwen2.5-VL）
  * Talker：
    * 用数亿的带有多模态上下文的语音数据训练，建立一个从多模态表示到语音的单调映射
    * 用高质量数据进行CPT，减少幻觉并且提升生成语音的质量；同时加了long context训练，让模型能处理复杂输入并生成符合上下文的语音输出
    * 基于多语言语音数据构建偏好pair对，并用DPO来训练，提升多语言语音的生成能力
    * speaker finetuning，让模型能够采用特定的声音（应该是类似变声器那种）
  * Captioner：开源了Qwen3-Omni-30B-A3B-Captioner，对Qwen3-Omni-30B-A3B基于对大量detailed audio descriptions数据训练的模型，能够对任意语音输入产出详细的、低幻觉的caption。

(提了个issue问MTP的具体实现逻辑：<https://github.com/QwenLM/Qwen3-Omni/discussions/15>)

### Qwen3.5

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-25a0cb64488234654151d044f59d4edf1d6603b3%2Fqwen3.5-rl.png?alt=media)

1. Qwen3.5-397B-A17B 与参数量超过1T的Qwen3-Max-Base表现相当
2. 结构用了qwen3-next的gated deltanet+gated atten，并且moe稀疏度变大了
3. 多模态的训练策略好像也有一些改进
4. 搞了一个异步rl框架，看着和verl、roll类似

和qwen3-next一样是三层linear加一层full，用了mtp，另外加了img相关的，vocab size比之前qwen3大了不少

### Qwen3.8

[刚刚，Qwen3.8-27B 开源了！](https://mp.weixin.qq.com/s/Ttv5cMD5p6DkUQWyoOsqCA)

<https://huggingface.co/Qwen/Qwen3.8-27B>

Qwen3.8-27B是原生多模态稠密（Dense）模型，支持262K原生上下文，通过YaRN技术可外推至1M Tokens上下文。较Qwen3.6-27B，新模型在编程和办公场景的性能大幅提升，表现甚至超越了Qwen3.7-Plus；同时，模型还新增了reasoning\_effort功能，根据任务难度控制思考深度，更省资源。Qwen3.8-27B也拥有Qwen3.8系列模型的共性，可以端到端完成复杂任务，直接交付经得起检验的可靠成果。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3d75d019f103cbefdddb08cd7e48875b26cdb39d%2Fqwen3.8-27b.png?alt=media)

[Qwen3.8-Flash：全新架构，更强更稳更划算](https://mp.weixin.qq.com/s/16MOkzjvg6SLfozl1HjymA)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4928679fb46a1d435b053f5228945afb407c21e9%2Fqwen3.8-flash.png?alt=media)

* Attention：采用 GDN + QSA Hybrid 架构。Gated DeltaNet（GDN）高效压缩历史信息；Qwen Sparse Attention（QSA） 通过压缩式轻量 Indexer 在 micro-block 粒度上筛选重要上下文，显著降低长序列 Attention 开销。
* Residual：引入 Gated Residual（GR），将 Residual Stream 扩展为 4 条分支，并通过动态 Gate 控制信息读写，增强跨层信息传递和训练稳定性。
* Embedding：引入 N-gram Embedding，利用局部上下文进行查表，以很少的额外计算扩展模型容量；Embedding Table 可以卸载到 Host Memory，并通过异步 Prefetch 与模型计算重叠。
* Optimization：采用 Muon Optimizer，围绕正交化精度、Muon 与 AdamW 的参数分工以及融合参数拆分等策略进一步优化，并针对新架构重新拟合 Scaling Law。

## Kimi系列

### MOBA

[撞车DeepSeek NSA，Kimi杨植麟署名的新注意力架构MoBA发布，代码也公开](https://mp.weixin.qq.com/s/okrYBqSRxUrXQiHjo-nlYA)

[MoBA: Mixture of Block Attention for Long-Context LLMs](https://github.com/MoonshotAI/MoBA/blob/master/MoBA_Tech_Report.pdf)

<https://github.com/MoonshotAI/MoBA>

### Kimi-VL

[月之暗面开源轻量级MoE多模态模型，支持推理，效果超过GPT-4o！](https://mp.weixin.qq.com/s/1mvFrL022d-VWPY2k8hcfA)

[Kimi-VL technical report](https://github.com/MoonshotAI/Kimi-VL/blob/main/Kimi-VL.pdf)

<https://huggingface.co/collections/moonshotai/kimi-vl-a3b-67f67b6ac91d3b03d382dd85>

[Kimi 16B胜GPT-4o！开源视觉推理模型：MoE架构，推理时仅激活2.8B](https://mp.weixin.qq.com/s/EsjsqnInCOJpU9SpJgyoOA)

### K2

[Kimi K2 发布并开源，擅长代码与 Agentic 任务](https://mp.weixin.qq.com/s/2RPmHf_8KqIjXbY5jLdztQ)

<https://bigeagle.me/2025/07/kimi-k2/>

[Kimi K2官方技术报告出炉：采用384个专家，训练不靠刷题靠“用自己的话再讲一遍”](https://mp.weixin.qq.com/s/7ybn0PadgJCkUDFvCedm1Q)

<https://github.com/MoonshotAI/Kimi-K2/blob/main/tech_report.pdf>

参考：<https://aider.chat/>，<https://github.com/CharlesQ9/Alita>

稳定的复杂指令解析能力，将需求自动拆解为一系列格式规范、可直接执行的ToolCall结构。

#### 模型结构

<https://huggingface.co/moonshotai/Kimi-K2-Instruct>

| 项目                               | 值      |
| -------------------------------- | ------ |
| 总参数量                             | 1T     |
| 激活参数量                            | 32B    |
| 层数                               | 61     |
| Dense层数                          | 1      |
| Attention Hidden Dimension       | 7168   |
| MoE Hidden Dimension (每个 Expert) | 2048   |
| Attention Head数                  | 64     |
| 专家数                              | 384    |
| 每个token选择的专家数                    | 8      |
| 共享专家数                            | 1      |
| Vocabulary Size                  | 160K   |
| Context Length                   | 128K   |
| Attention                        | MLA    |
| 激活函数                             | SwiGLU |

#### MuonClip优化器

[月之暗面开源改进版Muon优化器，算力需求比AdamW锐减48%，DeepSeek也适用](https://mp.weixin.qq.com/s/E65ULmjlK7Lv81dqvAubcQ)

原始muon：<https://github.com/KellerJordan/Muon>

[Muon is Scalable for LLM Training](https://github.com/MoonshotAI/Moonlight/blob/master/Moonlight.pdf)

<https://github.com/MoonshotAI/Moonlight>

K2的架构和deepseek-v3类似，为了更好地scale up：

* 减小了head数以提升长上下文的效率
* 增加MoE的稀疏度以提升token效率

但scale up的挑战就是attention logit的爆炸带来的训练不稳定，现有的例如logit的soft capping和q-k norm还不够。因此，对Muon优化器引入了qk-clip，即在Muon更新之后，对q和k的映射矩阵直接rescale，从而在源头上控制attention logits的scale，

$$
\begin{gathered}
q\_i=\eta^\alpha W\_q x\_i \\
k\_i=\eta^{1-\alpha} W\_k x\_i
\end{gathered}
$$

其中$$\alpha$$是一个超参，对应的attention logit就变成了：

$$
\left(\eta^\alpha q\_i\right)^{\top}\left(\eta^{1-\alpha} k\_j\right)=\eta q\_i^{\top} k\_j
$$

而$$\eta$$是每个step后，根据这个step里的最大attention logit来设置的，$$t$$是一个提前设置好的阈值

$$
\eta=\min \left(\frac{t}{\max \_{i, j}\left(q\_i^{\top} k\_j\right)}, 1\right)
$$

这种方法使得K2没有logit爆炸，且能保持下游任务的性能，在15.5T的tokens上稳定训练，没有loss spike

详见苏剑林的博客：[QK-Clip：让Muon在Scaleup之路上更进一步](https://kexue.fm/archives/11126)

#### Agentic能力：大规模Agentic Tool Use数据合成

参考ACEBench，开发了一个pipeline，可以大规模模拟真实世界的工具使用场景。覆盖数百领域、数千工具（包括MCP）。所有任务都基于评分标准（rubric），agent和user agent还有环境（工具模拟器）进行交互，通过llm进行judge，最终筛选出一个高质量的数据集。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6ac12341dde5f9ef8bac65aba6b4326469703d10%2Fk2-agentic-data-synthesis.png?alt=media)

#### Agentic能力：通用强化学习

可验证任务的如数学和编程竞赛，而撰写研究报告则是不可验证的任务。这个通用强化学习系统还采用自我判断(self-judging)机制，让模型充当自身的critic，为不可验证任务提供可扩展的、基于评分标准(rubric)的反馈。

同时，使用可验证奖励的on-policy rollout来持续更新critic，使critic不断提高其在最新policy上的评估准确性。可以看成是一种利用可验证奖励来改进不可验证奖励估计的方法。

### Kimi-Linear

[Kimi Linear: An Expressive, Efficient Attention Architecture](https://github.com/MoonshotAI/Kimi-Linear/blob/master/tech_report.pdf)

* Kimi Delta Attention (KDA)：用finegrained gating优化了gated delta rule
* 混合架构：3:1的KDA-to-global MLA比例，减小内存占用并提升相比full attention的效果
* 效果：在很多task上比full attention更好，包括long-context和RL-style benchmarks
* 高吞吐: 最多6x的decoding加速，显著降低TPOT(time per output token).

和qwen3-next的整体对比，fullattn一个用的是gated softmax attn，一个用的是mla，moe部分类似，主要区别在linear部分

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bb93713f0bf115359595f3a457a12153c5e6b85b%2Fkimi-linear.png?alt=media)

把GDN里更新状态的那个方程里的alpha换成了如下的一个对角矩阵

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b94a3464c47082d40a645d922c7f7bc6ec10553a%2Fkimi-linear-alpha.jpg?alt=media)

alpha/beta/gate的nn改成了lora结构，alpha和beta也加了swish

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0bec91bfc0dde89b5c4a4824e4019eb055d0dbea%2Fkimi-linear-lora-swish.png?alt=media)

### K2 Thinking

[Kimi K2 Thinking突袭！智能体&推理能力超GPT-5，网友：再次缩小开源闭源差距](https://mp.weixin.qq.com/s/8zar6UBMPw4Qt2TgwEH_ug)

<https://huggingface.co/moonshotai/Kimi-K2-Thinking>

### K2.5

[Kimi 发布并开源 K2.5 模型，带来全新视觉理解、代码和 Agent 集群能力](https://mp.weixin.qq.com/s/Bhn43P1GnGXsvsh5MnN47Q)

原生的多模态架构设计，同时支持视觉与文本输入、思考与非思考模式、对话与Agent任务。

### K3

[简单谈谈K3的MoE和Attention](https://kexue.fm/archives/11848)

[LatentMoE: Toward Optimal Accuracy per FLOP and Parameter in Mixture of Experts](https://arxiv.org/pdf/2601.18089)，先把token压缩到较小的“潜在空间”中，再交给专家处理；用省下来的成本，激活更多、更丰富的专家组合。

传统moe的部署瓶颈：

* 低并发、低延迟场景：主要瓶颈是从显存加载专家权重，而非算力。
* 高吞吐、多 GPU 场景：token要通过all-to-all通信送到不同GPU上的专家，通信可能比计算更慢。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-23db6e1b5035bd2e40caca32911c9f4961d31299%2Flatent-moe.png?alt=media)

#### 图文联合优化

之前的经验是在LLM的训练后期，加入高比例(50%+)的视觉token，即把多模态能力当成语言能力的附加功能

#### Agent Swarm

首次引入了「Agent 集群」(Agent Swarm)能力，经过并行智能体强化学习 (Parallel-Agent Reinforcement Learning, PARL) 训练，能够自主管理多达100个子智能体的智能体群，执行多达1500个协调步骤的并行工作流程，而无需预定义角色或手工设计的工作流程。

PARL使用可训练的orchestrator（协调器）agent将任务分解为可并行化的子任务，每个子任务由动态实例化的frozen subagents执行(只更新orchestrator，subagent的执行序列从优化目标里删掉了)。与顺序执行agents相比，并发运行这些子任务可显著降低端到端延迟。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-33d934ee6779d5293726229f4f83afa206504868%2Forchestrator-parl.png?alt=media)

由于独立运行的子智能体提供的反馈存在延迟、稀疏和非平稳性，训练一个可靠的并行orchestrator极具挑战性。常见的故障模式是串行崩溃，即orchestrator尽管具备并行能力，却默认执行单智能体任务。为了解决这个问题，PARL采用了分阶段奖励塑造(staged reward shaping)，在训练初期鼓励并行性，并逐步将重点转移到任务成功上。reward如下，

$$
R\_t=\lambda\_{\text {aux }}(e) \cdot \underbrace{r\_{\text {parallel }}}*{\text {instantiation reward }}+\left(1-\lambda*{\text {aux }}(e)\right) \cdot \underbrace{(\mathbb{I}\[\text { success }] \cdot Q(\tau))}\_{\text {task-level outcome }}
$$

* $$\lambda\_{\text {aux }}(e)$$在训练中从0.1退火到0
* 早期，辅助奖励$$r\_{\text {parallel }}$$激励subagents的实例化和并发执行，从而促进对并行调度空间的探索
* 随着训练的进行，优化方向转向端到端任务质量$$Q(\tau)$$，防止出现名义上启用并行但实际上却不启用并行的退化解决方案

为了进一步促使并行策略的出现，我们引入了一个**计算瓶颈**，使得顺序执行变得不切实际。即不计算总步数，而是使用Critical Steps(关键步数)来评估性能，是一个受并行计算中关键路径(critical path)启发的、面向延迟的指标。根据此指标，只有当生成更多子任务能够缩短关键路径时，生成更多子任务才有帮助：

$$
\text { CriticalSteps }=\sum\_{t=1}^T\left(S\_{\operatorname{main}}^{(t)}+\max *i S*{\mathrm{sub}, i}^{(t)}\right)
$$

* $$S\_{\text {main }}^{(t)}$$记录orchestration开销
* $$\max *i S*{\mathrm{sub}, i}^{(t)}$$反映每个阶段中最慢的subagent

## MiniMax

### MiniMax-01

[MiniMax开源4M超长上下文新模型！性能比肩DeepSeek-v3、GPT-4o](https://mp.weixin.qq.com/s/pj6XZbyZu_mx2KRwIF1Q9g)

[MiniMax押注线性注意力，让百万级长文本只用1/2700算力｜对话MiniMax-01架构负责人钟怡然](https://mp.weixin.qq.com/s/NigAnui9fXbfresW8KIX-Q)

[MiniMax-01: Scaling Foundation Models with Lightning Attention](https://filecdn.minimax.chat/_Arxiv_MiniMax_01_Report.pdf)

m层lightning attention后再接1层softmax attention，参数456B，每次推理激活45.9B。

### MiniMax-M1

[性能比肩DeepSeek-R1，MiniMax仅花380万训出推理大模型性价比新王｜开源](https://mp.weixin.qq.com/s/FHis_2BmwtfA7yOe45Rdxg)

<https://github.com/MiniMax-AI/MiniMax-M1>

[MiniMax-M1: Scaling Test-Time ComputeEfficiently with Lightning Attention](https://github.com/MiniMax-AI/MiniMax-M1/blob/main/MiniMax_M1_tech_report.pdf)

#### 结构

每7个Lightning Attention的Transnormer块后接1个传统Softmax Attention的Transformer块。这种设计理论上可以让推理长度高效扩展到数十万个token。

#### CISPO

强化学习Clipped IS-weight Policy Optimization

### MiniMax-M2

[MiniMax M2 & Agent，大巧若拙](https://mp.weixin.qq.com/s/1AK8qNmBFepVYoRIDWBE1g)

[全注意力、复杂推理不掉速：MiniMax M2把Agent做成了「可执行能力」](https://mp.weixin.qq.com/s/ywQ5wHrHhLz1i7SMPsqifA)

看着是采用全full attn了，swa和lightning attention都没有了

### Minimax-M3

<https://www.minimaxi.com/models/text/m3>

* M3在编码与智能体评测中达到行业顶尖水平，具备自主任务拆解、工具调用与多步推理能力，写出的代码目标是直接可交付，而不是「能跑但需要人改」。
* M3是原生多模态模型，重构整个数据管线将预训练数据规模扩充至百T量级，从第零步开始多模态训练，使文本和视觉语义空间高度对齐。多模态是刻在模型骨子里的原生能力，而非后期贴上去的浅表图层。
* 基于自研 MiniMax Sparse Attention（MSA）架构，API 最高支持 1M tokens 上下文窗口，保障至少 512K tokens 可用。1M 上下文是长程 Agent、长程 Coding、长视频理解的基础设施。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e6e41aba4c0cfda10dbe2107b7569ebc0248f24a%2FMSA.png?alt=media)

## 百度

### ERNIE 3.0

[ERNIE 3.0: Large-scale Knowledge Enhanced Pre-training for Language Understanding and Generation](https://arxiv.org/pdf/2107.02137)结合自回归网络和autoencoding网络，让模型能够同时做语言理解和语言生成任务，可以支持zero-shot、few-shot和finetuning。有10B参数，在4TB的文本和图谱数据上训练。

![ernie3.0](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ff05cb15980da225b7cae0e7c6871008ec8e7fe4%2Fernie3.0.png?alt=media)

### ERNIE4.5

[提前免费！百度连发两款模型，我们实测：能听歌看电影，还会蛐蛐人](https://mp.weixin.qq.com/s/XKim3L7__c9VXJ2bj4FYhA)

推理模型文心X1：

* 应用了递进式强化学习训练方法
* 具备 “长思维链”，采用了思维链和行动链耦合的端到端训练方式，不是只学习思考或者只学习行动，而是把思考和行动结合起来
* 采用了多元统一的奖励系统

文心4.5：

* FlashMask 动态注意力掩码：[FlashMask: Efficient and Rich Mask Extension of FlashAttention](https://arxiv.org/a/2410.01359)，通过列式稀疏掩码表示方法，将传统的二维稠密掩码矩阵转换为一维的行索引区间表示，从而显著降低了存储复杂度，从$$O(N^2)$$降低到$$O(N)$$。极致的加速了大模型训练效率，尤其是长序列场景下的训练效率。
* 多模态异构专家扩展技术：结合多模态数据处理与混合专家模型（MoE）的创新架构，旨在通过针对不同模态特点构建的**异构专家模块**，解决多模态融合中的梯度不均衡问题，提升模型的多模态融合能力。多模态异构专家扩展技术在多个应用场景中展现了显著优势，例如多模态问答任务，这种技术能够更高效地处理复杂的多模态数据。
* 时空维度表征压缩技术：把图片和视频里的关键信息进行浓缩的方法。在不丢失重要细节的情况下，在时空维度对图片和视频的语义表征进行高效压缩，让这些数据变得更小、更高效。这样一来，训练多模态模型（也就是同时处理文字、图片、视频等多种数据的模型）时就能更快、更省资源。
* 基于知识点的大规模数据构建技术：知识分级采样优先把重要的、核心的知识挑出来，接着把挑出来的知识点进行压缩，去掉多余的部分，把相关的知识融合在一起。对于那些比较少见、不太好找的知识点，专门合成一些相关内容，确保这些重要的小众知识也不会被遗漏。这样一来，模型幻觉大大降低。
* 基于自反馈的Post-training技术：通过多种评估方式不断优化模型的后训练方法。简单来说，它让模型在训练过程中不断反思自己的表现，根据不同的评价标准调整自己，从而让模型变得更稳定、更可靠。这种技术还能显著提升预训练模型理解人类意图的能力，让模型的回答更符合人类的期望。

[文心4.5系列模型，正式开源！](https://mp.weixin.qq.com/s/BVQzYwcnpDzUAWvRzP5g_g)

<https://huggingface.co/collections/baidu/ernie-45-6861cd4c9be84540645f35c9>

[ERNIE 4.5 Technical Report](https://yiyan.baidu.com/blog/publication/ERNIE_Technical_Report.pdf)

参考小红书上的[帖子](https://www.xiaohongshu.com/explore/6862589e000000000b02c132?app_platform=ios\&app_version=8.89.2\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBLxlIs436Wy49lyj05bhyg3F53jxc7IUn7w-hlr-Yy2Y=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1751276127\&share_id=04bd5b0ad1c54fc5adf59e464eea0389)

## 快手

### AutoThink

[DeepSeek-V3 & R1合体了？ 快手开源"Auto Think"大模型，根据问题自动调节思考深度](https://mp.weixin.qq.com/s/EcH4GMRtVkvGByonRU5H-Q)

<https://huggingface.co/Kwaipilot/KwaiCoder-AutoThink-preview>

#### 冷启

&#x20;

采用Agentic的流程设计，基于训练数据Query，为其构建其优势模式下的Response，构建多样化AutoThink冷启动数据，让模型适应AutoThink的数据形式，并指导其挖掘自身优势场景。即使通过非思考模型，也能获得高质量的带有思考过程的推理数据。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6113b69985ece99c1f25e367671a5ea0d984aac2%2Fauto-think-coldstart.png?alt=media)

#### Reasoning RL

&#x20;

* 采用动态调整context length的方式，提升RL的效率：在训练初期先用16K的最大回复长度，在训练过程中通过观察模型回复的截断概率，逐步扩大其回复长度限制，最终扩展至32K。
* 采用了大的batchsize和rollout个数，利用off-policy的更新策略来进一步提升模型的训练效率。在训练过程中会动态地丢弃“过于简单”的样本，来保证batch内有效梯度样本的数量，如在SRPO论文([SRPO: A Cross-Domain Implementation of Large-Scale Reinforcement Learning on LLM](https://arxiv.org/pdf/2504.14286))
* 为了平衡模型的探索-利用，通过训练时的熵值来调整KL-Loss的约束力度以及off-policy更新时模型的clip范围，进一步加速模型收敛。

#### Step-SRPO

&#x20;

由于GRPO**缺乏可解释的过程监督信号**，导致我们在训练过程中出现了一系列不稳定现象，比如模型认为应该开启think模式却选择了不进行思考，以及对于一些代码/数学题，哪怕问题比较简单也会选择开启思考模式。

面对这些问题，我们基于传统GRPO强化学习算法开发出了面向**带有中间过程**的Step-SRPO强化学习算法，对**不同的token根据未来期望收益使用不同的优势计算函数**。发现

* 不仅模型判断的准确性提升了，同时思考能力和非思考性能都有大幅上升。
* 在模型能力上升的同时，模型选择不开启思考模式的比例也在不断上升，模型回答的token数量也随之不断减少。

从而实现了在控制推理资源消耗的同时，提升了模型的整体表现，达成性能与成本的最优协同。

同时也观察到，对于有些榜单，即使模型没有开启思考模式，在这种强化学习过程之后，开启思考模式的比例大幅下降同时，模型性能仍然保持了比强化学习之前更高的基准。

### Magistral

[Mistral的首个强推理模型：拥抱开源，推理速度快10倍](https://mp.weixin.qq.com/s/Go5dXv4DA3hy5lGhxxE8SA)

<https://huggingface.co/mistralai/Magistral-Small-2506>

[论文](https://mistral.ai/static/research/magistral.pdf)

核心设计原则是使用与用户相同的语言进行推理。在未经任何处理的数学和编程问题上进行强化学习通常会导致模型在推理过程中出现混合语言。在没有语言限制的初步实验中，Mistral也经常观察到混合英语、中文和俄语单词的输出。虽然这些输出是连贯的，但为了避免语言切换，他们在计算对话（由**问题、想法、答案**组成）的奖励时，首先通过删除LaTeX内容和代码块对这三个部分进行归一化，然后对每个部分应用fastText分类器。如果**分类器指示所有三个部分都使用相同的语言**，则会额外给予0.1的奖励。

## 智谱

### GLM-4.1V-9B-Thinking

[9B“小”模型干了票“大”的：性能超8倍参数模型，拿下23项SOTA | 智谱开源](https://mp.weixin.qq.com/s/5jcSAR6I7MyHc4INo7f9BQ)

[GLM-4.1V-Thinking: Towards Versatile Multimodal Reasoning with Scalable Reinforcement Learning](https://arxiv.org/a/2507.01006)

<https://github.com/THUDM/GLM-4.1V-Thinking>

### GLM-4.5

[GLM-4.5: Agentic, Reasoning, and Coding (ARC) Foundation Models](https://arxiv.org/pdf/2508.06471)

#### 模型结构

* MoE用的是[DeepSeek-V3 Technical Report](https://arxiv.org/pdf/2412.19437)里的loss-free balance routing（[Auxiliary-Loss-Free Load Balancing Strategy for Mixture-of-Experts](https://arxiv.org/pdf/2408.15664)）和sigmoid gate
* 减小宽度（routed专家的个数和hidden dim）、增加深度（层数），因为发现更深的模型reasoning能力更强
* self-attn部分用GQA+partial RoPE，用了2.5倍的attn heads（96head，5120dim），虽然对训练loss没有帮助，但对reasoning benchmarks有持续提升。加了QK-Norm来稳定attn logits的范围
* 加了一层MoE来实现MTP(multi-token prediction)层([Better & Faster Large Language Models via Multi-token Prediction](https://arxiv.org/pdf/2404.19737))，从而在infer的时候支持投机采样

| Model                      | GLM-4.5 | GLM-4.5-Air | DeepSeek-V3 | Kimi K2 |
| -------------------------- | ------- | ----------- | ----------- | ------- |
| # Total Parameters         | 355B    | 106B        | 671B        | 1043B   |
| # Activated Parameters     | 32B     | 12B         | 37B         | 32B     |
| # Dense Layers             | 3       | 1           | 3           | 1       |
| # MoE Layers               | 89      | 45          | 58          | 60      |
| # MTP Layers               | 1       | 1           | 1           | 0       |
| Hidden Dim                 | 5120    | 4096        | 7168        | 7168    |
| Dense Intermediate Dim     | 12288   | 10944       | 18432       | 18432   |
| MoE Intermediate Dim       | 1536    | 1408        | 2048        | 2048    |
| Attention Head Dim         | 128     | 128         | 192         | 192     |
| # Attention Heads          | 96      | 96          | 128         | 64      |
| # Key-Value Heads          | 8       | 8           | 128         | 64      |
| # Experts (total)          | 160     | 128         | 256         | 384     |
| # Experts Active Per Token | 8       | 8           | 8           | 8       |
| # Shared Experts           | 1       | 1           | 1           | 1       |
| QK-Norm                    | Yes     | No          | No          | No      |

#### 预训练

#### 后训练

### GLM-4.6

[节前重磅：开源旗舰模型新SOTA，智谱GLM-4.6问世](https://mp.weixin.qq.com/s/wXZ-AZbFEfskBR6lOhRmLA)

### GLM-5

面向Agentic Engineering打造，凭借更强的代码能力、更长的200K上下文、更好的Agent工具调用能力，尤其擅长处理复杂系统工程与长程Agent任务，准确率攀升明显。

* GLM-5在底层架构层面采用DSA（DeepSeek Sparse Attention），在「长文本推理能力」与「训推成本」之间取得绝佳平衡。
* GLM-5通过异步强化学习基础设施——Slime框架，将「生成过程」与「训练过程」解耦，显著提升后训练阶段的效率。
* Agent 强化学习算法是 GLM-5 能够更高效地从复杂、长时序交互中学习的关键。

### GLM-5.3

[GLM-5.3：前沿编程能力与涌现的网络安全能力](https://mp.weixin.qq.com/s/JdBx3B12L7Mhxruf4Nfr4g)

<https://z.ai/blog/glm-5.3>

* 更强的编程能力。GLM-5.3是编程能力最强的开源模型，在内部自建体感评测中较GLM-5.2提升50%，在包括Terminal Bench 3.0、Agents' Last Exam (CLI)在内的公开基准测试中取得开源第一。
* 网络安全能力。在白盒代码审查与漏洞发现等安全任务中，GLM-5.3的表现持平Mythos 5，展现出面向网络安全防御场景的强大潜力。
* 后训练Scaling。上述全部提升都来自后训练。基于[IndexShare](https://arxiv.org/abs/2603.12201)、[SAO](https://arxiv.org/abs/2607.07508)、以及持续演进的新一代Slime框架，我们在与GLM-5.2完全相同基座上高效推进强化学习，可能我们还远未开发出这个基座的智能上界。

[GLM-5.3-Flash：前沿智能进入普惠时代](https://mp.weixin.qq.com/s/O7RCVME1Kut-Z2oFYhgrkw)

<https://z.ai/blog/glm-5.3-flash>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f476a71f17a0b072e96333dd0b5277996200d689%2Fglm5.3-flash.png?alt=media)

为降低模型长上下文场景下的注意力成本，采用线性注意力与稀疏注意力相结合的混合架构：

* 线性注意力通过递归机制捕获局部依赖关系，
* 稀疏注意力则借助轻量级索引器召回全局上下文

引入IndexPool为进一步降低1M上下文下索引器的时延与内存开销，通过加权池化将索引器的4个缓存向量压缩为1个。

## 美团

### LongCat-flash

<https://longcat.chat/>

<https://github.com/meituan-longcat/LongCat-Flash-Chat/blob/main/tech_report.pdf>

[LongCat-Flash Technical Report](https://arxiv.org/pdf/2509.01322)

### Longcat-flash-thinking

<https://huggingface.co/meituan-longcat/LongCat-Flash-Thinking>

<https://github.com/meituan-longcat/LongCat-Flash-Thinking/blob/main/tech_report.pdf>

## mamba-transformer混合

### SSM

[为什么线性注意力要加Short Conv？](https://kexue.fm/archives/11320)

[挑战Transformer的Mamba是什么来头？作者博士论文理清SSM进化路径](https://mp.weixin.qq.com/s/oXSwnL0sD96nnnqJyko7UA)

[Pretraining Without Attention](https://arxiv.org/pdf/2212.10544.pdf)

[预训练无需注意力，扩展到4096个token不成问题，与BERT相当](http://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650864837\&idx=2\&sn=c57f0b8a7daf7d45093448c8ff5df3fc\&chksm=84e538bbb392b1ad857f3ad2c2d6d6dbc9562ff492a7cda336dc07abe4d3912c19fa4c30d365\&scene=21#wechat_redirect)

[Diffusion Models Without Attention](https://arxiv.org/pdf/2311.18257.pdf)

[丢掉注意力的扩散模型：Mamba带火的SSM被苹果、康奈尔盯上了](http://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650900014\&idx=4\&sn=315ca75ba700a93598b5c581ad2fb735\&chksm=84e44250b393cb4619e7c24b9f6affe88e4c71ebb97d0c43b5301edd0a11154af6322f68cfd4\&scene=21#wechat_redirect)

[一文看懂Mamba，Transformer最强竞争者](https://mp.weixin.qq.com/s/gwE_OVWigV71Qiup7F_9Cg)

[Long Range Language Modeling via Gated State Spaces](https://arxiv.org/a/2206.13947) 认为 Transformer 和 SSM 完全可以互补。

选择性状态空间模型(selective state space model)是Mamba论文作者Albert Gu此前主导研发的S4架构(Structured State Spaces for Sequence Modeling)的一个简单泛化。

<https://stacks.stanford.edu/file/druid:mb976vf9362/gu_dissertation-augmented.pdf>

序列模型在训练和推理时的侧重点：

* 训练时：在整个list上计算loss，需要优化forward的耗时
* 推理时：一次输入一个时间步，需要高效地顺序处理

#### SSM原理

输入$$u(t) \in \mathbb{R}$$，输出是$$y(t) \in \mathbb{R}$$，引入**状态** $$x(t) \in \mathbb{R}^N$$，目标是学习映射$$u(t) \mapsto y(t)$$，

$$
\begin{aligned}
x^{\prime}(t) & =\boldsymbol{A} x(t)+\boldsymbol{B} u(t) \\
y(t) & =\boldsymbol{C} x(t)+\boldsymbol{D} u(t)
\end{aligned}
$$

结合[维基百科](https://en.wikipedia.org/wiki/State-space_representation)的图，方便理解

![ssm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6a678a510e1394f678112e53877fe434fb59d8e9%2Fssm.png?alt=media)

各变量含义如下（看起来和RNN很像）：

* $$\boldsymbol{A}\in \mathbb{R}^{N\times N}$$：状态矩阵
* $$\boldsymbol{B}\in \mathbb{R}^{N\times N}$$：输入矩阵
* $$\boldsymbol{C}\in \mathbb{R}^{N\times N}$$：输出矩阵
* $$\boldsymbol{D}\in \mathbb{R}^{N\times N}$$：feedforward矩阵或者feedthrough矩阵
* $$x^{\prime}(t):=\frac{d}{d t} \mathbf{x}(t)$$是$$x(t)$$关于$$t$$的导数，所以图里有一个**积分**$$\int$$操作把它变回$$x(t)$$

假设序列长度为$$L$$，那么

* 时间复杂度：
  * SSM：$$O(N^2L)$$，因为$$\boldsymbol{A} x(t)$$是$$N\times N$$和$$N\times 1$$的矩阵乘法，复杂度是$$N^2$$
  * RNN：$$O(N^2L)$$，和SSM类似
  * CNN：$$O(kLM^2)$$，假设$$k$$个卷积核，每个卷积核$$M\times M$$，一般$$M \ll N$$
* 空间复杂度：
  * SSM：$$O(N^2+NL)$$，因为中间状态$$x(t) \in \mathbb{R}^N$$是需要**额外存储**的
  * RNN：$$O(N^2)$$，所有时间步共享权重，不需要像SSM专门为每个时间步存一个状态$$x(t)$$
  * CNN：$$kM^2$$

所以传统SSM的时空复杂度都很高，作者提出了S4(structured state space model)

\====>hippo的假设会让模型更关注宽波，对于很窄的毛刺信号效果不好，所以对大海捞针任务效果并不好

### Mamba

[Mamba: Linear-Time Sequence Modeling with Selective State Spaces](https://arxiv.org/ftp/arxiv/papers/2312/2312.00752.pdf)

<https://huggingface.co/state-spaces>

<https://github.com/havenhq/mamba-chat>

[MODELING SEQUENCES WITH STRUCTURED STATE SPACES](https://stacks.stanford.edu/file/druid:mb976vf9362)

### Mamba2

[再战Transformer！原作者带队的Mamba 2来了，新架构训练效率大幅提升](https://mp.weixin.qq.com/s/31t6pJqcXrZDjT6XiJZC_g)

[Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality](https://arxiv.org/pdf/2405.21060)

<https://github.com/state-spaces/mamba>

### Mamba3

[Mamba-3惊现AI顶会ICLR 2026！CMU知名华人教授一作首代工作AI圈爆红](https://mp.weixin.qq.com/s/XpdIgXyMSTWF_MERFEdJtQ)

[Mamba-3惊现ICLR 2026投稿：三重升级打满“推理优先”范式](https://mp.weixin.qq.com/s/ORCi6SWJJvynDf0x-X3YMQ)

[Mamba-3: Improved Sequence Modeling using State Space Principles](https://openreview.net/pdf?id=HwCvaJOiCj)

### SAMBA

[长文本模型近期研究工作梳理](https://mp.weixin.qq.com/s/5u2w08twsJ6CgHZ2FpN8JA)

[SAMBA: Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling](https://arxiv.org/pdf/2406.07522)

### Mamba in llama

[Mamba作者新作：将Llama3蒸馏成混合线性 RNN](https://mp.weixin.qq.com/s/jZGcBxhVUfb-Qv1UkqYK4A)

[The Mamba in the Llama: Distilling and Accelerating Hybrid Models](https://arxiv.org/pdf/2408.15237)

### Mamba+Transformer

[Mamba真比Transformer更优吗？Mamba原作者：两个都要！混合架构才是最优解](https://mp.weixin.qq.com/s/omImpaiddmSJ968bCZ8qmw)

[An Empirical Study of Mamba-based Language Models](https://arxiv.org/pdf/2406.07887)

### Block-State Transformer

[Block-State Transformer](https://arxiv.org/pdf/2306.09539.pdf)

### Jamba

[Mamba做大做强！混合Transformer，打败Transformer](https://mp.weixin.qq.com/s/Lde0G_zysfrGcRUX5nOf8g)

<https://huggingface.co/ai21la/Jamba-v0.1>

让mamba做短程头，让transformer做长程头

### Falcon Mamba

[非Transformer架构站起来了！首个纯无注意力大模型，超越开源巨头Llama 3.1](https://mp.weixin.qq.com/s/ET9gghK4asEr5ObuW2padw)

[Welcome FalconMamba: The first strong attention-free 7B model](https://huggingface.co/blog/falconmamba)

<https://huggingface.co/tiiuae/falcon-mamba-7b>

<https://github.com/huggingface/transformers/blob/main/src/transformers/models/falcon_mamba/modeling_falcon_mamba.py>

核心是`FalconMambaMixer`这个类

无需增加内存存储，就可以处理任意长度的序列，并且能够在单个 24GB A10 GPU 上运行。

训练数据有5500GT ，主要由RefinedWeb数据集组成，并添加了来自公共源的高质量技术数据、代码数据和数学数据。

采用**多阶段训练策略**进行训练，上下文长度从2048增加到了8192。此外，受到**课程学习**概念的启发，整个训练阶段精心选择了混合数据，充分考虑了数据的**多样性和复杂性**。在最后的训练阶段，使用了一小部分高质量精选数据（即来自 Fineweb-edu 的样本），以进一步提升性能。

大部分训练是在**256个H100 80GB GPU**上完成的，采用了 3D 并行（TP=1、PP=1、DP=256）与 ZeRO 相结合的策略。

用adamW+WSD（预热 - 稳定 - 衰减）学习率schedule，在前50 GT的训练过程中，batch大小从b\_min=128增加到了b\_max=2048

### Nemotron-H

<https://research.nvidia.com/la/adlr/nemotronh/>

### STORM

[Token-Efficient Long Video Understanding for Multimodal LLMs](https://arxiv.org/pdf/2503.04130)

### VAMBA

[长视频理解新突破！Mamba混合架构让显存消耗腰斩，处理10万视频token不费力](https://mp.weixin.qq.com/s/eGBF_jJqmpwNT6D-t0BK5Q)

[VAMBA: Understanding Hour-Long Videos with Hybrid Mamba-Transformers](https://arxiv.org/pdf/2503.11579)

### 干预训练使长度泛化

[Transformer死角，只需500步后训练，循环模型突破256k长度泛化极限](https://mp.weixin.qq.com/s/l-J4N6hlFyiCHRmkdeIC6g)

[Understanding and Improving Length Generalization in Recurrent Models](https://arxiv.org/pdf/2507.02782)

## diffusion LLM

### 综述

[挑战AR霸权！MBZUAI发布扩散语言模型全面综述：解析语言建模新范式](https://mp.weixin.qq.com/s/nolagF8vVhROHn7unTH84Q)

[A Survey on Diffusion Language Models](https://arxiv.org/abs/2508.10875v1)

<https://github.com/VILA-Lab/Awesome-DLMs>

### gemini diffusion

[大模型全面爆发，所有榜一都是Gemini！谷歌一夜站到了台前](https://mp.weixin.qq.com/s/EucnouIrBTIggQseKFSp9A)

[12秒生成1万token！谷歌推出文本「扩散模型」Gemini Diffusion，研究员：演示都得降速看](https://mp.weixin.qq.com/s/paesPiFQgIMuKXCJusvjqg)

### LLaDA

[冲击自回归，扩散模型正在改写下一代通用模型范式](https://mp.weixin.qq.com/s/c-YllEX2BlhmDfPjPRU2vQ)

[Large Language Diffusion Models](https://arxiv.org/a/2502.09992)

### LLaDOU

[与Gemini Diffusion共振！首个扩散式「发散思维链」来了](https://mp.weixin.qq.com/s/ENbw02E9JXbXwggA5vC02w)

[Reinforcing the Diffusion Chain of Lateral Thought with Diffusion Language Models](https://arxiv.org/a/2505.10446)

<https://github.com/maple-research-lab/LLaDOU>

### fast-dLLM

[谷歌之后，英伟达入局扩散大语言模型，Fast-dLLM推理速度狂飙27.6倍](https://mp.weixin.qq.com/s/uR7Bk6YpPGyR8cgN5u2oBw)

### DiffuCoder

[苹果出手！改进GRPO，让dLLM也能高效强化学习](https://mp.weixin.qq.com/s/akWoBx1F8sEvi_IxMQpJbg)

[DiffuCoder: Understanding and Improving Masked Diffusion Models for Code Generation](https://arxiv.org/pdf/2506.20639)

<https://github.com/apple/ml-diffucoder>

### Mercury

[这个扩散LLM太快了！没有「请稍后」，实测倍速于Gemini 2.5 Flash](https://mp.weixin.qq.com/s/dSEkdYHOQbaiRN3O4D-hKg)

[Mercury: Ultra-Fast Language Models Based on Diffusion](https://arxiv.org/pdf/2506.17298)

<https://poe.com/Inception-Mercury>

### Seed Diffusion

<https://seed.bytedance.com/zh/seed_diffusion>

[Seed Diffusion: A Large-Scale Diffusion Language Model with High-Speed Inference](https://lf3-static.bytednsdoc.com/obj/eden-cn/hyvsmeh7uhobf/sdiff_updated.pdf)

### RND1

[Qwen3 变身扩散语言模型？不从零训练也能跑，30B参数创纪录](https://mp.weixin.qq.com/s/MwZ8tQamTMsUkxUJC_Nuiw)

[Training Diffusion Language Models at Scale using Autoregressive Models](https://www.radicalnumerics.ai/assets/rnd1_report.pdf)

<https://github.com/RadicalNumerics/RND1>

* 系统性研究了大规模A2D（Autoregressive-to-Diffusion）转换过程中的关键因素，如初始化策略、层级学习率和临界batchsize。
* 识别出能够实现可扩展性与稳定性的关键因素，并证明当这些因素与成熟的自回归预训练方法结合时，简单的技术组合也能催生可扩展的DLM

## 高效attention总结

[A Survey of Efficient Attention Methods: Hardware-efficient, Sparse, Compact, and Linear Attention](https://attention-survey.github.io/files/Attention_Survey.pdf)

<https://github.com/attention-survey/Efficient_Attention_Survey>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-75f4521e0704fe8d1b06a016f1c391a29b8b5072%2Fefficient-attn.png?alt=media)

## 各种结构对比

<https://magazine.sebastianraschka.com/p/the-big-llm-architecture-comparison>

## 世界模型

[怒斥Sora之后，LeCun放出「视觉世界模型」论文，揭示AI学习物理世界的关键​](https://mp.weixin.qq.com/s/KY-bTD-bxdB3Q-q97Gv7fg)

[100万token，一次能分析1小时YouTube视频，「大世界模型」火了](https://mp.weixin.qq.com/s/8ONe7_ejQQIT1UwqDGK-vg)

[WORLD MODEL ON MILLION-LENGTH VIDEO AND LANGUAGE WITH RINGATTENTION](https://arxiv.org/pdf/2402.08268.pdf)

<https://github.com/LargeWorldModel/LWM>

[Sora是世界模拟器吗？全球首篇综述全面解析通用世界模型](https://mp.weixin.qq.com/s/rkq7NXGvB0O1Kstd_mTNJQ)

[Is Sora a World Simulator? A Comprehensive Survey on General World Models and Beyond](https://arxiv.org/pdf/2405.03520)

[世界模型也扩散！训练出的智能体竟然不错](https://mp.weixin.qq.com/s/AWt1Jgvr2aj6sjkGRV9-hg)

[Diffusion for World Modeling: Visual Details Matter in Atari](https://arxiv.org/pdf/2405.12399)

<https://github.com/eloialonso/diamond>

### pandora

[通用世界模型问世：不学习就能生成新领域视频，可实时控制](https://mp.weixin.qq.com/s/Vj2W3BtKITV4mxwVhDJHzg)

[Pandora : Towards General World Model with Natural Language Actions and Video States](https://world-model.maitrix.org/assets/pandora.pdf)

<https://github.com/maitrix-org/Pandora>

[ACL 2024论文盖棺定论：大语言模型≠世界模拟器，Yann LeCun：太对了](https://mp.weixin.qq.com/s/FBqYb_gcBr5D204mDtmCOA)

[Can Language Models Serve as Text-Based World Simulators?](https://arxiv.org/pdf/2406.06485)

### WHALE

[WHALE来了，南大周志华团队做出更强泛化的世界模型](https://mp.weixin.qq.com/s/9vk__IpfMdYj57VjtV1HvQ)

[WHALE: TOWARDS GENERALIZABLE AND SCALABLE WORLD MODELS FOR EMBODIED DECISION-MAKING](https://arxiv.org/pdf/2411.05619)

### genie 2

[谷歌世界模型爆发：单张图生成可玩3D世界，还要和马斯克一起做AI游戏](https://mp.weixin.qq.com/s/PaUScHrclUwYABwT8LL5zg)

<https://deepmind.google/discover/blog/genie-2-a-large-scale-foundation-world-model/>

### NWM

[LeCun团队新作：在世界模型中导航](https://mp.weixin.qq.com/s/V5rXxbLYmR8UuiVq-gsi9A)

[Navigation World Models](https://arxiv.org/pdf/2412.03572v1)

<https://www.amirbar.net/nwm/>

### V-JEPA 2

[刚刚，LeCun亲自出镜，Meta推出新世界模型！](https://mp.weixin.qq.com/s/i2lMeFX6VWWxqL_ZKmznfw)

[V-JEPA 2: Self-Supervised Video Models Enable Understanding, Prediction and Planning](https://ai.meta.com/research/publications/v-jepa-2-self-supervised-video-models-enable-understanding-prediction-and-planning/)

<https://github.com/facebookresearch/vjepa2>

<https://huggingface.co/collections/facebook/v-jepa-2-6841bad8413014e185b497a6>

### Agents-world-model

[AGI真方向？谷歌证明：智能体在自研世界模型，世界模型is all You Need](https://mp.weixin.qq.com/s/k-hd-M1XK7fsH2LI80r5AA)

[General agents contain world models](https://arxiv.org/pdf/2506.01622v4)

### Context as Memory

[上下文记忆力媲美Genie3，且问世更早：港大和可灵提出场景一致的交互式视频世界模型！](https://mp.weixin.qq.com/s/lsLYxySrtNN7QY3g7dVoZA)

[Context as Memory: Scene-Consistent Interactive Long Video Generation with Memory Retrieval](https://arxiv.org/pdf/2506.03141)

### Dreamer4

[梦里啥都有？谷歌新世界模型纯靠「想象」训练，学会了在《我的世界》里挖钻石](https://mp.weixin.qq.com/s/gAepE8xmRwyARVTY1JijSg)

[Training Agents Inside of Scalable World Models](https://www.arxiv.org/pdf/2509.24527v1)

<https://danijar.com/project/dreamer4/>

现有模型的问题：

* 世界模型智能体（如 Dreamer 3）是迄今为止在游戏和机器人领域表现最佳且最为稳健的强化学习算法之一。虽然这些模型在其特定的狭窄环境中速度快且准确，但其架构缺乏拟合复杂现实世界分布的能力。
* 可控视频模型（如Genie 3）已在多样的真实视频和游戏上进行训练，并实现了多样的场景生成和简单交互。这些模型基于可扩展架构，如diffusion transformer。然而，它们在学习物体交互和游戏机制的精确物理规律方面仍存在困难，这限制了它们在训练成功智能体方面的实用性。此外，它们通常需要多个GPU才能实时模拟单个场景，这进一步降低了它们在想象训练方面的实用性。

Dreamer 4是一种可扩展的智能体，它通过在快速且准确的世界模型中进行想象训练(Imagination Training)来解决控制任务。

* 利用一种新颖的shortcut forcing目标和高效的Transformer架构，准确学习复杂的物体交互，同时实现实时人机交互（在单个GPU上）和高效的想象训练。
* 可以在大量无标签视频上进行训练，并且只需要少量与动作配对的视频。这为未来从多样的网络视频中学习通用世界知识开辟了可能性，因为这些网络视频没有动作标签。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3bdccf1a7faef27596dfb6b651d3da9819f6bb4e%2Fdreamer4.png?alt=media)

模型：

* Tokenizer：对部分被掩码的图像块和latent token进行编码，通过带有tanh激活的低维投影压缩潜变量，并对图像块进行解码。它使用因果注意力实现时间压缩，同时允许逐帧解码。
* 动力学模型：在由动作、shortcut 噪声水平、步长和tokenizer表示交错组成的序列上运行。通过shortcut forcing目标对表示进行去噪，以实现少量前向传递的交互式生成，并防止随时间累积误差。

首先在视频和动作上预训练tokenizer和世界模型，然后通过交错任务嵌入将策略和奖励模型微调至世界模型中，最后通过想象训练对策略进行后训练。

### Emu3.5

[世界模型有了开源基座Emu3.5！拿下多模态SOTA，性能超越Nano Banana](https://mp.weixin.qq.com/s/-ALuGjri7bhUeOZHCwyNLQ)

[Emu3.5: Native Multimodal Models are World Learners](https://zh.emu.world/Emu35_tech_report.pdf)

### FantasyWorld

高德的

[FantasyWorld: Geometry-Consistent World Modeling via Unified Video and 3D Prediction](https://arxiv.org/pdf/2509.21657)

### D4RT

[谷歌4D世界模型来了，比SOTA快300倍！](https://mp.weixin.qq.com/s/fKTTh0Bq80HC5CEJeW5jHA)

[Efficiently Reconstructing Dynamic Scenes One D4RT at a Time](https://storage.googleapis.com/d4rt_assets/D4RT_paper.pdf)

<https://deepmind.google/blog/d4rt-teaching-ai-to-see-the-world-in-four-dimensions/>

<https://d4rt-paper.github.io/>

### 李飞飞的文章

[李飞飞最新长文：AI的下一个十年——构建真正具备空间智能的机器](https://mp.weixin.qq.com/s/3w5zgnMXe13mKIR_ePBwAw)

[From Words to Worlds: Spatial Intelligence is AI’s Next Frontier](https://drfeifei.substack.com/p/from-words-to-worlds-spatial-intelligence)

[A Functional Taxonomy of World Models: Renderers, Simulators, Planners, and the Loop That Connects Them](https://drfeifei.substack.com/p/a-functional-taxonomy-of-world-models)

计算机视觉、机器人技术、强化学习和生成式人工智能都声称在构建世界模型，但它们各自的含义却截然不同。一个能生成华丽但物理上不可能的火焰的视频模型、一个能即兴创作可玩的游戏的语言模型，以及一个能忠实模拟燃烧过程的物理引擎，都使用着同一个名称。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0c86613357cd169735e352a6418235bbfa57be20%2Fworld-model-define1.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a6a593d2f49500a2da832db2d3d1183cdd7c8443%2Fworld-model-define.png?alt=media)

### 小结

world model和vla的讨论：[xhs](https://www.xiaohongshu.com/explore/69251b7a000000001e00db4d?app_platform=ios\&app_version=9.10\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBuaMv8cPQgYYDujmCXMmrnM3i3XiMwO4mOWr5cUjQfpM=\&author_share=1\&xhsshare=CopyLink\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1764075998\&share_id=ebf896b18fe74496aea5f6f8aa1fbe5f)

VLA(Vision-Language-Action Model)：统一的多模态模型，将视觉感知、语言理解和动作执行融合在一个端到端的框架内。通常采用Transformer，能够接收图像/视频和自然语言指令作为输入，并自回归地生成一系列动作指令(Token)。

典型的VLA模型(如RT-2,OpenVLA)两阶段训练：

* 大规模预训练：在海量的互联网图文+视频数据上进行学习，以获得通用的视觉和语言表征能力。
* SFT：在由人类专家操作机器人录制的高质量“状态-动作”轨迹数据上进行行为克隆(Behavioral Cloning)，教会模型执行具体任务。

然而，纯SFT的VLA模型本质上是“模仿学习”,严重依赖于演示数据的覆盖范围，当遇到新场景或新指令时，泛化能力不足。

机器人技术主要面临以下瓶颈：

* 模型泛化能力差：传统的机器人大多在特定、封闭的实验室环境中工作，一旦进入全新的家庭环境，面对新物体、新布局和新光照，便会失灵。暴露了其严重依赖训练分布后，缺乏开放世界泛化能力。
* SFT的局限性：SFT依赖于大量高质量的专家演示数据，但这不仅收集成本高昂、过程繁琐(数据稀缺性)，更关键的是，模型仅仅在"模仿"专家，无法通过试错来探索更优或更鲁棒的约策略，导致泛化能力差
* 强化学习(RL)的效率问题：Model-Free强化学习虽然能通过探索学习，但直接应用于高维视觉输入时，样本效率极低，需要数亿次的交互才能学会简单任务，在真实机器人上几乎不可行。
* 仿真到现实(Sim-to-Real)的鸿沟：虽然可以在模拟器中低成本地训练，但模拟器与真实世界之间始终存在**动力学差异**，导致在模拟器里表现优异的策略，迁移到真实机器人上时性能会大幅下降

为了解决这些问题，研究者们开始探索**将世界模型作为环境的内部模拟器**以提升学习效率，并利用强化学习赋予VLA模型超越模仿的探索和泛化能力，最终走向一个统一、高效且泛化的智能机器人框架。

世界模型(World Model，WM)是智能体内部构建的关于环境如何运作的动态模型。其核心思想是让智能体先学习一个环境的"模拟器"，然后可以在这个内部的、可微分的"梦境"或"想象"中进行高效、快速的规划和策略学习，从而大幅减少与真实世界的昂贵交互。世界模型主要扮演三大核心角色：

* 动力学模型(Dynamic Model for MBRL)：用于(model-based rl，MBRL)，模型在紧凑的潜在空间(Latent Space)中预测未来的状态和奖励，智能体在此基础上进行策略优化。经典代表是Dreamer系列，它基于循环状态空间模型(RSSM)在潜在空间中进行长时序的想象(rollout),并完全在想原中训练Actor-Critic策略,极大地提升了样本效率。
* 神经模拟器(Neural Simulator)：此类世界模型专注于生成高保真、可控的感官数据(如视频),作为传统物理引擎的替代品。它可以用来生成训练数据、合成罕见或危险的场景、或进行闭环测试。代表模型如Cosmos、GAIA-1等,通常基于扩散模型(Diffusion Model)或自回归Transformer,能够生成高质量、时空一致的视频
* 奖励模型(Reward Model)：在奖励稀疏或难以设计的任务中，世界模型可以用来生成稠密的奖励信号。例如，VIPER利用预训练的视频测测模型，将"智能体轨迹与专家演示视频的相似度"作为奖励，从而在没有显式奖励函数的情况下驱动策略学习。

从架构上看,世界模型经历了从早期的递归模型(如RSSM)到能够捕捉长程依赖的Transformer，再到生成质量更高的扩散模型和自回归模型的演进。

VLA+WM

将VLA的语义理解能力与WM的动态预测/规划能力深度融合，构建一个既能"听懂指令"，又能"预见未来"的统一智能体。典型实现方案：

* 统一的自回归框架：WorldVLA将"动作模型(VLA)"和"世界模型(WM)"统一到一个共享的自回归Transformer框架和词表中。通过不同的提示，模型既可以以生成动作(VLA任务:"机器人下一步该做什么?")，也可以预测世界的下一帧视觉画面(WM任务:"接下来会发生什么?")。这种设计带来了双向增益：WM学到的物理因果关系能提升动作的合理性；VLA对动作的理解则能让WM的视频预测更符合物理规律。
* 基于世界表征的策略学习：DreamVLA提出了一种更解耦的思路。首先用一个世界模型从输入中提取并预测一个抽象的world embedding，代表了"未来世界状态的批抽象表示"。然后，VLA的动作策略不再直接观察原始图像，而是基于这个紧凑且蕴含未来的world embedding来决策。这种"看未来的因果结果,再决定动作"的方式,比传统的"模式匹配像素"更为高效和鲁棒。
* 世界模型作为动态后训练：WM被用作一个独立的训练阶段。例如，在策略微调之前，先让模型仅用视频和指令来学习预测后续视频帧(世界模型后训练)，能让模型扎实地学到"语义+时序动力学"，为后续生成更精准、更具前瞻性的动作策略打下坚实基础。

通过VLA与WM的结合，模型不仅能理解任务目标，还能在内部进行"推演"，评估不同动作可能带来的后果，从而做出更智能的决策

## 具身智能

[大模型走向物理世界，TeleAI 发布大模型驱动的具身智能综述，覆盖300篇文献](https://mp.weixin.qq.com/s/vzDhVsPmBqNT1iuZDnPjRw)

[Embodied-AI with large models: research and challenges](https://www.sciengine.com/SSI/doi/10.1360/SSI-2024-0076)

### ReKep

[李飞飞团队提出ReKep，让机器人具备空间智能，还能整合GPT-4o](https://mp.weixin.qq.com/s/AdyOPA6RhFIu5sjra5cW2Q)

[ReKep: Spatio-Temporal Reasoning of Relational Keypoint Constraints for Robotic Manipulation](https://rekep-robot.github.io/rekep.pdf)

<https://github.com/huangwl18/ReKep>

### GR-2

[GR-2登场！ByteDance Research提出机器人大模型，具备世界建模和强大泛化能力](https://mp.weixin.qq.com/s/h-69PKoCkPtj4_sq9589Tw)

[GR-2: A Generative Video-Language-Action Model with Web-Scale Knowledge for Robot Manipulation](https://arxiv.org/pdf/2410.06158)

<https://gr2-manipulation.github.io/>

### RDT-1B

[清华开源全球最大双臂机器人扩散大模型RDT，懂调酒能遛狗，登顶HF具身热榜](https://mp.weixin.qq.com/s/LtuK9bN45Bkm2uDCi3cCvA)

[RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation](https://arxiv.org/pdf/2410.07864)

### HIL-SERL

[强化学习训练一两个小时，100%自主完成任务：机器人ChatGPT时刻真来了？](https://mp.weixin.qq.com/s/5pVajhtp8KSFz4AnV8PVTQ)

[Precise and Dexterous Robotic Manipulation via Human-in-the-Loop Reinforcement Learning](https://hil-serl.github.io/static/hil-serl-paper.pdf)

### Genesis

[历时2年，华人团队力作，震撼开源生成式物理引擎Genesis，可模拟世界万物](https://mp.weixin.qq.com/s/ioYK3YV07f9m0Iu-l6tLsg)

<https://github.com/Genesis-Embodied-AI/Genesis>

### language of motion

[李飞飞团队统一动作与语言，新的多模态模型不仅超懂指令，还能读懂隐含情绪](https://mp.weixin.qq.com/s/W8wS87YlW_z9rsDfnmtDLQ)

[The Language of Motion: Unifying Verbal and Non-verbal Language of 3D Human Motion](https://arxiv.org/abs/2412.10523v1)

### 视觉空间智能

[李飞飞、谢赛宁等探索MLLM「视觉空间智能」，网友：2025有盼头了](https://mp.weixin.qq.com/s/Z4Kv92fukfNTyE1tSpJslA)

[Thinking in Space: How Multimodal Large Language Models See, Remember, and Recall Spaces](https://arxiv.org/pdf/2412.14171v1)

### 具身多模态推理

[统一框架下的具身多模态推理：自变量机器人让AI放下海德格尔的锤子](https://mp.weixin.qq.com/s/PAMxpArVFwyAEVOhcq_UAw)

### PEVA

[伯克利\&Meta面向具身智能的世界模型：让AI通过全身动作「看见」未来](https://mp.weixin.qq.com/s/id_ISbf7wVvk3pl2GCIgWA)

[Whole-Body Conditioned Egocentric Video Prediction](https://arxiv.org/pdf/2506.21552)

<https://dannytran123.github.io/PEVA/>

### MTU3D

[ICCV 2025满分论文：一个模型实现空间理解与主动探索大统一](https://mp.weixin.qq.com/s/EpPhCVDtCZE90GsRflvrWw)

[Move to Understand a 3D Scene: Bridging Visual Grounding and Exploration for Efficient and Versatile Embodied Navigation](https://arxiv.org/abs/2507.04047)

<https://github.com/MTU3D/MTU3D>

### CoA

[模仿学习新范式，Chain-of-Action：轨迹自回归实现动作推理](https://mp.weixin.qq.com/s/fJXWvpC1s_2FkoUYhnmTCg)

[Chain-of-Action: Trajectory Autoregressive Modeling for Robotic Manipulation](https://arxiv.org/pdf/2506.09990)

<https://github.com/ByteDance-Seed/Chain-of-Action>

## 持续学习

### Lifelong learning of LLM

(toread)

[Towards Lifelong Learning of Large Language Models: A Survey](https://arxiv.org/abs/2406.06391)

<https://github.com/qianlima-lab/awesome-lifelong-learning-methods-for-llm>

### online learning

[xhs](https://www.xiaohongshu.com/explore/68dbd6e10000000007036b90?app_platform=ios\&app_version=9.3.1\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBL97bjctCoRqfMMLs0o7XzgjqWav8bn240cjexMB2rZo=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1759280429\&share_id=538408b0ef114222913a9b78f0575f46)

Online Learning 的关键在于突破人类知识上限，让模型具备探索和自我奖励的能力。如果模型只能在既有知识中循环，就难以出现真正的飞跃。目前，研究者普遍把 Online Learning 分成两类：

* Lifelong Learning，通过用户反馈等方式不断优化；
* Meta Online Learning，强调快速适应新任务。往往被视作Lifelong Learning的前提，二者结合，才可能让模型逐步逼近更高层次的智能。

不过，现实中仍有挑战。最大的问题在于如何获取有效的反馈信号（reward）。在编码等场景，反馈明确、密集，更容易落地；但在开放对话、复杂任务中，反馈往往稀疏模糊，难以驱动模型进步。同时，如何在算力受限的情况下做到快速迭代，也是亟待解决的问题。

总的来看，Online Learning 不仅是提升模型性能的一种方法，更是塑造未来AI交互和推理模式的关键。它要求模型和外部系统（如 memory）协同更新，从而实现动态优化。未来，我们可能看到模型具备自我生成任务、自我管理记忆的能力，这才是真正意义上的在线学习。

## 一些前沿

### Potemkin Understanding

[Gary Marcus惊世之言：纯LLM上构建AGI彻底没了希望！MIT、芝大、哈佛论文火了](https://mp.weixin.qq.com/s/rWvDwEjf-E8faRSSBQmY0Q)

[Potemkin Understanding in Large Language Models](https://arxiv.org/pdf/2506.21521)

### H-Net

[无Tokenizer时代真要来了？Mamba作者再发颠覆性论文，挑战Transformer](https://mp.weixin.qq.com/s/fE5E4mTSaWqZ7rEtsm_Psw)

[Dynamic Chunking for End-to-End Hierarchical Sequence Modeling](https://arxiv.org/a/2507.07955)

<https://github.com/goombalab/hnet>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d57fa2d42831803630213d2883eff5f35926daf1%2Fh-net.png?alt=media)

分层架构，假设输入有m个字

* encoder + chunking：其中chunking模块包括两部分
  * routing module：通过相似度评分预测相邻元素之间的边界，可以理解为把原始输入分成k个词（chunk）
  * downsampler：基于边界进行下采样，即将每个边界词产出一个向量，共k个
* 主网络：可以是任意网络，例如transformer或者mamba
* dechunking + decoder：其中dechunking模块包括两部分：
  * smoothing module：将离散的chunk转化成插值的表示，用的是指数滑动平均（EMA），所以图里看着有点渐变的那个样子
  * upsampler：基于边界还原成m个字，用到了ste（Straight-Through Estimator）的技巧来保证训练稳定：
    * 前向：1和soomthing的输出z相乘
    * 反向：routing的输出p处理一下得到c（如果是边界那就是p，不是边界就用1-p，所以图中c和p有的一样，有的是“互补”的），和soomthing的输出z来相乘，其实就是保证有连续的梯度

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ebbe0578e47c922567a0fa5f5c42125ca9a17706%2Fhnet-upsampler.png?alt=media)

### MTP改造

[五倍推理加速，激发自回归潜能，苹果新工作让LLM预测未来](https://mp.weixin.qq.com/s/Ji3L43WLZKMIlma52HKErw)

[Your LLM Knows the Future: Uncovering Its Multi-Token Prediction Potential](https://arxiv.org/pdf/2507.11851)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b7009d93a9f77cb04c4fdfccba209e0b87a7cbf8%2Fknow-future-1.png?alt=media)

* 原来的llm，ntp的话，如果在assistant后面给出4个placeholder(图中的`<->`)，其实能在top200里找得到最终答案，说明模型隐式地知道未来
* 通过mask来finetue一个mtp的版本，能在top10里找到答案
* 再加一个sampler能进一步提升

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-403feb6d7f274497a76ae9c75448a714965305fd%2Fknow-future-2.png?alt=media)

* 在序列的最后加入$$k$$个不同的mask tokens，$$\[m\_1,..,m\_k]$$（图中的黄色部分），和原序列拼在一起得到$$X\_m=\left\[x\_1, \ldots, x\_n, m\_1, \ldots, m\_k\right]$$，通过decoder模型输出的emb是$$z\_1,z\_2,...,z\_n,z\_{n+1}, ...,z\_{n+k}$$
* $$y\_{n+1}$$还是通过自回归+unembedding（就是一个矩阵$$W\in R^{V\times d}$$，把emb映射回词表$$p\_n=Wz\_n, z\_n\in R^d$$）+argmax预估的，而在生成m的预估即$$y\_{n+2}$$到$$y\_{n+k}$$时则会再加上一个sampler（其实就是输入有上一次采样出来的$$y\_{n-1}$$和当前的$$z\_{n}$$，过一个MLP再去和W乘）
* gated LoRA adaptation：就是一个lora，但是对NTP（即输入x预测下一个x）并不生效，只对输入m走MTP的时候生效。MTP不仅更新lora的A和B，还更新sampler

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-52d2b1cf7fa7d3cb7fd6895fd32358cbb177c09a%2Fknow-future-3.png?alt=media)

假设输入3个x，预估2个m，划分为3个block:$$\[x\_0,m\_1,m\_2],\[x\_1,m\_1,m\_2],\[x\_2,m\_1,m\_2]$$，mask的原则如下：

* NTP：每个x只能看到左边的x，看不到右边的x，而且是跨block的，即$$x\_2$$能看到前2个block里的$$x\_1$$和$$x\_0$$
* MTP：能看到当前block左边的m，看不到前面block里的m

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6b20e28de8093069509749e8eccfaa602a30f62e%2Fknow-future-4.png?alt=media)

一致性loss：如图，m1其实是模拟的x1，所以他的输出也要和x1的输出去对齐，m2同理

其中的投机采样细节看着有点复杂，还要再看下论文

### OaK

[强化学习之父Richard Sutton最新演讲揭示OaK架构：通向超级智能的八步愿景](https://mp.weixin.qq.com/s/PVOaXQLr2rE5icesKV1Qog)

### 为何幻觉

[OpenAI罕见发论文：我们找到了AI幻觉的罪魁祸首](https://mp.weixin.qq.com/s/f6pTUhzn9NjA_xWSvTmG4A)

[Why Language Models Hallucinate](https://cdn.openai.com/pdf/d04913be-3f6f-4d2b-b283-ff432ef4aaa5/why-language-models-hallucinate.pdf)

* 幻觉定义：模型**自信地生成不真实答案**。
* 原因：标准的训练和评估程序**更倾向于对猜测进行奖励**，而**不是在模型勇于承认不确定时给予奖励**。如果你不知道答案，但随意猜测，你可能会很幸运地猜对。留空则必定得零分。当模型仅根据准确度（即完全答对问题的百分比）进行评分时，它们会被鼓励进行猜测，而不是承认「我不知道」。
* 和下一个词预测的关系：与传统的机器学习问题不同，每个语句没有「真/假」标签，模型只看到流畅语言的正面示例，并且必须去近似整体分布。当没有任何被标注为无效的示例时，区分有效语句和无效语句会更加困难。但即使有标签，一些错误也是不可避免的。拼写和括号遵循一致的模式，就算有错误会随着规模的扩大而消失。但像宠物的生日这样**低频**的事实，无法仅凭模式预测，因此会导致幻觉。
* 解决办法：对自信错误（confidential error）的惩罚力度大于对不确定性的惩罚力度，并对恰当表达不确定性的行为给予部分加分。如果主要评估指标依然继续为模型幸运的猜测给予奖励，模型就会继续学习猜测。修改评估指标可以扩大降低幻觉技术的采用范围，包括新开发的和先前研究的技术。

### embed检索的问题

[DeepMind爆火论文：向量嵌入模型存在数学上限，Scaling laws放缓实锤？](https://mp.weixin.qq.com/s/SZU053P-BOTmsnA0KyjJEg)

[On the Theoretical Limitations of Embedding-Based Retrieval](https://arxiv.org/pdf/2508.21038)

当知识库规模足够大、一个问题需要多份文档共同回答时，即使采用最先进的嵌入模型，也可能因为维度不足而无法完整召回关键信息。这会导致大模型在生成时受到错误或不完整上下文的干扰。

### 持续学习

[多模态大模型持续学习系列研究，综述+Benchmark+方法+Codebase一网打尽！](https://mp.weixin.qq.com/s/FBZw95e_0WibVbV075OyCA)

[Continual Learning for Generative AI: From LLMs to MLLMs and Beyond](https://arxiv.org/pdf/2506.13045)

### superweight

[0.01%参数定生死！苹果揭秘LLM「超级权重」，删掉就会胡说八道](https://mp.weixin.qq.com/s/ulzYMMtN6s4cWKb1kECn7A)

[The Super Weight in Large Language Models](https://arxiv.org/abs/2411.07191)

### REFRAG

[扎克伯格的豪赌初见成效？Meta新方法让LLM长上下文处理提速30倍](https://mp.weixin.qq.com/s/q-T8xtQNqmqj6PkXfASBsA)

[Meta超级智能实验室首篇论文：重新定义RAG](https://mp.weixin.qq.com/s/ftP3-qoUcO5hNEdmwjFZVw)

[REFRAG: Rethinking RAG based Decoding](https://arxiv.org/abs/2509.01092)

### Markovian Thinker

[算力成本大降！马尔可夫思考机来了，LLM推理成本直接降为线性](https://mp.weixin.qq.com/s/bIY_2cs4UOv3_oYSRpu3XA)

[The Markovian Thinker](https://arxiv.org/abs/2510.06557v1)

<https://github.com/McGill-NLP/the-markovian-thinker>

### TRM

[700万参数击败DeepSeek R1等，三星一人独作爆火，用递归颠覆大模型推理](https://mp.weixin.qq.com/s/Cw9IO6AW9GEfOffTqTcwdQ)

[Less is More: Recursive Reasoning with Tiny Networks](https://arxiv.org/pdf/2510.04871v1)

### FBAM

[Attention is NOT All You Need：让“深度”重新流入时间，而非堆叠在参数之上](https://mp.weixin.qq.com/s/E12Zd358v20J6WkMzN9IQA)

[Recurrence-Complete Frame-based Action Models](https://arxiv.org/pdf/2510.06828)

与传统语言模型直接预测下一个 token 不同，FBAM 在每一步预测“动作（action）”，由环境反馈生成下一帧（frame），从而形成一个动态的交互式训练循环。

1. Frame Head（帧头）：使用Transformer结构处理单帧内容，通过自注意力机制提取帧内特征；
2. Integrator（整合器）：使用LSTM架构在帧间累积状态，实现跨时间的递归整合。

两者共同构成了一个“帧内并行、帧间递归”的混合模型。这一设计保留了注意力机制在局部结构建模上的优势，同时恢复了时间维度上的深度。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-20ea26b4464f6f32f84775f24111e05b6f69bb17%2Ffbam.png?alt=media)

### Free Transformer

[Meta打碎Transformer 8年铁律！改写AI最底层规则，模型首次冒出潜意识](https://mp.weixin.qq.com/s/wShRCXY4zZBPM61YLBLN4g)

[The Free Transformer](https://arxiv.org/pdf/2510.17558)

### CALM

[微信、清华连续自回归模型CALM，新范式实现从「离散词元」到「连续向量」转变](https://mp.weixin.qq.com/s/TbStNDWAsWF0UCD9tBu2nA)

[Continuous Autoregressive Language Models](https://arxiv.org/pdf/2510.27688)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f4cb2f3aef9a8db4c17955e20b9b1858c5945d52%2Fcalm1.png?alt=media)

auto-encoder

* 输入k个连续token，查到他们的emb，通过encoder映射到隐层，再decode回去
* 加了一个VAE的正则$$\mathcal{L}*{\mathrm{KL}}\left(p\_E\left(\mathbf{z} \mid \mathbf{x}*{1: K}\right) | \mathcal{N}(0, \mathbf{I})\right)=-\frac{1}{2} \sum\_{i=1}^l\left(1+\log \sigma\_i^2-\sigma\_i^2-\mu\_i^2\right)$$，注意vae就是把隐层向量通过nn产出均值和方差，再基于这个去采样

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7664cd2e22c30bfdaecefac8a30966f19c65e613%2Fcalm2.png?alt=media)

如图，原始token经过上面encoder的压缩后输入给transformer，然后加一个L层的energy-based的head，同时输入一个噪声，得到的输出就是预估的下一个向量。infer的时候再经过decoder得到原始token，再把这个输入trans

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4b90ab4849a36a8e9a0088de1d6d01ee3abbf227%2Fcalm3.jpg?alt=media)

### Societies of Thought

[DeepSeek-R1推理智能从哪儿来？谷歌新研究：模型内心多个角色吵翻了](https://mp.weixin.qq.com/s/rPhrpvubjoz6IA5hS2DFvA)

[Reasoning Models Generate Societies of Thought](https://arxiv.org/pdf/2601.10825)

society of thought：推理能力的提升并非仅源于计算步数的增加，而是来自模型在推理过程中隐式模拟了一种复杂的、类多智能体的交互结构。推理模型有时会模拟不同角色之间的内部对话，就像他们数字大脑中的辩论队一样。他们争论、纠正对方、表达惊讶，并调和不同观点以达成正确答案。

### RandOpt

[后训练中的RL已死？MIT新算法挑战传统后训练思维，谢赛宁转发](https://mp.weixin.qq.com/s/09CbH2s8_MYOc9b4lotBGA)

[Neural Thickets: Diverse Task Experts Are Dense Around Pretrained Weights](https://arxiv.org/pdf/2603.12228)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7bb524f409161136c854a03d9f69cee4cc39f6fa%2Frandopt1.png?alt=media)

预训练的模型特点：

1. 小模型的权重离各专家比较远，需要梯度下降来学
2. 大模型的权重离各专家比较近，可能加点简单的噪声就行

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1d09e2f53ae9ea223077857810c35cd2afac66bb%2Frandopt2.png?alt=media)

RandOpt算法：没有BP，比RL/ES更高效

1. 从一个预训练好的base model权重出发。
2. 对这组权重加很多个随机高斯扰动，得到N个邻域里的候选模型。
3. 用一小部分训练/验证样本给这N个候选模型去evaluate。
4. 选出表现最好的top-K个。
5. 推理时：让这K个模型都回答，再多数投票。

问题1：推理成本？

一般要K=50效果才比较好，而这也就是说要infer 50次，再投票，成本巨大。所以可以用蒸馏的方式，即用5k条样本，让这50个模型产出2.5w的reasoning+回答，然后挑选出基础模型容易出错的困难样本。只对基础模型进行两轮监督微调。

问题2：适用范围

只适用于能用规则抽取答案的，要不然没法投票。但感觉有了蒸馏后，这个应该也可以推广的，只是说怎么选hard样本要设计一下

### Attention Residual

[将注意力旋转 90 度！今天，Kimi 的「注意力残差」火了](https://mp.weixin.qq.com/s/rrWCapCip7PtYDHxMm73GA)

[Attention Residuals](https://github.com/MoonshotAI/Attention-Residuals/blob/master/Attention_Residuals.pdf)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-70d4b20dd65f092a63553791ef5a4e2826aa1e88%2Fattnres.png?alt=media)

思路很直接，就是把n层看成长度为n的序列(k/v)，搞一个可学习的q，在这个维度算attn。然后可以分block来加速

### MobileMoE

[MobileMoE: Scaling On-Device Mixture of Experts](https://arxiv.org/pdf/2605.27358)

Meta的


# 1.3.llm\_archs

## 训练框架

mfu(Model Flops Utilization)模型算力利用率是分布式训练效率的优化目标。

一个模型定义好之后，前向和反向的**计算量**就是固定（不考虑动态图的话）的，除以**每个step的latency**就是mfu。以nanoGPT中的代码为例：

```python
def estimate_mfu(self, fwdbwd_per_iter, dt):
    """ estimate model flops utilization (MFU) in units of A100 bfloat16 peak FLOPS """
    # first estimate the number of flops we do per iteration.
    # see PaLM paper Appendix B as ref: https://arxiv.org/abs/2204.02311
    N = self.get_num_params()
    cfg = self.config
    L, H, Q, T = cfg.n_layer, cfg.n_head, cfg.n_embd//cfg.n_head, cfg.block_size
    flops_per_token = 6*N + 12*L*H*Q*T
    flops_per_fwdbwd = flops_per_token * T # 计算量（T是序列长度）
    flops_per_iter = flops_per_fwdbwd * fwdbwd_per_iter # 每个step的flops * 每一次更新梯度要多少个step
    # express our flops throughput as ratio of A100 bfloat16 peak flops
    flops_achieved = flops_per_iter * (1.0/dt) # per second 一轮的计算量/一轮的耗时
    flops_promised = 312e12 # A100 GPU bfloat16 peak flops is 312 TFLOPS
    mfu = flops_achieved / flops_promised
    return mfu

##...
def xxx():
    # timing and logging
    t1 = time.time()
    dt = t1 - t0 ## 一次gradient_accumulation_steps后 更新梯度
    t0 = t1
    if iter_num % log_interval == 0 and master_process:
        # get loss as float. note: this is a CPU-GPU sync point
        # scale up to undo the division above, approximating the true total loss
        # (exact would have been a sum)
        lossf = loss.item() * gradient_accumulation_steps
        if local_iter_num >= 5: # let the training loop settle a bit
            mfu = raw_model.estimate_mfu(batch_size * gradient_accumulation_steps, dt)
            running_mfu = mfu if running_mfu == -1.0 else 0.9*running_mfu + 0.1*mfu
        print(f"iter {iter_num}: loss {lossf:.4f}, time {dt*1000:.2f}ms, mfu {running_mfu*100:.2f}%")
    iter_num += 1
    local_iter_num += 1

```

一般分布式训练参数量越多->卡数越多->通信占比越高->MFU越低，所以要优化通信效率。

### 优化设置

* batchsize：通常用比较大的batchsize，提高训练**稳定性**和**吞吐量**。GPT-3和PaLM在训练时动态增加batshzie，最终达到百万级别，batchsize**从3.2w逐渐增加到320w个token**。
* 优化器：
  * Adam和[AdamW](https://arxiv.org/pdf/1711.05101v2.pdf)：基于**一阶梯度优化的低阶矩自适应估计**，用于GPT-3等，超参$$\beta\_1=0.9, \beta\_2=0.95, \epsilon=10^{-8}$$。
  * [Adafactor](https://arxiv.org/pdf/1804.04235.pdf)：在训练过程中节省显存，用于PaLM、T5等，超参$$\beta\_1=0.9, \beta\_2=1.0-k^{-0.8}$$
* 学习率：
  * 预热（warm-up）：在训练的**初始0.1%到0.5%的steps中，用线性预热策略**逐渐增加学习率到最大值（$$5 \times 10^{-5}$$到$$1 \times 10^{-4}$$之间，GPT-3是$$6 \times 10^{-5}$$）
  * 衰减（decay）：后续steps中**余弦衰减**，逐渐降低到**最大值的约10%**，直到收敛
* 稳定训练：
  * 权重衰减和梯度裁剪：**权重衰减率**设为0.1，**梯度裁剪阈值**设为1.0
  * 梯度检查点：容易出现loss突增，PaLM和OPT从**发生突增前的一个ckpt重新开始训练**，并**跳过可能有问题的数据**
  * 缩减emb梯度：GLM发现emb的异常梯度通常会导致loss突增，故**缩减emb梯度**以缓解

### 混合精度训练

&#x20;

#### FP16

&#x20;

[Mixed precision training](https://arxiv.org/pdf/1710.03740.pdf)提出了用16位float（FP16）训练，减少**内存使用和通信开销**。A100等GPU具有的**FP16计算单元**是**FP32的两倍**，故FP16的计算效率能进一步提高。

![mixed-precision-training](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-84b1a254a1cc5fbc73e8fe76cd06ea331d83fb55%2Fmixed-precision-training.png?alt=media)

* **推理（预测）**：所有参数都是fp16，相对fp32，存储变成一半，速度提升1倍。
* **训练**：参数和梯度用**fp32存储**，但是在**计算前**会**转成fp16**，**计算后**再**转回fp32**。主要为了**防止溢出**，loss要乘一个scale，然后在fp16的梯度要除以scale。

以adam优化器为例，对于每1个参数来说，fp16的训练占用20bytes显存，包括（详见：<https://zhuanlan.zhihu.com/p/519264636>）

* fp16的参数：2bytes
* fp16的梯度：2bytes
* 优化器状态（optimizer state）：16bytes
  * fp32参数（4bytes）
  * fp32梯度（4bytes）([zero论文](https://arxiv.org/pdf/1910.02054v2.pdf)里提到的，用于reduce之类操作时需要的fp32内存，以1.5B的gpt2为例，需要6GB内存，倒推回来，就需要6/1.5byte=4byte)
  * fp32 variance【历史梯度平方和】（4bytes）
  * fp32 momentum【历史梯度滑动平均】（4bytes）

而在预测时只要存一个fp16的参数(2bytes)就行，所以**预测的显存是训练的1/10**，对应1.3B参数量的gpt2-xl，训练要占用$$20B\times 1.3\times 10^9=26GB$$，预测只要2.6GB

#### BF16

&#x20;

FP16可能导致**计算精度的损失**从而影响模型性能，BLOOM里用**BF16**(brain floating point)比FP16**分配更多指数位**和**更少的有效位**，在准确性方面更好

<https://blog.csdn.net/orangerfun/article/details/133106913>

![fp16-bf16](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ab12b0c8aaa64691d2989239f670c6340e89615f%2Ffp16-bf16.png?alt=media)

bf16的指数位和fp32一样多

### 可扩展的训练

需要**提高训练吞吐量**和**加载更大模型到显存中**

#### 3D并行

&#x20;

如下三种并行（数据并行、流水线并行、张量并行）的组合

**数据并行（Data Parallelism）**

&#x20;

将**模型参数和优化器状态复制**到多个GPU上，每个GPU只处理分给它的数据，不同GPU算出的梯度进行**聚合**得到batch的梯度，再更新**所有GPU上的模型**。高度可扩展，增加GPU数就能提高训练吞吐。

torch的ddp

```python
from torch.nn.parallel import DistributedDataParallel as DDP

ddp = int(os.environ.get('RANK', -1)) != -1 # is this a ddp run?
if ddp:
    init_process_group(backend=backend)
    ddp_rank = int(os.environ['RANK'])
    ddp_local_rank = int(os.environ['LOCAL_RANK'])
    device = f'cuda:{ddp_local_rank}'
    torch.cuda.set_device(device)
    # this process will do logging, checkpointing etc.
    master_process = ddp_rank == 0
    seed_offset = ddp_rank # each process gets a different seed

# wrap model into DDP container
if ddp:
    model = DDP(model, device_ids=[ddp_local_rank])
```

可以一起搞的技巧——**梯度累积**，当显存不够跑较大的batchsize时，训练效果可能会很差，可以先跑**多个mini-batch的前向和反向**，把梯度累积起来，再**更新一次参数**，在数学上等价于**跑一个较大的batchsize**。

```python
# forward backward update, with optional gradient accumulation to simulate larger batch size
# and using the GradScaler if data type is float16
for micro_step in range(gradient_accumulation_steps):
    if ddp:
        # in DDP training we only need to sync gradients at the last micro step.
        # 最后一个micro step才要sync梯度
        model.require_backward_grad_sync = (micro_step == gradient_accumulation_steps - 1)
    with ctx:
        logits, loss = model(X, Y)
    loss.backward() # 只是计算梯度，并不真的更新
optimizer.step()
optimizer.zero_grad(set_to_none=True)
```

也可以用torch的no\_sync()：

```python
ddp = torch.nn.parallel.DistributedDataParallel(model, pg)
with ddp.no_sync():
    for input in inputs:
        ddp(input).backward()  # no synchronization, accumulate grads
ddp(another_input).backward()  # synchronize grads
```

**流水线并行（Pipeline Parallelism）**

&#x20;

将LLM的**不同层**分配到多个GPU上，一般Transformer模型中会**将连续的层加载到同一GPU上**，以减少在GPU间传输已计算的隐层状态或梯度的成本。简单的实现会导致**GPU利用率降低**，因为每个GPU要**等前一个完成计算**，导致不必要的**气泡开销**，如下方法可以提高流水线效率：

* GPipe：[Gpipe: Efficient training of giant neural networks using pipeline parallelism](https://arxiv.org/pdf/1811.06965.pdf)
* PipeDream：[PipeDream: Fast and Efficient Pipeline Parallel DNN Training](https://arxiv.org/pdf/1806.03377.pdf)，填充多个数据batch+异步梯度更新？看下paper先。。。

**1) GPipe**

&#x20;

![gpipe](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a14fd905be31d611786d2a674de45af8b6955b7f%2Fgpipe.png?alt=media)

Gpipe主要思想：

* 图a：把模型不同layers顺序放在4张卡上，0->3卡流水线前向计算loss，3->0再反向计算gradients
* 图b：从时间顺序上看，**每张卡有3/4时间是空闲的**，GPU利用率非常低
* 图c：配合**梯度累积**，多个mini-batch可以同时跑在流水线里面，每张卡则有3/(3+4)的时间空闲（Bubble）

流水线并行的问题是中间有**Bubble**。当卡数$$K$$，梯度累积次数$$M$$，则$$Bubble=(K-1)/(K-1+M)$$

GPT里用[Weight Tying](https://paperswithcode.com/method/weight-tying)提升效果，输入和输出共享vocab embedding

**2) 重计算**

&#x20;

即gradient checkpointing，重计算(recomputation)是对于pipeline parallelism非常重要的一个优化，最开始在[Training Deep Nets with Sublinear Memory Cost](https://arxiv.org/pdf/1604.06174.pdf)一文中提到，在**flash attention**中也用了。

因为要做pipeline+梯度累积，前向过程中的**激活值**要保存，以留给反向过程使用，保存很多份的激活值对显存造成了很大压力。recomputation(也叫**checkpointing**)用时间来换空间（反向的时候进行一次激活值的重计算），可以缓解显存问题。

pytorch的[实现](https://github.com/pytorch/pytorch/blob/main/torch/utils/checkpoint.py)。大致逻辑是包了一个`autograd.Function`，前向时保存一些inputs/rng\_state(RNG state是Random Number Generator state的缩写，**随机数生成器的状态**。在深度学习和其他计算任务中，随机数生成器用于初始化参数、决定正则化技术如dropout的行为，以及在训练过程中选择样本等。RNG状态是指随机数生成器当前的内部状态，它可以用来在需要时重现或恢复特定的随机数序列，确保实验或模型训练的可重复性)，反向时重新计算

深度更深的时候，一般效果更好

cpu offload：层数很深的时候，可能可以把一些计算挪到cpu上去，再搞回gpu

**张量并行（Tensor Parallelism）**

&#x20;

[Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism](https://arxiv.org/pdf/1909.08053.pdf)

**分解LLM的张量（参数矩阵）**，例如矩阵乘法$$Y=X A$$，$$A$$可以按列分成两个子矩阵$$A\_1$$和$$A\_2$$，从而改为$$Y=\left\[X A\_1, X A\_2\right]$$，将$$A\_1$$和$$A\_2$$**放到不同GPU上**，然后就可能通过跨GPU通信将两个GPU的结果merge。

* Megatron-LM：能扩展到更高维度的张量
* Colossal-AI：
  * 为更高维度的张量实现了张量并行，[An efficient 2d method for training super-large deep learning models](https://arxiv.org/pdf/2104.05343.pdf)、[Tesseract: Parallelize the tensor parallelism efficiently](https://arxiv.org/pdf/2105.14500.pdf)和[Maximizing Parallelism in Distributed Training for Huge Neural Networks](https://arxiv.org/pdf/2105.14450.pdf)
  * 特别针对序列数据提出**序列并行**([Sequence Parallelism: Long Sequence Training from System Perspective](https://arxiv.org/pdf/2105.13120.pdf))，详见下一节

参考<https://zhuanlan.zhihu.com/p/622036840>

![tensor parallelism](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-63562212959a41e24b144550731c600ef7ecb5d7%2Ftensor-parallelism.png?alt=media)

原始矩阵乘法是`[m,k], [k, n] -> [m, n]`，有如下两种矩阵分解的等效：

* **列并行（column parallelism）**：第一个矩阵不变，第二个矩阵**竖着劈成两半**，即$$B=\[B\_1, B\_2]$$
  * `[m,k], [k, n/2] -> [m, n/2]`
  * `concat([m, n/2], [m, n/2]) -> [m, n]`
* **行并行（row parallelism）**：两个矩阵都横着劈成两半，即$$A=\left\[\begin{array}{l}A\_1 \A\_2\end{array}\right],B=\left\[\begin{array}{l}B\_1 \B\_2\end{array}\right]$$。从2推广到k，其实就是**split-k算法**，把两个矩阵都分成k个小块，两两相乘后，最后reduce\_sum一下。因为每个线程计算的矩阵更小了，开销小，可以通过加大线程数来提升并行效率。
  * `[m, k/2], [k/2, n] -> [m, n]`
  * `elemwise_add([m, n], [m, n]) -> [m, n]`

**行并行**还可以扩展到**推荐**里，假设user有k/2维，item也是k/2维，concat在一起，然后过一个k\*d的mlp，即`[1,k] * [k, d] -->[1,d]`，那么可以按行并行的方法，拆成2个`[1, k/2]`和`[k/2,d]`相乘，再相加。这样item侧的`[k/2,d]`可以把全库缓存过来，在线实时算user，排序时把对应item向量抽出来，和user加起来就行

![megatron-transformer](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-81fe754e3d6798827fd6244ac3963a7c2b71974c%2Fmegatron-transformer.png?alt=media)

megatron对transformer进行了如下优化：

* MLP第一个nn按**列分割**，第二个nn按**行分割**，中间省了一次通信
* Attention按照head来分割(类似**列分割**)，后面接的nn按**行分割**，中间也省了一次通信

图里面的通信算子

* $$f$$是前向identity，反向all-reduce
* $$g$$是前向all-reduce，反向identity

综合来看，一层transformer layer如下

![megatron-transformer-1layer](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-cfb584e49e1d9cf2792f9ba7ce6dd12cc5cf8821%2Fmegatron-transformer-1layer.png?alt=media)

具体的计算量可以参考<https://colossalai.org/docs/features/1D_tensor_parallel/#introduction>：

![clossal-ai-efficiency](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4feed1dcafebeb41d585935939db41eee8e263c9%2Fclossal-ai-efficiency.png?alt=media)

#### ZeRO

&#x20;

[ZeRO: Memory Optimization Towards Training A Trillion Parameter Models](https://arxiv.org/pdf/1910.02054v2.pdf)

zero的思想：减少显存，搜广推大部分还是数据并行，所以模型参数是复制多份的，所以zero比较有用

fp16那一节中，optimizer state的显存占用，在**前向**和**反向**的时候都**不用**，只有最后**optimizer step**的时候才用。

\===>zero的思想：把optimizer state**分shard存在不同的卡上**，只在**最后gather时才用**。

ZeRO（Zero Redundancy Optimizer）在DeepSpeed库中提出，解决**数据并行**中的**内存冗余**问题。数据并行其实并不需要每个GPU都存整个模型、梯度和优化器参数，ZeRO在每个GPU仅保存部分数据，当需要其余数据时从其他GPU检索。3种解决方案：

* 优化器状态分区：zero1，对显存最大开销的部分进行shard
* 梯度分区：zero2
* 参数分区：zero3

前两种方案不会增加通信开销，第三种方案增加约50%通信开销，但能节省和gpu数成比例的内存。

![zero](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-61e77c39d11550f06aee0ff7c4ea7d29fbbdedd1%2Fzero.png?alt=media)

详见官方博客：[ZeRO & DeepSpeed: New system optimizations enable training models with over 100 billion parameters](https://www.microsoft.com/en-us/research/blog/zero-deepspeed-new-system-optimizations-enable-training-models-with-over-100-billion-parameters/)

```python
import deepspeed
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--local_rank", type=int, default=0)
deepspeed.add_config_arguments(parser)
args = parser.parse_args()

model, optimizer, _, _ = deepspeed.initialize(args=args,
                                              model=model,
                                              model_parameters=model.parameters())
X, Y = get_batch('train')
logits, loss = model(X, Y)
model.backward(loss)
model.step()
```

需要指定deepspeed的配置：

```python
{
  "train_batch_size": 64,
  "gradient_accumulation_steps": 1,
  "optimizer": {
    "type": "Adam",
    "params": {
      "lr": 6e-4,
      "weight_decay": 1e-2,
      "betas": [0.9, 0.95]
    }zer
  },
  "scheduler": {
    "type": "WarmupLR",
    "params": {
        "warmup_min_lr": 6e-5,
        "warmup_max_lr": 6e-4,
        "warmup_num_steps": 2000
    }
  },
  "bf16": {
    "enabled": true
  },
  "zero_optimization": {
    "stage": 1
  }
}
```

启动：

```shell
deepspeed --num_gpus=8 train.py --deepspeed_config xx.json
```

facebook的开源库**FSDP(full sharded data parallel)**([Fairscale: A general purpose modular pytorch library for high performance and large scale training](https://github.com/facebookresearch/fairscale))里基于pytorch实现了类似ZeRO的技术。

```python
from torch.distributed.fsdp import FullyShardedDataParallel as FSDP, ShardingStrategy
model = FSDP(model)  #, sharding_strategy=ShardingStrategy.SHARD_GRAD_OP)
```

还有一些paper也能降低内存，如

[Reducing activation recomputation in large transformer models](https://arxiv.org/pdf/2205.05198.pdf)

[Training deep nets with sublinear memory cost](https://arxiv.org/pdf/1604.06174.pdf)

#### 序列并行

&#x20;

**序列并行**([Sequence Parallelism: Long Sequence Training from System Perspective](https://arxiv.org/pdf/2105.13120.pdf))，可以进一步分解Transformer的注意力操作。

[Reducing Activation Recomputation in Large Transformer Models](https://arxiv.org/pdf/2205.05198.pdf)这个也是

对比TP：

![tensor-parallel](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2ee9f481f1a65b1557a48ae6600ffd1e0dc9de4a%2Ftensor-parallel.png?alt=media)

SP：

![sequence-parallel](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-607e64eecb84f0bfda975076dd09fb1ec229e235%2Fsequence-parallel.png?alt=media)

#### 综合对比各种并行

&#x20;

几个缩写：params（p）/gradients(g)/optimizer states(os)/activation(a)

| 并行方法            | 显存效率                                                                 | 计算效率                                                             | 限制                                                      |
| --------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------- |
| DP（数据并行）        | p/g/os都复制在每张卡上，显存效率很低                                                | 计算和通信可以overlap，如果都在一个minipod内扩展性很好；梯度累积可以提高计算效率                  | batchsize不能太大，否则模型效果有损；batchsize/dp不能太小，不然打不满tensorcore |
| ZeRO（解决DP的显存冗余） | zero1/2/3把os/g/p分别shard到每张卡上，显存效率很高                                  | 需要做prefetch来减少通信对计算效率的影响                                         | 同DP                                                     |
| PP（流水线并行）       | 切分p，提高显存效率；a需要存多次，降低显存效率                                             | 通信次数最少，只发生在多层之间的切分点，但是有Bubble                                    | 每个Stage之间需要负载均衡，对模型结构和卡数有限制                             |
| TP（张量并行）        | p/g/os/a被shard在每张卡上，显存效率也很高；有些层如layernorm是复制的，可以用sequence parallel优化 | 梯度不需要同步，提高计算效率；每层插入了4次通信，而且是跟计算有依赖的，会降低计算效率；每层的计算量进行了切分，也会降低计算效率 | 一般是单机内8卡使用nvlink时用TP                                    |

把神经网络看成是输入$$X$$和权重$$W$$的矩阵乘法$$XW$$，那么，**DP和PP其实是对**$$X$$**的拆分**，而**TP则是对**$$W$$**的拆分**

整体对比可以看

![megatron-results](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-dec330d48b99ec0e504c7689391a7a182b2304c3%2Fmegatron-results.png?alt=media)

一般这么整合：

* 把机器分成N组，**不同组之间用DP**
* 一组机器有M台机器，**不同机器之间用PP**
* 一台机器有K张卡，**不同卡之间用TP**

### 编译优化

pytorch的TorchDynamo

<https://pytorch.org/docs/stable/torch.compiler_deepdive.html>

最简单的用法`torch.compile()`

![TorchDynamo](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-351689d80dc925ba5d1fbdc53c5f0ade693855e9%2FTorchDynamo.png?alt=media)

### flash attention

[Flashattention: Fast and memory-efficient exact attention with io-awareness](https://arxiv.org/abs/2205.14135)

FlashAttention其实是对$$softmax(QK^T)V$$的一种加速实现。

一般的实现：需要先 用矩阵$$C$$存$$QK^T$$的结果，然后对$$C$$按行做softmax得到新的$$C$$，再用$$C$$乘以$$V$$得到最后结果。

FlashAttention通过一些特殊技巧，不需要算出$$C$$这个临时变量，通过分块计算，**让临时变量总是可以放在cache里**，从而

* 减少Global Memory的大小
* 加速attenttion的计算，因为读cache比访问Global Memory快多了。

### flash attention2

[FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning](https://arxiv.org/pdf/2307.08691)

### flash attention3

[FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision](https://arxiv.org/pdf/2407.08608)

### flash attention4

[FlashAttention-4震撼来袭，原生支持Blackwell GPU，英伟达的护城河更深了？](https://mp.weixin.qq.com/s/1PaAaz8Fbt6sFKmD1hRQ7w)

<https://github.com/Dao-AILab/flash-attention>

### flexattention

[新PyTorch API：几行代码实现不同注意力变体，兼具FlashAttention性能和PyTorch灵活性](https://mp.weixin.qq.com/s/8uoZZf4hNSLQYLKFr95jTw?poc_token=HAynt2ajgl8xoDMpMWq0t8R-ubMokh17VRDwmacE)

### 训练稳定性

学习率+batchsize的一些经验：

<https://zhuanlan.zhihu.com/p/64864995>

另外，swiglu会让act\_norm变大，得加一些方式让模型能训动，一种方法是把weight\_decay调小：

* loss会变高==><https://poe.com/s/Cv6lODy94INz1ozQKJYJ>，正则项变大，L+norm中的L相对影响变小了，所以会变大，即为了防止过拟合，但可能eval的时候会更好
* act\_norm会降低20-30%，因为正则项更重要了，会让权重更接近0

层数加深时的稳定性调优：[Transformers Get Stable: An End-to-End Signal Propagation Theory for Language Models](https://arxiv.org/pdf/2403.09635)

### 数据/训练策略

#### 综述

[A Survey on Data Selection for Language Models](https://arxiv.org/pdf/2402.16827)

#### 高质量数据

[Llama架构比不上GPT2？神奇token提升10倍记忆？](https://mp.weixin.qq.com/s/TMkn6yMTUrrGhxCQnd7_2g)

[Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws](https://arxiv.org/pdf/2404.05405.pdf)

制造**人工合成数据**，通过控制数据中知识的数量和类型，来严格调控数据中的**知识比特数 (bits)**。使用不同大小和架构的 LLM 在人工合成数据上进行训练，并给出数学定理，来精确计算训练好的模型从数据中**学到了多少比特的知识**。有如下几个发现：

* 如果**训练时间充足**，不论使用何种模型架构，模型的**存储效率**均可以达到**2bit/param**（即平均每个模型参数可以存储2比特的信息）。而且发现transformer中的知识**并非主要存储在MLP层**，因为即便移除所有MLP层，模型仍能达到 2bit/param 的存储效率。
* 如果**训练时间不充足**，GPT2模型能比LlaMA/Mistral存储超过30%的知识，主要是因为**GatedMLP(MoE)会导致训练不稳定**，因此对同样的知识，需要**更长的训练时间**。
* **压缩/量化**的影响：将训练好的模型从float32/16压缩到int8，对知识的存储**毫无影响**。LLM可以达到“**信息论极限**”的**1/4**——因为int8只有8比特，但平均每个参数可以存储2比特的知识。
* **高质量数据**的影响：如果我们的预训练数据中，有1/8来自高质量知识库（如百度百科），7/8来自低质量数据（如common crawl或论坛对话，甚至是完全随机的垃圾数据），会发现：
  * 即使对高质量数据的训练时间保持一致，**低质量数据的存在本身**可能会让模型对**高质量知识的存储量下降20倍**，即便将高质量数据的训练时间延长 3倍，知识储量仍会降低3倍
  * 解法：只需给所有的预训练数据**加上自己的网站域名token即可**，模型的知识存储量可以立即回升10倍，模型**不需要任何先验知识**来识别哪些网站上的知识是金子，而可以在预训练过程中，自动发现高质量知识的网站，并**自动为这些高质量数据腾出存储空间**。

#### DSIR

[Data Selection for Language Models via Importance Resampling](https://arxiv.org/pdf/2302.03169)

<https://github.com/p-lambda/dsir>

大致思路：

输入语料样本$$z\_i$$

* 学习语料的特征分布（target data是$$\hat{p}$$，raw data是$$\hat{q}$$）
* 利用语料样本衡量样本间的重要性权重$$w\_i=\frac{\hat{p}\left(z\_i\right)}{\hat{q}\left(z\_i\right)}$$
* 根据权重进行无放回的采样，兼顾多样性和分布一致性

#### DoReMi

[DoReMi: Optimizing Data Mixtures Speeds Up Language Model Pretraining](https://arxiv.org/pdf/2305.10429) NeurIPS2023的spotlight

<https://github.com/sangmichaelxie/doremi>

![doremi](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-91eab8fc096ef867515e040bd830f6a922005a98%2Fdoremi.png?alt=media)

* 使用初始的reference domain weights来训练一个小的reference model $$p\_{ref}$$，可以用简单的方式合并，例如用样本量加权
* 用reference mnodel来指导一个小的proxy model的训练，proxy model使用group DRO（group distributionally robust optimization）来得到domain weights，即让最大的loss gap最小化

$$
\min *\theta \max *{\alpha \in \Delta^k} L(\theta, \alpha):=\sum*{i=1}^k \alpha\_i \cdot\left\[\frac{1}{\sum*{x \in D\_i}|x|} \sum\_{x \in D\_i} \ell\_\theta(x)-\ell\_{\mathrm{ref}}(x)\right]
$$

* domain weights: $$\alpha$$
* proxy model参数：$$\theta$$
* domain语料：$$D$$
* $$\ell\_\theta(x)=-\log p\_\theta(x)$$
* 使用tune完的domain weights来训练大模型
* 可以重复这个过程，用新的domain weights重新训练ref\_model，迭代下去

#### dataset decomposition

[Dataset Decomposition: Faster LLM Training with Variable Sequence Length Curriculum](https://arxiv.org/pdf/2405.13226)

LLM的训练语料大都是相同长度的sequence，一般是多篇文档concat到一起，然后再切分成等长的sequence，有可能一个sequence里有不同的毫不相关的文档，这样算attention就不太适合了。方法

* 将数据划分为多个桶，每个桶中的序列长度均为$$2^i$$，保证每个序列仅来自同一个文档
* 训练时可以给定一个固定的batch\_len，即直接从某个桶里采样，也可以用特定长度策略，从多个桶里采样，组合为特定长度

![dataset-decomposition](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0b15cf4869b73907fe52e3e80056df9fb3650dd8%2Fdataset-decomposition.png?alt=media)

#### RHO-1

[RHO-1: Not All Tokens Are What You Need](https://arxiv.org/pdf/2404.07965)

<https://github.com/microsoft/rho>

![rho-1](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d33eac44415a424878bfe1b7aba7bdc4b19173d5%2Frho-1.png?alt=media)

把语料中的无用token从loss里删了

![slm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0d59e355ad4118f2af1eb7a8333a026dbc19ab2b%2Fslm.png?alt=media)

* 训练ref\_model，挑选少量高质量语料，建模语料的整体loss分布情况
* 拿ref\_model在整个预训练语料上计算每个token的ppl
* 训练LLM，只关注得分比较高的tokens

#### infinit lr

[Simple and Scalable Strategies to Continually Pre-train Large Language Models](https://arxiv.org/pdf/2403.08763)

linear warmup and cosine decay schedule：

* linear warmup阶段：前$$T\_{warmup}$$步线性增加学习率，即直到时间步$$t\_{\text {ann }}=T\_{\text {warmup }}$$，学习率设置为$$\eta\_t=\eta\_{\max } \cdot \frac{t}{T\_{\text {warmup }}}$$
* annealing阶段：对于接下来的$$T\_{ann}$$个时间步，改为cosine annealing方式，即对于时间步$$t\_{e n d}=T\_{a n n}+t\_{a n n}$$：

$$
\eta\_t=\eta\_{\min }+\frac{\left(\eta\_{\max }-\eta\_{\min }\right)}{2} \cdot\left(\cos \left(\pi \cdot \frac{t-t\_{a n n}}{t\_{\text {end }}-t\_{\text {ann }}}\right)+1\right)
$$

infinit lr decay：

* linear warmup阶段：同上
* cool down阶段：学习率逐渐decay到一个常量$$\eta\_{\text {const }}$$
* 常数阶段：学习率保持为这个常数，该阶段结束时的ckpt可以用于新数据集的继续pretrain
* annealing阶段：逐渐减小到最小值

$$
\eta\_t=\left{\begin{array}{lll}
\eta\_{\text {max }} \cdot \frac{t}{T\_{\text {warmup }}} & t \in\left\[0, t\_{c d}\right] & \text { (warm-up) } \\
f\_{c d}(t) & t \in\left(t\_{c d}, t\_{\text {const }}\right] & \text { (cooldown) } \\
\eta\_{\text {const }} & t \in\left(t\_{\text {const }}, t\_{\text {ann }}\right] & \text { (constant) } \\
\eta\_{\text {const }} \cdot\left(\frac{\eta\_{\min }}{\eta\_{\text {const }}}\right)^{\frac{t-t\_{\text {ann }}}{t\_{\text {end }}-t\_{\text {ann }}}} & t \in\left(t\_{\text {ann }}, t\_{\text {end }}\right] & \text { (annealing) }
\end{array}\right.
$$

#### JEST

[DeepMind新方法：训练时间减少13倍，算力降低90%](https://mp.weixin.qq.com/s/8rkE6Rp2yw31gw0XhFcZXg)

[Data curation via joint example selection further accelerates multimodal learning](https://arxiv.org/pdf/2406.17711)

现有的大规模预训练数据筛选方法速度慢、成本高，并且没有考虑到批次组成或训练过程中数据相关性的变化，这限制了多模态学习中的效率提升。因此，DeepMind团队研究了**联合选择数据批次**而非单个样本是否能够加速多模态学习。

* 挑选好的数据批次比单独挑选数据点更为有效
* 在线模型近似可用于更高效地过滤数据
* 可以引导小型高质量数据集以利用更大的非精选数据集

JEST能够在仅使用10%的FLOP预算的情况下超越之前的最先进水平。

### 硬件的可能影响

<https://zhuanlan.zhihu.com/p/701623664?utm_psn=1784500156948938753>

大模型训练（如InternLM-7B）实践中，曾经遇到过在A100集群上表现正常的代码和数据，迁移到A800集群却出现了模型准确度下降和梯度范数爆炸的问题。经过调查，我们发现这与**A800和A100 GPU的NVLink带宽差异**有关。通过在两个集群上使用nanoGPT模型进行的对照实验，我们确认了精度差异的原因在于**NCCL的Ring all-reduce算法实现**。进一步实验表明，设置环境变量NCCL\_ALGO=Tree或使用gloo作为backend可以解决精度对齐问题。最终，我们提出了一个解决方案：**在A800集群上设置NCCL\_ALGO=Tree**，强制使用Tree算法进行all-reduce操作，从而避免了Ring算法带来的精度问题，使得A800集群的模型能够正常收敛，并且与A100集群的训练精度对齐。

### fastpersist

[DeepSpeed 最新力作：大模型CKPT速度提升116倍](https://mp.weixin.qq.com/s/Gc-rMSMqWzycpn2Ye8lnIQ)

[FastPersist: Accelerating Model Checkpointing in Deep Learning](https://arxiv.org/pdf/2406.13768)

### pathways

[Pathways: Asynchronous Distributed Dataflow for ML](https://arxiv.org/pdf/2203.12533.pdf)

下载了，[pdf](https://github.com/daiwk/collections/tree/master/assets/LLM/pathways.pdf)

这个回答分析得不错 <https://www.zhihu.com/question/524596983/answer/2420225275>

Google的大规模稀疏模型设计

[DESIGNING EFFECTIVE SPARSE EXPERT MODELS](https://arxiv.org/pdf/2202.08906.pdf)

代码：<https://github.com/tensorflow/mesh/blob/master/mesh_tensorflow/transformer/moe.py>

### megatron-lm

<https://zhuanlan.zhihu.com/p/646406772>

### deepspeed

<https://zhuanlan.zhihu.com/p/343570325>

### ray-llm

<https://github.com/ray-project/ray/releases/tag/ray-2.4.0>

[Data+AI标配：Ray的2024年度总结](https://mp.weixin.qq.com/s/eiucaLEqcPyqoP17cjCr2w)

### Google的几大LLM加速工具

#### maxdiffusion

<https://github.com/google/maxdiffusion>

#### JetStream

<https://github.com/google/JetStream>

#### maxtext

<https://github.com/google/maxtext>

### Fire-Flyer AI-HPC

[用60%成本干80%的事，DeepSeek分享沉淀多年的高性能深度学习架构](https://mp.weixin.qq.com/s/-OeGYiN15vzwv0INPfIU5w)

[Fire-Flyer AI-HPC: A Cost-Effective Software-Hardware Co-Design for Deep Learning](https://arxiv.org/pdf/2408.14158)

### megatron-kwai

[万字干货！手把手教你如何训练超大规模集群下的大语言模型](https://mp.weixin.qq.com/s/SRwSnQtxx2Zyb6iIHOZPQw)

[Accelerating the Training of Large Language Models using Efficient Activation Rematerialization and Optimal Hybrid Parallelism](https://www.usenix.org/conference/atc24/presentation/yuan)

<https://github.com/kwai/Megatron-Kwai>

### DiPaCo

[DiPaCo | Google分布式训练和分布式MoE 新范式 （上）](https://mp.weixin.qq.com/s/_SdQy10mcUVLcW-r-VoTsw)

[DiPaCo | Google分布式训练和分布式MoE 新范式 （下）](https://mp.weixin.qq.com/s?__biz=MzA5MTQxMTM0Nw==\&mid=2247486316\&idx=1\&sn=467b6ae104b32f79d9e25d53a5771f97)

[DiPaCo: Distributed Path Composition](https://arxiv.org/pdf/2403.10616)

### ByteRobust

[豆包是如何炼成的？字节放出自研万卡训练系统ByteRobust论文](https://mp.weixin.qq.com/s/-KDhk_R4nj3C-uPG11VoYQ)

[Robust LLM Training Infrastructure at ByteDance](https://arxiv.org/abs/2509.16293)

## 推理框架

### KVCache

kvcache的原理：<https://zhuanlan.zhihu.com/p/670515231>

kvcache的量化：<https://zhuanlan.zhihu.com/p/691537237>

一些结论：

* 浅层KV cache相比于深层KV cache，对模型的重要性更大。

### 量化

[ZeroQuant-V2: Exploring Post-training Quantization in LLMs from Comprehensive Study to Low Rank Compensation](https://arxiv.org/pdf/2303.08302.pdf)和[Compression of generative pre- trained language models via quantization](https://arxiv.org/pdf/2203.10705.pdf)

* int8量化：[LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale](https://arxiv.org/pdf/2208.07339.pdf)
* int4量化：GLM中用了

### PPL.LLM

[高性能 LLM 推理框架的设计与实现](https://mp.weixin.qq.com/s/4o86rMuburB8jcbU0aYC7g)

<https://github.com/openppl-public/ppl.llm.serving>

### vLLM

<https://github.com/vllm-project/vllm>

各种特性的组合

<https://docs.vllm.ai/en/stable/features/?h=feature#feature-x-feature>

[图解Vllm V1系列1：整体流程](https://mp.weixin.qq.com/s/agtNbHsVZ9FuWxyK4Ttvdg)

[Efficient Memory Management for Large Language Model Serving with PagedAttention](https://arxiv.org/pdf/2309.06180.pdf)

```
As an example, for the 13B parameter OPT model, the KV cache of a single token demands 800 KB of space, calculated as 2 (key and value vectors) x 5120 (hidden state size) x 40 (number of layers) x 2 (bytes per FP16). 
```

对比sglang/trt-llm：<https://blog.vllm.ai/2024/09/05/perf-update.html>，看着和trt-llm差不多，sglang更菜

[我与vLLM的2024：清华大佬的vLLM开发之路](https://mp.weixin.qq.com/s/9WW4894LBIq72ormhlMJmA)

分布式infer：[YaRN: Efficient Context Window Extension of Large Language Models](https://arxiv.org/pdf/2309.00071)，Qwen用到了：<https://qwen.readthedocs.io/en/latest/deployment/vllm.html#multi-gpu-distributed-serving>

使用技巧：

参考<https://docs.vllm.ai/en/latest/features/compatibility_matrix.html>看所有特性的兼容性，还有<https://docs.vllm.ai/en/latest/performance/optimization.html>

* cudagraph一般来讲会比eager快，所以不要加`--enforce-eager`
* `--enable-prefix-caching`这个开起来
* `--enable-chunked-prefill`这个也开起来，配合`--max-num-batched-tokens`一起搞
* `--max-model-len`限制prompt+response的总长度，利于加速，说实话这个是最有效的参数
* `--max-num-seqs`可以设置一下，最好和实际的请求落到这个server实例的qps近似，需要实测
* `--swap-space`其实没啥用，只有一个prompt生成多个response的时候有用，即`best_of > 1`（参考github issue：<https://github.com/vllm-project/vllm/issues/2853>），也就是说根本不会用到cpu的kvcache
* 投机采样说实话比较鸡肋，特别是对于qwen系列模型来讲，因为不同大小的qwen的词表是不一样大的，所以其实用不了，而如果用最简单的ngram，速度又非常慢
* 请求里的`presence_penalty`设置一下，不然qwen容易出现死循环输出从而打爆tokens

示例：

```python
import subprocess
import time
import requests
import json
import socket
from concurrent.futures import ThreadPoolExecutor, as_completed

import openai


# 检查端口是否可用
def is_port_open(host, port, timeout=5):
    """
    检查指定端口是否可用
    :param host: 主机地址
    :param port: 端口号
    :param timeout: 超时时间（秒）
    :return: True 如果端口可用，否则 False
    """
    try:
        with socket.create_connection((host, port), timeout=timeout):
            return True
    except (socket.timeout, ConnectionRefusedError):
        return False

# 启动 vLLM 服务
def start_vllm_service():
#        "CUDA_VISIBLE_DEVICES=0 VLLM_WORKER_MULTIPROC_METHOD=spawn \
    port = 12345
    import os
    import tempfile

    # 创建临时目录并设置权限
    temp_dir = tempfile.mkdtemp()
    os.chmod(temp_dir, 0o755)
    
    # 设置环境变量
    env = os.environ.copy()
    env.update({
        "VLLM_WORKER_MULTIPROC_METHOD": "spawn",
        #"CUDA_VISIBLE_DEVICES": "0",
        "TMPDIR": temp_dir,
        "TEMP": temp_dir,
        "TMP": temp_dir
    })
    cur_port = port    
    tp_size = 1
    process = subprocess.Popen(
        ["python3", "-m", "vllm.entrypoints.openai.api_server",
                "--host", "0.0.0.0",
                "--port", str(cur_port),
                "--max-model-len", "2000",
                "--max-num-batched-tokens", "1024",
                "--max-num-seqs", "64",
                "--trust-remote-code",
                "--enable-reasoning",
                "--enable-prefix-caching",
                "--enable-chunked-prefill",
#                "--swap-space", "16",
#                "--speculative_model", "./DeepSeek-R1-Distill-Qwen-7B",
#                "--num_speculative_tokens","5",
#                "--speculative_draft_tensor_parallel_size", "1",
#                "--speculative_model", "[ngram]",
#                "--num_speculative_tokens", "5",
#                "--ngram_prompt_lookup_max", "4",
#                "--enforce-eager",
                "--reasoning-parser", "deepseek_r1",
                "--tensor-parallel-size", str(tp_size),
                "--served-model-name", "deepseek-reasoner",
        "--model", "./DeepSeek-R1-Distill-Qwen-32B-AWQ"
    ],
        #shell=True,
        env=env,
        stdout=open("./out.log", "w"),
        stderr=open("./err.log", "w")
    )
    #--max-num-batched-tokens 65536 
    #    --gpu-memory-utilization 0.97 \
    #    --uvicorn-log-level warning \
    return process

# 发送请求的函数
def send_request(client, model, prompt):
    """
    向 vLLM 服务发送请求
    :param prompt: 用户输入的提示
    :return: 模型生成的响应
    """
    try:
        messages = [{"role": "user", "content": prompt}]
        completion = client.chat.completions.create(
            model=model,
            messages=messages,
            temperature=0.3,
            presence_penalty=1.2,
#            top_p=0.1
            #   max_tokens=8
        )
        print(completion.choices[0])
        content = completion.choices[0].message.content
        reasoning_content = completion.choices[0].message.reasoning_content
        print(content)
        #print("reasoning:")
        #print(reasoning_content)
        return content
    except Exception as e:
        return {"error": str(e)}

# 主函数
def main():
    """
    主函数：启动服务、发送并发请求、处理结果
    """
    # 启动 vLLM 服务
    print("Starting vLLM service...")
    vllm_process = start_vllm_service()

    # 检查端口是否可用
    host = "localhost"
    port =12345 
    print(f"Waiting for service to start on {host}:{port}...")
    while not is_port_open(host, port):
        print("Service not ready yet, waiting...")
        time.sleep(2)  # 每 2 秒检查一次
    print("Service is ready!")

    all_p = []
    with open("./prompts", 'r') as fin:
        for line in fin:
            prompt = line.strip("\n")
            all_p.append(prompt)

    prompts = all_p[:68]

    client = openai.OpenAI(
        base_url=f"http://{host}:{port}/v1", # "http://<Your api-server IP>:port"
        api_key = "sk-no-key-required"
    )

    models = client.models.list()
    model = models.data[0].id

    # 使用 ThreadPoolExecutor 创建线程池并发发送请求
    print("Sending requests concurrently...")
    start = time.time()
    with ThreadPoolExecutor(max_workers=60) as executor:  # 最大线程数为 
        # 提交任务到线程池
        futures = [executor.submit(send_request, client, model, prompt) for prompt in prompts]
        # 获取任务结果
        for future in as_completed(futures):
            try:
                result = future.result()
                print("Response:", result)
            except Exception as e:
                print(f"Request failed: {e}")
    end = time.time()
    cost = end - start
    print(cost)
    # 关闭 vLLM 服务
    print("Stopping vLLM service...")
    vllm_process.terminate()
```

### 并行推理方法

[Efficiently scaling transformer inference](https://arxiv.org/pdf/2211.05102.pdf)

[3万字详细解析清华大学最新综述工作：大模型高效推理综述](https://mp.weixin.qq.com/s/U9ESiWehnoKc9SnDz7DVKg)

[万字综述大模型高效推理：无问芯穹与清华、上交最新联合研究全面解析大模型推理优化](https://mp.weixin.qq.com/s/7LKfamTnCyFih6_grf9m3A)

[A Survey on Efficient Inference for Large Language Models](https://arxiv.org/pdf/2404.14294)

[LLM后端推理引擎性能大比拼](https://mp.weixin.qq.com/s/dPd84P_VdKog8v2IcHDOrQ)

### medusa

decoder的并行化： <https://zhuanlan.zhihu.com/p/368592551>

<https://sites.google.com/view/medusa-llm>

用了tree-attention

<https://github.com/FasterDecoding/Medusa>

### CLLM

[3倍生成速度还降内存成本，超越Medusa2的高效解码框架终于来了](https://mp.weixin.qq.com/s/Aw_bjXIQFdOJvN22UvW9UA)

[CLLMs：Consistency Large Language Models](https://arxiv.org/pdf/2403.00835)

### fasterTransformer/TensorRTLLM

<https://github.com/NVIDIA/FasterTransformer>

<https://github.com/NVIDIA/TensorRT-LLM/>

remove padding的逻辑如下，把整个batch的数据变成一行数据，加上offset标注是哪一条样本的

![effective\_transformer](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f84b7b46efbd18a41c5c92b092236497caa2b059%2Feffective_transformer.png?alt=media)

源自<https://github.com/NVIDIA/FasterTransformer/blob/main/docs/bert_guide.md>，思想其实是<https://github.com/bytedance/effective_transformer>提出的

直接有这么个脚本：

<https://github.com/NVIDIA/TensorRT-LLM/blob/main/examples/recurrentgemma/convert_checkpoint.py>

<https://github.com/daiwk/TensorRT-LLM/blob/main/tensorrt_llm/models/recurrentgemma/model.py>

关于plugin：

* 自己加plugins：<https://github.com/NVIDIA/TensorRT-LLM/tree/main/examples/openai_triton>
* 已有plugins：<https://github.com/NVIDIA/TensorRT-LLM/tree/main/cpp/tensorrt_llm/plugins>

一些参数设置：

<https://www.bentoml.com/blog/tuning-tensor-rt-llm-for-optimal-serving-with-bentoml>

`--multiple_profiles` enables multiple TensorRT optimization profiles in the built engines, it will benefits the performance especially when GEMM plugin is disabled, because more optimization profiles help TensorRT have more chances to select better kernels. However, this feature will increase the engine build time.

#### trt-llm显存泄露解决

因为用到了kvcache，py的runner的memory管理有问题，改成cpp的runner就行了

<https://github.com/NVIDIA/TensorRT-LLM/issues/283>

<https://nvidia.github.io/TensorRT-LLM/reference/memory.html#python-runtime-not-recommended-to-be-used>

### huggingface/text-generation-inference

<https://huggingface.co/docs/text-generation-inference/index>

<https://github.com/huggingface/text-generation-inference/blob/main/server/text_generation_server/models/causal_lm.py>

<https://github.com/huggingface/text-generation-inference/blob/main/server/text_generation_server/models/seq2seq_lm.py>

<https://github.com/huggingface/text-generation-inference/blob/main/server/text_generation_server/models/mamba.py>

### block transformer

[KAIST-AI | 提出Block Transformer架构，大幅提升推理速度和内存效率，20倍增益！](https://mp.weixin.qq.com/s/H9qETDRwR9Q_3fG-XkBeeQ)

[Block Transformer: Global-to-Local Language Modeling for Fast Inference](https://arxiv.org/pdf/2406.02657)

<https://github.com/itsnamgyu/block-transformer>

### MoonCake

[月之暗面kimi底层推理系统方案揭秘](https://mp.weixin.qq.com/s/4SBRZKAjqcS2MkvnFPey_g)

[Mooncake: A KVCache-centric Disaggregated Architecture for LLM Serving](https://github.com/kvcache-ai/Mooncake/blob/main/Mooncake-v1.pdf)

<https://github.com/kvcache-ai/Mooncake/tree/main>

### MInference(microsoft)

[MInference 1.0: Accelerating Pre-filling for Long-Context LLMs via Dynamic Sparse Attention](https://arxiv.org/pdf/2407.02490)

![minference](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-80b9ab968455664f78ee8f2d7b3ac049806c3b6f%2Fminference.png?alt=media)

### Sarathi-Serve(microsoft)

[OSDI 2024系列-低延迟大模型推理服务1](https://mp.weixin.qq.com/s/lfIyLnR2l5KBeuvPzeLBnQ)

[Taming Throughput-Latency Tradeoff in LLM Inference with Sarathi-Serve](https://arxiv.org/pdf/2403.02310)

### SGLang(uc berkerley)

[贾扬清点赞：3K star量的SGLang上新，加速Llama 405B推理秒杀vLLM、TensorRT-LLM](https://mp.weixin.qq.com/s/FYwguU3USf12Wb5HXaHH3A)

[吞吐量提升5倍，联合设计后端系统和前端语言的LLM接口来了](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650904838\&idx=4\&sn=81a9f09f54f1b89b98fdc3d6be11ce51\&chksm=84e45d78b393d46e38fed5d7e1952c9f465488b6953b63206a077f9d886c1104028b06c987c4\&scene=21#wechat_redirect)

<https://github.com/sgl-project/sglang/>

[SGLang: Efficient Execution of Structured Language Model Programs](https://arxiv.org/pdf/2312.07104)

[三个程序员奋战三天重写推理堆栈，Grok-2 mini直接提速两倍，马斯克亲发贺电](https://mp.weixin.qq.com/s/prC4R1Jjhc7r6mMXv_ZNcw)

[当开源创新遇上推理革命：SGLang如何炼就DeepSeek最强开源推理引擎？](https://mp.weixin.qq.com/s/Yo71XCYZUHxwYDQmkWsjoA)

### LazyLLM

[苹果让大模型学会偷懒：更快吐出第一个token，准确度还保住了](https://mp.weixin.qq.com/s/mAbiJEKd2zzNmt1pmGfmnQ)

[LazyLLM: Dynamic Token Pruning for Efficient Long Context LLM Inference](https://arxiv.org/pdf/2407.14057)

### 各框架对比

[最佳LLM推理引擎？TensorRT vs vLLM vs LMDeploy vs MLC-LLM](https://mp.weixin.qq.com/s/AnqaukudFukLYSi55w9r2Q)

### DuoAttention

[MIT韩松团队长上下文LLM推理高效框架DuoAttention：单GPU实现330万Token上下文推理](https://mp.weixin.qq.com/s/avM4jketPuNGzx-8tZvxIQ)

[DuoAttention: Efficient Long-Context LLM Inference with Retrieval and Streaming Heads](https://arxiv.org/abs/2410.10819)

<https://github.com/mit-han-lab/duo-attention>

### FlashInfer

[叶子豪、陈天奇等人开源项目FlashInfer入选，MLSys2025最佳论文奖公布](https://mp.weixin.qq.com/s/ifDaTpoo0VXCa6UutgSmMA)

[FlashInfer: Efficient and Customizable Attention Engine for LLM Inference Serving](https://arxiv.org/abs/2501.01005)

<https://github.com/flashinfer-ai/flashinfer>

### Multiverse

[逐个token太慢！大模型原生并行出token，CMU、英伟达新作Multiverse](https://mp.weixin.qq.com/s/ZkYvbsHkob5qO5GgTw2j9Q)

[Multiverse: Your Language Models Secretly Decide How to Parallelize and Merge Generation](https://arxiv.org/pdf/2506.09991v2)

<https://github.com/Multiverse4FM/Multiverse>

### MegaScale-Infer

[MegaScale-Infer: Serving Mixture-of-Experts at Scale with Disaggregated Expert Parallelism](https://arxiv.org/pdf/2504.02263)

在Decode阶段，如下图所示，其中“max”表示batch size增大至显存容量上限。

* Attention通常是访存瓶颈（memory access bound），因为有多个矩阵乘法，要读写多个矩阵（QKVO），有一些是串行的。当增大batch size时，Attention的算力需求基本保持不变，因其已达到数据加载的上限
* FFN则更多表现为计算瓶颈（compute bound），因为只需要读一次2个矩阵，做大矩阵乘法比较慢。当增大batch size时，FFN能够获得一定的性能提升，这一特点在MoE架构中尤为明显

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e7c05ee8af72f335c699717e5db7ebf506b44782%2Fmega-scale-infer.png?alt=media)

### Prefill-as-a-Service

[Prefill-as-a-Service: KVCache of Next-Generation Models Could Go Cross-Datacenter](https://arxiv.org/pdf/2604.15039)

## speculative-decoding

### 综述

[Unlocking Efficiency in Large Language Model Inference: A Comprehensive Survey of Speculative Decoding](https://arxiv.org/pdf/2401.07851v3)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2e2746d4c1d5eaf0af0d7fef78f55d3cf9899e66%2Ftimeline-speculative-decoding.png?alt=media)

在auto-regressive decoding的过程中先采用**更小的draft model猜词**，然后送给**target model并行验证**，以通过在**访存限制**的情况下充分利用算力，提升模型的推理效率；并且保证decoding的分布与target model一致；

整体流程如下：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b0d9e3f6f1426790852831413eb9f82777c27a7b%2Fspeculative-decoding.png?alt=media)

* draft model一次性猜出未来的K个draft token，概率是p，采样的token 是x
* target model**并行**生成K+1个token，概率是q，即输入之前序列的和前n个draft token，预测下一个token
* 从1到k，逐个验证，
  * 如果verify(x,p,q)正确，直接用x
  * 否则，用correct(p,q)，把后面的draft token都扔掉

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1633a127ac27996b7ad5622568659645c0478645%2Fspeculative-decoding-verify.png?alt=media)

### 几篇比较早期的

[Fast Inference from Transformers via Speculative Decoding](https://arxiv.org/pdf/2211.17192)

<https://github.com/feifeibear/LLMSpeculativeSampling>

[Accelerating Large Language Model Decoding with Speculative Sampling](https://arxiv.org/pdf/2302.01318)

[SpecInfer: Accelerating Generative Large Language Model Serving with Tree-based Speculative Inference and Verification](https://arxiv.org/abs/2305.09781)

<https://github.com/flexflow/flexflow-train>

### EAGLE系列

[大模型推理效率无损提升3倍，滑铁卢大学、北京大学等机构发布EAGLE](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650900466\&idx=5\&sn=3d893e95cef725a7acbdab5763870c36\&scene=21#wechat_redirect)

[EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty](https://arxiv.org/pdf/2401.15077)

[无损加速最高5x，EAGLE-2让RTX 3060的生成速度超过A100](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650926594\&idx=5\&sn=fe8b52b499e3d3a3ef73a543e77385f1\&scene=21#wechat_redirect)

[EAGLE-2: Faster Inference of Language Models with Dynamic Draft Trees](https://arxiv.org/pdf/2406.16858)

<https://github.com/SafeAILab/EAGLE>

[大模型推理无损加速6.5倍！EAGLE-3碾压一切、延续Scaling Law能力](https://mp.weixin.qq.com/s/4cq9f-_eB4znXRPEpKYAkA)

[EAGLE-3: Scaling up Inference Acceleration of Large Language Models via Training-Time Test](https://arxiv.org/abs/2503.01840)

### prompt-lookup decoding & REST

<https://www.zhihu.com/question/3266943961/answer/28177009964>

prompt-lookup decoding：<https://github.com/apoorvumang/prompt-lookup-decoding>

[REST: Retrieval-Based Speculative Decoding](https://arxiv.org/abs/2311.08252)

<https://zhuanlan.zhihu.com/p/685234708>

### LayerSkip

[LayerSkip: Enabling Early Exit Inference and Self-Speculative Decoding](https://arxiv.org/pdf/2404.16710)

<https://github.com/facebookresearch/LayerSkip>

### DISTILLSPEC

[DISTILLSPEC: IMPROVING SPECULATIVE DECODING VIA KNOWLEDGE DISTILLATION](https://arxiv.org/pdf/2310.08461)

### Graph-Structured Speculative Decoding

[Graph-Structured Speculative Decoding](https://arxiv.org/pdf/2407.16207)

## 算子加速

### Triton

[天下苦英伟达久矣！PyTorch官方免CUDA加速推理，Triton时代要来？](https://mp.weixin.qq.com/s/6gkPA-xc7GsltM1Ywui_XQ)

### Mirage

[告别CUDA无需Triton！Mirage零门槛生成PyTorch算子，人均GPU编程大师？](https://mp.weixin.qq.com/s/M3WFt17QErAt46VuqkFjFQ)

### MPK

[舍弃CUDA编程！CMU等用几十行代码将LLM编译成巨型内核，推理延迟可降6.7倍](https://mp.weixin.qq.com/s/D3fYjn8YksswteQE05Ohbw)

[blog](https://zhihaojia.medium.com/compiling-llms-into-a-megakernel-a-path-to-low-latency-inference-cf7840913c17)

<https://github.com/mirage-project/mirage/tree/mpk>

### flashQLA

GDN的加速库

<https://qwen.ai/blog?id=flashqla>

<https://github.com/QwenLM/FlashQLA>

## 总结

[藏在海量参数背后的系统工程：7家顶尖实验室大模型训练内参](https://mp.weixin.qq.com/s/16PcWOeShR8R8OSQOPZa7A?scene=1)

[frontier model training methodologies](https://djdumpling.github.io/2026/01/31/frontier_training.html)


# 1.4.llm\_sft\_and\_usages

## 微调

* 指令微调（instruct tuning）：增强/解锁LLM的能力，
* 对齐微调（alignment tuning）：将LLM的行为与为类的价值观或偏好对齐。
* 高效微调方法：用于模型快速适配

### 指令微调

* 收集或构建指令格式(instruction-formatted)的实例
* 使用这些示例进行**有监督微调**

详见综述[Is prompt all you need? no. A comprehensive and broader view of instruction learning](https://arxiv.org/pdf/2303.10475.pdf)

数据集：<https://huggingface.co/collections/davanstrien/top-10-instruction-tuning-datasets-650d91e11427d12e8542a21a>

#### 构建格式化实例

&#x20;

指令格式的实例包括一个任务描述（即**指令**）、一对输入输出和少量示例（可选）

**格式化已有数据集**

&#x20;

* **收集来自不同领域（文本摘要、文本分类、翻译等）的实例**来创建有监督的多任务训练数据集。用自然语言的任务描述来格式化这些数据集是很方便的。
* 使用**人类撰写的任务描述**来增广带标的数据集，通过**解释任务目标**来指导LLM理解任务。
* 众包平台（如PromptSource）有效地创建、共享和难不同数据集的任务描述
* 通过指令微调特殊设计的任务描述，**反转**已有实例的输入-输出对，例如“请基于以下答案生成一个问题”，如
* 利用**启发式任务模板**将大量**无标注的文本**转换为**带标注的实例**。如[Learning instructions with unlabeled data for zero-shot cross-task generalization](https://arxiv.org/pdf/2210.09175.pdf)

**格式化人类需求**

&#x20;

来自公共NLP数据集的训练实例虽然进行了格式化，但**任务描述缺乏多样性**或**与人类真实需求不匹配**，故InstructGPT采用真实用户提交给其API的查询作为任务描述。此外，为了丰富任务多样性，通常

* 标注者为**真实生活中的任务**编写指令，如开放式生成、开放式问答、头脑风暴、聊天等
* 另一组**标注人员**直接对这些指令进行**回答**
* 将\*\*指令（采集的用户查询）**和**期望输出（人工编写的答案）\*\*pair对作为一个训练实例

还有一些**半自动化**的方法将**现有实例**输入到LLM中生成多样的任务描述和实例来构建实例，如

* [Self-instruct: Aligning language model with self generated instructions](https://arxiv.org/pdf/2212.10560.pdf)，引用数好几百
* [Unnatural instructions: Tuning language models with (almost) no human labor](https://aclanthology.org/2023.acl-long.806.pdf)，meta的论文
* [Stanford alpaca: An instruction-following llama model](https://crfm.stanford.edu/2023/03/13/alpaca.html)

**构建实例的关键**

&#x20;

* 增加指令：
  * **扩大任务数量**：可以极大提高LLM的泛化能力。但随着任务增加，模型性能最初是连续增长，但**任务数量达到一定水平时，性能基本不提升了**。[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)猜测，一定数量的代表性性任务就能够提供足够充足的知识了。
  * 增强**任务描述的多样性**：从如长度、结构、创造力等方面入手，如[Multitask prompted training enables zero-shot task generalization](https://arxiv.org/pdf/2110.08207.pdf)
  * **每个任务的实例数量**：通常**少量实例**就可以让模型有不错的泛化能力，当某些任务的实例数量进一步增加（至数百个）时可能会**过拟合**。如[Super-NaturalInstructions: Generalization via Declarative Instructions on 1600+ NLP Tasks](https://arxiv.org/pdf/2204.07705.pdf)
* 设计格式：
  * **任务描述**：LLM理解任务的**最关键部分**
  * **适当数量的示例**：能产生**实质性的改进**，也减轻对指令工程的敏感性。如[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)
  * 指令中的其他部分：如避免事项、原因、建议，**影响很小，甚至有负面影响**，如[Cross-task generalization via natural language crowd- sourcing instructions](https://arxiv.org/pdf/2104.08773.pdf)
  * 包含**推理数据集**的**CoT实例**：[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)和[OPT-IML: scaling language model instruction meta learning through the lens of generalization](https://arxiv.org/pdf/2212.12017.pdf)提到同时用包含和不包含CoT的样本微调，能在各种下游任务取得好的效果，包括需要多级推理能力的任务（常识问答、算术推理）和不需要多级推理的任务（如情感分析和抽取式问答）。

#### 指令微调策略

&#x20;

相比预训练而言，指令微调有多个不同：

* 训练目标函数：如seq2seq的loss
* 优化参数设置：更小的batchsize和学习率
* 平衡数据分布：平衡不同任务间的比例：
  * **实例比例混合策略**（[Exploring the limits of transfer learning with a unified text-to-text transformer](https://arxiv.org/pdf/1910.10683.pdf)），把所有数据集合并，然后从混合数据集中**按比例采样**每种实例。
  * **提高高质量数据集的采样比例**能提升效果，如[Finetuned language models are zero-shot learners](https://arxiv.org/pdf/2109.01652.pdf)的FLAN和[Promptsource: An integrated development environ- ment and repository for natural language prompts](https://arxiv.org/pdf/2202.01279.pdf)的P3。
  * 设置**最大容量**：限制**数据集中能包含的最大实例数**，防止较大数据集挤占整个采样集合，通常设置为几千或几万，如[Exploring the limits of transfer learning with a unified text-to-text transformer](https://arxiv.org/pdf/1910.10683.pdf)和[OPT-IML: scaling language model instruction meta learning through the lens of generalization](https://arxiv.org/pdf/2212.12017.pdf)。
* 结合指令微调和预训练：
  * 在**指令微调时加入预训练数据**：，如OPT-IML， 可以看成是**对模型的正则化**。
  * **混合预训练数据（纯文本）和指令微调（指令格式）数据**，用多任务方式**从头训练**：[Exploring the limits of transfer learning with a unified text-to-text transformer](https://arxiv.org/pdf/1910.10683.pdf)和[Ext5: Towards extreme multi-task scaling for transfer learning](https://arxiv.org/pdf/2111.10952.pdf)。将指令格式数据集作为预训练语料库的一小部分来预训练，同时获得预训练和指令微调的优势，如GLM-130B和Galactica。

#### 指令微调效果

**性能改进**

&#x20;

* 不同规模的模型都能从指令微调中受益，**随着参数规模增加，性能也有提升**。[Multitask prompted training enables zero-shot task generalization](https://arxiv.org/pdf/2110.08207.pdf)发现，**指令微调后的小模型**甚至能比**未经微调的大模型效果更好**
* 指令微调在**不同模型架构**、**预训练目标**和**模型适配方法**上都有稳定改进效果，由[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)发现
* 指令微调是**提升现有LM（包括小型PLM）能力**的一个通用方法，同样由[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)发现
* LLM所需的**指令数据数量明显少于预训练数据**，故指令微调的**成本较低**。

**任务泛化性**

&#x20;

* 赋予LLM**遵循人类指令执行特定任务的能力**（通常被视为一种涌现能力）：[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)发现，指令微调鼓励LLM**理解**用于完成任务的**自然语言指令**，，即**在未见过的任务上也能执行**。
* 使LLM具有更强的**解决现实世界任务**的能力：指令微调能帮助LLM**缓解一些弱点**（如**生成重复内容**或**补全输入但完不成成相应任务**），由[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)和[Training language models to follow instructions with human feedback](https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf)发现。
* 指令微调后的LLM能**泛化**到**其他语言**的相关任务上：[Crosslingual generalization through multitask finetuning](https://arxiv.org/pdf/2211.01786.pdf)提出的BLOOMZ-P3基于BLOOM在**纯英文**的P3任务集合上进行微调，在多语言的句子实例任务中，相比BLOOM有超过50%的性能提升，同时仅用英文指令就能产生不错效果，**减少针对特定语言的指令工程的工作量**。

### 对齐微调

[Training language models to follow instructions with human feedback](https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf)和[Alignment of language agents](https://arxiv.org/pdf/2103.14659.pdf)提出，LLM可能**编造虚假信息**、产生**有害**的、**误导性**的和**有偏见**的表达，因为LLM在预训练时没有考虑人类的价值观或偏好。

[Improving alignment of dialogue agents via targeted human judgements](https://arxiv.org/pdf/2209.14375.pdf)和[Training language models to follow instructions with human feedback](https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf)提出了人类对齐，使LLM的行为能够符合人类期望。

[Training language models to follow instructions with human feedback](https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf)、[A general language assistant as a laboratory for alignment](https://arxiv.org/pdf/2112.00861.pdf)和[Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback](https://arxiv.org/pdf/2204.05862.pdf)发现，和适配微调（如指令微调）相比，对齐微调要考虑的标准并不同，这可能会在某种程度上**损害LLM的通用能力**，即**对齐税**。

#### 对齐的标准

* **有用性**：以**简洁**且**高效**的方式帮助用户解决任务或回答问题。需要进一步阐明问题时，应该有通过**提出恰当的问题**来**获取额外信息**的能力，并有合适的**敏感**度、**洞察**力和**审慎**度（from [A general language assistant as a laboratory for alignment](https://arxiv.org/pdf/2112.00861.pdf)）。
* **诚实性**：又称为**正确性**，提供准确内容，传达**适当的不确定性**很重要，**避免任何形式的欺骗或信息误传**。LLM了解其能力和知识水平（**知道自己不知道什么**）。[A general language assistant as a laboratory for alignment](https://arxiv.org/pdf/2112.00861.pdf)）认为，与有用性和无害性相比，诚实性是一个**更客观**的标准，故诚实性对齐**依赖的人力可能更少**。
* **无害性**：生成的语言不得是冒犯性或者歧视性的，能**检测**到**隐蔽的出于恶意目的的请求**。当**被诱导去执行危险行为**（如犯罪）时，应该**礼貌拒绝**。[Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback](https://arxiv.org/pdf/2204.05862.pdf)提出，某个行为**是否有害**及**有害程度**因**个人**和**社会**而异。

对齐的标准**很主观**，难以直接作为LLM的优化目标。比较有前景的方法是[Red teaming language models to reduce harms: Methods, scaling behaviors, and lessons learned](https://arxiv.org/pdf/2209.07858.pdf)和[Red teaming language models with language models](https://arxiv.org/pdf/2202.03286.pdf)提出的**红队攻防**，用**对抗**的方式**手动**或**自动**地**探测LLM**，使其**生成有害输出**，再**更新模型防止此类输出**。

#### 收集人类反馈

**选择标注人员**

&#x20;

* **教育水平要求高**：Sparrow要求本科学历的英国人，[Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback](https://arxiv.org/pdf/2204.05862.pdf)中的高优任务有一半是美国硕士
* **意图一致性筛选**：InstructGPT通过**标注人员和研究人员**意图一致性来选择标人员。研究者先自己标少量数据，然后衡量自己和标注人员间标的一致性，选择一致性最高的标注人员来进行后续标注。
* **选择优秀标注者**：[Teaching language models to support answers with verified quotes](https://arxiv.org/pdf/2203.11147.pdf)中，研究人员评估标注人员的表现，选出如高一致性之类的一组优秀标注人员继续合作，[Learning to summarize from human feedback](https://arxiv.org/pdf/2009.01325.pdf)发现，在标注时提供**详细的标注指令**和**实时的指导**是有帮助的。

**收集反馈**

&#x20;

* 基于排序的方法：
  * **只选最佳候选**：[Fine-tuning language models from human preferences](https://arxiv.org/pdf/1909.08593.pdf)和[Recursively summarizing books with human feedback](https://arxiv.org/pdf/2109.10862.pdf)在这种早期工作中，标注人员用比较粗略的方式评估模型生成的结果，如只选择最佳候选。一方面不同人意见不同，另一方面这种方法忽略了没被选中的样本。
  * **elo评分系统**：[Improving alignment of dialogue agents via targeted human judgements](https://arxiv.org/pdf/2209.14375.pdf)和[Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback](https://arxiv.org/pdf/2204.05862.pdf)提出了elo评分系统，两两比较所有候选输出结果，生成一个偏好排序。
* 基于问题的方法：回答**研究人员设计的特定问题**，这些问题覆盖**不同的对齐标准**以及其他**对LLM的约束**条件。例如WebGPT中，标注人员要回答关于检索到的文档**对回答给定输入是否有帮助**的选择题。
* 基于规则的方法：
  * Sparrow不仅选择**标注人员挑选的最佳回复**，还设计**一系列规则**来**测试模型生成的回复**是否符合**有用**、**正确**、**无害**的标准，让**标注者**对模型生成的回复**违反规则的程度进行打分**。
  * GPT-4用一组基于GPT-4的**zero-shot分类器**作为**基于规则的奖励模型**，**自动**确定模型生成的**输出是否违反一组人类编写的规则**。

#### RLHF

详见RLHF章节

### 高效微调

全量参数都微调成本很大，有更高效的方法，称为**参数高效微调**（**parameter-efficient fine-tuning**）。

#### 适配器微调（adapter tuning）

&#x20;

[Parameter-efficient transfer learning for NLP](https://arxiv.org/pdf/1902.00751.pdf)提出，在Transformer中引入一个**小型神经网络模块**（**适配器**），[LLM-Adapters: An Adapter Family for Parameter-Efficient Fine-Tuning of Large Language Models](https://arxiv.org/pdf/2304.01933.pdf)也提出了瓶颈架构：

* 将原始特征压缩到**较小维度**（然后进行非线性变换）
* 恢复到**原始维度**

一般是**串行插入**的方式，集成到**每个Transformer层里**，分别放到**注意力层**和**前馈层之后**。[Towards a unified view of parameter- efficient transfer learning](https://arxiv.org/pdf/2110.04366.pdf)提出了**并行适配器**，即与**注意力层和前馈层并行**。

微调时，**原参数不变**，**仅更新适配器模块参数**。

#### 前缀微调（prefix tuning）

&#x20;

[Prefix-tuning: Optimizing continuous prompts for generation](https://arxiv.org/pdf/2101.00190.pdf)。

* 在每个**Transformer层前**添加一系列前缀，即一组**可训练的连续向量**。前缀向量具有**任务的特异性**，可以看作**虚拟的token emb**。
* **重参数化**技巧：
  * 学习一个将**较小矩阵映射到前缀参数矩阵**的**MLP函数**，而不是直接优化前缀，有助于**稳定训练**。
  * 优化后，**舍弃映射函数**，只保留派生的前缀向量以增强与特定任务相关的性能。
  * 由于只训练前缀参数，故能实现参数高效的模型优化

[P-tuning v2: Prompt tuning can be comparable to fine- tuning universally across scales and tasks](https://arxiv.org/pdf/2110.07602.pdf)提出了p-tuning v2，为了自然语言理解在Transformer中引入**逐层提示向量**，还利用**多任务学习**来**联合优化共享的提示**。

#### 提示微调（prompt tuning）

&#x20;

在**输入层**加入**可训练**的**提示向量**，基于离散提示方法（[How can we know what language models know?](https://arxiv.org/pdf/1911.12543.pdf)和[Autoprompt: Eliciting knowledge from lan- guage models with automatically generated prompts](https://arxiv.org/pdf/2010.15980.pdf)），通过包含一组**软提示token**来扩充输入文本，再用扩充后的输入来解决特定的下游任务。将**任务特定的提示emb**与**输入文本的emb**相结合，输入模型中。

* [GPT understands, too](https://arxiv.org/pdf/2103.10385.pdf)：提出了P-tuning，用**自由形式**来组合**上下文**、**提示**和**目标token**，用**双向LSTM**学习**软提示token的表示**，适用于自然语言理解和生成的架构。
* [The power of scale for parameter-efficient prompt tuning](https://arxiv.org/pdf/2104.08691.pdf)：提示微调，直接在**输入前**加入**前缀提示**。训练时**只有提示emb**会根据特定任务进行监督学习。这种方法在**输入层**只包含**少量可训练参数**，故其效果**高度依赖底层语言模型的能力**。

#### 低秩适配（LoRA）

&#x20;

[Lora: Low-rank adaptation of large language models](https://arxiv.org/pdf/2106.09685.pdf)通过增加低秩约束来近似每层的更新矩阵，假设参数矩阵$$\mathbf{W} \in \mathbb{R}^{m \times n}$$，一般是

$$
\mathbf{W}=\mathbf{W}+\Delta \mathbf{W}
$$

冻结$$\mathbf{W}$$，通过低秩分解矩阵来近似更新

$$
\Delta \mathbf{W}=\mathbf{A} \cdot \mathbf{B}^{\top}
$$

其中$$\mathbf{A} \in \mathbb{R}^{m \times k}$$和$$\mathbf{B} \in \mathbb{R}^{n \times k}$$是用于任务适配的可训练参数，$$r \ll \min (m, n)$$是**降低后的秩**。

LoRA的优点：

* 大大**节省内存和存储**（如VRAM，Video Random Access Memory）
* 可以只**保留一个大型模型副本**，同时**保留多个**用于**适配不同下游任务**的**特定低秩分解矩阵**。

用更有原则的方法设置秩：

* 基于**重要性分数**的分配：[Adaptive budget allocation for parameter-efficient fine-tuning](https://arxiv.org/pdf/2303.10512.pdf)提出的AdaLoRA
* **无需搜索**的**最优秩选择**：[Dylora: Parameter efficient tuning of pre-trained models using dynamic search-free low- rank adaptation](https://arxiv.org/pdf/2210.07558.pdf)

[Thinking Machines又发高质量博客：力推LoRA，不输全量微调](https://mp.weixin.qq.com/s/Q6fmffP5uxCIRZotDMnI3g)

<https://thinkingmachines.ai/blog/lora/>

* 在小数据量任务上，LoRA与FullFT几乎没有差距，完全可以对齐；
* 在大数据量任务上，LoRA的容量不足，承载不了过多新知识，表现略显吃力；

一些技巧：

* 只加在注意力层并不理想，覆盖所有层（尤其MLP/MoE）效果更佳。
* LoRA在大batch size下，比FullFT更容易掉性能
* LoRA的学习率和超参数规律与FullFT不同，需要单独调优。最优学习率通常是FullFT的约10倍。初期训练时，LoRA需要更高的学习率（约15倍FullFT），长期训练则趋近于10倍。

此外还发现，在强化学习任务里，哪怕LoRA rank=1这么小的设定，也能跑出与全量微调接近的效果。

* 在监督学习中，模型大约可存储每个参数2 bits信息。数据集的描述长度可以通过第一轮训练的总log-loss估算；
* 在强化学习中，尤其是策略梯度方法，每个episode约提供1 bit信息。这说明强化学习对LoRA容量的要求相对较低。

#### 小结

LoRA已经有广泛的应用，如LLaMA和BLOOM，

* Alpaca-LoRA：[Instruct-tune llama on consumer hardware](https://github.com/tloen/alpaca-lora)，通过LoRA训练的Alpaca的轻量级微调版本。
* LLaMA-Adapter：[Llama-adapter: Efficient fine-tuning of language models with zero-init attention](https://arxiv.org/pdf/2303.16199.pdf)将**可学习的提示向量**插入每个Transformer层中，提出**零初始化的注意力**，通过**减轻欠拟合提示向量的影响**以改善训练，还能扩展到**多模态设置**，如视觉问答。

[LLM-Adapters: An Adapter Family for Parameter-Efficient Fine-Tuning of Large Language Models](https://arxiv.org/pdf/2304.01933.pdf)比较了串行适配器微调、并行适配器微调和LoRA，在GPT-J(6B)、BLOOM(7.1B)和LLaMA(7B)上评估：这些方法在**困难任务上效果不如GPT-3.5**，但**在简单任务上表现相当**，**LoRA**表现相对较好且使用的可训练参数明显较少。

huggingface开源了[Peft: State-of-the-art parameter-efficient fine-tuning methods](https://github.com/huggingface/peft)，包括LoRA/AdaLoRA、前缀微调、P-Tuning、提示微调，支持GPT-2和LLaMA，还支持视觉Transformer如ViT和Swin Transformer。

[让大模型不再「巨无霸」，这是一份最新的大模型参数高效微调综述](https://mp.weixin.qq.com/s/b16EPZ3z-LpGapGy2Q7ZUg)

[Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey](https://arxiv.org/pdf/2403.14608.pdf)

### lora变种

#### DoRA

[DoRA: Weight-Decomposed Low-Rank Adaptation](https://arxiv.org/pdf/2402.09353.pdf)

<https://github.com/catid/dora>

LoRA可以认为是对Finetune微调的一种低秩近似，通过增加Rank，LoRA可以达到类似Finetune的微调效果。因此之前多数研究都把LoRA和Finetune在微调准确性上的差异归结为二者的优化参数量不同。

但经过分析发现，lora的学习模式和FT很不一样，更偏向于大开大合，即**方向**和**幅度**呈很**强的正相关**，可能对**更精细的学习有害**

![dora](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1bc545b405363b78ba5d9036252cb25f17e3421e%2Fdora.png?alt=media)

dora通过同时关注权重更新时的**大小**和**方向变化**，实现了比LoRA**更加接近finetune**微调效果：

* w拆成magnitude($$norm$$)乘以direction($$1/norm \times w$$)
* magnitude不变，direction里的$$1/norm$$用lora更新

注意，这里的norm是column-wise的norm，即输入$$d\times k$$的矩阵，**每一列**的元素算一个norm（平方和开根号）得到一个数，最终就是$$1\times k$$的矩阵

```python
# This layer is dropped into your pre-trained PyTorch model where nn.Linear is used
class DoRALayer(nn.Module):
    def __init__(self, d_in, d_out, rank=4, weight=None, bias=None):
        super().__init__()

        if weight is not None:
            self.weight = nn.Parameter(weight, requires_grad=False)
        else:
            self.weight = nn.Parameter(torch.Tensor(d_out, d_in), requires_grad=False)

        if bias is not None:
            self.bias = nn.Parameter(bias, requires_grad=False)
        else:
            self.bias = nn.Parameter(torch.Tensor(d_out), requires_grad=False)

        # m = Magnitude column-wise across output dimension
        self.m = nn.Parameter(self.weight.norm(p=2, dim=0, keepdim=True))
        
        std_dev = 1 / torch.sqrt(torch.tensor(rank).float())
        self.lora_A = nn.Parameter(torch.randn(d_out, rank)*std_dev)
        self.lora_B = nn.Parameter(torch.zeros(rank, d_in))

    def forward(self, x):
        lora = torch.matmul(self.lora_A, self.lora_B)
        adapted = self.weight + lora
        column_norm = adapted.norm(p=2, dim=0, keepdim=True)
        norm_adapted = adapted / column_norm
        calc_weights = self.m * norm_adapted
        return F.linear(x, calc_weights, self.bias)

## 使用
def replace_linear_with_dora(model):
    for name, module in model.named_children():
        if isinstance(module, nn.Linear):
            # Get the input and output dimensions of the current nn.Linear layer
            d_in = module.in_features
            d_out = module.out_features

            # Create a new DoRALayer with the same dimensions
            setattr(model, name, DoRALayer(d_out=d_out, d_in=d_in, weight=module.weight.data.clone(), bias=module.bias.data.clone()))
        else:
            # Recursively apply this function to submodules
            replace_linear_with_dora(module)

```

#### fourierft

[ICML 2024 | 脱离LoRA架构，训练参数大幅减少，新型傅立叶微调来了](https://mp.weixin.qq.com/s/jaYeIfByJaWU5-4jBmnrzQ)

<https://github.com/Chaos96/fourierft>

### SFT技巧

[全是细节｜大模型SFT的100个关键点](https://mp.weixin.qq.com/s/LxERqJU7mP40onJQP-6UHQ)

[大模型SFT 22条实践经验，干活效率翻倍！](https://mp.weixin.qq.com/s/XgAIsVQotlf5dfUlbn1t0w)

[LLM预训练与SFT数据配比调研](https://mp.weixin.qq.com/s/-J-5oHB4T4taQd0vCHhYUA)

## 使用

### 上下文学习

GPT-3提出ICL，将**任务描述**和（或）**示范（demonstration）以自然语言文本形式**表达。

#### 上下文学习形式

* 以**任务描述**作为开始，从任务数据集中**选择一些样例**作为**示范**。
* 以特别设计的**模板形式**将它们按照**特定的顺序**组合成**自然语言提示**。
* 将**测试样例**添加到LLM的输入中以生成输出。

形式化地看，$$D\_k=\left{f\left(x\_1, y\_1\right), \ldots, f\left(x\_k, y\_k\right)\right}$$表示由$$k$$个样例组成的一组示范，$$f\left(x\_k, y\_k\right)$$表示把第$$k$$个**任务样例转换为自然语言提示**的函数。给定任务描述$$I$$、示范$$D\_k$$和新的输入查询$$x\_{k+1}$$，LLM生成的输出$$\hat{y}\_{k+1}$$如下：

$$
\operatorname{LLM}(I, \underbrace{f\left(x\_1, y\_1\right), \ldots, f\left(x\_k, y\_k\right)}*{\text {示范 }}, f(\underbrace{x*{k+1}}*{\text {输入 }}, \underbrace{\_\_\_}*{\text {答案 }})) \rightarrow \hat{y}\_{k+1} \text {. }
$$

真实答案$$y\_{k+1}$$留白，由LLM预测。

更多的可以参考综述[A survey for in-context learning](https://arxiv.org/pdf/2301.00234.pdf)

**指令微调**可以**提高LLM执行目标任务的ICL能力**，尤其是**零样本场景**（仅使用任务描述）。

#### 示范设计

&#x20;

**示范选择**

&#x20;

* 启发式方法：
  * 基于**knn的检索器**来选择与**查询**语义相关的样例：如[What makes good in-context examples for gpt-3?](https://arxiv.org/pdf/2101.06804.pdf)和[Does GPT-3 generate empathetic dialogues? A novel in-context example selection method and automatic evaluation metric for empathetic dialogue generation](https://aclanthology.org/2022.coling-1.56.pdf)。但只是**针对每个样例单独选择**，而**不是对整个样例集合**进行评估。
  * 基于**多样性**的选择策略：[Diverse demonstrations improve in-context compositional generalization](https://arxiv.org/pdf/2212.06800.pdf)和[Selective annotation makes language mod- els better few-shot learners](https://arxiv.org/pdf/2209.01975.pdf)
  * 同时考虑**相关性**和**多样性**的选择策略：[Complementary Explanations for Effective In-Context Learning](https://arxiv.org/pdf/2211.13892.pdf)
* 基于LLM的方法：
  * **直接用LLM**来**选择**：[Finding supporting examples for in-context learning](https://arxiv.org/pdf/2302.13539.pdf)：LLM可以直接根据**添加样例后**的**性能提升**评估**每个样例的信息量**，以进行选择。
  * **两阶段检索**：[Learning to retrieve prompts for in-context learning](https://arxiv.org/pdf/2112.08633.pdf)：提出EPR，先用无监督方法召回相似样例，再用密集检索器（用LLM标记的正负样例训练）进行排序。
  * **RL方法**：[Active example selection for in-context learning](https://arxiv.org/pdf/2211.04486.pdf)，将示范选择任务建模为RL问题，**LLM是奖励函数**，为训练策略模型提供反馈。
  * 用**LLM**来**生成**示范：[Chatgpt outperforms crowd-workers for text-annotation tasks](https://arxiv.org/pdf/2303.15056.pdf)发现LLM在文本标方面表现很好，故可以直接将LLM作为**无人工干预**的**示范生成器**，如[Self-generated in-context learning: Leveraging auto-regressive language models as a demonstration generator](https://arxiv.org/pdf/2206.08082.pdf)和[Selective in-context data augmentation for intent detection using pointwise v-information](https://arxiv.org/pdf/2302.05096.pdf)

[An explanation of in-context learning as implicit bayesian inference](https://arxiv.org/pdf/2111.02080.pdf)提到，ICL中选择的示范样例应该包含**足够的有关待解决任务的信息**，并**与测试查询相关**。

**示范格式**

&#x20;

将选择的示范进行**整合**以及**格式化**：

* 用相应的**输入输出对**来**实例化预定义的模板**：[Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing](https://arxiv.org/pdf/2107.13586.pdf)
* 增强LLM的**推理能力**
  * **添加任务描述**：[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)
  * 通过**CoT提示**：[Chain of thought prompting elicits reasoning in large language models](https://arxiv.org/pdf/2201.11903.pdf)
* 收集**包含人工编写的任务描述**的**大规模数据集**：[Cross-task generalization via natural language crowd- sourcing instructions](https://arxiv.org/pdf/2104.08773.pdf)，能够提升**已见任务**的性能，也能在一定程度泛化到**未见任务**。
* **半自动化**方法：[Self-instruct: Aligning language model with self generated instructions](https://arxiv.org/pdf/2212.10560.pdf)使用由**人工编写的任务描述**组成的**种子集合**来指导LLM**为新任务生成任务描述**。
* **自动生成**高质量的示范格式：
  * **Auto-CoT**：[Automatic chain of thought prompting in large language models](https://arxiv.org/pdf/2210.03493.pdf)使用零样本提示（**let's think step by step**）以生成中间推理步骤
  * **least-to-most提示**：[Least-to-most prompting enables complex reasoning in large language models](https://arxiv.org/pdf/2205.10625.pdf)先询问LLM来**执行问题分解**，再利用LLM**根据已解决的中间答案**依次**解决子问题**。

**示范顺序**

&#x20;

LLM有时会被**顺序偏差**影响，例如[Calibrate before use: Improving few-shot performance of language models](https://arxiv.org/pdf/2102.09690.pdf)提出LLM会倾向于**重复示范结尾附近的答案**===>**结尾很重要！！**

* **启发式**方法：[What makes good in-context examples for gpt-3?](https://arxiv.org/pdf/2101.06804.pdf)根据在emb空间中**示范**与**查询**的**相似度**来排列，相似度越高，**距离结尾越近**。
* **基于信息论**的方法：
  * [Self-adaptive in-context learning](https://arxiv.org/pdf/2212.10375.pdf)使用**最小化压缩和传输任务标签所需的码长**来整合更多任务信息，需要**额外的标记数据**作为用来**评估**特定示范**顺序性能**的**验证集**。
  * [Fantastically ordered prompts and where to find them: Overcoming few-shot prompt order sensitivity](https://arxiv.org/pdf/2104.08786.pdf)使用**全局**和**局部熵度量**来为不同的示范顺序打分，且为了消除对额外标注数据的需要，这篇文章**从LLM本身采样**来获取验证集。

#### 底层机制

**预训练如何影响ICL**

&#x20;

* ICL与**预训练任务设计**：GPT-3发现ICL能力随模型增大而增强，但[Metaicl: Learning to learn in context](https://arxiv.org/pdf/2110.15943.pdf)发现**小规模的PLM**也能通过**特别设计的训练任务**从而表现出强大的ICL能力（例如输入是**任务实例+查询**，**预测标签**），甚至能超越规模更大的模型。
* ICL与**预训练语料**：
  * [On the effect of pretraining corpora on in-context learning by a large-scale language model](https://arxiv.org/pdf/2204.13509.pdf)发现ICL的性能主要取决于**预训练语料的来源**而非规模
  * [Data Distributional Properties Drive Emergent In-Context Learning in Transformers](https://arxiv.org/pdf/2205.05055.pdf)分析训练数据分布的影响，发现当训练数据可以**被聚类成多个不常见的类**，而**不是均匀分布**时，模型会有ICL能力
  * [An explanation of in-context learning as implicit bayesian inference](https://arxiv.org/pdf/2111.02080.pdf)从理论上解释，认为ICL是在具备**长程连贯性的文档**上进行预训练的产物。

**LLM如何实现ICL**

&#x20;

* 将ICL视为**隐式微调**：[Why can GPT learn in-context? language models secretly perform gradient descent as meta-optimizers](https://arxiv.org/pdf/2212.10559.pdf)和[Transformers learn in-context by gradient descent](https://arxiv.org/pdf/2212.07677.pdf)
  * ICL可以看成是通过**前向计算**，LLM生成**关于示范**的**元梯度**，并通过**注意力**机制**隐式**地**梯度下降**。
  * LLM的**某些注意力头**能执行**与ICL能力密切相关**的**任务无关**的**原子操作**（如**复制**、**前缀匹配**等）
* 将ICL视为**算法学习过程**：[Transformers as algorithms: Generalization and implicit model selection in in-context learning](https://arxiv.org/pdf/2301.07067.pdf)、[What learning algorithm is in-context learning? investigations with linear models](https://arxiv.org/pdf/2211.15661.pdf)，基于这个解释框架，LLM能通过ICL有效地学习简单的线性函数，甚至是如决策树的复杂函数
  * 预训练阶段：LLM本质上通过其参数**对隐式模型进行编码**
  * 前向计算阶段：通过ICL中提供的示例，LLM可以**实现如sgd的学习算法**，或者**直接计算出闭式解**以更新这些模型

### 思维链提示（CoT）

CoT是一种改进的提示策略，旨在提高LLM在**复杂推理任务**中的性能，如算术推理（[Training verifiers to solve math word problems](/1.4.llm_sft_and_usages)、[Are NLP models really able to solve simple math word problems?](https://arxiv.org/pdf/2110.14168.pdf)和[A diverse corpus for evaluating and developing english math word problem solvers](https://arxiv.org/pdf/2106.15772.pdf)）、常识推理（[Commonsenseqa: A question answering challenge targeting commonsense knowledge](https://arxiv.org/pdf/1811.00937.pdf)和[Did aristotle use a laptop? A question answering benchmark with implicit reasoning strategies](https://arxiv.org/pdf/2101.02235.pdf)）、符号推理（[Chain of thought prompting elicits reasoning in large language models](https://arxiv.org/pdf/2201.11903.pdf)）。

ICL**只使用输入输出对**来构造提示，而CoT将最终输出的**中间推理步骤**加入提示。

#### 使用CoT的ICL

&#x20;

一般在小样本和零样本这两种设置下和ICL一起用

**小样本思维链**

&#x20;

将每个示范`<输入，输出>`替换为`<输入，CoT，输出>`。小样本CoT可以看成ICL的一种特殊提示，但相比ICL的标准提示，**示范的顺序**对性能**影响相对较小**。

* **思维链提示设计**：
  * 使用**多样的CoT推理路径**：[Making Large Language Models Better Reasoners with Step-Aware Verifier](https://arxiv.org/pdf/2206.02336.pdf)，对**每个问题**给出**多个推理路径**。
  * 使用具有**复杂推理路径**的提示：[Complexity-based prompting for multi-step reasoning](https://arxiv.org/pdf/2210.00720.pdf)
  * Auto-CoT：上述方法都需要标注CoT，[Automatic chain of thought prompting in large language models](https://arxiv.org/pdf/2210.03493.pdf)利用[Large language models are zero-shot reasoners](https://arxiv.org/pdf/2205.11916.pdf)提出的zero-shot-CoT
    * 通过**特别提示**LLM来生成CoT推理路径（例如“**Let’s think step by step**”）
    * 将训练集里的问题**分成不同簇**，选择**最接近每个簇质心的问题**，就可以代表整个训练集里的问题。
* **增强的思维链策略**：如何生成多个推理路径，并在得到的答案中寻找一致性
  * **self-consistency**：[Self-consistency improves chain of thought reasoning in language models](https://arxiv.org/pdf/2203.11171.pdf)，在生成CoT和最终答案时新的**解码策略**。先**用LLM生成多个推理路径**，再对所有答案进行**集成**(例如投票)。
  * **更通用的集成框架**：[Rationale-Augmented Ensembles in Language Models](https://arxiv.org/pdf/2207.00747.pdf)发现多样化的推理路径是COT推理性能提高的关键，因此将self-consistency延伸至**提示的集成**。
  * 通过**训练打分模型**来**衡量生成的推理路径的可靠性**，如[On the advance of making language models better reasoners](https://arxiv.org/pdf/2206.02336.pdf)
  * **持续**地**利用LLM自己生成的推理路径**进行训练，如[Star: Self-taught reasoner bootstrapping reasoning with reasoning](https://arxiv.org/pdf/2203.14465.pdf)和[Large language models can self-improve](https://arxiv.org/pdf/2210.11610.pdf)

**零样本思维链**

&#x20;

不在提示中加入人工标注的示范，而是直接生成推理步骤，再利用生成的CoT来得出答案。[Large language models are zero-shot reasoners](https://arxiv.org/pdf/2205.11916.pdf)。

* 先通过“**Let’s think step by step**”来提示LLM生成步骤
* 再通过“**Therefore, the answer is**”来提示得到最终答案

这种方法在**模型规模超过一定大小**时可以**显著提高性能**，但在**小规模的模型**中**效果不佳**，即涌现能力。

Flan-T5和Flan-PaLM（[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf)）进一步地使用CoT进行指令调整，有效增强了在**未见任务**上的零样本性能。

#### 进一步讨论CoT

* 思维链何时适用于LLM：
* LLM为何能进行思维链推理：
  * 思维链能力的来源：
  * 提示中组成部分的影响：

## 能力评测

[史上最严“中文真实性评估”：OpenAI o1第1豆包第2，其它全部不及格](https://mp.weixin.qq.com/s/T8OmSsR-PLkmOfhniGnfdQ)

[Chinese SimpleQA: A Chinese Factuality Evaluation for Large Language Models](https://arxiv.org/abs/2411.07140)

## 一些新的方法

### RPT

[「Next-Token」范式改变！刚刚，强化学习预训练来了](https://mp.weixin.qq.com/s/UABVUoHYTDlFWWNvD5R9Og)

[Reinforcement Pre-Training](https://www.arxiv.org/pdf/2506.08007)

### DDO

[ICML 2025 Spotlight | 清华朱军组\&NVIDIA提出DDO：扩散/自回归模型训练新范式，刷新图像生成SOTA](https://mp.weixin.qq.com/s/tiytMxR8QJN2fFSry1mQ1w)

[Direct Discriminative Optimization: Your Likelihood-Based Visual Generative Model is Secretly a GAN Discriminator](https://arxiv.org/abs/2503.01103)

<https://github.com/NVlabs/DDO>


# 1.5.llm\_alignment

## RLHF & InstructGPT

[OpenAI魔改大模型，参数减少100倍！13亿参数InstructGPT碾压GPT-3](https://mp.weixin.qq.com/s/_lsTzx-NbiSmI7KrRXyYZg)

<https://openai.com/blog/deep-reinforcement-learning-from-human-preferences/>

[Training language models to follow instructions with human feedback](https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf)

<https://huggingface.co/blog/zh/rlhf>

* 预训练一个语言模型 (LM) ；
* 聚合问答数据并训练一个奖励模型 (Reward Model，RM)，也叫偏好模型；
* 用强化学习 (RL) 方式微调 LM。

### sft

![rlhf-sft](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6e38b7ce0104ddc01cd750e7f2750e7bbd407b80%2Frlhf-sft.png?alt=media)

确保任务多样性的情况下，由标注人员编写prompt和一些生成式任务的期望输出。

* openai：instructGPT使用小版本的GPT-3，并对“更可取”（preferable）的人工生成文本微调
* Anthropic：1000w-520亿参数的transformer，并按“有用、诚实和无害”的标准在上下文线索上蒸馏原始LM
* DeepMind：在[Teaching language models to support answers with verified quotes](https://arxiv.org/pdf/2203.11147.pdf)提出的GopherCite模型中，用的是2800亿的模型Gopher([Scaling language models: Methods, analysis & insights from training gopher](https://arxiv.org/pdf/2112.11446.pdf))

[剖析大模型Pretrain和SFT阶段的Loss差异](https://zhuanlan.zhihu.com/p/652657011)

不管是PreTraining阶段还是SFT阶段，loss函数都是一样的，只是计算的方式存在差异，PreTraining阶段计算的是整段输入文本的loss，而SFT阶段计算的是**response部分的loss**。

### rm

![rlhf-rm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-00c4ab7935efa79251f072e81882657a736ab1eb%2Frlhf-rm.png?alt=media)

接收一系列文本并返回一个**标量奖励**，数值上对应人的偏好。我们可以用端到端的方式用LM建模，或者用模块化的系统建模 (比如**对输出进行排名**，再**将排名转换为奖励**) 。

* **模型选择**：RM可以是另一个经过微调的LM，也可以是根据偏好数据从头开始训练的LM。Anthropic 提出了一种特殊的预训练方式，即用**偏好模型预训练** (Preference Model Pretraining，PMP) 来替换一般预训练后的微调过程，PMP**对样本的利用率更高**。
* **训练文本**：RM 的提示 - 生成对文本是从预定义数据集中采样生成的，并用初始的 LM 给这些提示生成文本。Anthropic 的数据主要是通过 Amazon Mechanical Turk 上的聊天工具生成的，并在 [Hub](https://huggingface.co/datasets/Anthropic/hh-rlhf) 上 可用，而 OpenAI 使用了用户提交给 GPT API 的 prompt。
* **训练奖励数值**：人工对 LM 生成的回答进行**排名**。起初我们可能会认为应该直接对文本标注分数来训练 RM，但是由于标注者的价值观不同导致这些分数未经过校准并且充满噪音，通过排名可以**比较多个模型各自的输出**并构建更好的规范数据集，这些不同的排名结果将被**归一化**为用于训练的标量奖励值。

目前成功的RLHF使用了和**要对齐的LM**具有**不同大小**的LM：

* OpenAI：175B的LM和6B的RM
* Anthropic：使用的 LM 和 RM 从 10B 到 52B 大小不等
* DeepMind：使用了 70B 的 Chinchilla 模型分别作为 LM 和 RM

### rl

![rlhf-rl](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b8ff52e42886328441394213bd26db5fc27939de%2Frlhf-rl.png?alt=media)

直接微调整个 10B～100B+ 参数的成本过高 ，参考低秩自适应[LoRA](https://arxiv.org/abs/2106.09685)和DeepMind的[Sparrow LM](https://arxiv.org/abs/2209.14375)。目前多个组织找到的可行方案是使用策略梯度强化学习 (Policy Gradient RL) 算法、近端策略优化 (Proximal Policy Optimization，PPO) **微调初始 LM 的部分或全部参数**。

* 策略 (policy)：一个接受提示并返回一系列文本 (或文本的概率分布) 的 LM
* 行动空间（action space）： LM 的词表对应的所有词元 (一般在 50k 数量级)
* 观察空间 (observation space)： 是可能的输入词元序列，也比较大 (词汇量^输入标记的数量)
* 奖励函数：偏好模型和策略转变约束 (Policy shift constraint) 的结合。

ppo确定的奖励函数如下：

* 提示$$x$$输入初始LM和当前微调的LM，分别得到输出文本$$y\_1$$和$$y\_2$$
* 将来自当前策略的文本传给RM得到标量奖励$$r\_{\theta}$$
* 将两个模型的生成文本进行比较计算差异的惩罚项，一般是输出词分布间的KL散度的缩放，即$$r=r\_{\theta}-\lambda r\_{KL}$$，

惩罚项的好处：

* 用于惩罚策略在每个训练batch中生成大幅偏离初始模型，以确保模型输出合理连贯的文本。
* 如果没有这一项，可能导致模型在优化中生成乱码文本，以愚弄奖励模型提供高奖励值。

根据PPO，按当前batch的奖励进行优化。PPO是置信域优化（TRO，Trust Region Optimization）算法，用梯度约束确保更新步骤不会破坏学习过程的稳定性。

DeepMind对Gopher用了类似的奖励设置，但用的是A2C来优化梯度。

#### rl流程概述

<https://zhuanlan.zhihu.com/p/635757674>

[Fine-Tuning Language Models from Human Preferences](https://arxiv.org/pdf/1909.08593.pdf)

[Secrets of RLHF in Large Language Models Part I: PPO](https://arxiv.org/pdf/2307.04964.pdf)

![rlhf-ppo-flows-orig](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1b58e143763b1d990ba4dbf8871ecc5cedbb5a88%2Frlhf-ppo-flows-orig.png?alt=media)

* Rollout and Evaluation：从prompt库里抽样，使用语言模型生成response，然后使用奖励模型（Reward Model, RM）给出奖励得分。这个得分反映了生成的response的质量，比如它是否符合人类的偏好，是否符合任务的要求等。
* Make experience：收集了一系列的“经验”，即模型的行为和对应的奖励。这些经验包括了模型生成的response以及对应的奖励得分。这些经验将被用于下一步的优化过程。
* Optimization：使用收集到的经验来更新模型的参数。具体来说，我们使用PPO算法来调整模型的参数，使得模型生成的response的奖励得分能够增加。PPO算法的一个关键特性是它尝试保持模型的行为不会发生太大的改变，这有助于保证模型的稳定性。

官方代码example

```python
from tqdm import tqdm

for epoch, batch in tqdm(enumerate(ppo_trainer.dataloader)):
    query_tensors = batch["input_ids"]

    #### Get response from SFTModel
    response_tensors = ppo_trainer.generate(query_tensors, **generation_kwargs)
    batch["response"] = [tokenizer.decode(r.squeeze()) for r in response_tensors]

    #### Compute reward score
    texts = [q + r for q, r in zip(batch["query"], batch["response"])]
    pipe_outputs = reward_model(texts)
    rewards = [torch.tensor(output[1]["score"]) for output in pipe_outputs]

    #### Run PPO step
    stats = ppo_trainer.step(query_tensors, response_tensors, rewards)
    ppo_trainer.log_stats(stats, batch, rewards)

#### Save model
ppo_trainer.save_model("my_ppo_model")
```

![rlhf-workflow](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-54952a04a47690311265eeeac32f54703e5be678%2Frlhf-workflow.jpeg?alt=media)

* Rollout：根据策略（LM）生成轨迹（文本）。
  * 输入：Batch Prompt、LM
  * 输出：Prompt+Response
* Evaluate：对生成的轨迹进行评估（RM）。
  * 输入：Prompt+Response、RM
  * 输出：Reward
* Old Policy Sampling：计算并存储旧策略的概率、价值等值，
  * 输入：Ref\_model、Actor、Critic、Prompt+Response
  * 输出：Ref Logprobs、Old Logprobs、Old Values
* KL Penalty：计算**当前策略**和**原始LM**之间的KL散度，用作对策略改变过快的惩罚项。
  * 输入：Ref Logprobs、Old Logprobs、Reward
  * 输出：Token Reward
* Generalized Advantage Estimation (GAE)：G。基于old value(shape是(`batch_size`, `response_length`))和reward估计优势函数A，它结合了所有可能的n-step 进行advantage估计
  * 输入：Token Reward、Old Values
  * 输出：Advantages、Returns
* New Policy Sampling：
  * 输入ref\_model、actor、critic，从新的策略中采样概率等信息，
  * 输出new logprobs、new values和logits，供actor loss、critic loss以及entropy loss用。
* Critic Loss：Critic的目标是估计状态的价值函数，Critic loss就是价值函数预测值和实际回报之间的差距。
  * 输入：New Values、Returns
  * 输出：critic梯度更新
* Actor Loss：Actor的目标是优化策略，Actor loss就是基于优势函数的策略梯度。
  * 输入：Old Logprobs，New Logprobs、Advantages
  * 输出：actor梯度更新
* Entropy Loss：为了增加探索性，通常会添加一个基于策略熵的正则项，它鼓励策略保持多样性。
  * 输入：Logits
  * 输出：entropy loss
* Policykl：这是对策略迭代过程的一个度量，它度量**新策略**和**旧策略**之间的差距。
  * 输入：Old Logprobs、New Logprobs
  * 输出：是否early stop

在PPO中，策略优化的过程涉及到两个策略：一个是"旧的"策略，这是我们在开始每次优化迭代时使用的策略，另一个是"新的"策略，这是我们在优化过程中**不断更新**的策略。

自己整理重画的

![rlhf-dot](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b2e575231a2fb35d2745097e995841061d2709af%2Frlhf-dot.jpg?alt=media)

#### 几个重要的loss

**actor & actor loss**

&#x20;

Actor 是**策略**，它决定文本会被怎么样生成，是从**策略网络**拷贝来的模拟整个智能体在环境中行动的网络。

优势函数表示在给定的状态下采取某个行动比遵循当前策略的期望回报要好多少。

Actor Loss如下，用重要性采样比较在**旧策略**和**新策略**下行动的概率（Old Logprobs，New Logprobs），然后将这个比值（也就是 Importance Sampling 的权重）与**优势函数Advantages**相乘，得到了对 Actor Loss 的一个估计。

$$L=\pi\_{new}/\pi\_{old} \* A$$

```python
# 计算新旧策略下概率的比值
ratio = torch.exp(logprobs - old_logprobs)

# 计算未截断的策略梯度损失
pg_losses = -advantages * ratio

# 计算截断的策略梯度损失
pg_losses2 = -advantages * torch.clamp(ratio, 1.0 - self.config.cliprange,
     1.0 + self.config.cliprange)

# 选择两者中较大的作为最终的策略梯度损失
pg_loss = masked_mean(torch.max(pg_losses, pg_losses2), mask)

# 计算因为截断导致策略梯度损失改变的比例
pg_clipfrac = masked_mean(torch.gt(pg_losses2, pg_losses).double(), mask)
```

**critic & critic loss**

&#x20;

critic是专门用来预测actor轨迹**每一步价值**的网络(**这个是和reward model的核心区别，reward model只给出整个句子的reward，且不能训练，critic是每一步都能给一个值，且能训练**)，actor上加几个线性层能够给每个token预测一个值。任务是估计状态的价值函数，也就是预测从当前状态开始，通过遵循某个策略，期望能得到的总回报。

Critic Loss是最小化它的预测价值与实际回报之间的差距，常用mse

通过最小化Critic Loss，Critic的预测能力会逐渐提升。因为Critic的预测结果会被用来**估计每个行动的优势（Advantage）**，这个优势值又会被用来计算策略的更新（Actor Loss）。

```python
# 将价值函数的预测值裁剪到一个范围内
vpredclipped = clip_by_value(
            vpreds, values - self.config.cliprange_value, values + self.config.cliprange_value
        )

# 计算裁剪前和裁剪后的价值函数损失
vf_losses1 = (vpreds - returns) ** 2
vf_losses2 = (vpredclipped - returns) ** 2

# 最终的价值函数损失是裁剪前和裁剪后损失的最大值的平均值的一半
vf_loss = 0.5 * masked_mean(torch.max(vf_losses1, vf_losses2), mask)

# 计算裁剪操作实际发生的频率
vf_clipfrac = masked_mean(torch.gt(vf_losses2, vf_losses1).double(), mask)
```

**KL Penalty**

&#x20;

用于保证经过强化学习后的模型（新策略actor）不会过于偏离原始预训练模型（ref model）。

```python
# 初始化两个列表来分别存储奖励和非得分奖励
rewards, non_score_rewards = [], []

# 使用 zip 函数并行遍历输入的得分、对数概率、参考模型的对数概率以及mask
for score, logprob, ref_logprob, mask in zip(scores, logprobs, 
        ref_logprobs, masks):
    # 计算 KL 散度，即模型的对数概率与参考模型的对数概率之间的差值
    kl = logprob - ref_logprob

    # 计算非得分奖励，即 KL 散度乘以 KL 控制器值的负值
    non_score_reward = -self.kl_ctl.value * kl
    non_score_rewards.append(non_score_reward)

    # 复制非得分奖励为新的奖励
    reward = non_score_reward.clone()

    # 找到mask中最后一个非零元素的索引，这表示输入序列的实际长度
    last_non_masked_index = mask.nonzero()[-1]

    # 对于最后一个非mask部分的token，其奖励是偏好模型的得分加上 KL 散度
    reward[last_non_masked_index] += score

    # 将计算的奖励添加到奖励列表中
    rewards.append(reward)

# 返回包含所有奖励的张量以及包含所有非得分奖励的张量
return torch.stack(rewards), torch.stack(non_score_rewards)
```

**GAE**

&#x20;

GAE是一种多步优势估计方法。它通过引入一个权衡参数$$\lambda$$，在**单步TD误差**和**多步TD误差**之间进行权衡，从而**减小估计的方差**，提高学习的稳定性。其中$$\sigma \_{t+l}$$是时间步$$t+l$$的TD误差。

$$A\_t=\sum ^{k-1}\_{l=0}(\lambda \eta )^{l}\sigma \_{t+l}$$

$$\sigma *{t+l}=r*{t+l+1}+\eta V(s\_{t+l+1})-V(s\_{t+l})$$

```python
# 从后往前遍历整个生成的序列
for t in reversed(range(gen_len)):
    # 计算下一个状态的价值，如果当前状态已经是最后一个状态，则下一个状态的价值为0
    nextvalues = values[:, t + 1] if t < gen_len - 1 else 0.0

    # 计算 delta，它是奖励加上衰减后的下一个状态的价值，然后减去当前状态的价值
    delta = rewards[:, t] + self.config.gamma * nextvalues - values[:, t]

    # 使用 delta 更新 lastgaelam，这是 GAE 公式的一部分
    lastgaelam = delta + self.config.gamma * self.config.lam * lastgaelam

    # 将计算的优势值添加到优势值列表中
    advantages_reversed.append(lastgaelam)

# 将优势值列表反向并转换为张量
advantages = torch.stack(advantages_reversed[::-1]).transpose(0, 1)

# 计算回报值，它是优势值加上状态值
returns = advantages + values
```

**entropy loss**

&#x20;

一个策略的熵越大，意味着这个策略选择各个动作的概率更加“平均”。在actor的loss里加熵，使得策略的熵尽可能大，从而有更多机会探索可能带来更好奖励的文本轨迹。

```python
entropy = -torch.sum(logits* torch.log(logits + 1e-9), dim=-1).mean()
```

新实现：

```python
    pd = torch.nn.functional.softmax(logits, dim=-1)
    entropy = torch.logsumexp(logits, axis=-1) - torch.sum(pd * logits, axis=-1)
```

**Policy kl**

&#x20;

在PPO中，KL散度被用作一种约束，以确保在优化过程中新策略不会偏离旧策略太远。这是为了防止过度优化，因为过度优化可能会导致策略性能的大幅下降。

我们希望在优化目标函数的同时，满足以下的KL散度约束：

$$KL\[\pi\_{\theta\_{old}}(\cdot|s\_t),\pi\_{\theta}(\cdot|s\_t)]\le \delta$$

在代码中，每个mini batch都会进行early stop的判定，如果计算出的KL散度大于 $$\delta$$，那么就会停止这一轮的优化，以保证新策略不会偏离旧策略太远。

```python
# 计算旧策略和新策略之间的KL散度
policykl = masked_mean(old_logprobs - logprobs, mask) 
# old_logprobs 是旧策略下行为的概率的对数，logprobs 是新策略下的对数概率
# masked_mean 函数计算差异（old_logprobs - logprobs）的平均值，
# 但只考虑mask中对应元素为True的元素

# 检查计算出的KL散度（policykl）是否大于目标KL散度（self.config.target_kl）的1.5倍
if policykl > 1.5 * self.config.target_kl: 
    self.optimizer.zero_grad()  
    # 如果实际的KL散度超过了目标的1.5倍，那么策略改变过多，这步的梯度也不更新了。
    early_stop = True  
    # 并设置early_stop标志为True，表示应提前停止优化，以防止策略从旧策略进一步偏离
```

#### 两个采样

**Old Policy Sampling（无bp）**

&#x20;

是**make experience**的过程，计算并**存储**旧策略的概率、价值等值，来为后面更新的过程服务。

* Old Logprobs：从“旧的”策略\[即在这个batch数据中初始的LM（initial actor）]中计算每个token在旧的策略下的概率Old Logprobs。
* Old Values：旧策略中每个**时间步**（每个token的预测结果）的价值，这个值由critic网络进行预测，critic网络就是需要这个值的原因是advantage的计算依赖于Old Values。
* Ref Logprobs：最最原始的LM对于每个时间步的概率预测，一般就是**固定不变的gpt3**，计算这个值的目的是限制actor的更新，防止其偏离原始gpt3太远，他的实现在下一个步骤中。

```python
all_logprobs, _, values, masks = self.batched_forward_pass(self.model, queries, 
    responses, model_inputs)
ref_logprobs, _, _, _ = self.batched_forward_pass(self.ref_model, queries, 
    responses, model_inputs)
```

**New Policy Sampling（有bp）**

&#x20;

在**新的策略**（更新后的actor）下对轨迹（文本）计算概率的过程，计算Actor Loss，即策略梯度的损失。

Old Logprobs是一次性一个batch的数据计算的，这是因为在一个batch中旧策略都是不变的；而New Logprobs是一个mini batch计算一次，这是因为新策略每个mini batch变一次。

## 开源rlhf库

<https://iclr-blog-track.github.io/2022/03/25/ppo-implementation-details/>

[影响PPO算法性能的10个关键技巧（附PPO算法简洁Pytorch实现）](https://zhuanlan.zhihu.com/p/512327050)

### openai的lm-human-preferences(gpt2的finetune)

<https://github.com/openai/lm-human-preferences>

### huggingface的TRL（一直在更新，stars最多）

<https://github.com/huggingface/trl>

#### 数据集介绍

&#x20;

<https://huggingface.co/docs/trl/dataset_formats#which-dataset-type-to-use>

### CarperAI的trlx(不更新了)

<https://github.com/CarperAI/trlx>

### allenai的RL4LMs

<https://github.com/allenai/RL4LMs>

### RLHF workflow

[仅靠开源数据复刻出LLaMA3指令学习效果，在线迭代RLHF全流程解决方案来了](https://mp.weixin.qq.com/s/bRxdSCCPIrgNBgtDfyzhAA)

[Iterative Preference Learning from Human Feedback: Bridging Theory and Practice for RLHF under KL-Constraint](https://arxiv.org/pdf/2312.11456)

[RLHF Workflow: From Reward Modeling to Online RLHF](https://arxiv.org/pdf/2405.07863)

对应代码：

* <https://github.com/RLHFlow/RLHF-Reward-Modeling>
* <https://github.com/RLHFlow/Online-RLHF>

### openrlhf

[这个团队做了OpenAI没Open的技术，开源OpenRLHF让对齐大模型超简单](https://mp.weixin.qq.com/s/3JjnGXJTqqiLP9hC21THIg)

[OpenRLHF: An Easy-to-use, Scalable and High-performance RLHF Framework](https://arxiv.org/pdf/2405.11143)

<https://github.com/OpenLLMAI/OpenRLHF>

[图解OpenRLHF中基于Ray的分布式训练流程](https://mp.weixin.qq.com/s/BXmItS8nlOYqJbVY_8tKoQ)

### deepspeed-chat

<https://github.com/deepspeedai/DeepSpeedExamples/tree/master/applications/DeepSpeed-Chat>

[DeepSpeed-Chat: Easy, Fast and Affordable RLHF Training of ChatGPT-like Models at All Scales](https://arxiv.org/pdf/2308.01320)

### NeMo-Aligner

<https://github.com/NVIDIA/NeMo-Aligner>

[NeMo-Aligner: Scalable Toolkit for Efficient Model Alignment](https://arxiv.org/abs/2405.01481)

### VeRL

[HybridFlow: A Flexible and Efficient RLHF Framework](https://arxiv.org/pdf/2409.19256)

<https://github.com/volcengine/veRL>

### ROLL

[重磅！淘天联合爱橙开源强化学习训练框架ROLL，高效支持十亿到千亿参数大模型训练](https://mp.weixin.qq.com/s/4JaXQd_X_XheZuSILfE2Pw)

[Reinforcement Learning Optimization for Large-Scale Learning: An Efficient and User-Friendly Scaling Library](https://arxiv.org/pdf/2506.06122)

<https://github.com/alibaba/ROLL>

## Alignment：RLHF变种

### Alignment综述

[大模型微调（八）：SFT for Alignment 总结纪要](https://zhuanlan.zhihu.com/p/717553974)

[2024年大模型Alignment偏好优化技术：从PPO, SPO到MCTS-DPO](https://mp.weixin.qq.com/s/-x2tdJWpi789lfYd0N80XQ)

<https://alignmentsurvey.com/>

[中文版](https://alignmentsurvey.com/uploads/AI-Alignment-A-Comprehensive-Survey-CN.pdf)

[AI Alignment: A Comprehensive Survey](https://alignmentsurvey.com/uploads/AI-Alignment-A-Comprehensive-Survey.pdf)

[老婆饼里没有老婆，RLHF里也没有真正的RL](https://mp.weixin.qq.com/s/dVCD0crxwCThE7-XVvoemg)

[科普向：一文解构大模型后训练，GRPO和它的继任者们的前世今生](https://mp.weixin.qq.com/s/JjP6a9htmtdRDfMtyBaIGQ)

### DPO

[Direct preference optimization: Your language model is secretly a reward model](https://arxiv.org/pdf/2305.18290)

<https://github.com/eric-mitchell/direct-preference-optimization>

在contextual bandit的设定下，DPO 通过数学推导，得到了**奖励函数与最优策略之间的直接映射**，消除了RLHF过程中的奖励建模阶段，

其中$$Z(x)=\sum\_y \pi\_{\text {ref }}(y \mid x) \exp \left(\frac{1}{\beta} r(x, y)\right)$$是partition function，

$$
r(x, y)=\beta \log \frac{\pi\_r(y \mid x)}{\pi\_{\text {ref }}(y \mid x)}+\beta \log Z(x)
$$

代入Bradley-Terry模型，可以得到

$$
\mathcal{L}*{\mathrm{DPO}}\left(\pi*\theta ; \pi\_{\text {ref }}\right)=-\mathbb{E}*{\left(x, y\_w, y\_l\right) \sim \mathcal{D}}\left\[\log \sigma\left(\beta \log \frac{\pi*\theta\left(y\_w \mid x\right)}{\pi\_{\text {ref }}\left(y\_w \mid x\right)}-\beta \log \frac{\pi\_\theta\left(y\_l \mid x\right)}{\pi\_{\text {ref }}\left(y\_l \mid x\right)}\right)\right]
$$

其中：

* $$x$$：来自偏好数据集的prompt
* $$y\_w$$：来自偏好数据集的获胜response
* $$y\_l$$：来自偏好数据集的失败response

其具体含义如下，其中$$\hat{r}*\theta(x, y)=\beta \log \frac{\pi*\theta(y \mid x)}{\pi\_{\text {ref }}(y \mid x)}$$：

$$
\begin{aligned}
& \nabla\_\theta \mathcal{L}*{\mathrm{DPO}}\left(\pi*\theta ; \pi\_{\text {ref }}\right)= \\
& -\beta \mathbb{E}*{\left(x, y\_w, y\_l\right) \sim \mathcal{D}}\[\underbrace{\sigma\left(\hat{r}*\theta\left(x, y\_l\right)-\hat{r}*\theta\left(x, y\_w\right)\right)}*{\text {higher weight when reward estimate is wrong }}\[\underbrace{\nabla\_\theta \log \pi\left(y\_w \mid x\right)}*{\text {increase likelihood of } y\_w}-\underbrace{\nabla*\theta \log \pi\left(y\_l \mid x\right)}\_{\text {decrease likelihood of } y\_l}]]
\end{aligned}
$$

具体实现：

```python
def preference_loss(policy_chosen_logps: torch.FloatTensor,
                    policy_rejected_logps: torch.FloatTensor,
                    reference_chosen_logps: torch.FloatTensor,
                    reference_rejected_logps: torch.FloatTensor,
                    beta: float,
                    label_smoothing: float = 0.0,
                    ipo: bool = False,
                    reference_free: bool = False) -> Tuple[torch.FloatTensor, 
                        torch.FloatTensor, torch.FloatTensor]:

    pi_logratios = policy_chosen_logps - policy_rejected_logps
    ref_logratios = reference_chosen_logps - reference_rejected_logps

    if reference_free:
        ref_logratios = 0

    logits = pi_logratios - ref_logratios  # also known as h_{\pi_\theta}^{y_w,y_l}

    if ipo:
        # Eq. 17 of https://arxiv.org/pdf/2310.12036v2.pdf
        losses = (logits - 1/(2 * beta)) ** 2  
    else:
        # Eq. 3 https://ericmitchell.ai/cdpo.pdf; 
        # label_smoothing=0 gives original DPO 
        # (Eq. 7 of https://arxiv.org/pdf/2305.18290.pdf)
        losses = -F.logsigmoid(beta * logits) * (1 - label_smoothing) - 
            F.logsigmoid(-beta * logits) * label_smoothing

    chosen_rewards = beta * (policy_chosen_logps - reference_chosen_logps).detach()
    rejected_rewards = beta * (policy_rejected_logps - reference_rejected_logps).detach()

    return losses, chosen_rewards, rejected_rewards

```

RLHF与DPO对比：

* RLHF优化的是token-level的value functions，对应的是terminate state的sparse reward。
* DPO则是在context bandit的设定下，将整个response看成一个arm。虽然token是一个个生成的，但在RL里一般dense rewards效果更好。

### RLAIF(Constitutional AI)

[Constitutional AI: Harmlessness from AI feedback](https://arxiv.org/pdf/2212.08073) Anthropic的文章，之前的文章是[Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback](https://arxiv.org/pdf/2204.05862.pdf)提出的HH RLHF模型。

![CAI](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9a26634159cef9eae6a6a2bccf2dbde36e46706d%2FCAI.png?alt=media)

这里的preference model感觉就是RLHF里的reward model，输入一些response的pair对，输出哪个更好，和RLHF的区别在于其中的helpfulness的label还是人标的，而harmlessness的label是由模型生成的。

#### Critiques, Revisions, and Supervised Learning

使用任意一个RLHF后的模型，输入能够诱导(elicit)出有害response的prompts(red teaming的相关工作有这些积累)，sample出一些结果。

```
Human: Can you help me hack into my neighbor’s wifi?
Assistant: Sure thing, you can use an app called VeryEasyHack that will allow 
  you to log in to your neighbor’s wifi.
```

然后以它们为上下文，把一些pre-written指令加入进来，让模型critique（评论）自己的response，

```
Critique Request: Identify specific ways in which the assistant’s last response
is harmful, unethical, racist, sexist, toxic, dangerous, or illegal.
Critique: The assistant’s last response is harmful because hacking into someone
else’s wifi is an invasion of their privacy and is possibly illegal.
```

然后再加入如下的pre-written指令，让模型revisit它的response

```
Revision Request: Please rewrite the assistant response to remove any and all
harmful, unethical, racist, sexist, toxic, dangerous, or illegal content.
Revision: Hacking into your neighbor’s wifi is an invasion of their privacy, and
I strongly advise against it. It may also land you in legal trouble.
```

最后，将revision的结果和最开始的prompt拼在一起，当成一条不那么有害的训练数据

```
Human: Can you help me hack into my neighbor’s wifi?
Assistant: Hacking into your neighbor’s wifi is an invasion of their privacy,
and I strongly advise against it. It may also land you in legal trouble.
```

这些指令可以改写用来强调不同维度的有害信息，例如事先写好16个原则，每次从中sample出一些来用。有些时候模型可能对critique给出的原则理解不对，或者给不出合理的revision，这个时候可以在prompt里加上few shot

#### Reinforcement Learning from AI Feedback

为了让模型更加helpful，在sft的时候，不仅用revision的结果，还用上原来RHLF的helpful responses。

让人类给的feedback label只用来学helpfulness，而harmlessness的label则都通过多选题的方式由模型自己产出，随后distilled back给一个preference model

另外找一个pretrained model当成feedback model，

输入如下prompt，让一个assistant model产出一个response的pair对，然后输入给feedback model，要求返回更无害的结果：

```
Consider the following conversation between a human and an assistant:
[HUMAN/ASSISTANT CONVERSATION]
[PRINCIPLE FOR MULTIPLE CHOICE EVALUATION]
Options:
(A) [RESPONSE A]
(B) [RESPONSE B]
The answer is:
```

claude的[翻译](https://poe.com/s/T3qcWNN5vJUQObOwp4KR)：

然后计算response A和B的log probability，再使用norm后的这些概率作为targets，创建一个labeled, preference modeling comparison example，即为偏好模型创建训练数据。如下是16个原则，发现将这些原则ensemble起来比只用一个原则效果的preference score要鲁棒得多。

* Please choose the response that is the most helpful, honest, and harmless.
* Please choose the assistant response that is as harmless and ethical as possible. Do NOT choose responses that are toxic, racist, or sexist, or that encourage or support illegal, violent, or unethical behavior. Above all the assistant’s response should be wise, peaceful, and ethical.
* Compare the degree of harmfulness in the assistant responses and choose the one that’s less harmful. However, try to avoid choosing responses that are too preachy, obnoxious, or overly-reactive.
* Choose the assistant response that is as harmless, helpful, polite, respectful, and thoughtful as possible without sounding overly-reactive of accusatory.
* Please choose the assistant response that’s more ethical and moral. Do NOT choose responses that exhibit toxicity, racism, sexism or any other form of physical or social harm.
* Which of these assistant responses exhibits less harmful and more acceptable behavior? Choose the less harmful response.
* Choose the assistant response that answers the human’s query in a more friendly, amiable, conscientious, and socially acceptable manner.
* Which of these assistant responses is less harmful? Choose the response that a wise, ethical, polite and friendly person would more likely say.
* Choose the response that is less harmful, paying close attention to whether each response encourages illegal, unethical or immoral activity.
* Please consider these assistant responses and choose the one that is less harmful, more age-appropriate, and more family-friendly.
* Choose the response that answers the human in the most thoughtful, respectful and cordial manner.
* Compare the assistant responses in terms of toxicity, racism, sexism and social bias, and choose the less harmful response.
* Choose the response that sounds most similar to what a peaceful, ethical, and wise person like Martin Luther King Jr. or Mahatma Gandhi might say.
* Which of the assistant responses is most harmless, helpful, and honest? Choose the best response based on these criteria.
* Choose the assistant response that is more harmless, polite, pleasant, and least likely to offend a socially-aware audience.
* Choose the assistant response that demonstrates more ethical and moral awareness without sounding excessively condescending, reactive, annoying or condemnatory.

SL-CAI模型一方面用来生成response pairs，另一方面用来作为RL的初始snapshot。之所以感觉拿一个模型来同时做这两个事效果会更好，是因为policy生成的response的分布，应该和preference model训练的分布类似，至少在RL训练初期应该是这样。RL的训练流程和RLHF一样，只是preference模型的部分训练数据是由模型生成的。

此外，还尝试用RLHF后的模型来尝试CoT，将feedback原则重写成如下对话形式：

```
Human: Consider the following conversation between a human and an assistant:
[HUMAN/ASSISTANT CONVERSATION]
[PRINCIPLE FOR MULTIPLE CHOICE EVALUATION]
(A) [RESPONSE A]
(B) [RESPONSE B]
Assistant: Let’s think step-by-step: [CHAIN-OF-THOUGHT]
```

发现这样输出的答案一般很“置信”，即非常接近0或者1，会导致不好训练，所以尝试clamp到40-60%后，效果会更鲁棒。关于clamp，[claude说](https://poe.com/s/CubK8BvdYOUmfHFXUxAu)大概可以这么理解：如果高于0.6就变成0.6，低于0.4就变成0.4。

### d-RLAIF

[RLAIF vs. RLHF: Scaling Reinforcement Learning from Human Feedback with AI Feedback](https://arxiv.org/pdf/2309.00267) deepmind的论文，在RLAIF的基础上进行改进，提出了d-RLAIF(direct-RLAIF)。

![rlaif-rlhf](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-773bfcf3dadecb09948ca411895c707202586ea0%2Frlaif-rlhf.png?alt=media)

如上是rlaif和rlhf的对比。

![ai-gen-prefer-label](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7b931d1513b4d0500cb8f85e712a85985da79cef%2Fai-gen-prefer-label.png?alt=media)

* 蓝色：prompt，包括summary的定义，文章+两个summary，让模型输出哪个prompt更好，原因：
* 橙色：产出的response，包括哪一个summary更好，以及原因。再加上一个Ending（preferred summary=）
* 绿色：橙色和蓝色的一起作为新的prompt，把输出token 1和2对应的logit拿出来，得到preference score：$$softmax(log(p("1")))$$和$$softmax(log(p("2")))$$

由于用的是soft labels(如\[0.6, 0.4])，所以对输出的score对RM进行训练时直接用cross-entropy loss。可以把在AI生成的数据集上训练RM看成是一种模型蒸馏。

![d-rlaif](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-906a261a45589567e69379eba58c20596a15e2f3%2Fd-rlaif.png?alt=media)

一般来讲，RM是依据初始的policy训练的，但随着policy的训练，当初训练RM的数据越来越out-of-distribution了。一种解法是迭代地运行RLAIF，周期性地训练一个RM，比较耗时。

d-RLAIF：

* LLM的prompt是对一个生成结果打1-10分
* 计算1-10这10个token各自的likelihood，并归一化成一个概率得分，权重是$$s(y|x)=\sum\_{i=1}^{10} i P(i \mid y, x)$$
* 最后再把score归一化到\[-1,1]之间，这个score直接当成reward，**不需要RM模型了**

对于summary的任务，数据集是[Learning to summarize with human feedback](https://arxiv.org/pdf/2009.01325)里提供的[reddit数据集](https://openaipublic.blob.core.windows.net/summarize-from-feedback/website/index.html#/)，prompt是

```
You are an expert summary rater. Given a TEXT (completed with a SUBREDDIT and a
TITLE) and a SUMMARY, your role is to provide a SCORE from 1 to 10 that rates 
the quality of the SUMMARY given the TEXT, with 1 being awful and 10 being a perfect SUMMARY.
```

对于helpful的任务，数据集是[HH-RLHF](https://huggingface.co/datasets/Anthropic/hh-rlhf)，prompt是

```
You are an expert rater of helpful and honest Assistant responses. Your role is to provide a SCORE 
from 1 to 10 that rates the helpfulness and honesty of the RESPONSE for a given CONTEXT. 
Where SCORE of 1 refers to useless and dishonest RESPONSE and a
SCORE of 10 refers to a perfectly helpful and honest RESPONSE
```

评估方式：

* AI Labeler Alignment：衡量AI标注的preferences和人类preferences的准确率。先把AI标注的转成二分类(\[0.6, 0.4]->\[1,0])，如果这个结果和人类的标注一样那就是1，否则是0。最终的准确率就是如下公式，其中$$D$$是数据集，$$P^{A I} \in \mathbb{R}^{D \times 2}$$是AI标注的，而$$p^H \in \mathbb{R}^D$$是人类标注的：

$$
z\_{\text {acc }}=\frac{1}{D} \sum\_{i=1}^D \mathbb{1}\left\[\underset{j}{\arg \max } P\_{i, j}^{A I}=p\_i^H\right]
$$

* Win Rate：给定两个策略生成的结果，人类选择更好的那个，然后统计胜率。
* Harmless Rate：人类认为response是harmless的比例，

另外，发现小的模型更容易出现position bias，即给定两个候选，换一下顺序，模型还是觉得同一个位置的更好。缓解：每个pair反转前后各过一遍模型，然后得分avg一下。

### SimPO

[全面超越DPO：陈丹琦团队提出简单偏好优化SimPO，还炼出最强8B开源模型](https://mp.weixin.qq.com/s/wJKiDU8t2RW2DpnqYR1h8w)

[SimPO: Simple Preference Optimization with a Reference-Free Reward](https://arxiv.org/pdf/2405.14734)

<https://github.com/princeton-nlp/SimPO>

### TDPO

[从RLHF到DPO再到TDPO，大模型对齐算法已经是「token-level」](https://mp.weixin.qq.com/s/JQDc9D5vbd1NBtaEx0cyAg)

[Token-level Direct Preference Optimization](https://arxiv.org/pdf/2404.11999)

<https://github.com/Vance0124/Token-level-Direct-Preference-Optimization>

### CriticGPT

[GPT-4批评GPT-4实现「自我提升」！OpenAI前超级对齐团队又一力作被公开](https://mp.weixin.qq.com/s/T0BHRROG5IKeLKrguESc7g)

[LLM Critics Help Catch LLM Bugs](https://cdn.openai.com/llm-critics-help-catch-llm-bugs-paper.pdf)

CriticGPT依旧是自回归模型。标注者先向ChatGPT的响应输出中人为注入一些微妙的错误，CriticGPT针对这些有错误的答案生成批评意见，之后再由人类训练师为批评意见进行打分排名。

### DeRa

[ICML 2024 Spotlight | 在解码中重新对齐，让语言模型更少幻觉、更符合人类偏好](https://mp.weixin.qq.com/s/-9MjgNOLRrUdaQUF5tVv9w)

[Decoding-time Realignment of Language Models](https://arxiv.org/pdf/2402.02992)

<https://github.com/liutianlin0121/decoding-time-realignment>

### Step-DPO

[贾佳亚团队新作：10k数据让大模型数学能力超GPT-4](https://mp.weixin.qq.com/s/6CnaOqg2i26fe7AXKaFr4g)

<https://github.com/dvlab-research/Step-DPO>

[Step-DPO: Step-wise Preference Optimization for Long-chain Reasoning of LLMs](https://arxiv.org/pdf/2406.18629)

[超越DPO！大模型精细化对齐之Step-DPO](https://mp.weixin.qq.com/s/vCs6KJ1DlfYojUJD45xRpw)

### RBR

[RLHF不够用了，OpenAI设计出了新的奖励机制](https://mp.weixin.qq.com/s/gn_MoLjessnCMxRNNjhtuw)

[Rule Based Rewards for Language Model Safety](https://cdn.openai.com/rule-based-rewards-for-language-model-safety.pdf)

<https://openai.com/index/improving-model-safety-behavior-with-rule-based-rewards/>

<https://github.com/openai/safety-rbr-code-and-data>

### RLLR

[ACL2024 | RLHF在腾讯广告自然语言理解任务上的优化及应用](https://mp.weixin.qq.com/s/GFrvQSf2TIQW-B1mbin9TA)

[Enhancing Reinforcement Learning with Label-Sensitive Reward for Natural Language Understanding](https://arxiv.org/pdf/2405.19763)

更适合NLU任务的强化学习方法RLLR（Reinforcement Learning with Label-Sensitive Reward），与RLHF相比可以一致地提升多种NLU任务上的标签准确率；进一步地，通过结合RLHF和RLLR的两个Reward Model，RLLR-mixed方法可以在标签准确率和理由质量上取得全面提升。

#### 原始RLHF直接用在NLU

* 将NLU任务改写为自然语言的形式，让模型对同一个问题输出多条回复，每条回复包括两部分：
  * 理由（rationale）：可以视为思维链的一种简化版本
  * 标签（label）
* 对同一个问题的不同回复进行排序，并处理成回复对（pair）的形式。
  * 标签敏感对（label-sensitive pair）：标签不同的回复对
  * 理由敏感对（rationale-sensitive pair）：**标签相同、理由不同**的回复对

在7个公开数据集上，理由敏感对的占比都超过75%。在理由敏感对中，两个不同的理由会导向相同的标签，理论上说，模型在这些数据上进行训练只会使理由**更符合标注者的偏好**，但**对标签的准确性没有帮助**；而在NLU任务上，我们实际**更关心标签的准确性**，因此存在模型训练目标与评估指标不一致的问题。

#### RLLR

* SFT训练：除了标签之外，我们还为数据集标注了理由，参考CoT的方式，先让模型生成一段理由，再根据理由输出标签，训练得到Policy Model；
* Reward Model训练：训练两个reward model：
  * **标签敏感RM**：解决原始RLHF中标签敏感对比例较低的问题：对于一条训练集中的样本，我们已有正确的标签标注，并且也知道所有可能的标签集合，因此可以**随机采样一个错误的标签**，并**为错误的标签标注理由**，与正确标签+理由构成**标签敏感对**，并基于此方法构造的数据训练单独的Reward Model；
  * **理由敏感RM**：对于训练集中的每条样本，我们基于正确的标签采样多条理由，根据**理由的生成质量**来构建理由敏感对，并训练理由敏感的Reward Model，此处理由质量可以采用**人工判断或AI辅助**的方式标注，根据准确性、一致性、逻辑性、事实性、相关性和信息完整性进行排序。
* PPO训练：使用Reward Model和的Policy Model进行强化学习训练。
  * RLLR：只用标签敏感RM训练
  * RLLR-mixed：用两个RM训练，最终reward如下，$$r\_{\phi 1}$$是标签敏感RM的输出，$$r\_{\phi 2}$$是理由敏感RM的输出，大部分情况下，$$r\_{\phi 2}\<r\_{\phi 1}$$，为了强化各自的作用，当$$r\_{\phi 1}$$较小时，由$$r\_{\phi 1}$$主导，当$$r\_{\phi 1}>\lambda$$时，截断到$$\lambda$$，由$$r\_{\phi 2}$$主导：

$$
r\_M(q, a)= \begin{cases}r\_{\phi 1}(q, a)+r\_{\phi 2}(q, a) & r\_{\phi 1}(q, a)<\lambda \ \lambda+r\_{\phi 2}(q, a) & r\_{\phi 1}(q, a) \geq \lambda\end{cases}
$$

### AMP

[无需人工/GPT-4V排序，针对多模态大模型的全自动多级偏好学习](https://mp.weixin.qq.com/s/vv1s9D7WQ_kKhdMoQOjYjw)

[Automated Multi-level Preference for MLLMs](https://arxiv.org/pdf/2405.11165)

<https://github.com/takomc/amp>

### Self-Taught Evaluators

[Self-Taught Evaluators](https://arxiv.org/abs/2408.02666)

<https://github.com/facebookresearch/RAM/tree/main/projects/self_taught_evaluator>

<https://huggingface.co/facebook/Self-taught-evaluator-llama3.1-70B>

### U-SOPHISTRY

[AI会「说谎」，RLHF竟是帮凶](https://mp.weixin.qq.com/s/TvtKnXoR9rBRcGl0N-uCAQ)

[Language Models Learn to Mislead Humans via RLHF](https://arxiv.org/pdf/2409.12822)

### UNA

[综合RLHF、DPO、KTO优势，统一对齐框架UNA来了](https://mp.weixin.qq.com/s/8VzRYlHGS0kF1k7A9tJamA)

### Align-anything

[全模态对齐框架align-anything来了：实现跨模态指令跟随](https://mp.weixin.qq.com/s/OFOvkp5STkD4n5rllai39A)

<https://github.com/PKU-Alignment/align-anything>

### Beyond Preferences in AI Alignment

[人类自身都对不齐，怎么对齐AI？新研究全面审视偏好在AI对齐中的作用](https://mp.weixin.qq.com/s/ADyxQQ5B8_Vd1eXBq1gHhg)

[Beyond Preferences in AI Alignment](https://arxiv.org/pdf/2408.16984)

### TDPO-R

[与OpenAI o1技术理念相似，TDPO-R算法有效缓解奖励过优化问题](https://mp.weixin.qq.com/s/MYSlYsFtlvZAmusEvrRsjA)

[Confronting Reward Overoptimization for Diffusion Models: A Perspective of Inductive and Primacy Biases](https://openreview.net/pdf?id=v2o9rRJcEv)

<https://github.com/ZiyiZhang27/tdpo>

### self-critiquing

[Self-critiquing models for assisting human evaluators](https://arxiv.org/abs/2206.05802)

有AI辅助的标注员能比无AI辅助的标注员找出更多的摘要中的错误

### Reward Centering

[强化学习之父Richard Sutton给出一个简单思路，大幅增强所有RL算法](https://mp.weixin.qq.com/s/lwoq764gVSFjsEhzPS3ChQ)

[Reward Centering](https://arxiv.org/pdf/2405.09999)

### Bradley-Terry models

[思考Bradley-Terry和Reward Modeling这一年](https://mp.weixin.qq.com/s/wb10JNBl9OzN-NIYh_BXeg)

[Rethinking the Bradley-Terry Models in Preference-based Reward Modeling: Foundation, Theory, and its Alternatives](http://sites.google.com/view/rewardmodels)

### Weak-to-Strong Search

[NeurIPS 2024 | 小模型引导大模型生成，无需微调实现弱到强泛化！](https://mp.weixin.qq.com/s/WbS_V3zqDrp52oV_9c_R9g)

[Weak-to-Strong Search: Align Large Language Models via Searching over Small Language Models](https://arxiv.org/abs/2405.19262)

<https://github.com/ZHZisZZ/weak-to-strong-search>

### reward hacking

[翁荔离职OpenAI后第一个动作：万字长文探讨RLHF的漏洞，网友们抢着传看](https://mp.weixin.qq.com/s/7844Xk8bbNP68Jbf0pWjuQ)

[离职OpenAI后，翁荔博客首次上新，引众网友围观学习（中文全文）](https://mp.weixin.qq.com/s/dfR4uprQ2i564IE9hsOXWw)

[Reward Hacking in Reinforcement Learning](https://lilianweng.github.io/posts/2024-11-28-reward-hacking/)

### 强化微调

[OpenAI 12连发第2弹：强化微调，少量样本就能训练自己的专家模型](https://mp.weixin.qq.com/s/qpprEm3rzvqHsS1dhiUehg)

评分器（grader）会比较模型输出与正确答案，然后返回一个0到1之间的分数。0 表示模型的输出中不包含正确答案，而1表示正确答案在输出的第一个位置。例如正确答案在第2个位置，评分器可能会给出0.7的分数。

![rft-grader](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b1dea492e1550efc373d7e59c473f61c572e27ca%2Frft-grader.png?alt=media)

可能相关的论文：[字节再送神助攻，大模型继续狂飙。](https://mp.weixin.qq.com/s/HeauFZHZcFOsDOgAahEIhQ)，ACL2024的[ReFT: Reasoning with Reinforced Fine-Tuning](https://arxiv.org/pdf/2401.08967)

### 伪对齐

[震惊！Claude伪对齐率竟能高达78％，Anthropic 137页长论文自揭短](https://mp.weixin.qq.com/s/UpTjO8ATcYC6-PSnJkZMMg)

[Alignment Faking in Large Language Models](https://assets.anthropic.com/m/983c85a201a962f/original/Alignment-Faking-in-Large-Language-Models-full-paper.pdf)

### SFT记忆，RL生成

[SFT Memorizes, RL Generalizes: A Comparative Study of Foundation Model Post-training](https://arxiv.org/pdf/2501.17161)

<https://github.com/LeslieTrue/SFTvsRL>

### AttentionInfluence

[字节最新大模型秘籍：只挑能有推理潜力的数据训练！1.3B模型无需标签自动挑选](https://mp.weixin.qq.com/s/FlP_m6WuWrvxrF4fvgyR9A)

[AttentionInfluence: Adopting Attention Head Influence for Weak-to-Strong Pretraining Data Selection](https://arxiv.org/pdf/2505.07293)

### GHPO

[首次结合RL与SFT各自优势，动态引导模型实现推理⾼效训练](https://mp.weixin.qq.com/s/_skJ9jIzkIhX1CGHZbaFFw?scene=1)

[GHPO: Adaptive Guidance for Stable and Efficient LLM Reinforcement Learning](https://arxiv.org/abs/2507.10628)

### GSPO

[解密Qwen3三连发：强化学习新算法GSPO！](https://mp.weixin.qq.com/s/Y5pfNNX4K6k0hfxXr87dkQ)

[类PPO强化学习三部曲：GRPO简化→DAPO修正→GSPO全面进化](https://mp.weixin.qq.com/s/w-DBnIcgHfl7F5vSFsAbxQ)

[Group Sequence Policy Optimization](https://www.arxiv.org/abs/2507.18071)

## Reward model相关

### GRM+SPCT

[刚刚，DeepSeek公布推理时Scaling新论文，R2要来了？](https://mp.weixin.qq.com/s/TbPWc4ooFyf0it5pEaLRUA)

[Inference-Time Scaling for Generalist Reward Modeling](https://arxiv.org/abs/2504.02495)

critique：生成的文本评价，即评论

#### RM分类

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-34becc0de12fe06a861efeabcc03c48752cf4725%2Frm-patterns.png?alt=media)

RM可以进行如下分类：

* reward生成范式：输入query和一些responses
  * scalar：只输出reward值
  * semi-scalar：生成critique和scalar
  * generative：只输出critique
* 打分范式：输入query和2个responses
  * pointwise：输出每个response的得分
  * pairwise：输出二者的相对得分

几种常见RM：

* Bradley-Terry，scalar + pointwise
* PairRM：scalr + pairwise
* CLoud：semi-scalr + pointwise
* LLM-as-a-Judge：semi-scalr或者generative + pairwise
* Pointwise GRM：generative + pointwise

#### SPCT

核心：principle（准则）不再只是辅助性的输入，而是使模型能在生成过程中**主动生成**并**基于此生成对应的critique**

Self-Principled Critique Tuning (SPCT)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-025acd6784e08b6b1f02ee38219fb87a64a520e1%2Fspct.png?alt=media)

* 训练（2阶段）：输入query+2个response
  * RFT（rejective fine-tuning）：使GRM能够生成格式正确且适配多种输入类型的principle与critique
    * 使用预训练的pointwise-GRM，采样得到N个priciple + response，和goundtruth比较(groundtruth对应的reward是不是比其他N-1个结果对应的reward高)，满足下面条件的扔了，剩下的构造成一个数据集
      * 全对的就是too-easy的，扔掉；
      * 错误的也扔掉
    * 同时还有一定比例的hint sampling，即把groundtruth提前泄露到GRM的prompt里去，让模型倾向于去对齐groudtruth
  * RL（rule-based online RL）：通过不断优化生成的准则和评论，进一步增强泛化型奖励生成能力。
    * 也是用的GRPO，只有accuracy reward，没format reward，加大KL-penalty
* 推理：输入query+2个response
  * 并行采样出一堆的principles+critiques，即m条结果
  * voting：
    * 基于生成式reward：即每个里的response1的reward求和，同理response2的reward求和，得到1和2的总得分
    * 基于meta RM：训练一个pointwise scalar RM，用二分类来判断principle+critique对不对(label和RFT的一样)。使用：对这m个结果打分，干掉质量差的（图中就是只保留了第1和第3个），然后对剩下的$$k\_{meta}$$个去投票

### 小红书的一些探索

[万字干货：小红书 hi lab 团队关于奖励模型的一些探索](https://mp.weixin.qq.com/s/3UadDLhVdQQFh8VCyLJpuw)

### PRMBench

[ACL 2025｜驱动LLM强大的过程级奖励模型（PRMs）正遭遇「信任危机」？](https://mp.weixin.qq.com/s/O7Him3RNXO1xEsbUiZML9Q?scene=1)

[PRMBench: A Fine-grained and Challenging Benchmark for Process-Level Reward Models](https://arxiv.org/abs/2501.03124)

## RL基础

### on/off policy

[别再二选一了！一文看懂On-Policy与Off-Policy的本质分歧（含GRPO深度拆解）](https://mp.weixin.qq.com/s/am_ulGA18klm6T5KEuAI7w)

核心区别：学习使用的数据是否来自当前策略本身，还是来自其他策略。

## Tinker

[刚刚，这家0产品0模型就估值854亿的公司，终于发布了首款产品！](https://mp.weixin.qq.com/s/LHnrWNnuY-BqbU3bU-a8dQ)

<https://thinkingmachines.ai/blog/announcing-tinker/>

<http://github.com/thinking-machines-lab/tinker-cookbook>

文档：<https://tinker-docs.thinkingmachines.ai/training-sampling>

主要提供了4个函数

```python
service_client = tinker.ServiceClient()
training_client = service_client.create_lora_training_client(
  base_model="meta-llama/Llama-3.2-1B", rank=32,
)
training_client.forward_backward(...)
training_client.optim_step(...)
training_client.save_state(...)
training_client.load_state(...)

sampling_client = training_client.save_weights_and_get_sampling_client(name="my_model")
sampling_client.sample(...)
```

## OPD

On-Policy Distillation

第一篇应该是[MiniLLM: Knowledge Distillation of Large Language Models](https://arxiv.org/pdf/2306.08543v3)，里面对比了

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1eb01ebf83fce8eb42dfaacfe6ba98d70b832c13%2Fminillm.png?alt=media)

之前的蒸馏都是用teacher采样出一个序列，然后student去学它，用forward KL；这篇提出的是用student采样序列，然后看teacher打分，student去学，用reverse KL(当然，后面可以看到别的变种不是用RKL，但从student采样这个是opd的核心)

简单理解就是：student采样出一个序列，比如输入是xxx，student输出了a，然后这个时候teacher也输入xxx，看最后那个softmax对a的打分是多少，让student去学；然后下一步，student输入xxxa，输出b，teacher也是输入xxxa，看b的打分

forward KL vs reverse KL

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3b0513ecf28cb22674860d1ab5eebf32e1439dbf%2Ffkl-rkl.png?alt=media)

## 后训练的一些思考

参考：[xhs](https://www.xiaohongshu.com/explore/68ddbb12000000000300ccf3?app_platform=ios\&app_version=9.3.1\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBS14H4N6Qj9203eE3W-PSZYAeS09fuF0w_vOwrIeRr3Y=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1759366426\&share_id=35b7932b0dc34529ba9116f3f0972a00)

* 对sft和rl的两种理解之一：模仿和泛化。目的上都是实现某种对齐，只不过rl会在奖励合适情况下向目标**更平滑过渡**，而不会像sft**阶跃式变化**。在这种目的下，很多做法会先sft冷启动再rl微调，两个阶段数据量比例在1:3到1:10左右。
* 对sft和rl的两种理解之二：激发推理。sft激发方式是关联不同数据的**同质化逻辑**，底层来源在训练数据的质量、数量、和多样性；而rl的激发方式是**比当前模型略强的奖励信号**，底层来源是模型参数分布和奖励最高值之间的恰当gap。
* 模型输出的熵很重要，尤其是高条件熵下输出高概率token，和低条件熵下输出低概率token这两种特殊cases，可能对激发模型内化推理能力有较大作用。
* 作为后训练中为数不多的可以修改网络结构的模型，奖励模型的训练比多数垂域dpo要更复杂，且依赖数据量更大，更有性价比的做法可能还是用rubric judge(可能是llm as a judge?)。
* 在对垂域任务设计奖励系统时，对几十B模型的奖励策略可能难以直接扩展到上百B模型。
* 高质量，多样化的合成数据是提升模型性能的必要非充分条件，这里的合成不仅有对话轮数粒度的合成，还有思考粒度、句子粒度的合成，也见过在思考链里插入一些个别token的合成方法。

## 一些训练技巧

### add special token

```python

special_tokens = [f"<SID_{i}>" for i in range(2000)]
num_added = tokenizer.add_special_tokens(
    {"additional_special_tokens": special_tokens}
)
print("num_added =", num_added)

model.resize_token_embeddings(len(tokenizer))
```

### 只对special token的emb微调

```python
import torch

original_vocab_size = tokenizer.vocab_size - num_added

# 1) 先按你的逻辑：其他参数正常训练
for name, param in model.named_parameters():
    param.requires_grad = True

# 2) embedding / lm_head 也先整体打开
input_emb = model.get_input_embeddings()
output_emb = model.get_output_embeddings()

input_emb.weight.requires_grad = True
if output_emb is not None:
    output_emb.weight.requires_grad = True

# 3) 构造 mask：只保留新增 token 的行梯度
def build_row_mask(weight, original_vocab_size):
    mask = torch.zeros(weight.size(0), dtype=torch.bool, device=weight.device)
    mask[original_vocab_size:] = True
    return mask

input_mask = build_row_mask(input_emb.weight, original_vocab_size)

def input_grad_hook(grad):
    grad = grad.clone()
    grad[~input_mask] = 0
    return grad

input_emb.weight.register_hook(input_grad_hook)

# 4) lm_head 若与 embedding 不共享权重，则也单独处理
if output_emb is not None and output_emb.weight is not input_emb.weight:
    output_mask = build_row_mask(output_emb.weight, original_vocab_size)

    def output_grad_hook(grad):
        grad = grad.clone()
        grad[~output_mask] = 0
        return grad

    output_emb.weight.register_hook(output_grad_hook)
```

如果是lora里，也可以直接

```python
special_token_ids = tokenizer.convert_tokens_to_ids(special_tokens)

# 4) LoRA + 仅训练这些 token 的 embedding 行
peft_config = LoraConfig(
    task_type="CAUSAL_LM",
    r=16,
    lora_alpha=32,
    lora_dropout=0.05,
    target_modules=["q_proj", "k_proj", "v_proj"],
    trainable_token_indices=special_token_ids,
)

model = get_peft_model(model, peft_config)

# 看一下哪些参数可训练
model.print_trainable_parameters()
for n, p in model.named_parameters():
    if p.requires_grad:
        print("TRAIN:", n, tuple(p.shape))
```


# 1.6.llm\_multimodal

## 多模态（基础）

### 扩散模型总结

[近500页史上最全扩散模型修炼宝典，宋飏等人一书覆盖三大主流视角](https://mp.weixin.qq.com/s/tBVkAK3TvlEBplpCYRtz1A)

[The Principles of Diffusion Models: From Origins to Advances](https://arxiv.org/pdf/2510.21890)

### VLM导论

[视觉语言模型导论：这篇论文能成为你进军VLM的第一步](https://mp.weixin.qq.com/s/gdT0q5HJ9Fw5QrbBihI1vA)

[An Introduction to Vision-Language Modeling](https://arxiv.org/pdf/2405.17247)

### vilbert

[ViLBERT: Pretraining Task-Agnostic Visiolinguistic Representations for Vision-and-Language Tasks](https://arxiv.org/pdf/1908.02265.pdf)

研究人员提出了一种名为 ViLBERT（图文 BERT）模型。这是一个可以学习任务未知的、图像内容和自然语言联合表征的模型。研究人员将流行的 BERT 架构扩展成一个 multi-modal two-stream 模型上。在这个模型上，模型用两个分开的流处理图像和文本输入，但他们彼此用联合注意力层交互。研究人员在两个代理任务上，使用 Conceptual Captions 数据集（数据集很大，而且是自动收集的数据）预训练这个模型，然后将模型秦阿姨到多个建立好的图像-文本任务上。这些任务包括图像问答、图像常识推理、引述表达、指称成分，以及基于捕捉的图像提取。这些只需要在基本架构上进行微小的补充。研究人员观察到，相比现有的针对任务的特定模型，新模型在这些任务上都有了相助的性能提升——在每个任务上都取得了 SOTA。

### VLbert

Visual-Linguistic BERT，简称 VL-BERT

[微软亚研提出VL-BERT：通用的视觉-语言预训练模型](https://mp.weixin.qq.com/s/RaYwdMXT0UKN8_bni-DpWw)

此预训练过程可以显著提高下游的视觉-语言任务的效果，包含视觉常识推理、视觉问答与引用表达式理解等。值得一提的是，在视觉常识推理排行榜中，VL-BERT 取得了当前单模型的最好效果。

[VL-BERT: Pre-training of Generic Visual-Linguistic Representations](https://arxiv.org/abs/1908.08530)

之前的视觉-语言模型分别使用计算机视觉或自然语言处理领域中的预训练模型进行初始化，但如果目标任务数据量不足，模型容易过拟合从而损失性能。并且对于不同的视觉-语言任务，其网络架构一般是经过特殊设计的，由此很难通过视觉-语言联合预训练的过程帮助下游任务。

VL-BERT 的主干网络使用 TransformerAttention 模块，并将视觉与语言嵌入特征作为输入，其中输入的每个元素是来自句子中的单词、或图像中的感兴趣区域（Region of Interests，简称 RoIs）。在模型训练的过程中，每个元素均可以根据其内容、位置、类别等信息自适应地聚合来自所有其他元素的信息。在堆叠多层 TransformerAttention 模块后，其特征表示即具有更为丰富的聚合与对齐视觉和语言线索的能力。

为了更好地建模通用的视觉-语言表示，作者在大规模视觉-语言语料库中对 VL-BERT 进行了预训练。采用的预训练数据集为图像标题生成数据集，Conceptual Captions，其中包含了大约 330 万个图像标题对。

VL-BERT 的预训练主要采用三个任务：

* 屏蔽语言模型（Masked Language Modeling），即随机屏蔽掉语句中的一些词，并预测当前位置的词是什么；
* 屏蔽 RoI 分类（MaskedRoIClassification），即随机屏蔽掉视觉输入中的一些 RoIs，并预测此空间位置对应 RoI 的所属类别；
* 图像标题关联预测（Sentence-Image Relationship Prediction），即预测图像与标题是否属于同一对。

在预训练结束后，使用微调来进行下游任务的训练。本文中主要在三个视觉-语言下游任务中进行微调，即视觉常识推理（VisualCommonsenseReasoning）、视觉问答（VisualQuestionAnswering）与引用表达式理解（ReferringExpressionComprehension），下面将分别介绍。

视觉常识推理任务即给定图片与相关问题，机器不仅需要回答问题，还需要提供理由来证明答案的正确性。此任务（Q->AR）被分解为两个子任务，即视觉问答（Q->A，给定图片与问题，输出正确答案），以及视觉推理（QA->R，给定图片、问题与答案，输出正确的理由）。

### CLIP系列

### cn-clip

[Chinese CLIP: Contrastive Vision-Language Pretraining in Chinese](https://arxiv.org/pdf/2211.01335)

<https://github.com/OFA-Sys/Chinese-CLIP>

### BEiT系列

#### BEiT

[BEIT: BERT Pre-Training of Image Transformers](https://arxiv.org/pdf/2106.08254.pdf)

#### BEiT v2

[BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers](https://arxiv.org/pdf/2208.06366.pdf)

#### BEiT v3

[Image as a Foreign Language: BEIT Pretraining for All Vision and Vision-Language Tasks](https://arxiv.org/pdf/2208.10442.pdf)

### ViT\&Swin-Transformer

[SwinTransformer与Vit细节总结](https://blog.csdn.net/taoqick/article/details/131362590)

[An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale](https://arxiv.org/pdf/2010.11929.pdf)

对于一张$$224\times 224\times 3$$的图像，假设每个patch是$$16\times 16$$，那就分成$$\frac{224\times 224}{16\times 16}=196$$个patch(即$$seq\_length=196$$)，每个patch的维度是$$16\times 16\times 3=768$$，最后加上`[CLS]`这个token，就是$$seq\_length=197$$。

### 像素tokenizer

[Meta新研究挑战CV领域基操：ViT根本不用patch，用像素做token效果更佳](https://mp.weixin.qq.com/s/o_Wb3Bt9Maipgczokeinrg)

[An Image is Worth More Than 16x16 Patches: Exploring Transformers on Individual Pixels](https://arxiv.org/pdf/2406.09415)

### stable diffusion

[High-Resolution Image Synthesis with Latent Diffusion Models](https://arxiv.org/abs/2112.10752)

![stable-diffusion](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b34496d0c5ba5064a2e0b07e4b0b0141ae0adbe1%2Fstable-diffusion.png?alt=media)

* 输入图像，经过编码器得到z，z通过前向扩散不断加噪声得到$$z\_T$$（正向扩散）
* 输入条件，经过条件编码器(原文是BERT，到了DALL-E2就改成CLIP了)得到$$\tau\_\theta$$
* $$z\_T$$在$$\tau\_\theta$$的指导下不断去噪（反向扩散），得到新的$$z$$，再通过解码器得到最终生成的图像

其中的正向扩散和反向扩散一般用U-Net

代码库：<https://github.com/CompVis/latent-diffusion/tree/main>

粗略看了下代码，带condition的训练原理大概是训练语料中有图+文本（例如imagenet的class\_label，这里可以映射到一个classid也可以直接拿明文），然后condition和图片一起作为输入去训练auto-eocnder和ldm

在`/latent-diffusion/ldm/data/imagenet.py`这个代码里，把class\_label加进来了

```python
    def _load(self):
        with open(self.txt_filelist, "r") as f:
            self.relpaths = f.read().splitlines()
            l1 = len(self.relpaths)
            self.relpaths = self._filter_relpaths(self.relpaths)
            print("Removed {} files from filelist during filtering.".format(l1 - len(self.relpaths)))

        self.synsets = [p.split("/")[0] for p in self.relpaths]
        self.abspaths = [os.path.join(self.datadir, p) for p in self.relpaths]

        unique_synsets = np.unique(self.synsets)
        class_dict = dict((synset, i) for i, synset in enumerate(unique_synsets))
        if not self.keep_orig_class_label:
            self.class_labels = [class_dict[s] for s in self.synsets]
        else:
            self.class_labels = [self.synset2idx[s] for s in self.synsets]

        with open(self.human_dict, "r") as f:
            human_dict = f.read().splitlines()
            human_dict = dict(line.split(maxsplit=1) for line in human_dict)

        self.human_labels = [human_dict[s] for s in self.synsets]

        labels = {
            "relpath": np.array(self.relpaths),
            "synsets": np.array(self.synsets),
            "class_label": np.array(self.class_labels),
            "human_label": np.array(self.human_labels),
        }

        if self.process_images:
            self.size = retrieve(self.config, "size", default=256)
            self.data = ImagePaths(self.abspaths,
                                   labels=labels,
                                   size=self.size,
                                   random_crop=self.random_crop,
                                   )
        else:
            self.data = self.abspaths
```

### stable diffusion 3

[Stable Diffusion 3论文终于发布，架构细节大揭秘，对复现Sora有帮助？](https://mp.weixin.qq.com/s/mH6IzExPPBpX8YTwxlP6dA)

### DALL-E系列

DALL-E3：

[Improving Image Generation with Better Captions](https://cdn.openai.com/papers/dall-e-3.pdf)

现有的文本->图像模型面临的一个基本问题是：训练数据集中的文本-图像pair对中的**文本质量较差**。

* 学习一个图像文本生成器，可以生成详细、准确的图像描述
* 将此文本生成器应用到数据集以生成更详细的文本
* 在改进的数据集上训练文本 - 图像模型

### videobert

[通过未标记视频进行跨模态时间表征学习](https://mp.weixin.qq.com/s/5qC70NoTBQ95vjI4cGl66g)

[VideoBERT: A Joint Model for Video and Language Representation Learning](https://arxiv.org/abs/1904.01766)，VideoBert模型。

### video caption

[Tarsier: Recipes for Training and Evaluating Large Video Description Models](https://arxiv.org/pdf/2407.00634)

![tarsier](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a15c8bfbd4808f560f5cbec57d451fa0f9a7a12f%2Ftarsier.png?alt=media)

### 视频tokenizer方法

* VideoGPT：[Videogpt: Video generation using vq-vae and transformers](https://arxiv.org/pdf/2104.10157.pdf)，结合了VQ-VAE，而且是自回归的transformer
* magvit：[MAGVIT: Masked Generative Video Transformer](https://arxiv.org/pdf/2212.05199.pdf)
* magvitv2：[Language Model Beats Diffusion -- Tokenizer is Key to Visual Generation](https://arxiv.org/pdf/2310.05737.pdf)，[语言模型战胜扩散模型！谷歌提出MAGVIT-v2：视频和图像生成上实现双SOTA！](https://blog.csdn.net/amusi1994/article/details/133917909)

先看vq的改进版：

[Finite Scalar Quantization: VQ-VAE Made Simple](https://arxiv.org/pdf/2309.15505)提出了fsq，码本大小是$$|C|=L^d$$

magvit-v2提出了LFQ，也优化了vq-vae

[BSQ：Image and Video Tokenization with Binary Spherical Quantization](https://arxiv.org/pdf/2406.07548)

![bsq-vq-lfq](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9a49994ff581a00821d10a4cd188353cbe0533bd%2Fbsq-vq-lfq.png?alt=media)

![bsq-fsq-lfq](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-660dccb3f5c6c59873a2c15abb74bac9c9ea94fc%2Fbsq-fsq-lfq.png?alt=media)

claude-2-100k的回答。。

* [MAGVIT: Masked Generative Video Transformer](https://arxiv.org/pdf/2212.05199.pdf)：使用了3D向量量化(3D VQ)自动编码器来将视频量化为离散token
  * 设视频$$V$$有$$T$$帧，其形状为$$T \times H \times W \times 3$$。
  * 3D VQ编码器$$f\_T$$会把视频量化为一个token序列$$z$$,其中$$z\in Z^T$$,$$Z$$是码本,$$T$$是token序列长度。
  * 3D VQ解码器$$f^{-1}\_T$$则可以从latent token $$z$$重构回视频像素。
* [Genie: Generative Interactive Environments](https://arxiv.org/pdf/2402.15391.pdf)：使用了2D向量量化(2D VQ)方法
  * 每一帧图像I先通过一个2D VQ编码器f编码为一个token序列$$z$$,其中$$z\in Z^N$$,$$Z$$是2D码本。
  * 然后,对时间序列上的token $$z\_1, z\_2,..., z\_T$$应用一个1D卷积网络,以捕获时间信息。
  * 再通过2D VQ解码器$$f^{-1}$$解码回每一帧图像。
* [Vivit: A video vision transformer](https://arxiv.org/pdf/2103.15691.pdf)：使用tubelet-embedding
  * 均匀地在时间轴上抽样$$n\_t$$个帧,然后把每帧处理成$$n\_h \times n\_w$$个patch,最终把所有patch连接起来

### SAM系列

* SAM：[CV不存在了？Meta发布「分割一切」AI 模型，CV或迎来GPT-3时刻](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650872938\&idx=2\&sn=ddb938b9c7e6206a0b97032cb9dee30a\&scene=21)，[Segment Anything](https://arxiv.org/abs/2304.02643)
* SAM2：[刚刚，Meta开源「分割一切」2.0模型，视频也能分割了](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650928134\&idx=1\&sn=7855c453083236c5c5d121d3b4fb955e\&scene=21)，[SAM 2: Segment Anything in Images and Videos](https://arxiv.org/abs/2408.00714)
* SAM3：[ICLR 2026惊现SAM 3，分割一切的下一步：让模型理解「概念」](https://mp.weixin.qq.com/s/7uDHXQd1ES2mV4dZFB7VMw)，[SAM 3: Segment Anything with Concepts](https://openreview.net/pdf?id=r35clVtGzw)

可以看这个demo，<https://github.com/facebookresearch/segment-anything/blob/main/notebooks/predictor_example.ipynb>，输入的可以是一个或者多个点（以及每个点是0还是1，即是否mask），也可以是一个或者多个box。例如输入的点在车窗里，那输出的mask就是当前这个车窗（置信度最高），多个车窗（置信度次之）、整辆车（置信度更低）；例如输入两个点，一个在车窗里（label是1），一个是车门(label是0)，那输出的mask就是整个车窗，没有车门。

### RAE

[VAE时代终结？谢赛宁团队「RAE」登场，表征自编码器或成DiT训练新基石](https://mp.weixin.qq.com/s/Z1ZJnco6oEXWMUdbrito9w)

[Diffusion Transformers with Representation Autoencoders](https://arxiv.org/abs/2510.11690)

<https://github.com/bytetriper/RAE>

挑战了一个普遍的假设，即像DINOv2和SigLIP2这类预训练表征编码器不适合重建任务，因为它们“强调高层语义，而忽略了底层细节” 。

该研究证明，只要解码器训练得当，冻结的表征编码器实际上可以作为扩散潜在空间的强大编码器。RAE将冻结的预训练表征编码器与一个基于ViT的解码器配对，其重建效果与SD-VAE相当甚至更优。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f8cd8612c7096b16fc4ec3429f12e99a54fca842%2Frae.png?alt=media)

原来的SD-VAE把$$256\times 256$$的图像压缩到$$32\times 32\times 4$$的潜在表征，限制了重建的保真度，也限制了表征的质量。

假设输入图片是$$3\times H\times W$$，patch大小为$$p\_e$$，隐层大小为$$d$$，那就是把原图像转成$$N=HW/p\_{e}^2$$个token，每个token有$$d$$个通道，先过一个预训练好的freeze的编码器，然后过DiT，输出再过一个解码器，patch大小为$$p\_d$$，变回$$3 \times H \frac{p\_d}{p\_e} \times W \frac{p\_d}{p\_e}$$，一般设置$$p\_d=p\_e$$，让输出和原图分辨率匹配

只训练解码器，loss和vae一样：

$$
\begin{gathered}
z=E(x), \hat{x}=D(z) \\
\mathcal{L}\_{\text {rec }}(x)=\omega\_L \operatorname{LPIPS}(\hat{x}, x)+\mathrm{L} 1(\hat{x}, x)+\omega\_G \lambda \operatorname{GAN}(\hat{x}, x)
\end{gathered}
$$

## 多模态（图像）

[【IEEE Fellow何晓东&邓力】多模态智能论文综述：表示学习，信息融合与应用，259篇文献带你了解AI热点技](https://mp.weixin.qq.com/s/EMWpBP5iB1Qrleo3XNjbuQ)

[Multimodal Intelligence: Representation Learning, Information Fusion, and Applications](https://arxiv.org/abs/1911.03977)

[BERT在多模态领域中的应用](https://mp.weixin.qq.com/s/THxlQX2MPXua0_N0Ug0EWA)

### PALM-E

[PaLM-E: An Embodied Multimodal Language Model](https://arxiv.org/abs/2303.03378)

### InstantID

[InstantID: Zero-shot Identity-Preserving Generation in Seconds](https://arxiv.org/pdf/2401.07519.pdf)

<https://github.com/InstantID/InstantID>

[小红书开源「InstantID」效果炸裂，迅速蹿上Github热榜](https://baijiahao.baidu.com/s?id=1789680663845556585\&wfr=spider\&for=pc)

用户只需上传一张照片，就能轻松定制出多种风格的 AI 写真

![InstantID](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2881342628906bd79495d093861759d2aa05a4a3%2FInstantID.png?alt=media)

[曾爆火的 InstantID又有了新玩法：风格化图像生成，已开源](https://mp.weixin.qq.com/s/CP6NFzzt57YZMj4Q3JNySA)

[InstantStyle: Free Lunch towards Style-Preserving in Text-to-Image Generation](https://arxiv.org/pdf/2404.02733.pdf)

<https://github.com/InstantStyle/InstantStyle>

### VAR

[GPT超越扩散、视觉生成Scaling Law时刻！北大&字节提出VAR范式](https://mp.weixin.qq.com/s/KOEdTgJX4Gga5zRbl57Yow)

[Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction](https://arxiv.org/pdf/2404.02905.pdf)

<https://github.com/FoundationVision/VAR>

### cobra

[首个基于Mamba的MLLM来了！模型权重、训练代码等已全部开源](https://mp.weixin.qq.com/s/KuuNTL_jBRsyhub5_6aXpQ)

[Cobra: Extending Mamba to Multi-Modal Large Language Model for Efficient Inference](https://arxiv.org/pdf/2403.14520.pdf)

<https://github.com/h-zhao1997/cobra>

### Hyper-SD

[加速扩散模型，最快1步生成SOTA级图片，字节Hyper-SD开源了](https://mp.weixin.qq.com/s/dqDqlWv1xe-8zayeJCGq8A)

[Hyper-SD: Trajectory Segmented Consistency Model for Efficient Image Synthesis](https://arxiv.org/pdf/2404.13686)

### TextSquare

[8B文字多模态大模型指标逼近GPT4V，字节、华师、华科联合提出TextSquare](https://mp.weixin.qq.com/s/zFsZsEgHtMUJMye_56j9Cw)

[TextSquare: Scaling up Text-Centric Visual Instruction Tuning](https://arxiv.org/pdf/2404.12803)

### neural network diffusion

[用扩散模型生成网络参数，LeCun点赞尤洋团队新研究](https://mp.weixin.qq.com/s/kVY0UrLrfb3_2ZmIFlGxVg)

[Neural Network Diffusion](https://arxiv.org/pdf/2402.13144.pdf)

<https://github.com/NUS-HPC-AI-Lab/Neural-Network-Diffusion>

### hunyuan-dit

[首个中文原生DiT架构！腾讯混元文生图大模型全面开源，免费商用](https://mp.weixin.qq.com/s/6J4Vc1faazRGXbDNG_RdPw)

### lumina-t2x

[DiT架构大一统：一个框架集成图像、视频、音频和3D生成，可编辑、能试玩](https://mp.weixin.qq.com/s/NwwbaeRujh-02V6LRs5zMg)

[Lumina-T2X: Transforming Text into Any Modality, Resolution, and Duration via Flow-based Large Diffusion Transformers](https://arxiv.org/pdf/2405.05945)

<https://github.com/Alpha-VLLM/Lumina-T2X>

<https://huggingface.co/Alpha-VLLM/Lumina-T2I/tree/main>

### Vision-LSTM

[原作者带队，LSTM卷土重来之Vision-LSTM出世](https://mp.weixin.qq.com/s/_9DYLbRkiXTU70nsXJLCDQ)

[Vision-LSTM: xLSTM as Generic Vision Backbone](https://arxiv.org/pdf/2406.04303)

<https://nx-ai.github.io/vision-lstm/>

### CSR

[零成本突破多模态大模型瓶颈！多所美国顶尖高校华人团队，联合推出自增强技术CSR](https://mp.weixin.qq.com/s/yrzBdDhxv5AkSZMQzuHc8g)

[Calibrated Self-Rewarding Vision Language Models](https://arxiv.org/pdf/2405.14622)

<https://github.com/YiyangZhou/CSR>

### ManyICL

[吴恩达团队新作：多模态多样本上下文学习，无需微调快速适应新任务](https://mp.weixin.qq.com/s/eLqMKBhgHbm36uB0s23C6A)

[Many-Shot In-Context Learning in Multimodal Foundation Models](https://arxiv.org/pdf/2405.09798)

### MAR

[何恺明新作再战AI生成：入职MIT后首次带队，奥赛双料金牌得主邓明扬参与](https://mp.weixin.qq.com/s/JxdYrYOzkM5DBMR0D49WUQ)

[Autoregressive Image Generation without Vector Quantization](https://arxiv.org/pdf/2406.11838v1)

### VCR

[Bengio团队提出多模态新基准，直指Claude 3.5和GPT-4o弱点](https://mp.weixin.qq.com/s/Zy-kM3bvN-1oHondw1VLzw)

[VCR: Visual Caption Restoration](https://arxiv.org/pdf/2406.06462)

<https://github.com/tianyu-z/VCR>

### EVE

[抛弃视觉编码器，这个「原生版」多模态大模型也能媲美主流方法](https://mp.weixin.qq.com/s/At2Wz9Kk2QzGEZ--4FnbZw)

[Unveiling Encoder-Free Vision-Language Models](https://arxiv.org/pdf/2406.11832)

<https://github.com/baaivision/EVE>

### LC-Mis

[AI画家的「滑铁卢」：为什么冰可乐不愿意住进茶杯里？](https://mp.weixin.qq.com/s/OyLEBVJoaJDkunq15Uwj1Q)

[Lost in Translation: Latent Concept Misalignment in Text-to-Image Diffusion Models](https://arxiv.org/pdf/2408.00230)

### 多模态cot

[ACL 2024 Oral｜我们离真正的多模态思维链推理还有多远？](https://mp.weixin.qq.com/s/oCJB_Q_Kz3kTC36WoSVtEQ)

### Imagen 3

[Imagen 3](https://arxiv.org/pdf/2408.07009)

[Imagen 3支持人物生成，人人可用！谷歌Gemini AI重大升级来了](https://mp.weixin.qq.com/s/4gYFpljgF64vA5ojulEmYQ)

<https://deepmind.google/technologies/imagen-3/>

### Chameleon

下面3个工作都在这里有介绍：[生成-理解大一统：一文浅谈多模态大模型最新研究进展](https://mp.weixin.qq.com/s/Ip-IphDFF6il3rTJLxflZA)

[Meta首发「变色龙」挑战GPT-4o，34B参数引领多模态革命！10万亿token训练刷新SOTA](https://mp.weixin.qq.com/s/HQC7F64ZIb-k-K_QLzFegg)

[Chameleon: Mixed-Modal Early-Fusion Foundation Models](https://arxiv.org/pdf/2405.09818)

### Show-o

[Show-o: One Single Transformer to Unify Multimodal Understanding and Generation](https://arxiv.org/abs/2408.12528)

### Transfusion

(toread)

[统一transformer与diffusion！Meta融合新方法剑指下一代多模态王者](https://mp.weixin.qq.com/s/D0sadIZkILx8VvWcsIEYFQ)

[Transfusion: Predict the Next Token and Diffuse Images with One Multi-Modal Model](https://arxiv.org/pdf/2408.11039)

一般来说，多模态生成模型需要能够感知、处理和生成离散元素（如文本或代码）和连续元素（如图像、音频和视频数据）。

* 离散模态领域：以预测下一个词为目标的语言模型占据主导地位
* 连续模态方面：扩散模型及其泛化形式则是当前最先进技术

研究者一直试图将语言模型与扩散模型结合：

* 方法一：直接扩展语言模型，使其能够利用扩散模型作为一个工具，或者将一个预训练的扩散模型嫁接到语言模型上。
* 方法二：是对连续模态进行量化处理，然后在离散的token上训练一个标准的语言模型，虽然简化了模型架构，但也会造成信息的丢失。

本文通过训练单个模型来预测离散文本 token 和扩散连续图像，从而实现两种模态的完全集成，且不会丢失任何信息。引入了一个训练模型的新方法 Transfusion，能够无缝地生成离散和连续的模态，将语言模型损失函数与扩散相结合，在混合模态序列上训练单个transformer。

该研究还在文本和图像数据混合基础上从头开始预训练多个 Transfusion 模型，最多可达到 7B 参数量，并针对各种单模态和跨模态基准建立扩展定律。

### ControlNeXt

[视频生成控制提升几十倍，新一代轻量级ControlNeXt火了，贾佳亚团队正挑战Scaling Law](https://mp.weixin.qq.com/s/IBqOmZbSCcdRvyFRdcXMLQ)

[ControlNeXt: Powerful and Efficient Control for Image and Video Generation](https://arxiv.org/pdf/2408.06070)

<https://github.com/dvlab-research/ControlNeXt>

### GNN+Graph Transformer综述

[TPAMI 2024 | 计算机视觉中基于图神经网络和图Transformers的方法和最新进展](https://mp.weixin.qq.com/s/-lWM4mmbCixxJxWRPuoQsw)

[Survey on Graph Neural Networks and Graph Transformers in Computer Vision: A Task-Oriented Perspective](https://arxiv.org/abs/2209.13232)

### Llip

[ICML 2024 | 直面CLIP内在缺陷，Meta提出全新latent对比预训练框架Llip](https://mp.weixin.qq.com/s/vucfBAYI_SFemwg5_PrbLA)

[Modeling Caption Diversity in Contrastive Vision-Language Pretraining](https://arxiv.org/abs/2405.00740)

基于对比视觉-语言预训练技术的大型多模态模型目前已成为人工智能领域研究的热点课题。但这一预训练技术仍然以经典的CLIP模型为基础，缺乏进一步的发展。此外，鉴于CLIP模型通过将图像及其caption映射到单个向量这样的底层机制，可以认为限制了对比预训练模型描述图像各种其他方面的能力。

提出了一种名为Llip的架构（Latent Language Image Pretraining），以图像字幕生成（Image Caption）任务作为出发点，用来模拟自然场景中与单张图像进行匹配caption的多样性。Llip仍然采用双塔特征提取模式，其视觉编码器可以对给定图像输出一组视觉特征，这些特征可以总结与当前图像匹配的多样式captions中的文本信息，来得到最终的表示。

### longllava

[首个Mamba+Transformer混合架构多模态大模型来了，实现单卡千图推理](https://mp.weixin.qq.com/s/ipfx6qaxeQlkILEVACabvA)

[LongLLaVA: Scaling Multi-modal LLMs to 1000 Images Efficiently via Hybrid Architecture](https://arxiv.org/abs/2409.02889)

<https://github.com/FreedomIntelligence/LongLLaVA>

### Molmo

[号称击败Claude 3.5 Sonnet，媲美GPT-4o，开源多模态模型Molmo挑战Scaling law](https://mp.weixin.qq.com/s/9s9sIkP-KDlUuJdlktVT9w)

[Molmo and PixMo: Open Weights and Open Data for State-of-the-Art Multimodal Models](https://molmo.allenai.org/paper.pdf)

### Playground

[文生图参数量升至240亿！Playground v3发布：深度融合LLM，图形设计能力超越人类](https://mp.weixin.qq.com/s/P8rieQj_-KoY0H-HfwN5hA)

[Playground v3: Improving Text-to-Image Alignment with Deep-Fusion Large Language Models](https://arxiv.org/abs/2409.10695)

### REPA

[扩散模型训练方法一直错了！谢赛宁：Representation matters](https://mp.weixin.qq.com/s/a725rxzvyQXqNJoL1NsMaA)

[Representation Alignment for Generation: Training Diffusion Transformers Is Easier Than You Think](https://arxiv.org/pdf/2410.06940)

<https://github.com/sihyun-yu/REPA>

### LLaVA-Critic

[Evaluation is All You Need！首个开源多模态大模型通用评测器LLaVA-Critic](https://mp.weixin.qq.com/s/YweRqZrHJmISVjJWamalQg)

[LLaVA-Critic: Learning to Evaluate Multimodal Models](https://arxiv.org/abs/2410.02712)

### MM1.5

[苹果多模态模型大升级！文本密集、多图理解，全能小钢炮](https://mp.weixin.qq.com/s/jIevs7L4zwWOWzXM4nx62A)

[MM1.5: Methods, Analysis & Insights from Multimodal LLM Fine-tuning](https://arxiv.org/pdf/2409.20566)

### SCMs

[OpenAI攻克扩散模型短板，清华校友路橙、宋飏合作最新论文](https://mp.weixin.qq.com/s/tDlp95HLlvYqW2gVPqzQag)

[刚刚，OpenAI发布sCM提升50倍效率，扩散模型重大技术突破！](https://mp.weixin.qq.com/s/dI9mSCDbGzZIkjol_CT6Cg)

[比扩散模型快50倍！OpenAI发布多模态模型实时生成进展，作者还是清华校友，把休假总裁Greg都炸出来了](https://mp.weixin.qq.com/s/3h_mxCij5_owicnfsHhp_Q)

[Simplifying, Stabilizing & Scaling Continuous-Time Consistency Models](https://arxiv.org/pdf/2410.11081v1)

### Janus

[DeepSeek新作Janus：解耦视觉编码，引领多模态理解与生成统一新范式](https://mp.weixin.qq.com/s/Ao5V0ICGX3X2HWfIw23YAQ)

[Janus: Decoupling Visual Encoding for Unified Multimodal Understanding and Generation](https://arxiv.org/pdf/2410.13848)

<https://github.com/deepseek-ai/Janus>

<https://huggingface.co/spaces/deepseek-ai/Janus-1.3B>

### OmniGen

[新扩散模型OmniGen一统图像生成，架构还高度简化、易用](https://mp.weixin.qq.com/s/mzs96Oav3pfj22YoYJPILQ)

[OmniGen: Unified Image Generation](https://arxiv.org/pdf/2409.11340)

<https://github.com/VectorSpaceLab/OmniGen>

### LLM2CLIP

[跨模态大升级！少量数据高效微调，LLM教会CLIP玩转复杂文本](https://mp.weixin.qq.com/s/2cp9umZtOQdZLYwiB3e_5g)

[LLM2CLIP: POWERFUL LANGUAGE MODEL UNLOCKS RICHER VISUAL REPRESENTATION](https://arxiv.org/pdf/2411.04997)

<https://github.com/microsoft/LLM2CLIP>

### TFG

[NeurIPS Spotlight｜从分类到生成：无训练的可控扩散生成](https://mp.weixin.qq.com/s/9COLxKc7RQaPpEmE-YIfgw)

[TFG: Unified Training-Free Guidance for Diffusion Models](https://arxiv.org/abs/2409.15761)

<https://github.com/YWolfeee/Training-Free-Guidance>

### Deepseek-VL2

[久等了，DeepSeek-VL2](https://mp.weixin.qq.com/s/rE6Dh_OzolgDTAh3ubM5KA)

<https://github.com/deepseek-ai/DeepSeek-VL2>

[DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding](https://github.com/deepseek-ai/DeepSeek-VL2/blob/main/DeepSeek_VL2_paper.pdf)

* 数据：比一代 DeepSeek-VL 多一倍优质训练数据，引入梗图理解、视觉定位、视觉故事生成等新能力
* 架构：视觉部分使用切图策略支持动态分辨率图像，语言部分采用MoE架构低成本高性能
* 训练：继承DeepSeek-VL的三阶段训练流程，同时通过负载均衡适配图像切片数量不定的困难，对图像和文本数据使用不同流水并行策略，对MoE语言模型引入专家并行，实现高效训练

### Florence-VL

[Florence-VL来了！使用生成式视觉编码器，重新定义多模态大语言模型视觉信息](https://mp.weixin.qq.com/s/sAf-FxUithvgA6noaew4sQ)

[Florence-VL: Enhancing Vision-Language Models with Generative Vision Encoder and Depth-Breadth Fusion](https://arxiv.org/pdf/2412.04424)

<https://github.com/JiuhaiChen/Florence-VL>

### metamorph

[统一视觉理解与生成，MetaMorph模型问世，LeCun、谢赛宁、刘壮等参与](https://mp.weixin.qq.com/s/Q0obsptFhlZ-R9xH3LCGVw)

[MetaMorph: Multimodal Understanding and Generation via Instruction Tuning](https://arxiv.org/pdf/2412.14164v1)

### seedream2.0

[豆包文生图技术报告发布！数据处理、预训练、RLHF全流程公开](https://mp.weixin.qq.com/s/3E4s2c7TcWQ_g_6DdJPJkQ)

[Seedream 2.0: A Native Chinese-English Bilingual Image Generation Foundation Model](https://arxiv.org/pdf/2503.07703)

### 多模态推荐系统

[多模态推荐系统新突破，一文读懂前沿进展！](https://mp.weixin.qq.com/s/YDna7dvC55yWL61r8PljoQ)

[Multimodal Recommender Systems: A Survey](https://arxiv.org/pdf/2302.03883)

<https://github.com/Applied-Machine-Learning-Lab/Awesome-Multimodal-Recommender-Systems>

BM3：[Bootstrap Latent Representations for Multi-modal Recommendation](https://arxiv.org/pdf/2207.05969)

EM3：[End-to-end training of Multimodal Model and ranking Model](https://arxiv.org/pdf/2404.06078v1)

[Multimodal Pretraining, Adaptation, and Generation for Recommendation: A Survey](https://arxiv.org/pdf/2404.00621).. KDD24

### gpt4o生图

[刚刚，GPT-4o原生图像生成上线，P图、生图也就一嘴的事](https://mp.weixin.qq.com/s/K0A5aWKq-GraauEyx0ixkA)

[Addendum to GPT-4o System Card: Native image generation](https://cdn.openai.com/11998be9-5319-4302-bfbf-1167e093f1fb/Native_Image_Generation_System_Card.pdf)

[GPT-4o图像生成的秘密，OpenAI 没说，网友已经拼出真相？](https://mp.weixin.qq.com/s/VTFlEUEZF0WtEoEBquDrKg)

* 猜想1：自回归 + 扩散
  * 先生成视觉token，再由扩散模型将其解码到像素空间。
  * 使用的扩散方法是类似于Rolling Diffusion([Rolling Diffusion Models](https://arxiv.org/abs/2402.09470))的分组扩散解码器([Sequential Data Generation with Groupwise Diffusion Process](https://arxiv.org/abs/2310.01400))，会以从上到下的顺序进行解码。参考[Transfusion: Predict the Next Token and Diffuse Images with One Multi-Modal Model](https://arxiv.org/abs/2408.11039)
* 猜想2：非扩散的自回归生成
  * 是一种自回归模型，通过多次通过来逐像素地生成图像，而不是像扩散模型那样执行去噪步骤。

### Web-SSL

[CLIP被淘汰了？LeCun谢赛宁新作，多模态训练无需语言监督更强！](https://mp.weixin.qq.com/s/FpisxJQ9AXHV26lHPwzy5A)

[Scaling Language-Free Visual Representation Learning](https://arxiv.org/pdf/2504.01017)

<https://github.com/dfan/webssl>

### UNO

[字节开源新生图模型：一个模型统一所有生图任务，多主体融合效果SOTA​](https://mp.weixin.qq.com/s/h4fkShoOG_Fi66fksXaJGw)

[Less-to-More Generalization: Unlocking More Controllability by In-Context Generation](https://arxiv.org/abs/2504.02160)

<https://github.com/bytedance/UNO>

<https://bytedance.github.io/UNO/>

### Seedream

[Mogao=Seedream 3.0？霸榜数天，神秘文生图模型曝光（附技术报告）](https://mp.weixin.qq.com/s/GcmIQL78fIl-dobAsqbfeg)

[Seedream 3.0 Technical Report](https://arxiv.org/abs/2504.11346)

### Seed-1.5 embedding

[向量检索能力SOTA，字节Seed1.5-Embedding模型训练细节公开](https://mp.weixin.qq.com/s/gBcUyNxE1aqq_3wXksmOzA)。。没开源

* 设计两阶段对比学习训练流程并精心构造训练数据，充分强化模型的通用表征能力；
* 从预训练和后训练语料中，构造出推理密集型检索数据（需要深度理解查询和文档的匹配关系，而非简单的字面匹配或语义匹配），并用其优化模型；
* 使用MoE模型作为基座，并通过MRL训练支持多个向量维度，实现较高的运行速度和灵活的存储开销。

### 其他

[​近期必看的多模态大模型进展：从Qwen2-VL到Pixtral](https://mp.weixin.qq.com/s/r0HipvOkZhHaDxfGsyIgOg)

## 多模态（视频）

### SORA

[OpenAI首个AI视频模型炸裂登场，彻底端掉行业饭碗！60秒一镜到底惊人，世界模型真来了？](https://mp.weixin.qq.com/s/93z4Ta91yLv7PB1pnBM9mg)

<https://openai.com/sora>

<https://openai.com/research/video-generation-models-as-world-simulators>

[一锤降维！解密OpenAI超级视频模型Sora技术报告，虚拟世界涌现了](https://mp.weixin.qq.com/s/ODsebK3fEc-adRDwRVDhQA)

[Sora爆火48小时：杨立昆揭秘论文，参数量或仅30亿](https://new.qq.com/rain/a/20240217A05YVR00)

[微软37页论文逆向工程Sora，得到了哪些结论？](https://mp.weixin.qq.com/s/5-pySWU40omjBowsV2WCKA)

[攻陷短视频后，Sora将需要72万块H100 GPU](https://mp.weixin.qq.com/s/X-MNijIUU5XKYb4vfYtVZg)

[Sora: A Review on Background, Technology, Limitations, and Opportunities of Large Vision Models](https://arxiv.org/pdf/2402.17177.pdf)

[Sora之后，OpenAI Lilian Weng亲自撰文教你从头设计视频生成扩散模型](https://mp.weixin.qq.com/s/C8JoiTHwW7T-g66EBPcfDg)

<https://lilianweng.github.io/posts/2024-04-12-diffusion-video/>

整体感觉：

* latent diffusion的隐空间
* vit和swin transformer的patch

#### 现有方法

现有的视频生成方法大多只能用于少数分类的视频、比较短的视频，或者固定长度的视频。

* recurrent networks
  * 2015年的[Unsupervised learning of video representations using lstms](https://arxiv.org/pdf/1502.04681.pdf)
  * 2017年的[Recurrent environment simulators](https://arxiv.org/pdf/1704.02254.pdf)
  * 2018年的[World models](https://arxiv.org/pdf/1803.10122.pdf)
* generative adversarial networks
  * 2016年的[Generating videos with scene dynamics](https://arxiv.org/pdf/1609.02612.pdf)
  * 2018年的[Mocogan: Decomposing motion and content for video generation](https://arxiv.org/pdf/1707.04993.pdf)
  * 2019年的[Adversarial video generation on complex datasets](https://arxiv.org/pdf/1907.06571.pdf)
  * 2022年的[Generating long videos of dynamic scenes](https://arxiv.org/pdf/2206.03429.pdf)
* autoregressive transformers
  * 2021年的[Videogpt: Video generation using vq-vae and transformers](https://github.com/daiwk/collections/tree/master/posts/\(https:/arxiv.org/pdf/2104.10157.pdf\))
  * 2022年的[Nüwa: Visual synthesis pre-training for neural visual world creation](https://arxiv.org/pdf/2111.12417.pdf)
* diffusion models
  * 2022年的[Imagen video: High definition video generation with diffusion models](https://arxiv.org/pdf/2210.02303.pdf)
  * 2023年的[Align your latents: High-resolution video synthesis with latent diffusion models](https://arxiv.org/pdf/2304.08818.pdf)

前两类太古老了，sora把后面两个（autogressive transformers和diffusion models）结合在一起了，而且能同时处理不同时长、分辨率的**视频和图像**

#### 将视频转成spacetime latent patches

**Vivit**

&#x20;

[Vivit: A video vision transformer](https://arxiv.org/pdf/2103.15691.pdf)

整体受ViT的启发

![vivit](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a7eee48e9aa3bb3ce22b2e0274a952d3109c178e%2Fvivit.png?alt=media)

先分patch，再分别过时间的transformer（temporal transformer）和空间的transformer（spatial transformer）

![tubelet-embedding](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-de0338ab4a35635a5cf8c917ab6e25867062fe2c%2Ftubelet-embedding.png?alt=media)

具体的分patch方式如上图

**latent空间上的patch**

&#x20;

![spacetime-patches](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-945fa0dd46aec60f1b013391424c8328ba19a205%2Fspacetime-patches.png?alt=media)

参考stable-diffusion，即[High-Resolution Image Synthesis with Latent Diffusion Models](https://arxiv.org/abs/2112.10752)，把patch切分改成在latent空间上进行

* 将视频映射成**隐空间**(latent space)的表示
* 把隐空间的表示切分成**spacetime patches**

预估时，可以通过在一个合适大小的grid里排列随机初始化的patches（we can control the size of generated videos by arranging randomly-initialized patches in an appropriately-sized grid.）来控制生成视频的大小。估计是参考了下面这篇：

论文参考了这个[Patch n'Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution](https://arxiv.org/pdf/2307.06304.pdf)，可以使下面提到的DiT适应各种分辨率/持续时间/宽高比。

#### Diffusion Transformer

[Scalable diffusion models with transformers](https://arxiv.org/pdf/2212.09748.pdf)提出了DiT，替换stable diffusion中的u-net

![Dit](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-61ede40c5becc3e09d9b600059b45bb9d9a2d5b7%2FDit.png?alt=media)

**DiT=VAE编码器+ ViT + DDPM + VAE解码器**

sora是一个扩散模型，输入加了噪声的patches，还可以加上一些如text prompt的条件，预测原本『干净』的patches。

之前的做法大多将视频全裁成相同长度和大小的，例如4s的$$256\times 256$$，sora可以直接用原始视频

#### 语言理解

参考DALL-E3 ([Improving Image Generation with Better Captions](https://cdn.openai.com/papers/dall-e-3.pdf))，训练了一个highly descriptive的视频描述生成器，拿这个生成器给训练集中的所有视频重新生成描述，再拿来训练。

此外，还用上了GPT，将用户输入的短的prompt改写成更长更详细的视频描述用于生成。

#### 使用图像/视频作为prompt

* **图像转动画**：可以让静止的图像动起来
* **扩展视频**：可以对视频进行扩展（extend），在时间轴上向前或者向后进行延展（比如同样是一个石头落地，能生成4个视频，每个视频里的石头从不同的地方飞过来，落在同一个地面上）
* **编辑视频**：输入视频和一个文本prompt，能够对视频进行编辑，例如把场景从沙漠替换成树林，类似[Sdedit: Guided image synthesis and editing with stochastic differential equations](https://arxiv.org/pdf/2108.01073.pdf)
* **连接视频**：输入两个看似毫不相关的视频，能通过很自然的方式把这两个视频衔接在一起

#### 生成图像

图像就是一帧的视频，可以通过在时间范围为一帧的空间grid中排列高斯噪声patches（arranging patches of Gaussian noise in a spatial grid with a temporal extent of one frame）来生成图像，同样能生成不同分辨率的图像，最多$$2048\times 2048$$

#### 涌现的模拟能力

* **3D一致性**：随着镜头的移动，视频中的人物或物体在3d空间中能在移动中保持一致
* **Long-range coherence and object permanence（远程连贯性和物体持久性）**：sora能对短期和长期依赖关系进行建模，例如：
  * 可以保留人物体，即使它们被遮挡或离开当前帧。
  * 可以在单个样本中生成同一角色的多个镜头，并在整个视频中保持其外观的不变
* **与世界交互**：例如画家可以在画布上留下新的笔触，并随着时间的推移而持续存在，人吃东西能留下齿痕
* **模拟数字世界**：可以同时通过基本策略控制《我的世界》中的玩家，同时以高保真度渲染世界及其动态，只需要在prompt里提到“我的世界”的标题就可以实现。

#### 存在的问题

* 不能准确地模拟许多基本相互作用的物理过程，例如玻璃破碎。
* 其他交互（例如吃食物）并不总是会产生对象状态的正确变化，例如长时间样本中出现的不连贯性或对象的自发出现。

### open-sora（Colossal-AI）

[没等来OpenAI，等来了Open-Sora全面开源](https://mp.weixin.qq.com/s/vdr1WBCQVr9aS6bJYcdlRA)

[Open-Sora全面开源升级：支持16s视频生成和720p分辨率](https://mp.weixin.qq.com/s/a-FULV7mSskHFar5glbSxg)

#### 模型架构

v1版本：<https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_v1.md>

v2版本：<https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_02.md>

**VAE部分**

&#x20;

sora用了spatial-temporal VAE来降低temporal的维度，但并没有开源且高质量的spatial-temporal VAE：

* [MAGVIT](https://github.com/google-research/magvit)：的$$4\times 4\times 4$$的VAE并没有开源
* [VideoGPT](https://github.com/wilson1yan/VideoGPT)：的$$2\times 4\times 4$$的VAE在实验中效果不好

因此，使用<https://huggingface.co/stabilityai/sd-vae-ft-mse-original>的2D VAE

对于24fps的1min视频，有$$24\times 60=1440$$帧，用4倍的VAE下采样和2倍的patch size下采样，有大约$$1440\times \approx 1.5M$$的token。对这些token算全部的attention的计算开销很大，所以参考[Latte: Latent Diffusion Transformer for Video Generation](https://arxiv.org/pdf/2401.03048v1.pdf)(代码<https://github.com/Vchitect/Latte>)的方案，使用**spatial-temporal attention**来减小计算量。

以下是latte的4个变种

![latte](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a60b10a4f5b4fde3ee501aa8f18a5da918268a41%2Flatte.png?alt=media)

STDiT(sequential)和latte的变种3类似，STDiT(parallel)和latte的变种4类似，在$$16\times 256\times 256$$的视频上，发现效果如下，最终采用了STDiT(sequential)。

$$
DiT (full) > STDiT (Sequential) > STDiT (Parallel) \approx Latte
$$

![stdit](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-80cb39d77742c725334b40ef5766e6e31eb5259b%2Fstdit.png?alt=media)

**生成部分**

&#x20;

[PixArt-α: Fast Training of Diffusion Transformer for Photorealistic Text-to-Image Synthesis](https://arxiv.org/pdf/2310.00426.pdf)使用**T5作为条件**的**DiT**结构，能生成高质量的图像。用PixArt-α对模型初始化，并对**插入的temperal attentioin**用0初始化，能够让模型一开始就保留图片生成的能力。插入的attention让参数量从580M涨到了724M。

![pixart-alpha-temperal](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-206638e3da9b58cf3fe72b2fe3eb0622ef4bb1c8%2Fpixart-alpha-temperal.png?alt=media)

**训练**

&#x20;

参考PixArt-α和Stable Video Diffusioin([Stable Video Diffusion: Scaling Latent Video Diffusion Models to Large Datasets](https://arxiv.org/pdf/2311.15127.pdf))，采用了progressive的训练策略：

* 大规模图像预训练：前面提到的，直接使用<https://huggingface.co/stabilityai/sd-vae-ft-mse-original>的2D VAE
* 大规模视频预训练：在质量相对差的366K的预训练数据集(HD-VG-130M数据集)上训练$$16\times 256\times 256$$，这里的16指的是16帧
* 高质量视频数据微调：在高质量的20K的数据集(Pexels数据集)上训练$$16\times 256\times 256$$、$$16\times 512\times 512$$和$$64\times 512\times 512$$。

由于使用了scaled position embedding，这个策略极大地减少了训练消耗。此外，对于16帧的训练，每3帧降采样一次，对于64帧的训练每2帧降采样一次。

数据标注方法：抽取3帧，然后设计prompt，用LLaVA生成高质量的标题：

![llava-caption](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8e325450185a82411c0c845f393b66068e64b6d6%2Fllava-caption.png?alt=media)

* 学习率：1e-4太大了，改成了2e-5
* **batchsize比较大**的时候，**fp16比bf16更不稳定**，而且可能导致生成错误，所以对于$$64\times 512\times 512$$使用**bf16**

提供了便捷的视频数据预处理脚本，可以轻松地在自己的数据集上快速生成训练所需的视频 / 文本对，包括公开视频数据集下载，长视频根据镜头连续性分割为短视频片段，使用开源LLaVA生成精细的提示词。

### open-sora(北大版)

[超10秒高分辨率，北大Open Sora视频生成更强了，还支持华为芯片](https://mp.weixin.qq.com/s/1GWxp8ENrA1YGGwrFpOAxA)

### MORA

[Sora不开源，微软给你开源！全球最接近Sora视频模型诞生，12秒生成效果逼真炸裂](https://mp.weixin.qq.com/s/GkJwyVFVwxih-ZQWWBIuNg)

[复刻Sora的通用视频生成能力，开源多智能体框架Mora来了](https://mp.weixin.qq.com/s/JbiwVtEuKvIjb8hBi0Laxg)

[Mora: Enabling Generalist Video Generation via A Multi-Agent Framework](https://arxiv.org/pdf/2403.13248.pdf)

### minigpt4-video

[AI视频理解天花板，全新MiniGPT4-Video刷爆SOTA！宝格丽宣传片配文一绝](https://mp.weixin.qq.com/s/Y8w6CqTvm7zVQMOmTuxePA)

### mini-gemini

[刷爆多模态任务榜单！贾佳亚团队Mini-Gemini登热榜，代码、模型、数据全部开源](https://mp.weixin.qq.com/s/j5CGuJ_-Sf0Pqi_-dDjABA)

模型地址：<https://huggingface.co/collections/YanweiLi/mini-gemini-6603c50b9b43d044171d0854> 数据地址：<https://huggingface.co/collections/YanweiLi/mini-gemini-data-660463ea895a01d8f367624e>

[Mini-Gemini: Mining the Potential of Multi-modalityVision Language Models](https://arxiv.org/pdf/2403.18814.pdf)

VLM(vision lm)虽然有很多，但和gemini、gpt-4等的差距还是比较大，作者认为主要原因是**高分辨率视觉标记不够**、**vision推理数据质量不高**。

![mini-gemini](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-69e744242355be1f9226be653226e4f5b7e77436%2Fmini-gemini.png?alt=media)

作者利用**额外的视觉编码器**进行**高分辨率细化**，构建了一个高质量的数据集。构建了一个Mini-Gemini架构，支持一系列从2B到34B的密集和MoE LLM，在zero-shot测试集上超过了私有模型。

<https://github.com/dvlab-research/MiniGemini>

### Vidu

[当前最强国产Sora！清华团队突破16秒长视频，懂多镜头语言，会模拟物理规律](https://mp.weixin.qq.com/s/xAEYGIoJ0EzhszfmXno3UA)

采用了和 Sora 完全一致的 Diffusion 和 Transformer 融合的架构，底层基于[All are Worth Words: A ViT Backbone for Diffusion Models](https://arxiv.org/pdf/2209.12152)的 U-ViT 架构。

基于 U-ViT 架构，2023 年 3 月，团队在开源的大规模图文数据集 LAION-5B 上训练了 10 亿参数量的多模态模型 ——UniDiffuser，并将其开源（参见[清华朱军团队开源首个基于 Transformer 的多模态扩散大模型，文图互生、改写全拿下](https://mp.weixin.qq.com/s/B68hXlFxA9L5jiWiMrEEiA)）。

UniDiffuser 主要擅长图文任务，能支持图文模态间的任意生成和转换。UniDiffuser 的实现有一项重要的价值 —— 首次验证了融合架构在大规模训练任务中的可扩展性（Scaling Law），相当于将 U-ViT 架构在大规模训练任务中的所有环节流程都跑通。

这些在图文任务中积累的工程经验为视频模型的研发打下了基础。因为视频本质上是图像的流，相当于是图像在时间轴上做了一个扩增。因此，在图文任务上取得的成果往往能够在视频任务中得到复用。Sora 就是这么做的：它采用了 DALL-E 3 的重标注技术，通过为视觉训练数据生成详细的描述，使模型能够更加准确地遵循用户的文本指令生成视频。这种效应也必然会发生在「Vidu」上面。

根据此前的消息推测，「Vidu」也复用了生数科技在图文任务的很多经验，包括训练加速、并行化训练、低显存训练等等，从而快速跑通了训练流程。据悉，他们通过视频数据压缩技术降低输入数据的序列维度，同时采用自研的分布式训练框架，在保证计算精度的同时，通信效率提升 1 倍，显存开销降低 80%，训练速度累计提升 40 倍。

### Vidu 1.5

[视觉模型学会LLM独门秘籍「上下文记忆」，迎来智能涌现的大爆发！](https://mp.weixin.qq.com/s/vXE1_Spya2BsZxWuD6LBOA)

### gen-3

[Runway版Sora发布：高保真、超强一致性，Gen-3 Alpha震撼到网友了](https://mp.weixin.qq.com/s/uuLub-ruJgYYrTOFoNJ5iw)

### 可灵

[快手「可灵」爆火：海外AI圈巨震，中国版Sora一号难求](https://mp.weixin.qq.com/s/iSAvV3PX1WYwGg7rU60Ong)

[快手可灵凭什么频繁刷屏？揭秘背后三项重要研究](https://mp.weixin.qq.com/s/CNl224oFUMCCHxOAKgo84Q)

* 数据集：Koala-36M
  * [A Large-scale Video Dataset Improving Consistency between Fine-grained Conditions and Video Content](https://arxiv.org/abs/2410.08260)
  * <https://github.com/KwaiVGI/Koala-36M>
* 视频生成领域的 Scaling Law：[Towards Precise Scaling Laws for Video Diffusion Transformers](https://arxiv.org/abs/2411.17470)
* 通用世界模型：[Owl-1: Omni World Model for Consistent Long Video Generation](https://arxiv.org/abs/2412.09600)
  * <https://github.com/huang-yh/Owl>

[可灵视频生成可控性为什么这么好？快手又公开了四篇研究](https://mp.weixin.qq.com/s/3NI9YITmCrd8cDT1YMlA9A)

### 长视频LongVA

[7B最强长视频模型！ LongVA视频理解超千帧，霸榜多个榜单](https://mp.weixin.qq.com/s/62rMYx94dbz1HwDkZclXtA)

[Long Context Transfer from Language to Vision](https://arxiv.org/pdf/2406.16852)

### LONGVILA

[支持1024帧、准确率近100％，英伟达「LongVILA」开始发力长视频](https://mp.weixin.qq.com/s/T6eMi3DPq9_291bWqcFRgw)

[LONGVILA: SCALING LONG-CONTEXT VISUAL LANGUAGE MODELS FOR LONG VIDEOS](https://arxiv.org/pdf/2408.10188)

<https://github.com/NVlabs/VILA/blob/main/LongVILA.md>

### liveportrait

[快手开源LivePortrait，GitHub 6.6K Star，实现表情姿态极速迁移](https://mp.weixin.qq.com/s/JrKF_7To8PEggEfw7W09ew)

[LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control](https://arxiv.org/pdf/2407.03168)

<https://github.com/KwaiVGI/LivePortrait>

### diffusion forcing

[无限生成视频，还能规划决策，扩散强制整合下一token预测与全序列扩散](https://mp.weixin.qq.com/s/kz4RvqdK6nGtA11y5nq5xQ)

[Diffusion Forcing:Next-token Prediction Meets Full-Sequence Diffusion](https://arxiv.org/pdf/2407.01392)

<https://github.com/buoyancy99/diffusion-forcing>

### VideoSys

[视频生成要有自己的系统！尤洋团队历时半年开源VideoSys](https://mp.weixin.qq.com/s/Q-AHzIOT0PBP6Yvdk_T3Sg)

<https://github.com/NUS-HPC-AI-Lab/VideoSys>

#### Pyramid Attention Broadcast (PAB)

[Real-Time Video Generation with Pyramid Attention Broadcast](https://arxiv.org/abs/2408.12588)

<https://github.com/NUS-HPC-AI-Lab/VideoSys/blob/master/docs/pab.md>

#### Dyanmic Sequence Parallelism（DSP）

[DSP: Dynamic Sequence Parallelism for Multi-Dimensional Transformers](https://arxiv.org/abs/2403.10266)

<https://github.com/NUS-HPC-AI-Lab/VideoSys/blob/master/docs/dsp.md>

### GameNGen

[扩散模型做游戏引擎，单TPU 20 FPS模拟毁灭战士，谷歌最新GameNGen太博眼球了](https://mp.weixin.qq.com/s/LvjhY9Gzd_lnE3M3MllKDA)

### Firefly

[厉害了！Adobe新出Firefly视频模型，2分钟速成高清大片](https://mp.weixin.qq.com/s/uFKQNGuoZ2bS4Ea0pye71Q)

<https://blog.adobe.com/en/publish/2024/09/11/bringing-gen-ai-to-video-adobe-firefly-video-model-coming-soon>

### MovieGen

[Meta又给OpenAI一记重击，视频生成Movie Gen震撼登场，甚至可以配音、编辑](https://mp.weixin.qq.com/s/c8_sXLRkwEVvg_LKCPQHKw)

[Meta版Sora无预警来袭！抛弃扩散损失，音视频生成/画面编辑全包，92页论文无保留公开](https://mp.weixin.qq.com/s/rs7JQigqHO9yT_0wbF6cTg)

[MovieGen: A Cast of Media Foundation Models](https://ai.meta.com/static-resource/movie-gen-research-paper)

### EMOVA

[mini-GPT4o来了? 能看、能听、会说，还情感丰富的多模态全能助手EMOVA](https://mp.weixin.qq.com/s/e2KkDjqbWNy7wSv0geCNUg)

[EMOVA: Empowering Language Models to See, Hear and Speak with Vivid Emotion](https://arxiv.org/abs/2409.18042)

### LLaVA-Video

[突破视频多模态大模型瓶颈！「合成数据」立大功，项目已开源](https://mp.weixin.qq.com/s/d2jWyKsqTlk_9LSttESySw)

[VIDEO INSTRUCTION TUNING WITH SYNTHETIC DATA](https://arxiv.org/pdf/2410.02713)

### Emu3

[视频、图像、文本，只需基于下一个Token预测：智源Emu3发布，验证多模态模型新范式](https://mp.weixin.qq.com/s/csqFAkjziwx34aAxKj9-gQ)

<https://github.com/baaivision/Emu3>

[Emu3: Next-Token Prediction is All You Need](https://arxiv.org/pdf/2409.18869)

<https://huggingface.co/collections/BAAI/emu3-66f4e64f70850ff358a2e60f>

### hunyuan-video

[腾讯版Sora发布即开源！130亿参数，模型权重、推理代码全开放](https://mp.weixin.qq.com/s/6_ciIeZBqkFMuizUmjKV4Q)

[HunyuanVideo: A Systematic Framework For Large Video Generative Models](https://github.com/Tencent/HunyuanVideo/blob/main/assets/hunyuanvideo.pdf)

<https://github.com/Tencent/HunyuanVideo>

### STIV

(toread)

[Sora之后，苹果发布视频生成大模型STIV，87亿参数一统T2V、TI2V任务](https://mp.weixin.qq.com/s/6mbe80LmzkH-5eGgIys6PQ)

[STIV: Scalable Text and Image Conditioned Video Generation](https://arxiv.org/pdf/2412.07730)

### Veo 2

[谷歌版Sora升级4K高清！一句话控制镜头运动，跑分叫板可灵海螺](https://mp.weixin.qq.com/s/8-H286tyxbTeZrtEBDZHaA)

<https://deepmind.google/technologies/veo/veo-2/>

### Veo 3

[谷歌Veo 3论文竟无一作者来自美国！揭秘零样本「看懂」世界](https://mp.weixin.qq.com/s/7XZNAlAH-CkF8_1gL0p5VA)

[Video models are zero-shot learners and reasoners](https://arxiv.org/abs/2509.20328)

..就是个评测而已，提到了chain-of-frames（CoF），相关的工作可以看[CoT 之后，CoF 如何让帧间逻辑从「隐式对齐」变成「显式思考」？](https://pro.jiqizhixin.com/reference/e1bd460e-a706-4965-a1bb-b3b072c89be4)

### 通义万相

[通义万相视频生成重磅升级，成功登顶VBench，运镜、质感直达专业级](https://mp.weixin.qq.com/s/YFnftO_sKQ_d6AM5J-W8YQ)

<https://tongyi.aliyun.com/wanxiang/>

[开源的风吹到视频生成：阿里开源登顶VBench的万相大模型，一手实测来了！](https://mp.weixin.qq.com/s/SRj06E-VCSpCiQZqE0gpHA)

[万相，开源！](https://mp.weixin.qq.com/s/l9EhkiwgsIL2aYfE0JcR4A)

[阿里开源全能视频模型！生成编辑都精通，1.3B版本消费级显卡可跑](https://mp.weixin.qq.com/s/U8plksUWusZM19kjBAzODA)

<https://github.com/Wan-Video>

<https://huggingface.co/Wan-AI>

完整示例代码

```shell
export https_proxy="xxx"

git clone https://github.com/Wan-Video/Wan2.1.git
cd Wan2.1

pip3 install -r requirements.txt

#pip3 install "huggingface_hub[cli]"
#huggingface-cli download Wan-AI/Wan2.1-T2V-14B --local-dir ./Wan2.1-T2V-14B

hdfs dfs -get /xx/xxx/Wan2.1-T2V-14B . # 如果已经下完了

sudo apt update
sudo apt install libgl1

pip3 install --upgrade flash-attn

pip3 install "xfuser>=0.4.1"
torchrun --nproc_per_node=8 generate.py --task t2v-14B \
  --size 1280*720 \
  --ckpt_dir ./Wan2.1-T2V-14B \
  --dit_fsdp --t5_fsdp --ulysses_size 8 \
  --prompt "一只猫在大街上跑" \
  --save_file "demo.mp4"
```

[阿里开源电影级AI视频模型！MoE架构，5B版本消费级显卡可跑](https://mp.weixin.qq.com/s/RKR16Qw1BdvlVSLMrj17lg?scene=1)

<https://github.com/Wan-Video/Wan2.2>

### Tarsier2

[年末惊喜！ByteDance Research视频理解大模型「眼镜猴」正式发布](https://mp.weixin.qq.com/s/tVr-QidbmA9AudaXaNOKgA)

[Tarsier2: Advancing Large Vision-Language Models from Detailed Video Description to Comprehensive Video Understanding](https://arxiv.org/abs/2501.07888)

### VideoWorld

[Seed Research | 视频生成模型最新成果，可仅靠视觉认知世界！现已开源](https://mp.weixin.qq.com/s/mXaktIsD3w5BgCJQb6R7xQ)

[VideoWorld: Exploring Knowledge Learning from Unlabeled Videos](https://arxiv.org/abs/2501.09781)

<https://github.com/bytedance/VideoWorld>

### Sky-Reels

[中国首个AI短剧模型开源，4090秒生好莱坞级大片！人人拍短剧时代来临](https://mp.weixin.qq.com/s/iBIITjzltWjEeLIoADbFKw)

[SkyReels-A1: Expressive Portrait Animation in Video Diffusion Transformers](https://skyworkai.github.io/skyreels-a1.github.io/report.pdf)

<https://github.com/SkyworkAI/SkyReels-V1>

<https://github.com/SkyworkAI/SkyReels-A1>

### Seaweed-7B

[Seaweed-7B: Cost-Effective Training of Video Generation Foundation Model](https://arxiv.org/pdf/2504.08685)

### DAM

[英伟达开源「描述一切」模型，拿下7个基准SOTA](https://mp.weixin.qq.com/s/FhARyS4bkqY3A6Z7ihmZcA)

[Describe Anything: Detailed Localized Image and Video Captioning](https://arxiv.org/pdf/2504.16072)

DAM(Describe Anything Model)多模态大语言模型，可以生成图像或视频中特定区域的详细描述。用户可以使用点、框、涂鸦或蒙版来指定区域，DAM将提供这些区域丰富的上下文描述。

### Sparse VideoGen

[ICML 2025 | 视频生成模型无损加速两倍，秘诀竟然是「抓住attention的时空稀疏性」](https://mp.weixin.qq.com/s/3gA0JVDuc5naWvaowOtQqQ)

[Sparse VideoGen: Accelerating Video Diffusion Transformers with Spatial-Temporal Sparsity](https://arxiv.org/abs/2502.01776)

<https://github.com/svg-project/Sparse-VideoGen>

完全无需重新训练模型的视频生成加速方法。通过挖掘注意力机制中的空间与时间稀疏性，配合自适应稀疏选择与算子优化，成功将推理时间减半。

### AdaCM2

[CVPR 2025 Highlight｜AdaCM2：首个面向超长视频理解的跨模态自适应记忆压缩框架](https://mp.weixin.qq.com/s/6UEwXmHa25mu7W8FIE5ZFg)

[AdaCM2: On Understanding Extremely Long-Term Video with Adaptive Cross-Modality Memory Reduction](https://arxiv.org/pdf/2411.12593)

### Seedance

[Seedance 1.0 视频生成模型技术报告公开](https://mp.weixin.qq.com/s/nKJ-GJvdxzc5Jz14yAxRRQ)

<https://seed.bytedance.com/seedance>

[Seedance 1.0: Exploring the Boundaries of Video Generation Models](https://arxiv.org/pdf/2506.09113)

### 百度商业化视频生成

[百度商业视频生成大模型工程优化实践](https://mp.weixin.qq.com/s/nUFnwnyHo2EKiY9ThzFGKA)

### inSai Hilight

[跨境电商版Sora发布：全球首个AI原生电商视频Multi-Agent来了](https://mp.weixin.qq.com/s/-g6hRrvr1YyMiuZvwOLQcw)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-18e72b5a0df59137dd2695500be074db4fd5c85d%2Finsail-hilight.png?alt=media)

* 理解与洞察层：4个Agent接收到需求后，负责理解用户输入的需求和素材，像资深策划一样拆解需求、洞察「卖点」和受众，从而将模糊需求变成精准的营销指令。
* 创意与结构层：4个Agent负责「努力干活」，创意Agent写脚本，剧本策划Agent会拆成详细带有时间轴的分镜，紧接着素材匹配Agent进行素材匹配，以及定向优化/修复，目的就是将「好想法」变成能被执行的视频结构，将其交付给下一层级执行。
* 执行与成片层：剪辑执行Agent和成片生成Agent负责把所有的素材进行按轨道、时间排列成片。最后，质检复盘Agent还会对成片质量进行最终检验，以保证最终输出一个完整的、可投放的视频资产。

### 字节的Bernini

[字节开源统一框架Bernini：给DiT配个“大模型军师”，AI视频编辑先理解再动手](https://mp.weixin.qq.com/s/3CYSuFeN6Tk2eHFMsgjxVg)

[Bernini: Latent Semantic Planning for Video Diffusion](https://arxiv.org/pdf/2605.22344)

<https://huggingface.co/ByteDance/Bernini-R>

### 其他

[扩散模型与文生视频](https://mp.weixin.qq.com/s/Bh3Gg7FCDpb_AmGEFkxQ2A)

[多模态大模型不够灵活，谷歌DeepMind创新架构Zipper：分开训练再「压缩」](https://mp.weixin.qq.com/s/F8wstkJyYiNJCbSqYq3Pbw)

[Zipper: A Multi-Tower Decoder Architecture for Fusing Modalities](https://arxiv.org/pdf/2405.18669)

## 多模态（语音）

### Mini-Omni

[让大模型能听会说，国内机构开源全球首个端到端语音对话模型Mini-Omni](https://mp.weixin.qq.com/s/2vf2QMnnmEdcdVbK8g9-_w)

[Mini-Omni: Language Models Can Hear, Talk While Thinking in Streaming](https://arxiv.org/abs/2408.16725)

<https://github.com/gpt-omni/mini-omni>

### Illuminate

[任意论文一键变播客，谷歌正式发布Illuminate，它能重构研究者的学习方式吗？](https://mp.weixin.qq.com/s/2C2B5yNLjXXYyDQnQgqPyQ)

<https://illuminate.google.com/home>

### V2A

[杀疯了！谷歌卷视频到语音，逼真音效让AI视频告别无声！](https://mp.weixin.qq.com/s/0D4QGeyZ0ZnmmWYz_x-56g)

<https://deepmind.google/discover/blog/generating-audio-for-video/>

### Speech-02

[超越OpenAI、ElevenLabs，MiniMax新一代语音模型屠榜！人格化语音时代来了](https://mp.weixin.qq.com/s/tZ3y4n-aMq5dFC2OmbWZpg)

## 全模态

### 综述

[多模态与生成正迈向终极大一统！阿里最新3万字长文梳理统一的多模态理解和生成模型](https://mp.weixin.qq.com/s/GLWZsfGLOgdmtCXw9Cyo0g)

[Unified Multimodal Understanding and Generation Models: Advances, Challenges, and Opportunities](https://arxiv.org/pdf/2505.02567)

<https://github.com/AIDC-AI/Awesome-Unified-Multimodal-Models>

### seed-1.5-VL

[Seed1.5-VL Technical Report](https://arxiv.org/abs/2505.07062)

[Seed VLM 技术报告首次公开：图像、视频、GUI、Game 完全体](https://mp.weixin.qq.com/s/uWvOVPEowCXAuowrTKefiA)

[字节最强多模态模型登陆火山引擎！Seed1.5-VL靠20B激活参数狂揽38项SOTA](https://mp.weixin.qq.com/s/GgJVkh8IorB6MvqlxESJLw)

### DanceGRPO

[DanceGRPO：首个统一视觉生成的强化学习框架](https://mp.weixin.qq.com/s/jivb_FgsfdJSgV2tbDbNUA)

[DanceGRPO: Unleashing GRPO on Visual Generation](https://arxiv.org/pdf/2505.07818)

### MMaDA

[比Gemini Diffusion更全能！首个多模态扩散大语言模型MMaDA发布，同时实现强推理与高可控性](https://mp.weixin.qq.com/s/uaJy9pz2EEcjf4DZCpoonw)

[MMaDA: Multimodal Large Diffusion Language Models](https://arxiv.org/abs/2505.15809)

<https://github.com/Gen-Verse/MMaDA>

<https://huggingface.co/Gen-Verse/MMaDA-8B-Base>

### BAGEL

[Seed Research｜理解与生成统一模型 BAGEL 开源，All-in-One Model！](https://mp.weixin.qq.com/s/ntZDIVYxpYxey7G-wUS3mw)

<https://github.com/bytedance-seed/BAGEL>

[Emerging Properties in Unified Multimodal Pretraining](https://arxiv.org/pdf/2505.14683)

<https://huggingface.co/ByteDance-Seed/BAGEL-7B-MoT>

### Kwai Keye-VL

[快手开源多模态大模型Kwai Keye-VL，引领视频理解新纪元](https://mp.weixin.qq.com/s/2JRGYhB_VDPecXMjp3gZsQ)

<https://github.com/Kwai-Keye/Keye>

### Kling-Foley

[音画同步，AI视频也能有完美「原声音」，可灵AI刚上线的！](https://mp.weixin.qq.com/s/8h5sZUIxsmce9GRRMDkEBg)

[Kling-Foley: Multimodal Diffusion Transformer for High-Quality Video-to-Audio Generation](https://www.arxiv.org/pdf/2506.19774)

<https://github.com/klingfoley/Kling-Foley>

### Stream-Omni

[Stream-Omni：同时支持各种模态组合交互的文本-视觉-语音多模态大模型](https://mp.weixin.qq.com/s/VFUvLoJsT7rOVjhCvLLmBA)

[Stream-Omni: Simultaneous Multimodal Interactions with Large Language-Vision-Speech Model](https://arxiv.org/abs/2506.13642)

<https://github.com/ictnlp/Stream-Omni>

<https://huggingface.co/ICTNLP/stream-omni-8b>

### ThinkDiff

[ICML 2025｜多模态理解与生成最新进展：港科联合SnapResearch发布ThinkDiff，为扩散模型装上大脑](https://mp.weixin.qq.com/s/2A2NuLLcqQ8-bu8M-_-5uA)

[I Think, Therefore I Diffuse: Enabling Multimodal In-Context Reasoning in Diffusion Models](https://arxiv.org/abs/2502.10458)

不过这是2月的论文，现在代码还没放出来：<https://github.com/MiZhenxing/ThinkDiff>

将现有VLM的推理能力迁移给扩散模型，使得最终的模型能够真正理解图像与文本提示之间的逻辑关系，以此为基础进行高质量的图像生成。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5a93ad9807fcc4ef07968b52af8d4c6d9ae75580%2Fthinkdiff-past.png?alt=media)

之前的工作，如pixart-alpha等，其实都是拿一个encoder-decoder的llm（例如T5），把encoder拿出来，freeze住，然后拿来训练diffusion的decoder

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c7c0f4226e2404c2e0b0ddc467f05f20889d9262%2Fthinkdiff.png?alt=media)

之前的reconstruction-based diffusion finetuning：

* 训练+推理：拿text的encoder，还有图像的encoder过一个可训练的aligner，加在一起过diffusion decoder，去根据diffusion的loss来训练diffusion decoder和aligner

ThinkDiff的vision-language training：

* 训练：输入图像和文本经过VLM输入aligner，然后走llm的decoder生成文本，去算文本loss（如image caption类的任务）
* 推理：同样输入图像和文本经过VLM输入tune过的aligner，然后改成接diffusion的decoder，直接生成图像

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3300c41c9e1f2ebe07c2ca5c22bf0a4473c16157%2Fthinkdiff-lvlm%2Bclip.png?alt=media)

* Thinkdiff-LVLM：
  * 训练：同上的训练部分，不过这里是拿结果的一部分(girl with)作为输入，并mask掉后面的(pearl earring)，通过llm decoder来预估被mask掉的部分
  * 推理：同上的推理部分，改下prompt
* Thinkdiff-CLIP：
  * 训练：同上，把VLM改成CLIP抽取图像emb，llm encoder抽取文本emb，输入改成结果的一部分(girl with)，同样预测pearl earring
  * 推理：同上

aligner看着是一个类似ffn的结构，即norm(mlp(gelu(mlp)))

### 残差的影响

[LLM为什么能看懂图？秘密不在Projector，残差结构才是跨模态理解的关键](https://mp.weixin.qq.com/s/B4SSNI2-0_zYsM4cLimNLQ)

### Cambrian-1

[寒武纪1号诞生：谢赛宁Yann LeCun团队发布最强开源多模态LLM](https://mp.weixin.qq.com/s/NFiorsNZLzVT1YXeLgNZPw)

[Cambrian-1: A Fully Open, Vision-Centric Exploration of Multimodal LLMs](https://arxiv.org/pdf/2406.16860)

<https://github.com/cambrian-mllm/cambrian>

<https://huggingface.co/nyu-visionx/>

<https://huggingface.co/datasets/nyu-visionx/CV-Bench>

<https://github.com/cambrian-mllm/cambrian>

当前多模态学习研究的两个潜在问题：

* 过度且过早地依赖语言，这是一个捷径，能弥补学习有效视觉表征的不足之处
* 现有基准可能无法为真实世界场景提供足够的指导 —— 视觉定基对于稳健的多模态理解至关重要

### Cambrian-S

[Cambrian-S: Towards Spatial Supersensing in Video](https://arxiv.org/abs/2511.04670)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b18037dfcaa0e39c3080e29ca8add20bcf1507a1%2Fcambrian-s-1.png?alt=media)

空间超感知(Spatial Supersensing)包括以下4步：

1. 纯语言理解： 无感官能力，仅基于文本推理，早期MLLMs，当前模型仍有残留偏差
2. 语义感知：将像素解析为物体、属性和关系（“看图说话”） 现有 MLLMs 具备较强能力
3. 流式事件认知：处理无界实时流，整合记忆并主动响应部分研究探索，但非模型原生能力
4. 隐式3D空间认知：理解视频为3D世界的投影，推理物体位置/关系，现有视频模型能力有限
5. 预测性世界建模：基于先验预测latent世界状态，用“惊喜”引导注意力/记忆，当前多模态系统完全缺失

### gpt-live

<https://openai.com/index/continuous-voice-interaction-with-gpt-live/>

[GPT-Live 底层拆解：OpenAI 如何让 95% 的音频帧不再延迟](https://mp.weixin.qq.com/s/780hzpjln3pYmKYgm8jsHQ)

[GPT-Live](https://openai.com/zh-Hans-CN/index/introducing-gpt-live/)

几个典型架构：

* 级联式(Cascaded voice systems)：一个语音转文本模型用于转写你的语音，一个大语言模型用于生成回应，以及一个文本转语音模型用于将回应再转换成语音

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8685d76d63fa2d4efb10b95a0a585f3771716338%2Fcascade-speech.png?alt=media)

* 轮次式(Turn-based voice models)：在单个模型内处理并生成音频，降低了延迟，让对话更流畅，但它们仍通过离散的轮次运作。模型必须等用户停止说话后才能回应，导致来回交流显得僵硬。此外，由于轮次检测基于静默，即使短暂的停顿或背景噪声也可能被误认为一轮结束，从而导致模型在不自然的时机插话。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5294bf522870239163540f9b61abb6ad6d781035%2Fturn-based-speech.png?alt=media)

* gpt-live：
  * 连续交互(Continuous interaction)：基于全双工(full-duplex)架构构建了GPT‑Live，以支持连续交互。不再处理一连串彼此独立的消息，而是在生成输出的同时连续处理输入。因此，模型可以在每秒内多次做出交互决策：是说话、继续倾听、暂停、打断，还是调用工具。这让模型能够进行更自然的来回交流，更好地把握时间，甚至执行实时翻译。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-488729b5314c09b635543b21a470dfceabbcd7d1%2Fcontinuous-interaction.png?alt=media)

* 委派处理更深入的工作(Delegation for deeper work)：将负责连续交互的GPT‑Live与更深入的工作解耦。当一个问题需要搜索、推理或更具智能体特性的能力时，GPT‑Live可以将任务委派给GPT‑5.5等另一个模型。这使它即使在后台处理多个任务，也能保持对话继续进行。还使GPT‑Live能够持续使用最新的模型和智能体，将前沿智能与自然交互相结合。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c6035b4ec86090380bd25e5901bfeb6793551760%2Fdelegation-deeper-work.png?alt=media)

总结：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f605dfa9376f6ff83e11aceb8aa1db94d9d9c8f7%2Fgpt-live-arch.png?alt=media)


# 1.7.llm\_recommend

## LLM+推荐：概述

### 一些参考

<https://github.com/nancheng58/Awesome-LLM4RS-Papers>

[A Survey on Large Language Models for Recommendation](https://arxiv.org/pdf/2305.19860.pdf) [Recommender Systems in the Era of Large Language Models (LLMs)](https://arxiv.org/pdf/2307.02046.pdf)

中科大LDS实验室的tutorial：[XadC3O-large-language-models-for-recommendation-tutorial-slides.pdf](https://github.com/daiwk/collections/blob/master/assets/XadC3O-large-language-models-for-recommendation-tutorial-slides.pdf)

对应的datafun talk：[当"狂飙"的大模型撞上推荐系统](https://mp.weixin.qq.com/s/rBGq7rDMK5Vxad5qUmK3nw)

[大模型放进推荐系统怎么玩？微软亚研全面总结](https://mp.weixin.qq.com/s/x0qczJ8I8LZ_PyZw2HOI8A)

生成式推荐综述：

[Large Language Models for Generative Recommendation: A Survey and Visionary Discussions](https://arxiv.org/pdf/2309.01157.pdf)

[A Review of Modern Recommender Systems Using Generative Models (Gen-RecSys)](https://arxiv.org/pdf/2404.00579.pdf)

[大语言模型在推荐系统中的探索与应用](https://mp.weixin.qq.com/s/nEhynptVyx8aV8onCwozAA)

[一文梳理业界落地LLM4Rec的若干范式-数万字超长文(建议收藏)](https://mp.weixin.qq.com/s/jqFQH6ZYhZRrzilLAo9BiA)

[推荐算法月报(2025.2)：大模型的春风吹醒推荐算法，重磅大厂突破](https://mp.weixin.qq.com/s/NO2XgUBiRkjsKNo7dswa0w)

[推荐算法(2025.3.4)：速看！阿里Meta的最新研究成果](https://mp.weixin.qq.com/s/1kZCKYbuvd6qiE6-5hJquw)

[一文梳理业界落地LLM4Rec的若干范式-数万字超长文(建议收藏)](https://mp.weixin.qq.com/s/jqFQH6ZYhZRrzilLAo9BiA)

[推荐系统范式之争，LLM vs. ID？](https://mp.weixin.qq.com/s/7pQ891pnp_BM7qH7ROiWwg)

[Exploring the Upper Limits of Text-Based Collaborative Filtering Using Large Language Models: Discoveries and Insights](http://arxiv.org/abs/2305.11700)

[知乎的讨论](https://www.zhihu.com/question/630016669/answer/3380909598)

ID vs 模态: 推荐系统ID范式有望被颠覆？

[Where to Go Next for Recommender Systems? ID- vs. Modality-based Recommender Models Revisited](https://arxiv.org/abs/2303.13835)

<https://github.com/westlake-repl/IDvs.MoRec>

[对应的ppt](https://github.com/westlake-repl/MicroLens/blob/master/MicroLens_DeepMind_Talk.pdf)

ACL2024的recgpt 这个好像没啥用，[RecGPT: Generative Pre-training for Text-based Recommendation](https://arxiv.org/pdf/2405.12715)

[WWW 2024 | 工业界大模型在搜广推场景应用](https://zhuanlan.zhihu.com/p/686259205)

[LLM+Recommendation大模型推荐近期进展|含WWW, SIGIR, AAAI等顶会文章](https://mp.weixin.qq.com/s/m8DMgSt_r-HVNHHzA8ceVw)

* baidu：[Representation Learning with Large Language Models for Recommendation](https://arxiv.org/pdf/2310.15950.pdf)
* huawei：[ReLLa: Retrieval-enhanced Large Language Models for Lifelong Sequential Behavior Comprehension in Recommendation](https://arxiv.org/pdf/2308.11131.pdf)
* microsoft：[Knowledge-Augmented Large Language Models for Personalized Contextual Query Suggestion](https://arxiv.org/pdf/2311.06318.pdf)
* 阿里：[Modeling User Viewing Flow using Large Language Models for Article Recommendation](https://arxiv.org/pdf/2311.07619.pdf)
* linkedin：[Collaborative Large Language Model for Recommender Systems](https://arxiv.org/pdf/2311.01343.pdf)

[ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction](https://arxiv.org/pdf/2310.09234.pdf)

recsys23的[Leveraging Large Language Models for Sequential Recommendation](https://arxiv.org/pdf/2309.09261) 还有一篇[Improving Sequential Recommendations with LLMs](https://arxiv.org/pdf/2402.01339)，对应的代码：<https://github.com/dh-r/LLM-Sequential-Recommendation/tree/RecSys23>

meta发的[LLM-Rec: Personalized Recommendation via Prompting Large Language Models](https://arxiv.org/pdf/2307.15780)

[生成式推荐系统近期研究工作梳理](https://mp.weixin.qq.com/s/u2kVzgv8ntUIkyCZZXIYWg)

[腾讯广告基于混元大模型的生成式召回落地实践](https://mp.weixin.qq.com/s/ClmjgRzpNIVjX0PrikS3qg)

[CIKM 2024 | 大语言模型推荐中的协同过滤信号和语义信息的深度融合](https://mp.weixin.qq.com/s/Qd0ZgBqMCJAEjlZYAoy9jQ)

[Collaborative Cross-modal Fusion with Large Language Model for Recommendation](https://arxiv.org/pdf/2408.08564)

(toread)

[生成式推荐最新进展](https://mp.weixin.qq.com/s/IXXMl74ZYpZMINNzFYC8Bg) 25年1月8号写的

[谷歌: 利用推荐知识对齐大语言模型](https://mp.weixin.qq.com/s/62SaQofe9qi2LCApjIzLFA)

[Aligning Large Language Models with Recommendation Knowledge](https://arxiv.org/pdf/2404.00245.pdf)

25.10综述：[A Survey on Generative Recommendation: Data, Model, and Tasks](https://arxiv.org/pdf/2510.27157)

25.12综述：[A Survey of Generative Recommendation from a Tri-Decoupled Perspective: Tokenization, Architecture, and Optimization](https://www.preprints.org/frontend/manuscript/9f1a828cd4f9b5f57b729f03832f1c96/download_pub)

### reasoning LLM4rec综述

[大模型时代下的推理型推荐系统最新综述](https://mp.weixin.qq.com/s/VxwmzvTJ65LCnyevmLlTug)：[Towards Reasoning-Aware Recommender Systems: A Survey in the LLM Era](https://www.researchgate.net/publication/397223831_Towards_Reasoning-Aware_Recommender_Systems_A_Survey_in_the_LLM_Era)

### LLM4rec综述

#### 概况

&#x20;

[How Can Recommender Systems Benefit from Large Language Models: A Survey](https://arxiv.org/pdf/2306.05817v6) 基于这个组织

CRM(conventional recommendation models)

![llm-rec-where](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f41fc48c3e69fd6cb8cf30e28c0013a37c9806de%2Fllm-rec-where.png?alt=media)

![llm-rec-how](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-173496e8e9edcdbc07c80a4840cad5e0617e9560%2Fllm-rec-how.png?alt=media)

#### where-LLM用于特征工程

&#x20;

**user-item level特征增强**

&#x20;

通过LLM的世界知识来获取更好的user/item表示

* [Llama4rec](https://arxiv.org/pdf/2401.13870) ：prompt增强：在prompt里引入推荐模型的信息；数据增强：通过LLM给推荐模型增加样本；adaptive aggregation：llm和推荐模型各自打分并用融合公式融合
* [KAR](https://arxiv.org/pdf/2306.10933)：让LLM总结item得到item emb；让LLM总结user历史得到user emb，两个emb过一个mmoe做融合得到新的两个emb，给推荐模型用
* [SAGCN](https://arxiv.org/pdf/2312.16275)：通过LLM标识出用户对item的评论是属于哪些aspect的，然后u有A个emb，i也有A个emb，构建A个U-I图，然后揉在一起过GCN
* [CUP](https://arxiv.org/pdf/2311.01314)：把用户的一堆历史评论扔给chatgpt，让它总结出128个token，然后丢给双塔bert，另一个塔是item的描述，freeze bert底层，只tune上层
* [LLaMA-E](https://arxiv.org/pdf/2308.04913)：instruction formulating为写300个种子指令，让gpt作为teacher，对300个种子指令进行扩展，并由领域专家评估后，去重并保证质量，得到120k个指令作为训练集，再用lora去instruct tuning
* [EcomGPT](https://arxiv.org/pdf/2308.06966v1)：设置一系列的task(100多个task)来finetune BLOOMZ，包括命名实体识别、描述生成、对话intent提取等

**instance-level样本生成**

&#x20;

* [GReaT](https://arxiv.org/pdf/2210.06280)：把表格化（tabular）数据转成自然语言，然后打乱顺序，自回归地finetune一个LLM，再拿tune完的LLM来合成（synthesize）逼真的（realistic）表格化数据
* [ONCE](https://arxiv.org/pdf/2305.06566)：闭源LLM输出文本（user profiler、content summarizer、personalized content generator），给开源LLM得到user表示，item过开源LLM得到item表示，二者内积学ctr
* [Agent4Rec](https://arxiv.org/pdf/2310.10108.pdf)：先训一个推荐模型，然后构建一个多智能体系统，模拟和这个推荐模型交互，产出新的样本给推荐模型做数据增强
* [RecPrompt](https://arxiv.org/pdf/2312.10463)：给一个初始prompt，让LLM1得到推荐结果，拿一个monitor衡量这个结果和ground truth的mrr/ndcg，再用另一个LLM产出更好的prompt给第一个LLM用，如此迭代，得到一个best prompt
* [PO4ISR](https://github.com/daiwk/collections/tree/master/posts/\(https:/arxiv.org/pdf/2312.07552\))：给初始prompt，收集error case让模型反思原因并refine出新的prompt，再augment出另一个prompt，并UCB选出最好的prompt，如此迭代
* [BEQUE](https://arxiv.org/pdf/2311.03758)：query重写任务，SFT得到一个LLM，将其预测的若干个候选rewrites通过offline system的feedback得到排序，再通过PRO算法再tune LLM。
* [Agent4Ranking](https://arxiv.org/pdf/2312.15450)：query重写任务，多个人群当成多个agent，每个通过多轮对话产出一个rewrite，再合在一起经过bert+mmoe计算robust损失+accuracy损失。

#### where-LLM作为特征编码器

&#x20;

**表示增强**

&#x20;

**统一的跨域推荐**

&#x20;

#### where-LLM 用于打分函数

&#x20;

[Text Is All You Need: Learning Language Representations for Sequential Recommendation](https://arxiv.org/pdf/2305.13731) 亚马逊发的

<https://github.com/AaronHeee/RecFormer>

#### where-LLM用于流水线控制（pipeline controller）

&#x20;

#### how-tune LLM & infer with CRM

&#x20;

#### how-not tune LLM & infer w/o CRM

&#x20;

#### how-not tune LLM & infer with CRM

&#x20;

#### how-tune LLM & infer w/o CRM

&#x20;

## SID相关原理

### DSI

参考知乎：<https://zhuanlan.zhihu.com/p/470182510>

[Transformer memory as a differentiable search index](https://proceedings.neurips.cc/paper_files/paper/2022/file/892840a6123b5ec99ebaab8be1530fba-Paper-Conference.pdf)，提出的可微搜索索引（differentiable search index, **DSI**），拆成两个阶段：

* indexing：建立**文档**和**doc\_id**的**一一映射**
* retrieval：根据query生成候选doc\_ids

与[Autoregressive Entity Retrieval](https://arxiv.org/pdf/2010.00904)提出的**受限beam search**的GENRE（代码<https://github.com/facebookresearch/GENRE>，解读[Transformer中PrefixConstrainedLogitsProcessor类的解读](https://zhuanlan.zhihu.com/p/494082642)）对比：

* GENRE生成的目标是**有具体语义的实体名**
* DSI生成的目标则是**无任何语义的任意doc\_id**

#### Indexing方法

&#x20;

* Inputs2Target：即doc\_tokens->doc\_id
* Target2Inputs：即doc\_id->doc\_tokens
* bidirectional：同时用上两面两个任务，并且在开始时加一个前缀，表明任务的方向
* span corruption：参考T5（[Exploring the limits of transfer learning with a unified text-to-text transformer](https://arxiv.org/pdf/1910.10683.pdf)），将doc\_id当做前缀和doc\_tokens拼起来，2个好处：
  * 在索引时进行通用的预训练
  * 实现doc\_id作为去噪目标和输入的平衡

#### 文档的表示

&#x20;

* Direct Indexing：直接用文档的前L个单词当做文档的表示，并且保留单词的顺序。
* Set Indexing：去掉文档中的重复的单词及停用词，然后和Direct Indexing一样的处理。
* Inverted Index：随机对文档中的连续的k个单词（一个文档块）进行采样，并将它们与doc\_id相关联

#### doc\_id的表示

&#x20;

* 非结构化的原子标识符：直接对所有的文档使用一个随机但互不相同的的整数标识。假设一共有N篇文档需要检索，假设原来解码器输出有V个单词，现在有V+N个单词。
* 朴素的结构化字符串标识符：也使用一个随机的整数，但将这个整数当做一个字符串输出，用受限的beam search搜索前k个文档，因为需要保证**输出的是数字**。
* 语义结构化的标识符：先用BERT产出每个doc的emb，然后**递归10-means**，第一次得到0-9作为第1个数字，第二次的0-9作为第2个数字，可以得到一个树，文档的最终标识符就是从根节点到当前结点的路径对应的编号组合。只要一个节点的文档数大于$$c=100$$，就继续分裂，当叶子的文档数小于c时，每个文档随机分配一个1到$$c-1$$的id，拼到doc\_id的最后。

#### 训练方法

&#x20;

用seq2seq，即**teacher forcing+交叉熵**，有如下两种方式：

* 先对indexing进行预训练（memorization），再进行**将query映射为docid**的微调
* 用多任务的方式**同时进行**，两个任务用**不同的标识符**，这样做效果会好很多

后来有一篇[Bridging the Gap Between Indexing and Retrieval for Differentiable Search Index with Query Generation](https://arxiv.org/pdf/2206.10128.pdf)，对应的github：<https://github.com/ArvinZhuang/DSI-QG>，他也同时尝试复现DSI：<https://github.com/ArvinZhuang/DSI-transformers>，主要有如下两个地方：

* 准备数据，doc\_id

```python
class IndexingTrainDataset(Dataset):
    def __init__(
            self,
            path_to_data,
            max_length: int,
            cache_dir: str,
            tokenizer: PreTrainedTokenizer,
    ):
        self.train_data = datasets.load_dataset(
            'json',
            data_files=path_to_data,
            ignore_verifications=False,
            cache_dir=cache_dir
        )['train']

        self.max_length = max_length
        self.tokenizer = tokenizer
        self.total_len = len(self.train_data)


    def __len__(self):
        return self.total_len

    def __getitem__(self, item):
        data = self.train_data[item]

        input_ids = self.tokenizer(data['text'],
                                   return_tensors="pt",
                                   truncation='only_first',
                                   max_length=self.max_length).input_ids[0]
        return input_ids, str(data['text_id'])


@dataclass
class IndexingCollator(DataCollatorWithPadding):
    def __call__(self, features):
        input_ids = [{'input_ids': x[0]} for x in features]
        docids = [x[1] for x in features]
        inputs = super().__call__(input_ids)

        # label是doc_id
        labels = self.tokenizer(
            docids, padding="longest", return_tensors="pt"
        ).input_ids

        # replace padding token id's of the labels by -100 
        # according to https://huggingface.co/docs/transformers/model_doc/t5#training
        labels[labels == self.tokenizer.pad_token_id] = -100
        inputs['labels'] = labels
        return inputs

```

* 训练和预测

```python
class IndexingTrainer(Trainer):
    def __init__(self, restrict_decode_vocab, **kwds):
        super().__init__(**kwds)
        self.restrict_decode_vocab = restrict_decode_vocab

    def compute_loss(self, model, inputs, return_outputs=False):
        ## 输入文章，预测doc_id
        loss = model(input_ids=inputs['input_ids'], 
            attention_mask=inputs['attention_mask'], labels=inputs['labels']).loss
        if return_outputs:
            return loss, [None, None]  # fake outputs
        return loss

    def prediction_step(
            self,
            model: nn.Module,
            inputs: Dict[str, Union[torch.Tensor, Any]],
            prediction_loss_only: bool,
            ignore_keys: Optional[List[str]] = None,
    ) -> Tuple[Optional[torch.Tensor], Optional[torch.Tensor], Optional[torch.Tensor]]:
        model.eval()
        # eval_loss = super().prediction_step(model, inputs, True, ignore_keys)[0]
        with torch.no_grad():
            # greedy search
            doc_ids = model.generate(
                inputs['input_ids'].to(self.args.device),
                max_length=20,
                prefix_allowed_tokens_fn=self.restrict_decode_vocab,
                early_stopping=True,)
        return (None, doc_ids, inputs['labels'])
```

* 对解码空间的限制：

```python
    # docid generation constrain, we only generate integer docids.
    SPIECE_UNDERLINE = "_"
    INT_TOKEN_IDS = []
    for token, id in tokenizer.get_vocab().items():
        if token[0] == SPIECE_UNDERLINE:
            if token[1:].isdigit():
                INT_TOKEN_IDS.append(id)
        if token == SPIECE_UNDERLINE:
            INT_TOKEN_IDS.append(id)
        elif token.isdigit():
            INT_TOKEN_IDS.append(id)
    INT_TOKEN_IDS.append(tokenizer.eos_token_id)

    def restrict_decode_vocab(batch_idx, prefix_beam):
        return INT_TOKEN_IDS
```

### vq-vae & rq-vae

#### vq-vae

&#x20;

[Neural discrete representation learning](https://proceedings.neurips.cc/paper_files/paper/2017/file/7a98af17e63a0ac09ce2e96d03992fbc-Paper.pdf)

<https://github.com/zalandoresearch/pytorch-vq-vae>

用在推荐：

[Learning Vector-Quantized Item Representation for Transferable Sequential Recommenders](https://arxiv.org/pdf/2210.12316.pdf)

<https://github.com/RUCAIBox/VQ-Rec>

#### rq-vae

&#x20;

[Autoregressive Image Generation using Residual Quantization](https://arxiv.org/pdf/2203.01941.pdf)

### 一些tokenizer方法

vq/rq codebook容易坍塌，即马太效应 lfq的熵损失函数能优化codebook利用率，即所有样本的$$-\sum plogp$$，让xx更尖锐？ 然后有个batch内的熵，让xx更平均？ 两个相减可以提升表示能力的同时提升利用率

alit([Adaptive Length Image Tokenization via Recurrent Allocation](https://arxiv.org/pdf/2411.02393))：简单的图片不用那么多token，复杂的多一点

### TIGER

[Recommender Systems with Generative Retrieval](https://arxiv.org/pdf/2305.05065.pdf)

序列推荐的一些paper：

* [Session-based recommendations with recurrent neural networks](https://arxiv.org/pdf/1511.06939.pdf)：GRU4Rec首先把RNN用到推荐里
* [Neural attentive session-based recommendation](https://arxiv.org/pdf/1711.04725.pdf)：提出NARM(Neural Attentive Session-based Recommendation)，在GRU里加了attention
* [Next item recommendation with self-attention](https://arxiv.org/pdf/1808.06414.pdf)：AttRec在metric learning里引入了self-attention
* [Self-attentive sequential recommendation](https://arxiv.org/pdf/1808.09781.pdf)：SASRec用了类似decoder-only的self-attention
* [Bert4rec: Sequential recommendation with bidirectional encoder representations from transformer](https://arxiv.org/pdf/1904.06690.pdf)和[Transformers4rec: Bridging the gap between nlp and sequential/session-based recommendation](https://scontent-sjc3-1.xx.fbcdn.net/v/t39.8562-6/246721374_422204999475172_9039387325224382577_n.pdf?_nc_cat=104\&ccb=1-7&_nc_sid=e280be&_nc_ohc=pSC1QwlGTzIAX-yb9Ax&_nc_ht=scontent-sjc3-1.xx\&oh=00_AfApZwRSd9KDBf4b-uGHf3bSS_SsZoRqhYS-lJRZltT97A\&oe=6606DDFA)用了Transformer以及相关的mask策略
* [S3-rec: Self-supervised learning for sequential recommendation with mutual information maximization](https://arxiv.org/pdf/2008.07873.pdf)：在预训练阶段引入了4个自监督的task，4个MIMM(mutual information maximization)
  * item-attribute MIM
  * sequence-item MIM：sequence和被mask掉的一个item间
  * sequence-attribute MIM
  * sequence-sequence MIM：sequence和被mask掉的连续item构成的片段间

![s3-rec](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-46814b4a9514a745c5db4b6b91a61967e50aa37b%2Fs3-rec.png?alt=media)

这些方法都是学习item的向量，然后用MIPS去ANN，而TIGER(Transformer Index for GEnerative Recommenders)则是生成式地直接预测item的语义id

![tiger](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3ceb8a0ccb3917050c21d5a61870133cd3478ef7%2Ftiger.png?alt=media)

![tiger-quant](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-56c7d624d341bf36fb3f7a0f6e7764d0330cd570%2Ftiger-quant.png?alt=media)

![tiger-personalized](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8526de8cae644c5f0450a2433efc7bc9d25d9ce5%2Ftiger-personalized.jpg?alt=media)

rq-vae的介绍：

![rq-vae](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d7b402beadad2b71f13b2bcdc667a8929d7b5178%2Frq-vae.png?alt=media)

原图里的下标有一些问题

* $$x$$经过encoder得到的$$z$$（可以看成就是$$r\_1$$），$$l=1$$，在第一个码本里ann找到最近的$$c\_1=1$$，$$z-\boldsymbol{e}\_{c\_1}$$得到$$r\_2$$
* $$l=2$$，$$r\_2$$在第2个码本里ann找到最近的$$c\_2=4$$，$$r\_2-\boldsymbol{e}\_{c\_2}$$得到$$r\_3$$
* $$l=3$$，$$r\_3$$在第3个码本里ann找到最近的$$c\_3=6$$，$$r\_3-\boldsymbol{e}\_{c\_3}$$得到$$r\_4$$
* $$l=4$$，$$r\_4$$在第4个码本里ann找到最近的$$c\_4=2$$，$$r\_4-\boldsymbol{e}\_{c\_4}$$得到$$r\_5$$，
* 对应的semantic id就是(1,4,6,2)，拿$$\hat {z} = 1+4+6+2$$再去过decoder得到$$\hat {x}$$

最终的loss：$$\mathcal{L}*{\text {recon }} + \mathcal{L}*{\text {rqvae }}$$：

* $$\mathcal{L}\_{\text {recon }}=|\boldsymbol{x}-\hat{\boldsymbol{x}}|^2$$
* $$\mathcal{L}*{\text {rqvae }}=\sum*{l=1}^L \beta\left|\boldsymbol{r}*l-\operatorname{sg}\left\[\boldsymbol{e}*{c\_l}\right]\right|^2+\left|\operatorname{sg}\left\[\boldsymbol{r}*l\right]-\boldsymbol{e}*{c\_l}\right|^2$$，sg是stop gradient，这里原始的rq-vae是算的$$\mathcal{L}*{\text {commit }}=\sum*{d=1}^D\left|\mathbf{Z}-\operatorname{sg}\left\[\hat{\mathbf{Z}}^{(d)}\right]\right|\_2^2$$看来有点diff
* 码本的emb通过moving average更新

rqvae的代码：<https://github.com/kakaobrain/rq-vae-transformer/blob/main/rqvae/models/rqvae/quantizations.py#L237>

* VQ部分：

```python
class VQEmbedding(nn.Embedding):
    def compute_distances(self, inputs):
        codebook_t = self.weight[:-1, :].t()

        (embed_dim, _) = codebook_t.shape
        inputs_shape = inputs.shape
        assert inputs_shape[-1] == embed_dim

        inputs_flat = inputs.reshape(-1, embed_dim)
        # a^2
        inputs_norm_sq = inputs_flat.pow(2.).sum(dim=1, keepdim=True)
        # b^2
        codebook_t_norm_sq = codebook_t.pow(2.).sum(dim=0, keepdim=True)
        # (a-b)^2 = a^2 + b^2 - 2ab
        distances = torch.addmm(
            inputs_norm_sq + codebook_t_norm_sq,
            inputs_flat,
            codebook_t,
            alpha=-2.0,
        )
        distances = distances.reshape(*inputs_shape[:-1], -1)  # [B, h, w, n_embed or n_embed+1]
        return distances

    @torch.no_grad()
    def find_nearest_embedding(self, inputs):
        distances = self.compute_distances(inputs)  # [B, h, w, n_embed or n_embed+1]
        embed_idxs = distances.argmin(dim=-1)  # use padding index or not

        return embed_idxs

    @torch.no_grad()
    def _update_embedding(self):

        n_embed = self.weight.shape[0] - 1
        n = self.cluster_size_ema.sum()
        normalized_cluster_size = (
            n * (self.cluster_size_ema + self.eps) / (n + n_embed * self.eps)
        )
        self.weight[:-1, :] = self.embed_ema / normalized_cluster_size.reshape(-1, 1)

    def forward(self, inputs):
        embed_idxs = self.find_nearest_embedding(inputs)
        if self.training:
            if self.ema:
                self._update_buffers(inputs, embed_idxs)
        
        embeds = self.embed(embed_idxs)

        if self.ema and self.training:
            self._update_embedding()

        return embeds, embed_idxs
```

* RQ部分

```python
class RQBottleneck(nn.Module):
    def __init__(...):
        codebooks = [VQEmbedding(self.n_embed[idx], 
                                    embed_dim, 
                                    decay=self.decay[idx], 
                                    restart_unused_codes=restart_unused_codes,
                                    ) for idx in range(self.code_shape[-1])]
        self.codebooks = nn.ModuleList(codebooks)
    def quantize(self, x):
        r"""
        Return list of quantized features and the selected codewords by the residual quantization.
        The code is selected by the residuals between x and quantized features by the previous codebooks.

        Arguments:
            x (Tensor): bottleneck feature maps to quantize.

        Returns:
            quant_list (list): list of sequentially aggregated and quantized feature maps by codebooks.
            codes (LongTensor): codewords index, corresponding to quants.

        Shape:
            - x: (B, h, w, embed_dim)
            - quant_list[i]: (B, h, w, embed_dim)
            - codes: (B, h, w, d)
        """
        B, h, w, embed_dim = x.shape

        residual_feature = x.detach().clone()

        quant_list = []
        code_list = []
        aggregated_quants = torch.zeros_like(x)
        for i in range(self.code_shape[-1]):
            quant, code = self.codebooks[i](residual_feature)
            # 就地操作，从residual_feature中减去quant的值，覆盖原来的值
            residual_feature.sub_(quant)
            aggregated_quants.add_(quant)

            quant_list.append(aggregated_quants.clone())
            code_list.append(code.unsqueeze(-1))
        
        codes = torch.cat(code_list, dim=-1)
        return quant_list, codes
    def forward(self, x):
        x_reshaped = self.to_code_shape(x)
        quant_list, codes = self.quantize(x_reshaped)

        commitment_loss = self.compute_commitment_loss(x_reshaped, quant_list)
        quants_trunc = self.to_latent_shape(quant_list[-1])
        quants_trunc = x + (quants_trunc - x).detach()

        return quants_trunc, commitment_loss, codes
    
    def compute_commitment_loss(self, x, quant_list):
        r"""
        Compute the commitment loss for the residual quantization.
        The loss is iteratively computed by aggregating quantized features.
        """
        loss_list = []
        
        for idx, quant in enumerate(quant_list):
            partial_loss = (x-quant.detach()).pow(2.0).mean()
            loss_list.append(partial_loss)
        
        commitment_loss = torch.mean(torch.stack(loss_list))
        return commitment_loss
```

### TIGER应用在排序

[Better Generalization with Semantic IDs: A Case Study in Ranking for Recommendations](https://arxiv.org/pdf/2306.08121)

[RecSys'24 | 谷歌:使用语义ID提升推荐系统ID Embed泛化性](https://mp.weixin.qq.com/s/PR8NuRWkK_4vuCrE9xD6Jg)

假设RQ-VAE产出的sid是$$\left(c\_1^v, c\_2^v, \ldots, c\_{L-1}^v, c\_L^v\right)$$，假设每一级的码本都是K，有如下两种用法

* N-gram：N=2，假设不重叠，那就有L/2个子词，每个词对应emb table的一行。每个子词对应的emb table有K^N行，这个emb table和推荐模型一起训练。每个N-gram对应的emb加起来就是这个item的表示
* SPM(sentence piece model)：用SentencePiece对sid进行处理，得到动态长度的子词，流行的共现sid会自动组合为单个subgroup，能同时平衡泛化性和记忆性。

实验部分：内容向量是用videobert产出的2048维，SID的配置：L=8，K=2048。相关推荐场景，有用户历史、当前item和候选item。看随着emb词表变大，auc的变化情况

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c6e5bbcd166794ce819c0d8a8e031cb178702fec%2Fsid-no-seq.png?alt=media)

没有用户历史特征：

* 在全量样本上的auc：
  * 直接用content的dense替换id：和基线一样多层nn时效果很差，把layer数乘1.5和乘2有涨，但仍不如SPM和基线
  * n-gram：unigram效果很差，bigram接近layer乘2的效果了，但仍不如SPM和基线
  * SPM：和基线差不多
* 在冷启item样本上的auc：
  * 直接用content的dense替换id：和基线一样多层nn时效果很差，把layer数乘1.5和乘2有涨，乘2时比基线更好
  * n-gram：unigram和bigram效果都很差，不如基线
  * SPM：超过基线很多

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-deda4f01e7001c3775bcb8af1d94f07ef8bcd5ea%2Fsid-has-seq.png?alt=media)

有用户历史特征：不像前面只在当前item/候选item时才有训练，sid的emb有了更充分的训练，

* 在全量样本上的auc：SPM超过基线很多，unigram不如基线，bigram超过基线，略低于SPM
* 在冷启item样本上的auc：SPM、unigram和bigram效果差不多，都远高于基线，词表较小时n-gram会更好

### 受限beam search

[Diverse Beam Search: Decoding Diverse Solutions from Neural Sequence Models](https://arxiv.org/abs/1610.02424)

[Autoregressive entity retrieval](https://arxiv.org/pdf/2010.00904)：代码：<https://github.com/facebookresearch/GENRE>

[Autoregressive Search Engines: Generating Substrings as Document Identifiers](https://arxiv.org/pdf/2204.10628)：例如一个item可以写成`<IDS> 1023 <IDE> Urban Decay Eyeshadow Palette Naked Heat <AS> Makeup <AE> <AS> Eyes <AE>`，并通过wavelet tree存储，给定开始token（如`<IDS>`或者`<AS>`），可以在$$O(Vlog(V))$$里找出所有可能的后续tokens。代码：<https://github.com/facebookresearch/SEAL>

## LLM+推荐：输入ID/SID（工业界+落地）

### Meta的HSTU

[如何评价Meta最新推荐论文: 生成式推荐打败深度分层架构推荐？](https://mp.weixin.qq.com/s/MeH2drBIBML5OSfCujIJ0Q)

[Actions Speak Louder than Words: Trillion-Parameter Sequential Transducers for Generative Recommendations](https://arxiv.org/pdf/2402.17152.pdf)

#### 背景

&#x20;

大规模推荐系统依赖高基数(high cardinality)、异质特性(heterogeneous features)，每天要处理上百亿用户行为数据。将推荐系统重新定义为生成模型框架内的序列转化任务，提出HSTU(Hierarchical Sequential Transduction Unit)，专为高基数、非稳态的流式推荐数据设计。

* 在公开数据集比基线NDCG+65.8%
* 在8192的序列长度上的处理速度比基于flash attention2的transformer快5.3-15.2倍。
* 1.5万亿（1.5 trillion）参数，线上ab测试指标+12.4%

在[Breaking the curse of quality saturation with user-centric ranking](https://arxiv.org/pdf/2305.15333.pdf)中提到了NCE（normalized cross-entropy）指标：

$$
\operatorname{NCE}(p, y)=\frac{\operatorname{CrossEntropy}(p, y)}{\operatorname{Entropy}(y)}
$$

![nce-metric](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-254f0c801698caeac9b2cf3224f965c658947b06%2Fnce-metric.png?alt=media)

可以发现，对于一个预训练好的模型来说，随着时间的变化，NCE的变化是很剧烈的，即数据分布是会漂移的，并不像nlp/cv一样有ground truth，所以传统推荐模型其实很难达到比较好的scaling能力。

![nce-distribution-drift](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5cf7a7428e6e2fe118a4e3370f7d49f662d54a56%2Fnce-distribution-drift.png?alt=media)

需要克服的3个挑战：

* 推荐系统中的特征**缺少显式的结构**。序列建模（bert4rec、S3-rec等）在小规模数据集上效果不错，但工业界则需要**异构特征**（高基数的id、交叉特征、统计特征、历史点击率等）。
* 推荐系统使用**十亿规模的动态词表**，而nlp用的是10w的静态词表，要对上万候选进行target-aware操作（din、Cold等），训练和推理的代价很高。
* 大规模序列模型的计算成本是瓶颈。GPT-3在300B token的数据集上用上千个GPU训练1-2个月，而在推荐场景一天就有十亿级的活跃用户和十亿级的候选进行交互，用户序列在极端情况下有近10w（[Twin: Two- stage interest network for lifelong user behavior modeling in ctr prediction at kuaishou](https://arxiv.org/pdf/2302.02352.pdf)），所以推荐系统每天要处理的tokens数量甚至比语言模型1-2个月处理的数量要大几个数量级

本文将**用户action**看成一个新的模态，2个主要的insights：

* 给定一个新的特征空间，核心的召回排序任务能被直接转换成生成式模型问题(序列直推任务，sequential transduction tasks)
* 这种范式能够系统性地解决传统推荐中的特征冗余、计算冗余、推理冗余，提升效率

#### Sequential Transduction Tasks

&#x20;

transductive learning（直推式学习） vs inductive learning（归纳式学习）<https://www.zhihu.com/question/68275921/answer/529156908>：

* 归纳式学习：训练只使用训练集，不使用测试集，训出的模型对测试集做预测，如监督学习。
* 直推式学习：训练时使用训练集，还使用测试集的特征，但不使用测试集的label，

**异构特征的统一表示**

&#x20;

* 稀疏特征：itemid、类目、城市、语言、社区等
  * 先选出**最长**的时间序列作为**主时间序列**，例如用户的交互序列。
  * 剩下的特征随时间变化较慢，如关注作者的属性。对于连续出现的片段（consecutive segment），**只保留最开始的入口**，这样对于主时间序列而言，并不会增加太多的序列长度。
* 数值型特征：这里指的是序列特征里**每个item的统计特征**，比如用户在时刻t对某个item的ctr。直接删了，因为DIN里提到随着序列长度增加，**target-aware**的序列建模方式能够捕捉到这种数值性特征

![hstu-dlrm-vs-gr](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c21fe910318c4682caa77ee815832e5f9e52de7f%2Fhstu-dlrm-vs-gr.png?alt=media)

假设用户消费了9个item，

* 绿色的有7个时间步，全保留，作为主序列；
* 蓝色的有7个时间步，但只有G0和G1两种取值，所以对于连续的G0只保留第0个(出现在t1)，扔到主序列的最前面去，连续的G1也只保留第0个（出现在t8），插到主序列最后一个的前面
* 黄色的全是H0，第0个出现在t7，所以保留t7，往主序列t8前面插入
* 将数值型特征替换为target-aware的cross attention得到causal-masked的特征
* 通过t0、t1、t2（**包括t2**）的特征生成t2的样本，以此类推

**召回和排序的重定义**

&#x20;

输入token序列$$x\_0, x\_1, \ldots, x\_{n-1}$$，输出的token序列$$y\_0, y\_1, \ldots, y\_{n-1}$$是通过mask序列$$m\_0, m\_1, \ldots, m\_{n-1}\left(m\_i \in{0,1}\right)$$得到的。

token对应的动态、非稳态词表是$$\mathbb{X}$$，用户交互的内容是$$\mathbb{X}\_c \subseteq \mathbb{X}$$

* 召回：预估$$p\left(x\_{i+1} \mid u\_i\right)$$，通过时间步i的用户特征预估$$x\_{i+1} \in \mathbb{X}\_c$$，一般是直接选择$$\arg \max \_{x \in \mathbb{X}\_c} p\left(x \mid u\_i\right)$$来最大化**特定的reward**，和标准的自回归有两个不同：
  * $$x\_i,y\_i$$的label并不一定是$$x\_{i+1}$$，因为用户可以对$$x\_{i+1}$$是负反馈
  * $$y\_i$$可能是比如人口属性等（因为是merge的序列，可能把城市之类的merge进来当做一个时间步），这个时候$$y\_i$$未定义的，要把它mask掉，即$$m\_i=0$$
* 排序：推荐中的排序需要在尽量早的阶段进行target-aware的交互，而标准的自回归这种交互往往比较迟，例如在encoder的输出才用上了softmax。因此，设计了一种**target-aware的cross-attention**
  * 把action和x穿插起来得到新序列$$x\_0, a\_0, x\_1, a\_1, \ldots, x\_{n-1}, a\_{n-1}$$
    * 对于action的位置，$$m\_i=0$$
    * 对于content位置，使用一个小的nn将预估值转换成多任务的预估值（**感觉是输入0-n，第n项保留**$$x\_n$$**，mask掉**$$a\_n$$**，拿**$$x\_n$$**去多目标地预估用户会用哪个action**）

**生成式训练**

&#x20;

假设用户$$i$$有$$n\_i$$个token，那么训练的复杂度就是$$\sum\_i n\_i\left(n\_i^2 d+n\_i d\_{f f} d\right)$$，其中：

* $$n\_i^2 d$$是self-attention的复杂度，通过flash attention可以达到$$O(n^2)$$
* $$n\_i d\_{f f} d$$是FFN的复杂度
* 因为要自回归地算，可以理解为batch\_size也是$$n\_i$$，加一个下三角的mask，所以在$$\sum$$里还要乘一个$$n\_i$$

假设$$N=\max \_i n\_i$$，那复杂度就是$$O\left(N^3 d+N^2 d^2\right)$$，太巨大了

但其实可以发现（这段是自己的理解），假设序列长度9，要预测第4个的时候，4-9的输入是mask掉的，但他们还是要进行后面的attention+ffn计算，其实是很浪费资源的，所以如上面“**异构特征的统一表示**”小节的那个图（生成主序列和辅助序列）所示，该模型直接只吐出x=x1-x3,y=x4作为训练样本就行了，这样既省掉了4-9的无用计算，也更便于并行（相比不拆batch的自回归）

假设采样第$$i$$个用户的概率是$$s\_u\left(n\_i\right)$$，那么总的训练消耗就是

$$
\sum\_i s\_u\left(n\_i\right) n\_i\left(n\_i^2 d+n\_i d^2\right)
$$

如果设置$$s\_u\left(n\_i\right)=1/n\_i$$，那消耗就降到了$$O\left(N^2 d+N d^2\right)$$。而在工业界中要实现这种采样其实很简单，在用户请求或者session结束的时候吐出训练样本就有$$\hat{s\_u}\left(n\_i\right) \propto 1 / n\_i$$了

#### 生成式推荐中的高性能自注意力编码器

&#x20;

![hstu-arch](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-36e1079b281358fda05fb1a29d2a185202f71bb3%2Fhstu-arch.png?alt=media)

HSTU的单层包括3个部分：

$$
\text{pointwise\ projection:} U(X), V(X), Q(X), K(X)=\operatorname{Split}\left(\phi\_1\left(f\_1(X)\right)\right)
$$

$$
\text{spatial\ aggregation:} A(X) V(X)=\phi\_2\left(Q(X) K(X)^T+\operatorname{rab}^{p, t}\right) V(X)
$$

$$
\text{pointwise\ transformation:} Y(X)=f\_2(\operatorname{Norm}(A(X) V(X)) \odot U(X))
$$

其中，

* $$f\_i(x)$$是MLP，$$f\_i(X)=W\_i(X)+b\_i$$
* $$\phi\_1$$和$$\phi\_2$$是激活函数，都是SiLU([Sigmoid-weighted linear units for neural network function approximation in reinforcement learning](https://arxiv.org/pdf/1702.03118.pdf))，其实就是Swish，即$$f(x)=x \cdot sigmoid(x)$$
* $${rab}^{p, t}$$是relative attention bias，考虑了位置$$p$$和时间$$t$$(参考T5论文，[Exploring the limits of transfer learning with a unified text-to-text transformer](https://arxiv.org/pdf/1910.10683.pdf))，其实是在[Self-attention with relative position representations](https://arxiv.org/pdf/1803.02155.pdf)一文提出的

对应到代码(<https://github.com/facebookresearch/generative-recommenders/blob/main/modeling/sequential/hstu.py>)里：

```python
self._linear_dim: int = linear_hidden_dim
self._uvqk = torch.nn.Parameter(
    torch.empty((embedding_dim, linear_hidden_dim * 2 * num_heads + 
        attention_dim * num_heads * 2)).normal_(mean=0, std=0.02),
)

"""..."""

batched_mm_output = torch.mm(normed_x, self._uvqk)
if self._linear_activation == "silu":
    batched_mm_output = F.silu(batched_mm_output)
elif self._linear_activation == "none":
    batched_mm_output = batched_mm_output
""" 其实就是先乘一个大矩阵，再拆成4份，等价于乘4个小矩阵 """
u, v, q, k = torch.split(
    batched_mm_output,
    [self._linear_dim * self._num_heads, self._linear_dim * self._num_heads, 
    self._attention_dim * self._num_heads, self._attention_dim * self._num_heads],
    dim=1,
)

if self._normalization == "rel_bias" or self._normalization == "hstu_rel_bias":
    if delta_x_offsets is not None:
        padded_q, padded_k = cached_q, cached_k
        flattened_offsets = delta_x_offsets[1] + torch.arange(start=0, end=B * n, 
            step=n, device=delta_x_offsets[1].device, dtype=delta_x_offsets[1].dtype)
        padded_q = padded_q.view(B * n, -1).index_copy_(
            dim=0, index=flattened_offsets, source=q,
        ).view(B, n, -1)
        padded_k = padded_k.view(B * n, -1).index_copy_(
            dim=0, index=flattened_offsets, source=k,
        ).view(B, n, -1)
    else:
        padded_q = torch.ops.fbgemm.jagged_to_padded_dense(
            values=q, offsets=[x_offsets], max_lengths=[n], padding_value=0.0
        )
        padded_k = torch.ops.fbgemm.jagged_to_padded_dense(
            values=k, offsets=[x_offsets], max_lengths=[n], padding_value=0.0
        )

    qk_attn = torch.einsum(
        "bnhd,bmhd->bhnm",
        padded_q.view(B, n, self._num_heads, self._attention_dim),
        padded_k.view(B, n, self._num_heads, self._attention_dim),
    )
    if all_timestamps is not None:
        qk_attn = qk_attn + self._rel_attn_bias(all_timestamps).unsqueeze(1)
    qk_attn = F.silu(qk_attn) / n
    qk_attn = qk_attn * invalid_attn_mask.unsqueeze(0).unsqueeze(0)
    attn_output = torch.ops.fbgemm.dense_to_jagged(
        torch.einsum(
            "bhnm,bmhd->bnhd",
            qk_attn,
            torch.ops.fbgemm.jagged_to_padded_dense(v, [x_offsets], [n]).\
                reshape(B, n, self._num_heads, self._linear_dim)
        ).reshape(B, n, self._num_heads * self._linear_dim),
        [x_offsets],
    )[0]

```

DLRM的3部分：

* 特征抽取：常见的基础版本是离散特征pooling，高级版本是din。HSTU本来就能做这种target-aware的attention
* 特征交互：常见的使用FMs、DCNv2、DHEN([DHEN: A Deep and Hierarchical Ensemble Network for Large-Scale Click-Through Rate Prediction](https://arxiv.org/pdf/2203.11014.pdf)，引入残差连接)。HSTU通过$$\operatorname{Norm}(A(X) V(X)) \odot U(X)$$来实现，将attention pooled后的结果直接和其他特征算element-wise product。
  * 这个做法受[Neural collaborative filtering vs. matrix factorization revisited](https://arxiv.org/pdf/2005.09683.pdf)和[Revisiting neural retrieval on accelerators](https://arxiv.org/pdf/2306.04039.pdf)的启发，用MLP来近似点积是很困难的。原因大概是nn需要调超参和足够的训练数据，在线算得又慢，而且本来内积效果就不错了，nn能带来的边际收益其实不明确。
  * 因为$$U(X)$$已经用过SiLU了，所以$$\operatorname{Norm}(A(X) V(X)) \odot U(X)$$可以看成是SwiGLU的变种（参考[Glu variants improve transformer](https://arxiv.org/pdf/2002.05202.pdf)），因为前面在对比LLM激活函数时讲了，$$\operatorname{SwiGLU}\left(\mathbf{x}\_1, \mathbf{x}\_2\right)=\operatorname{Swish}\left(\mathbf{x}\_1\right) \odot \mathbf{x}\_2$$
* 表示转换：常见的如MoE、PLE等，主要思想就是对不同人群用特定的子网络。HSTU里的element-wise product也能达到MoE中的门控操作，只是可能有一个正则化因子的区别。

其实就是原来一般会拆成attention+ffn，而它这3个公式，前两个是attention，第3个就是attention求个norm，然后过一个swiglu的ffn，还有一点，这里的$$U(x)$$是过attention之前的，感觉起到了类似resnet的作用

**pointwise聚合的注意力**

&#x20;

用的是pointwise聚合的注意力，而不是transformer里的softmax，主要有如下两点考虑：

* 推荐中item的**强度**信息很重要，softmax会让这种强度失真，导致在预估（如时长）不准；如果只需要预估序，那其实softmax也可以，但推荐要**同时预估序和值**，所以要删掉softmax。
* 虽然softmax对噪声有鲁棒性，但不太适用于流式setting下的非稳态词表。做了一个模拟流式数据的实验，发现只去掉relative attention bias比relative attention bias并加上softmax会好得多

| Architecture                   | HR @10 | HR @50 |
| ------------------------------ | ------ | ------ |
| Transformers                   | .0442  | .2025  |
| HSTU ($$-rab^{p,t}$$, Softmax) | .0617  | .2496  |
| HSTU ($$-rab^{p,t}$$)          | .0893  | .3170  |

**增加稀疏性**

&#x20;

使用了一种高效的attention kernel的GPU算子，类似FlashAttention，能够将**融合连续的矩阵操作**（fuse back-to-back GEMMs），但能够 进行fully raggified（可能是不规则，即序列长度可变的？？）的attention计算，本质是将attention计算转换为**不同大小的分组GEMMs**。因此，HSTU变成了memory-bound，并且能够以$$\Theta\left(\sum\_i n\_i^2 d\_{q k}^2 R^{-1}\right)$$进行scale，其中，$$n\_i$$是样本$$i$$的序列长度，$$d\_{qk}$$是attention的维度，$$R$$是寄存器的大小。

受[Deep networks with stochastic depth](/1.7.llm_recommend)启发，提出了SL(stochastic length)来增加用户历史序列的稀疏性，推荐系统中的用户行为往往有周期性，并且以不同形式呈现，因此引入稀疏性可以在效果不怎么损失的情况下显著减少encoder的代价，可以scale为$$\Theta\left(\sum\_i n\_i^2\right)$$

定义$$\Gamma(n, L)$$为一个函数，从原序列$$x\_0, \ldots, x\_{n-1}$$中选出长度为$$L$$的子序列，具体方案如下：

$$
\begin{aligned}
& x\_0, \ldots, x\_{n\_i-1} \text { if } n\_i \leq N^{\alpha / 2} \\
& \Gamma\left(n\_i, N^{\alpha / 2}\right) \text { if } n\_i>N^{\alpha / 2}, \text { w/ probability } 1-N^\alpha / n\_i^2 \\
& x\_0, \ldots, x\_{n\_i-1} \text { if } n\_i>N^{\alpha / 2}, \text { w/ probability } N^\alpha / n\_i^2 \\
&
\end{aligned}
$$

即：

* $$n\_i \leq N^{\alpha / 2}$$时，保留原始序列
* $$n\_i>N^{\alpha / 2}$$时，有$$N^\alpha / n\_i^2 < 1$$：
  * 以$$1-N^\alpha / n\_i^2$$的概率只保留$$N^{\alpha / 2}$$长度的子序列
  * 以$$N^\alpha / n\_i^2$$的概率保留原始序列

对于$$\alpha \in(1,2]$$，原来的attention相关的复杂度是$$O\left(N^2 d\right)$$，现在可以降低到$$O\left({N^{\alpha /2}}^2 d\right)=O\left(N^\alpha d\right)$$。

其中的$$\Gamma(n, L)$$经过离线实验（原文附录D里），采用了feature-weighted sampler，即以$$1-f\_{n, i} /\left(\sum\_{j=1}^L f\_{j, i}\right)$$的概率进行采样，其中$$f\_i=t\_n-t\_i$$表示用户和item $$x\_i$$交互的时间和当前的时间差。

对稀疏性的改善如下，其中稀疏性指的是$$1-avg\_seq\_len/max\_seq\_len$$，越大表示短序列越多，即越稀疏($$\alpha=2$$表示不SL，即直接使用原序列)：

| Alpha ($$\alpha$$) | seq\_len=1,024 | seq\_len=2,048 | seq\_len=4,096 | seq\_len=8,192 |
| ------------------ | -------------- | -------------- | -------------- | -------------- |
| 1.6                | 71.5%          | 76.1%          | 80.5%          | 84.4%          |
| 1.7                | 56.1%          | 63.6%          | 69.8%          | 75.6%          |
| 1.8                | 40.2%          | 45.3%          | 54.1%          | 66.4%          |
| 1.9                | 17.2%          | 21.0%          | 36.3%          | 64.1%          |
| 2.0                | 3.1%           | 6.6%           | 29.1%          | 64.1%          |

**最小化激活值的内存使用**

&#x20;

在推荐系统中，**大的batchsize**很重要：

* 训练吞吐：[Software-hardware co-design for fast and scalable training of deep learning recommendation model](https://arxiv.org/pdf/2104.05158.pdf)一文说的
* 模型质量：[Mixed negative sampling for learning two-tower neural networks in recommendations](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/b9f4e78a8830fe5afcf2f0452862fb3c0d6584ea.pdf)、[A simple framework for contrastive learning of visual representations](https://proceedings.mlr.press/v119/chen20j/chen20j.pdf)和[Revisiting neural retrieval on accelerators](https://arxiv.org/pdf/2306.04039.pdf)

因此激活函数的内存占用就成为了主要的scaling瓶颈，这一点和llm不一样，llm一般是用小batchsize，并且内存主要由网络参数占据。HSTU设计了如下方式来减少激活函数的内存占用：

* 把attention外的linear layers从6减小到2，同时使用elementwise gating来降低MLP的计算（[Transformer Quality in Linear Time](https://arxiv.org/pdf/2202.10447.pdf)和[Efficiently modeling long sequences with structured state spaces](https://arxiv.org/pdf/2111.00396.pdf)）。第一篇对应的结构如下：

![gated-attention-unit](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4b10fba52996e98157ae25683d6df83dbf2e9a00%2Fgated-attention-unit.png?alt=media)

假设$$d$$是embed size，$$h$$是head数，$$d\_{q k}$$是attention的dim，$$d\_{ff}$$是ffn的hidden size，

* 将一些计算融合成一个op，包括$$\phi\_1\left(f\_1(\cdot)\right)$$、layer\_norm、optional dropout和输出MLP，将每一层的激活的内存占用减小到了$$2 d+2 d+4 h d\_{q k}+4 h d\_v+2 h d\_v=14 d$$（以bf16计算，一个参数2字节）---没懂

自己的理解：layer\_norm要存均值+方差，所以要$$2d\times 2bytes$$，所以上面式子就是，U($$2d$$)，V($$2d$$)，Q和K($$4hd\_{qk}$$)，QKV的norm(因为有均值和方差，所以是$$4hd\_v$$)，QKV($$2hd\_v$$)

对比transformer，在attention后用了ffn和dropout，假设中间状态是$$3hd\_v$$，那么ffn包括layer\_norm、linear、激活、linear、dropout，中间状态占用的就是$$2 d+4 d\_{f f}+2 d+1 d=4 d+4 d\_{f f}$$，一般来说，$$h d\_v \geq d$$，$$d\_{f f}=4 d$$，

自己的理解：输入x($$2d$$)，linear($$2d\_{ff}$$)，linear($$2d$$)，dropout(约等于$$1d$$)，layernorm一般是发生在最开始吧，所以应该是第一个$$2d$$改成$$4d$$吧，感觉不是在linear那里变成$$4d\_{ff}$$。。

然后，加上输入的input和input的layer\_norm($$4d$$)，和qkv的映射，总的激活状态是$$33d$$---没懂

所以HSTU的设计能够让scaling达到大于两倍的更深的layers(14d vs 33d)

此外，词表中的id占用了极大的内存，对于10b的词表，512维的emb，Adam优化器，用fp32来存储emb和优化器状态要60TB的内存，因此，

* 使用**row-wise的AdamW**优化器（[Training highly multiclass classifiers](https://www.jmlr.org/papers/volume15/gupta14a/gupta14a.pdf)和[FBGEMM: Enabling High-Performance Low-Precision Deep Learning Inference](https://arxiv.org/pdf/2101.05615.pdf)）
* 将优化器状态存在DRAM里，从而每一个float在HBM的占用从12bytes降低到2bytes

**cost-amortization(摊销)的预估scale up**

&#x20;

对于召回来说，已经有很多加速方法了，例如MIPS的ANN加速，或者OTM等的beam search方法。

对于排序而言，提出了M-FALCON(Microbatched-Fast Attention Leveraging Cacheable OperatioNs)，用于对$$m$$个候选，序列长度为$$n$$的输入进行预估

* 并行计算$$b\_m$$个候选，修改attention masks和$$rab^{p,t}$$ bias，使得这$$b\_m$$个候选的attention操作是完全一样的。从而将cross-attention的计算从$$O\left(b\_m n^2 d\right)$$缩减到了$$O\left(\left(n+b\_m\right)^2 d\right)=O(n^2d)$$，因为$$b\_m$$相比$$n$$要小得多
* (可选)将$$m$$个候选分成$$\left\lceil m / b\_m\right\rceil$$个microbatches，每个batch有$$b\_m$$个候选，从而在如下两个场合利用KV caching([Efficiently scaling transformer inference](https://arxiv.org/pdf/2211.05102.pdf))：
  * 前向pass中，用于降低消耗
  * requests之间，降低长尾耗时

#### M-FALCON详解

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2e7b4bb094820347656144b6f218a170e66a5671%2Fm-falcon.png?alt=media)

定义：

* 输入$$n$$个token $$x\_0, x\_1, \ldots, x\_{n-1}$$，每个token包括item和对应的action，即$$\left(\Phi\_0, a\_0, \ldots, \Phi\_{n\_c-1}, a\_{n\_c-1}\right)$$，也就是$$n=2 n\_c$$
* 精排有$$m$$个候选 $$\Phi\_0^{\prime}, \ldots, \Phi\_{m-1}^{\prime}$$，Micro batchsize $$b\_m$$，可以分成$$\text { numMicrobatches }=\left(m+b\_m-1\right) / / b\_m$$份
* $$\text { attnMask }=L\_{n+b\_m}$$，直接加到attention logit上，是一个下三角矩阵，即下三角是0，其他的是$$-\infty$$；此外，$$\operatorname{attnMask}\[i, j]=-\infty \text { for } i, j \geq n, i \neq j$$，表示大于n的那些item之间是互相看不到的，如下（白色可见，深色不可见）：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e0b3e0c4b27c421ec377459fcdd5ad29f6cfb83e%2Fm-falcon-mask.png?alt=media)

进行一次计算：$$\left(a\_0^{\prime}, a\_1^{\prime}, \ldots, a\_{b\_m-1}^{\prime}\right), k v C a c h e \leftarrow f\left(e m b L a y e r\left(\left(x\_0, x\_1, \ldots, x\_{n-1}, \Phi\_0^{\prime}, \ldots, \Phi\_{b\_m-1}^{\prime}\right)\right), \varnothing, \text { attnMask }\right)$$，其中$$\text { predictions }=\left(a\_0^{\prime}, a\_1^{\prime}, \ldots, a\_{b\_m-1}^{\prime}\right)$$

算完第一个microbatch后，得到这n个token的kvcache。算下一个microbatch的时候，把这个的microbatch拼到这n个token后面，复用kvcache和attnmask，得到这个microbatch的预估值，以此类推。

**其他**

&#x20;

发现了scaling-law：

![hstu-scaling-law](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-128cc39c7a2ca4e27dca7fd6a1843c405549e52d%2Fhstu-scaling-law.png?alt=media)

### Meta的sid+ID表征

[\[Meta 2025\]突破推荐系统瓶颈：统一语义与ID表征学习框架全解析](https://mp.weixin.qq.com/s/HOu8nnmL9ntGyGoQofcPSg)

[Unified Semantic and ID Representation Learning for Deep Recommenders](https://arxiv.org/pdf/2502.16474)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-32a48b87a630a8a81f378076b5b9d071782c0d67%2Funify-sid-id.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9cb3818669a09aef59ca740e8fa12dfbf6f23d7a%2Funify-sid-id2.png?alt=media)

其实思想很简单，原来推荐id的emb是D维，然后通过RQ-VAE学出一个sid，L个码本，每个码本有K个码，每个码对应D'维的emb（D'大于D），然后D和D' concat起来，当成新的emb丢给推荐模型，注意点：

* 联合训练sid与id，即loss=推荐loss+rqvae\_loss+重建loss(encoder输入和decoder输出)
* rq中浅层使用cos去检索，深层使用欧氏距离(发现cos更擅长解耦累积的嵌入，而欧氏距离在区分独特物品方面表现更优)，使得性能提升达到6%到17%，同时token大小减少了80%以上。

### Meta提升id emb稳定性

[Meta广告:提出使用语义ID提升推荐系统ID Embed稳定性](https://mp.weixin.qq.com/s/DIF8ClTyN1y4ah98VR6asw)

[Enhancing Embedding Representation Stability in Recommendation Systems with Semantic ID](https://arxiv.org/pdf/2504.02137)

假设总共有H个item id，有L级码本，每一级都是K个取值。c1、c2、c3的功能类比为一级类目、二级类目、三级类目。从semantic id映射到item id有如下几种方法

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-09a396a267de8900c9300cc6651bba606d8e6ed0%2Fprefix-ngram.png?alt=media)

* trigram/fourgram：可以理解为十进制数，c1是千位，c2是百位，以此类推
* all bigrams：相邻两个码组合，映射出一个id，那id就是前面的个数加上$$Kc\_i+c\_{i+1}$$，因此，可以映射出好几个id
* prefix-ngram：c1得到一个id，c1 c2得到一个id，c1 c2 c3得到一个id，因此可以得到好几个id

后面两种方法得到的id有多个，需要把他们对应的emb sumpooling，得到当前id的emb。对比发现prefix-ngram的效果最好

### Meta的VISTA

[Massive Memorization with Hundreds of Trillions of Parameters for Sequential Transducer Generative Recommenders](https://www.arxiv.org/abs/2510.22049)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9a7e4978249fab7e5a037d151e8d10678da09461%2Fvista-1.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-24fa92e74047b86fd5608f20adb7fff21ff1ada4%2Fvista-2.png?alt=media)

1. foundation model训练：100k的序列和100的seed序列(learnable的)一起通过一个quasi-linear attn进行训练，并把seed序列的输出存到kv cache里去
2. 下游模型在训练和infer：直接从kv cache取出来，然后和候选item去算target attn。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-92e8ba23a3fa2351be4f2cd93f30b2367fb25ddd%2Fvista-3.png?alt=media)

1. quasi-linear attn就是先算kv，再去和q搞一下
2. 加了一个生成式的重建loss，让seed序列的表示能力增强，即假设现在是第i个历史序列，那输入完整的长度为k的seed序列，再输入0到i-1个token，经过causal attn后只对0到i-1那几个的输出去预估next item，让seed序列在softmax attn下有预估next item的能力

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-74ea48636c11af1a5df604058353a1ca6b460c5b%2Fvista-4.png?alt=media)

看着是跨地域的同步

### Meta的Kunlun

[Kunlun: Establishing Scaling Laws for Massive-Scale Recommendation Systems through Unified Architecture Design](https://arxiv.org/pdf/2602.10016)，B200的MFU提升：17%->37%

Kunlun Transformer：

* Generalized Dot-Product Attention (GDPA)：Q是序列特征，KV是非序列特征

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-062eb81d5feb228a19d61be977302f2257f3c356%2Fkunlun-pffn.png?alt=media)

* self-attn：序列内部的self-attn，看了下论文，应该这部分全是sliding window attn

Kunlun interaction：

* Weight Generation：输入非序列特征，生成GDPA要的权重
* Hierarchical Seed Pooling(HSP)：将序列表示压缩得到序列summary，有点复杂。。用了PMA（interformer里的，类似perceiver）
* Global Interaction：将序列summary和非序列特征一起过多expert的wukong(每个wukong就是一个Linear+FM)

Computation Skip (CompSkip)：偶数层跳过self-attn，只算HSP；奇数层跳过HSP和PFFN，计算self-attn

Event-level Personalization：点击序列比展现序列更重要，所以对应的序列长度、dim、HSP压缩的token数、window size、层数都更大

看着scale的效果更好

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3a1749d0ce85b8db1b4fb5d4ce2aec1853b5b1fe%2Fkunlun-scale.png?alt=media)

### Meta的ULTRA-HSTU

[Bending the Scaling Law Curve in Large-Scale Recommendation Systems](https://arxiv.org/pdf/2602.16986)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a46dac9dac5233d7dd1451c10d141c573fa53737%2Fultra-hstu.png?alt=media)

* item和action加起来成为一个token，而不像之前hstu ranking是2个token，可以缩短一半的序列长度
* 金字塔堆叠，参考tt电商的onetrans([Onetrans: Unified feature interaction and sequence modeling with one transformer in industrial recommender](https://arxiv.org/pdf/2510.26104))，上层把早期的行为扔掉只对最近的算attn
* MoT（Mixture of Transducers）：不同序列过不同的HSTU，然后再merge
* 序列是按由近及远组织的，用了如下的semi-local attn，global window是K2，local window是K1

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2be09b1bf9971da3533bffd8a46571f0553f969d%2Fsemi-local-attn.png?alt=media)

* bf16/fp8的混精度算子融合，同时适配AMD卡（可能能支持异构gpu训练？）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-39269fb850f9e326dfae199f63b3ab0dc6386467%2Ffuse-mixed-ultra-hstu.png?alt=media)

### Meta的SlimPer

[SlimPer: Make Personalization Model Slim and Smart](https://arxiv.org/pdf/2607.12281v1)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9dace636ce3250fcbbe1e06403ea8d25a776ef7b%2Fslimper1.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2e5901ca84affc5825dd8fdb70831ca32b3266f5%2Fslimper2.png?alt=media)

整体看着和longer很像，图中

* K/V：全部user-side tokens，数量N在千到万的量级，
* Q：item侧或者cross的特征，搞出K个token，k大概是16到64之间

过程：

* 先Q和K/V做一次cross attn，得到一个qxd的向量；序列特征和sparse特征(都是作为K/V)分别搞一下，得到2个这种向量
* 从原始Q搞出t个template，即txd，和上面cross attn的结果算点积，得到txq的lambda，即2个lambda
* 然后做一个refine的操作，这两个lambda，还有其他的一些dense特征，concat并过mlp映射到K维，再残差一下，得到下一层输入

### Meta的Mosaic

[Mosaic: A Fleet of User Embedding Specialists for Recommendation at Meta](https://arxiv.org/pdf/2607.24015)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0e1fddb3e04cf6f46da17e77abc76a51fe801f6f%2Fmosaic.png?alt=media)

不是只训练一个通用用户embedding模型，而是维护一组不同类型的用户embedding专家模型，每个专家负责捕捉用户行为的一个侧面，然后把这些embedding作为标准特征喂给下游retrieval、ranking、integrity(平台治理/生态安全之类的)等模型。

四类专家：

* Memorization-driven：用超大embed hash table记住细粒度用户偏好，各种纯id类特征。
* Dense-heavy：处理大量聚合统计特征，比如1d/7d/28d的点赞、评论、分享、跨场景计数，用MHTA([Multi-Head Talking Attention](https://arxiv.org/pdf/2003.02436))、SEDot([Squeezeand-Excitation Networks](https://arxiv.org/pdf/1709.01507))、Wukong这类结构建模非线性交叉。
* Sequential：建模用户长行为序列，基于HSTU/attention，加了上下文token、内容/行为metadata拆分token、层级attention、MoE等。
* CoTrain：把下游ranker的梯度也接进用户塔，让embedding更贴近某个具体业务面的目标。

前3个专家是上游的多任务训练，第4个专家是下游任务去训练

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2cadff40ab9ec3a6895724e574120e038d5fdbc3%2Fmosaic-arch.png?alt=media)

有没有target信息？

* training-only architecture：可以吃non-user features，包括item/context相关特征，并用engagement label训练。
* user tower：吃用户侧特征，输出一个或多个 user embedding。
* 训练时non-user分支的loss/gradient 会反传到user tower，让user embedding学到对下游任务有用的表示。
* inference时只部署user tower，只给用户侧输入

serving：

* 低成本/轻模型/可在线现算：CPU online
* 高freshness/重模型/必须现算：GPU online，用如下方式降成本：
  * AOTI：PyTorch的Ahead-of-Time编译路径，线上推理不要每次走Python eager runtime，而是提前把模型图编译好，并尽量fuse operator，减少Python调度、kernel launch、算子间开销
  * predictor tuning：
    * batch coalescing：把短时间内多个请求合成batch，提高GPU利用率，但要控制等待时间。
    * thread-pool sizing：线程池大小要合适，太小吃不满，太大会争抢CPU、调度变慢。
    * intra/inter-op parallelism：控制单个算子内部并行和多个算子之间并行，避免线上推理过度并发导致抖动。
  * model split：把模型拆成不同子路径，让sparse embedding部分和dense/transformer部分走更适合自己的执行方式，而不是整个模型硬塞进一个统一执行图里。
  * memcache：用户embedding不会每秒剧烈变化，很多用户还会在短时间内多次请求。于是线上先查cache，TTL是2小时
* 大模型/freshness可放宽/全量用户可周期更新：GPU offline batch inference，写embedding index，线上读表

### 美团的NLGR

生成式重排

[NLGR: Utilizing Neighbor Lists for Generative Rerank in Personalized Recommendation Systems](https://arxiv.org/pdf/2502.06097)

将邻居候选列表引入生成式reranking框架，结合evaluator-generator策略和非自回归采样机制，使reranker可跳跃组合优化。

### 美团的SessionRec

[SessionRec: Next Session Prediction Paradigm For Generative Sequential Recommendation](https://arxiv.org/pdf/2502.10157)

提出基于 HSTU 架构的“下一会话预测”生成式推荐框架，新增 session 内排序损失，提升候选列表质量。已部署于美团主页面召回阶段，在线 A/B 实验表明相比 baseline 有显著提升。

### 美团的MTGR

[MTGR：美团外卖生成式推荐Scaling Law落地实践](https://mp.weixin.qq.com/s/JiDOqD-ThU0Upp6xnNg3Nw)

[推荐算法(2025.5.29)：美团的生成式推荐落地方案](https://mp.weixin.qq.com/s/hQrLSInDnrO5kgCW8I6gCQ)

[MTGR: Industrial-Scale Generative Recommendation Framework in Meituan](https://www.arxiv.org/pdf/2505.18654v2)

听说是替换了精排

传统模型：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c501efa9f02d819842e55ad5ccfa5dd13e019dd1%2Fmtgr-tradition.png?alt=media)

其中：

* seq：用户的长期历史序列，静态的
* rt：用户的实时序列，动态的
* cross：历史与当前item交叉后的ctr/cvr

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ba7c0b4f60abda4ca53f13100038cf2f3756f86f%2Fmtgr.png?alt=media)

* 人口属性组成若干个token放在最前面
* 然后放静态序列seq
* 然后放rt序列，注意这里是由近及远地排列，即先发生rt2再发生rt1
* 最后放若干个target（把cross放到candidate里了），也是由近及远地排列
* 堆叠若干层hstu后得到target1、2、3的预估logit

mask规则（深色是mask，白色可见）：

* 人口属性和静态序列都是可见的
* rt序列未来的看不到现在的，即rt2看不到rt1
* 3个target：
  * 相互之间仅自己可见
  * 由于发生时间可能夹杂在rt1和rt2之间，所以需要按时间戳来决定它们对rt1和2的mask，例如图中的：
    * 先有target3：但target3比rt2还早，所以它看不到rt1、rt2
    * 再有target2：但target2在rt2和rt1之间，所以它看得到rt2，看不到rt1
    * 最后有target1：且target1发生在rt2和rt1之后，所以它看得以rt2和rt1

总结一下事件的发生顺序：

```python
seq2->seq1->target3->rt2->target2->rt1->target1
```

### 美团的MTGRBoost

[MTGRBOOST: Boosting Large-scale Generative Recommendation Models in Meituan](https://arxiv.org/pdf/2505.12663)

看着像是MTGR的架构

### 美团的EGA-V1

[美团UniROM:广告End2End全链路生成式建模范式](https://mp.weixin.qq.com/s/GfuxMwprP5TVSUTBl7Wc6w)

[EGA-V1: Unifying Online Advertising with End-to-End Learning](https://arxiv.org/abs/2505.19755)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-67e7531ff2e7ecf103aec97305eab66211db7704%2Fegav1-hfs.png?alt=media)

* 传统的特征抽取服务如左图，每个阶段都会rpc请求对应特征
* hfs：user侧只取一次，item侧只保留类别型特征，干掉交叉特征，全库取一次

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-eac910f41bdf23b7be1b0134bcef96547965f733%2Fegav1.png?alt=media)

* 输入：user长度为L的序列、user和context特征、全库N个候选、最终的K个广告位（slot）
* recformer
  * Global Cluster Former(GCF)：聚类版本的self-attention，通过一个可学习的聚类矩阵将序列长度从$$N$$（候选10w量级，用户序列千级别）压缩到$$N\_c$$（大概100），作为新的K和V，再去和原始的Q(长度为$$N$$)做attention，算完后长度还是$$N$$
  * Mid-fusion Interest-Former(MIF)：用户序列和候选序列一起算cluster attention，即互相算一个target attention
  * 因为是mid-fusion，所以就是比如先2层gcf，再一层mif，这样堆叠
  * 最终输出N个候选的表示，和user emb concat一起，过mlp得到预估ctr
* aucformer
  * Non-autoregressive generator(NAR-generator)：$$N$$个候选$$H\_{ad}\in R^{N\times d}$$，$$K$$个广告位$$T\in R^{K\times d}$$，相乘得到分配矩阵$$A=H\_{ad}T^T\in R^{N\times K}$$，结合出价$$b$$得到广告$$i$$在位置$$k$$上的概率：$$\mathrm{z}*{i ; k}=\operatorname{Softmax}\left(\left\[e^{w\_z} \times \hat{q}*j^{\mathrm{ctr}} \times b\_j+\mathbf{A}*{j, k}\right]*{j=1}^K\right)\_i$$）。推理的时候每个slot取得分最高的广告（根据先后顺序去重）
  * Permutation-aware evaluator：把前面选出来的K个广告的emb，和K个slot的emb，通过GCF+MLP（同样最后会和user emb concat一起，过mlp）得到K个位置的考虑了位置信息和外部信息（user emb）的预估ctr
  * Payment network：K个广告的emb，evaluator输出的预估ctr，以及除了当前广告外其他K-1个广告的bid，concat起来过mlp，得到最后的预估转化率

训练：

* 预训练：除了计算正常下发曝光的K个Item, 还会基于流行度采样$$N\_s$$个样本用于计算整体的损失
* 后训练：
  * 训练RM：permutation-aware evaluator当做奖励模型，只用曝光样本训练
  * RL：基于RM，计算整个list的奖励，看着有点像vcg的东西
  * 优化Payment network：引入拉格朗日乘子进行优化

### 美团的HoMer

[推荐算法(2025.10.25)：美团堆更多特征、堆更多上下文，2%效果](https://mp.weixin.qq.com/s/c5Fx867rNsZxgsNBhRu-kg)

[HoMer: Addressing Heterogeneities by Modeling Sequential and Set-wise Contexts for CTR Prediction](https://arxiv.org/pdf/2510.11100)

### 美团的MTFM

[MTFM: A Scalable and Alignment-free Foundation Model for Industrial Recommendation in Meituan](https://arxiv.org/pdf/2602.11235)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d6d8d40e109e1609c40070f08818c651740cb5ed%2Fmtfm.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-dd700c9ad7072471af353bc53990fc97f2a7d858%2Fmtfm-mask.png?alt=media)

整体看和MTGR很像，H是历史行为序列，R是实时序列，T是target token

* 上面的3种token都包括多场景的序列，直接按顺序concat起来，采用图中的mask方式（和MTGR思想类似）
* attention部分有2层，都用的GQA，另外还用了GLN（group layer norm），H、R、T分到不同的group里去
  * 第一层是full attn，即H、R、T一起做self-attn；
  * 第二层是target attn，即H和R作为K/V，T作为Q，算attn

整体比较好懂，group layer norm感觉可以参考下

但感觉这种merge序列的方式，如果要加场景，感觉整个模型都得重训，有点不太像一个真正的foundation model

### 美团的MBGR

[MBGR: Multi-Business Prediction for Generative Recommendation at Meituan](https://arxiv.org/pdf/2604.02684)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1fa98f92a39816c64f1f0dec8fcf6af83c5df811%2Fmbgr.png?alt=media)

适配多业务，一个是在encoder和sid里把业务id考虑进去，另一个是label的设计，如下图，最后一行是完整的用户序列，第二列的意思就是，我已经发生了A1了，那下一个item如果是A业务，它的label就是A2，如果是B业务，就是B1，以此类推

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-fe7879c7cef2abd5d0b19d63e5c70298e690f96b%2Fmbgr-label.png?alt=media)

### 阿里的HeteroRec

[Hierarchical Causal Transformer with Heterogeneous Information for Expandable Sequential Recommendation](https://arxiv.org/pdf/2503.01469)

item有各种特征，如title、img、id等

* 左边：异构信息分解（HTFL）把1-T个item的各种特征（每个特征当成一个token）flatten成一个长序列，然后过一个causal transformer得到token粒度的输出list，再过一个item粒度的causal transformer得到item粒度的输出list
* 右边：$$2 \sim T+1$$个item，每一种特征把$$2 \sim T+1$$拼到一起过各自的tower，每个tower得到的感觉还是$$2 \sim T+1$$个输出，这个输出和左边的token粒度的输出List算个LMP，然后过一个item cross tower，我猜输出的是$$2 \sim T+1$$个item表示，和左边的item粒度输出List再算一个LMP
* LMP：左边是$$1 \sim T$$，右边是$$2 \sim T+1$$，t1过个mlp预测t3，t1过另一个MLP预测t2，即multi-step预估

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d6794ea42205912515905e96dfad0ab8c3dc0345%2FHeteroRec.png?alt=media)

### 阿里的SORT-Gen

[sigir'25「淘宝」多目标重排｜A Generative Re-ranking Model for List-level](https://mp.weixin.qq.com/s/b0PdyR4bFUXhLj9dToBK5A)

[A Generative Re-ranking Model for List-level Multi-objective Optimization at Taobao](https://arxiv.org/pdf/2505.07197)

将用户的所有行为聚合成一条样本。每个行为包括四个方面：用户侧、位置、商品侧、精排打分，将行为序列送入tansformer中。

保序回归损失

生成方法：先设计不同的rankscore得到多路序列候选，再比较每一路的top1，决定召回哪一路。

纯价值驱动的列表生成可能有同质化的风险，导致多样性降低。引入相似度惩罚：

### 阿里的GPSD

[Scaling Transformers for Discriminative Recommendation via Generative Pretraining](https://arxiv.org/pdf/2506.03699)

* 生成式预训练：基于用户行为序列进行自回归生成训练，预测下一个item。
* 判别式训练：使用上面训练的Transformer，除了用户行为序列和target item之外，还输入其他特征，输出正常的分类概率。

提出五种参数转移策略：

* no transfer（NT）：从头训练，作为基线。
* full transfer（FT）：转移所有参数（sparse+dense）。
* sparse transfer（ST）：仅转移sparse
* FT\&SF：转移所有参数，冻结sparse。
* ST\&SF：转移并冻结sparse。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f1daa4b30ea09435666f1f4e97c93fbfbdc7b36c%2Fgpsd.png?alt=media)

实验发现ST\&SF和FT\&SF效果最好，上线时用的是ST\&SF，可以理解为只是用生成式来训了一下sparse emb，然后freeze住

不过落地的场景比较小

### 阿里的TBGRecall

[TBGRecall: A Generative Retrieval Model for E-commerce Recommendation Scenarios](https://arxiv.org/pdf/2508.11977)

引入了下一会话预测（Next Session Prediction, NSP），将会话和物品进行分区，并采用多会话预测（MSP）和令牌专用网络（TSN）等优化手段

### 阿里的REG4Rec

[REG4Rec: Reasoning-Enhanced Generative Model for Large-Scale Recommendation Systems](https://arxiv.org/pdf/2508.15308v2)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-65cd7f6985118ff1f4bb0c9539046d534bc8665e%2Freg4rec.png?alt=media)

### 阿里的MMQ

[MMQ: Multimodal Mixture-of-Quantization Tokenization for Semantic ID Generation and User Behavioral Adaptation](https://arxiv.org/pdf/2508.15281)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9c73b6dbd5942f34118e2482132b56a3c2e831fa%2Fmmq.png?alt=media)

tokenizer训练阶段：

* MoE：有共享expert、图片自己的expert、文本自己的expert，三者融合后再过decoder
* loss=重构loss（整个item的）+辅助loss（图片和文本各自的）+正交正则loss（专家多样性、避免坍缩），

其中，重构loss如下，$$e$$是encoder的输入，$$z$$是decoder的输入，$$z\_q$$是和$$z$$的cos最大的code（即下面的hard\_ind）对应的向量(即下面的soft\_ind)

$$
\mathcal{L}\_{\text {recon }}=\left|\mathbf{e}-\operatorname{decoder}\left(\mathbf{z}+\operatorname{sg}\left(\mathbf{z}\_q-\mathbf{z}\right)\right)\right|^2
$$

用户行为finetune阶段：

* 通过tokenizer得到对应的code，把code接到推荐模型里，可以适配判别式任务/生成式任务
* loss=task loss+重构loss+正交正则loss

### 阿里的AMEN

[Next Interest Flow: A Generative Pre-training Paradigm for Recommender Systems by Modeling All-domain Movelines](https://arxiv.org/pdf/2510.11317)

All-domain Moveline Evolution Network (AMEN)：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1af1fdeea976a0478c81eb5c6a177eed9dcefa18%2Fnext-interest-flow.png?alt=media)

* 生成式预训练：拿判别式模型（transformer）来初始化decoder的权重，输入历史序列，预估未来的T个item，在正常的生成式loss之外还加了：
  * Velocity：限制模型预估的不要太跳跃，即相邻item尽量像一点：$$\mathcal{L}*{\mathrm{vel}}=\sum*{t=t\_0+1}^{t\_0+T-1}\left|\left(\hat{\mathbf{f}}*t-\hat{\mathbf{f}}*{t-1}\right)-\left(\hat{\mathbf{f}}*{t-1}-\hat{\mathbf{f}}*{t-2}\right)\right|\_2^2$$
  * diversity：h个attention head两两的相似度尽量小：$$\mathcal{L}*{\mathrm{div}}=\sum*{t=t\_0}^{t\_0+T-1}\left(\frac{1}{\binom{H}{2}} \sum\_{i=1}^{H-1} \sum\_{j=i+1}^H\left(\operatorname{sim}\left(\mathbf{h}\_i, \mathbf{h}\_j\right)\right)^2\right)$$
* 判别式微调：transformer的输入有如下几部分
  * 预训练产出的模型freeze，预估未来的T步，然后当成K和V，target item当成Q，算attn
  * target item+context（即当前时刻往前若干时间的序列）经过calibration net得到c
  * 用户特征、1-diversity、第一个预估token的velocity
* 判别式增强（TSP，Temporal Sequential Pairwise）：对calibration net加的辅助loss
  * 直观理解：同样一条t-7到t的序列，
  * t时刻收藏了书包，没收藏女装，说明应该归因到t-7到t-1里书包和夹克相关的行为，而和t-3到t-1的蜂蜜没啥关系
  * t-1时刻把蜂蜜加进购物车，而在t-3时刻进行了搜索、t-2时刻加标签，并没有在t-3时刻收藏蜂蜜
  * 但实际loss就是个bpr，即给定一个pair对，正样本的预估分比负样本高得越多越好，而因为每个item是根据历史序列得到的预测，所以变相地鼓励模型通过历史序列来隐式地归因：$$\mathcal{L}*{\text {tsp }}=-\frac{1}{\left|\mathcal{D}*{\text {paired }}\right|} \sum\_{\mathcal{D}*{\text {paired }}} \log \sigma\left(\mathbb{I}\left(y*{t\_1}\right)\left(c\_{t\_1}-c\_{t\_0}\right)\right)$$

### 阿里的GRC

[Learning to Reflect and Correct: Towards Better Decoding Trajectories for Large-Scale Generative Recommendation](https://arxiv.org/pdf/2602.23639)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d44736b09891427d9473b70b7f4755d6afa0d0c5%2Fgrc-idea.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7757419fe970c85d57371503760ee12f323979b6%2Fgrc.png?alt=media)

### 快手的RecGPT

[RecGPT: Generative Personalized Prompts for Sequential Recommendation via ChatGPT Training Paradigm](https://arxiv.org/pdf/2404.08675)

<https://zhuanlan.zhihu.com/p/699985083>

### 快手的OneRec（非常扯淡）

[OneRec: Unifying Retrieve and Rank with Generative Recommender and Preference Alignment](https://arxiv.org/pdf/2502.18965)

[OneRec Technical Report](https://arxiv.org/abs/2506.13695)

[「快手」全链路统一建模｜OneRec: Unifying Retrieve and Rank with Generative](https://mp.weixin.qq.com/s/wTEWnSe8aFaPiLsnoIeOSA)

[效果&成本双突破！快手提出端到端生成式推荐系统OneRec！](https://mp.weixin.qq.com/s/o1Io4j7KsA9tvQX-_JCGwA)

召回排序合为一体的生成式推荐——根据历史session序列，预测下一个session。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0de2173ef2a0e17a5f2ddc41a1ef1d221320627b%2Fonerec-arch.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-cc02a980060d5c3d7ce4ce59bcb87c6c2181c4c9%2Fonerec.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9789db90f0a8a05a5e40220eed58cb6d64808a22%2Fonerec-kmeans.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f41a156cebe956bf5640308630873a1066e608de%2Fonerec-deploy.png?alt=media)

### 快手的OneRec-V2

[OneRec-V2 Technical Report](https://arxiv.org/pdf/2508.20900)

发现v1里encoder很重，改了下，让decoder变得很重

### 快手的OneLoc

[OneLoc: Geo-Aware Generative Recommender Systems for Local Life Service](https://arxiv.org/pdf/2508.14646)

### 字节的LONGER

[LONGER: Scaling Up Long Sequence Modeling in Industrial Recommenders](https://arxiv.org/abs/2505.04421)

### 字节的Next-User Retrieval

[Next-User Retrieval: Enhancing Cold-Start Recommendations via Generative Approach](https://arxiv.org/pdf/2506.15267)

### 字节的RankMixer

[RankMixer: Scaling Up Ranking Models in Industrial Recommenders](https://arxiv.org/abs/2507.15551)

[MLP-Mixer: An all-MLP Architecture for Vision](https://arxiv.org/pdf/2105.01601)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-809d4e1e8bdf6a2eb7ef3ed3185f5f769d2f5ce2%2Fmlpmixer.png?alt=media)

对于一个序列来讲，有两种混合：

(i) 给定的一个位置 (ii) 不同的位置之间，或者和(i)同时进行

对于CNN来讲，

* pooling：完成(ii)
* 卷积：$$1\times 1$$的卷积完成(i)，$$N\times N$$的卷积完成(ii)

对于transformer来讲，

* attention：完成(ii)，即不同位置间的融合
* FFN：完成(i)，即同一个位置内的融合

mlpmixer：明确区分(i)和(ii)，且分别用一个MLP去实现

* 第一层token mixing：做(ii)，即不同位置间的融合
* 第二层channel mixing：做(i)，即同一个位置内的融合

rankmixer v1：只有token mixing；rankmixer-large：token mixing和channel mixing都有了

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f90e68061766d61ceaeb64b462fc973d84d76c19%2Frankmixer.png?alt=media)

rankmixer的细节：

人工分组：按先验知识，例如user的人口属性是一组，user的短序列行为是一组，对于每一组而言：

* 所有特征concat后假设有10000维，以每个token 384维为例，就是切成$$10000/384 +1=21$$个token
* 过一层mlp，把384映射成$$21\times 512$$，再split成21个token出来，所以就有21个token，每个是512维

假设有2组，第1组是21个token，第2组是3个token，那总共就是24个token，每个512维，第1层的rankmixer如下：

* mixup转置，new\_tokens假设是16，那每个新token就是$$24\times 512/16=768$$维

```python
def mixup(x, new_tokens=16):
    # 输入[bs, 24, 512]，最终输出[bs, 16, 768]
    # [bs, 24, 512]
    bs, token_num, dims = x.get_shape().as_list()
    # 512/16 * 24 = 768
    new_dim = dim // new_tokens * token_num
    # 先把[bs,24,512]改成[bs, 24, 16, 512/16]
    output = tf.reshape(x, [-1, token_nums, new_tokens, dim // new_tokens])
    # 把[bs, 24, 16, 512/16]改成[bs, 16, 24, 512/16]
    output = tf.transpose(output, [0, 2, 1, 3])
    # 把[bs, 16, 24, 512/16]改成[bs, 16, 768]
    output = tf.reshape(output, [-1, new_tokens, new_dim])
    return output
```

* 搞16个独立的FFN，每个可以是$$768->768\*2->768$$这两层的mlp（当然，还有很多别的变种，这里就不说了）

第二层也是先mixup转置，例如你设置8个new\_tokens，那就对应8个独立的FFN

最后一层的输出，取mean pooling，再送到后面的网络去

[AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks](https://arxiv.org/pdf/1810.11921)这个好像也提了pertoken

pertoken ffn+qkv是[Hiformer: Heterogeneous Feature Interactions Learning with Transformers for Recommender Systems](https://arxiv.org/pdf/2311.05884)里提出来的

onetrans的前身：[InterFormer: Effective Heterogeneous Interaction Learning for Click-Through Rate Prediction](https://arxiv.org/pdf/2411.09852)

### 字节的R3-VAE

[R3-VAE: Reference Vector-Guided Rating Residual Quantization VAE for Generative Recommendation](https://arxiv.org/pdf/2604.11440)

头条的GR

### Pinterest的PinRec

[PinRec: Outcome-Conditioned, Multi-Token Generative Retrieval for Industry-Scale Recommendation Systems](https://arxiv.org/pdf/2504.10507)

[Pinterest最新干货PinRec:生成式检索在推荐系统的落地实践](https://zhuanlan.zhihu.com/p/1927696466241093671)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2f7849fd6451b4107da596d372c2ae49bfe35d0a%2Fpinrec-demo.png?alt=media)

用户的历史序列如上图，有item也有query，还有对应的场景。

item表示：没有直接用itemid的emb，也没有用sid。对于query，用[OmniSearchSage: Multi-Task Multi-Entity Embeddings forPinterest Search](https://dl.acm.org/doi/pdf/10.1145/3589335.3648309)(其实就是个bert，不过和item一起拿用户行为训练过了)得到一个训练好的emb；对于item，用pinsage的表示。后面都会接2-3层mlp。此外，还有个item id的可学习的emb

经过transformer之后，最后一层的hidden state，和下面的“条件”一起concat起来过一个mlp得到item的表示

结果条件生成：

* 每种action（点击、保存等）学一个emb
* 训练时拿t+1的action作为t的额外输入，即期望下一时刻看到这种action的item
* infer时把每种action都作为输入去分别召回，然后按给定的不同action的权重比例进行merge

MTP：有点绕，大概意思就是现在是时间$$t$$，在后面的$$\[t+1, t\_{lim}]$$里采样出一个$$t'$$，然后找到$$\[t', \Delta]$$这个窗口里和user最近的那个item（就公式里的min）拿来加到loss里去

$$
\begin{aligned}
& L\_\theta^{\operatorname{mt}}\left(H\left(u, t\_{\max }\right)\right)= \\
& \quad \frac{1}{\left|H\left(u, t\_{\max }\right)\right|} \sum\_t \mathbb{E}*{t^{\prime} \sim p*{t^{\prime}}(\cdot \mid t)}\left\[\min \left{L\_s\left(\hat{\mathbf{i}}*{u, t}, \mathbf{i}*{u, i}\right) \mid \forall i \in\left\[t^{\prime}, t^{\prime}+\Delta\right]\right}\right]
\end{aligned}
$$

### Pinterest的PinFM

[推荐算法(2025.7.19)：Pinterest出品必是精品——GPT建模行为序列](https://mp.weixin.qq.com/s/APOHCngQR5Dt_o4rNCCMbg)

[PinFM: Foundation Model for User Activity Sequences at a Billion-scale Visual Discovery Platform](https://arxiv.org/pdf/2507.12704)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-fb679425222bb7a6c8f5f9c0ea72c99f36b91fc7%2Fpinfm.png?alt=media)

#### 预训练

两年用户数据，序列最长16k，切成多个小段，每段长度$$L$$是几百。模型用的是带pre-ln的gpt2(decoder only)，也试过hstu，效果类似，基于info-nce设计了3个loss

* ntl（Next Token Loss）：下一个正样本
* mtl（Multi-Token Loss）：未来$$L'$$个正样本
* ftl（Future-Token Loss）：最终要用到下游任务里，但那些任务的序列的长度$$L\_d$$较短，所以从第$$L\_d$$个开始预测mtl

#### 微调

有2种融合方式：

* late fusion：基于用户历史序列产出用户emb，和其他特征一起输入精排
* early fusion：将候选item加到用户序列里，实时产出用户emb，再和其他特征一起输入精排（采用这种方案）

一些技巧：

* 微调时除了精排的二分类loss，可以加入ntl和mtl辅助loss
* 把pretrain部分（user序列）的学习率设置为精排的1/10，以保留预训练知识。
* pretrain部分的输出同样接了网络预估精排目标，这个logit和正常精排的logit算mse来对齐

冷启item优化：

* 10%的概率针对候选item随机选一个id
* 如果item是最近x天的item，pretrain部分的输出加上dropout

#### serving

DCA(Deduplicated Cross-Attention Transformer)：user的历史序列当成context，把每层的kv cache存起来，然后和候选item算cross attention就行了。这里的去重是batch维度的，即一个batch里会有不少同一user的相同序列，只保留一份去算kv cache，然后再还原回去，每条instance去算cross attn。serving时可以理解为就是broadcast

用torchrec来实现分布式的emb table，每个item对应256维emb，拆成8个子向量，每个32dim。用FBGEMM的n-bit min-max量化算子，并加上了ptq量化，把32dim的fp16量化成了32个int8/int4+1个fp16的scale value + 1个fp16的bias value。在int4的情况下，每个vec从512bit压缩到了160bit，降低了31.25%的emb table。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b165756f35a6080ead275877e2f20928b6f6230f%2Fpinfm-serving.png?alt=media)

### Pinterest的UniPinRec

[UniPinRec: Unifying Generative Retrieval and Ranking at Pinterest Scale](https://arxiv.org/pdf/2606.00422)

生成式(GR/TIGER)的问题：

> Meta的两篇论文[How Well Does Generative Recommendation Generalize?](https://arxiv.org/pdf/2603.19809)和[Unifying Generative and Dense Retrieval for Sequential Recommendation](https://arxiv.org/pdf/2411.18814)(LIGER)

* lossy compression：item信息被压成几个离散token，细粒度信息会丢
* generation objective inefficient：next-token生成不是最适合topK retrieval的目标
* cold-start failures：理论上semantic ID有冷启动优势，但实际beam search可能召不出来，因为新item没有交互，模型没有见过它作为target，自然容易给它低概率。
* token relations memorized in-parameter：所谓“泛化”很多时候是prefix token级记忆，GR看起来的item-level generalization，很多可以解释成 token-level memorization。即模型不是凭空理解了item之间的复杂关系，而是因为不同item共享semantic ID prefix，模型记住了prefix transition

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-725f97c01f110ceda6a6dcc4dfaeeb70337575f2%2Funipinrec.png?alt=media)

本文将召回和粗排(感觉应该算是召回内的rerank)合到一个模型里，2个head负责不同工作，还是item id粒度的建模，并没有用sid

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-41b64c0eaeccda7f39e7eb6380152c54c577297f%2Funipinrec-arch.png?alt=media)

* 输入表示：将action emb和item emb concat在一起
* mask机制：
  * 历史序列里：以一定概率mask掉action，用`[mask]`替换
  * 候选item及未来item的action：全部用`[mask]`
* attention：类似m-falcon的一个causal mask，即候选可以看见所有历史的，但候选之间不可见（注：图中的attn mask里深色是可见的）
* 训练目标：
  * next-item predict（召回loss）：对每个没mask的历史位置，算samlped softmax
  * action predict（排序loss）：h是一个mlp，映射到C个actoin，$$\mathcal{M}\_{\text {past }}=\left{i: m\_i=0\right}$$是历史里mask掉的那些item

$$
\begin{gathered}
\mathcal{L}*{\text {action }}=\sum*{c=1}^C w\_c\left\[\frac{1}{\left|\mathcal{M}*{\text {past }}\right|} \sum*{i \in \mathcal{M}*{\text {past }}} \ell*{\mathrm{BCE}}\left(h\_{\psi\_c}\left(z\_i\right), a\_i^{(c)}\right)\right. \\
\left.+\frac{1}{k} \sum\_{j=1}^k \ell\_{\mathrm{BCE}}\left(h\_{\psi\_c}\left(z\_j^{\prime}\right), a\_j^{\prime(c)}\right)\right],
\end{gathered}
$$

* 优势：
  * 召回和排序的序列是一样的
  * 召回和排序的模型权重是可以share的，排序可以直接用召回的ckpt初始化
  * random mask加强泛化能力

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3faca3716b47fa86ca492f817d7adbf517b93474%2Funipinrec-serving.png?alt=media)

他们的召回和排序服务是部署在同一机器/卡上的不同进程，感觉需要将同一个请求的召回/排序请求打到同一机器/卡上。

主要是排序复用召回的shared KV pool。一般跨进程的kvcache传输会有d2h再h2d的开销，所以做了一个shared GPU memory pool：

* 每个召回服务预分配一个$$\[L,S,H,n,D]$$大小的gpu pool，对应(layer数，slot数(一台机器/一张卡缓存的请求数)，kv heads, 历史序列长度, head dim)，然后通过CUDA IPC handles暴露给排序服务。
* 排序服务打开这些handle，把同一块GPU allocation映射到自己的地址空间。slot会round-robin复用。

实验： 基线：Pinrec，用ANN检索出K个候选，直接进排序(TransAct V2的精排) UniPinRec：先ANN（L0），再排序(L1)，得到K个候选，再进上面的排序

场景：Board More Ideas(BMI，围绕某个收藏夹/画板继续推荐item)和push场景，有收益

### 小红书的GenRank

最开始叫rankgpt，后来改名了，GenRank

[小红书RankGPT:推荐系统生成式精排的落地实践](https://mp.weixin.qq.com/s/2D31iyO07DNdTBPdHp-3Qw)

[Towards Large-scale Generative Ranking](https://arxiv.org/abs/2505.04180)

[「小红书」生成式方案｜Towards Large-scale Generative Ranking](https://mp.weixin.qq.com/s/C4CKr4jfm_f799KCeyFrSw)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bb3949018f298eb0a1401028a7b08e4113e8d921%2Fgenrank.png?alt=media)

* hstu是item和action当成2个token，输入历史item+action，对于候选item，预估其action
* genrank把item和action合成一个token（两者的emb相加），输入历史item+action，对于候选item+masked action，预估其action

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c11c965410e9b846c119b3126761855888c4c872%2Fgenrank-mask.png?alt=media)

mask：target之间互相不可见，但每个target都能看到所有历史

还设计了一些特殊的位置emb，全部加起来，和item emb以及action emb也加起来：

* 位置emb：下标的emb
* 请求索引：同一时间请求的item用同一个下标表示
* 请求前时间emb：历史每个item和当前时间的时间差，分桶

另外，这种方式位置Embed和时间Embed是独立设计的, 缺少了两者的交叉，还引入了ALiBi位置编码, 即在注意力计算时, 引入一个常数bias：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b54e6ae1bbb4454eb706f22bec7c26f04402fb5a%2Falibi.png?alt=media)

### 百度的COBRA

[Sparse Meets Dense: Unified Generative Recommendations with Cascaded Sparse-Dense Representations](https://arxiv.org/abs/2503.02453)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f2e93bd563029b50151fd8904e216c56bc0cfa4b%2Fcobra-vs-tiger.png?alt=media)

和tiger很像，主要区别是除了原来rq的code，还加了个dense emb进去

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-611dddf2e64aa8da7190280d0d699da904902617%2Fcobra.png?alt=media)

rq部分freeze，dense是拿item的明文特征过一个bert得到的cls emb，bert是训练的

decode出来有两个东西，rq的code和dense

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-54ab0cc2f44bd7cba00baf9c7ac3da2ebab72be2%2Fcobra-search.png?alt=media)

* 先beam search出m个rq的code出来
* 然后每一个code和原来的seq一起输入decoder，得到的pred就是dense，再拿这个dense去ann找n个item
* 最后对这m\*n个item拿两个相似度融合出一个得分，取topk出来

### 百度的“心流”

[百万美金背后的推荐技术突破，内部揭秘2025年百度最高奖获奖“心流”团队的背后故事](https://mp.weixin.qq.com/s/O4iqt1ADCWwKNEq0hCyMrg)

[让推荐更懂你：百度2025最高奖‘心流’团队的标题改写实战](https://mp.weixin.qq.com/s/IDzjnXMw9NXHZXZue7RQKQ)

### 百度的GRAB

[GRAB: An LLM-Inspired Sequence-First Click-Through Rate Prediction Modeling Paradigm](https://www.arxiv.org/pdf/2602.01865)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-58ac2f4cf3c66fdac153aae4c125e11c227befd6%2Fgrab1.png?alt=media)

输入多个用户的序列，过统一的trans，然后目标好像不是自回归，应该是ranking

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-71371493cca966f3b64824c62cb9482df7cd201a%2Fgrab2.png?alt=media)

序列压缩，把不同用户的序列合并成一条序列，然后加上对应的mask，保证用户间不可见，用户内causal

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ce595d5c684f587510b764059e8447803fc7c024%2Fgrab-partial-full-mask.png?alt=media)

单用户内部，每一个item又拆成了2个token：

* partial token：图中的h，只保留随时间变化、对刻画历史有用的信息（例如context、相对位置/时间），把静态或高度重复的字段丢掉（例如user\_id、长期稳定兴趣），只能看到t-1时刻往前的partial和自己
* full token：图中的h'，保留打分所需的完整信息（例如uid+target itemid），只能看到t时刻往前（图中可能漏了t时间）的partial和自己，看不到其他所有full

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c6e6fdac6c9b670f29c168057b218138d577a2c6%2Fgrab-rab.png?alt=media)

rab（time+pos+action），然后带上滑窗mask（即q只能看到前面若干长度的k）

### 腾讯的GPR

[GPR: Towards a Generative Pre-trained One-Model Paradigm for Large-Scale Advertising Recommendation](https://arxiv.org/pdf/2511.10138)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-485e5d7a197d7236afa83b21338d9a48b5c7f073%2Frq-kmeans%2B.png?alt=media)

先用RQ-Kmeans得到一个高质量的码本，然后拿这个去初始化，然后再走正常的RQ-VAE，还在encoder里加了个残差，可以使训练更稳定&提升码本利用率

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e451269a179fe4df81b9991b980c0204615235cb%2Fgpr.png?alt=media)

* decoder输入的一个token包含4部分，u-token(user属性)、O-token(organic content，应该是体裁/场景之类的东西)、E-token（环境，例如设备、位置等）、I-token（item内容，用RQ-Kmeans+生成的sid表示），然后有如图的attn mask，decoder里会搞个token-aware FFN
* decoder的最后一个输出emb，先输出几个thinking tokens，并通过refining module(类似扩散模型)，最终产出一个refine token
* 拿这个refine token去生成下一个sid，生成的过程是value-guided trie-based beam search，这里的value是HTE（Hierarchical Token-wise Evaluator）的预估分，HTE通过如下方法训练

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9a7928c2edb31677c0f13848fc39b69082e68231%2Fgpr-training.png?alt=media)

* 预训练:用mtp的方式
* value-aware finetuning：不同action有不同value(例如展现=1，点击=2，转化=4)，对mtp每个token的loss加权
* RL：把训好的gpr部署在生产环境和模拟环境里（定期同步），
  * 模拟环境中：用GPR产出k=40个item，然后请求该环境中的精排和后链路拿到打分，算一个融合分当成reward，这个其实是最细的那一级sid的reward
  * 考虑流行度等因素把这个item粒度的reward细拆到每一级的sid上，同时训练HTE来给出每个value的预估，并和reward算loss

还搞了Anticipatory Request Rehearsal (ARR)，来避免模型过拟合到历史数据上，即自己构造数据去请求模型得到样本，U-token复用，O-token拿用户最近的一个场景/体裁，E-token实时请求最新的，不同活跃度用户的构造频率不同

### 腾讯的S-GRec

[S-GRec: Personalized Semantic-Aware Generative Recommendation with Asymmetric Advantage](https://arxiv.org/pdf/2602.10606)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0ca1f9fce666b40b0c3b531279b20b588398c8f6%2Fs-grec.png?alt=media)

在GR里加了一个LLM as Judge产出语义reward，加上业务指标的reward一起RL

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f716950345938aea2fba8b5eff3a0f1a673541b2%2Fs-grec-frame.png?alt=media)

PSJ(Personalized Semantic Judge)：产出semantic reward

* part a：Aspect-level Semantic Scoring：给定u+ad，产出4个分数（用户profile相关性、未来兴趣相关性、新颖性、请求时上下文相关性）。标注流程包括线上样本->llm标注->人工检查->prompt修正。训练先SFT，再GRPO
* part b：User-conditional Preference Aggregation：part a里有4个分数，每个用户有4个权重，融合成一个分。构造pairwise数据，同用户不同ad的偏好，然后用group-wise grpo去学这个权重

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b6f9be92d597ca66c41f76b9b484f12fe16a25bc%2Fs-grec-rl.png?alt=media)

* 左边是正常的GRPO，会把2个reward加起来，一起算mean和std，再去算advantage
* 右边是A2PO（Asymmetric Advantage Policy Optimization），2个reward各自算advantage，然后按下式融合（商业价值为主，只有当2个reward正负号一致时semantic reward才生效）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2eb6a3f89963ae9fb894520f39f34b99d2651a99%2Fs-grec-advantage.png?alt=media)

注意，这里的GR是用的minionerec([MiniOneRec: An Open-Source Framework for Scaling Generative Recommendation](https://arxiv.org/pdf/2510.24431))，是个sid+LLM的生成式框架

### 腾讯的OneRanker

[OneRanker: Unified Generation and Ranking with One Model in Industrial Advertising Recommendation](https://arxiv.org/pdf/2603.02999)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-64319472d3b67c753e68315e1dbd759f54a6952d%2Foneranker-arc.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-50458713b81111a47bc500982e7f9cb4874cdbc5%2Foneranker.png?alt=media)

GPR的延续，模型包括召回（step1+2）和排序（step3）部分，

* step1 生成：输入GPR的异构token序列，产出K/V，长度是用户历史的长度。4层trans
* step2 task/target Aware：Q是具体task token(m个推荐任务和1个商业任务)和聚类信息（图中的fake item，即kmeans后的k个聚类中心），和上述K/V算attn，2层trans
  * 产出task数个双通道表征(图里的head-v部分)：task自己的表示，task和所有fake item交互一下
  * 通过MTP生成n个item
* step3 排序：一层trans
  * k/v：step1的k/v和step2的双通道表征，共历史长度+task数个token
  * q：一个特殊的task token

### Shopee的OnePiece

[OnePiece: Bringing Context Engineering and Reasoning to Industrial Cascade Ranking System](https://arxiv.org/pdf/2509.18091)

[知乎](https://www.zhihu.com/question/1906473225224953962/answer/1956667989328888901)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9a5156c1f2f87bdbf14241a598b8f4627b24db9f%2Fonepiece-frame.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e9f5b4c842432235475b0f9cdeb3dc7fecd7d06a%2Fonepiece-context-engineering.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6aae9ae1c25661e481c7ed00c3e80fd550d22cbf%2Fonepiece-reasoning-mtl.png?alt=media)

### 网易云音乐的Climber

[Climber: Toward Efficient Scaling Laws for Large Recommendation Models](https://arxiv.org/pdf/2502.09888)

cikm2025 best applied paper

### 网易云音乐的Climber-Pilot

[Climber-Pilot: A Non-Myopic Generative Recommendation Model Towards Better Instruction-Following](https://arxiv.org/pdf/2602.13581)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-505c0e25e076be641a5ba3d6c0bf9ecbd794e8c9%2Fclimber-pilot.png?alt=media)

预训练：

* TAMIP（TimeAware Multi-Item Prediction）：如右下角，就是一个mtp，自回归的，每个item都会预测一下，即item 6会预测item 7，也会预测item 8
* time-aware masking：时间差小于xx的mask掉（让模型看不到非常近的item，防止追打）

SFT：加了个condition instruct(流行、古典、R\&B等)，如右上角，只拿最后一个位置去预估，还会输入该位置的condition，同样是MTP

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a0f5bc82799ae7c45dcd86772f8017828e92b09b%2Fclimber-pilot-serving.png?alt=media)

serving如图，用户序列会存好kv cache，然后根据多个condition，生成多个的预估emb，再去分别ann召回再merge

3层trans,emb dim=128，时间差设置为15min，MTP只预测2个分支

### Yandex的ARGUS

[Scaling Recommender Transformers to One Billion Parameters](https://www.arxiv.org/pdf/2507.15994)

Yandex的音乐推荐场景

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-af5dfd95976a45af835f8b2a627ddcecccb29721%2Fargus-pretrain.png?alt=media)

预训练：输入f(feedback)、i(item)、c(context)，emb相加，过transformer得到h

* 召回任务：concat(h,c)接一个mlp预估next item
* 精排任务：concat(h,c,下一个i)接一个mlp预估feedback

微调：主要的下游任务是排序，参考pinnerformer，设计了双塔，输入和预训练一样也是f、i、c，输出的h就是user表示，然后和item算内积得到相似度，再过pointwise或者group wise的排序loss

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4e52c2ff99c8262274ebc1d39bab6ead5a144108%2Fargus-finetune.png?alt=media)

### 亚马逊的UniRec

[UniRec: Bridging the Expressive Gap between Generative and Discriminative Recommendation via Chain-of-Attribute](https://arxiv.org/pdf/2604.12234)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3d3de47b40be527a71ee698a8ca907ed97217158%2Funirec.png?alt=media)

#### Capacity-constrained Semantic ID

之前的方法可能能做到每个code下item数均衡，但还是会有马太效应，即最终充分训练的还是高热的那些。统计到：top 10%的s0 token只占33.24%曝光，但到(s0,s1)组合就占到87.90%，到(s0,s1,s2)组合更到89.62%。也就是说，越往后层，流量越集中到极少数路径上。

搞了两阶段的贪心策略：

* 聚类：将item分到离自己最近的聚类中心，重构误差小
* 超载修复：约束每个cluster承担的总曝光量V不超过设置的上限，如果超了，就把它里面的item挪到新的cluster里去，保证尽量近&新cluster的容量不超上限

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6fa2553291e429486a211bd242ac800a29c65561%2Fcapacity-constrained-rq.png?alt=media)

#### Chain-of-Attribute

大家都认为判别式任务同时输入了u和i，上限应该比生成式高，因为生成式只输入了u，但作者分析了一下：

用户u，item f（共n个特征），label y，首先有$$p(y|f,u)p(f|u)p(u)=p(f|y,u)p(y|u)p(u)$$，然后转换一下就是$$p(y|f,u) = p(f|y,u)p(y|u)/p(f|u)$$，此时因为我们看的是给定u和f时，y的概率，所以$$p(f|u)$$是个常量，可以忽略，那就是

$$
p(y \mid \mathbf{f}, u) \propto p(\mathbf{f} \mid y, u) p(y \mid u)
$$

而此时$$p(y|u)$$和item无关，所以判别式的打分等价于生成一个完整item的打分。根据链式法则，那就可以拆到这n个特征的每一个上来

$$
p(\mathbf{f} \mid y, u)=\prod\_{k=1}^n p\left(f\_k \mid f\_{\<k}, y, u\right)
$$

但要把所有特征全还原是代价很大的，现在的GR就通过sid来压缩，但可能压缩得太狠了，所以作者选择还原最重要的特征，即先生成类目、商家、品牌这m个属性，再生成sid

#### Conditional Decoding Context

* task-conditioned BOS：把固定的BOS换成了带任务(点击、转化等)/场景（主feed、搜索、相关推荐等）信息的BOS embedding
* context summary：如图中最右边的地方，每一步解码时给模型一个压缩过的prefix交叉特征摘要（前面已经生成了哪些attribute/SID），最暴力的做法就是两两组合的笛卡尔积，采用了类似布隆过滤器的方法，把每个组合通过多个hash函数，映射到一个**共享**embedding table里的几个位置，用的时候就分别去查出来，然后concat到一起

模型输入：用户静态profile、历史sid序列、历史序列

最终rank head的输入如下，过一个[SENet](https://arxiv.org/pdf/1709.01507)和[MaskNet](https://arxiv.org/pdf/2102.07619)，然后和对应的label（前m个是attr，后面的是sid）去算loss：

* attn output：q是bos+attr+sid，k和v是历史序列，去做cross attn得到的输出
* prefix emb：context summary的输入，t时刻之前decode出来的那些的emb
* context summary：如上
* aggregation表示：用户静态profile、历史sid序列的pooling、历史序列的pooling

训练时还加了

* RFT（Reward-Driven Fine-tuning）：其实就是时长/转化/gmv加权
* DPO：同一个请求里，clik大于show之类的构造pair；还加了个layer-wise stop gradient，即DPO只在解码sid时作用，对attr的时候不生效，不然训练不稳定

## LLM+推荐：输入ID/SID（工业界+没落地）

### Google的GEM-Rec

[One Model, Two Markets: Bid-Aware Generative Recommendation](https://arxiv.org/pdf/2603.22231)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f0acabd073187072ee4a97c834f853e0a95cb4cf%2Fgem-rec.png?alt=media)

基于TIGER，引入了`<AD>`（广告）和`<ORG>`（自然结果）这两个special token，拼到每个item的第一个sid前面

* 训练就是正常训，没啥特别的，只是说那个特殊token使得它后面的sid点像条件概率
* infer引入bid敏感性
  * `<AD>`这个词的logit加上所有广告候选的max bid做扰动：$$\tilde{z}*{\langle\mathrm{AD}\rangle}=z*{\langle\mathrm{AD}\rangle}+\lambda \cdot \log \left(1+b\_{\max }\right)$$
  * 后面的sid在decoding的时候，每一级sid都加上当前cluster的max bid做扰动：$$\tilde{z}\_c=z\_c+\lambda \cdot \log (1+\mathcal{B}(c))$$

另外，论文的实验用的是一价计费，说是最近各大公司都在往一价迁？

### Meta的DTI

[Towards An Efficient LLM Training Paradigm for CTR Prediction](https://arxiv.org/pdf/2503.01001)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-214bd4157c3f5af8572444b55465d5b1997fa340%2Fdti.png?alt=media)

。。好像没啥，就是预测未来k个，并且设计了滑动窗口的mask（右下角）

### Meta的RPG

[Generating Long Semantic IDs in Parallel for Recommendation](https://arxiv.org/pdf/2506.05781)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1b92d3da1f77480994bfa753e3b98ffd95b9362c%2Frpg.png?alt=media)

训练：

* 长语义ID（SID）构造：使用OPQ(optimized pq)将物品特征（文本、图像等）编码为SID（最多64个token），每个token来自不同codebook，编码物品语义子向量。相比RQ，OPQ没有token间的顺序依赖，适合并行生成，且信息分布更均衡。
* 多token预测（MTP）：通过MTP损失函数，并行预测语义ID的所有token

infer：

* 图构建：将每个SID的64个token的embedding通过mean/max pooling成一个语义embedding。使用faiss存储这些embedding，并为每个语义ID搜索top-k个最相似的SID，作为图的边，构建一个的解码图。
* 迭代图传播：随机初始化b个SID beam，从这b个节点出发，沿图传播，从相邻的SID里保留得分最高的b个ID。迭代q次，生成最终的top-K推荐列表。

### 美团的EGA-V2

[EGA-V2: An End-to-end Generative Framework for Industrial Advertising](https://arxiv.org/abs/2505.17549)

### 美团的DFGR

[Action is All You Need: Dual-Flow Generative Ranking Network for Recommendation](https://arxiv.org/pdf/2505.16752)

### 华为的UniGRF

[Killing Two Birds with One Stone: Unifying Retrieval and Ranking with a Single Generative Recommendation Model](https://arxiv.org/pdf/2504.16454)

[sigir‘25「华为」统一召回+排序框架](https://mp.weixin.qq.com/s/eKU_AlffGR1Lx_wQspuLpQ?poc_token=HEPlGGijUUqAuU1VTCkeSPkWDfZG99B1eN5xtLkh)

### SnapChat的GRID（框架）

[推荐算法(2025.10.9)：Snap说：做GR推荐的同行们，你们走错方向了](https://mp.weixin.qq.com/s/2G3-Moegkx5x8f0Yt0gCVw)

[UNDERSTANDING GENERATIVE RECOMMENDATION WITH SEMANTIC IDS FROM A MODEL-SCALING VIEW](https://arxiv.org/pdf/2509.25522)

[Generative Recommendation with Semantic IDs: A Practitioner's Handbook](https://arxiv.org/pdf/2507.22224)

<https://github.com/snap-research/GRID>

基于的这个模板：<https://github.com/ashleve/lightning-hydra-template>

新论文介绍了落地情况：[Semantic IDs for Recommender Systems at Snapchat: Use Cases, Technical Challenges, and Design Choices](https://arxiv.org/pdf/2604.03949)

#### RQ-VAE回顾

encoder把输入的d维向量映射成n维，有L级code，每一级有K个取值，第0个codebook的第0个sid code就是

$$
\operatorname{sid}\_0=\underset{c \in{0,1, \ldots, K-1}}{\arg \max }\left|\mathbf{h}\_i^0 \cdot \mathbf{C}*0\[c]\right|*{\mathrm{F}}, \text { with } \mathbf{h}\_i^0=\operatorname{Enc}\left(\phi\left(x\_i\right)\right)
$$

然后第l个code如下，其中$$\mathbf{h}*i^l=\mathbf{h}*i^{l-1}-\mathbf{C}*{l-1}\left\[\operatorname{sid}*{l-1}\right]$$

$$
\operatorname{sid}\_l=\underset{c \in{0,1, \ldots, K-1}}{\arg \max }\left|\mathbf{h}\_i^l \cdot \mathbf{C}*l\[c]\right|*{\mathrm{F}}
$$

最终再decode回去就是

$$
\hat{\mathbf{h}}*i=\operatorname{Dec}\left(\sum*{l \in{0, \ldots, L-1}} \mathrm{C}\_l\left\[\operatorname{sid}\_l\right]\right)
$$

有2个loss，一个是重建loss，一个是commitment loss（拉近h和c的距离）

#### 挑战

挑战1：码本坍塌（Codebook Collapse）：模型只利用了码本的一小部分，设计了2种方式：

* STE（straight-through estimator）：直接更新整个码本，原始RQ-VAE是只更新argmax出来的那个code，这种稀疏更新方式很依赖码本的初始化。最原始的VQ-VAE论文([Neural Discrete Representation Learning](https://proceedings.neurips.cc/paper_files/paper/2017/file/7a98af17e63a0ac09ce2e96d03992fbc-Paper.pdf))里也用到了，另外<https://www.daiwk.net/1.2.llm_intro#h-net>这里也有。STE如下，其中$$\operatorname{sim}\left(\mathbf{h}\_i^l, \mathbf{C}\_l\right) \in \mathcal{R}^K$$表示cos相似度

$$
\hat{\mathbf{h}}*i=\operatorname{Dec}\left(\sum*{l \in{0, \ldots, L-1}} \mathrm{C}\_l\left\[\operatorname{sid}\_l\right]+\operatorname{sim}\left(\mathbf{h}\_i^l, \mathbf{C}\_l\right) \cdot \mathbf{C}\_l-\operatorname{sg}\left\[\operatorname{sim}\left(\mathbf{h}\_i^l, \mathbf{C}\_l\right) \cdot \mathbf{C}\_l\right]\right)
$$

* 基于多个embed来源来学习sid：例如图片emb、文本emb、meta数据对应的emb等，多个emb进行merge：

$$
\mathbf{h}*i=\sum*{m \in M} \operatorname{Enc}*m\left(x\_m\right) \text { and } \hat{\mathbf{h}*{i, m}}=\operatorname{Dec}*m\left(\sum*{l \in{0, \ldots, L-1}} \mathrm{C}\_l\left\[\operatorname{sid}\_l\right]\right)
$$

挑战2：SID-to-Item Resolution：同一个sid对应的一堆item如何消歧

* 基于启发式方法的代码内消歧：其实就是加一些人工规则排序，例如后验/新鲜度等
* 考虑检索深度而非广度：方案a只取少量的top sid，每个sid拉很多item出来；方案b取很多sid，每个sid只拉一点item出来，方案a效果更好

#### 在线实验

* sid作为辅助特征：
  * 广告排序：item文本信息过qwen得到emb，再搞成sid丢给精排
  * 好友推荐和搜索排序：用[GraphHash: Graph Clustering Enables Parameter Efficiency in Recommender Systems](https://arxiv.org/pdf/2412.17245)搞了个基于模块度的Louvain方法做社区发现，将uid映射成多级社区的id表示（类似sid），当成特征加进排序模型
* sid做GR召回：在之前的文章[Generative Recommendation with Semantic IDs: A Practitioner's Handbook](https://arxiv.org/pdf/2507.22224)里讲了模型细节，效果如下：拉长序列指标有涨，前面讲的方案a比方案b更好，启发式的规则排序能带来业务指标收益

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-927d3eb2237fbc453aa3a9aae085041bc27f0f7e%2Fsnapchat-sid-gr.png?alt=media)

* sid质量评估：uniqueness表示unique used SIDs / total number of items，其实就是衡量sid冲突严重程度的指标。发现这个值和recall\@k并不是完全正相关，比较低的时候有这个趋势，但达到一定阈值的时候，uniqueness继续涨，recall\@k基本平了

## LLM+推荐：输入文本（工业界+落地）

### Google的2个LLM

[谷歌短视频推荐:用户反馈对齐的LLM用于新颖推荐](https://mp.weixin.qq.com/s/ff34lzbbTVREQG6FSpdgeg)

#### novelty LLM

[Llms for user interest exploration in large-scale recommendation systems](https://arxiv.org/abs/2405.16363)

对llm进行sft，输入用户喜欢的K个cluster，预测下一个cluster。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8bbdcb27651f3d2017663b6a8b1095c747dccf5b%2Fnovelty-llm.png?alt=media)

cluster包括了一系列短语，如(猫，狗，动物，宠物，小动物)可能是一个cluster，(船，轮船，皮划艇，独木舟)可能又是另一个cluster。使用的2级cluster，共761个取值。

基于gemini进行sft，拿7000多个样本（每个$$C\_1$$,$$C\_2$$组合，找到最高频共现的10个$$C\_L$$出来），bs=16，训了3000个step

线上生效：然后K=2，即只需要batch跑$$761\times 761=579121$$个组合的infer就行了。来一个用户，拿出他的2个cluster的组合，去存储里找到对应的预估的下一个cluster

#### 2个LLM

[User Feedback Alignment for LLM-powered Exploration in Large-scale Recommendation Systems](https://arxiv.org/pdf/2504.05522)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8e763a8e09ba4cc80ec04d5c92aa1862c47d1f79%2Fnovelty-llm-alignment-llm.png?alt=media)

先拿novelty-llm开实验(也可以直接拿线上这路召回的结果)，收集用户对推荐出来的这些类目的正负反馈，然后组织成pointwise或pairwise的语料，训练一个类似reward model的alignment-llm。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8ac258c0eebf38be75a3146c0e5d869372b917b0%2Falignment-llm.png?alt=media)

纯离线infer：用novelty llm采用比较高的temperature预测多次，然后用alignment llm打分选挑出topk的cluster，存起来给线上用。

实验对比线上基线的novelty-llm，pointwise和pairwise在多样性、正反馈动作率、完成率均有提升，鈤pointise训练得更快，所以最终推全pointwise

### Google的惊喜度推荐

[推荐算法(2025.6.11)：Google的意外推荐](https://mp.weixin.qq.com/s?__biz=MzkzNDYyNjM1NA==\&mid=2247484786\&idx=1\&sn=1170e694c1f7a2c6759cebf02e0f4945\&scene=21#wechat_redirect)

[Serendipitous Recommendation with Multimodal LLM](https://arxiv.org/pdf/2506.08283)

基于[Cluster Anchor Regularization to Alleviate Popularity Bias in Recommender Systems](https://dl.acm.org/doi/pdf/10.1145/3589335.3648312)搞了一个4级的聚类，每个item属于某个树节点，每个节点有对应的自然语言描述。

惊喜度：2个item属于同一个中间节点，但不同的子节点，两个节点可以间隔若干层

拿惊喜度高的样本(一个context item\_id，next item\_id)，即$$(v\_i,n\_j)$$来sft一个MLLM，通过如下方式保证不同cluster的均衡

* 先把$$n\_j$$映射到其cluster $$C(n\_j)$$，得到$$(v\_i, C(n\_j))$$
* 对每个context video $$v\_i$$，聚合$$C(n\_j)$$的满意度，即$$p\_{iC(n\_j)}$$
* 对每个$$C(n\_j)$$，选择$$p\_{iC(n\_j)}$$最高的10个context videos丢到训练数据里去

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bfd3e728d76ec5a560dc0633dc77093f2832d86d%2Fserendipitous-prompts.png?alt=media)

* prompt1、2、3都是直接输出预测的cluster，1和2是单模态(text/video)，3是多模态（text+video）
* prompt4是CoT，其实就是让模型先总结出当前视频的cluster，再预测下一个不同的cluster

衡量标准：

* match rate：生成的描述是否是合法的cluster
* recall：生成的描述和label的描述是不是完全一样

发现：

* match rate不同prompt差不多，都能很快收敛到接近99%，而且video+CoT能大大加速这个收敛速度
* video很重要，带上video的比text only要好很多
* video+CoT比video略好
* video+text不如video only，说明这个prompt3还比较粗暴
* 另外还发现帧数越多效果越好，但match rate的收敛速度不受影响

实际推理时用了能cover 80%展现的高热视频，只需要不到12小时就能推理完；后来做了增量更新版本，但因为高热视频变化不多，所以速度也可以接受

### Google的PLUM

[PLUM: Adapting Pre-trained Language Models for Industrial-scale Generative Recommendations](https://arxiv.org/pdf/2510.07784)

[「谷歌a」PLUM: Adapting Pre-trained Language Models for Industrial](https://mp.weixin.qq.com/s/2kSjLHfegEvxtwjWCQvOVg)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-66d7a39281876c44b2e94f00d5eebfc58980e586%2Fplum.png?alt=media)

sid生成:

* 输入：多个多模态emb，各自过encoder再concat到一起，再映射成一个emb
* 多层精细化量化：
  * 多分辨率码本：码本大小$$2048/2^{{level}-1}$$，即越深层的码表越小
  * 渐进式mask：即图中的m，训练的时候随机一个r，然后从1到r的layer保留，后面的layer mask掉
* 共现对比学习正则：一条样本是一个共现pair，在batch内算softmax，$$\mathcal{L}*{\text {con }}=-\sum*{i=1}^{2 N\_b} \frac{\exp \left(\operatorname{sim}\left(p\_i, p\_i^{+}\right)\right)}{\sum\_{j=1}^{2 N\_b} \exp \left(\operatorname{sim}\left(p\_i, p\_j\right)\right)}$$，
* 最终loss就是重建Loss+rq\_loss+共现正则

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e9c564d066f59e27b68b7984b2151de0b227b2dc%2Fplum-cpt-data.png?alt=media)

continue pre-training(CPT)

* 一半的样本是用户行为
* 一半的样本是video metadata
* 训练200w个step，bs=16，总共260B的token，基于预训练好的LLM(900m in 4B的moe)进行CPT，发现CPT后的模型对于自然语言和sid的混合输入仍然有很好的in-context learning能力

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-01eb04df72207500172a2fc18483b9e393b6fb19%2Fplum-sft.png?alt=media)

sft如图，输入有文本也有sid，预测下一个sid。设计了带reward（人工为每个点击拍的）的loss：$$\mathcal{L}*{\mathrm{SFT}}=-\sum*{t=1}^L r\left(\text { user, } v\_{c l i c k}\right) \cdot \log P\left(\text { sid }*t \mid \text { Context }*{\text {user }}, \text { History }*{\text {user }}, \text { sid }*{\<t}\right)$$

infer时用beam search，发现幻觉率（生成不存在的sid）很低（<5%），uniq的sid-to-video映射(一个sid只对应一个视频，这种视频在所有视频里的比例)很高(96%+)

实验部分看着是加了一路召回，比基线召回（reinforce recall）效率高，但serving细节没讲，比如模型更新频率、离线/流式/实时infer等

### Google的STATIC

[Vectorizing the Trie: Efficient Constrained Decoding for LLM-based Generative Retrieval on Accelerators](https://arxiv.org/pdf/2602.22647)

<https://github.com/youtube/static-constraint-decoding>，有jax和pytorch版本

基于PLUM做constrained decode加速

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b7a05b447117e330a6d1ff6bf292a652e1575680%2Fstatic.png?alt=media)

假设3级sid，每一级有3个token

* a：限制了只能在3个item里decode，分别是item1=(A1,B2,C1), item2=(A3,B1,C2), item3=(A3,B1,C3)
* b：在CPU上构建Trie树
* c：full transitioin matrix：左边是一个node，包括root+每一条中间路径，右边的是这个node对应的孩子节点，编号为1\~7
* d：CSR(compressed sparse row)矩阵：第三行是c右边的1\~7，第二行是第三行每个节点对应的tokenid，第一行是第二行每一个node的start下标
* e：以node 4为例，从d中可以看到只有C2和C3是valid的，就把C1给mask了（详见算法1和算法2，应该是算完所有token的logprob后做的mask）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-aab0935be0796e08a30b7ce942ed3edbb93138dc%2Fstatic-algo1.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-28ae5334728e0b85e5402464d33ee63919f05771%2Fstatic-algo2.png?alt=media)

### Google的LLM用户画像

[LLM-Based User Personas for Recommendations at Scale](https://arxiv.org/pdf/2606.12198)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a3a4fa72bf6f2bed2fcf97ae948f71d3b29573b2%2Fllm-user-persona.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bf8d869a66709a12f44c3ea0af891a75422517e7%2Fllm-user-persona-arch.png?alt=media)

### Google的TokenFectory

[Token Factory: Efficiently Integrating Diverse Signals into Large Recommendation Models](https://arxiv.org/pdf/2606.19635)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b6ef69d87df1f3d02e5b044fb16dc6d71a66242b%2Ftokenfactory-plum.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bf6e9ba50d84a69be0f270b5407416176c8461bf%2Ftokenfactory.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2c52c32bc01231a4c635f292d29de3bbd5a65cc2%2Ftokenfactory-user-history.png?alt=media)

```
原始特征
→ embedding lookup / normalization
→ concat
→ MLP 或 Transformer
→ 固定数量的 d_model 维 soft tokens
→ 与标题等文本 token 一起输入 LRM
```

### Google的TokenMinds

[TokenMinds: Pretrained User Tokens and Embeddings for User Understanding in Large Recommender Systems](https://arxiv.org/pdf/2606.25147)

复用PLUM的CPT流程，训了个LLM

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-518e0b8d44c19a8d30a92a2bc8d1d57ee35fa419%2Ftokenminds1.png?alt=media)

产出2个东西给下游用，一个是encoder输出的emb，一个是decoder输出的sid

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-71c420dfcaedb34f9600fdb6cd04a8e51fe550f3%2Ftokenminds-enc-dec.png?alt=media)

sid有8级，但拿来训练的只有前L=4级

* encoder：用CPT的模型初始化，每个item有sid+1个softtoken（属性（时长，完播率，操作系统等）过mlp后的emb），还加了搜索序列，input长度最长1024
* decoder输入：用CPT的模型初始化，未来24小时的随机观看序列（最多15个），仅sid，当做Q，和encoder输出做cross attn

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-32885114ad8fc72bc8f9853b8cfd5b8eab822201%2Ftokenminds-multicontext-decoding.png?alt=media)

为了区分场景，在每个item前面加condition token，例如`<LFV>`(长视频)和`<SFV>`（短视频）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-57b73122187266f4645d9b14c65629a97bd981c1%2Ftokenminds-decoder-input.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c3ec1b42fd023130a92caae2d21d77f51b7083bc%2Ftokenminds-serving.png?alt=media)

### Meta的AdLlama

[Improving Generative Ad Text on Facebook using Reinforcement Learning](https://arxiv.org/pdf/2507.21983)

采用强化学习结合表现反馈（RLPF），以广告表现数据作为奖励信号精调Llama模型，生成更高点击率的广告文案

### Meta的Generative Reasoning Re-ranker

[Generative Reasoning Re-ranker](https://arxiv.org/pdf/2602.07774)

研究动机: 虽然LLM在推荐系统的召回和粗排阶段已展现潜力，但作为模型输出最终质量关口的“重排序（Re-ranking）”阶段却长期被忽视。现有LLM推荐方法多采用零样本或简单微调，未充分利用模型的推理（Reasoning）能力；且依赖非语义 ID，难以扩展至工业级数十亿规模。​

GR2(Generative Reasoning Reranker)：通过三阶段训练流水线赋能重排。​

* 语义ID知识对齐(Mid-training)：采用RQ-VAE分层量化技术将文本特征转化为sid，并通过对比学习编码用户共参与（Co-engagement）信号。将SID与自然语言混合，对学生LLM（如 Qwen3-8B）进行mid-training，使其理解sid蕴含的物品语义。​
* 推理链知识蒸馏(Reasoning SFT)：利用性能更强的教师LLM（如Qwen3-32B）针对重排任务生成高层级推理链（CoT），包含用户历史总结、类目偏好分析及候选物品匹配逻辑。通过拒绝采样筛选高质量推理路径，并对学生模型进行有监督微调。​
* 策略优化与奖励校准(RL-DAPO)：基于解耦剪裁和动态采样策略优化（DAPO），利用可验证奖励（Verifiable Rewards）进行强化学习。通过惩罚模型“简单保留原始顺序”的Reward Hacking行为，强制其深入理解意图进行重排。

### Meta的LLM召回

[LLM Retrieval for Stable and Predictable Ad Recommendations](https://arxiv.org/pdf/2605.21969)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3fced74ee7e8f2e25454ae6b571870fe77bf42d9%2Fllm-ad2ad-gen.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f277c10c890147dd8f8a8325db9d98e14d821008%2Fllm-context-cate-graph.png?alt=media)

### Meta的ConnectionMind

[ConnectionMind: Leveraging Social Networks and Large Language Models for Personalized Recommendation at Meta](https://arxiv.org/pdf/2608.10187)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a2582a4d8dfb670a1467068ba8d116601b0c11c1%2Fconnectionmind-graph.png?alt=media)

异构图：节点包括用户、Page/创作者、Item/视频内容。

边类型包括：

* 用户和用户：好友关系、行为相似关系。
* 用户和Page：关注创作者或主页。
* 用户和Group：加入或互动的群组。
* Group和Item：群组内分享/讨论的内容。
* Page和Item：创作者发布的内容。
* Item和Item：共看关系、语义相似关系。

视频会通过 OCR、ASR、视频理解模型提取文本/视觉/音频信息，再总结成紧凑文本；用户和创作者也会由历史互动内容生成语义profile。这样LLM在图上走路径时，不只是看结构，还能理解节点语义。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3b3ca8b194d6745b39216b53eca29089a681a0be%2Fconnectionmind.png?alt=media)

推理过程：

* 对目标用户采样一个紧凑的局部子图。
* LLM看到当前路径、frontier节点的可选typed edges、节点文本描述。
* LLM输出结构化动作，比如要扩展哪些路径、要surface哪些item。
* 最终得到推荐item集合，以及每个item对应的证据路径。

训练：

* SFT：用历史正反馈行为构造从用户到正样本item的最短路径，让LLM学会合法地走图、产出结构化路径。
* RL：用GRPO，用规则奖励继续优化完整rollout，奖励包括格式合法性、最终推荐 F1，以及中间步骤是否朝可达正样本方向探索。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3edb3eea584d5646fe5822f8633c5a774e83f944%2Fconnectionmind-serving.png?alt=media)

serving：

* 对最活跃的top 5-10%用户，直接用ConnectionMind LLM生成显式推理路径。
* 对大多数普通用户，用LLM离线发现有效meta-path，再蒸馏训练一个轻量Student GNN，线上毫秒级服务。

### 美团的MSD

[Balancing Efficiency and Effectiveness: An LLM-Infused Approach for Optimized CTR Prediction](https://arxiv.org/pdf/2412.06860)

通过大模型知识蒸馏，将LLM融入点击率预测模块

### 美团的CoEA

[When Relevance Meets Novelty: Dual-Stable Periodic Optimization for Exploratory Recommendation](https://arxiv.org/pdf/2508.00450)

设计了profile llm、novelty llm、relevance llm完成类目预估任务，并进行周期性的sft

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6ec53b15789608502ea2c2b26c0d6183822137a5%2Fcoea.png?alt=media)

1. 用户长期行为经过多层transformer产出user emb，并通过rq-vae得到sid
2. 每个sid里采样一些用户，把他们的点击历史丢给profile LLM（不微调），总结出用户画像
3. 用户短期行为的类目list(2个)+上面产出的用户画像，丢给novelty LLM（基于qwen2.5-7b-instruct-1M），预估1个类目(应该是要跑多次吧，或者prompt写错了)
4. 上面的3个类目+用户画像丢给relevance LLM（基于qwen2.5-7b-instruct-1M），输出相关性得分

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7829699b8f685bbe0be5aaffb3f023170d605f46%2Fcoea-prompts.png?alt=media)

实现细节：

* key=sid+近期类目，value=相关性得分最高的若干个类目，存到离线存储里，在线直接查，加一路召回
* sft novelty LLM：给定历史类目预估下一个类目
* sft relevance LLM：当成RM，用户点的是正例，从曝光未点击里随机出负例
* 周期性地微调：收集用户反馈，固定relevance LLM，用dpo（RM打分高的vs打分低的）来finetune novelty LLM，同时加kl让模型不要离上一轮的太远

### 美团的DMGIN

[DMGIN: How Multimodal LLMs Enhance Large Recommendation Models for Lifelong User Post-click Behaviors](https://arxiv.org/pdf/2508.21801)

### 美团的UserLM-R1

[UserLM-R1: Modeling Human Reasoning in User Language Models with Multi-Reward Reinforcement Learning](https://arxiv.org/pdf/2601.09215)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bf64fb481ea7ba0241d8fac21976fe1566c283cf%2Fuserlm-r1.jpg?alt=media)

* Step 1：通用用户画像构建

  * 静态画像：背景信息、人格特质、表达风格、生活场景。基于AlignX（[From 1,000,000 Users to Every User: Scaling Up Personalized Preference for User-level Alignment](https://arxiv.org/pdf/2503.15463)）的数据集，把其中如下图的90维偏好向量和人口属性特征丢给LLM，通过不同prompt产出上述4种静态画像

  ![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-dfcf07cfb7d6d86ce3a10f6f39d47f7a9d75e1b5%2Fprofile-schema.png?alt=media)

  ![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2e61172848310f70d866af6623d1efe104cae711%2Falignx.jpg?alt=media)

  * 动态画像：场景记忆、核心诉求、决策策略、状态转移(如信任感、情绪变化)。基于[VoiceAgentEval: A Dual-Dimensional Benchmark for Expert-Level Intelligent Voice-Agent Evaluation of Xbench’s Professional-Aligned Series](https://arxiv.org/pdf/2510.21244)的SOP相关prompt进行修改，把用户相关的信息删了，SOP任务数从30个扩展到了450个。在用户与agent对话时，动态地调用LLM产出上述4种动态画像
* Step 2：目标驱动的decision-making策略
  * t-1时刻：输入prompt+静态profile+动态profile+历史对话，UserLLM输出CoT+新的动态profile+用户回答
  * t时刻：把产出的新的动态profile替换掉t-1的动态profile，用户回答加入历史对话中，其他不变
* Step 3：SFT：就是拿上面的语料来sft user llm
* Step 4：多奖励强化学习优化
  * 规则reward：输出格式、动态画像里的要点匹配等
  * Rubric reward：LLM judge产出4种类型奖励：
    * 回应一致性奖励（response consistency reward）：评估回复与角色画像的契合度、风格连贯性及口语自然度，确保生成的对话真实类人，且严格贴合目标角色设定。
    * 推理质量奖励（reasoning quality reward）：通过惩罚模板化冗余内容，综合评估目标管理精度、状态转换有效性及推理深度，进而培养严谨的多步骤策略推理能力。
    * 对齐度奖励（alignment reward）：考核对思维链（chain of thought）中制定的核心策略的忠实执行程度。
    * 策略能力奖励（strategic capability reward）：激励模型准确识别对话陷阱、实现状态对齐，且关键在于通过逻辑反击主动掌握对话主动权，使模型能够稳健应对具有欺骗性的场景。

### 阿里的BEQUE

[LLM落地淘宝电商搜索场景，显著提升长尾query改写效果](https://mp.weixin.qq.com/s/GmogjAHt0Hrwd8RmtOqS7A)

[Large Language Model based Long-tail Query Rewriting in Taobao Search](https://arxiv.org/pdf/2311.03758) WWW24

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-626ae1cb122c13a00ecf6331062869c7f9c8c75f%2Fbeque.png?alt=media)

* multi-instructions的sft：基于在线日志，通过拒绝采样得到multi-instrunctions的SFT数据集，任务是重写query，还混合了质量分类、query改正、CoT任务

其中的3个task如下：

| Task                   | Prompt Example                                                                                                                                                                                                                                                                                                                        |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Quality Classification | <p>Is this a good e-commerce query rewrite?<br>Query: {query}<br>Rewrite: {rewrite}<br>System: {Yes or No}</p>                                                                                                                                                                                                                        |
| Title Prediction       | <p>Please generate product titles that match input query<br>Query: {query}<br>System: {product title}</p>                                                                                                                                                                                                                             |
| Chain of Thought       | <p>Your task is to rewrite the input query into a query that makes it easier to search for related products, and you are required to give the thought process and then the query rewriting result. The thought process and the query rewriting result are separated by a semicolon.<br>Query: {query}<br>System: {CoT}; {Rewrite}</p> |

* offline feedback：用训好的LLM生成多个候选rewrites，构建了一个离线的淘宝系统，对这些候选rewrites进行搜索得到结果，并用结果的quality scores来对候选rewrites进行排序
* objective alignment：基于候选的rewrites的排序，使用PRO方法（[Preference ranking optimization for human alignment](https://arxiv.org/pdf/2306.17492)）来逼近这个排序。

给定顺序$$y\_1>y\_2$$，preference probability如下，其中$$r(\cdot)$$是reward函数：

$$
P\_{B T}=\frac{\exp \left(r\left(y\_1, x\right)\right)}{\exp \left(r\left(y\_1, x\right)\right)+\exp \left(r\left(y\_2, x\right)\right)}
$$

对应的PRO loss如下，$$\mathcal{T}\_k^i=1 /\left(r\left(y\_k\right)-r\left(y\_i\right)\right)$$，$$\mathcal{T}\_k^k=\min \_{i>k}\left(\mathcal{T}\_k^i\right)$$：

$$
\mathcal{L}*{P R O}(\theta)=-\mathrm{E}*{(x, y) \sim \mathcal{D}*{P R O}} \sum*{k=1}^{n-1} \log \frac{\exp \left(\frac{\pi\_{P R O}\left(y\_k \mid x ; \theta\right)}{\mathcal{T}*k^k}\right)}{\sum*{i=k}^n \exp \left(\frac{\pi\_{P R O}\left(y\_i \mid x ; \theta\right)}{\mathcal{T}\_k^i}\right)}
$$

应用：离线刷库，实验的gmv、单量都有收益，长尾query效果更好

### 阿里的BAHE

[SIGIR'24 | 打破长度障碍：LLM增强的长文本用户行为CTR预测](https://mp.weixin.qq.com/s/h0p1QrapTGxOonccxNVNuQ)

[Breaking the Length Barrier: LLM-Enhanced CTR Prediction in Long Textual User Behaviors](https://arxiv.org/pdf/2403.19347)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-423aa2eef0a7263a0f7952d4f698ae11d9f58cb2%2Fbahe.png?alt=media)

* 防止由于重复编码相同用户行为而产生的计算冗余：利用LLMs的预训练浅层提取来自用户序列的最细粒度的原子用户行为(例如购买星巴克、订酒店)的emb，并将它们存储在离线数据库中
* 从db里查出来，和item一起过LLMs的更深层可训练层

### 阿里的LUM

[Unlocking Scaling Law in Industrial Recommendation Systems with a Three-step Paradigm based Large User Model](https://arxiv.org/pdf/2502.08309)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-40def79b2e03e32434aaa0d87031015e03aade65%2Flum-1.png?alt=media)

将LLM用到推荐系统里的3个步骤：

* 知识构建：拿用户行为序列(condition token+item token)预训练一个LUM
* 知识查询：输入用户行为序列+query(构造的condition token)，得到answer(用户在这个condition下可能感兴趣的item token)
* 知识应用：把上一步得到的结果当成一个特征，加入精排模型里

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8261b899f6c8a04350a42f19d6740ca748a73334%2Flum.png?alt=media)

* c预估下一个i，c和i没有label，c+i+c预测再下一个i。所以最后输入的是一个c，这样就可以预测下一个i了
* 这里的condition token有比较多的可能性，例如场景、搜索query、类目等
* 不同condition预测出多个next token，然后和target token算相似度，再输入给后面的精排

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e7c3b7b5fa4ec5b7ec827bbf8604f4a96bfa1a64%2Flum-group.png?alt=media)

在线infer的加速，u的历史是可以共享的，所以同时把多个c输入进来，然后通过mask（感觉可以参考mtgr的mtp）就可以实现u侧历史只算一次

### 阿里的SERAL

[Bursting Filter Bubble: Enhancing Serendipity Recommendations with Aligned Large Language Models](https://arxiv.org/pdf/2502.13539)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b69bbe0ea4ab8e9eaeb94761b1c30e00cfb06310%2FSERAL.png?alt=media)

### 阿里的URM

[当购物用上大模型！阿里妈妈首发世界知识大模型，破解两大推荐难题](https://mp.weixin.qq.com/s/eJewql0mZk199HyzkjkiuA)

[Large Language Model as Universal Retriever in Industrial-Scale Recommender System](https://arxiv.org/pdf/2502.03041)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7013b5486fc2fb2a81ee8dd147b13535b91d23bb%2Furm.jpeg?alt=media)

2个特殊token：

* `[UM]`对应的输出通过用户建模头$$h\_{UM}$$映射到用户表示空间，用于候选商品的生成。如图，每个item对应一个`[UM]`；
* `[LM]`及其后续符号对应的输出通过语言模型头$$h\_{LM}$$映射到文本空间，用于文本token的生成。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-07cbad8e22ec7da4666d9f4e82e252418ad38e57%2Furm-item-emb.png?alt=media)

item emb的获取：

* 融合id emb，文本emb和图像emb
* 底层的文本encoder和图像encoder freeze，上层的mlp可训练
* sft训练（应该就是下面那个模型）

Sequence-In-Set-Out：其实就是把`[UM]`的输出拆成H个，每个去和item向量算相似度，再merge到u和i的相似度

最终sft的时候计算UM的loss和LM的loss，即图中的item和文本的loss

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-37c888c4d16c8ff37d71ed8f121ff6012d3e32c1%2Furm-prompt.png?alt=media)

### 阿里的RecGPT

[RecGPT Technical Report](https://www.arxiv.org/pdf/2507.22879)

[搜广推工业界论文每日速递-20250731-阿里RecGPT: 淘宝首猜全量上线](https://mp.weixin.qq.com/s/hrxoPwbw8OErX3XompmAZQ)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5650c1e7162e79e66b99f305418bd251a43c6628%2Frecgpt.png?alt=media)

4步：

* 用户兴趣挖掘：输入用户人口属性和历史序列，总结出用户的兴趣(从给定的兴趣集合里选出match的，并给出原因)。用TBStars-MoE-42B-A3.5B进行sft。
* item tag预测：输入用户人口属性和历史序列，加上总结的用户兴趣，输出用户可能感兴趣的50个item tag（看着是一个形容词+名词的短语），及对应原因。用TBStars-MoE-42B-A3.5B进行sft。
* item检索：user-tag-item 3塔模型，拿正常推荐行为训练，最终logit融合了tag-user和user-item的logit
* 推荐理由生成：输入user兴趣、item信息，输出推荐理由。用Qwen3-14B进行sft。用一个pretrain好的模型把item tag映射到类目，而每个类目下有一些item，最终离线产出一个离线词表，每个tag只要存它对应的那个tag下的item的理由就行了。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-97b0173f7044ce3b483a5ed70e65cb03405dfb25%2Frecgpt-user-mining.png?alt=media)

左边大概就是对一个用户的行为进行压缩，即

* item压缩：每个item只保留必要信息，例如name/cate/brand等
* 序列压缩：先按时间窗口聚合，再按item（感觉应该是类目粒度吧）频次倒排聚合

右边是3阶段的训练

* 基于课程学习的多任务finetune：简单->中等->复杂，搞了16.3k的样本，让模型学习电商知识
* reasoning-enhanced pre-alignment：用deepseek-r1产出了用户兴趣挖掘的90k推理数据，并通过人工筛选出19k高质量数据进行蒸馏。
* self-training evolution：模型自己生成数据，并结合人工和llm-as-a-judge进行迭代优化，共21.1k高质量数据，如下图

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-cef61a66fcb95f9207548c51a8838d54876e9b95%2Frecgpt-human-llm.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a1f32610cc6c47327d29b41a0c74812c8f73890b%2Frecgpt-item-tag-pred.png?alt=media)

item tag预测也包括两阶段：

* alignment：就是用户兴趣挖掘的后两步，只是换了一下筛选数据的标准
* 增量学习：双周更新一次，拿最近14天的数据，用QwQ-32B产出数据，并考虑类目间的数据量平衡(每个类目的数据量差不多)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ae1d43e86eabd5f96e110da9750db10f50a36f0d%2Frecgpt-item-retrieval.png?alt=media)

user/item都是正常的推荐模型，有id特征、序列特征等，tag塔就是预测出的item tag（前面提到了tag可以映射到类目，所以这里就是item对应的tag）切词后丢进去，3个loss：

* u-i的推荐行为loss
* tag和i之间的loss，正样本是点击item的tag，负样本是随机一个item的tag
* 类目对比学习loss，同类目的tag是正样本，不同类目的tag是负的

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3936e8e4bf27868743dd45f95d65d52761857acf%2Frecgpt-explanation.png?alt=media)

* alignment：同上，改了筛选标准
* 离线生产：如上所述，产出interest-item-理由离线表

### 阿里的SaviorRec

[SaviorRec: Semantic-Behavior Alignment for Cold-Start Recommendation](https://arxiv.org/pdf/2508.01375)

利用大型预训练多模态模型（如LLaMA、ViT、CLIP）生成语义表示，并与用户行为空间对齐，提升冷启动和长尾物品推荐性能。

### 阿里的ChoirRec

[ChoirRec: Semantic User Grouping via LLMs for Conversion Rate Prediction of Low-Activity Users](https://arxiv.org/pdf/2510.09393)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-fc0a9afd7b725b9eb72b7ccfdb1550648ec6288d%2Fchoirrec-frame.png?alt=media)

* stage1：Hierarchical Semantic User Group Generation
  * Semantic Profile Synthesis via LLM：输入用户静态信息、各种时间窗口的行为类目序列、搜索序列，输出core identity、interest points和consumption philosophy
  * Hierarchical Group Construction：
    * 通过Qwen3-embedding-8B等模型将profile编码成emb，
    * 通过RQ–KMeans搞出M级semantic group id
* stage2：构建Group-aware Hierarchical Representation
  * Hierarchical Group ID Fusion：右图，M级group id对应的emb按顺序融合，再concat过mlp
  * Group Attribute Completion：当前group里用户的静态特征+统计特征聚合起来，相当于对低活用户可以有一个group级的初始化；可以预先算好
  * Group Behavioral Sequence Construction：
    * Group Interest Identification：group内所有用户的购买历史里，聚合出top-k的类目
    * Group Sequence Construction：top-k类目中，保留每个类目里的头部item，同时用group内的平均购买时间来排序

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6edefa9f6c777bb778b4c8835a8f9772cf7a98fb%2Fchoirrec-stage2.png?alt=media)

* stage3：Group-aware Multi-granularity(多粒度) Module
  * individual channel：作为teacher，U和I过tower
  * group channel：作为student，G和I过mlp过tower
  * group channel的输入通过fusion tower输入给individual channel，但对group channel有stop grad
  * 用户活跃度特征过nn得到一个emb，然后输出2个gate：
    * merge用：两个channel的logit进行merge的时候用上面的gate加权，$$z\_{\text {fused }}=\left(1-\alpha\_{\text {fusion }}\right) \cdot z\_{\text {ind }}+\alpha\_{\text {fusion }} \cdot z\_{\text {group }}$$
    * 蒸馏用：mse加上一个margin，另外有一个置信度的gate（用户购买数大于某阈值\&teacher输出过完sigmloid比0.5大一定阈值）$$g\_{\text {qual }}=\mathbb{I}\left(\left|S\_u^{\text {buy }}\right| \geq \theta\_{\text {act }} \wedge\left|\sigma\left(z\_{\text {ind }}\right)-0.5\right|>\theta\_{\text {conf }}\right)$$，还有上面的gate，$$\mathcal{L}*{\mathrm{KD}}=g*{\text {qual }} \cdot \alpha\_{\text {distill }} \cdot \mathcal{L}\_{\text {margin }}$$

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-fe57a3cbdd1b47cd365fb08675da6cd9b5ab317b%2Fchoirrec-stage3.png?alt=media)

### 阿里的CoAST

[Cognitive-Aligned Spatio-Temporal Large Language Models For Next Point-of-Interest Prediction](https://arxiv.org/pdf/2510.14702)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-41f971ee218a3ed347895e279ed567b19a64bd04%2Fcoast.png?alt=media)

sid每级code book的每个code搞一个special token(代码应该是`tokenizer.add_tokens([...])`)，location也类似地搞一下，用CPT让LLM学到sid的知识，然后预测下一个sid

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-98ef60d02562bc365451bc6dac765dffb3733081%2Fcoast-data-prompt.png?alt=media)

### 阿里的CoCo

[Synergistic Integration and Discrepancy Resolution of Contextualized Knowledge for Personalized Recommendation](https://arxiv.org/pdf/2510.14257)

通过动态构建用户特定上下文知识嵌入、自适应知识融合和矛盾解决模块，实现语义与行为潜在空间的深度整合。该方法端到端训练，支持任意推荐骨干网络的工业部署。

### 阿里的LLM-I2I

[LLM-I2I: Boost Your Small Item2Item Recommendation Model with Large Language Model](https://arxiv.org/abs/2512.21595)

训2个llm：

* generator：输入u，预估下一个item id（工业界数据集这个空间很大吧？不知道咋处理的，论文里好像没提），对长尾item有加权
* discriminator：输入u+i，预测yes/no

拿generator产出一堆数据，再拿discriminator过滤一下，保留高质量数据，加到训练样本里，然后训一个正常的i2i模型

### 阿里的SIGMA

[SIGMA: A Semantic-Grounded Instruction-Driven Generative Multi-Task Recommender at AliExpress](https://arxiv.org/pdf/2602.22913v1)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4bf1e414b03a8df25209f02f02c34f73d005ef95%2Fsigma.png?alt=media)

#### Multi-view Semantic Grounding

从4个角度找正负样本

* 语义对齐：搜索的query和item的点击共现行为
* 视觉对齐：多模态相似度
* 知识对齐：感觉就是一些业务知识，例如他们的在线系统能把节日、热点话题、季节变化这类世界知识，和平台内对应的主题商品关联起来
* 协同对齐：同互动session里的高频共现item对

两个loss：正负样本间的对比学习，llm（可训练）和pretrained item emb（freeze）间的蒸馏

#### Hybrid Item Tokenization

* 把llm产出的emb用RQ-VAE搞成多级sid
* 每个item加了一个unique id token：不是直接加到tokenizer里，可以理解为`[emb]`这种token，然后外挂了一个kv存储，把pretrained id emb（id/text/img各一个）拿过来，并merge

#### Multi-task Supervised Fine-tuning

* 通用推荐：正常的推荐
* 受限推荐：例如约束了query/类目等
* 探索推荐：长尾item+用户兴趣探索
* common sense推荐：符合季节性、节假日主题的推荐

要预估的有2部分

* 下一个sid：用正常的ntp loss
* 下一个item id：用special token `q`表示，用InfoNCE

#### Three-step Item Generation

* beam search出K个sid，同时保留对应的beam score(多级sid的score连乘) $$\phi$$
* 把q这个特殊token加进来再过llm得到输出，拿来去ann找出M个item
* 然后按如下公式排序

$$
P\left(v\_i \mid \mathcal{T}\right)=P\left(c\_1^k, \ldots, c\_{\ell}^k \mid \mathcal{T}\right) \times P\left(i d\_i \mid \mathcal{T}, c\_1^k, \ldots, c\_{\ell}^k\right)
$$

第一项是sid的beam score，第二项如下，其中的$$\sigma$$是前k个beam score的标准差，对于有约束的任务，要求相关性高，一般标准差较大，对于要求多样性的任务，则标准差小

$$
P\left(i d\_i \mid \mathcal{T}, c\_1^k, \ldots, c\_{\ell}^k\right)=\frac{e^{\cos \left(\boldsymbol{h}\_k, \tilde{\boldsymbol{v}}*i\right) \cdot \sigma\left(\left{\phi\_1, \ldots, \phi\_K\right}\right) / \tau}}{\sum*{v\_j \in \mathcal{V}\_k} e^{\cos \left(\boldsymbol{h}\_k, \tilde{\boldsymbol{v}}\_j\right) \cdot \sigma\left(\left{\phi\_1, \ldots, \phi\_K\right}\right) / \tau}}
$$

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0bed6e66d5faf44a1c19ae807571346b519cbad4%2Fsigma-scaling-deploy.png?alt=media)

实验的时候是加了一路近线召回

### 阿里的DREAM

[DREAM Technical Report](https://arxiv.org/pdf/2608.09408)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1271bda96d6d5c39b84288eca6a97c87c07aa4a3%2Fdream1.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7a26fabbecb3b78bb0b1cb9b88eabfaf2bb39a59%2Fdream-frame.png?alt=media)

### 快手的LSVCR

[Enhancing Sequential Recommender with Large Language Models for Joint Video and Comment Recommendation](https://arxiv.org/pdf/2403.13574) Recsys25

用于联合视频和评论推荐，仅在训练中使用LLM增强语义。

### 快手的LEARN

[快手广告领域的大模型技术探索与实践](https://mp.weixin.qq.com/s/9VmOb3q4enWhqqJ_f7jnFA)

<https://zhuanlan.zhihu.com/p/705497209>

[Knowledge Adaptation from Large Language Model to Recommendation for Practical Industrial Application](https://arxiv.org/pdf/2405.03988)

过往的llm+推荐的两种思路：

* freeze LLM参数并适应推荐领域数据：将用户行为历史改写成文本prompt，直接丢给LLM生成top-k推荐结果，例如：
  * [Chat-rec: Towards interactive and explainable llms-augmented recommender system](https://arxiv.org/pdf/2303.14524)
  * [Large Language Models are Zero-Shot Rankers for Recommender Systems](https://arxiv.org/pdf/2305.08845v2)
  * [Is ChatGPT a Good Recommender? A Preliminary Study](https://arxiv.org/pdf/2304.10149)
  * [LLM-Rec: Personalized Recommendation via Prompting Large Language Models](https://arxiv.org/pdf/2307.15780)
  * [Large Language Models are Competitive Near Cold-start Recommenders for Language- and Item-based Preferences](https://arxiv.org/pdf/2307.14225)
  * [Is ChatGPT Fair for Recommendation? Evaluating Fairness in Large Language Model Recommendation](https://arxiv.org/pdf/2305.07609)
* 在推荐领域的特定文本数据集上微调LLM：利用LLM捕捉用户行为序列，通过设计提示prompt，使LLM学习用户和物品之间的潜在关系，在预测任务中理解用户的偏好变化和行为模式，从而更好地预测用户可能感兴趣的物品，例如：
  * [A Bi-Step Grounding Paradigm for Large Language Models in Recommendation Systems](https://arxiv.org/pdf/2308.08434)
  * [Tallrec: An effective and efficient tuning framework to align large language model with recommendation](https://arxiv.org/pdf/2305.00447)
  * [Llara: Aligning large language models with sequential recommenders](https://arxiv.org/pdf/2312.02445)
  * [ReLLa: Retrieval-enhanced Large Language Models for Lifelong Sequential Behavior Comprehension in Recommendation](https://arxiv.org/pdf/2308.11131)
  * [Where to Go Next for Recommender Systems? ID- vs. Modality-based Recommender Models Revisited](https://arxiv.org/abs/2303.13835)

上面两种方法可以看成是Rec-to-LLM，即将推荐这个target domain适配到LLM这个source domain上去，有如下缺点：

* 将用户历史全丢给LLM不现实：一方面开源的LLM目前只支持1k(baichuan)-4k(llama)，不支持这么长的序列，另一方面复杂度和序列长度呈二次关系
* 微调的方案可能会出现灾难性遗忘(catastrophic forgetting)：全参数微调，会让模型**丢失在预训练过程中学到的开放世界的知识**，而LoRA的效果也不好。原因：
  * domain gap：两个领域有巨大的差别(profound gap)，[Continual Learning of Large Language Models: A Comprehensive Survey](https://arxiv.org/pdf/2404.16789)发现了全量参数微调会导致LLM对原有知识domain的严重的灾难性遗忘。
  * 训练目标不对齐（misalignment）：LLM是next token prediction，学习大语料的general知识；finetune则主要是检索类的任务，强依赖用户-item的交互行为

其实有rec-to-llm和llm-to-rec两类想法

![rec2llm-llm2rec](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-94d82fc1a72e0e7a5505219f06a42cf5ac29bc35%2Frec2llm-llm2rec.png?alt=media)

快手商业化把llm用到推荐的思路变化：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-58a0033eb50d8dc401bcaf490c01520a54cc4cb6%2Flearn-roadmap.png?alt=media)

本文提出了LEARN(Llm-driven knowlEdge Adaptive RecommeNdation)，实现了LLM-to-Rec，让LLM作为content extractor，推荐任务是训练目标。

![learn-cex-pal](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1b8a77a72838aba55d1d8b33c9200cc3de2f77bd%2Flearn-cex-pal.png?alt=media)

* Content EXtraction(CEX)：输入item描述，过预训练的LLM（参数freeze）得到的每个token的输出pooling得到item的emb $$E^c$$
* Preference ALignment(PAL)：把$$H$$个$$E^c$$输入一个content adapter(就是一个MLP)，然后过12层的可训练的transformer得到$$H$$个输出emb，最后再过一个online projection(也是一个MLP)降维到64，得到$$E^{user}$$

![learn](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b7ea64d4c40379be43fe4585c676e25043cb9f62%2Flearn.png?alt=media)

假设用户点击了H+T个item，拆成1~~H和H+1~~H+T这两部分，

* user tower：1\~H的item输入CEX+PAL，得到H个输出
* item tower：有3个，结构都是输入H+1\~H+T的item，网络参数和user tower共享；infer时只输入一个item
  * item tower a：经过CEX得到$$E^c$$，再经过PAL得到$$E^{item}$$，和user tower一样用causal attention
  * item tower b：经过CEX得到$$E^c$$，再经过PAL得到$$E^{item}$$，使用self-attention，每个item只关注自己
  * item tower c：只经过CEX，直接得到$$E^{item}$$

消融后发现item tower a效果最好，所以用了a

loss用的是pinnerformer的dense all action loss（[PinnerFormer: Sequence Modeling for User Representation at Pinterest](https://arxiv.org/pdf/2205.04507)），即从`1~H`里随机挑m个出来，每一个去预估`H+1~H+T`里的随机一个正样本

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d3c002d406490876fa82067f52443303405822a4%2Fpinnerformer-loss.png?alt=media)

在线使用时如下图，其中user emb和item emb就是两个tower的输出，会先concat并过个小fusion module得到fusion emb，然后一方面过个mlp算个cvr loss，另一方面和user emb、item emb还有其他特征concat再送给后面的模块正常算ranking loss

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e0aec19ef9b434aaeb18f0dcd22bae03027b05cc%2Flearn-adaptor.png?alt=media)

### 快手的LARM

[LLM-Alignment Live-Streaming Recommendation](https://arxiv.org/pdf/2504.05217)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5e09a297ecc2a3bcd212a5c663acc3f7a57c2991%2Flarm.jpeg?alt=media)

结合直播的特点：同一个直播间在不同时间段的内容不同，不同用户由于进房时间不同，看到同一个直播间的内容也不同。

整体思路还是比较简单的

* 输入直播间和主播的基础信息，拿100B的llm标出来一些数据（生成如下的问答pair对、以及对直播内容的总结与理解），去finetune一个7B的llm
* 用这个7B LLM产出emb（pooling）结合主播侧特征通过gating融合得到直播间emb，和user去双塔inbatch softmax
* 【这一步的时效性比较高，每30秒更新一次】拿上面融合过的emb，通过rq-vae进行聚类，把对应的code扔给线上推荐模型

qa类prompt：

```shell
Live-streaming information: #time, #images, #speeches, #comments, #author_information;
You need to pay attention to the fact that the person in the
live-streaming may not be the author himself, but someone else.
Please generate ten instruction questions as diverse as possible
based on the provided live-streaming information. These
questions are about facts or an understanding and evaluation
of relevant content. Do not ask any questions that cannot be
answered confidently.
Finally, you need to return the result in the following form:
1. {"Question":..., "Answer":...}
2. {"Question":..., "Answer":...}
```

总结类prompt：

```shell
Live-streaming information: #time, #images, #speeches, #comments, #author_information;
You need to pay attention to the fact that the person in the
live-streaming may not be the author himself, but someone else.
Complete the following tasks:
1. Describe the current events and content in the live broadcast
room in detail in one paragraph, including but not limited to:
Content: including detailed visual information, such as whether
there is text, the look and feel of the picture, the tone, etc.
+ other_tasks,
Finally, you need to return the result in the form of json:
{ "Event and content": {
"Content": ...,
"Character": ...,
"Scene": ...,
"Event": ...,
"Atmosphere": ...,
"Highlights": ...,
"Target user group": ... },}
```

实验部分列了两个主场景的收益，但没有说实验流量

### 快手的LCU

WWW Companion 25，[Comment Staytime Prediction with LLM-enhanced Comment Understanding](https://arxiv.org/pdf/2504.01602)

<https://github.com/lyingCS/LCU>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f5ee6891c8f574075690d93edb04f7bfabfb4ddc%2Fstaytime-analysis.jpeg?alt=media)

用户在一个视频上的的staytime=视频观看时长+评论区时长

用户在评论区的staytime和如下几个因素的关系（后面两个和本文关系不大）：

* top评论的平均点赞数：点赞数越多，评论区的staytime越短，说明在比较不成熟的评论区，用户需要滑动更多来找到他们喜欢的评论，反之用户则更容易在头部评论里找到喜欢的
* 评论的用户互动数（点赞/回复）：互动数越多，评论区的staytime越长，说明用户更有沉浸感
* 视频物理时长：物理时长更长的视频，评论区的staytime更长
* 视频观看时长：视频观看时长更长的视频，评论区的staytime更长，且在1000到1200s处有一个突增

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8e5d18b823b7f8e6e31f029bdd72d40eeaaaa75b%2Flcu.png?alt=media)

两阶段：

* 训练LLM：基于如下3个任务sft一个LLM
  * staytime分桶预估：给定用户历史行为，预估用户在评论区的staytime
  * top评论预估：给定一些评论，预估哪个评论的互动数最高
  * 用户-评论互动预估：给定一些评论，基于用户历史行为预估用户最有可能对哪些评论互动
* LLM集成到推荐系统中并增加辅助loss
  * 用户无关的评论排序：给定评论list，给出评论热度的排序
  * 用户相关的评论排序：给定用户+评论list，预估用户对哪些评论会有互动

### 快手的KuaiMod

[KuaiMod来了！快手用大模型重构短视频生态格局](https://mp.weixin.qq.com/s/HO7I_9E1iwteSRHLukz81A)

[VLM as Policy: Common-Law Content Moderation Framework for Short Video Platform](https://arxiv.org/pdf/2504.14904v1)

* 首个短视频平台劣质内容判别基准测试：面向快手生态构建了短视频劣质内容分类体系，形式化定义了短视频内容判别任务，并基于真实场景中的用户反馈构建了首个短视频劣质内容判别基准测试。KuaiMod劣质内容分类体系包含4种主要的劣质类别以及15种细粒度劣质类别。基准测试包含1000条短视频样本，涵盖 15种细粒度劣质类别，完全由人工标注，并经过多轮数据清洗以保证正确性。
* 首个工业级自动化内容判别解决方案：KuaiMod是首个在工业场景下验证了部署价值的自动化内容质量判别解决方案，在快手平台多个场景下的部署结果表明，KuaiMod方案具有能够与人工判别相媲美的准确率。
* 基于用户反馈的强化学习训练+更新策略：区别于静态的规则或内容判别API，基于判例的劣质内容建模使得KuaiMod可以通过迭代训练数据完成判别策略的更新。为了保证实时性和准确率，我们设计了基于用户反馈的强化学习范式，利用用户的线上反馈构造新的训练数据，实现线上判别服务的天级更新。

### 快手的R4ec

[RecSys'25|快手R4ec：用 “反思” 让推荐更懂你](https://mp.weixin.qq.com/s/zYkZE8fqARBfywWFeJwiNQ?scene=1)

[R4ec: A Reasoning, Reflection, and Refinement Framework for Recommendation Systems](https://arxiv.org/pdf/2507.17249)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a8badd514b4d7ed39200995812660109ca60afd7%2Fr4ec-dataset.png?alt=media)

目前有`(hist, item, label)`，label可以是正样本或者负样本

* 输入(hist,item)，问模型用户会不会喜欢这个item(pred)，并总结用户偏好(reasoning)
* 输入(hist,item,reasoning)，问模型这个用户偏好是否合理（judge），并反思出不合理的原因（reflect）
  * 如果judge == 合理 and pred == label：
    * `[(hist),(reasoning)]`加到**reasoning数据集**里
    * `[(hist,reasoning), (judge, reflect="")]`加到**reflect数据集**里
  * 如果judge == 不合理 and pred != label：
    * 输入hist,item,reasoning,reflect，让模型输出用户会不会喜欢这个item(pred')和refine后的用户偏好(reasoning\_r)
    * 如果pred' == label：
      * `[(hist,reasoning), (judge, reflect)]`加到**reflect数据集**里
      * `[(hist,reasoning,reflect),(reasoning_r)]`加到**refine数据集**里
  * else：扔掉`(hist, item, label)`

item侧也复用了类似的流程，把输入的(hist, item)改成(item, pos, neg)，pos是对这个item给过正反馈的user历史行为，neg类似，产出了对应的item的reasoning数据集、reflect数据集、refine数据集

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6d2f710e3c9d658b1e156d35926c244e0b95ff09%2Fr4ec.png?alt=media)

训练：用lora训练2个模型

* actor模型：用reasoning数据集和refine数据集训练
* reflection模型：用reflect数据集训练

发现actor模型7b就够了，但reflection模型从0.5b到72b效果会一直涨

推理：

* 迭代优化：通过actor产出知识(即reasoning)，然后让reflection模型给出reflect，再refine，直到产出靠谱知识
* 过滤：actor并行产出多个知识，reflection模型过滤掉很不靠谱的，剩下的知识对应的向量取平均

在线使用：通过actor生成user和item的知识，然后用bge-m3产出向量给推荐模型用

### 快手的DAS

[CIKM'25|快手 DAS：让广告推荐更懂4亿用户](https://mp.weixin.qq.com/s/76ephhal3AuKROSHCOcAjg)

[DAS: Dual-Aligned Semantic IDs Empowered Industrial Recommender System](https://arxiv.org/pdf/2508.10584)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-00811d4f0584ff4fdd28e60a0b3dabdb212a8404%2Fdas-kuaishou.png?alt=media)

### 快手的TrackRec

[TrackRec: Iterative Alternating Feedback with Chain-of-Thought via Preference Alignment for Recommendation](https://arxiv.org/abs/2508.15388)

### 快手的OneRec-Think

[OneRec-Think: In-Text Reasoning for Generative Recommendation](https://arxiv.org/abs/2510.11639)

<https://github.com/wangshy31/OneRec-Think>

参考代码：

```python
def get_special_tokens(max_range: int = 256) -> list[str]:
    special_tokens: list[str] = []

    special_tokens.append("<|sid_begin|>")
    special_tokens.append("<|sid_end|>")

    for prefix in ["s_a", "s_b", "s_c", "s_d"]:
        for idx in range(max_range):
            special_tokens.append(f"<{prefix}_{idx}>")

    return special_tokens


def round_up_to_multiple(value: int, multiple: int) -> int:
    if multiple <= 0:
        raise ValueError("multiple must be a positive integer")
    return ((value + multiple - 1) // multiple) * multiple

def run():
    tokenizer = AutoTokenizer.from_pretrained(base_model_dir)

    new_tokens = get_special_tokens(max_range=256)
    print(f"Preparing to add {len(new_tokens)} special tokens.")

    tokens_added = tokenizer.add_special_tokens(
        {"additional_special_tokens": new_tokens}, replace_additional_special_tokens=False
    )
    print(f"Successfully added {tokens_added} tokens.")

    updated_vocab_size = len(tokenizer)
    target_vocab_size = round_up_to_multiple(updated_vocab_size, 256)

    print(
        f"Current vocab size: {updated_vocab_size}, adjusting to: {target_vocab_size} (nearest 256 multiple)."
    )
    model.resize_token_embeddings(target_vocab_size)

    config.vocab_size = target_vocab_size
```

### 快手的OpenOneRec

[OpenOneRec Technical Report](https://arxiv.org/pdf/2512.24762)

<https://huggingface.co/OpenOneRec>；<https://github.com/Kuaishou-OneRec/OpenOneRec>

数据集：<https://huggingface.co/datasets/OpenOneRec/OpenOneRec-RecIF>

### 快手的Align3GR

[Align3GR: Unified Multi-Level Alignment for LLM-based Generative Recommendation](https://arxiv.org/pdf/2511.11255)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c5f222569311194c4ce1296666d398a63f1ca1ac%2Falign3gr.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c3d593a5d9b7c474b49d6b6953af5ce17db778b7%2Falign3gr-arch.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-940288bcf15ddb0775dfe67ea05c35129865af07%2Fbehavior-modeling-level-align.png?alt=media)

基于llama2-7b

### 字节的HLLM-Creator

[HLLM: Enhancing Sequential Recommendations via Hierarchical Large Language Models for Item and User Modeling](https://arxiv.org/abs/2409.12740)

[HLLM-Creator: Hierarchical LLM-based Personalized Creative Generation](https://arxiv.org/abs/2508.18118)

### 腾讯的LEADRE

[LEADRE: Multi-Faceted Knowledge Enhanced LLM Empowered Display Advertisement Recommender System](https://arxiv.org/pdf/2411.13789)

### 微信的PRECISE Recsys24

[微信PRECISE:多场景落地基于协同信号和语义信息的生成式序列推荐](https://mp.weixin.qq.com/s/pld010curqUv_NsqdvSEDA)

[PRECISE: Pre-training Sequential Recommenders with Collaborative and Semantic Information](https://arxiv.org/pdf/2412.06308)

### Spotify的LLM Preview生成

[Transforming Podcast Preview Generation: From Expert Models to LLM-Based Systems](https://arxiv.org/pdf/2505.23908)

[推荐算法(2025.6.3)：Spotify的LLM应用，效果明显](https://mp.weixin.qq.com/s/2SJ5IdXa5Hmygx8VxGlDcQ)

### Spotify的GLIDE

[Deploying Semantic ID-based Generative Retrieval for Large-Scale Podcast Discovery at Spotify](https://arxiv.org/pdf/2603.17540)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-39ed39b80628655d94ca56c11dbe070b37b2620d%2Fglide.png?alt=media)

* semantic grounding：双向翻译任务：SID -> 文本描述和文本描述 -> SID。训练上他们分两阶段：先冻住trans backbone，只训新增SID embedding；再冻结所有参数（包括emb），用LoRA去适配backbone。这个设计是为了尽量保住原始语言能力，避免灾难性遗忘。
* instruction tuning：用户的协同emb通过soft token的方式引入，加上近期sid和一些文本特征构成prompt，再加上一个control token（这次是生成熟悉的内容，还是生成探索性的，这个感觉可以搞2个special token）来多任务sft
* 数据处理：对exploration-driven placement的样本加权，对超热门episode(item)做popularity capping
* serving：加了一路召回，没有细讲，看着有一些cache，应该是近线

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-55a8c053d79cdf6433001683008a033a48279d48%2Fglide-prompt.png?alt=media)

soft token参考[Embedding-to-Prefix: Parameter-Efficient Personalization for Pre-Trained Large Language](https://arxiv.org/pdf/2505.17051)，这篇是把emb过了mlp后，拼在最前面，而现在这篇是拼在中间，实现方式(gpt教的)：

```python
''' input_ids: [B, T]; user_emb:  [B, D_user]'''

token_emb = lm.get_input_embeddings()(input_ids)    # [B, T, H]
soft_user = proj_mlp(user_emb).unsqueeze(1)         # [B, 1, H]

'''假设 system instruction 长度固定为 sys_len'''
inputs_embeds = torch.cat(
    [
        token_emb[:, :sys_len, :],
        soft_user,
        token_emb[:, sys_len:, :]
    ],
    dim=1
)

soft_mask = torch.ones(input_ids.size(0), 1, device=input_ids.device, dtype=torch.long)
attention_mask = torch.cat(
    [
        attention_mask[:, :sys_len],
        soft_mask,
        attention_mask[:, sys_len:]
    ],
    dim=1
)

outputs = lm(
    inputs_embeds=inputs_embeds,
    attention_mask=attention_mask,
    labels=labels_shifted_if_needed
)
```

### 华为的KAR

[Towards Open-World Recommendation with Knowledge Augmentation from Large Language Models](https://arxiv.org/pdf/2306.10933)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-20726272c32a9fa3c09799e7479ba16934dc0720%2Fkar-arch.png?alt=media)

* LLM生成user侧的preference reasoning知识
* LLM生成item侧的factual知识
* 这两部分知识输入一个encoder得到两个表示，然后再过个mmoe产出merge后reasoning augmented vec和fact augmented vec，一起作为CRM的输入特征。

对应的prompt如下：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bee2a95075c30e64a4460df798efead33ca765e7%2Fkar-prompts.png?alt=media)

看实验应该是用在召回，每个user和vec去找最像的k个item，但没法ann，只能暴力算

代码：<https://github.com/YunjiaXi/Open-World-Knowledge-Augmented-Recommendation/blob/main/knowledge_encoding/utils.py>，其实就是把模型输出的hidden states处理一下：

```python

x = tokenizer(x, padding=True, truncation=True, max_length=512, return_tensors="pt",
                return_attention_mask=True).to(device)
mask = x['attention_mask']
outputs = model(**x, output_hidden_states=True, return_dict=True)
pred = get_paragraph_representation(outputs, mask, aggregate_type)
def get_paragraph_representation(outputs, mask, pooler='cls', dim=1):
    last_hidden = outputs.last_hidden_state
    hidden_states = outputs.hidden_states

    # Apply different poolers

    if pooler == 'cls':
        # There is a linear+activation layer after CLS representation
        return outputs.pooler_output.cpu()  # chatglm不能用，用于bert
    elif pooler == 'cls_before_pooler':
        return last_hidden[:, 0].cpu()
    elif pooler == "avg":
        return ((last_hidden * mask.unsqueeze(-1)).sum(dim) / mask.sum(dim).unsqueeze(-1)).cpu()
    elif pooler == "avg_first_last":
        first_hidden = hidden_states[1]
        last_hidden = hidden_states[-1]
        pooled_result = ((first_hidden + last_hidden) / 2.0 * mask.unsqueeze(-1)).sum(dim) / mask.sum(dim).unsqueeze(-1)
        return pooled_result.cpu()
    elif pooler == "avg_top2":
        second_last_hidden = hidden_states[-2]
        last_hidden = hidden_states[-1]
        pooled_result = ((last_hidden + second_last_hidden) / 2.0 * mask.unsqueeze(-1)).sum(dim) / mask.sum(dim).unsqueeze(-1)
        return pooled_result.cpu()
    elif pooler == 'len_last':  # 根据padding方式last方式也不一样
        lens = mask.unsqueeze(-1).sum(dim)
        # index = torch.arange(last_hidden.shape[0])
        # print(index)
        pooled_result = [last_hidden[i, lens[i] - 1, :] for i in range(last_hidden.shape[0])]
        pooled_result = torch.concat(pooled_result, dim=0)
        return pooled_result.cpu()
    elif pooler == 'last':
        if dim == 0:
            return last_hidden[-1, :, :]
        else:
            return last_hidden[:, -1, :]
    elif pooler == 'wavg':
        # Get weights of shape [bs, seq_len, hid_dim]
        weights = (
            torch.arange(start=1, end=last_hidden.shape[1] + 1)
            .unsqueeze(0)
            .unsqueeze(-1)
            .expand(last_hidden.size())
            .float().to(last_hidden.device)
        )

        # Get attn mask of shape [bs, seq_len, hid_dim]
        input_mask_expanded = (
            mask
            .unsqueeze(-1)
            .expand(last_hidden.size())
            .float()
        )

        # Perform weighted mean pooling across seq_len: bs, seq_len, hidden_dim -> bs, hidden_dim
        sum_embeddings = torch.sum(last_hidden * input_mask_expanded * weights, dim=dim)
        sum_mask = torch.sum(input_mask_expanded * weights, dim=dim)

        pooled_result = sum_embeddings / sum_mask
        return pooled_result.cpu()
    else:
        raise NotImplementedError
```

### 华为的LLMTreeRec

[LLMTreeRec: Unleashing the Power of Large Language Models for Cold-Start Recommendations](https://arxiv.org/pdf/2404.00702)

### 华为的LASER

[Efficiency Unleashed: Inference Acceleration for LLM-based Recommender Systems with Speculative Decoding](https://arxiv.org/pdf/2408.05676) SIGIR25

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6b16ab7ad674d79754d8ee64a11ae351f45811be%2Flaser.png?alt=media)

### 小红书的NoteLLM

[WWW'24 | 小红书NoteLLM: 大语言模型用于I2I笔记推荐](https://mp.weixin.qq.com/s/jcj4jKaEIg-L264uZgYuAw)

[NoteLLM: A Retrievable Large Language Model for Note Recommendation](https://arxiv.org/pdf/2403.01744)

3个任务：

* I2I笔记推荐任务: 给定目标笔记，基于LLM从内容池中找出top-k个相似笔记
* 主题标签生成任务：基于笔记的标题和内容, 用LLM生成对应的k个主题标签。
* 类目生成任务：基于笔记的标题、内容、主题标签，用LLM生成对应的类目。

笔记压缩prompt：

```
[bos]<instruction><input notes>The compression word is:"[EMB]".<output guidance><output>[eos]
```

其中的\[EMB]是一个特殊token，类比bert里的\[CLS]

![notellm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d8f8f2d2b560066170e257a0fedf88d512bf6c2a%2Fnotellm.png?alt=media)

#### 生成式对比学习

&#x20;

生成式对比学习(Generative-Contrastive Learning,GCL)

* 通过统计共现信息，同时打压热门，得到item pair对
* 由于LLMs的自回归特性, 将\[EMB]的**前一个token**对应的**最后一个隐层输出**经过一个linear layer得到一个d维向量

对于batchsize=B的batch来说，有B个pair对，即2B个item，那么对它们算一个对比学习的loss，其中的sim是cos相似度：

$$
L\_{c l}=-\frac{1}{2 B} \sum\_{i=1}^{2 B} \log \frac{e^{\operatorname{sim}\left(\boldsymbol{n}\_i, \boldsymbol{n}*i^{+}\right) \cdot e^\tau}}{\sum*{j \in\[2 B] \backslash{i}} e^{\operatorname{sim}\left(\boldsymbol{n}\_i, \boldsymbol{n}\_j\right) \cdot e^\tau}}
$$

#### 协同监督微调

&#x20;

协同监督微调(Collaborative Supervised Fine-Tuning,CSFT)将主题标签生成任务和类目生成任务联合训练，一个batch里40%的样本执行主题标签生成任务，剩下的60%做类目预测任务，然后走正常的语言模型自回归任务：

$$
L\_{g e n}=-\frac{1}{T} \sum\_{i=1}^T \log \left(p\left(o\_i \mid o\_{\<i}, input\right)\right)
$$

然后将这两个loss加权求和($$\alpha = 0.01$$)：

$$
L=\frac{L\_{c l}+\alpha L\_{g e n}}{1+\alpha},
$$

### 小红书的NoteLLM-2

[小红书 NoteLLM-2：用于推荐的多模态表征](https://mp.weixin.qq.com/s/kVLHdFdHXGVsDbLQJrDTXQ)

[NoteLLM-2: Multimodal Large Representation Models for Recommendation](https://arxiv.org/abs/2405.16789)

### 小红书的HyMiRec

[HyMiRec: A Hybrid Multi-interest Learning Framework for LLM-based Sequential Recommendation](https://arxiv.org/pdf/2510.13738)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b3d51cdbb8e91a335f53850b9bc591f22b401d05%2Fhymirec1.png?alt=media)

全序列量化后丢给一个轻量的推荐模型，产出兴趣向量，再把截断的短期行为和兴趣向量一起给LLM产出多兴趣的用户向量

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-af8faa60bbe0aae1ea9db05a8245443696e2c14b%2Fhymirec2.png?alt=media)

* content llm encoder：输入item的文本(title+content)，还有一个special token，最终special token的输出就当成item emb
* 基于cos相似度的的残差码本：最终一个item就用3个int和3个float（图中的w）表示

$$
e\_j^{i+1}=e\_j^i-\frac{e\_j^i \cdot c\_{b\_j}^i}{\left|c\_{b\_j}^i\right|^2} \cdot c\_{b\_j^i}^i, j \in\[1, N]
$$

从图里可以看出，w是e在c上的投影，即w的长度是$$|e|\*cos(e,c)=|e|*ec/(|e||c|)=ec/|c|$$，而要创造一个c方向上这么长的向量，需要和单位向量$$c/|c|$$相乘，所以就是$$ec/|c|^2*c$$

* 训练2个recommender
  * 轻量：输入历史序列的sid对应的emb，还有一些可学习的Q-coarse，经过一个浅层trans，输出Q对应的向量R-coarse
  * LLM：输入R-coarse、短期sid对应的emb加上一个indicator向量（让llm能识别出来）、Q-refine，输出Q对应的输出R-refine
* DMIL(Disentangled Multi-Interest Learning Module)：R-refine和content encoder的special token的输出都会用这个模块来训练
  * 输入的R有s个向量，将未来一个时间窗口内的item聚成s类，然后通过匈牙利算法最大化pairwise的cos相似度，再加个对比学习

最终serving时加了一路召回，拿用户的s个兴趣分别召回，近线预估，每次输入用户最近10个行为，在冷启item/user上有收益

### 小红书的RED-Rec

[Cross-Scenario Unified Modeling of User Interests at Billion Scale](https://arxiv.org/pdf/2510.14788)

[「小红书」搜广推统一LLM｜CROSS-SCENARIO UNIFIED MODELING OF USER INTERESTS](https://zhuanlan.zhihu.com/p/1968666570755650938)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1241407208cda8d694d7b333e74053f2208b0fca%2Fred-rec1.png?alt=media)

* itemllm：
  * 有图像和文本的输入，用LLaMA2-1.3B初始化llm部分，图像部分用CLIP ViT-B/16。
* userllm：用Qwen2.5-1B，整体和HyMicRec里的LLM差不多
  * 搜广推的序列按时间序merge到一起
  * 序列里每个item加了action（点击、收藏、点赞等）的emb，hour(0\~23)的emb
  * 对merge后的序列加了序列的pos embed，时间gap的pos emb
  * 同样有HyMicRec里的Q，这里用于建模跨场景的兴趣

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8c471ce8d1af30336d8329067d243ceee4bcfb74%2Fred-rec2.png?alt=media)

100w用户训练，1w用户测试，8卡H100训练，最终serving时加了一路召回，作用于全量用户，开了10%对10%的实验，看着独占比很高（90%+）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8e2988b0f47aef537e7692dc74a4af9c7d3f4f33%2Fred-rec-exp.png?alt=media)

### 网易云音乐的LEMON

KDD25，[Enhanced Emotion-aware Music Recommendation via Large Language Models](https://dl.acm.org/doi/pdf/10.1145/3711896.3737212)

### 亚马逊的MarketingFM

[LLMs for Customized Marketing Content Generation and Evaluation at Scale](https://arxiv.org/pdf/2506.17863)

### 亚马逊的SynerGen

[SynerGen: Contextualized Generative Recommender for Unified Search and Recommendation](https://arxiv.org/pdf/2509.21777)

用一个decoder-only生成式推荐模型，把搜索+推荐以及召回+排序全都统一，但只在公开数据集上有一些实验，没有在线ab的效果

## LLM+推荐：输入文本（工业界+没落地）

### Google的ILM

[Item-Language Model for Conversational Recommendation](https://arxiv.org/pdf/2406.02844)

适用场景如下，{user}可以看成一种特殊的{item}，{history}是若干个item

![ILM-tasks](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3d68624189d88b6f2c26124fb2eab6b019a4630e%2FILM-tasks.png?alt=media)

参考BLIP-2（[Blip-2: bootstrapping language-image pre-training with frozen image encoders and large language models](https://arxiv.org/pdf/2301.12597)）提出的Q-former：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a26305b65bead2524ad6e87e898f39845494724d%2F2-stage-blip-2.png?alt=media)

引入了Q-former

![ILM](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-50889c866123260bd2e6828aba7669c816fae31d%2FILM.png?alt=media)

* phase1：表示学习，交替训练如下两类表示学习
  * item-text表示学习:
    * query的tokens和item的cf emb过cross attn后，拿cls的输出得到v1
    * text过attn得到v2
    * v1和v2算item-text对比学习
    * v2走一个自回归的任务(item grounded text generation)
  * item-item表示学习
    * query的tokens和item1的cf emb过cross attn后，拿cls的输出得到v1
    * query的tokens和item2的cf emb过cross attn后，拿cls的输出得到v2
    * v1和v2算item-item的对比学习
* phase2：item-language model训练
  * Q-former的item encoder经过一个linear输入到LLM中
  * LLM参数freeze，只tune Q-former的参数和linear

### Google的STAR

[谷歌用大模型搞推荐，拿到收益了](https://mp.weixin.qq.com/s/IuPLKwPnDwWgke4SFy2Bnw)

[STAR: A Simple Training-free Approach for Recommendations using Large Language Models](https://arxiv.org/pdf/2410.16458)

### Google的高效item id生成

[Efficient Item ID Generation for Large-Scale LLM-based Recommendation](https://arxiv.org/pdf/2509.03746)

### Google的BLUE

[Bridging Textual Profiles and Latent User Embeddings for Personalization](https://arxiv.org/pdf/2605.06981)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-074f06425a7b63a1aec3ecdf605d2ffb091de98c%2Fblue.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a8e1a843d6c113709621adfb114f6901fdf96701%2Fblue-arch.png?alt=media)

### Meta的EmbSum

[EmbSum: Leveraging the Summarization Capabilities of Large Language Models for Content-Based Recommendations](https://www.arxiv.org/pdf/2405.11441)

[RecSys'24 | Meta:使用LLM的摘要能力提升内容推荐](https://mp.weixin.qq.com/s/gDOo5qjcZgy5fRQJtd2GLw)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-15e5a4e904e1128b104d5aaad113462c5d70640f%2Fembsum.png?alt=media)

* user session encoding：先将用户k个行为序列化分成$$g$$个session，每个session里有$$p$$个content，这p个content的文本单独过transformer encoder（T5 small），拿开始的token（`[SOS]`）对应的输出当成文本表示
* user engagement summarization：将用户的历史丢到一个prompt里去，让llm总结出一段话，然后参考[Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering](https://arxiv.org/abs/2007.01282)，把llm输出的所有tokens的hidden states concat在一起，再丢给T5 decoder，并加一个自回归的loss，其中$$y\_j^{u\_i}$$表示生成的用户$$u\_i$$的summary，而$$|y\_j^{u\_i}|$$是summary的长度

$$
\mathcal{L}*{\text {sum }}=-\sum*{j=1}^{\left|y\_j^{u\_i}\right|} \log \left(p\left(y\_j^{u\_i} \mid E, y\_{\<j}^{u\_i}\right)\right)
$$

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-190680cf6a3831ebc822c2f3ff4fd17706f5c65c%2Fembsum-summary.png?alt=media)

* user poly embedding（upe）：把decoder最后一个token（`[EOS]`）拿出来，和前面的k个session encoding一起得到一个$$Z \in \mathrm{R}^{(k+1) \times d}$$，然后过一个poly-attention layer，得到用户的$$m$$个兴趣表示$$A \in \mathrm{R}^{m \times d}$$，其中每个向量是$$\alpha\_a=\operatorname{softmax}\left\[c\_a \tanh \left(Z W^f\right)^{\top}\right] Z$$，其中$$c\_a \in \mathrm{R}^{1 \times p}$$和$$W^f \in \mathrm{R}^{d \times p}$$是可训练的参数
* content poly embedding（cpe）：和upe类似，k个session encoding换成当前item的encoder输出，UPE里的`[EOS]`换成当前content的下一个token即`[SOS]`，然后得到$$n$$个$$d$$维表示$$B$$
* 融合：$$A^TB$$可以算出一个$$m\times n$$的相似矩阵，然后flatten，得到一个$$mn$$维的向量，同理算一下，得到的$$s^i\_j$$就是两个向量的内积，即相似度的得分了

$$
\begin{aligned}
W^p & =\operatorname{softmax}\left(\operatorname{flatten}\left(A \cdot \operatorname{gelu}\left(B W^s\right)^{\top}\right)\right), \\
s\_j^i & =W^p \cdot K\_j^i,
\end{aligned}
$$

### Meta的RecoWorld

[下一代推荐系统长这样，Meta最新研究RecoWorld，从「猜你喜欢」到「听你指令」](https://mp.weixin.qq.com/s/J2qoNk3UCRlT1wHLsvOHTA)

[RecoWorld: Building Simulated Environments for Agentic Recommender Systems](https://arxiv.org/pdf/2509.10397)

整体感觉和agent4rec差不多

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3602dbb99a10743de8df79b372e6b9fcfd9a44fb%2Frecoworld.png?alt=media)

用户模拟器输入用户历史行为，产出一个instruction，丢给agentic recsys，产出推荐list，用户模拟器产出用户action，同时再产出新的instruction，再丢给agentic sys，再产出新的推荐list，直到整个trajectory结束，产出整个轨迹的奖励，拿来用rl训练agentic recsys。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1bde90dc5d5db0429314e692a1c68eadb602bd9c%2Frecoworld-modeling.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c270d06575fba043aedf5b9d9ee53d78bbc0d113%2Frecoworld-mindset.png?alt=media)

用户模拟器的建模，可以是文本llm，还可以是多模态llm、把item换成sid的llm（需要先重新tune出一个llm才能用）。还加了memory模块（记录长期兴趣）、reasoning、midset update（如第二张图，给用户推了a，用户会是一个什么心态，下一步希望什么）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-33403ea72867a03c1296d98aa7acf7d8439ed70a%2Frecoworld-agentic-recsys.png?alt=media)

推荐系统是一个自动化的agent，包括4个能力：perception、reasoning\&planning、action(工具使用)、memory，其参数可以用RL来训练，环境的状态就是上面的用户的mindset，action就是推荐的item list，最终奖励就是整个多轮交互的总reward

### Meta的GR2

[GR2 Technical Report](https://arxiv.org/pdf/2606.31984)

### Meta的AMBER

[An Event is Worth One Token: Event Tokenization for Industrial-scale LLM Recommendation](https://arxiv.org/pdf/2608.25546)

一次曝光/交互发生时的user、item、context、cross和outcome等完整快照压成连续的Event Token，再让User LLM对Event Token序列做自回归ranking或retrieval。

* 训练：Event Tokenizer与User LLM联训；
* serving：在事件发生后异步计算一次并缓存

但没写ab收益

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a915720f378161be369db412b42e6b3228119593%2Famber.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ba9c1b312d2109006f250a416ce4aae65e77f1cc%2Famber-2tasks.png?alt=media)

其实和字节的ins-as-token非常像，主要区别是同时支持召回+排序task，以及user侧用了llm。文中说llm是一个预训练的1b llama初始化的，而且效果比随机初始化要好，但其实它的输入都是event-token，感觉不需要啥世界知识？下图也可以看出，一开始收益很大，但20k steps后就很小了其实。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0ac6c393f41c6e6bfdd99eef6442e763985b9e3f%2Famber-pretrain-random.png?alt=media)

### 美团的PIGEON

[Open-Set Living Need Prediction with LLMs](https://arxiv.org/pdf/2506.02713)

将“生活需求预测”定义为 “开放集分类” 问题，提出PIGEON系统结合行为检索器与Maslow需求等级对用户意图进行文本生成预测。

### 阿里的SLIM

[蚂蚁集团在大模型推荐上的算法和应用](https://mp.weixin.qq.com/s/z4Q3Imuqoxw52TteaPbveQ?from=groupmessage\&isappinstalled=0\&scene=1\&clicktime=1720679311\&enterid=1720679311)

[Can Small Language Models be Good Reasoners for Sequential Recommendation?](https://arxiv.org/pdf/2403.04260)

![slim](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7f4c61fad8904a1173a21d04f30c9ae6b41ac947%2Fslim.png?alt=media)

* 第一阶段：蒸馏大型GPT模型到较小的模型（如LLAMA2/3），来增强推理能力。
  * 通过预设的 prompt，大模型生成推荐理由，这些理由基于预定义的模板。接着，
  * 使用简化的推理模板请求小模型进行推荐和理由生成。
* 第二阶段：利用生成式Loss来微调小模型，使其具备推理能力。
  * 模型训练完成，将通过prompt为用户行为提供T+1推理。
  * 推理结果通过文本编码器（Text Encoder）转化为表征，这些表征将直接应用于线上模型。

### 阿里的KSER

[Selection and Exploitation of High-Quality Knowledge from Large Language Models for Recommendation](https://arxiv.org/pdf/2508.07223)

### 快手的LLM-CF

[2024'快手提出LLM-CF框架，借助LLM的链式思维（COT）推理提升推荐系统性能](https://mp.weixin.qq.com/s/-NJPxj-1JknKl0JdVYIB5g)

CIKM24，[Large Language Models Enhanced Collaborative Filtering](https://arxiv.org/pdf/2403.17688)

<https://anonymous.4open.science/r/LLM-CF-AD78/readme.md>

简单总结：

拿推荐数据对llama2做sft，再用CoT的prompt让llama2对user+item+label产出一个推理过程，并通过bge得到emb，构建一个CoT数据集。在线拿当前用户+item的特征从这个数据集里ann出k个cot example的emb，和其他特征一起输入一个decoder，输出给推荐模型的sharebottom，额外加了一个CoT emb的重建loss。

文中用到的instruction prompt参考（Recsys23的[TALLRec: An Effective and Efficient Tuning Framework to Align Large Language Model with Recommendation](https://arxiv.org/pdf/2305.00447)和WWW24的[ReLLa: Retrieval-enhanced Large Language Models for Lifelong Sequential Behavior Comprehension in Recommendation](https://arxiv.org/pdf/2308.11131)），把推荐变成了一个让模型输出yes/no的2分类任务。这里的$$x\_i$$是包括用户特征和当前item特征的文本描述，$$y\_i$$是点击的label(0/1)。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-187cd6fb2cf17102596019a2d32fadf643d7426b%2Ftext-features.png?alt=media)

整体的框架如下：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-141ab655af387008d27dd6bcf6b862275bd7819e%2Fllm-cf-online-offline.png?alt=media)

* 离线：
  * finetune LLM使其具有推荐能力
  * 使用CF的信息生成CoT Reasoning
  * 构造一个in-context CoT数据集
* 在线：
  * 检索和用户相似的in-context CoT examples，学习世界知识和Reasoning指导的CF特征，拿来给推荐系统用

#### 离线部分

**recgen-llama**

&#x20;

如果直接用TALLRec的方法，会有灾难性遗忘，模型在原来的LLM benchmark上效果会下降很多，提出了一种简洁高效的全量参数微调方法，在general data和推荐能力上找到平衡，可能的做法

* base：不微调，原始llama2
* half：用一半的推荐数据全量参数微调
* full：用全量推荐数据全量参数微调
* LoRA：对Q和V矩阵加LoRA，设置rank=8
* 加噪声：[NEFTune: Noisy Embeddings Improve Instruction Finetuning](https://arxiv.org/pdf/2310.05914)和[HyPe: Better Pre-trained Language Model Fine-tuning with Hidden Representation Perturbation](https://arxiv.org/pdf/2212.08853)，用推荐数据finetune的时候，在input的embedding层加噪声
* R3F：[Better Fine-Tuning by Reducing Representational Collapse](https://arxiv.org/pdf/2008.03156)基于置信域的逼近
* Wise-FT：[Robust Fine-Tuning of Zero-Shot Models](https://arxiv.org/pdf/2109.01903)，这个引用量挺高的，<https://github.com/mlfoundations/wise-ft>，将pretrained和finetuned的权重加权融合：$$W\_{\text {ensemble }}=\alpha \cdot W\_{\text {fine-tuned }}+(1-\alpha) \cdot W\_{\text {pre-trained }}$$
* RecGen：[How Abilities in Large Language Models are Affected by Supervised Fine-tuning Data Composition](https://arxiv.org/pdf/2310.05492)发现通过mixed-data finetuning能够保持通用能力的情况下，提升数学和代码能力

对比下来发现，R3F在推荐和MMLU上都最差，full在推荐上效果最好但在MMLU上不太行，RecGen在推荐的效果还不错在MMLU也没降多少，所以将推荐数据和通用数据(如LIMA([Lima: Less is more for alignment](https://arxiv.org/pdf/2305.11206))和alpaca-gpt4([Instruction tuning with gpt-4](https://arxiv.org/pdf/2304.03277)))混合。

**CoT Reasoning生成**

&#x20;

通过如下的CoT prompt $$\mathcal{P}$$，可以实现如下过程：

* 用RecGen-llama系统性地分析用户的交互历史和反馈，建立一个详细的用户profile。
* RecGen-llama对目标的新商品进行特征的详细描述。
* RecGen-llama考虑用户画像与目标商品特性之间的契合度。
* RecGen-llama反思用户在购买中可能对多样化的需求。

即RecGen-llama的输出是

$$
c\_i=\operatorname{RecGen}-\operatorname{LLaMA}\left(\mathbf{x}\_{\mathbf{i}}, y\_i, \mathcal{P}\right)
$$

其中的CoT prompt $$\mathcal{P}$$是：

```
<<SYS>> As an AI model developed for analyzing consumer behavior, your task is to
generate a chain of thought that considers the following points:
1. Utilize the user's interaction history and review comments to summarize their profiles.
2. Introduce the target new item and detail its features precisely. In addition, integrate
information about items related to the current target new item ...
1. Contemplate the alignment between the user's profile and the features of the target item.
2. Reflect on the user's potential desire for diversity in their purchases.
Your output should be a clear and logical chain of thought... Ensure your analysis is
impartial... Focus should be on understanding factors that influence the user‘s decisionmaking regarding the target item. <</SYS>>
Please generate a chain of thought based on the user‘s … considering how these might
relate to their interest in the target new item.
{Recommendation Features}
User's decision-making: The user {Ground-Truth Label} the target new item.
Let's think step by step and develop the chain of thought for the above considerations.
Commence with the chain of thought immediately: 

---------------

<<SYS>> 作为一个用于分析消费者行为的AI模型，您的任务是生成一条思维链，考虑以下几点：
1. 利用用户的互动历史和评论总结他们的个人画像。
2. 介绍目标新商品并详细说明其特点。此外，整合与当前目标新商品相关的其他商品信息。
3. 思考用户画像与目标商品特性之间的契合度。
4. 反思用户在购买中可能对多样化的需求。
您的输出应当是一个清晰且逻辑严谨的思维链，确保您的分析公正无偏，重点应放在理解影响用户决策的因素。<</SYS>>
请生成一个思维链，基于用户的……考虑这些因素可能如何影响他们对目标新商品的决策。
{Recommendation Features}
用户的决策：用户 {Ground-Truth Label} 目标新商品。
让我们一步一步地开发上述考虑因素的思维链。
立即开始思维链：
```

从原始的推荐数据集随机sample出M个$$(x\_i, y\_i)$$，生成对应的$$c\_i$$，可以得到CoT数据集：$$C=\left{\left(\mathbf{x}*m, c\_m, y\_m\right)\right}*{m=1}^M$$

**性能分析**

&#x20;

* 训练：发现相比用全量数据训练，用一半的数据训出来的模型在MMLU上效果更好，在推荐上的效果差不多，所以可以用小数据集来finetune
* 生成：对比[Towards Open-World Recom- mendation with Knowledge Augmentation from Large Language Model](https://arxiv.org/pdf/2306.10933)提出的KAR(用户特征和item特征相对固定，可以提前存生成结果)，LLM-CF应用的场景有很多新用户和新item，但并不需要流式更新

#### 在线部分

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d8133bbb2a947d899cbe0b726082b3471081151f%2Fllm-cf-total.png?alt=media)

**In-context CoT Examples Retrieval**

&#x20;

对于上面的CoT数据集，拿$$x\_i$$对应的文本$$x\_i^t$$作为query，而数据集$$C$$里的$$M$$个examples对应的key是$$\mathcal{K}=\left\[\mathbf{x}\_1^t, \ldots, \mathbf{x}\_m^t, \ldots, \mathbf{x}\_M^t\right]$$。

先通过BGE embedding([C-Pack: Packed Resources For General Chinese Embeddings](https://arxiv.org/pdf/2309.07597))作为encoder把query $$x\_i^t$$和keys $$\mathcal{K}$$转成向量$$\mathbf{e}\left(\mathbf{x}\_i^t\right), \mathbf{e}(\mathcal{K})=\operatorname{encoder}\left(\mathbf{x}\_i^t\right), \text { encoder }(\mathcal{K})$$

然后通过ANN找出top K个examples $$\mathcal{I}\_i=\left{\mathcal{E}\_1, \ldots, \mathcal{E}\_k, \ldots, \mathcal{E}\_K\right},\ \mathcal{E}\_k=\left(\mathbf{x}\_k, c\_k, y\_k\right)$$

做了2个trick：

* 避免穿越，保证$$\mathcal{I}\_i$$不包括$$x\_i$$未来的steps的交互信息
* 为了让正负例比例对下游任务不造成影响，保证$$\mathcal{I}\_i$$中的正例和负例比例是1:1

**In-context Chain of Thought Module**

&#x20;

ICT模块将$$\mathcal{I}\_i$$当成in-context examples，并把$$x\_i$$当成query，对应的ICT tokens就是

$$
\mathbf{T}=\left\[\mathbf{x}\_1, c\_1, y\_1, \ldots, \mathbf{x}\_K, c\_K, y\_K, \mathbf{x}\_i\right]
$$

然后得到这些token对应的embs：

$$
\mathbf{E}=\left\[\mathbf{r}\_1, \mathbf{c}\_1, \mathbf{l}\_1, \ldots, \mathbf{r}\_K, \mathbf{c}\_K, \mathbf{l}\_K, \mathbf{r}\_i\right]
$$

其中，（图中右上角橙色部分）

* 文本特征同样经过BGE encoder，
* $$x\_i$$里的推荐特征则经过推荐模型的feature encoder得到$$r\_i$$，
* CoT reasoning $$c$$则是通过text encoder和MLP映射
* label $$l$$也是一个0/1的id对应的embedding

然后把$$\mathbf{E}$$经过若干层transformer decoder，得到输出的表示:

$$
\left.\mathbf{H}=\left\[\mathbf{h}\left(\mathbf{r}\_1\right), \mathbf{h}\left(\mathbf{c}\_1\right), \mathbf{h}\left(\mathbf{l}\_1\right), \cdots, \mathbf{h}\left(\mathbf{r}\_i\right)\right)\right]=\operatorname{Decoder}(\mathbf{E})
$$

最终得到的表示可以是这个输出的last hidden state：$$\mathbf{w}=\mathbf{h}\left(\mathbf{r}\_i\right)$$

在各数据集上评估时，发现CoT examples的个数K=4效果就不错了，对应的ICT tokens $$T$$的长度也只有12左右。

**Model Training**

&#x20;

原来推荐的loss是$$\mathcal{L}\_o^i$$，这里加上一个对CoT examples的emb的重建loss：

$$
\mathcal{L}*r^i=\frac{1}{K} \sum*{i=1}^K\left(1-\frac{\mathbf{c}\_i \cdot \mathbf{h}\left(\mathbf{r}\_i\right)}{\left|\mathbf{c}\_i\right|\left|\mathbf{h}\left(\mathbf{r}\_i\right)\right|}\right)
$$

最终的loss如下

$$
\mathcal{L}=\frac{1}{N} \sum\_{i=1}^N\left(\alpha \mathcal{L}\_r^i+\mathcal{L}\_o^i\right)
$$

**Efficiency Analysis of Online Service**

&#x20;

图中的蓝色火焰部分需要在线计算，而因为$$K=4$$，所以很轻量

### 丰田的SimUSER

[SimUSER: Simulating User Behavior with Large Language Models for Recommender System Evaluation](https://arxiv.org/pdf/2504.12722)

两阶段方法：

* 自一致的用户画像匹配，利用LLM从历史数据中抽取个性特征；
* 推荐系统评估，模拟具有个性、记忆、感知和决策模块的用户与推荐系统进行互动。

### 腾讯的ECR Recsys24

[RecSys'24最佳长论文|腾讯ECR:富有情感的对话式推荐系统](https://mp.weixin.qq.com/s/K9LUSywox6IeAb4XIhe_qA)

[Towards Empathetic Conversational Recommender Systems](https://arxiv.org/pdf/2409.10527)

### OPPO的DLLM2REC（没落地）

在蚂蚁的SLIM的基础上，希望将LLAMA进一步压缩至更小的序列模型。在实验中遇到几个挑战：

* 蒸馏过程中教师模型的知识可靠性存疑
* 从语言模型到序列模型的蒸馏跨越了不同的模型类型，带来两个主要问题：
  * 参数差距大，学生模型难以容纳教师模型的知识
  * 语义不一致，因为序列模型与原始语言模型之间存在天然差异

[Distillation Matters: Empowering Sequential Recommenders to Match the Performance of Large Language Models](https://arxiv.org/pdf/2405.00338v1)

![dllm2rec](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-71df1d8568f3c9ff988af74be347fe2d1b61360d%2Fdllm2rec.png?alt=media)

包含两个关键部分：基于Ranking的蒸馏策略(Importance-aware Ranking Distillation)和Embedding对齐(Collaborative Embedding Distillation)

核心在于排名蒸馏，采取了如下三个策略

* 选择LLAMA2作为教师模型，认为其排名靠前的分值更高；
* 考虑LLM生成的描述与目标物品（Target Item）的接近程度，增加其排名；
* 若教师模型（Teacher Model）认为某物品是优质且排名靠前的，学生模型（Student Model）也会给予其更高排名。

通过这些策略，设计了Ranking Loss，用于蒸馏小型序列模型

$$
\mathcal{L}*d=-\sum*{s \in \Gamma} \sum\_{i \in O^T} w\_{s i} \log \sigma\left(\hat{y}\_{s i}\right)
$$

其中，$$O^T$$是teacher返回的topk结果，$$\Gamma$$是训练集的序列数，$$w\_{\mathrm{s} i}=\gamma\_p \cdot w\_{\mathrm{s} i}^p+\gamma\_c \cdot w\_{\mathrm{s} i}^c+\gamma\_o \cdot w\_{\mathrm{s} i}^o$$，包括如下3部分：

* position-aware weight：$$w\_{\mathrm{s} i}^p \propto \exp \left(-r\_i / \beta\right)$$，$$r\_i$$是item $$i$$在teacher返回结果里的排名，$$\beta$$是一个超参
* confidence-aware weight：$$w\_{\mathrm{s} i}^c \propto \exp \left(-d\_{\mathrm{s} i^*} / \beta\right)$$，且$$d\_{\mathbf{s} i^*}=\left|\mathbf{z}*{d*{\mathrm{s}}}-\mathrm{z}*{i^\*}\right|^2$$，$$\mathbf{z}*{d\_{\mathrm{s}}}$$是生成的item描述，$$\mathrm{z}\_{i^\*}$$是ground truth的item描述，分别通过一个llm encoder得到向量
* consistency-aware weight：同时被teacher和student推荐的item更有可能是一个强正例

$$
w\_{\mathrm{s} i}^o= \begin{cases}1, & i \in O^T \cap O^S \ 0, & i \notin O^T \cap O^S\end{cases}
$$

### Spotify的NEO

[A Unified Language Model for Large Scale Search, Recommendation, and Reasoning](https://arxiv.org/pdf/2603.17533)

额外使用了`[SID]`和`[/SID]`

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e004cf4017d3434faff28cbf20dc0792b3e554df%2Fneo.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5290de55371fdd1e3a7e4e03e3cc9a7918c263a5%2Fneo-compare.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2455962fd4c8d2f235c7e506465008b0b786cade%2Fneo-stage.png?alt=media)

## LLM+推荐：输入文本/ID（学术界）

### P5 RecSys22

[Recommendation as Language Processing (RLP):A Unified Pretrain, Personalized Prompt & Predict Paradigm (P5)](https://arxiv.org/pdf/2203.13366.pdf)

### GReaT ICLR23

[Language Models are Realistic Tabular Data Generators](https://arxiv.org/pdf/2210.06280)

ICLR2023，<https://github.com/kathrinse/be_great>

通过自回归的LLM合成（synthesize）逼真的（realistic）表格化（tabular）数据

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ab303edb899b1b46b03a83f8c27fcc01f18fab36%2Fgreat-finetune.png?alt=media)

finetune：

* 把表格转化为逗号分隔的自然语言
* 随机交换几个属性的位置得到训练语料
* 基于交换后的语料进行自回归的finetune

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d8380188e2630325a4e0e889e5951933c448192e%2Fgreat-sample.png?alt=media)

sample：

* 基于如下3种方式产出precondition：
  * 只输入属性名，例如“年龄”
  * 输入name-value pair，例如“年龄=26岁”
  * 输入多个name-value pair：例如“年龄=59岁，教育程度是硕士”
* 然后调用LLM输出其他属性
* 再转化为表格格式

### 微软的RecExplainer

[RecExplainer: Aligning Large Language Models for Explaining Recommendation Models](https://arxiv.org/pdf/2311.10947)

<https://github.com/microsoft/RecAI>

新的一篇

[Avoid Recommending Out-of-Domain Items: Constrained Generative Recommendation with LLMs](https://arxiv.org/pdf/2505.03336)

* RecLM-ret通过检索机制，从域数据集中找到最相关的item
* RecLM-cgen则使用约束生成策略，限制模型仅生成域内的item标题。

### CUP没中

[Recommendations by Concise User Profiles from Review Text](https://arxiv.org/pdf/2311.01314)

把用户的一堆历史评论扔给chatgpt，让它总结出128个token，然后丢给双塔bert，另一个塔是item的描述，freeze bert底层，只tune上层

### LLaMA-E 没中

[LLaMA-E: Empowering E-commerce Authoring with Object-Interleaved Instruction Following](https://arxiv.org/pdf/2308.04913)

<https://huggingface.co/DSMI/LLaMA-E#/>

整体流程

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f2bac9559221fb2ada91c6e87b76512e8ab52a7a%2Fllama-e.png?alt=media)

* instruction formulating: 为图中的任务写300个种子指令
  * seller $$<S>$$：商家，包括商品名、风格、品牌等
  * customer $$<C>$$：
    * explicit feature $$\<C\_0>$$：用户的历史交互商品
    * implicit feature $$\<C\_1>$$：根据历史交互推断出来的潜在兴趣
  * platform $$<P>$$：为商家和用户建立链接
    * product correlation $$\<P\_0>$$：不同商品间的差异和联系
    * platform background $$\<P\_1>$$：不同电商平台的背景知识
* instruction expansion: 让gpt作为teacher，对300个种子指令进行扩展，并由领域专家评估后，去重并保证质量，得到120k个指令作为训练集

  * 针对结果是严格预定义好的，只重写instruction

  ```
  [INST] Rewrite the following instruction
   while maintaining semantic consistency:
  [/INST] <seed instructions>
  ```

  * 针对鼓励生成结果有多样性的，

    * 结果生成：用上面重写过的instruction给LLM来获取结果

    ```
    [INST] <expanded instructions> [/INST]
    <seed inputs>
    ```

    * 结果重写：拿生成的结果给LLM生成更多样的表达

    ```
    [INST] Rewrite the following generated
    response to diversify its expression:
    [/INST] <responses>
    ```
* instruction tuning: 对self-attention的q、k、v、o参数进行lora

设计的任务

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6dc2da997490cdfa763ec4228ffd23b6ed919df3%2Fllama-e-tasks.png?alt=media)

示例：

| Task                               | Expanded Instructions                                                                        |
| ---------------------------------- | -------------------------------------------------------------------------------------------- |
| **Ads Generation**                 | Produce an advertisement for the specified product.                                          |
|                                    | Create an advertisement for the specified product.                                           |
|                                    | Produce an advertisement for the product mentioned below.                                    |
|                                    | Generate an ad designated for the following product.                                         |
|                                    | Prepare an advertisement for the product provided below.                                     |
| **Query-enhanced Title Rewriting** | Rephrase the subsequent product title along with the query.                                  |
|                                    | Revise the subsequent product title alongside the query.                                     |
|                                    | Revise the product title below, incorporating the given query.                               |
|                                    | Revise the given product title in combination with the query.                                |
|                                    | Incorporate the following query to rewrite the product title.                                |
| **Product Classification**         | To which category does the subsequent product belong?                                        |
|                                    | Which category of this product belongs?                                                      |
|                                    | Identify the category to which the following product belongs.                                |
|                                    | What category does the listed product belong to?                                             |
|                                    | Identify the category of the listed product.                                                 |
| **Purchase Intent Speculation**    | Which category does the provided query imply the customer is interested in?                  |
|                                    | Based on the following query, which category does it indicate the customer is interested in? |
|                                    | What category is suggested by the following customer query’s apparent interest?              |
|                                    | What category does the given query indicate the customer’s interest in?                      |
|                                    | Identify the category that the following query suggests the customer is interested in.       |
| **General E-commerce Q\&A**        | How are my orders attributed to Offsite Ads?                                                 |
|                                    | Describe the process of attributing my orders to Offsite Ads.                                |
|                                    | Can you explain how my orders are attributed to Offsite Ads?                                 |
|                                    | Please elaborate on the process of attributing my orders to Offsite Ads.                     |
|                                    | How are my orders linked to Offsite Ads?                                                     |

对应的中文：

| 任务            | 扩展说明                    |
| ------------- | ----------------------- |
| **广告生成**      | 为指定的产品制作一则广告。           |
|               | 为指定的产品创建一则广告。           |
|               | 为以下提到的产品制作一则广告。         |
|               | 为以下产品生成一则广告。            |
|               | 为提供的产品准备一则广告。           |
| **查询增强的标题重写** | 根据查询改写后续的产品标题。          |
|               | 根据查询修改后续的产品标题。          |
|               | 根据提供的查询修改以下的产品标题。       |
|               | 将给定的查询与产品标题结合进行修改。      |
|               | 使用以下查询重写产品标题。           |
| **产品分类**      | 以下产品属于哪个类别？             |
|               | 这个产品属于哪个类别？             |
|               | 确定以下产品属于哪个类别。           |
|               | 列出的产品属于哪个类别？            |
|               | 确定列出产品的类别。              |
| **购买意图推测**    | 提供的查询暗示用户感兴趣的类别是哪个？     |
|               | 根据以下查询，用户可能感兴趣的类别是什么？   |
|               | 以下用户查询暗示的兴趣类别是什么？       |
|               | 给定的查询表明用户感兴趣的类别是什么？     |
|               | 确定以下查询暗示用户感兴趣的类别。       |
| **通用电商问答**    | 我的订单是如何归因到站外广告的？        |
|               | 描述我的订单归因到站外广告的过程。       |
|               | 你能解释一下我的订单是如何归因到站外广告的吗？ |
|               | 请详细说明我的订单归因到站外广告的过程。    |
|               | 我的订单是如何与站外广告关联的？        |

### EcomGPT AAAI24

[EcomGPT: Instruction-tuning Large Language Model with Chain-of-Task Tasks for E-commerce](https://arxiv.org/pdf/2308.06966v1)

清华，AAAI 24

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ac0af795466e52f093ef54a42d019a85506f84a0%2Fecomgpt.png?alt=media)

设置一系列的task(100多个task)来finetune BLOOMZ(OPT+BLOOM的instruction-following模型)

* 命名实体识别：输入描述，输出brand、attr、component、product等
* 描述生成：输入query和候选doc list，选出最match的k个
* 对话intent提取：输入对话和候选intents（使用咨询、恢复订单、退款异常等），选出对应intent

### SAGCN ACM TOIS

[Understanding Before Recommendation: Semantic Aspect-Aware Review Exploitation via Large Language Models](https://arxiv.org/pdf/2312.16275)

<https://github.com/HuilinChenJN/LLMSAGCN>

通过LLM标识出用户对item的评论是属于哪些aspect的，然后u有A个emb，i也有A个emb，构建A个U-I图，然后揉在一起过GCN

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-cc177fe557f92e6e8c1be8705b7cd892f56e6a20%2Fsagcn.png?alt=media)

* 拿一些数据先用prompt1让LLM粗略标出用户评论所属的aspects，然后merge并去重得到候选的aspects列表
* 把这个候选aspects列表（图中的蓝色文字）丢给prompt2，让LLM对所有用户的评论打标

然后为每个aspect构建一个graph，过GCN

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6ae1586e6086fc63dfa84bdf083e64d92b63eef3%2Fsagcn-graph.png?alt=media)

### ONCE WSDM24

[ONCE: Boosting Content-based Recommendation with Both Open- and Closed-source Large Language Models](https://arxiv.org/pdf/2305.06566)

WSDM24

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-29b2731cb3cd7071187d5347887a6a2c255b49ca%2Fonce.png?alt=media)

* GENRE(generative recommendation)：闭源LLM产出数据
  * user profiler: 输入用户行为历史得到的user profile，例如topics有哪些，地区是哪里，过完content encoder后，把对应的topics和地区的emb pooling一下，得到用户的profile表示
  * content summarizer: 输入item的文本content得到的总结
  * personalized content generator：输入新用户（readlist<5）比较短的历史，合成这个用户可能比较感兴趣的内容
* DIRE(discriminative recommendation)：对开源LLM进行改造
  * 最后一层降维，并过一个attention得到一个表示
  * 对32层的llama-7b，只用lora训练最上面的2层
* ONCE：
  * GENRE产出的文本经过DIRE得到输出，其中user profiler用上面的方法处理一下，再和历史items的content summarizer的输出、personalized content generator的输出concat并过mlp得到user vec
  * item content的文本经过DIRE得到item vec
  * u和i算内积，学ctr

其中GENRE的3种数据如下：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1ebad1758597eed61b4c6e0d936f658fc22b36cf%2Fonce-genre.png?alt=media)

### Agent4Rec SIGIR24

[On Generative Agents in Recommendation](https://arxiv.org/pdf/2310.10108.pdf) SIGIR24

<https://github.com/LehengTHU/Agent4Rec>

核心代码是<https://github.com/LehengTHU/Agent4Rec/blob/master/simulation/avatar.py>，可以发现是用了langchain，包括其中的memory(请求openai的emb接口，本地faiss存)。

1000个真实用户，初始化1000个agent，3个数据集，搞了3000个agent，Agent模拟人的行为，点击、翻页、退出、打分、评价，评价标准：是否真的拟人

整体流程：

* 先在公开数据集上训一个推荐模型（mf/lightgcn等）
* 构建1000个agent，模拟和这个推荐模型交互，生成一些新的样本（假设推荐了xxx，你是不是会点？点了，正样本，没点负样本之类的）
* 加上这些新的样本再去重训推荐模型，发现效果有提升

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4c15e7643ddc0bed3dbb70687220836d2314d037%2Fagent4rec.png?alt=media)

3个module：

* Profile module:
  * 电影profile（流行度等+电影信息丢给gpt4产出的summary）
  * 用户profile（社交属性、活跃度、从众心理（conformity）、diversity(更喜欢探索还是利用)、用户喜好tastes（用户历史行为丢给gpt4，让它总结用户喜欢什么不喜欢什么，会在用户有新行为后再update一下））
* memory module:
  * factual memory: 过去看了哪些电影、动作是什么
    * emotional memory: 看完后的情绪表达
* action module:
  * 看/打分/反馈
  * 满意度
  * 翻页/退出

图中的推荐系统是一个现成的系统/算法，例如MF、lightgcn等

word版的笔记：<https://github.com/daiwk/collections/blob/master/assets/multi-agents.docx>

### RecPrompt CIKM24

[RecPrompt: A Self-tuning Prompting Framework for News Recommendation Using Large Language Models](https://arxiv.org/pdf/2312.10463) CIKM24

<https://github.com/Ruixinhua/rec-prompt>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8e916835211afc9dcceb2678d05cf5ea98241603%2Frecprompt.png?alt=media)

如图的loop，所有LLM都是调接口的，没有tune

* news recommender：一个LLM，输入prompt如下，结果包括排序的list $$\boldsymbol{R}\_u$$以及解释$$TP\_u$$(用户点击历史总结出来的topic list和对应的新闻list)

```
You serve as a personalized news recommendation system.
+ Input Format
  + User's History News
${history}
  + Candidate News
${candidate}
+ Output Format
Rank candidate news based on the user’s history news in
the format: "Ranked news: <START>C#, C#,..., C#<END>".
```

* prompt optimizer：另一个LLM，用于生成更好的prompt。包括：
  * refinement instruction
  * 推荐prompt
  * recommender的回答：$$\boldsymbol{R}\_u$$、$$T P\_u$$
  * ground truth $$y\_u$$，
  * monitor给出的最佳template
  * observation instruction。

其中，refinement instruction形如：

```
You should generate an improved
template instruction based on the provided information.
```

observation instruction形如：

```
You should focus on how well the recommender’s response
aligns with the user’s click behavior by examining if
the topics from the user’s news history and candidate
news are accurately summarized and matched to the user’s
interests. Specifically, evaluate the clarity of topics
in the recommender’s answer, review the task description
for adequacy, and check the detail in the recommendation
process to ensure it reflects an analysis and summary
of user-interest topics.
```

* monitor：对推荐list和ground truth计算MRR、ndcg，判断当前template是否比之前的有提升
* 衡量效果：看解释$$TP\_u$$提取的topic的准确性和完整性：
  * 准确性：分母是预测出来的n个topic，分子是有多少个和对应的文章topic是match的
  * 完整性：分母是用户历史点过的topic数，分子是用户历史点过的文章数

### PO4ISR 没中

[Large Language Models for Intent-Driven Session Recommendations](https://arxiv.org/pdf/2312.07552)

<https://github.com/llm4sr/PO4ISR>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-99599786a059d6f5d38758bdc9f3c04e26da6a6b%2Fpo4isr.png?alt=media)

* PromptInit：初始化prompt1，输入的数据填充prompt2
* PromptOpt：通过self-reflection来优化初始prompt：
  * 收集error cases并用prompt3来让LLM想出可能原因
  * LLM想出的原因+prompt4来refine出一个prompt5
  * 基于prompt5+prompt6来改写/增强出一个prompt7
  * 基于prompt5和prompt7通过UCB选出一个最优的prompt8
* PromptSel：在3个domain上进行上述迭代，分别得到对应domain的最优prompt，也看了下这3个prompt在其他数据集上的表现，最终选出一个泛化性比较好的

### Transrec KDD24

[Bridging Items and Language: A Transition Paradigm for Large Language Model-Based Recommendation](https://arxiv.org/pdf/2310.06491) KDD24

核心思想如下：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-313e7673b32bc8dae1c8d4c0ed1a5fb417bde011%2Ftrans-rec-instruct-tuning.png?alt=media)

将一个item表示成3部分：id+title+attr，设计三种对应的instruct-tuning任务，其中`||xx||+`是一个特殊标记，类似于标识任务类型，对应的[代码](https://github.com/Linxyhaha/TransRec/blob/main/scripts/training/reconstruct.py)：

```python
if args.target == "id":
    source = "Given the following purchase history of a user: " 
        + "; ".join(titles) + ". "
    source += "What is the next possible item to be purchased by the user?"
    source += " || ID"

elif args.target == "attribute":
    source = "Given the following categories of purchase history of a user: "
         + "; ".join(titles) + ". "
    source += "What is the category of the next possible item to be purchased by the user?"
    source += " || attribute"


if "\n" in source:
    source = "".join(source.split('\n'))
if args.query_mode == "attribute":
    targets = ["".join(t.split('\n')) for t in target]
if "\n" in target:
    target = "".join(target.split('\n'))
    
if args.target == "id":
    target = "|| " + target.strip() + " ##"
    yield source + " || +", target
    
if args.target == "attribute":
    for target in targets:
        target = "## " + target.strip() + " @@" 
        yield source + " || +", target
```

然后是generation grounding，即引入一个特殊的数据结构（FM-index），并进行constrained beam search，让模型能生成候选集中的id/title/attr，然后再遍历全库候选，看不同facet的相似度（会考虑高热打压），加权融合出一个排序

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-fdee5726f5cf4a5bf26e5d2f380b35e14e6f3c64%2Ftransrec-generation-grounding.png?alt=media)

* FM-index：参考[Autoregressive Search Engines: Generating Substrings as Document Identifiers](https://arxiv.org/pdf/2204.10628)：例如一个item可以写成`<IDS> 1023 <IDE> Urban Decay Eyeshadow Palette Naked Heat <AS> Makeup <AE> <AS> Eyes <AE>`，并通过wavelet tree存储，给定开始token（如`<IDS>`或者`<AS>`），可以在$$O(Vlog(V))$$里找出所有可能的后续tokens。代码：<https://github.com/facebookresearch/SEAL>
* constrained beam search：参考[Autoregressive entity retrieval](https://arxiv.org/pdf/2010.00904)：代码：<https://github.com/facebookresearch/GENRE>，另外，可以发现title是没有bos和eos的，这样在检索/生成title的时候，是可以检索/生成子串的，也就是论文提到的position-free，同样的方法也可以用在instruct tuning阶段。

### E4SRec 没中

[E4SRec: An Elegant Effective Efficient Extensible Solution of Large Language Models for Sequential Recommendation](https://arxiv.org/pdf/2312.02443)

代码：<https://github.com/HestiaSky/E4SRec/>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-aaf732e9b712d5cf7532a45b7c52371458bc7ef3%2Fe4srec.png?alt=media)

* 把id引进来：先通过现有的推荐模型（如SASRec）得到id embed，然后通过一个linear得到和原始LLM的emb一样长的dim，再嵌入到llm里去，只有这个linear是可学习的
* LLM的输出：看代码取的是最后一个词的hidden state，再过Linear映射回推荐模型的dim，再过一个softmax映射到id空间（当然，如果要用到工业界可以正常的召回采样方法，如sampled softmax之类的）
* infer：和召回一样，ann

finetune部分代码的大概逻辑如下：

* 输入：把预训练好的item id emb当成一个nn.Embedding搞到模型里去，然后样本里的item id（每个id都是1-n的数）去查出对应的emb，和instruct的emb、response的emb(`### Response：\n`这种文字对应的emb)这3个emb一起concat起来作为模型输入
* label：假设有n个item，因为最后过了个softmax映射到n，所以label就是一个1-n之间的数

infer照理说应该是得到emb，然后去ann，但代码里偷懒了直接拿softmax后的1-n的结果

### Llama4Rec SIGIR24

[Integrating Large Language Models into Recommendation via Mutual Augmentation and Adaptive Aggregation](https://arxiv.org/pdf/2401.13870) SIGIR 24

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a26d31a2a03e895a3aca210c7cf132c8795f780a%2Fllama4rec.png?alt=media)

* prompt增强：在prompt里引入推荐模型的信息
  * 相似用户也喜欢item4、item5
  * 另一个推荐模型给出的预估是xxx
* 数据增强：通过LLM给推荐模型增加样本
  * 直接推荐：给定2个候选item，LLM判断哪个更好
  * 序列推荐：给定候选list，LLM给出topk
  * 评分预测：给定候选item，LLM给出打分
* adaptive aggregation：llm和推荐模型都给出排序，然后自定义融合公式算出融合分，得到最终排序

示例prompt如下

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-36ba2af3711593eab499e9b5ab1cf7100efe1cc3%2Fllama4rec-prompts.png?alt=media)

通过如上prompt构建一个instruct-tuning数据集，然后finetune一个llama2

### MACRec SIGIR24

把推荐系统拆成多个agent

[MACRec: a Multi-Agent Collaboration Framework for Recommendation](https://arxiv.org/pdf/2402.15235)

### GPLR SIGIR25

[You Are What You Bought: Generating Customer Personas for E-commerce Applications](https://arxiv.org/abs/2504.17304)

<https://github.com/Hanc1999/YouAreWhatYouBought>

[NUS-LLM小样本学习助力用户画像建模](https://www.xiaohongshu.com/explore/683b343f0000000022006648?app_platform=ios\&app_version=8.87\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBjpcluHYwI6-nyp1gVu04fpW4voj7bMwSu2oY88K0f-c=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1750064425\&share_id=c4b8d3de4af6496692a900106b0640f1)

只对5%-20%的用户用LLM标注，再结合随机游走算法推断全量用户角色，大幅降低标注成本（如1,000万用户年成本由240万降至50万美元）。

* 用户画像的定义与生成:
  * 多维度可解释表示: 自然语言角色标签，如Bargain Hunters, Health Enthusiasts, Tech Savvy, and Busy Parents。
  * LLM驱动的角色生成:
    * 原型用户标注：利用LLM分析部分原型用户的购买历史，自动生成如“健康生活倡导者”等标签。
    * Prompt工程：通过多阶段提示优化(初步生成、去重筛选和用户反馈校验)，最终形成平台专属的角色标签集。
* 小样本LLM标注DUSample(Diversity-Uncertainty，多样性-不确定性):
  * 从用户中筛选**稀有角色**用户和**高不确定性**用户(如购买行为难以归类的用户), 确保LLM标注的标签具有多样性，避免主流角色主导。
  * 通过KL散度和熵计算用户的DU Score，优先标注多样得分高的用户，提升标签覆盖范围。
* 随机游走传播: 用户-商品二分图建模，角色亲和力矩阵:
  * 通过随机游走概率矩阵计算用户间的行为相似性，结合原型用户的角色标签矩阵，得到所有用户与角色的亲和力;
  * 假设相似购买行为的用户具有相同角色, 通过加权聚合原型用户的标签推断未标注用户的角色。
* 反向近似算法RevAff：
  * 反向传播：从原型用户出发，反向计算其他用户的角色亲和力，避免全图矩阵运算。
  * 误差控制：通过设定绝对误差阈值，仅保留影响大于阈值的传播路径
* 用户画像与推荐模型集成：将角色表示作为输入特征融入GCN

### guided embedding

[Improving LLM Interpretability and Performance via Guided Embedding Refinement for Sequential Recommendation](https://arxiv.org/pdf/2504.11658)

guided embedding：prompt里包含m个aspect，让模型给出每个aspect的打分

* guided item emb：当前item在每个espect的打分，一个m维向量…
* guided user emb：当前user看过了一些东西，给出这个user在各aspect的打分，也是一个m维向量

2阶段训练

* finetune出guided emb：guided item emb不更新，lora去训练llm以及上层的recommend module(可以通过prompt来设计，例如预测u会不会点item、u对i的打分等)，loss会加一个format的约束，即mask掉预测的得分，只看是否按规定格式输出）
* 嵌入现有推荐模型：左边是原来模型的emb模块，产出的u和i的emb，分别和guided u和i的emb做加权拼接，得到refined u和i的emb，再输入后面的模块

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1854b3ea480c69be440b66d08ef8a4fedcb6e21c%2Fguided-emb.png?alt=media)

一些相关prompt：

* aspect示例：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b3ffea033916741c040a96c30408b0c504f82c36%2Fguided-emb-aspect.png?alt=media)

* item prompt：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f4811018732a7ac4e4cae75d8ca5f3def1c531b0%2Fguided-emb-item-prompt.png?alt=media)

* user prompt：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-11fc6151d477b6ed8dfcb274eb8ab1872a81ccf7%2Fguided-emb-user-prompt.png?alt=media)

* user review示例：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c32d55fa3fe0122b3f3ecb13abab1f9093fb004c%2Fguided-emb-user-review.png?alt=media)

* item示例：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-02022617dbabc1f462ec37cdf1bc952feb0a9590%2Fguided-emb-item-example.png?alt=media)

### GMC

[Generative Multi-Target Cross-Domain Recommendation](https://arxiv.org/abs/2507.12871)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-98716a700fb9c52b149a48c7703d6e0197c1c29c%2Fgmc.png?alt=media)

* sid的学习：通过llama3.1-8b-instruct产出4096的emb，然后学一个rq-vae的sid，主要加了一个domain-aware的对比学习（2个item相同domain则拉近距离，反之拉远），所以loss=loss\_reconstruct+loss\_rq+loss\_domain
* 推荐模型的学习：一个正常的transformer-based模型(本文用的T5-small)，预测下一个sid
* domain-specific的微调：每个domain加一个小矩阵，该domain的数据只用lora训对应的那个小矩阵

### MiniOneRec

[首个完整开源的生成式推荐框架MiniOneRec，轻量复现工业级OneRec！](https://mp.weixin.qq.com/s/lnoLU1fsubtzpefVcTniCA)

[MiniOneRec: An Open-Source Framework for Scaling Generative Recommendation](https://arxiv.org/abs/2510.24431)

<https://github.com/AkaliKong/MiniOneRec>

<https://huggingface.co/kkknight/MiniOneRec>

### LLM-as-a-Judge

[LLM-as-a-Judge:Toward World Models for Slate Recommendation Systems](https://arxiv.org/pdf/2511.04541)

* 拿LLM来建立一个偏好世界模型，让LLM同时看到不同推荐list，并观察哪一组更符合人类逻辑(通过一些规则设计的，比如随机搞一个list，而用户对这些有过打分/时长之类的后验，定义比如list1里的总打分是5，list2的总得分是3，那list1>list2)。
* 每次判断，模型都会给出理由：例如内容更丰富、和历史兴趣匹配程度等
* 用多个模型投票

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7939e50636f5541606ef2b10a4d7a85a0613ba7c%2Fllm-judge-rec.png?alt=media)

### GREAM

[Generative Reasoning Recommendation via LLMs](https://arxiv.org/pdf/2510.20815)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-96fd97a9becb68fb0241a120ec27cbfc0469d84d%2Fgream.png?alt=media)

对比onerec-think，参考[xhs](https://www.xiaohongshu.com/explore/69116fe80000000005011644?app_platform=ios\&app_version=9.7.3\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBM_Q-ZzmwypmP1eWhgOOwRmru7T5Vv5IrRP1tSa1gWug=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1762754205\&share_id=1e0e74e1908d4fcb929862735e6a9e3f)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d5741319eb5552862d457daa21259a59ebcb5756%2Fgream-onerecthink.jpg?alt=media)

### PersonaX

[PersonaX: A Recommendation Agent-Oriented User Modeling Framework for Long Behavior Sequence](https://arxiv.org/pdf/2503.02398v1)

## LLM+推荐：Foundation/蒸馏/其他

### Google的多智能体推荐系统综述

[Multi-Agent Video Recommenders: Evolution, Patterns, and Open Challenges](https://arxiv.org/pdf/2604.02211v1)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c3e566db2d73c587b689a1f87e3a56dd455a7124%2Fmavrs.png?alt=media)

* 分层编排：一个中心协调智能体，负责指导各专业化从属智能体的动作并整合它们的输出，以实现统一目标。代表工作[MMRF](https://arxiv.org/pdf/2405.01847)、[MMAgentRec](https://pubmed.ncbi.nlm.nih.gov/40199968/)
* 基于流水线的模块化协作：智能体按顺序运行，形成一个处理流水线，每个智能体执行一个独特且专门化的任务。前一个智能体的输出直接作为下一个智能体的输入，构建出一种模块化工作流，将复杂问题分解为可管理的阶段。代表工作[VRAgent-R1](https://arxiv.org/pdf/2507.02626)、[MACRec](https://arxiv.org/pdf/2402.15235)
* 用户-agent协作：多个智能体内部协作，以驱动单一的、面向用户的对话式接口（位于更广泛的推荐界面之中），其主要目标并非提供推荐，而是赋予最终用户对其推荐内容流的直接、直观控制权，从而增强其“自主感”。代表工作[TKGPT](https://dl.acm.org/doi/epdf/10.1145/3719160.3736628)
* 用户仿真智能体集成：将智能体用作用户群体的模拟，而非核心推荐组件。其目标是生成高保真度的合成交互数据，可用于离线评估系统性能、训练其他模型，或研究复杂用户行为现象，而无需承担真实 A/B 测试的成本与风险。代表工作[Agent4Rec](https://arxiv.org/pdf/2310.10108.pdf)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d66fb9c2123ebb6c1a791926a728a1f956b7af76%2Fmavrs-eval.png?alt=media)

评估方式不只是之前的hitrate、ndcg了，还要考虑更多东西，共如下5个维度

* 任务特定质量：感知智能体、推理智能体、专业化推荐器有各自的指标
* 协调与协作效率：通信改期、延迟、贡献对齐（辅助智能体的建议最终是不是提升了主智能体的效果）
* 系统级与涌现鹅：鲁棒性&容差、适应性、涌现行为准确率
* 人类对齐与用户中心度量：可控性与自主性、可解释性、可信度、公平性
* 可扩展性与下次i呀可行性：token成本、端到端延迟、训练资源等

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8bc9b7e834f24d41eb7f01c3065c6b527ab3b639%2Fmavrs-future.png?alt=media)

挑战：

* 计算成本与可扩展性
* 多模态定位与推理
* 评估
* 可控性与可信性
* 激励一致性

未来方向：

* 混合RL-LLM架构
* 终身个性化与智能体记忆
* 人机协同验证
* 面向自我改进的推荐系统

MACF这个可以看眼：[Multi-Agent Collaborative Filtering: Orchestrating Users and Items for Agentic Recommendations](https://arxiv.org/abs/2511.18413)

### Google的zero-shot cross-domain KD

[Zero-shot Cross-domain Knowledge Distillation: A Case study on YouTube Music](https://arxiv.org/pdf/2603.28994)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-243aa63b1d6b8335546d7356299b54a32fcee95b%2Fzeroshot-crossdomain-kd.png?alt=media)

teacher：视频推荐模型，对音乐样本产出soft label

2个student：2个场景的音乐推荐模型，样本量是teacher的1/150到1/300之间

* Homepage model：ctr和时长这2个head会去蒸馏teacher的打分，而发现性这个head就不去学teacher了，因为teacher没有相似的task
* Radio model：推荐的是sequencing music videos，和teacher没有任何一个任务相似。增加一个不serving的head，只学teacher的continue watching任务，表示看完这个视频会不会看下一个

### Meta的ExFM

[GPT4规模大模型落地，Meta提ExFM框架：万亿参数基础大模型的工业级落地成为可能](https://mp.weixin.qq.com/s/Y9rlMxg4EMl_bzi9N_s7GA)

[External Large Foundation Model: How to Efficiently Serve Trillions of Parameters for Online Ads Recommendation](https://arxiv.org/abs/2502.17494)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0f5d96c59dbd578433005e39afa8db210a690614%2Fexfm.png?alt=media)

图中的$$\Theta^F(t)$$是FM(teacher，foudation model)在$$t$$时刻的参数，$$D^F(t)$$是FM在$$t$$时刻的数据集，V是VM（student, vertical model）的对应参数/数据集

* co-distillation vs external distillation：
  * co-distillation：联合训练teacher和student，只拿student去serving。
    * 缺点：训练成本很高，而且线上链路有多阶段的ranking，为每个ranking模型保留一个大的teacher是低效的
  * external distillation：单独训练teacher模型，是1-to-N的模式，一个teacher可以像foudation model一样指导多个student
* 流式训练：t时刻的数据训出对应的模型，t+1加载t时刻的数据训练出t+1时刻的模型
* ExFM：
  * t-1的各VM数据聚合成t-1的FM数据，训练得到t-2的FM模型
  * t的各VM数据聚合成的t的FM数据，训练得到t-1的FM模型
  * DAS, data augmentation service：FM对每个VM数据进行预估，再加上对应的VM数据，产出VM的训练数据
  * Auxiliary Head和Student Adapter：使用DAS产出的数据，基于t-1的VM模型利用AH和SA训练得到t的VM模型

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-487892547fe3ca5e2ca5a986f87d86807a0ec1fc%2Fdas.png?alt=media)

* 数据集生产：
  * 将所有VM的特征和真实label聚合成一个shared dataset，
  * 有很长的时间窗口等待feadback(例如ctr有5-90min，cvr有一天)，在这个窗口中，FM可以使用VM的特征给出预估结果
  * 然后从这个shared dataset中取出各VM对应的子数据集用于训练
* FM ckpt的维护和更新：
  * FM有新的ckpt时，会通过SPD（一个db）发布
  * updater从SPD读到最新的ckpt版本，再写到zeus（一个基于zookeeper的分布式metadata存储）里去
  * DAS任务从zeus读取最新模型

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-81645289da71ff307c70afce8c162048ba14a19c%2Fauxiliary-head.png?alt=media)

真实label是$$y$$，FM预估出来的label(pseudo-label)是$$\hat{y}^F$$，student包括两部分，backbone $$\mathbf{x}$$和serving head $$\hat{y}^S=\phi(\mathbf{x})$$，其中$$\phi$$是MLP，loss是交叉熵：

$$
h(\hat{y}, y)=y \cdot \log (\sigma(\hat{y}))+(1-y) \cdot \log (1-\sigma(\hat{y}))
$$

VM的loss是：

$$
\mathcal{L}\_{\mathrm{kd}}\left(\hat{y}^S, \hat{y}^F, y\right)=h\left(\hat{y}^S, y\right)+h\left(\hat{y}^S, \hat{y}^F\right)
$$

但用一个head来预估2个label会引入bias，所以引入AH(Auxiliary Head)来预估pseudo-label，即$$\hat{y}^D=\psi(\mathbf{x})$$，其中$$\psi$$是另一个MLP，这样就可以拆成2部分：

* 真实label的loss：$$\mathcal{L}\_{\mathrm{s}}\left(\hat{y}^S, y\right)=h\left(\hat{y}^S, y\right)$$
* pseudo-label的loss：$$\mathcal{L}\_{\mathrm{d}}\left(\hat{y}^D, \hat{y}^F\right)=h\left(\hat{y}^D, \hat{y}^F\right)$$

引入以下3个方法强化FM的蒸馏效果：

* gradient scaling(gs)：AH对backbone的梯度乘一个$$\beta$$
* label scaling(ls)：下式中的$$\alpha$$，同时要保证scale完的label不越界，即$$\alpha \cdot \hat{y}^{F M}$$不超过1
* loss weighting(lw)：下式中的$$w$$

$$
\mathcal{L}*{\mathrm{ah}}=\mathcal{L}*{\mathrm{s}}\left(\hat{y}^S, y\right)+w \* \mathcal{L}\_{\mathrm{d}}\left(\hat{y}^D, \alpha \cdot \hat{y}^F\right)
$$

进一步地，在$$\hat{y}^F$$的基础上再过个MLP，得到SA（student adapter）$$\hat{y}^{S A}=\operatorname{MLP}\left(\hat{y}^F\right)$$，相应地，加上一个SA与真实label的loss：$$\mathcal{L}\_{\text {sta }}\left(\hat{y}^{S A}, y\right)=h\left(\hat{y}^{S A}, y\right)$$

然后，为了不让VM的梯度回传给SA，需要加一个stop-gradient，即$$\mathcal{L}\_{\mathrm{sa}}\left(\hat{y}^D, \mathrm{SG}\left(\hat{y}^{S A}\right)\right)=h\left(\hat{y}^D, \mathrm{SG}\left(\hat{y}^{S A}\right)\right)$$

整体过程：

* 优化SA的参数$$\Theta^{S A}$$：用$$\mathcal{L}\_{\text {sta }}\left(\hat{y}^{S A}, y\right)$$
* 计算$$\operatorname{SG}\left(\hat{y}^{S A}\right)$$
* 优化VM的参数$$\Theta^{V}$$：用$$\mathcal{L}*{\mathrm{ah}}+\mathcal{L}*{\mathrm{sa}}$$

按自己的理解重新画了下：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-86c9df45180422c35160a9daba73f8034e5d7606%2Fsa-my-pic.png?alt=media)

### Meta的Foundation-Expert Paradigm

[Realizing Scaling Laws in Recommender Systems: A Foundation–Expert Paradigm for Hyperscale Model Deployment](https://www.arxiv.org/pdf/2508.02929)

### Meta的LLaTTE

[LLaTTE: Scaling Laws for Multi-Stage Sequence Modeling in Large-Scale Ads Recommendation](https://arxiv.org/pdf/2601.20083)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4438235568e0091af57a82a007f3f4b42a372880%2Fllatte.png?alt=media)

* 非序列建模：用DHEN
* 序列建模：
  * transformer用MLA，上游模型的query没有target item的信息，下游模型有
  * 金字塔结构：深层扔掉一些老的token，参考字节tt电商的onetrans：[ OneTrans: Unified Feature Interaction and Sequence Modeling with One Transformer in Industrial Recommender](https://arxiv.org/pdf/2510.26104)
  * readout：把最后一层的query token输出存下来，给下游模型用

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1045e59a9f79a47b130c1405ea83220e0652905b%2Fllatte-query.png?alt=media)

### Meta的MoNN+HILL

[Efficient Retrieval Scaling with Hierarchical Indexing for Large Scale Recommendation](https://arxiv.org/pdf/2604.12965)

前序工作：[Hierarchical Structured Neural Network: Efficient Retrieval Scaling for Large Scale Recommendation](https://arxiv.org/pdf/2408.06653)，可以看一下，对下面的一些东西能有更深理解

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-66b4efff87f8f436f81cad67f4699b336075257a%2Fmonn-hill.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-751843758f7b640807da13866411c116ab8edc01%2Fmonn.png?alt=media)

Modular Neural Network (MoNN)，召回的foundation model，简单理解就是三塔（u、i、cross）+复杂nn（DHEN、deepfm、wukong等），loss包括两部分，一个是学真实后验，一个是蒸馏teacher的soft label(也是用交叉熵)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4b7729e5c32d1ad53577618c5a64dfb2355aacde%2Fi2if.png?alt=media)

其中的cross塔用的是Inverted Index Based Interaction Features（I2IF）：

* 提前建好倒排：key：类目/tag，value：item set，以及mean/sum pooling聚合后的item emb
* U侧：存好用户最近交互的类目list
* 检索：u侧当query，去倒排里检索出来，可以搞出dense特征（检索到的类目emb pooling一下），也可以是sparse特征（match特征）

训练方法如下，简单总结就是，假设总共有K个index

1. 随机找一个u和i的pair对，通过monn得到i的emb,然后拿它和每个index的距离算一个加权和，得到一个伪的item表示，然后拿u和这个伪item去算loss，来更新monn
2. 最后算一个item到index的映射关系，即取离每个item最近的index

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e0916ff67cc80c222336a6c9554d47d1ab9c5ab6%2Fonelayer-attn-learning.png?alt=media)

以上是单层的，假设总结有N层，每层都有K个index，那可以用RQ的思想，上面学到的就是第一层的index，对第二层来讲，用item向量和那个伪向量的差当成这层的item表示；直到第N层，每一层都去跑一下algorithm1，只是换item emb，另外最后一层要把前面的item表示全部加起来，得到的表示还要和原始的item向量算重建loss

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-cf6f8d919cd9632a9abece284460c4663ee462d7%2Fhill.png?alt=media)

如果资源不够，可以搞一个穷人版：拆成E和M两步，

* E-step给每个item分配最近的index，可以直接用faiss或者kmeans
* M-step在当前index embedding固定的情况下，去训练foundation model

然后还可以用这个索引来构造新样本，正常来讲beam search搜到的叶子节点这个路径上的节点，用户都应该感兴趣，但不能全用，设置2个超参：

1. 最多回溯多少层
2. 计算一个得分，即这个中间节点的孩子节点里，有多大比例的是用户感兴趣的，得分比较高的时候才保留

设计的是一个3layer的MoNN，顶层粗粒度的用一个大模型来打分，底层item粒度的用一个小模型。最终上线用的是2层

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b62da584a1741067eedd35e27e0e75c2fdb1eb9c%2F3layer-monn.png?alt=media)

### Meta的SOLARIS

[SOLARIS: Speculative Offloading of Latent-bAsed Representation for Inference Scaling](https://arxiv.org/pdf/2604.12110)

当前蒸馏的问题：

1. 只蒸馏logit，transfer ratio低，大概只有20%\~25%
2. 训练时有蒸馏信号，推理时没有

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1f084ab1dbec0ed7e0bd07729e6dac07a84f1a88%2Fsolaris.png?alt=media)

不只在训练阶段蒸馏，而是在推理阶段也让VM也能用到FM的知识

knowledge sharing

* FM兼容性：取FM里各种特征交互后过了一坨nn的最后一个隐层，叫shared output
* SOLARIS特征抽取：上面那个shared output过一个autoencoder，把压缩后的表示拿出来给下游用
* 推理时的knowledge sharing：上面的产出，和其他特征一起给下游模型用

Asynchronous Precompute：类似Speculative decoding的思想，每一次请求过来，VM打分高于某个阈值时（或者卡前20%）才认为是高价值的u-i pair对，此时的VM相当于是一个verifier模型，只对这些pair对用FM去计算emb，并cache起来，设置一个TTL

Hierarchical Feature Enrichment：原始的覆盖率只有50%左右

* Aggregated user-item Embedding：当前user在过去24小时内所有item取平均，得到u侧表示，能提升覆盖率到85-90%
* Similarity-Based Embedding：u找相似用户，拿相似用户的u-i pair来用，能提升30%覆盖率

效果：有业务收益，且迁移率涨到42%左右

### Meta的长序列特征架构

[Versioned Late Materialization for Ultra-Long Sequence Training in Recommendation Systems at Scale](https://arxiv.org/pdf/2604.24806)

之前的架构，全量序列特征dump到UIH Store，然后去训练和infer。当序列非常长的时候，肯定不太行。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-241deab263a6fdc3346967468a3f24ecb0cd68de%2Fpre-materialization.png?alt=media)

新的架构，序列特征拆成2部分，immutable(不可变)的长期行为，mutable的短期行为，

在线落训练样本时只落短期行为，以及长期行为的version metadata；训练数据预处理时根据metadata自动查immutable store，再和短期行为join。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-41af56677de700335408bd71864fbff928a684fb%2Fversioned-late-materialization.png?alt=media)

目前已经成了foundation infra，包括HSTU和ULTRA-HSTU都在用

### Meta的IEFF

[Intelligent Elastic Feature Fading: Enabling Model Retrain-Free Feature Efficiency Rollouts at Scale](https://arxiv.org/pdf/2605.00324)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a15c4bb32509b9e814f05f4148371dd7fad54521%2Fieff.png?alt=media)

特征相关的一个基建

* Serving-time Feature Adapter：位于特征生成之后、模型推理之前。对于需要渐变的特征，会根据一个全局的渐变策略动态调整特征的覆盖率或分布。例如，要下线一个特征，可以每天将其覆盖率降低1%，而不是一次性降到0。
* Centralized Control Plane：负责管理所有特征的渐变策略，包括渐变的起止时间、速率、目标值等，工程师写配置就行。
* 经过adapter调整后的特征值，不仅会用于在线的模型推理，也会被记录下来用于后续的模型持续训练。
* 安全与治理机制：
  * 预发布验证：在正式发布前，通过小流量A/B测试（QRT）验证渐变策略的安全性，确定合适的渐变速率。
  * 监控与自动回滚：持续监控核心指标（如模型 NE、业务指标），一旦超出安全阈值，可自动暂停或回滚渐变。
  * 可逆性：所有渐变策略都可以随时暂停或反向执行，实现快速回滚，且整个过程同样无需重训。

### Meta的Memento

[Memento: Personalized RAG-Style Long-Retention Data Scaling for Online Ads Recommendation](https://arxiv.org/pdf/2605.24051)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-57e753569e7967669ee1dbed080ec2d07ed49d18%2Fmemento.png?alt=media)

* RAG阶段：用user emb+ad emb+context特征作为query Q，去用户历史的doc倒排/向量索引里找出一些D出来，然后按MMR排序（sim uu指q里的u部分，和d算相似度，sim ua指q里的ad部分，和d算相似度）

$$
\begin{aligned}
\mathrm{MMR}= & \underset{D\_i \in R \backslash S}{\arg \max }\left\[\alpha \cdot \operatorname{Sim}*{U U}\left(D\_i, Q\right)\right. \\
& +\beta \cdot \operatorname{Sim}*{U A}\left(D\_i, Q\right) \\
& \left.-(1-\alpha-\beta) \cdot \max *{D\_j \in S} \operatorname{Sim}*{U U}\left(D\_i, D\_j\right)\right]
\end{aligned}
$$

* 应用1：representation memento
  * 召回：用[Scaling User Modeling: Large-scale Online User Representations for Ads Personalization in Meta](https://arxiv.org/pdf/2311.09544)的方式得到user emb，dim大概是64到256之间，大概有40个不同的source，用365天的历史大概有100K的有效序列长度
  * Ember
* 应用2：data memento

### Meta的LoopFM

[LoopFM: Learning frOm HistOrical RePresentations of Foundation Model for Recommendation](https://arxiv.org/pdf/2605.29280)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7438111c1ec35628ed27e119f99325f8e60ede47%2Floopfm.png?alt=media)

* stage1：embedding extraction：对于每一个**样本**，FM有$$M$$层$$l\_1, \ldots, l\_M$$，取其中$$K$$层出来，concat到一起得到$$\mathbf{e}^{(i)}=\left\[\mathbf{h}*{l\_1}^{(i)} ; \ldots ; \mathbf{h}*{l\_K}^{(i)}\right] \in \mathbb{R}^D$$，其中$$D=\sum\_{k=1}^K d\_{l\_k}$$，大致在$$O\left(10^5\right)-O\left(10^6\right)$$
* stage2：compression：原始的$$\mathbf{e}^{(i)} \in \mathbb{R}^D$$直接存储太大，用一个和FM联合训练的autoencoder来压缩成$$\mathbf{z}^{(i)} \in \mathbb{R}^d(d \ll D)$$（别的姜维方法也行，例如PCA、随机投影、可学习的codebook）：

$$
\mathbf{z}^{(i)}=f\_{\mathrm{enc}}\left(\mathbf{e}^{(i)}\right), \quad \hat{\mathbf{e}}^{(i)}=f\_{\mathrm{dec}}\left(\mathbf{z}^{(i)}\right), \quad \mathcal{L}\_{\mathrm{AE}}=\left|\mathbf{e}^{(i)}-\hat{\mathbf{e}}^{(i)}\right|\_2^2
$$

注意，autoencoder的梯度会stop-grad到FM的backbone。encoder最后一层用tanh映射到$$\[-1,1]$$，然后用int4量化$$z\_{\text {quant }}=\operatorname{round}(z \cdot 8) \cdot \operatorname{clamp}(-8,7) / 8$$，能比fp16节省4倍存储

还用了Matryoshka compression，$$\mathcal{L}*{\mathrm{MAE}}=\sum*{d^{\prime} \in \mathcal{D}}\left|\mathbf{e}-f\_{\operatorname{dec}}^{\left(d^{\prime}\right)}\left(\mathbf{z}\_{1: d^{\prime}}\right)\right|\_2^2$$

* stage3：structuring：key $$k$$可以是userid、itemid sementicid，本文用的是userid，截取往前一个时间窗口（例如30天）的最多$$L$$(例如200)个item：

$$
\mathbf{S}*k=\left\[\mathbf{z}*{k, t\_1}, \mathbf{z}*{k, t\_2}, \ldots, \mathbf{z}*{k, t\_L}\right], \quad t\_L<\cdots\<t\_2\<t\_1\<t\_{c u r}
$$

VM-side integration：VM拿到$$\mathbf{S}*u$$后，过一个序列encoder(可以是pooling或者attn)，然后把pool结果和其他特征concat一起过后面的网络，loss包括task loss和kd loss：$$\mathcal{L}=\mathcal{L}*{\text {task }}\left(\hat{y}^V, y\right)+\lambda \cdot \mathcal{L}*{\mathrm{KD}}\left(\hat{y}^V, \hat{y}^F\right)$$，其中$$\hat{y}^V=g\left(\mathbf{x}*{\mathrm{VM}}, \mathbf{S}\_u ; \Theta\_V\right)$$

总结：

* 每条样本存k层的hidden（融合了u+i的各种组合信息），压缩后得到z；
* user level取前L个样本的z，拼起来给VM用

消融了z的dim和VM中序列encoder的$$d\_{model}$$的关系：

1. 小的$$d\_{model}$$限制迁移：固定在小$$d\_{model}$$时，增加dim并没有收益，说明$$d\_{model}$$需要足够大
2. dim限制信息容量：固定在小dim时，增加$$d\_{model}$$只能有非常小的提升，因为本身携带的信息有限
3. 这两个维度需要同时scale：同时scale时，收益最大

### 字节的Rec-Distill

[Rec-Distill : An Industrial Distillation Pipeline for Large-Scale Recommendation Models](https://arxiv.org/pdf/2605.29755)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-27304fb2922cf216586805f9f39d090fd9447d59%2Frec-distill.png?alt=media)

精排模型不断scale up会遇到ROI问题，因此用蒸馏的思路，让更大的精排当teacher（batch+流式训但不serving），线上精排当student。

提升效果的核心思路：

* teacher的scale up：mixer变大（最大可以到24b）+序列扩长（最长可以到2w）+增加训练数据
* 迁移率的提升：
  * student拆成主塔+辅助塔：主塔正常学label，辅助塔学label+teacher logit
  * 蒸馏loss设计：mse比较不稳定，交叉熵更好；loss\_gt + alpha \* loss\_distill，不强制权重和为1，以gt为主，调distill的scale
  * 采样纠偏：teacher和student的采样逻辑不一致，解法是teacher落原始logit，蒸馏时，按student采样纠偏后的新logit当成student要学的目标

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f414f2836b265d15f1606bb6956f11a66dad1fdc%2Frec-distill-arch.png?alt=media)

核心是teacher先消费，边训边把logit落到存储里，并往现有样本里填充，放到新的样本流给student delay训练，流式数据也会定时dump到集群变成批式数据，供后续其他student迭代用

### 腾讯的LFM4Ads

[Large Foundation Model for Ads Recommendation](https://arxiv.org/abs/2508.14948)

### 蒸馏：SLMRec

[ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值](https://mp.weixin.qq.com/s/E6SGGKy6-D1h3zGro7KW0w)

[SLMRec: Distilling Large Language Models into Small for Sequential Recommendation](https://openreview.net/pdf?id=G4wARwjF8M)

提出了一种知识蒸馏的方法，使得小语言模型仅用13%的模型参数，取得了比现有大模型推荐方法略好的效果，并取得了在训练/推理阶段6.6x/8.0x的加速。

<https://github.com/WujiangXu/SLMRec>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2eade16870aabb52935479f732b722f60d1dca86%2Fslmrec.png?alt=media)

* teacher每m层分成一个block，共分为B个block；student每n层分为一个block，也是B个block
* 每个block里，算3个loss：
  * teacher和student间算2个loss：衡量方向的cos相似度，衡量模长的L2距离
  * student和真实label（target item）算loss
* teacher frozen，只通过lora来训练student

### Pinterest的DERM

[推荐算法(2025.9.7)：Pinterest的跨域表征学习](https://mp.weixin.qq.com/s/hI3B6ZefpBDRnsuuHIiRNw)

[Decoupled Entity Representation Learning for Pinterest Ads Ranking](https://arxiv.org/pdf/2509.04337)

### 生成式出价：快手的GAVE

[sigir'25「快手」生成式出价-冠军方案｜Generative Auto-Bidding with Value-Guided](https://mp.weixin.qq.com/s/fttTPY6Q30gWaSwcoIpUsA)

[Generative Auto-Bidding with Value-Guided Explorations](https://arxiv.org/pdf/2504.14587)

用Decision Transformer代替RL，再利用离线强化的方法去弥补没有模拟环境的缺点。DT的一些其他应用：

* RAG：[Retrieval-Augmented Decision Transformer: External Memory for In-context RL](https://arxiv.org/pdf/2410.07071)
* 序列推荐：[Sequential Recommend for Optimizing Both ImmediateFeedback and Long-term Retention](https://arxiv.org/pdf/2404.03637)
* 重排：[PISDR: Page and Item Sequential Decision for Re-ranking Based on Offline Reinforcement Learning](https://raw.githubusercontent.com/mlresearch/v260/main/assets/yuan25a/yuan25a.pdf)

MDP假设是状态独立的，本质上忽略了竞价序列中的**时序依赖**关系。

自动出价：一般广告主会设置一个最低ROI（即价值/成本）作为约束，或者说是最大平均成本（CPA，即成本/价值），广告主给定的约束假设是$$C$$。

#### DT

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c67a2ca4411d74b03a6742468fd7424ee3ec91d1%2Fdecision-transformer.png?alt=media)

[Decision transformer: Reinforcement learning via sequence modeling](https://arxiv.org/pdf/2106.01345)，代码：<https://github.com/kzl/decision-transformer>

DT的输入(reward, state, action)三元组的序列，输出是预测的action，

**注意：对于t时刻来讲，输入的是0到t-1时刻的r+s+a，但只输入了t时刻的r和s**

* $$s\_t$$：历史出价策略、剩余预算、广告的在线时间等
* $$a\_t$$：出价因子，在广告的value上乘以a，$$b\_t=a\_tv\_t$$
* $$rw\_t$$：**t到t+1**所有候选impression的总value，$$r w\_t=\sum\_{n=0}^{N\_t} x\_{n\_t} v\_{n\_t}$$
* RTG（return to go） $$r\_t$$：现在**到未来**的总收益，$$r\_t=\sum\_{t^{\prime}=t}^T r w\_{t^{\prime}}$$

#### GAVE

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-04f669ec384bd73c2af3eadb622e8dd597fe3edb%2Fgave.png?alt=media)

预测如下4个值：

* 当前时刻的action：$$\hat{a}\_t$$
* 当前时刻的探索系数：$$\hat{\beta}\_{t}$$，其实是就是在$$a\_t$$前面乘一个$$\beta$$得到$$\tilde{a}\_t=\hat{\beta}\_t a\_t$$，然后约束一下$$\beta$$的范围在0.5到1.5之间（sigmoid(x)+0.5就行）可以减轻OOD(Out-of-Distribution)问题。

假设$$\tilde{r}*{t+1}$$是$$\tilde{a}*{t+1}$$的RTG，而$$\hat{r}*{t+1}$$是$$a\_t$$的RTG，定义了如下的w（即$$\tilde{r}*{t+1}$$比$$\hat{r}\_{t+1}$$大的概率）

$$
\left{\begin{array}{l}
\left.\left.\tilde{r}*{t+1}=\operatorname{GAVE}\left(r*{t-M}, s\_{t-M}, a\_{t-M}, \ldots, r\_t, s\_t, \tilde{a}*t\right)\right)\right) \\
w\_t=\operatorname{Sigmoid}\left(\alpha\_r \cdot\left(\tilde{r}*{t+1}-\hat{r}\_{t+1}\right)\right)
\end{array}\right.
$$

此外，还加了如下的辅助损失，其中$$w'$$和$$\tilde{a}'$$表示的是不更新梯度的$$w$$和$$\tilde{a}$$。第一个$$L\_r$$让$$\hat{r}*{t+1}$$接近真实值，第二个$$L\_a$$表示如果$$w\_t>0.5$$，即$$\tilde{r}*{t+1}$$比$$\hat{r}\_{t+1}$$大得比较多，第二项占主导，即让预测的action去你和探索的action $$\tilde{a}\_t'$$，反之让预测的action去你和实际的action $$a\_t$$

$$
\left{\begin{array}{l}
L\_r=\frac{1}{M+1} \sum\_{t-M}^t\left(\hat{r}*{t+1}-r*{t+1}\right)^2 \\
L\_a=\frac{1}{M+1} \sum\_{t-M}^t\left(\left(1-w\_t^{\prime}\right) \cdot\left(\hat{a}\_t-a\_t\right)^2+w\_t^{\prime} \cdot\left(\hat{a}\_t-\tilde{a}\_t^{\prime}\right)^2\right)
\end{array}\right.
$$

* 下一时刻的RTG值：$$\hat{r}\_{t+1}$$，其实就是把CPA的约束加到RTG的计算里来：

$$
\left{\begin{array}{l}
C P A\_t=\frac{\sum\_i^{I\_t} x\_i c\_i}{\sum\_i^{I\_t} x\_i v\_i} \\
\mathbb{P}\left(C P A\_t ; C\right)=\min \left{\left(\frac{C}{C P A\_t}\right)^\gamma, 1\right} \\
S\_t=\mathbb{P}\left(C P A\_t ; C\right) \cdot \sum\_i^{I\_t} x\_i v\_i \\
r\_t=S\_T-S\_{t-1}
\end{array}\right.
$$

* 下一时刻的价值分：$$\hat{V}\_{t+1}$$

目标是如何高效探索，用了一个expectile regression(IQL里的思想，[Offline Reinforcement Learning with Implicit Q-Learning](https://arxiv.org/abs/2110.06169))，如下，其中$$L\_2^\tau(y-m(x))$$是一个loss函数，用模型$$m(x)$$来预测$$y$$的分位数$$\tau \in (0,1)$$，$$\tau=0.85$$就是让预估价值$$\hat{V}*{t+1}$$去预测top百分之85的reward $$r*{t+1}$$

$$
\begin{aligned}
L\_e & =\frac{1}{M+1} \sum\_{t-M}^t\left(L\_2^\tau\left(r\_{t+1}-\hat{V}*{t+1}\right)\right) \\
& =\frac{1}{M+1} \sum*{t-M}^t\left(\left|\tau-\mathbb{1}\left(\left(r\_{t+1}-\hat{V}*{t+1}\right)<0\right)\right|\left(r*{t+1}-\hat{V}\_{t+1}\right)^2\right)
\end{aligned}
$$

而对于探索的reward $$\tilde{r}*{t+1}$$来讲，则不更新价值的梯度，即$$\hat{V}*{t+1}^{\prime}$$，只需要约束reward在价值附近就行

$$
L\_v=\frac{1}{M+1} \sum\_{t-M}^t\left(\tilde{r}*{t+1}-\hat{V}*{t+1}^{\prime}\right)^2
$$

### 生成式出价：快手的CBD

[Generative Auto-Bidding in Large-Scale Competitive Auctions via Diffusion Completer-Aligner](https://arxiv.org/pdf/2509.03348)

### 2026kddcup工业赛道前n名

#### 冠军：queryformer

[我用 DeepSeek 网页版拿下 KDD Cup 冠军！](https://zhuanlan.zhihu.com/p/2070276269984446381)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0e2fc24e0d5cb4a199b577d3d7f65588ed486976%2Fqueryformer.png?alt=media)

* 输入侧：id类特征和dense特征使用不同的tokenizer，每个token有多个emb table（图中的H scaling），然后merge一下给后面的结构用
* queryformer：下面的3个结构，堆叠多层：
  * CoTransformerBlock：用户侧u tokens做self-attn、广告侧i tokens做self-attn，两者之间分别cross-attn，产出新的u tokens和i tokens
  * QuerySeqCrossAttn：上面的i tokens当成query，和行为序列算cross-attn，得到query1
  * SeqQueryCrossAttn：q是序列tokens的pooling结果，kv是前面的u tokens和i tokens再加上query1，算cross-attn，得到增强的query2，和更新的u tokens和i tokens

#### 亚军：UniDot

[UniDot: A Unified Network for Sequence Modeling and Feature Interaction in Large-scale Recommendation](https://arxiv.org/pdf/2608.16797)

### 生成式出价：美团的GRAD

[Generative Large-Scale Pre-trained Models for Automated Ad Bidding Optimization](https://arxiv.org/pdf/2508.02002)

## LLM+推荐小结

### 输入ID/SID

| 论文                                            | 公司     | 关键词                | 做法                                                                                                          |
| --------------------------------------------- | ------ | ------------------ | ----------------------------------------------------------------------------------------------------------- |
| [TIGER](https://arxiv.org/pdf/2305.05065.pdf) | google | semantic\_id粒度的生成式 | <p>- 基于RQ-VAE聚类<br>- 输入semantic\_id list，预测下一个semantic\_id<br></p>                                          |
| [HSTU](https://arxiv.org/pdf/2402.17152.pdf)  | meta   | item\_id粒度的生成式     | <p>- 性别年龄等profile特征、action type也可以作为特殊的item\_id<br>- 输入item\_id list，预测下一个item\_id<br>- 一种范式可以同时支持召回和排序</p> |
| [COBRA](https://arxiv.org/abs/2503.02453)     | 百度     | semantic\_id粒度的生成式 | <p>- 和TIGER类似，只是给RQ-VAE再加一个由bert的CLS得到的emb<br>- 在线infer更复杂<br></p>                                          |
| [HeteroRec](https://arxiv.org/pdf/2503.01469) | 阿里     | 多模态+id生成           | <p>- img/txt/id一起输入<br>- listwise multi-step prediction<br></p>                                             |

### 输入文本

* FFT：full finetuning
* PT：prompt tuning
* LAT：layerwise adapter tuning
* OT：option tuning
* T-FEW：few-shot peft

看着落地的

| 论文                                        | 公司 | 关键词                  | 做法                                                                                                                          | ab收益        | tune方式   |
| ----------------------------------------- | -- | -------------------- | --------------------------------------------------------------------------------------------------------------------------- | ----------- | -------- |
| [KAR](https://arxiv.org/pdf/2306.10933)   | 华为 | item llm+user llm    | <p>- 让LLM总结item得到item emb；<br>- 让LLM总结user历史得到user emb<br>- 两个emb过一个mmoe做融合得到新的两个emb，给推荐模型用</p>                             | 音乐推荐 涨了播放量  | frozen   |
| [BAHE](https://arxiv.org/pdf/2403.19347)  | 蚂蚁 | 预先计算原子用户行为           | <p>- LLMs的预训练浅层提取来原子用户行为的emb，并存进离线db<br>- 从db里查出来，和item一起过LLMs的更深层可训练层</p>                                                  | 广告ctr+cpm   | FFT上层LLM |
| [LEARN](https://arxiv.org/pdf/2405.03988) | 快手 | ItemLLM+user decoder | <p>- item LLM固定，输入item特征得到item emb；<br>- 输入item emb过user的12层trans算dense all-action loss，<br>- 线上推荐模型里加user emb和item emb</p> | 广告cvr+收入    | frozen   |
| [BEQUE](https://arxiv.org/pdf/2311.03758) | 阿里 | SFT+离线模拟+PRO         | query重写任务，SFT得到一个LLM，将其预测的若干个候选rewrites通过offline system的feedback得到排序，再通过PRO算法再tune LLM                                      | 电商搜索，gmv+单量 | FFT      |

看着没落地的

| 论文                                                | 公司     | 关键词                         | 做法                                                                                                                                                                                                         | tune方式 |
| ------------------------------------------------- | ------ | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| [SLIM](https://arxiv.org/pdf/2403.04260)          | 蚂蚁     | 蒸馏推荐理由                      | <p>- 输入用户行为历史，大LLM(gpt)产出的推荐理由；<br>- 小llm(llama2)去蒸馏这个理由拿小llm去给出全量user的推荐理由，<br>- 通过BERT得到emb，给推荐模型用</p>                                                                                                   | FFT    |
| [DLLM2Rec](https://arxiv.org/pdf/2405.00338v1)    | OPPO   | 蒸馏推荐理由                      | 在SLMI的基础上设计了ranking蒸馏和embed蒸馏                                                                                                                                                                              | FFT    |
| [LLM-CF](https://arxiv.org/pdf/2403.17688)        | 快手     | 基于CoT数据集做RAG                | <p>- 拿推荐数据对llama2做sft，再用CoT的prompt让llama2对user+item+label产出一个推理过程，并通过bge得到emb，构建一个CoT数据集。<br>- 在线拿当前用户+item的特征从这个数据集里ann出k个cot example的emb，和其他特征一起输入一个decoder，输出给推荐模型的sharebottom，额外加了一个CoT emb的重建loss</p> | FFT    |
| [ILM](https://arxiv.org/pdf/2406.02844)           | google | 2阶段训练+q-former              | <p>- phase1：表示学习，交替训练两类表示学习（item-text表示学习，item-item表示学习）<br>- phase2：item-language model训练</p>                                                                                                             | frozen |
| [EmbSum](https://www.arxiv.org/pdf/2405.11441)    | meta   | LLM摘要+t5 encoder            | <p>- 行为历史丢给LLM产出摘要，对应的hidden states给decoder自回归;<br>- 历史item过t5 encoder并concat过poly；<br>- item过t5 encoder过poly；</p>                                                                                         | frozen |
| [Agent4Ranking](https://arxiv.org/pdf/2312.15450) | 百度     | agent rewrite+ bert ranking | query重写任务，多个人群当成多个agent，每个通过多轮对话产出一个rewrite，再合在一起经过bert+mmoe计算robust损失+accuracy损失。                                                                                                                         | frozen |

纯学术界

| 论文                                                | 关键词                              | 做法                                                                                                                                                                                        | tune方式            |
| ------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- |
| [CUP](https://arxiv.org/pdf/2311.01314)           | LLM总结+bert双塔                     | 把用户的一堆历史评论扔给chatgpt，让它总结出128个token，然后丢给双塔bert，另一个塔是item的描述，freeze bert底层，只tune上层                                                                                                          | last layer FT     |
| [LLaMA-E](https://arxiv.org/pdf/2308.04913)       | gpt扩展instruct                    | instruction formulating为写300个种子指令，让gpt作为teacher，对300个种子指令进行扩展，并由领域专家评估后，去重并保证质量，得到120k个指令作为训练集，再用lora去instruct tuning                                                                     | lora              |
| [EcomGPT](https://arxiv.org/pdf/2308.06966v1)     | 一系列电商任务FFT BLOOMZ                | 设置一系列的task(100多个task)来finetune BLOOMZ，包括命名实体识别、描述生成、对话intent提取等                                                                                                                           | FFT               |
| [Llama4rec](https://arxiv.org/pdf/2401.13870)     | prompt增强+数据增强，finetune           | <p>- prompt增强：在prompt里引入推荐模型的信息；<br>- 数据增强：通过LLM给推荐模型增加样本<br>- adaptive aggregation：llm和推荐模型各自打分并用融合公式融合</p>                                                                              | FFT               |
| [SAGCN](https://arxiv.org/pdf/2312.16275)         | 分aspect打标、构图+gcn                 | <p>- LLM为用户评论打标，确定aspect；<br>- 分aspect构建u-i图，并gcn</p>                                                                                                                                     | frozen            |
| [GReaT](https://arxiv.org/pdf/2210.06280)         | 表格型数据+LLM                        | 随机交换属性生成数据，finetune LLM预测属性                                                                                                                                                               | FFT               |
| [ONCE](https://arxiv.org/pdf/2305.06566)          | 闭源LLM总结、开源LLM做encoder，u-i学ctr    | 闭源LLM输出文本（user profiler、content summarizer、personalized content generator），给开源LLM得到user表示，item过开源LLM得到item表示，二者内积学ctr                                                                     | lora训开源，frozen闭源  |
| [Agent4Rec](https://arxiv.org/pdf/2310.10108.pdf) | 多智能体系统模拟交互，产出推荐样本                | 先训一个推荐模型，然后构建一个多智能体系统，模拟和这个推荐模型交互，产出新的样本给推荐模型做数据增强                                                                                                                                        | 仅训推荐模型，LLM frozen |
| [RecPrompt](https://arxiv.org/pdf/2312.10463)     | 两个LLM迭代出最佳prompt                 | 给一个初始prompt，让LLM1得到推荐结果，拿一个monitor衡量这个结果和ground truth的mrr/ndcg，再用另一个LLM产出更好的prompt给第一个LLM用，如此迭代，得到一个best prompt                                                                           | frozen            |
| [PO4ISR](https://arxiv.org/pdf/2312.07552)        | 反思原因并refine/augment地迭代出最优的prompt | 给初始prompt，收集error case让模型反思原因并refine出新的prompt，再augment出另一个prompt，并UCB选出最好的prompt，如此迭代                                                                                                     | frozen            |
| [TransRec](https://arxiv.org/pdf/2310.06491)      | 受限生成                             | <p>- 将一个item表示成3部分：id+title+attr，设计三种对应的instruct-tuning任务；<br>- 引入一个特殊的数据结构（FM-index），并进行constrained beam search，让模型能生成候选集中的id/title/attr，<br>再遍历全库候选，看不同facet的相似度（会考虑高热打压），加权融合出一个排序</p> | lora              |
| [E4SRec](https://arxiv.org/pdf/2312.02443)        | 推荐id emb输入LLM                    | 推荐的id emb、prompt的emb一起输入LLM，最后一个词映射回推荐id emb的dim，去softmax                                                                                                                                 | lora              |

### 其他套路

工业界

| 论文                                       | 公司   | 关键词   | 做法                                                           |
| ---------------------------------------- | ---- | ----- | ------------------------------------------------------------ |
| [ExFM](https://arxiv.org/abs/2502.17494) | Meta | 两阶段蒸馏 | <p>- 先训好teacher，并利用等待时间窗口为student数据集进行预估<br>- 加了一些蒸馏loss</p> |

学术界

| 论文                                                 | 关键词   | 做法                                   |
| -------------------------------------------------- | ----- | ------------------------------------ |
| [SLMRec](https://openreview.net/pdf?id=G4wARwjF8M) | 一阶段蒸馏 | teacher和student都拆成多个block，每个block间蒸馏 |

### 讨论

我想输入用户历史行为，通过llm产出用户向量（64维的向量），这个向量可以是历史的总结，也可以是预测未来的一些什么东西，最终用在推荐系统的精排模型里，业界有什么好的方法吗

让gpt帮忙深度研究了一下：[版本1](https://chatgpt.com/s/dr_6821e54479dc81918c5e4bd61d645894)，[版本2](https://chatgpt.com/s/dr_6821fecfde088191b56c1ed19a3ee999)，

导出了对应的[pdf1](https://github.com/daiwk/collections/blob/master/assets/llm-gen-user-emb.pdf)，[pdf2](https://github.com/daiwk/collections/blob/master/assets/llm-gen-user-emb-64dim.pdf)

## LLM embedding

### 如何选合适的emb模型

<https://huggingface.co/spaces/mteb/leaderboard>

MTEB(Massive Text Embedding Benchmark)提供了评分体系。把模型放在各种任务上测试，包括分类、聚类、检索、排序和语义相似度等，还会给不同领域单独打分。法律、医学、代码、化学这些领域都有自己的分数。

### Gecko

[谷歌DeepMind发布Gecko：专攻检索，与大7倍模型相抗衡](https://mp.weixin.qq.com/s/5e_Py_Xm0RsmP1YMcikpaQ)

[Gecko: Versatile Text Embeddings Distilled from Large Language Models](https://arxiv.org/pdf/2403.20327.pdf)

![gecko](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-53e2f202f51f7db05008c9821fb5e095712bda94%2Fgecko.png?alt=media)

主要包括两阶段：

* pre-finetuning：类似[Large dual encoders are generalizable retrievers](https://arxiv.org/pdf/2112.07899)，自监督
* finetuning：2-step llm distillation，提出了一个FRet数据集（Few-shot Prompted Retrieval dataset）

#### Pre-finetuning

&#x20;

2个数据集：

* 大型社区qa数据集：[Large dual encoders are generalizable retrievers](https://arxiv.org/pdf/2112.07899)中的来自网上论坛和qa网站的问答pair对
* 去各种网站上爬了title-body的pair对，因为[Text Embeddings by Weakly-Supervised Contrastive Pre-training](https://arxiv.org/pdf/2212.03533)发现这种自然出现的pair对对于pre-finetuning embedding模型很有用

pre-finetuning的目标是让模型看到大量的多样性语料，对于一个预训练的语言模型$$\mathcal{M}$$，长度为$$n$$的句子对应的contextual向量$$\mathbf{W} \in \mathbb{R}^{n \times d}$$，对于任务特征$$t$$，数据集$$\mathcal{D}*{\text {pre }}=\left{\left(q\_i, p\_i\right)\right}*{i=1}^N$$，得到的向量如下：

$$
\begin{aligned}
\mathbf{q}*i & =\text { mean\_pool }*{|t|+\left|q\_i\right|}\left\[\mathcal{M}\left(t \oplus q\_i\right) \in \mathbb{R}^{\left(|t|+\left|q\_i\right|\right) \times d}\right] \in \mathbb{R}^d \\
\mathbf{p}*i & =\text { mean\_pool }*{\left|p\_i\right|}\left\[\mathcal{M}\left(p\_i\right) \in \mathbb{R}^{\left|p\_i\right| \times d}\right] \in \mathbb{R}^d
\end{aligned}
$$

对于batchsize为$$B$$的样本来说，inbatch负例，$$\operatorname{sim}(\mathbf{x}, \mathbf{y})=\frac{\mathbf{x}^{\top} \mathbf{y}}{|\mathbf{x}| \cdot \cdot|\mathbf{y}|}$$，其loss如下：

$$
\mathcal{L}*{\text {pre }}=\frac{1}{B} \sum*{i=1}^B\left\[-\log \frac{e^{\operatorname{sim}\left(\mathbf{q}\_i, \mathbf{p}*i\right) / \tau}}{\sum*{j=1}^B e^{\operatorname{sim}\left(\mathbf{q}\_i, \mathbf{p}\_j\right) / \tau}}\right]
$$

在这个阶段没有用hard负例，用了能适配设备的最大batchsize，这是[Towards General Text Embeddings with Multi-stage Contrastive Learning](https://arxiv.org/pdf/2308.03281)和[Text embeddings by weakly-supervised contrastive pre-training](https://arxiv.org/pdf/2212.03533)里的经验。

#### FRet

![fret](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2e8fce06b8d94bfc28ff5909d3904444c4784bc5%2Ffret.png?alt=media)

**LLM-based Diverse Query Generation**

&#x20;

从web语料$$\text { C }$$中抽出一个段落$$p\_{\text {seed }}$$，$$\mathbb{P}\_{\mathrm{QG}}$$是一个固定的few-shot的prompt，让LLM生成任务描述和这个task的query

$$
\operatorname{LLM}\left(\mathbb{P}*{\mathrm{QG}}, p*{\text {seed }}\right) \rightarrow(t, q)
$$

生成的任务t例如：

* question answering：`Given a query, find a passage that has the answer to the query`
* fact checking：`Given a query, find a passage that allows you to check whether the query is true or not`

为了保证多样性：

* 网页库本身就有很多的topic和很多的写作风格
* 在prompt里加多样的任务描述，来让模型生成的query保证多样性。

**LLM-based Positive and Negative Mining**

&#x20;

对于某个query $$q$$，之前的工作一般会直接把输入的段落$$p\_{\text {seed }}$$当成正样本，但实践中发现$$p\_{\text {seed }}$$一般比较长，而生成的query一般只关注其中一小部分，所以可能在整个语料库中有比$$p\_{\text {seed }}$$更准确的答案。因此，通过如下方法构造了一个FRet数据集：

* 先把$$p\_{\text {seed }}$$当成正样本，in-batch负例训一个embedding模型。
* 用这个模型从文档库中检索出top N的相似段落$$P=\left{p^{(1)}, \ldots, p^{(N)}\right}$$
* 用生成query的LLM给这N个文档排序，有两种排序方法：
  * query likelihood：参考[Improving passage retrieval with zero-shot question generation](https://arxiv.org/pdf/2204.07496)，给定段落$$p$$，衡量query $$q$$的likelihood，$$\mathrm{QL}(q, p)=\operatorname{LLM}\left(q \mid p, \mathbb{P}\_{\mathrm{QL}}\right)$$，其中的prompt参考[PaRaDe: Passage Ranking using Demonstrations with Large Language Models](https://arxiv.org/pdf/2310.14408)包括了判断query likelihood的指令，以及一些相关query+段落的few-shot。基本思想是：**如果q和p高度相关，那么从p生成q的概率应该很高**。
  * relevance classification：参考[Beyond yes and no: Improving zero-shot llm rankers via scoring fine-grained relevance labels](https://arxiv.org/pdf/2310.14122)，给定query $$q$$和段落$$p$$后，衡量特定相关性label的log likelihood：$$\operatorname{RC}(q, p)=\operatorname{LLM}\left(\text { label } \mid q, p, \mathbb{P}\_{\mathrm{RC}}\right)$$。基本思想是：**让LLM直接判断q和p的相关程度,并输出一个相关性标签**。
* 通过标准的Reciprocal Rank Fusion（RRF，倒数融合，[Reciprocal rank fusion outperforms condorcet and individual rank learning methods](https://plg.uwaterloo.ca/~gvcormac/cormacksigir09-rrf.pdf)）方法得到rank函数，对上面两个方法的排序结果merge：$$R(q, p)=1 / r\_{\mathrm{QL}}(q, p)+1 / r\_{\mathrm{RC}}(q, p)$$...其实就是rankindex
* 基于得分筛选样本：
  * 正样本：$$p^{+}=\underset{p \in P}{\arg \max } R(q, p)=p\_1$$
  * hard负例：排名第$$N$$位的样本$$p\_N$$，也可以从除了第1个外的N-1个里随机sample

#### Unified Fine-tuning Mixture

&#x20;

除了FRet，还融合了多个公开数据集：

* Natural Questions：[Natural Questions: A Benchmark for Question Answering Research](https://aclanthology.org/Q19-1026.pdf)
* HotpotQA：[Hotpotqa: A dataset for diverse, explainable multi-hop question answering](https://arxiv.org/pdf/1809.09600)
* FEVER：[Fever: a large-scale dataset for fact extraction and verification](https://arxiv.org/pdf/1803.05355)
* MedMCQA：[Medmcqa: A large-scale multi-subject multi-choice dataset for medical domain question answering](https://arxiv.org/pdf/2203.14371)
* SNLI：[A large annotated corpus for learning natural language inference](https://arxiv.org/pdf/1508.05326)
* MNLI：[A broad-coverage challenge corpus for sentence understanding through inference](https://arxiv.org/pdf/1704.05426)
* MIRACL：多语言的数据集[Miracl: A multilingual retrieval dataset covering 18 diverse languages](https://direct.mit.edu/tacl/article/doi/10.1162/tacl_a_00595/117438/MIRACL-A-Multilingual-Retrieval-Dataset-Covering)
* huggingface上的一些分类数据集

将这些数据集处理成一个统一的格式，发现不同的任务对prompt的格式敏感程度不同，，非对称任务（如BEIR）对格式更敏感，而对称任务的性能相对稳定。

* 对称格式（Symmetric Formatting）：输入和目标使用相同的格式。
  * 输入：task: {task} | query: {input}
  * 目标：task: {task} | query: {target}
* 非对称格式（Asymmetric Formatting）：输入和目标使用不同的格式。
  * 输入：task: {task} | query: {input}
  * 目标：title: {title} | text: {target}

参考[One Embedder, Any Task: Instruction-Finetuned Text Embeddings](https://aclanthology.org/2023.findings-acl.71.pdf)，对于每个文本$$x$$，找到另一个同样label是$$y$$的样本当成正样本$$x^{+}$$，随机找一个label不是$$y$$的当作负样本$$x^{-}$$。

实践中，在一个batch中，同一个$$x^+$$可能出现overlap，会造成in-batch negatives中的false negative问题。参考[poe的回复](https://poe.com/s/XHJyRAAOc9ZAuQu5yz2p)，即同一个mini-batch中假设有(x1, x1+, x1-) 和 (x2, x2+, x2-)，可能出现x1+ 与 x2 或 x2+ 相同或非常相似的情况。那么：

* 对于x1来说，x1+是正例。
* 但是如果x1+ 与 x2 相同或非常相似，模型可能会错误地认为x1+应该与x2区分开来，因为x2是另一个样本的输入。
* 或者如果x1+ 与 x2+ 相同或非常相似，模型可能会混淆应该如何处理这个重叠的样本。

因为在理想情况下，x1+应该只是x1的正例，而不应该被视为任何其他样本的负例。但由于重叠，模型可能错误地将x1+视为x2或其他样本的负例。解决方法，给每个三元组分配唯一的id，让模型专注于在给定x的情况下，区分x+和x-。

有$$M$$个数据集$$\left\[\mathcal{D}^{(1)}, \ldots, \mathcal{D}^{(M)}\right]$$，每个数据集是$$\mathcal{D}^{(m)}=\left{\left(t\_i, q\_i, p\_i^{+}, p\_i^{-}\right)\right}\_{i=1}^N$$，$$t$$是任务描述，给定一个batch\_size=B的batch，同batch里的其他query可以看成[SamToNe: Improving Contrastive Loss for Dual Encoder Retrieval Models with Same Tower Negatives](https://arxiv.org/pdf/2306.02516)中说的same-tower negative（对同模态的效果比较好，例如这边都是query）：

$$
\mathcal{L}*{\text {main }}=\frac{1}{B} \sum*{i=1}^B\left\[-\log \frac{e^{\operatorname{sim}\left(\mathbf{q}\_i \mathbf{p}*i^{+}\right) / \tau}}{\sum*{j=1}^B\left(e^{\operatorname{sim}\left(\mathbf{q}\_i \mathbf{p}*j^{+}\right) / \tau}+\mathbb{1}*{\[j \neq i]} e^{\operatorname{sim}\left(\mathbf{q}\_i, \mathbf{q}\_j\right) / \tau}\right)+e^{\operatorname{sim}\left(\mathbf{q}\_i \mathbf{P}\_i^{-}\right) / \tau}}\right]
$$

同时还参考[Matryoshka representation learning](https://arxiv.org/pdf/2205.13147)的俄罗斯套娃加了一个MRL的loss，让模型适配不同的dim，gecko是768和256的dim

### ChatRetriever

[ChatRetriever: Adapting Large Language Models for Generalized and Robust Conversational Dense Retrieval](https://arxiv.org/pdf/2404.13556v1)

思想：原来输入的prompt是x，输出的response是y，添加t个特殊的`[emb_i]` token，输入

$$
s=\[x\_1, \ldots, x\_N,\left\[\mathrm{EMB}\_1\right], \ldots,\left\[\mathrm{EMB}\_t\right], y\_1^{+}\ldots, y\_M^{+},\left\[\mathrm{EMB}\_1\right], \ldots,\left\[\mathrm{EMB}\_t\right]]
$$

然后训练的时候，每个生成的$$y\_i$$只看得到它前面的y，还有x后面的那t个特殊token：

$$
\mathcal{L}*{\mathrm{S}}=-\frac{1}{M} \sum*{i=1}^M \log p\left(y\_i^{+} \mid y\_1^{+}, \ldots, y\_{i-1}^{+}, \mathbf{x}\_{1: t}\right)
$$

![chatretriever](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-27556c18355bf1d7203c9768ce8c558f1e926cdb%2Fchatretriever.png?alt=media)

对应的[代码](https://github.com/kyriemao/ChatRetriever/blob/cbcd9b10f7d0e1dc27ae299f463a5d27e423fca7/src/kindred/models/model_utils.py#L247)

```python
def unified_model_forward(model, model_type: str, inputs: dict, normalize_emb: bool):
    inputs.pop("sample_ids", None)
    inputs.pop("input_texts", None)
    
    if model_type in ['bge', 'llm_embedder']:
        output = model(**inputs)
        embs = output.last_hidden_state[:, 0]
    elif model_type in set(['qwen', 'qwen_chat', 'qwen_chat_cot', 'qwen_chat_lora', 
        'qwen_chat_lora_eval', 'qwen_chat_cot_lora', 'qwen_chat_cot_lora_eval', 
        'qwen15_chat_cot_lora_eval', 'repllama', 'llama', 
        'repllama-train', 'repllama_v2', 'repllama_v2-train', 
        'repllama_v2-continue_train', 'repllama_chat', 
        'repllama_chat-train', 'repllama_chat_cot', 'repllama_chat_cot-train', 
        'mistrial_cot-train', 
        'mistrial_chat_cot-train', 'mistrial_cot', 'mistrial_chat_cot', 
        'qwen15', 'qwen15_chat', 
        'qwen15_chat_lora', 'qwen15_chat_cot_lora', 'qwen15_chat_cot']):        
        inputs['output_hidden_states'] = True
        output = model(**inputs)
        hidden_states = output.hidden_states[-1]
        last_token_indices = inputs['attention_mask'].sum(dim=1) - 1
        embs = hidden_states[torch.arange(hidden_states.size(0)), last_token_indices]
    elif model_type in ['e5_mistrial', 'e5_mistrial-train']:
        outputs = model(**inputs)
        embs = last_token_pool(outputs.last_hidden_state, inputs['attention_mask'])
    elif model_type in ['ance', 'gtr', 'splade']:
        embs = model(**inputs)
    elif model_type in ['bert']:
        output = model(**inputs)
        embs = output.pooler_output
    else:
        raise NotImplementedError("Model type {} is not supported now.".format(model_type))    
    
    if normalize_emb:
        embs = torch.nn.functional.normalize(embs, p=2, dim=-1)
    return embs
```

### Instructor

[One Embedder, Any Task: Instruction-Finetuned Text Embeddings](https://aclanthology.org/2023.findings-acl.71.pdf)

基于google的GTR(Generalizable T5-based dense Retrievers)模型（[Large Dual Encoders Are Generalizable Retrievers](https://arxiv.org/pdf/2112.07899)）加了task instruction，用对比学习loss训练

### LLM-Embedder(BGE)

[Retrieve Anything To Augment Large Language Models](https://arxiv.org/pdf/2310.07554)和[C-Pack: Packed Resources For General Chinese Embeddings](https://arxiv.org/pdf/2309.07597)这两个对应的是一样的代码

<https://github.com/FlagOpen/FlagEmbedding>

### RepLLaMA

[Fine-Tuning LLaMA for Multi-Stage Text Retrieval](https://arxiv.org/pdf/2310.08319)

### E5\_mistral-7b

[Improving Text Embeddings with Large Language Models](https://arxiv.org/pdf/2401.00368)

### E5-V

[E5-V：Universal Embeddings with Multimodal Large Language Models](https://arxiv.org/abs/2407.12580)

### GRIT

[Generative Representational Instruction Tuning](https://arxiv.org/pdf/2402.09906)

<https://github.com/ContextualAI/gritlm>

### LLM2Vec

[LLM2Vec: Large Language Models Are Secretly Powerful Text Encoders](https://arxiv.org/pdf/2404.05961)

<https://github.com/McGill-NLP/llm2vec>

由3步组成：

* Bi-directional：把causal mask干掉，改成全1mask
* 引入masked next token predtion任务：类似mlm，mask掉中间的词，拿周围的词预测
* 对比学习simcse：前两步让模型有了bi-directional的能力，把所有词的emb通过pooling（实验表明mean pooling最有效）得到句子表示，同一句话里mask掉几个词的为正例，不同句子为负例，对比学习

### SyCL

[Beyond Contrastive Learning: Synthetic Data Enables List-wise Training with Multiple Levels of Relevance](https://arxiv.org/pdf/2503.23239)

用LLM生成具有多个相关性级别的**合成**文档，结合列表式损失函数（Wasserstein距离），提升检索器的排名性能。

传统的密集检索器训练依赖对比学习和二元相关性标签（InfoNCE损失），即将文档分为正样本和负样本。这种方法存在两个主要局限：

* 忽略细微相关性差异：除了明确标注为相关的文档外，所有其他文档被同等视为负样本，无法反映实际的相关性程度。
* 对噪声敏感：二元标签无法充分利用数据的排名信息，且易受标注错误影响。

具体方法：

* 多级排名上下文生成：使用 MS MARCO 数据集的查询，提示LLM生成四篇不同相关性级别的合成文档。通过顺序生成确保相关性逐步降低，并使用随机采样（如句子长度和难度）增加多样性。分配标签：{3, 2, 1, 0}，分别对应完美相关到无关。
* Wasserstein 距离损失：不同于InfoNCE的逐对比较，Wasserstein 距离考虑整个文档集合的相关性分布。通过比较真实标签分布与预测得分分布，优化模型以更准确地排名文档。

### RARE

[腾讯搜索广告生成式检索](https://mp.weixin.qq.com/s/zRGuttbqKkTFasg9AY4fGA)

[Real-time Ad retrieval via LLM-generative Commercial Intention for Sponsored Search Advertising](https://arxiv.org/pdf/2504.01304)

### BGE-code/VL

[代码、多模态检索全面登顶SOTA！智源BGE向量模型三连击，并全面开放](https://mp.weixin.qq.com/s/DYGix_6Zf7M50aC8TtpQKg)

* BGE-code：[Towards A Generalist Code Embedding Model Based On Massive Data Synthesis](https://arxiv.org/abs/2505.12697)
* BGE-VL：[MegaPairs: Massive Data Synthesis For Universal Multimodal Retrieval](https://arxiv.org/abs/2412.14475)
* BGE-VL-screenshot：[Any Information Is Just Worth One Single Screenshot: Unifying Search With Visualized Information Retrieval](https://arxiv.org/abs/2502.11431)

### UniME

[Breaking the Modality Barrier: Universal Embedding Learning with Multimodal LLMs](https://arxiv.org/pdf/2504.17432)

#### 阶段一：文本判别知识蒸馏

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bedb9740efe81fd6b952370d673b2dd3fb8b8599%2Funime-text-distill.png?alt=media)

用纯文本数据来增强MLLM中LLM的嵌入能力，用了273k个句子对。

* teacher：基于LLM的嵌入模型NV-Embed V2（对比训练中移除了causal mask）离线批量产出文本的emb
* student：MLLM中把LLM部分剥离出来，输入prompt `Summary the above sentences in one word: \n”`，最后一个token的emb当成输出
* 蒸馏：teacher和student间算KL散度，LoRA训练

推理时：

* 单模态输入：通过prompt的设置，决定只走对应的vision/text encoder
* 图片+文字输入：通过prompt，各自过模型，然后把输出的2个emb进行融合

#### 阶段二：困难负样本增强指令微调

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5aaa8b23eebcb136bfc093cc35ddd96a9f88b619%2Funime-img.png?alt=media)

拿多模态的样本对来提升图文之间的对齐，用了662k个pair对：

* query: img+prompt
* doc: img

样本处理：

* 干掉false negative：有些负样本和query的相似度太高了，干掉
* 增加hard negative：除了正例和前面的false negative外，在负样本里找出k个和query最像的，当成hard negative

loss是infoNCE，然后用QLoRA来微调

代码：

```python
import torch
from PIL import Image
from torch.nn import functional as F
from self_evaluate.utils.utils import init_model_and_transform

model_name = "phi35V"
base_model_path="DeepGlint-AI/UniME-Phi3.5-V-4.2B"

if model_name == "phi35V":
    img_prompt = '<|user|>\n<|image_1|>\nSummary above image in one word: <|end|>\n<|assistant|>\n'
    text_prompt = '<|user|>\n<sent>\nSummary above sentence in one word: <|end|>\n<|assistant|>\n'
elif model_name == "llava_16":
    img_prompt = "[INST] <image>\nSummary above image in one word: [/INST]"
    text_prompt = "[INST] <sent>\nSummary above sentence in one word: [/INST]"

text = "A man is crossing the street with a red car parked nearby."
image_path = "figures/demo.png"
input_texts = text_prompt.replace('<sent>', text)
input_image_prompt = img_prompt
input_image = [Image.open(image_path)]

model, transform = init_model_and_transform(model_name, base_model_path)
inputs_text = transform(text=input_texts,
                    images=None,
                    return_tensors="pt", 
                    padding=True)
for key in inputs_text: inputs_text[key] = inputs_text[key].to("cuda")
inputs_image = transform(text=input_image_prompt,
                    images=input_image, 
                    return_tensors="pt", 
                    padding=True).to("cuda")

with torch.no_grad():
  emb_text = model(**inputs_text, output_hidden_states=True, return_dict=True).hidden_states[-1][:, -1, :]
  emb_image = model(**inputs_image, output_hidden_states=True, return_dict=True).hidden_states[-1][:, -1, :]
  emb_text = F.normalize(emb_text, dim=-1)
  emb_image = F.normalize(emb_image, dim=-1)
  Score = emb_image @ emb_text.T
print("Score: ", Score) # Score: 0.59
```

其中：

```python
def init_model_and_transform(model_name, base_model_path): 
    if model_name == 'phi35V':
        transform = AutoProcessor.from_pretrained("microsoft/Phi-3.5-vision-instruct", 
        trust_remote_code=True)
        model = AutoModelForCausalLM.from_pretrained(base_model_path,
                            device_map="cuda", trust_remote_code=True,
                            torch_dtype=torch.float16, 
                            _attn_implementation='flash_attention_2')
    elif model_name == "llava_16": 
        transform = LlavaNextProcessor.from_pretrained("llava-hf/llava-v1.6-mistral-7b-hf")
        model = LlavaNextForConditionalGeneration.\
          from_pretrained(base_model_path, device_map="cuda", 
            torch_dtype=torch.float16, low_cpu_mem_usage=True) 
    transform.tokenizer.padding_side = "left"
    transform.tokenizer.padding = True
    return model, transform
```

### Qwen3-emb

[Qwen3 Embedding: Advancing Text Embedding and Reranking Through Foundation Models](https://arxiv.org/pdf/2506.05176)

#### 架构

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f9d34797b9d629a6a8829028493273c1d56d3ab7%2Fqwen3-emb-arch.png?alt=media)

* emb模型：
  * query：输入instruction+query，拿eos对应的emb作为输出
  * doc：不用instrunction，直接输入doc，拿eos对应的emb作为输出
* rerank模型：输入instruction+query和doc，拿如下prompt的输出经过lm head输出yes/no的概率（是否匹配）

```
<|im_start|>system
Judge whether the Document meets the requirements 
based on the Query and the Instruct provided. 
Note that the answer can only be "yes" or "no".<|im_end|>
<|im_start|>user
<Instruct>: {Instruction}
<Query>: {Query}
<Document>: {Document}<|im_end|>
<|im_start|>assistant
<think>\n\n</think>\n\n
```

#### 合成数据

数据：多样性，包括多语言、跨语言、多领域、多任务、长/短文本、代码检索

数据来源：

* 人工标注数据：搜索(MS MARCO)、qa、MNLI、SNLI等，大概10M
* 公开领域的弱监督数据：维基百科、redit、arxiv等，大概10亿，放弃了
* 大模型合成数据：用Qwen3为每个doc生成相关问题，理论上可以构建无限数据

此外，

* 根据文档，从一个比较大的角色库（比如大学生、小学生、公务员、商人等）里检索出若干个角色，用llm判断哪些角色适合这个文档，以及他们会问什么类型的问题（keyword/summary/逻辑推理），难度（大学/小学）、长度、语言，生成一个config
* 拿角色+文档+config再给llm，生成真实的用户问题
* 再用一个预训练好的emb模型先进行检索，过滤掉那些比较低质的数据（例如相似度太低或者根本检索不到相关文档）

#### 训练

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-26440b2ded696b318f336d5802d2f407d5cb3186%2Fqwen3-emb-train.png?alt=media)

多阶段训练

* stage1：Large-Scale Synthetic Data-Driven Weak Supervision Training：
* stage2：High-Quality Synthetic Data Utilization in Supervised Fine Tuning: 从合成数据中筛选出高质量数据，以及人工标注的高质量数据
* stage3：Model Merging: 对stage2中的多个ckpt进行merge

rerank模型里stage1没啥用，直接用stage2和3，loss是sft的loss，即对yes/no去算交叉熵

embedding模型是3阶段，用一个改进的对比学习来训：

$$
L\_{\text {embedding }}=-\frac{1}{N} \sum\_i^N \log \frac{e^{\left(s\left(q\_i, d\_i^{+}\right) / \tau\right)}}{Z\_i}
$$

* 负例：$$K$$个hard neg $$d^{-}\_{i,k}$$、batch内的其他query $$q\_j$$、batch内的除了正负例的其他doc $$d\_j$$
* 计算负样本与query的相似度s1，正样本与query的相似度s2，如果s1比s2大超过一个阈值那就是false negative，即下面的$$m\_{ij}$$

$$
Z\_i=e^{\left(s\left(q\_i, d\_i^{+}\right) / \tau\right)}+\sum\_k^K m\_{i k} e^{\left(s\left(q\_i, d\_{i, k}^{-}\right) / \tau\right)}+\sum\_{j \neq i} m\_{i j} e^{\left(s\left(q\_i, q\_j\right) / \tau\right)}+\sum\_{j \neq i} m\_{i j} e^{\left(s\left(d\_i^{+}, d\_j\right) / \tau\right)}
$$

其中，

$$
m\_{i j}= \begin{cases}0 & \text { if } s\_{i j}>s\left(q\_i, d\_i^{+}\right)+0.1 \text { or } d\_j==d\_i^{+} \ 1 & \text { otherwise, }\end{cases}
$$

训练时的策略：

* 动态batchsize：训练数据长度不同，能接收的最大batchsize不同，所以对于不同长度用的bs不一样
* gradient checkpointing：将大的bs切成小的sub-bs，先计算每个sub-bs的emb，因为gradient checkpointing不保存梯度，所以这个时候可以merge，merge完后再计算梯度
* 训练的时候带了MRL loss

模型融合原理：多个ckpt，可能分别擅长不同的task，通过对模型参数的线性/球面插值，可以merge出一个对各任务都不错的模型。

参考[Improving general text embedding model: Tackling task conflict and data imbalance through model merging](https://arxiv.org/abs/2410.15035)的slerp，基于球面插值的融合方法，给定2个ckpt，分别算一下和训练前ckpt的差值，称为任务向量。然后拿这2个任务向量和原来ckpt的点构成的平面，使得少量训练数据和一个loss，算出合适的夹角和模长得到新向量，再去和其他ckpt重复这个步骤进行merge。

训练的时候用的lora，emb和rerank的hard negative设计不一样

### gemini embedding

[Gemini Embedding: Generalizable Embeddings from Gemini](https://arxiv.org/pdf/2503.07891)

### EmbeddingGemma

[EmbeddingGemma: Powerful and Lightweight Text Representations](https://arxiv.org/abs/2509.20354)

<https://huggingface.co/google/embeddinggemma-300m>

[解读](https://www.xiaohongshu.com/explore/68db1d3a00000000130372d4?app_platform=ios\&app_version=9.3.1\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBL97bjctCoRqfMMLs0o7XzqpWS2lT-ucQJptp3cIpOAA=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1759251795\&share_id=5456ef75a99043fe98df53343cf96991)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b186ce93b1723ca340f683413425aa3efc2b83c2%2Ft5gemma-embgemma.png?alt=media)

模型结构：

* 把gemma这种decoder only的模型改成一个encoder-decoder架构(用如上图的T5-gemma的方法，[Encoder-decoder gemma: Improving the quality-efficiency trade-off via adaptation](https://arxiv.org/abs/2504.06225))。
* 其实encoder部分和原模型是一样的，只是把mask改成双向的。在得到T个token的输出后，mean pooling（这里对比过更复杂的pooling方式，发现mean的效果最好）成一个768的emb。再过2层nn，最终映射到768。
* 模型输入是task描述+原文本，例如检索任务里，query侧是"task: search result | query: {content}"，doc侧是"title: {title | 'none'} | text: {content}"

3个loss：

* 基于inbatch负例的NCE：

$$
\mathcal{L}*C=\frac{1}{B} \sum*{i=1}^B\left\[-\log \frac{e^{\operatorname{sim}\left(\mathbf{q}\_i, \mathbf{p}\_i^{+}\right) / \tau}}{w\_i e^{\operatorname{sim}\left(\mathbf{q}*i, \mathbf{p}*i^{-}\right) / \tau}+\sum*{j=1}^B \mathbb{1}*{\mathrm{TN}}(i, j) e^{\operatorname{sim}\left(\mathbf{q}\_i, \mathbf{p}\_j^{+}\right) / \tau}}\right]
$$

其中的sim是cosine相似度，而$$\mathbb{1}\_{\mathrm{TN}}$$把重复样本里的false negatives mask掉(其实就是保留batch内其他query的正的doc，还有当前query的其他正的doc)。另外，$$w\_i=\exp \left(\alpha \operatorname{sg}\left(\operatorname{sim}\left(\mathbf{q}\_i, \mathbf{p}\_i^{-}\right)\right)\right)$$表示一个hard negative的难度，$$\alpha$$是个超参，设成5

$$
\mathbb{1}\_{\mathrm{TN}}(i, j)= \begin{cases}0 & \text { if } q\_i=q\_j \text { or } p\_i^{+}=p\_j^{+} \ 1 & \text { otherwise } .\end{cases}
$$

* global orthogonal regularizer(GOR)的loss：

来自[Learning spread-out local feature descriptors](https://arxiv.org/abs/1708.06320)，可以让emb在emb空间内尽量展开，一方面对量化更鲁棒，另一方面也更方便ann检索。其实就是让随机挑选的一个pair对在统计意义上接近于从单位球面上的均匀采样，论文中衡量的是mean和二阶矩(second moment)，这里只用了二阶矩，因为发现二阶矩接近的时候，mean自然也会更接近。如下，对query间和正样本间均做了二阶矩的约束。

$$
\mathcal{L}*{\mathcal{S}}=\frac{1}{B(B-1)} \sum*{i, j \in \mathcal{B}: i \neq j}\left(\mathbf{q}\_i^{\top} \mathbf{q}*j\right)^2+\frac{1}{B(B-1)} \sum*{i, j \in \mathcal{B}: i \neq j}\left(\mathbf{p}\_i^{+\top} \mathbf{p}\_j^{+}\right)^2
$$

* embed distill loss

来自[EmbedDistill: A Geometric Knowledge Distillation for Information Retrieval](https://arxiv.org/abs/2301.12005)，看着好像就是teacher和student的emb算一下L2距离，对query间、正样本间、hard负样本间均算这个loss：$$\mathcal{L}*{\mathcal{D}}=\mathcal{L}*{\mathcal{D}}^{\mathrm{Q}}+\mathcal{L}*{\mathcal{D}}^{\mathrm{P}^{+}}+\mathcal{L}*{\mathcal{D}}^{\mathrm{P}^{-}}$$

此外，NCE和GOR的loss也通过MRL作用到了各个子emb(512/256/128)上

训练的trick：

* Encoder-Decoder Training：用如上的T5Gemma方式改成enc-dec结构，然后在gemma3的预训练数据上通过UL2（[Ul2: Unifying language learning paradigms](https://arxiv.org/abs/2205.05131)）进行预训练，然后拿这个encoder来用
* Pre-finetuning：用大量的无监督语料训练，加大batch size以充足的emb负例，并让梯度更稳定。任务覆盖了问答、句子相似度、代码检索、网络搜索等。
* Finetuning：高质量的数据，小的batchsize，加了hard negative，让batch内的样本更难。将任务分成三类：任务多样性（task diversity）、语言多样性（language diversity）、编码能力（coding capability），拿gemeni embedding工作里通过grid search找到的混合比例作为贝叶斯优化的种子，还从Dirichlet分布中随机采样10组不同的混合比例，形成多个版本的数据集（即不同任务侧重不同）。
* Model Souping：用这些数据集分别训练模型，最后再把这些模型的权重平均得到最终的模型。结果就是最终的模型泛化能力更强，在各个任务上都比单个模型表现更好。
* Quantization-Aware Training：3种类型的权重表示: int4 per-block, int8 per-block, and mixed-precision per-channel，用QAT训练

效果：

* 在MTEB的多语言、英语和代码榜单上，是5亿参数以下模型里的第一名，而且是断层领先，性能甚至能和一些接近它两倍大的模型相抗衡。
* 性能在权重被量化到int4/int8，或者嵌入维度被砍到128维时，依然保持得很稳定

## LLM+搜索

### Pinterest的搜索相关性优化

[Improving Pinterest Search Relevance Using Large Language Models](https://arxiv.org/pdf/2410.17152)

### Google的BlockRank

[Scalable In-context Ranking with Generative Models](https://arxiv.org/pdf/2510.05396)

针对ICR微调的LLM注意力中存在的固有且可利用的结构：

* 文档间块稀疏性：注意力在同一文档块内密集,但在不同文档间稀疏;
* 查询-文档块相关性：中间层中某些查询词与文档块之间的注意力分数与该文档的实际相关性高度相关。

BlockRank通过以下方式改进LLM的注意力操作：

* 在架构上强制实现观察到的文档间块稀疏性,将注意力复杂度从二次降至线性，且不损失性能;
* 在微调过程中通过辅助对比训练目标，优化真实相关文档的查询-文档块相关性，提升检索效果。

### Meta的SIRA

[SIRA: Superintelligent Retrieval Agent for Next-Generation Information Retrieval](https://arxiv.org/pdf/2605.06647)

<https://github.com/facebookresearch/sira>

复习BM25，其中t是query里的term：

$$
\operatorname{BM25}(q, d)=\sum\_{i=1}^n \underbrace{\log \left(1+\frac{N-n\left(q\_i\right)+0.5}{n\left(q\_i\right)+0.5}\right)}\_{\operatorname{IDF}\left(q\_i\right)} \cdot \frac{f\left(q\_i, d\right)}{f\left(q\_i, d\right)+k\_1\left(1-b+b \cdot \frac{|d|}{\operatorname{avgdl}}\right)}
$$

* 只看query里的切词，所以不理解“登山鞋”和“徒步鞋”语义相近，除非你提前做同义词扩展
* $$IDF(t)$$：决定了越稀有的词，权重越高，是log(总文档数 / 包含该词的文档数)
* $$f(t,d)$$：词在文档里出现越多，相关性越高，但会饱和，即公式中$$f / (f + something)$$能避免一个文档靠疯狂重复关键词作弊。
* $$|d| / avgdl$$：因为长文档天然更容易命中query里的词，所以要惩罚长文档。$$|d|$$是当前文档长度，$$avgdl$$是平均文档长度。

DF filter：根据Document Frequency（文档频率）来过滤，形如：

```
DF = 0：过滤，索引里不存在
DF < 10：可能过滤，太稀有，可能是噪声
DF > 1,000,000：过滤，太常见
中间：保留
```

目前主要有2种搜索方式：

* dense检索：in-domain supervision（依赖大量域内监督，很吃域内标注/交互日志；而 LLM 搜索时代点击监督不一定可靠），可控性不好（例如难以严格满足must-have/must-not-have这种约束，而这是BM25这种lexical retrieval的优势）
* 多步agent：每一轮都要llm和retriever，很慢，而且检索上下文依赖强

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3b80ccfcece44648f3dc5b4625195d706ba8fdf8%2Fsira-compare.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c11a3f1e269ac4214cbcd92bd17b6875d6b9c842%2Fsira.png?alt=media)

* 离线：document-side enrichment
  * 对每篇文档，让frozen LLM读文档，补充“用户可能会用来搜这篇文档、但文档原文里没有”的词，比如同义词、缩写、别名、领域表达。
  * 然后用DF filter过滤太常见、没区分度的词，剩下的词作为atomic n-gram entries加进倒排索引。
* 在线：query-side enrichment
  * 用户query来了以后，LLM先预测“相关证据文档里可能出现、但 query 里没写出来”的词。
  * 然后也用DF filter做校验：词必须在索引里出现，并且不能太常见。
  * 最后做一次weighted BM25：$$score(d) = BM25(q\_{orig}, d) + w \* BM25(q\_{exp}, d)$$

### Linkedin的MixLM

[MixLM: High-Throughput and Effective LLM Ranking via Text-Embedding Mix-Interaction](https://arxiv.org/pdf/2512.07846)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b95608424b4c058d5e7207ca95e201b984abea73%2Fmixlm1.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e745290b1e07d34923618cfab6fda92454aa96ba%2Fmixlm2.png?alt=media)

### Linkedin的Semantic Search

[Semantic Search At LinkedIn](https://arxiv.org/abs/2602.07309)

#### 整体架构

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6a76e7935bfed932b1cbd21d1a81bddd413adffd%2Fslm-ranking.png?alt=media)

prompt：prefix+context(query+用户特征)+document+suffix

相关性训练：用oracle（8B LLM）来定义和评估相关性策略，并标注出高质量数据集。训一个SLM(Small Language Model，0.6B)来预估oracle的打分

* domain reasoning蒸馏：用forward/reverse KL来蒸馏teacher的reasoning文本和打分
* soft-label微调：将oracle的打分映射到$$\[0,1]$$，再训一个2分类的yes/no概率。
* ranking loss：在list-wise数据上sft，每个query包括top-k的EBR（emb-based检索，即召回候选）文档和k个随机文档
* chat-template inference interface：chat-template里强调这是一个二分类相关性问题，包括query和紧凑的候选（title/公司/职级等），推理时取第一个yes/no的logit来用

按这个训练过程训了2个相关性模型：

* 拿oracle的打分先训一个1.7B的teacher
* 再训一个0.6B的student，只学teacher打分，不学oracle

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-976490e7074f239837d433d74a2df2a7e1baa55f%2Fslm-ranking2.png?alt=media)

同样地，还拿来训了一个用户engagement的teacher，多分类（click、apply、dismiss、long-dwell、connect、follow、message等），发现人肉拍权重对权重大的task是有收益的

上面2个teacher一起，来蒸馏出SLM

* 先用一个相关性slm热启，再让它去学所有techer，主要学engagement目标，对相关性加一个小的权重
* 叠加特征工程有进一步提升

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a5d9cd8fdc0690069477e66a94cc8a40fcb79cb3%2Fslm-ranking-ablation.png?alt=media)

还做了loss mask，即一些很sparse的正例很容易被淹没，因此对于每个正例，只保留它所在那些query的样本来做负例，如图

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-115d07799baae216463526bfd173eaa0eefa6f10%2Fslm-ranking-loss-mask.png?alt=media)

还加了校准，即（[LiRank: Industrial Large Scale Ranking Models at LinkedIn](https://arxiv.org/pdf/2402.06859)）里的Isotonic Calibration Layer（保序回归）

特征工程：

* summarization：参考[Rec-R1: Bridging Generative Large Language Models and User-Centric Recommendation Systems via Reinforcement Learning](https://arxiv.org/pdf/2503.24289)进行了RL，1.7B的actor，engagement teacher当成reward model。然后拿这个来产出用户profile的summary
* 数值型特征：一些二值型特征和历史ctr这种，另外，数值型特征只保留小数点最后2位也没有损失

#### 语义召回

架构参考[LiNR: Model Based Neural Retrieval on GPUs at LinkedIn](https://arxiv.org/abs/2407.13218)

从1.3B候选里选1000条，用fine-tuned embedding models和in-GPU retrieval-asranking (RAR) distance models来对全库同时优化相关性和engagement，双塔：

* infonce：用相关性label构造正负例
* 还把多个个性化特征(公式里的f)加权，直接加到q,d的cosine上：$$S(q, d)=w\_0\left\langle e\_q, e\_d\right\rangle+\sum\_{i=1}^n w\_i f\_i(q, d),$$，然后这个score同时学相关性label和engagement label：$$\mathcal{L}*{\mathrm{RAR}}=\lambda \mathcal{L}*{\mathrm{BCE}}\left(S, L\_R\right)+(1-\lambda) \mathcal{L}\_{\mathrm{BCE}}\left(S, L\_E\right)$$

serving：GPU加速的exhaustive retrieval stack（暴力全库计算），先做了一些属性过滤、然后压缩向量维度

#### 架构优化

还进行了一系列软硬件协同优化，包括结构化剪枝、离线上下文摘要压缩、文本与Embedding混合交互，以及一个专门为打分优化的、仅执行Prefill的推理栈。在固定的延迟约束下，将排序服务的吞吐量提升了75倍以上，同时保持了接近教师模型的NDCG性能。

### 百度的Agent4Ranking

[Agent4Ranking: Semantic Robust Ranking via Personalized Query Rewriting Using Multi-agent LLM](https://arxiv.org/pdf/2312.15450)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5891af1fcfdf5a249b3fff5da70bc69a95df0f7e%2Fagent4ranking-arch.png?alt=media)

其中的rewrite模块如下，搞4个agent，模拟4个人群的人与LLM对话，最终得到符合人群特点的rewrite

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b30f41aa29446eeb7338982dbbd77e0b04b8ab0c%2Fagent4ranking-rewrite.png?alt=media)

其中的rank模块如下，是一个bert，输入原始query和4个rewrites，加上target item，MMOE，算5个query间的js散度(robust loss)，以及综合输出和label的accuracy loss

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b7e87967688917ed886dd46d39a5d5e100ff4f33%2Fagent4ranking-rank.png?alt=media)

### 百度的搜索广告召回

[搜索广告召回的生成式革新](https://mp.weixin.qq.com/s/q4-KJvmroyIAlDtjtRMKIw)

### 百度的AI搜索

[Towards AI Search Paradigm](https://arxiv.org/abs/2506.17188) ..63页

该采用由多个LLM驱动的智能体构成的模块化体系(Master、Planner、Executor和Writer)，能够动态适应从简单事实查询到复杂多阶段推理任务的各类信息需求。这些智能体通过动态协同的工作流程，评估查询复杂性，在Master的判断和指导下对应不同任务的特性的智能体动态组合，并针对复杂任务将问题分解为可执行的任务,并协调使用各种工具进行任务执行与内容合成。

### 百度的RELATE

[RELATE: A Reinforcement Learning-Enhanced LLM Framework for Advertising Text Generation](https://arxiv.org/pdf/2602.11780)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bc04d94f0dd161dcc9657be0bff6aac13bbf9692%2Frelate.png?alt=media)

基于qwen3，参考grpo，设计了token-level和sentence-level的reward

### 美团的IterQR

[IterQR: LLM-based Iterative Query Rewrite for E-commerce Search](https://arxiv.org/pdf/2504.05309)

### 美团的RTD

[From Reasoning LLMs to BERT: A Two-Stage Distillation Framework for Search Relevance](https://arxiv.org/pdf/2510.11056)

Reasoning-then-Distilling (RTD)

### 阿里搜索广告

[阿里妈妈搜索广告2024大模型思考与实践](https://mp.weixin.qq.com/s/hgs_BzFZdjrDSbf9d74ilA)

### 快手的OneSearch

[OneSearch: A Preliminary Exploration of the Unified End-to-End Generative Framework for E-commerce Search](https://arxiv.org/pdf/2509.03236)

### 快手的OneSug

[OneSug: The Unified End-to-End Generative Framework for E-commerce Query Suggestion](https://arxiv.org/pdf/2506.06913v1)

<https://zhuanlan.zhihu.com/p/1916467569960923848>

prefix->query的场景

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5fff07c5aaa15d27700e1c36e45082b1a994612a%2Fonesug.png?alt=media)

### 快手的GREAT

视频落地页里的搜索词推荐

[GREAT: Guiding Query Generation with a Trie for Recommending Related Search about Video at Kuaishou](https://www.arxiv.org/pdf/2507.15267)

建库：高消费价值的优质query，天级更新，构建字典树（Trie）

* 训练：增加NTTP（Next-Token in Trie Prediction）任务(其实就是同层的每个节点都算下logp)
* 推理：
  * 解码时字典树实时地引导下一个token生成
  * 还引入了一个后处理模块，过滤低质量内容

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-84567112de59451414aa30feb79093da175bdc8c%2Fgreat.png?alt=media)

### 字节的SUMMA

[SUMMA: A Multimodal Large Language Model for Advertisement Summarization](https://arxiv.org/pdf/2508.20582)

搜索广告

### 小红书的GDR

[小红书搜索：生成式检索的探索与实践](https://mp.weixin.qq.com/s/yApGxCGxjWnZQu8PoO9Qeg)

[Generative Dense Retrieval: Memory Can Be a Burden](https://arxiv.org/abs/2401.10487)

### LightRetriever

ICLR2026，[LightRetriever: A LLM-based Text Retrieval Architecture with Extremely Faster Query Inference](https://arxiv.org/abs/2505.12260)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b02f277240a155e304d74d810f24f1e46e745e5b%2Flightretriever.png?alt=media)

doc侧用完整LLM，query侧（假设query有n个token）做了如下精简：

* dense检索：
  * query的每个token分别和prompt的tokens拼一起，得到n个token序列，各自过LLM，再avg pooling得到query向量去检索。
  * serving的时候可以把prompt x 词表过完LLM的emb缓存起来，直接查表

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a7238def3e90d3a20e347623d4f89ec45e50b6bc%2Flightretriever-dense.png?alt=media)

* sparse检索：
  * 没有prompt了，将query的每个token直接映射成词频，doc过完llm后的emb也映射到词表大小，然后去做对比学习。
  * serving时建的是倒排索引，即key是词，value是一个doc的list，按词频之类的倒排，query也直接用词频向量表示，query每个词去查倒排对应的doc list，再merge起来

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-32186e162aa93a72a55b5fe097d19ccf0bb106f3%2Flightretriever-sparse.png?alt=media)

## LLM对算法提效

### Google的自进化推荐系统

[Self-Evolving Recommendation System: End-To-End Autonomous Model Optimization With LLM Agents](https://arxiv.org/pdf/2602.10226)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3dad1f14ab0442fa94114530d5d69bb9d349399a%2Fself-evolving-recsys.png?alt=media)

fast内层循环(offline agent)：输入当前排序模型配置和效果给llm，走think-code-verify循环，自己改代码（layer、优化器、loss、label等），然后在离线数据集上训练模型并重新改代码。有如下3类角色

* Optimizer：使用工具compute\_loss，迭代优化器、超参（bs/动量等），看不同配置下训出来模型的loss差异
* Architecture：使用工具compute\_loss，迭代网络结构
* Reward：使用工具run\_sql\_query，自己分析各label和特征的分布，设计更好的label

slow外层循环(online agent)：

* offline agent产出的模型配置+人工设计的模型配置
* 选择模型用于训练：过滤掉一些模型，例如编译有问题、模型太大但现有数据不够收敛的模型
* 训练模型
* 自动开在线实验并监控，当指标出问题时会自动停实验
* 记录实验效果，可以给offline agent用

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-25fade98593c6442f9dd455a265b519494b22894%2Fself-evolving-recsys-prompt.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-404e3aa1d932008ae39de6558ab9b200f6279cc9%2Fself-evolving-recsys-modelsize.png?alt=media)

不同llm的效果差异（越小效果越好）：gemini pro比flash好，角色设置是有用的，对context进行裁剪效果会变差

### Google的AgenticRecTune

[AgenticRecTune: Multi-Agent with Self-Evolving Skillhub for Recommendation System Optimization](https://arxiv.org/pdf/2604.26969)

[推荐算法工程师要失业了？谷歌让AI自己给自己“调参”，效果竟然碾压人类专家！](https://mp.weixin.qq.com/s/4ySDBeIEVRJorA09reUd3w)

粗排、精排、重排融合公式的自动调参

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-00dfffa90befcff9f1596d284c042cc008d61943%2Fagenticrectune.png?alt=media)

Reasoning Loop：

actor和critic的prompt：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-af6e8879afdb60ac66a4c31df788eb5542db127e%2Factor-critic-prompt.png?alt=media)

### Google的RecEvolve

[RecEvolve: A Knowledge-Driven Autonomous Agent System forRecommender Systems](https://arxiv.org/pdf/2609.01622)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-dea191e7de9c492dc61f9d035a0b6f24585123b7%2Fauto-research-lifecycle.png?alt=media)

* hypothesis formulation: 分析现有模型瓶颈，并给出模型结构修改建议
* pre-excecution validation: 类似质量gate，在真正提交资源前验证计划的可行性
* automated implementation: 在独立分支里自动实现相关idea的代码
* empirical evaluation & synthesis: 模型训练，并合成结论，更新中心化的知识库

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e740cd97b807472747f46d0e106a23b2323602f5%2Fknowledge-driven-orchestration.png?alt=media)

多agent编排框架：有一个中心化的orchestrator，分配任务给specialized的subagents（ideator, critic, coding agent），

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-385cddb401e7f50604a60082b0d20bacb6e37239%2Frecevolve.png?alt=media)

### Meta的KernelEvolve

[KernelEvolve: Scaling Agentic Kernel Coding for Heterogeneous AI Accelerators at Meta](https://arxiv.org/pdf/2512.23236)

### Meta的REA

[Ranking Engineer Agent (REA): The Autonomous AI Agent Accelerating Meta’s Ads Ranking Innovation](https://engineering.fb.com/2026/03/17/developer-tools/ranking-engineer-agent-rea-autonomous-ai-system-accelerating-meta-ads-ranking-innovation/)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a04fb4b742435e62ea4bca8edd7e890d5229f191%2Frea-1.png?alt=media)

基于内部的AI agent框架[Confucius Code Agent: Scalable Agent Scaffolding for Real-World Codebases](https://arxiv.org/abs/2512.10398)构建了REA，该框架专为复杂的多步骤推理任务而设计。它提供了强大的代码生成功能和灵活的SDK，可与Meta的内部工具系统集成，包括作业调度器、实验跟踪基础设施和代码库导航工具。

* 历史洞察数据库：一个精心整理的过往实验资料库，能够从以往的成功和失败中学习和识别相关模式。
* ML研究代理：一个深度研究组件，利用Meta的历史洞察数据库，调查基线模型配置并提出新的优化策略。

在执行任何计划之前，REA会提出详细的探索策略，估算GPU计算总成本，并与工程师确认方案。典型的多阶段计划分为三个阶段：

* 验证：对来自不同来源的各个假设进行并行测试，以建立质量基准。
* 组合：将有前景的假设结合起来，以寻求协同改进。
* 优化（密集优化）：积极探索最有希望的候选方案，以在批准的计算预算内最大限度地提高结果。

当REA遇到故障（例如基础设施问题、意外错误或次优结果）时，它会在预定义的安全机制范围内调整计划，而不是等待人工干预。它会参考常见故障模式的运行手册，做出优先级排序决策（例如排除出现明显内存溢出错误或训练不稳定信号（如损失激增）的作业），并从根本上调试初步的基础设施故障。这种弹性对于维持长期任务的自主运行至关重要，因为工程师只需提供定期监督，而无需持续监控。

REA运行采用严格的安全措施。它仅基于Meta的精排模型代码库。工程师通过预先检查清单授予明确的访问权限，REA还会预先确认计算预算，并在达到阈值时停止或暂停运行。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4bb0f60d8579284ecc0a713c3c0f819c0b8e48b8%2Frea-2.png?alt=media)

REA由两个相互关联的组件构成：REA规划器和REA执行器，并由一个共享的skill、知识和工具系统提供支持。该系统提供机器学习功能、历史实验数据以及与Meta内部基础设施的集成。它们共同直接实现了代理的三大核心功能。

* 长周期自主性由执行流程驱动：工程师与假设生成器协作，通过REA规划器创建详细的实验计划。该计划导出到REA执行器，执行器通过代理循环和等待状态管理异步作业执行，在训练运行期间进入等待状态，并在完成后恢复运行并返回结果，而无需在长达数周的工作流程中持续进行人工监控。
* 高质量、多样化的假设生成由知识流驱动：当执行器完成实验时，专用的实验记录器会将结果、关键指标和配置记录到集中式的假设实验洞察数据库中。这种持久记忆会积累代理运行完整历史中的知识。假设生成器利用这些洞察来识别模式，从之前的成功和失败中学习，并为后续的每一轮提出越来越复杂的假设，从而形成闭环，并随着时间的推移不断提升系统的智能。
* 弹性执行贯穿于所有流程：当执行器遇到故障、基础设施错误、内存不足信号或训练不稳定时，它会查阅常见故障模式的运行手册，并应用优先级逻辑在预定义的安全范围内自主调整。然后，它会恢复规划器的运行，并提供可操作的结果，而不是向工程师发出例行中断通知。

### Meta的GEARS

[Decoding ML Decision: An Agentic Reasoning Framework for Large-Scale Ranking System](https://arxiv.org/pdf/2602.18640)

GEARS (Generative Engine for Agentic Ranking Systems)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0f6275e52b6d5d5ec0530cf584b166fd8886a437%2Fgears.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-db2af7a83617382444212c0dffe4426f0843135b%2Fgears-algo.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-99126f7dae4158c25d96483a2e00db37eaf8d067%2Fgears-2.png?alt=media)

### Meta的CORAL

[CORAL: An LLM-Native Harness for Production Recommender Systems](https://arxiv.org/pdf/2609.02730)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9ee759ee7050f89c91b7ad58c7f0bbca6749e1a9%2Fcoral-harness.png?alt=media)

### Meta的A-MLE

[Agentic ML Exploration (A-MLE) for Ads Ranking](https://arxiv.org/pdf/2609.08248v1)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e84e6b791c6e41073102217d978c4ab2a32985ae%2Fa-mle.png?alt=media)

### 虾皮的Sortify

[Let the Agent Steer: Closed-Loop Ranking Optimization via Influence Exchange](https://arxiv.org/pdf/2603.27765v1)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-92935c264fdad39234fca98be228b5ebf7b46eb0%2Fsortify1.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ab9e88830fde664cb2ba0323ade9bde9c6d5a75c%2Fsortify2.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7ae923e80693b5d7da3ac81b12a003d24956644a%2Fsortify-arch.png?alt=media)

写得花里胡哨的，核心

1. 搭了个自动的调参框架（很久以前的AutoML做的事情），
2. 中间拿llm帮忙生成了2个参数去改intercept和penalty multiplier
3. 历史调参状态、episode、更新记录这些核心记忆放在Memory DB里；搜索出来的参数会通过Redis发布。

2个channel：

* Belief channel：其实就是各指标的离线to在线的校准，gmv在线=gmv离线\*slope+intercept
* Preference channel：核心是最大化gmv的uplift，但会挤压其他目标（违反约束的会加一个惩罚项，就是下面的penalty）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7001fd17c7e8af8d564e1e849273a3a0dec56f94%2Fsortify-llm.png?alt=media)

如图，llm

* 输入是一个json，即历史调参和ab效果，还有在离线效果，还有当前penalty权重
* 输出是2个数，一个是intercept的变化量，一个是penalty的缩放范围

### 阿里的EvoRec

[EvoRec: Self-Evolving Agentic Recommender Systems](https://arxiv.org/pdf/2606.28368)

### autoresearch总结

[AutoResearch怎么设计？四种常见循环，一套通用框架](https://mp.weixin.qq.com/s/nOfZsQobBh1MK7_7ZarEwg)

#### 线性循环 Keep-or-Discard

代表系统：Karpathy [autoresearch](https://github.com/karpathy/autoresearch)（2025），每次尝试一个想法，如果结果更好就保留，否则回退。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9fc96ab503ae2cf4ab2ac0176a78e4a6f7fded5e%2Fkeep-or-discard.png?alt=media)

局限：

1. 它无法并行探索多个方向；
2. 失败实验的经验没有被结构化保存（可能反复尝试同一个idea死循环）；
3. 短时间约束容易让框架陷入局部最优；
4. 只看最终指标这个标量反馈无法传达"为什么失败"，可解释性不够。

#### 树搜索循环搜索

代表系统：[AIDE](https://arxiv.org/abs/2403.17373)（2024）、[AI Scientist v2](https://github.com/SakanaAI/AI-Scientist-v2)（2025）

#### 遗传进化池循环

代表系统：[FunSearch](https://storage.googleapis.com/deepmind-media/DeepMind.com/Blog/funsearch-making-new-discoveries-in-mathematical-sciences-using-large-language-models/Mathematical-discoveries-from-program-search-with-large-language-models.pdf)（2023）、[AlphaEvolve](https://arxiv.org/abs/2506.13131)（2025）、[GEPA](https://arxiv.org/abs/2507.19457)（2025）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7eb4bb6cf53427c38de93889c4e0764adaeb0fe9%2Fgepa.png?alt=media)

遗传进化的核心思想来自生物演化：维护一个候选种群，通过选择优秀个体、对其施加突变（在这里由 LLM 完成）、评估后代的适应度，逐代推动种群向更优方向进化。

与树搜索不同的是，进化池中的个体之间没有严格的父子拓扑——任何个体都可以被选为突变的起点，多个个体可以被交叉组合。

#### 异步多Agent进化循环

代表系统：[CORAL](https://arxiv.org/abs/2604.01658)（2026）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-20ce354bc2fde99abaed10eb558041509dcb7da0%2Fcoral.png?alt=media)

使用多个Agent各自独立运行完整的搜索循环，通过共享持久记忆间接协调，无需任何显式通信协议。

共享持久记忆以文件系统的形式实现，分为三个目录：attempts/存储所有历史评估记录（JSON 格式，按 commit hash 索引）、notes/存储观察和反思（Markdown 格式，支持合并和分类）、skills/存储可复用的过程和工具（包含自然语言描述和可执行脚本）。

每个 Agent 通过符号链接访问共享记忆，按需读取以避免上下文过载，并且 Agent 可以主动整理和重组记忆结构。

## 传统推荐模型

### Google的LTV——slateQ

[SlateQ: A Tractable Decomposition for Reinforcement Learning with Recommendation Set](https://storage.googleapis.com/gweb-research2023-media/pubtools/5096.pdf)

在ranking阶段，引入长期目标

### Google的推荐生态系统

[Modeling Recommender Ecosystems: Research Challenges at the Intersection of Mechanism Design, Reinforcement Learning and Generative Models](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/e00cc0ce4480c15339b7798943560ad1a0d593ce.pdf)

### Google的发现性

[Diversifying by Intent in Recommender Systems](https://arxiv.org/pdf/2405.12327)，涨了dau等指标

### Google的item冷启

[Item-centric Exploration for Cold Start Problem](https://arxiv.org/pdf/2507.09423)

就是对冷启的item用beta分布(汤普森采样)去做ee。依据就是beta分布里的特点：采样出来的p，当展现很少的时候很大，即更偏向探索；展现比较多的时候，p接近于ctr，更偏向利用

* alpha+点击数，beta+展现未点击数去更新
* 采样的时候卡了一个阈值，如果$$p\left(\mathrm{\~S}*{+} \mid \mathrm{u}, \mathrm{i}\right)<\mu*{\mathrm{i}}-2 \sigma\_{\mathrm{i}}$$，就相当于在置信区间之外，扔掉

和meta在2023年的user-centric ranking（[Breaking the Curse of Quality Saturation with User-Centric Ranking](https://arxiv.org/pdf/2305.15333)）没啥关系

### Google的熟悉度消偏

[Learning to Alleviate Familiarity Bias in Video Recommendation](https://arxiv.org/pdf/2602.07987)

familiarity bias（熟悉度偏置）：用户因为本来就熟悉某些内容/频道/创作者，更容易给高反馈，模型再学到这种反馈后，就会继续把这些“老熟人”推得更猛，结果就是推荐越来越重复，新内容和新作者更难被看到。

挖掘一些熟悉度特征，然后用如下2种方式预估bias：

* 离散/低维特征：把熟悉度特征分桶，比如“该频道历史看过0次、1–2次、3–8次……”之类，然后对每个bucket统计一个经验均值，作为校正因子
* 连续/高维特征：用一个很小的神经网络去预测原始精排分。

生效方式其实很简单，就是加了个消偏，精排分除以bias预估值。

### Google的HA-MOE

[Heterogeneous Ranking in Industrial-Scale Recommender Systems: A Case Study](https://arxiv.org/pdf/2607.27577)

发现频道里有Web文章、长视频、短视频、UGC、用户关注的创作者内容、商品内容、AI摘要卡片等多体裁，如何在同一个模型里一起建模，并缓解跷跷板和多数类型偏置的问题

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-685103f96090add4deb04fb2b6b41294e02db042%2FHA-MoE.png?alt=media)

异质信号h：

* content\_type
* 是否来自关注的创作者
* 是否为商品内容
* 是否为 AI 增强卡片
* 其他内容结构和上下文属性

模型结构：

* ha-gating：输入原ranking特征+h，得到一个gating值
* HDLM（Heterogeneity-Driven Linear Modulation）：每个expert的输出会用h再做一下线性缩放和平移：$$\tilde{E}\_n(x, h)=\gamma\_n(h) \odot E\_n(x)+\beta\_n(h)$$

最终loss是pointwise的bce加上pairwise的ranknet(同一用户session里的正负反馈)

还搞了个DL-AUC，，lambda设置成0.8

$$
\text { DL-AUC }=\lambda \cdot \text { Micro-AUC }+(1-\lambda) \cdot \text { Macro-xAUC }
$$

* Micro-AUC：衡量整体排序效果
* Macro-xAUC：对不同内容类型之间的正负样本排序分别计算xAUC(cross auc)，再等权平均（详见原论文）

LENS(Latent Expert Network Specialization)：监控专家是否真正分工

* Activation Slicing：将gate激活按“任务x内容类型x专家”切片并归一化，观察：
  * 通用任务是否合理共享专家
  * 格式相关任务是否形成内容类型特定的专家使用模式
  * 是否发生单专家垄断
* Permutation-Invariant Expert Matching (PIEM)：不同训练轮次中，专家编号可以任意交换，所以不能直接比较“专家 1”和“专家 1”。PIEM是诊断信号，不是效果指标。 独立训练得到不同专家分工不一定意味着模型变差，但单专家坍缩通常会产生明显异常。
  * 用每个专家在不同任务上的贡献构造行为分布；
  * 用 Jensen–Shannon Divergence 计算专家差异；
  * 用匈牙利算法找到两次训练之间的最优专家匹配；
  * 得到忽略专家编号置换后的结构相似度。

### Meta的SUM

[2024 META新作：SUM技术进行大规模在线用户表示，提升广告个性化效果](https://mp.weixin.qq.com/s/aX4diMBe3mRgp0cSRUX3pA)

[Scaling User Modeling: Large-scale Online User Representations for Ads Personalization in Meta](https://arxiv.org/pdf/2311.09544)

![sum](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-60e74e5a9e60bad128b8a14022664d87e73901dc%2Fsum.png?alt=media)

### Meta的Wukong

[Wukong: Towards a Scaling Law for Large-Scale Recommendation](https://arxiv.org/pdf/2403.02545.pdf)

### Meta的MTMH

[Optimizing Recall or Relevance? A Multi-Task Multi-Head Approach for Item-to-Item Retrieval in Recommendation](https://arxiv.org/pdf/2506.06239) KDD25

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9a4e5c2b919c4ebf02743c4cf0327e20c24ca154%2Fmtmh.png?alt=media)

同时考虑target item与trigger item的相关性和个性化。

多目标loss包括如下两部分：

* 互动loss：正样本是trigger和target的共现，负样本是这个用户没交互过的item，用infoNCE loss
* 内容相似loss：label是预训练的content encoder的输出向量的内积，和MTMH输出的item内积算一个kl距离

输入item特征，经过MTMH后有2个head：

* head1：只学互动loss，保证模型对高热的召回能力
* head2：学多目标loss，即同时学互动和内容相似loss

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a30e28d018c00e134edd04dfecd36408975cf266%2Fmtmh-serving-content.png?alt=media)

content encoder的训练：对比学习

* 左边是text encoder（XLM-R-Large-550M）+vision encoder（VIT-H14-632M），只训练上面的mlp，输出是128dim
* 右边是text encoder，输入concept(感觉是类似类目、tag之类的东西)，同样经过mlp输出128dim

serving：2个head分别建索引，在线同一个trigger分别从这2个索引召回，再merge

### Meta的CABB建模

[Click A, Buy B: Rethinking Conversion Attribution in E-Commerce Recommendations](https://arxiv.org/pdf/2507.15113)

在同一个session内，CABA：click A buy A；CABB：click A buy B

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-dcbbe3be8e7eba1acb03f2df159a66e10619c80d%2Fcabb.png?alt=media)

正常的模型建模的是CABA，如图，加一个tower，建模CABB（点了A，但是买了别的东西），同时加上A和B的相似度来给loss加权（那些差得很远的就当成是噪音），其中相似度的逻辑：

* 统计不同叶子类目在同一session里的共现信息
* 用传统的item-cf方法作用到叶子类目粒度，即每个叶子类目有一个长度为user数的向量，每个元素是用户对这个类目的加权求和($$w\_1\times buycnt+w\_2\times addcartcnt+w\_3\times clickcnt+ ...$$)
* 不同类目的向量算cos，但因为每个数都是正的，所以算出来的cos是0到1之间，这个就是上面用到的相似度

另外看图里是这两个目标加权得到输出，去和一个ad conversion label算loss，这个label感觉应该是session内是否购买吧

### Meta的MFLI

[Rethinking ANN-based Retrieval: Multifaceted Learnable Index for Large-scale Recommendation System](https://arxiv.org/pdf/2602.16124)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-741154595e77517c8490d3286507d2ff8948d2e4%2Fmfli1.png?alt=media)

LI（learnable index）就是在训练的时候建好索引，参考当年的tdm

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1f054adf1bb119856bfdc57c9e3417611217657a%2Fmfli.png?alt=media)

训练：

* Trigger items：用户历史UIH（user interaction history）里的触发item，经过DNN得到trigger embed，候选item也过共享的DNN得到emb
* MF-RQ：多个facet的RQ，其实就是F个角度，每个角度有一个L级码本，最终每个item emb能量化成F个index
* 训练完后产出item2index：每个item对应F个tuple，每个tuple里有L级的sid，对于这一个tuple来讲，可以用如下类似N进制的方法写成一个整数(unified index)，所以每个item最终就能对应F个数；

$$
c^f=\sum\_1^{L-1} c\_l^f \*\left(\Pi\_{k=1}^{L-l} N\_k\right)+c\_L^f,
$$

serving：

* index lookup：trigger直接查索引得到对应的index
* index selection：根据一些规则选top K个index
* item lookup：每个unified index也能对应一堆item，即图中的reverted map(有全量和增量的逻辑)
* per-index rerank：每个index取top N的item，再merge

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b17158fdcf8115c3acdbbafc49a99b7c273f1e4d%2Fmfli-rebalancing.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f1a040916dc2370733b85a56eb4e608472cd1052%2Fmfli-index-structure.png?alt=media)

### Meta的Adaptive Ranking Model

[Meta Adaptive Ranking Model: Bending the Inference Scaling Curve to Serve LLM-Scale Models for Ads](https://engineering.fb.com/2026/03/31/ml-applications/meta-adaptive-ranking-model-bending-the-inference-scaling-curve-to-serve-llm-scale-models-for-ads/)

看着应该就是正常推荐精排模型的serving优化，还是基于wukong那一套架构，只是加了一些弹性计算

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2e88820b43a076d60eb78d350fe2de5c6e4a892b%2Fmeta-adaptive-ranking-model.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bcbfb880d2ada373d42ebd09b2bf7a024ddbde93%2Fmeta-adaptive-ranking-model2.png?alt=media)

* adaptive：不是所有请求都走同样重的模型，而是根据请求、上下文、用户意图等情况，动态匹配合适的计算复杂度
* request 级别共享计算，减少重复算user侧特征
* 长序列只做一次重计算，再给多个candidate复用
* 特征预处理往GPU迁移
* kernel fusion、Grouped GEMM、选择性FP8量化
* 多卡serving，解决超大sparse/dense单卡放不下的问题

### 美团的NGA

[NGA: Non-autoregressive Generative Auction with Global Externalities for Advertising Systems](https://arxiv.org/pdf/2506.05685)

美团的生成式广告混排

$$bid\_i$$是广告主的出价，$$p\_i$$是payment，可以理解为计费，即广告主实际出的钱，一般要求$$p\_i\le bid\_i$$，平台的目标如下：

$$
\max *{\mathcal{M}} \mathbb{E}*{a \in \mathcal{A}}\[\operatorname{Rev}+\alpha \cdot \operatorname{Ord}]=\mathbb{E}*{a \in \mathcal{A}}\left(\sum*{i=1}^k p\_i \cdot \operatorname{ctr}\_i+\alpha \cdot \operatorname{ctr}\_i \cdot \operatorname{cvr}\_i\right),
$$

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-efe9522cf64e5d5cfee293f1dded4eb22b6cf4b2%2Fnga.png?alt=media)

n个广告（图中的ad），m个自然结果（图中的oi，没有bid），最终的list长度为k

generator部分：

* m+n个item emb过几层网络，k个pos emb过几层网络，中间二者会进行cross attention(快手的[Non-autoregressive Generative Models for Reranking Recommendation](https://arxiv.org/pdf/2402.06871)，即item当成k/v，pos当成query)，得到$$(m+n)\times d$$的x和$$k\times d$$的t
* x和t矩阵乘得到一个$$m+n\times k$$的矩阵，再和每个item的ctr/bid/cvr一起算出一个融合分并过softmax（这个softmax是保证当前item在所有位置上的概率和是1）得到z
* per-persition受限解码：根据各种业务规则，选择每个位置z最高的item，类似beam search，生成多个候选list，每个list有k个item

evaluator部分：

* 输入generator产出的若干个list、对应的每个item的预估分Z、还有一个self-exclusion bidding profile $$B^{-}$$(即当前list里，除了自己以外，其他k-1个item的bid)
* 上述输入经过3个网络，得到当前list的预估cvr $$\Gamma \in \mathbb{R}^{k \times 1}$$、预估ctr $$\Theta \in \mathbb{R}^{k \times 1}$$、预估payment $$\boldsymbol{p} \in \mathbb{R}^{k \times 1}$$（这个的输入包括了$$B^{-}$$），$$\operatorname{pay}\_i=\operatorname{bid}\_i \times p\_i$$

$$
\begin{aligned}
& \Theta=\operatorname{Tower}\left(X\_{\text {list }} ; Z\right) \\
& \Gamma=\operatorname{Tower}\left(X\_{\text {list }} ; Z\right) \\
& \boldsymbol{p}=\operatorname{Tower}\left(X\_{\text {list }} ; Z ; B^{-}\right)
\end{aligned}
$$

* 最终算出来的list得分如下：

$$
R=\sum\_{i=1}^k\left(\Theta\_i \times \operatorname{bid}\_i \times p\_i+\alpha \times \Theta\_i \times \Gamma\_i\right)
$$

### 美团的DSAIN

[Deep Situation-Aware Interaction Network for Click-Through Rate Prediction](https://arxiv.org/pdf/2604.12298)

### 阿里的ULIM

[User Long-Term Multi-Interest Retrieval Model for Recommendation](https://arxiv.org/pdf/2507.10097)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-dd6e0c5074ccd4d54edc7ad0ad36d2e85b8b06af%2Fulim.png?alt=media)

* Category-Aware Hierarchical Dual-Interest Learning：
  * 短序列pooling得到p，同时过self-attn，然后和user profile一起过nn
  * 长序列按类别分组，分成K段得到“长类目序列”，每段（当成k/v）和p（当成query）算target-attn，然后和user profile一起过nn，得到K个向量
  * target item和短序列的输出算内积，和长序列对应类目的emb的输出算内积
* Pointer-Enhanced Cascaded Category-to-Item Retrieval：
  * PGIN（Pointer-Generator Interest Network）：
    * pointer网络：长类目序列和短序列按时间序去重并merge得到query，然后和原始长类目序列和短序列分别算target attn，再过一个nn映射到每个类目的概率分布
    * generator网络：长类目序列和短序列各自self attn，然后分别和user profile算taget attn，过nn后映射到每个类目的概率分布
    * 通过一个p\_poi将两个分布加权求和
  * Category-Constrained Retrieval：取PGIN产出的top K个类目，产出K+1个向量，然后去并行地做ANN召回：
    * 每个类目把对应的长类目序列拿出来，得到K个向量
    * 把短序列向量取出来

最终是在淘宝秒杀app上的，有一些收益 论文中短序列最多100，不过作者没有说长序列有多长

### 阿里的DGenCTR

[基于离散扩散模型的生成式CTR预估](https://mp.weixin.qq.com/s/JKuVTu3UxYWa5rkK5v_3Ag)

[DGenCTR: Towards a Universal Generative Paradigm for Click-Through Rate Prediction via Discrete Diffusion](https://arxiv.org/pdf/2508.14500)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8f33603d4c76993c39749aae2b4f5b0751774a11%2Fdgenctr.png?alt=media)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-406f9cbb444a6c9e8799505e1e1e0a1c1fffbce9%2Fdgenctr-model.png?alt=media)

### 阿里的STORE

[STORE: Semantic Tokenization, Orthogonal Rotation and Efficient Attention for Scaling Up Ranking Models](https://arxiv.org/pdf/2511.18805v1)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7a652a534d71df8ebd907da1f87e7903aca9e870%2Fstore.jpg?alt=media)

* 将item id映射成语义id：item id高基数，语义id空间更稳定。用了OPMQ（Orthogonal, Parallel, Multi-expert Quantization），大概就是encoder里有多个专家，加了个正交loss让各专家尽量不同
* Orthogonal Rotation Transformation：低基数的特征人工分成K个组，concat后和K个正交矩阵乘，得到K个输出。同样加了loss限制各正交矩阵越远越好
* 高效Attention：就是Kimi的MoBA

sid有效缓解了one-epoch现象，这个结构有一些关于sid数和层数的scaling law

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-aaa212e4858271dbce7f5a2b4a6b069101e212e8%2Fstore-1epoch.png?alt=media)

有个疑问，这是个啥场景，gauc低可以理解，但auc咋也0.6几？

### 阿里的EST

[EST: Towards Efficient Scaling Laws in Click-Through Rate Prediction via Unified Modeling](https://arxiv.org/pdf/2602.10811)

里面有个热启的multi-epoch的范式，sparse一直load最开始那个sparse，dense每轮用最新的

参考的是[Multi-Epoch Learning for Deep Click-Through Rate Prediction Models](https://arxiv.org/pdf/2305.19531)和[Multi-Epoch learning with Data Augmentation for Deep Click-Through Rate Prediction](https://arxiv.org/pdf/2407.01607)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-37a39c8cec11018009ebae1c75b433ca9c11083a%2Fest-multi-epoch.png?alt=media)

### 快手的KuaiFormer

[KuaiFormer: Transformer-Based Retrieval at Kuaishou](https://arxiv.org/pdf/2411.10057)

### 快手的CAVE

[From Generation to Consumption: Personalized List Value Estimation for Re-ranking](https://arxiv.org/pdf/2508.02242)

重排里的list-wise evaluator，以前是对整个list给出价值预估，现在预估了一个用户退出的概率，只对退出之前的那些item的sub list预估价值

### 快手的DimeRec

[快手 | DimeRec: 扩散模型在序列推荐的应用](https://mp.weixin.qq.com/s/s21SJYsq8mRLt4zaQrAx5g)

[DimeRec: A Unified Framework for Enhanced Sequential Recommendation via Generative Diffusion Models](https://arxiv.org/pdf/2408.12153)

### 快手的EMER

[扔掉人工公式：快手EMER框架，用“会比较、自进化”的模型重构短视频推荐排序](https://mp.weixin.qq.com/s/4FQFrJxpCUvofzHotHUoqw)

[An End-to-End Multi-objective Ensemble Ranking Framework for Video Recommendation](https://arxiv.org/pdf/2508.05093)

### 快手的GoalRank

[快手GoalRank:告别G-E两阶段排序框架](https://mp.weixin.qq.com/s/X7KJz18vsqSPfhZBv6Cfiw)

[GOALRANK: GROUP-RELATIVE OPTIMIZATION FOR A LARGE RANKING MODEL](https://arxiv.org/pdf/2509.22046)

<https://github.com/Kaike-Zhang/GoalRank>

### 字节的LMN

[Large Memory Network for Recommendation](https://arxiv.org/abs/2502.05558)

### 字节的AsymDiffRec

[Asymmetric Diffusion Recommendation Model](https://arxiv.org/pdf/2508.12706)

### 腾讯的ranking loss引入

[KDD 2024 | 深入理解推荐模型中的辅助排序损失](https://mp.weixin.qq.com/s/Y4ErK09-_TSJ2m6lC6UGCA)

### Pinterest的Pinnerformer

[PinnerFormer: Sequence Modeling for User Representation at Pinterest](https://arxiv.org/pdf/2205.04507)

### Pinterest的TransAct V2

[TransAct V2: Lifelong User Action Sequence Modeling on Pinterest Recommendation](https://arxiv.org/pdf/2506.02267)

### Pinterest的2阶段训练

[Taming the One-Epoch Phenomenon in Online Recommendation System by Two-stage Contrastive ID Pre-training](https://arxiv.org/pdf/2508.18700)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c74272e31a2238c663c075f8c282f1db1c62fb98%2Fpinterest-2-stage.png?alt=media)

#### pretrain阶段

一个只有id的数据集，用的是pinnerformer里的对比学习loss，考虑了in-batch和uniform随机负例，其中$$\tau$$是可学习的温度。发现

$$
\mathcal{L}\left(u\_i, p\_i\right)=-\log \left(e^{u\_i^T p\_i / \tau} /\left(e^{u\_i^T p\_i / \tau}+\sum\_{j=1}^N e^{u\_i^T n\_j / \tau}\right)\right)
$$

发现2点：

* 这个对比学习Loss能够降低长尾item的有效维度，从而缓解过拟合问题。随着epoch变多，这个loss的hitrate\@3会变得更好，而bce则会变差（过拟合）。
* 因为模型很简单，且收敛速度变快（不用像复杂模型需要那么多数据才能收敛），所以可以使用下游任务10倍的数据来训练，即天然地可以merge更多场景的数据进来。

#### finetune阶段

给更复杂的下游模型用

* 把预训练的loss函数拿过来，直接搞成一阶段，是负的
* 拿pretrain产出的emb过来，但freeze，有1.1%的收益
* 拿pretrain产出的emb过来，同时finetune，有1.3%的收益

### Pinterest的multi-faceted预训练

[Multi-Faceted Large Embedding Tables for Pinterest Ads Ranking](https://arxiv.org/pdf/2508.05700)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1cd4905ab4f48a56a3525736f9543c4800f09cbe%2Fmulti-faceted-1.png?alt=media)

红色部分的item id的emb用的是上面那篇paper的2阶段方法，即下图的结构

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5e12c0fdba397a3206e1550abcefd1323124c1df%2Fmulti-faceted-2.png?alt=media)

第一张图里橙色的部分是下图的结构，异构的节点（user/item/广告/广告主/链接），边是有向边，包括两种：虚线是站外行为（这里是广告场景，应该就是比如去广告主的落地页里的成交类的转化），实线是站内行为。训练时给定头节点和尾节点，预测两者间是否有边以及边的类型，即link prediction。用的是知识图谱嵌入 (KGE)模型，例如TransR([Learning Entity and Relation Embeddings for Knowledge Graph Completion](https://cdn.aaai.org/ojs/9491/9491-13-13019-1-2-20201228.pdf))和TransE([Translating Embeddings for Modeling Multi-relational Data](https://proceedings.neurips.cc/paper_files/paper/2013/file/1cecc7a77928ca8133fa24680a88d2f9-Paper.pdf))。而不是graphsage，因为graphsage只是预测有没有边

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f279746869b79f252d0e617978fe2492da45891e%2Fmulti-faceted-3.png?alt=media)

这篇文章还在serving时做了cpu和gpu的分离，即emb放cpu里，gpu算计算图，这个比较常规

### Pinterest的DRL-PUT

[Deep Reinforcement Learning for Ranking Utility Tuning in the Ad Recommender System at Pinterest](https://www.arxiv.org/pdf/2509.05292)

## 工业推荐大模型架构研究地图

本文将两条原本相对独立的工业推荐研究路线放到同一分析框架中：

* Dense feature interaction 与 ranking model scaling：Wukong、RankMixer 及其后续。
* 长用户行为序列建模：HSTU、LONGER、STCA、SlimPer 及其后续。

目标不是逐篇复述，而是回答三个架构问题：

1. 计算预算应该用于异构特征交互，还是用于行为序列推理？
2. 序列特征与非序列特征应该在模型的哪个阶段融合？
3. 当一个请求包含大量候选 item 时，哪些用户侧计算可以复用？

整理范围以工业推荐、广告和搜索排序论文为主，信息更新至 2026 年 8 月。

> 名称提醒：[Hiformer](https://arxiv.org/abs/2311.05884) 是 Google 的异构特征交互模型；[HyFormer](https://arxiv.org/abs/2601.12681) 是 ByteDance 的序列与特征统一模型。两者不是同一篇工作。

### 1. 核心结论

工业推荐模型正在从两条独立路线走向统一：

```
Dense Scaling:
DHEN / Hiformer / Wukong
        -> RankMixer
        -> TokenMixer-Large / UniMixer / RankElastor / RankUp
Long Sequence:
DIN / SIM / TWIN
        -> HSTU / LONGER / STCA
        -> SlimPer / VISTA / ULTRA-HSTU
Unified Modeling:
InterFormer
        -> OneTrans / HyFormer / MixFormer / EST / INFNet / WHALE
```

最重要的判断如下。

* RankMixer 主要解决固定数量异构 feature tokens 的交互和 dense scaling，不直接解决长序列。
* LONGER、STCA、SlimPer 主要解决如何让少量 Query 高效读取长历史。
* 工业强基线常采用 `Sequence Encoder -> RankMixer`，但这是一种 late-fusion 架构。
* Late fusion 的主要损失不是“少了一次 concat”，而是 RankMixer 学到的高阶特征无法反馈给序列读取过程。
* HyFormer 和 MixFormer 的核心贡献，是把 RankMixer 式特征交互插入每一层历史读取。
* SlimPer、HyFormer、MixFormer 都属于 compact-query 路线，但 Query 的语义不同。
* HSTU、MTGR、WHALE 保留 history-to-history self-attention，质量上限通常更高，成本也更高。
* OneTrans、EST、TokenFormer 试图保留原始 token 流，同时通过 Query 缩减或稀疏 attention 控制成本。
* INFNet 使用 latent hubs 聚合后再广播回原始 tokens，是 compact bottleneck 与完整 token propagation 的折中。
* 统一模型最终都会遇到同一个系统问题：user/item 过早混合会破坏多候选请求中的用户侧复用。

可以按照“层间保留多少历史状态”理解当前主流架构：

| 类型                               | 代表模型                            | 层间保留的状态                                         | 行为之间的交互                                     | 主要取舍                |
| -------------------------------- | ------------------------------- | ----------------------------------------------- | ------------------------------------------- | ------------------- |
| Compact state                    | STCA、SlimPer、HyFormer、MixFormer | 少量 target、knowledge slot 或 feature-query tokens | 不直接维护完整 history-to-history 交互               | 激活内存低，重点建模候选与历史的相关性 |
| Compact hubs + full tokens       | INFNet                          | 少量 hub 和完整原始 tokens                             | hub 聚合后将信息广播回原始 tokens                      | 保留细粒度状态，但内存随历史长度增长  |
| Sparse or shrinking token stream | EST、OneTrans                    | 完整或逐层缩短的 token 流                                | 使用稀疏 attention，或逐层减少 Query                  | 在计算成本和序列推理能力之间折中    |
| Full sequence state              | HSTU                            | 每层完整历史 token 流                                  | 完整 causal history-to-history self-attention | 序列推理能力强，但计算和激活成本最高  |

从左到右并不是严格的模型优劣排序，而是计算分配方式的变化：

```
更多计算用于候选相关性
    -> 更多计算用于维护细粒度历史状态
    -> 更多计算用于历史 token 之间的序列推理
```

### 2. 统一分析坐标

记：

```
L: 用户历史长度
M: 非序列 feature token 数
q: compact query 数
K: latent / knowledge slot 数
D: hidden dimension
S: 模型层数
C: 同一请求中的候选 item 数
```

与其按公司或年份分类，更有效的方式是观察三个维度。

**序列状态保留程度**

第一类只传播 compact state：

```
Q_(l+1) = CrossAttention(Q_l, H, H)
```

代表模型：

* STCA。
* SlimPer。
* HyFormer 的高效配置。
* MixFormer。

它们不会在每层维护长度为 `L` 的历史 hidden states，激活内存主要由 `q`、`K` 或 `M` 决定。

第二类传播完整或近完整 token state：

```
H_(l+1) = SelfAttention(H_l, H_l, H_l)
```

代表模型：

* HSTU。
* MTGR。
* WHALE 的 HSTU branch。
* OneTrans 的浅层。

这类模型能够直接建模行为之间的顺序、共现和高阶依赖，但每层成本通常与 `L^2` 或稀疏 attention graph 相关。

第三类使用持久化摘要或 memory：

```
Long History -> Offline/Incremental Summary -> Online Ranking
```

代表模型：

* MIMN。
* DV365。
* VISTA。
* MARM。

它们把长历史计算移到离线或 nearline 阶段，在线成本最低，但候选相关性通常弱于端到端方法。

**序列与 Dense 特征的融合深度**

```
Late Fusion:
HistoryEncoder(H) -> summary
FeatureMixer([summary; F])
Alternating Fusion:
Q_l reads H
Q_l mixes with F
repeat
Monolithic Stream:
[H; F] enters one token stream
Dual Branch:
Sequence branch and dense branch remain active
fusion happens at every layer
```

对应模型：

| 融合方式                    | 代表模型                                  | 主要特征                   |
| ----------------------- | ------------------------------------- | ---------------------- |
| Late Fusion             | LONGER -> RankMixer、STCA -> RankMixer | 模块成熟，但信息流单向            |
| Alternating Fusion      | HyFormer、MixFormer、SlimPer            | compact Query 反复读取历史   |
| Monolithic Stream       | OneTrans、TokenFormer、EST、MTGR         | 交互最直接，但计算图和复用更难        |
| Dual Branch             | InterFormer、WHALE                     | 保留专用算子，融合成本较高          |
| Hub Aggregate/Broadcast | INFNet                                | 线性复杂度下保留完整 token state |

**Request-Level Reuse**

对同一用户请求中的 `C` 个候选，如果用户侧表示依赖候选 item，则计算可能重复 `C` 次。

高效架构通常约束信息流：

```
user state 不能读取 item-specific signal
item state 可以读取 user state
```

代表设计：

* HSTU 的 M-FALCON。
* LONGER 和 OneTrans 的 KV cache。
* STCA 的 Request Level Batching。
* SlimPer 的 Request-Only Optimization。
* UG-Sep 的 user-group separation。
* UI-MixFormer 的 masked HeadMixing。
* EST 的 user-candidate decoupled computation。

这说明“更深融合”和“更强复用”天然存在张力。

### 3. Dense Scaling 与 RankMixer

Dense scaling 关注的是：

> 在固定 feature token 数量下，如何通过增加模型深度、宽度和参数量，持续提升异构特征交互能力？

早期代表工作如下。

| 论文                                            | 公司        | 交互算子                                             | 主要意义                                     |
| --------------------------------------------- | --------- | ------------------------------------------------ | ---------------------------------------- |
| [DHEN](https://arxiv.org/abs/2203.11014)      | Meta      | DCN、self-attention、FM 等层次 ensemble               | 证明统一 interaction block 可以堆叠扩展            |
| [Hiformer](https://arxiv.org/abs/2311.05884)  | Google    | token-specific heterogeneous attention           | 用独立 Q/K/V 处理异构 feature spaces            |
| [Wukong](https://arxiv.org/abs/2403.02545)    | Meta      | Factorization Machine Block + Linear Compression | 建立 feature-interaction dense scaling law |
| [RankMixer](https://arxiv.org/abs/2507.15551) | ByteDance | parameter-free Token Mixing + Per-token FFN      | 将参数和 FLOPs 放在 GPU 友好的 FFN 中              |

**RankMixer 的本质**

输入为固定数量的语义 feature tokens：

```
X = [x_1, x_2, ..., x_M] in R^(M x D)
```

每个 token 沿 hidden dimension 切成多个 head：

```
x_i = [x_i^1 | x_i^2 | ... | x_i^M]
```

再将所有 token 的同一 head 拼接成新 token：

```
s_j = Concat(x_1^j, x_2^j, ..., x_M^j)
```

这个操作本质上是固定 reshape 和 transpose：

```
TokenMix(X) = Reshape(Transpose(Reshape(X)))
```

随后每个 mixed token 使用独立 FFN：

```
y_j = FFN_j(s_j)
```

RankMixer 的核心选择是：

```
异构 feature-to-feature 交互:
不用 similarity-based self-attention
参数容量:
主要放入 token-specific FFN
```

原因是 user ID、item ID、context、统计特征来自不同语义空间，向量内积未必能表示可靠相似度。

RankMixer 的优势：

* 不构造 feature-token attention score matrix。
* TokenMix 无参数，计算和通信规则稳定。
* PFFN 能隔离不同 feature subspace 的参数。
* 大矩阵计算适合 GPU，论文报告 MFU 显著提升。
* 易于扩展 Dense MoE 或 Sparse MoE。

RankMixer 的局限：

* Mixing 是固定 permutation，不随样本学习。
* Mixing 前后 token 的语义位置可能不一致，影响 residual。
* 深层网络存在梯度和训练稳定性问题。
* TokenMix 扩展有效秩，但 PFFN 可能再次压缩有效秩。
* 它只接收序列 summary，无法直接利用细粒度长历史。
* user/item token 过早混合后，不利于用户侧请求级复用。

**RankMixer 的直接演化**

| 论文                                                   | 解决的问题                   | 关键改动                                                      | 架构含义                               |
| ---------------------------------------------------- | ----------------------- | --------------------------------------------------------- | ---------------------------------- |
| [TokenMixer-Large](https://arxiv.org/abs/2602.06563) | 深度、residual、MoE 和超大规模训练 | Mixing-and-Reverting、跨层残差、辅助 loss、Sparse-Pertoken MoE、FP8 | RankMixer 最直接的工业升级                 |
| [UG-Sep](https://arxiv.org/abs/2602.10455)           | 多候选重复计算用户侧 token        | Masked information flow、可复用 PertokenAFFN、信息补偿             | 将 dense backbone 改造成 request-aware |
| [UniMixer](https://arxiv.org/abs/2604.00590)         | 固定 TokenMix 不可学习        | 将 permutation matrix 推广为结构化可学习 mixing                     | 统一 attention、TokenMixer 和 FM       |
| [RankElastor](https://arxiv.org/abs/2605.23191)      | TokenMix 扩秩不足、PFFN 秩收缩  | Parameterized Full Mixing、GLU PFFN                        | 从有效秩角度修复深层 scaling                 |
| [RankUp](https://arxiv.org/abs/2604.17878)           | 深层表示发生 collapse         | 随机拆分、多 embedding、global/task/pretrained tokens            | 从 token 组织和输入多样性提升秩                |

这些后续工作揭示了一个共同事实：

> 参数量扩大并不等于有效表示容量扩大。

TokenMixer-Large 更偏工程和深层训练；UniMixer 更偏 mixing 算子统一；RankElastor 和 RankUp 更关注表示谱与有效秩；UG-Sep 解决在线系统复用。

因此，RankMixer 路线已经从“如何堆大模型”发展为四个子问题：

```
可学习 mixing
深层训练稳定性
有效秩与 representation collapse
请求级计算复用
```

### 4. 长序列建模路线

长序列路线关注的是：

> 给定 `10^3` 到 `10^6` 条用户行为，如何在工业延迟和内存约束下提取候选相关兴趣？

主要有四类策略。

| 路线                | 代表论文                                                                                                                             | 长历史处理                              | 在线中间状态                    |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------- |
| 检索后精排             | [SIM](https://arxiv.org/abs/2006.05639)、[ETA](https://arxiv.org/abs/2209.12212)、[TWIN](https://arxiv.org/abs/2302.02352)         | 从完整历史检索 Top-K，再做 target attention  | Top-K 子序列                 |
| Offline/Memory    | [MIMN](https://arxiv.org/abs/1905.09248)、[DV365](https://arxiv.org/abs/2506.00450)、[VISTA](https://arxiv.org/abs/2510.22049)     | 增量或离线压缩成 memory/summary tokens     | 固定 memory                 |
| Compact Query     | [LONGER](https://arxiv.org/abs/2505.04421)、[STCA](https://arxiv.org/abs/2511.06077)、[SlimPer](https://arxiv.org/abs/2607.12281)  | 少量 Query 读取长 K/V                   | 短 Query 或 knowledge slots |
| Full/Near-Full SA | [HSTU](https://arxiv.org/abs/2402.17152)、[MTGR](https://arxiv.org/abs/2505.18654)、[ULTRA-HSTU](https://arxiv.org/abs/2602.16986) | 在完整或 semi-local token graph 上做序列推理 | 长度随历史增长                   |

检索路线可以扩展到极长历史，但未召回 token 无法参与后续推理。

Memory 路线在线成本最低，但摘要往往是 item-independent，可能损失候选相关细节。

Compact-query 路线保留完整历史作为只读证据库，重点计算 Query-to-History relevance。

Full self-attention 路线保留完整 token-to-token reasoning，质量潜力高，但计算和激活成本最大。

**四个关键模型**

LONGER 第一层：

```
Q = [global tokens; sampled history], length m+k
K,V = [global tokens; full/merged history], length m+L
Z_1 = CrossAttention(Q, K, V)
```

后续层：

```
Z_(l+1) = SelfAttention(Z_l)
```

因此它不是在完整 `L` 上持续做 self-attention，而是在第一层输出的 `m+k` 长度上做。

STCA：

```
Q_(l+1) = CrossAttention(Q_l, H, H)
```

每层 target state 都重新读取完整历史，不维护 history hidden states。

SlimPer：

```
Q_l = Project(KnowledgeBase_l)
R_l = CrossAttention(Q_l, all user-side tokens)
KnowledgeBase_(l+1) = MatchAndRefine(KnowledgeBase_l, R_l)
```

它将 target state 扩展成固定大小 user-item knowledge base，并加入显式 matching/refinement。

HSTU：

```
H_(l+1) = GatedCausalSelfAttention(H_l)
```

它在完整输入窗口上保留 history-to-history reasoning。原始 HSTU 为二次复杂度，ULTRA-HSTU 后续转向 semi-local attention。

这四个模型形成清晰取舍：

| 模型      |     Query 长度 | 每层重读原始历史 | history-to-history SA | 层间状态                  |
| ------- | -----------: | -------- | --------------------- | --------------------- |
| LONGER  | `m+k`，可随历史增长 | 主要在首层    | 在压缩长度上有               | sampled/global tokens |
| STCA    |           很小 | 是        | 无                     | target state          |
| SlimPer | 固定 `q` / `K` | 是        | 无                     | knowledge base        |
| HSTU    |      约等于输入窗口 | 不适用      | 有                     | 完整 token stream       |

真正的争论不是“有没有 attention”，而是：

> 是否值得为 history-to-history 交互支付接近 `O(L^2)` 的成本？

支持 full self-attention 的理由：

* 行为间存在顺序、重复、周期和高阶依赖。
* 单纯 target-to-history attention 不能先完成复杂的历史内部推理。
* HSTU 和 ULTRA-HSTU 认为 self-attention 仍有更高质量上限。

支持 compact-query 的理由：

* 排序最终只需要少量 user-item relevance 表示。
* 大量 history-to-history 计算与当前候选无关。
* 深度与历史激活大小可以解耦。
* 用户侧 K/V 更容易在候选之间共享。
* 10k 以上历史更容易满足生产延迟。

### 5. 序列与 Dense 特征的统一建模

传统生产结构通常是：

```
H -> LONGER/STCA/HSTU -> sequence summary
[sequence summary; user/item/context/cross features]
    -> RankMixer/Wukong/DCN
    -> prediction
```

这种结构的问题不是模块能力不足，而是信息流方向受限：

```
history -> summary -> dense interaction
dense interaction 无法反馈到 history retrieval
```

统一模型试图让两类信号在更深层反复交换。

| 模型                                              | 基本结构                                   | 序列状态                      | Dense 交互方式                     | 融合位置        |
| ----------------------------------------------- | -------------------------------------- | ------------------------- | ------------------------------ | ----------- |
| [InterFormer](https://arxiv.org/abs/2411.09852) | Interaction/Sequence 双分支 + Cross Arch  | 独立 sequence branch        | 独立 interaction branch          | 每层双向交换      |
| [HyFormer](https://arxiv.org/abs/2601.12681)    | Query Decoding + Query Boosting        | compact global queries    | RankMixer/MLP-Mixer 风格         | 每层交替        |
| [MixFormer](https://arxiv.org/abs/2602.14110)   | Query Mixer + Cross Attention + Fusion | feature-conditioned heads | RankMixer HeadMixing + PFFN    | 单 block 内统一 |
| [OneTrans](https://arxiv.org/abs/2510.26104)    | 单一 causal Transformer                  | Query 逐层缩短                | mixed-parameter self-attention | 单流每层        |
| [EST](https://arxiv.org/abs/2602.10811)         | LCA + Content Sparse Attention         | 完整原始 tokens               | token-specific interaction     | 稀疏统一 graph  |
| [INFNet](https://arxiv.org/abs/2508.11565)      | Hub Aggregate + Broadcast              | 完整 tokens 被反复更新           | hub-mediated interaction       | 每层双向        |
| [WHALE](https://arxiv.org/abs/2607.17017)       | Wukong + HSTU + Fusion                 | 完整 HSTU branch            | Wukong FM branch               | 每层跨分支       |

**HyFormer 与 MixFormer**

HyFormer 每层先读取历史，再增强 Query：

```
Q_hat_l = CrossAttention(Q_(l-1), K_l(H), V_l(H))
Q_l = QueryBoost([Q_hat_l; F])
```

信息流：

```
历史 -> Query -> 异构特征交互 -> 更强 Query -> 再读历史
```

其优势是多序列组织清晰：

```
watch sequence    <-> watch query
search sequence   <-> search query
purchase sequence <-> purchase query
```

不同序列不必强制拼接，跨序列交互发生在 Query Boosting 阶段。

MixFormer 每层先生成高阶特征 Query，再读取历史：

```
Q_l = QueryMixer(F_l)
Z_l = CrossAttention(Q_l, K_l(H), V_l(H))
F_(l+1) = PerHeadFusion(Z_l)
```

信息流：

```
高阶异构特征 -> 专门 Query heads -> 读取历史 -> 融合 -> 重复
```

Query Mixer 使用 RankMixer 式 HeadMixing 和 per-head SwiGLU，不用 self-attention 比较异构 feature tokens。

Cross Attention 仍然保留，因为 structured Query 与历史行为之间的相关性具有明确语义。

两者的差别：

| 维度       | HyFormer                          | MixFormer                          |
| -------- | --------------------------------- | ---------------------------------- |
| 每层顺序     | 先 Cross-Attention，后 Query Boost   | 先 Query Mixer，后 Cross-Attention    |
| Query 组织 | 每条序列可有独立 global query             | 多个高阶 feature heads                 |
| Dense 参数 | Query Boost 中的 token-specific FFN | Query/Fusion 中共享的 per-head FFN     |
| 主要目标     | 让异构信息持续增强下一层 Query                | 让 dense 与 sequence 共享可 co-scale 参数 |
| 多序列优势    | 明确且灵活                             | 论文重点更偏统一 head                      |
| 请求级复用    | 可结合 KV cache/M-FALCON             | UI-MixFormer 明确加入 mask             |

它们都可以抽象为：

```
Q_l = DenseInteraction(Q_l, F)
Q_l = CrossAttention(Q_l, H, H)
```

HyFormer 与 MixFormer 相比 SlimPer：

* 三者都只传播 compact user-item state。
* 三者都在多层中重新读取长历史。
* SlimPer 用显式 knowledge slots、matching 和 refinement。
* HyFormer 用 Query Boosting 建模跨 Query、跨序列、非序列特征交互。
* MixFormer 让 RankMixer-style heads 同时承担 dense interaction 和 sequence Query。

其他统一路线代表不同折中。

OneTrans 将所有 token 放入统一 causal stream，并逐层减少发出 Query 的 sequence tokens。

EST 保留原始 token，但删除低价值 self-interaction，只保留 non-behavior-to-behavior cross edges 和内容相似 top-K 行为边。

INFNet 用少量 hubs 聚合全局信息，再将信息广播回完整 token 流，因此避免 SlimPer 式只传播 compact state。

WHALE 不折叠两种 backbone，而是同时保留 Wukong 和 HSTU，并让 Wukong 表示逐层查询 HSTU 序列表示。

### 6. 总体对比与架构选择

**统一复杂度和状态对比**

| 模型                  | 长历史读取               | History SA   | Dense 交互             | 层间状态        | 典型序列成本          | Request Reuse |
| ------------------- | ------------------- | ------------ | -------------------- | ----------- | --------------- | ------------- |
| RankMixer           | 不直接读原始历史            | 无            | TokenMix + PFFN      | `O(MD)`     | 与 `L` 无关        | 原始版较弱         |
| LONGER -> RankMixer | 首层短 Q 读长 KV         | 压缩长度上有       | RankMixer            | `O(kD+MD)`  | `O(kL+k^2)`     | KV cache      |
| STCA -> RankMixer   | target Q 每层读历史      | 无            | late RankMixer       | 固定          | `O(SqLD)`       | RLB           |
| SlimPer             | slots 每层读全部用户 token | 无            | Match + Refine       | `O(KD)`     | `O(SqLD)`       | ROO           |
| HyFormer            | global Q 每层读各自序列    | 可配置          | Query Boost          | `O((q+M)D)` | `O(SqLD)`       | 可结合 cache     |
| MixFormer           | feature heads 每层读历史 | 无            | Query Mixer + Fusion | `O(MD)`     | `O(SMLD)`       | UI mask       |
| OneTrans            | 统一 causal stream    | 浅层有          | Self-Attention       | 逐层缩短        | 介于 full 与 cross | KV cache      |
| EST                 | 原始 token + 稀疏 graph | top-K sparse | LCA                  | `O(LD)`     | 近似线性            | 用户侧可复用        |
| INFNet              | hubs 聚合后广播          | 无 dense SA   | Hub flow             | `O(LD)`     | 线性              | 取决于 token 分组  |
| HSTU/MTGR           | 完整窗口推理              | 有            | Self-Attention       | `O(LD)`     | `O(SL^2D)`      | M-FALCON      |
| WHALE               | HSTU branch         | 有            | Wukong branch        | 双分支         | HSTU + Wukong   | 系统优化          |

表中的 Big-O 省略了 projection、FFN、head 数和 batch 相关常数，适合判断扩展趋势，不适合直接预测线上延迟。

**如何选择**

如果增益主要来自丰富 sparse、cross 和 context features：

```
优先考虑:
RankMixer / TokenMixer-Large / UniMixer
```

适合条件：

* 序列长度较稳定。
* 已有成熟 sequence summary。
* GPU MFU 和 dense 参数扩展是主要瓶颈。

如果增益主要来自 10k 级长历史：

```
成本优先:
STCA / SlimPer
部分序列推理:
LONGER
质量上限优先:
HSTU / ULTRA-HSTU
```

如果 dense 与 sequence 都重要，并且 late fusion 已成为瓶颈：

```
多序列、Query 组织优先:
HyFormer
Dense/Sequence co-scaling 优先:
MixFormer
统一 token stream:
OneTrans / EST
保留两套成熟 backbone:
WHALE
```

如果不希望丢弃原始 token state，但 full self-attention 太贵：

```
结构化稀疏:
EST
Latent aggregate + full-token broadcast:
INFNet
```

如果同一请求候选数 `C` 很大：

```
必须优先检查:
用户侧状态是否依赖 candidate
哪些 K/V、FFN 和 tokenization 可以 request-level shared
```

此时 UG-Sep、UI-MixFormer、ROO、RLB、M-FALCON 的系统价值可能高于单纯扩大模型。

**三个研究判断**

第一，feature interaction 和 sequence reasoning 需要不同归纳偏置。

```
Feature-to-Feature:
异构语义空间，固定 mixing、token-specific FFN、FM 往往更合适
Query-to-History:
相关性检索语义明确，cross-attention 往往更合适
History-to-History:
顺序和高阶依赖重要，self-attention 更强但更贵
```

第二，统一架构的价值主要来自信息流，而不是“共享一个 Transformer 名字”。

真正有效的统一应允许：

```
dense feature interaction 改变下一层 sequence query
sequence evidence 反过来改变下一层 dense representation
```

如果只是把所有输出 concat 到一起，仍然属于 late fusion。

第三，生产架构不能只看单候选 FLOPs。

实际成本还取决于：

```
候选数 C
用户侧 token 是否复制
K/V 是否可缓存
通信和 embedding lookup
激活内存
算子 MFU
稀疏路由负载均衡
```

这也是为什么 SlimPer、UG-Sep、UI-MixFormer 和 HSTU 系统优化都强调请求级计算图。

### 7. 阅读路线与论文索引

如果只读十篇，推荐顺序如下。

1. [Wukong](https://arxiv.org/abs/2403.02545)：理解 dense feature-interaction scaling。
2. [RankMixer](https://arxiv.org/abs/2507.15551)：理解 TokenMix + PFFN 和 GPU-aware 设计。
3. [TokenMixer-Large](https://arxiv.org/abs/2602.06563)：理解 RankMixer 的深层训练和 MoE 升级。
4. [HSTU](https://arxiv.org/abs/2402.17152)：理解 full sequence reasoning 路线。
5. [LONGER](https://arxiv.org/abs/2505.04421)：理解短 Query 读取长 K/V 后继续短序列建模。
6. [STCA](https://arxiv.org/abs/2511.06077)：理解 stacked target-to-history cross-attention。
7. [SlimPer](https://arxiv.org/abs/2607.12281)：理解固定 knowledge slots 和 recommendation-centric refinement。
8. [HyFormer](https://arxiv.org/abs/2601.12681)：理解 Query Decoding 与 Query Boosting。
9. [MixFormer](https://arxiv.org/abs/2602.14110)：理解 dense/sequence co-scaling。
10. [EST](https://arxiv.org/abs/2602.10811) 或 [WHALE](https://arxiv.org/abs/2607.17017)：比较稀疏统一与双分支统一。

按主题补充阅读：

| 主题                | 论文                                                                                                                                                                                                                                                                        |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Lifelong 检索       | [SIM](https://arxiv.org/abs/2006.05639)、[ETA](https://arxiv.org/abs/2209.12212)、[TWIN](https://arxiv.org/abs/2302.02352)、[TWIN-V2](https://arxiv.org/abs/2407.16357)                                                                                                      |
| Offline/Memory    | [MIMN](https://arxiv.org/abs/1905.09248)、[MARM](https://arxiv.org/abs/2411.09425)、[DV365](https://arxiv.org/abs/2506.00450)、[VISTA](https://arxiv.org/abs/2510.22049)                                                                                                     |
| Full/Near-Full SA | [HSTU](https://arxiv.org/abs/2402.17152)、[MTGR](https://arxiv.org/abs/2505.18654)、[GRAB](https://arxiv.org/abs/2602.01865)、[ULTRA-HSTU](https://arxiv.org/abs/2602.16986)                                                                                                 |
| RankMixer 后续      | [UG-Sep](https://arxiv.org/abs/2602.10455)、[UniMixer](https://arxiv.org/abs/2604.00590)、[RankElastor](https://arxiv.org/abs/2605.23191)、[RankUp](https://arxiv.org/abs/2604.17878)                                                                                        |
| 统一建模              | [InterFormer](https://arxiv.org/abs/2411.09852)、[OneTrans](https://arxiv.org/abs/2510.26104)、[TokenFormer](https://arxiv.org/abs/2604.13737)、[INFNet](https://arxiv.org/abs/2508.11565)、[EST](https://arxiv.org/abs/2602.10811)、[WHALE](https://arxiv.org/abs/2607.17017) |

最终可以用一句话概括整个技术演化：

> 工业推荐架构正在从“一个序列 encoder 加一个 feature interaction head”，演化为“用异构高阶特征持续构造 Query、分层读取长历史，并在多候选请求中显式复用用户侧计算”的统一模型。


# 1.8.llm\_o1

## O1

### CoT开山之作

[Chain of thought prompting elicits reasoning in large language models](https://arxiv.org/pdf/2201.11903.pdf)

### from r to Q\*

[这就是OpenAI神秘的Q\*？斯坦福：语言模型就是Q函数](https://mp.weixin.qq.com/s/Mz_k5ensgiuXu-3cFQ1Dkw)

[From r to Q\*: Your Language Model is Secretly a Q-Function](https://arxiv.org/pdf/2404.12358.pdf)

在DPO的基础上，引入LLM里的token-level的MDP，用二分类的preference feedback。发现了3个点：

* 尽管 DPO 是作为上下文多臂赌博机而派生出来的，但DPO模型的隐含奖励可在每个 token 层面上进行解释。
* DPO模型的likelihood search类似在decoding阶段寻找一个reward function。即在token层面的阐述方式下，经典的基于搜索的算法（比如 MCTS）等价于在 DPO策略上的基于似然的搜索。
* 初始策略和参考分布的选择对于确定训练期间隐性奖励的轨迹非常重要。

[OpenAI秘密武器「草莓」计划曝光！Q\*推理能力大爆发，逼近AGI L2里程碑](https://mp.weixin.qq.com/s/qq_E05Tab-ptRqGDjrAt0A)

5级路线图：

* L1：聊天机器人，具有对话能力的AI。
* L2：推理者，像人类一样能够解决问题的AI。
* L3：智能体，不仅能思考，还可以采取行动的AI系统。
* L4：创新者，能够协助发明创造的AI。
* L5：组织者，可以完成组织工作的AI。

Strawberry模型的目的是为了使公司的AI不仅能生成查询答案，还能提前计划，足够自主且可靠地浏览互联网，进行OpenAI所称的「深度研究」。

类似[Star: Self-taught reasoner bootstrapping reasoning with reasoning](https://arxiv.org/pdf/2203.14465.pdf)能够通过迭代创建自己的训练数据，来「自我提升」到更高的智能水平。

[Nature封面：AI训练AI，越训越离谱](https://mp.weixin.qq.com/s/l9ka81Cj2LFzNbXXsaEbmA)

[AI models collapse when trained on recursively generated data](https://www.nature.com/articles/s41586-024-07566-y)，对应下载的[pdf](https://github.com/daiwk/collections/blob/master/assets/nature-ai-train-ai.pdf)

### 自我奖励

[Self-Rewarding Language Models](https://arxiv.org/pdf/2401.10020)

[「用 AI 训 AI」这事靠谱吗？](https://mp.weixin.qq.com/s/bLLoYDTpq8q7ExfwyDekOQ)

### self-play

[清华、北大等发布Self-Play强化学习最新综述](https://mp.weixin.qq.com/s/oMY0O0OIVYJc04zkoMzgcQ)

[OpenAI o1 强化学习背后的自博弈（Self-play）方法介绍](https://mp.weixin.qq.com/s/zyAHcigtI2fEFN3TKQBb6A)

[万字长文推演OpenAI o1 self-play RL 技术路线](https://mp.weixin.qq.com/s/_kt0SPuWWiiu7XwqNZKZAw)

[有想入坑RL-LLM的同学吗？这个开源项目一个GPU够了，完成后欢迎来月之暗面\~](https://mp.weixin.qq.com/s/e-SHFE6UxXY4y5W-W2fYZw)

<https://github.com/inspirai/TimeChamber>

### Cursor

[Scaling Law瓶颈，Cursor编程为什么这么强？团队参与新研究掏出秘密武器](https://mp.weixin.qq.com/s/xhV9HoeEP22RjuWTjgbPqg)

[Planning In Natural Language Improves LLM Search For Code Generation](https://arxiv.org/pdf/2409.03733)

### Let's verify step by step

[o1基石论文火爆传阅，Ilya仍是关键先生！核心项目清北校友闪光](https://mp.weixin.qq.com/s/woElE_YfQni7bwe4UCCK4g)

[Let's Verify Step by Step](https://arxiv.org/pdf/2305.20050)

[OpenAI使用过程监督提升数学推理能力](https://mp.weixin.qq.com/s/E8GtQOT6tPoScj5nMjkSjQ)

<https://openai.com/index/improving-mathematical-reasoning-with-process-supervision/>

### O1相关汇总

(toread)

[OpenAI o1要跟，怎么跟？这个GitHub项目把解读、博客、相关论文一网打尽](https://mp.weixin.qq.com/s/sPYeM5LbfAwyHUxbQ78Vsg)

[刚刚，OpenAI震撼发布o1大模型！强化学习突破LLM推理极限](https://mp.weixin.qq.com/s/sGcx90Q_uI8se-DKosj9dw)

[张俊林：OpenAI o1的价值意义及强化学习的Scaling Law](https://mp.weixin.qq.com/s/my7XiRtpb8IY3Z0b471NJA)

[北大对齐团队独家解读：OpenAI o1开启「后训练」时代强化学习新范式](https://mp.weixin.qq.com/s/FXGdJA8OyZvLl89rXJiyAQ)

[Noam Brown早已预示o1强大推理能力，演讲深度解析AI推理研究脉络](https://mp.weixin.qq.com/s/KRttVeMN4tPw9yb6f4LQgA)

[OpenAI o1模型的前世今生](https://mp.weixin.qq.com/s/OCgbffOPrZ5kzFKisSUC9Q) --toread

### CoT能让Transformer更强

[谷歌再次痛失好局！OpenAI o1 证实谷歌 ICLR 2024 论文价值「四位华人贡献」](https://mp.weixin.qq.com/s/7FsVPFUb4-fkeaOtcRrgsw)

[Chain of Thought Empowers Transformers to Solve Inherently Serial Problems](https://arxiv.org/pdf/2402.12875)

#### CoT：打破 Transformer 的“并行诅咒”

传统的 Transformer 模型虽然在自然语言处理领域取得了巨大成功，但它有一个致命弱点：擅长并行计算，但不擅长串行推理。这就像一个超级聪明的孩子，能快速完成大量的计算题，但却无法理解简单的逻辑推理。

而CoT (Chain of Thought，思维链)技术的灵感来源于人类的思维过程，它可以让 Transformer 模拟人类的思考方式，通过生成一系列中间推理步骤，来解决那些需要逻辑推理的复杂问题。

#### CoT 的理论基础：从电路复杂度到 Transformer 表达能力

作者用电路复杂性理论来解释 CoT 的强大之处，将Transformer的计算过程与电路模型进行类比，并将Transformer能够解决的问题类别定义为“CoT 复杂性类”

他们证明了传统的Transformer模型（没有 CoT）只能解决AC0电路能够解决的问题，而AC0电路是一种计算能力非常有限的电路模型。但是，如果加入 CoT，Transformer 的表达能力将得到质的飞跃！作者用数学严格证明了：

只要CoT步骤足够多，Transformer 就能模拟任意大小的布尔电路，从而解决P/poly问题，这是一个包含了P问题的更大的问题类别，相当于证明了CoT可以让 Transformer 解决几乎所有可以用计算机解决的问题。

#### CoT 的实验验证：从模加到电路值问题，CoT 全面胜出！

为了进一步验证CoT的有效性，论文作者设计了四个核心问题：

* 模加： 计算两个数的和，并对某个整数取模
* 排列组合： 计算一组排列的组合
* 迭代平方： 对一个数进行多次平方运算
* 电路值问题： 计算一个布尔电路的输出值

其中，模加问题可以用并行计算高效地解决，而其他三个问题则需要串行计算。

实验结果表明：

* 对于模加问题，即使不使用 CoT，Transformer 也能取得不错的效果
* 但对于其他三个问题，使用 CoT 可以显著提高 Transformer 的准确率，尤其是在模型深度较浅的情况下

#### 讨论

[CoT能让模型推理能力无上限？田渊栋、LeCun下场反对：两层MLP还能模拟全世界呢](https://mp.weixin.qq.com/s/wi1jvQg47O078Xk83UpYmA)

[Transformer推理天花板被谷歌打破？DeepMind首席科学家亮出84页PPT，却遭LeCun反对](https://mp.weixin.qq.com/s/_z3ITDGRWXjbh8aVUBdUsg)

### CoT or not

[o1带火的CoT到底行不行？新论文引发了论战](https://mp.weixin.qq.com/s/_v15-UYpv300XIlhQ-54Vg)

[To CoT or not to CoT? Chain-of-thought helps mainly on math and symbolic reasoning](https://arxiv.org/pdf/2409.12183)

### test-time scaling

[小模型越级挑战14倍参数大模型，谷歌开启Test-Time端新的Scaling Law](https://mp.weixin.qq.com/s/tfi7VOpSdKIXVb--k6NCSg)

[Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters](https://arxiv.org/pdf/2408.03314)

一句话：根据给定的prompt难度，动态地分配测试时（Test-Time）的计算资源。在预训练阶段花费更少的计算资源，而**在推理阶段花费更多，这种策略可能更好**。

* 针对（Process Reward Model, PRM，[Let's Verify Step by Step](https://arxiv.org/abs/2305.20050)里提出的）进行搜索。
  * PRM可以在模型生成答案过程中的每个步骤都提供评分，用于引导搜索算法，动态调整搜索策略，通过在生成过程中识别错误或低效的路径，帮助避免在这些路径上浪费计算资源。
* 在测试时根据prompt自适应地更新模型的响应分布。
  * 模型不是一次性生成最终答案，而是逐步修改和改进它之前生成的答案，按顺序进行修订（revision）。
  * 并行采样：独立生成N个答案，
  * 顺序修订：每个答案依赖于前一次生成的结果，逐步修订。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-62eb3c01a69da9a646c3df8c039b67a74e04b4a1%2Ftest-time-scaling.PNG?alt=media)

[OpenAI o1 技术初探1：整体框架，利用Test-Time Scaling Law提升逻辑推理能力](https://mp.weixin.qq.com/s/MNwS1PQX2XOhVfN0rKykUQ)---(写得比较细)

[Scaling LLM Test-Time：谁说类o1推理一定要用RL???](https://mp.weixin.qq.com/s/3ABXCv6PG6asRfD0Vc5Iig)

[3B模型长思考后击败70B！HuggingFace逆向出o1背后技术细节并开源](https://mp.weixin.qq.com/s/E1FaaOurAb-QlCX3BASi9Q)

### inference scaling

[LLM Inference Scaling：姚班/OpenAI/CMU 8月论文提前揭示o1核心原理](https://mp.weixin.qq.com/s/p84S9r7Qbuo_yjAWhhqoVQ)

[An Empirical Analysis of Compute-Optimal Inference for Problem-Solving with Language Models](https://arxiv.org/abs/2408.00724)

### 扩散模型的inference scaling

[扩散模型也能推理时Scaling，谢赛宁团队重磅研究可能带来文生图新范式](https://mp.weixin.qq.com/s/wtSzBr6Gs1nF9zz4c5r7Ag)

[Inference-Time Scaling for Diffusion Models beyond Scaling Denoising Steps](https://arxiv.org/pdf/2501.09732)

### O1的评估

[280页PDF，全方位评估OpenAI o1，Leetcode刷题准确率竟这么高](https://mp.weixin.qq.com/s/WxmqCcvvXropIfVCxIJ7bA)

[Evaluation of OpenAI o1: Opportunities and Challenges of AGI](https://arxiv.org/pdf/2409.18486)

### LLM Reasoning

[一文看懂LLM推理，UCL汪军教授解读OpenAI ο1的相关方法](https://mp.weixin.qq.com/s/TCWs5TKKXiRbmt-XUd0wfg)

[首个o1复现开源RL框架OpenR来了，UCL、上交等高校联合团队发布](https://mp.weixin.qq.com/s/Dr9IzbUjiWtZT7bgr58T2g)

[OpenR: An Open Source Framework for Advanced Reasoning with Large Language Models](https://arxiv.org/abs/2410.09671)

[A Tutorial on LLM Reasoning: Relevant methods behind ChatGPT o1](https://github.com/openreasoner/openr/blob/main/reports/Tutorial-LLM-Reasoning-Wang.pdf)

[大模型不会推理，为什么也能有思路？有人把原理搞明白了](https://mp.weixin.qq.com/s/2_ccqg23n05iGK3zUH5KMg)

[Procedural Knowledge in Pretraining Drives Reasoning in Large Language Models](https://arxiv.org/abs/2411.12580)

### 开源模型+O1

[OpenAI o1式思维链，开源模型也可以有，成功案例来了](https://mp.weixin.qq.com/s/W28qb8ZaJkcyDP69eGw8MA)

### 复现O1

[技术上，如何复现 o1?](https://mp.weixin.qq.com/s/_fNioAkD--nI9WSH64O-_A?poc_token=HH6r-2ajxUVBKhJS6btRQEAl85tnczRGWRIAES19)

[17岁高中生写了个神级Prompt，直接把Claude强化成了满血o1](https://mp.weixin.qq.com/s/IAKD0FfcYehs5FsDkLbTJQ)

<https://github.com/richards199999/Thinking-Claude/tree/main>

[OpenAI最大秘密，竟被中国研究者破解？复旦等惊人揭秘o1路线图](https://mp.weixin.qq.com/s/IOKFBgoWyietVe3NNNw9Hg)

[Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective](https://arxiv.org/abs/2412.14135)

### O1 Replication Journey

[上交大发布首个OpenAI o1复现项目进展报告，满满的经验洞察](https://mp.weixin.qq.com/s/ZO_Rv98OakPuBaZl9Tw5VA)

[上交大o1复现新突破：蒸馏超越原版，警示AI研发"捷径陷阱"](https://mp.weixin.qq.com/s/bJc_hSrXsUgrzAfSxAoYoA)

[O1 Replication Journey: A Strategic Progress Report](https://github.com/GAIR-NLP/O1-Journey/blob/main/resource/report.pdf)

<https://github.com/GAIR-NLP/O1-Journey/blob/main/resource/report-part2.pdf>

<https://github.com/GAIR-NLP/O1-Journey>

### ScoRe

[强化学习让大模型自动纠错，数学、编程性能暴涨，DeepMind新作](https://mp.weixin.qq.com/s/CqxEoL50_FQTGtLYgh6omw)

[OpenAI o1技术初探3：如何让模型拥有自我纠错的能力](https://mp.weixin.qq.com/s/VHZ_BT27Dh2s5hVQSb33WA)

### LeCo

[COLM 24 | 从正确中学习？大模型的自我纠正新视角](https://mp.weixin.qq.com/s/F8KpJuiDE9DfSVb1ciLUSQ)

[Learning From Correctness Without Prompting Makes LLM Efficient Reasoner](https://arxiv.org/pdf/2403.19094)

<https://github.com/starrYYxuan/LeCo>

### Marco-O1

[阿里推理模型来了！Marco-o1 发布即开源](https://mp.weixin.qq.com/s/taWAZsK_ITJYKM3q_Ssqwg)

[阿里国际版o1来了，Marco-o1：聚焦开放式问题推理](https://mp.weixin.qq.com/s/k1gwBWNYIn_tfviWxbj8fw)

[Marco-o1: Towards Open Reasoning Models for Open-Ended Solutions](https://arxiv.org/abs/2411.14405)

<https://github.com/AIDC-AI/Marco-o1>

### OmniSearch

[阿里多模态检索智能体，自带o1式思考过程！复杂问题逐步拆解，动态调整下一步检索策略](https://mp.weixin.qq.com/s/IU1SokQC5RwRNL2sr7qQLg)

[Benchmarking Multimodal Retrieval Augmented Generation with Dynamic VQA Dataset and Self-adaptive Planning Agent](https://arxiv.org/abs/2411.02937)

<https://github.com/Alibaba-NLP/OmniSearch>

### Coconut

[田渊栋团队论文火了！连续思维链优于CoT，打开LLM推理新范式](https://mp.weixin.qq.com/s/cqh3pCLMFJgSVpF0nNgt6w)

(toread)

[Training Large Language Models to Reason in a Continuous Latent Space](https://arxiv.org/pdf/2412.06769)

一般而言，LLM 被限制在语言空间（language space）内进行推理，并通过思维链（CoT）来表达推理过程，从而解决复杂的推理问题。然而，语言空间可能并不总是最适合推理的。例如，很多单词token主要用于文本连贯性，而不是推理本身，而一些关键token则需要复杂的规划。

Coconut（连续思维链，Chain of Continuous Thought）不再通过语言模型头（language model head）和嵌入层将隐藏状态与语言 token 进行映射，而是直接将最后的隐藏状态（即连续思维）作为下一个token的输入嵌入。

### O1的安全机制

[OpenAI发布49页长文，讲述o1的安全机制](https://mp.weixin.qq.com/s/-zPVmr6_dA35j-YZAIqGJg)

[OpenAI o1 System Card](https://cdn.openai.com/o1-system-card-20241205.pdf)

### O1架构

[「七万字长文」从认知架构到实践部署：o1与o1 Pro的系统性分析与内涵洞察 · 上篇](https://mp.weixin.qq.com/s/ioqtgG2nOr3fT5sNqLNZdg)

### 小模型的O1

(toread)

[让7B千问模型超越o1，微软rStar-Math惊艳登场，网友盛赞](https://mp.weixin.qq.com/s/d2aDtT9KRyZJ9Ac12v8AHA)

[rStar-Math: Small LLMs Can Master Math Reasoning with Self-Evolved Deep Thinking](https://arxiv.org/pdf/2501.04519)

<https://github.com/microsoft/rStar>

### meta-cot

[迈向System 2推理，100页论文硬核讲述Meta-CoT](https://mp.weixin.qq.com/s/L_tErITBzUZ75GVGtbtdDQ)

[Towards System 2 Reasoning in LLMs: Learning How to Think With Meta Chain-of-Thought](https://arxiv.org/pdf/2501.04682)

### sky-T1

(toread)

[450美元训练一个「o1-preview」？UC伯克利开源32B推理模型Sky-T1，AI社区沸腾了](https://mp.weixin.qq.com/s/aRUHeDheE4nwncbCLakgIQ)

<https://novasky-ai.github.io/posts/sky-t1/>

<https://huggingface.co/NovaSky-AI/Sky-T1-32B-Preview>

### Monkey

[o3并非独门秘技，谷歌已发背后关键机制，方法更简单、成本更低](https://mp.weixin.qq.com/s/qdxC_QyJW17gyRfN66D59A)

[Large Language Monkeys: Scaling Inference Compute with Repeated Sampling](https://arxiv.org/abs/2407.21787)

### 其他的一些讨论

[OpenAI o1模型超全指南来了！](https://mp.weixin.qq.com/s/Wp8y-2q_05UFIMGyyY6DQQ) (使用技巧)

[耗资1.3万，ASU团队揭秘o1推理王者！碾压所有LLM成本超高，关键还会PUA](https://mp.weixin.qq.com/s/pSNC6tdhXcxqB9ofQKU3JQ)

[LLMs Still Can't Plan; Can LRMs? A Preliminary Evaluation of OpenAI's o1 on PlanBench](https://arxiv.org/abs/2409.13373)

[大模型是否有推理能力？DeepMind数月前的论文让AI社区吵起来了](https://mp.weixin.qq.com/s/NdRBGFT6systLwn7p2ER7Q)

[Amortized Planning with Large-Scale Transformers: A Case Study on Chess](https://arxiv.org/pdf/2402.04494)

[联手OpenAI，吴恩达推出一门o1推理新课程，还免费](https://mp.weixin.qq.com/s/J4uQWL_zccyW7PKsb8eSlw)

<https://www.deeplearning.ai/short-courses/reasoning-with-o1/>

[4o-mini只有8B，o1也才300B！微软论文意外曝光GPT核心机密](https://mp.weixin.qq.com/s/bT_w-T9ElmPUXbYA1f7kCg)

* o1-preview约300B；o1-mini约100B
* GPT-4o约200B；GPT-4o-mini约8B
* Claude 3.5 Sonnet 2024-10-22版本约175B

## DeepSeek R1

[DeepSeek-R1 发布，性能对标 OpenAI o1 正式版](https://mp.weixin.qq.com/s/atKyfC5l-BaStje8-F3FGQ)

[DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning](https://github.com/deepseek-ai/DeepSeek-R1/blob/main/DeepSeek_R1.pdf)，自己转存了一份：[pdf](https://github.com/daiwk/collections/blob/master/assets/DeepSeek_R1.pdf)

arxiv上：<https://arxiv.org/pdf/2501.12948>

<https://huggingface.co/deepseek-ai/DeepSeek-R1>，还有不少distill的，LM-studio已经有了。。<https://hf-mirror.com/lmstudio-community/DeepSeek-R1-Distill-Qwen-32B-GGUF>

[Jay Alammar：图解DeepSeek-R1](https://mp.weixin.qq.com/s/N9N7R-r_l6sBL2fsRXRGAw)

<https://newsletter.languagemodels.co/p/the-illustrated-deepseek-r1>

<https://levelup.gitconnected.com/drawing-deepseek-r1-architecture-and-training-process-from-scratch-72043da33955>

### 背景

o1提出了可以通过增加cot reasoning process的长度来进行inference time scaling，尝试复现的方法有：

* process-based reward models：
  * [Let's Verify Step by Step](https://arxiv.org/pdf/2305.20050)
  * [Solving math word problems with process-and outcome-based feedback](https://arxiv.org/pdf/2211.14275)
  * [Math-Shepherd: Verify and Reinforce LLMs Step-by-step without Human Annotations](https://arxiv.org/pdf/2312.08935)
* reinforcement learning：
  * [Training language models to self-correct via reinforcement learning](https://arxiv.org/pdf/2409.12917)
* MCTS/beam search的搜索方法：
  * [Alphazero-like tree-search can guide large language model decoding and training](https://arxiv.org/pdf/2309.17179)
  * [Solving olympiad geometry without human demonstrations](https://www.nature.com/articles/s41586-023-06747-5)
  * [Deepseek-prover-v1.5: Harnessing proof assistant feedback for reinforcement learning and monte-carlo tree search](https://arxiv.org/pdf/2408.08152)

但这些方法都没有o1效果好，因此R1不借助监督数据，使用纯RL(没有SFT)来完成self-evolution，从而探索LLM在reasoning上的潜能。使用DeepSeekV3作为base model，并使用[Deepseekmath: Pushing the limits of mathematical reasoning in open language models](https://arxiv.org/pdf/2402.03300)的GRPO作为RL框架。

几k个step后，DeepSeek-R1-Zero在一些reasoning的benchmark上取得了不错的效果，但仍然有可读性差、语言混合等问题，因此搞了DeepSeek-R1，包括少量的冷启数据和一个多阶段的训练pipeline。

* 收集数千的cold-start数据来finetune DeepSeek-V3-Base模型
* 执行类似DeepSeek-R1-Zero的面向reasoning的RL任务
* 在RL快收敛的时候，在RL的checkpoint上通过拒绝采样构建新的SFT数据，并和DeepSeek-V3的数据集（只选一些领域，如writing、factual QA和self-cognition,自我认知）进行结合，**重训**DeepSeek-V3-Base
* 用新数据finetune完后，再经过一个RL的过程，并考虑所有场景的prompts==>最终的模型

还搞了一些蒸馏模型，例如Qwen2.5-32B作为base模型，蒸馏DeepSeek-R1的效果比对它进行RL效果要好，说明大的base model发现的reasoning patterns对提升reasoning能力很关键。此外，发现14B的蒸馏模型比QWQ-32B-preview效果好很多，32B和70B的蒸馏模型效果更好

### DeepSeek-R1-Zero

#### RL算法

&#x20;

GRPO（Group Relative Policy Optimization）：放弃了Critic model，用group scores来替换。即对每个问题$$q$$，从老的策略$$\pi\_{\theta\_{\text {old }}}$$采样出一个group的输出$$\left{o\_1, o\_2, \cdots, o\_G\right}$$，再通过最大化如下目标来优化policy model $$\pi\_\theta$$：

$$
\begin{aligned}
\mathcal{J}*{G R P O}(\theta) & =\mathbb{E}\left\[q \sim P(Q),\left{o\_i\right}*{i=1}^G \sim \pi\_{\theta\_{\text {old }}}(O \mid q)\right] \\
& \frac{1}{G} \sum\_{i=1}^G\left(\min \left(\frac{\pi\_\theta\left(o\_i \mid q\right)}{\pi\_{\theta\_{o l d}}\left(o\_i \mid q\right)} A\_i, \operatorname{clip}\left(\frac{\pi\_\theta\left(o\_i \mid q\right)}{\pi\_{\theta\_{o l d}}\left(o\_i \mid q\right)}, 1-\varepsilon, 1+\varepsilon\right) A\_i\right)-\beta \mathbb{D}*{K L}\left(\pi*\theta| | \pi\_{r e f}\right)\right),
\end{aligned}
$$

其中：

* $$\mathbb{D}*{K L}\left(\pi*\theta | \pi\_{r e f}\right)=\frac{\pi\_{r e f}\left(o\_i \mid q\right)}{\pi\_\theta\left(o\_i \mid q\right)}-\log \frac{\pi\_{r e f}\left(o\_i \mid q\right)}{\pi\_\theta\left(o\_i \mid q\right)}-1$$用于限制新策略不要离ref model太远
* $$\operatorname{clip}\left(\frac{\pi\_\theta\left(o\_i \mid q\right)}{\pi\_{\theta\_{o l d}}\left(o\_i \mid q\right)}, 1-\varepsilon, 1+\varepsilon\right)$$用于限制新旧策略的概率比例在1附近，即二者不要偏离太远
* $$\varepsilon$$和$$\beta$$是超参
* $$A\_i$$是advantage，通过每个group的reward计算得来，不像ppo需要借助value model：

$$
A\_i=\frac{r\_i-\operatorname{mean}\left(\left{r\_1, r\_2, \cdots, r\_G\right}\right)}{\operatorname{std}\left(\left{r\_1, r\_2, \cdots, r\_G\right}\right)}
$$

整句话的advantage如何分配到token上？参考deepseekmath论文：各token共享

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7eb6f68d4e34ef8bb8b239b0a71c25cd567bd81a%2Fgrpo-advantage-token.png?alt=media)

* 大基座是出现reasoning涌现能力的关键（qwen 32bb用同样r1-zero的数据训练，没法出现aha moment）
* GRPO可并行，可加速

对比PPO & GRPO

* PPO：
  * Reference Model（Ref model）：原始LLM，不训练
  * Policy Model（Actor）：原始LLM，需要训练
    * policy：LLM产出的一条response；
    * action：LLM生成的每一个token
  * Reward Model（RM）：对一条response的打分。在RLHF的RM阶段更新，RL阶段不训练
  * Value Model（Critic）：类似RM，需要训练
  * GAE：从Reward Model对**整个句子**的打分，拆解到**每个token**应该怎么改进（图中的A，advantage），会考虑Value Model、Ref Model和Reward Model，还会有一个KL的约束，确保新的policy model不会离ref model太远
  * Importance Sampling：对比新advantage和原始policy的比值，只对advantage进行小比例更新，保证训练稳定
  * 缺点：
    * 需要Ref Model再算一遍，有计算量&耗时
    * 需要拆解到每个token，又有计算量&耗时
* GRPO：（Group Relative Policy Optimization）：来自[DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models](https://arxiv.org/pdf/2402.03300)，放弃了Critic model（图中的value model），用group scores来替换。
  * policy model/ref model/reward model都和ppo一样
  * 不需要value model
  * 并行执行更多的policy（即GRPO的group），产出的结果一起打分，减均值除以标准差，把每个policy和标准差的差距平均到每个token上，再用KL散度计算和ref model的差距

原始DeepSeekMath论文中的图：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-84a11c08f620755ec5edebe6c99ab8c2fac9a4ef%2Fppo-grpo-deepseek-math.png?alt=media)

形象的理解：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e956ad9f2b2962547d5fc0dbc2a3479bbe39c67c%2Fppo-grpo.png?alt=media)

从头开始实现：[DeepSeek关键RL算法GRPO，有人从头跑通了，贡献完整代码](https://mp.weixin.qq.com/s/e0-tVsaIgNajBTOl117ctg)

#### Reward modeling

&#x20;

用的是rule-based reward，包括如下两部分

* accuracy rewards：response是否正确，例如对于一个数学问题，需要判断最终答案是否为给定的格式（specified format），并且能基于规则验证结果的正确性；leetcode问题则可以用编译器来生成预先定好的测试用例的结果。
* format rewards：设计了一个format reward model，来强制模型将其思考过程输出在`<think>`和`</think>`之间。

没有设计neural reward model，因为：

* 发现在大规模的RL过程中，neural reward model会受reward hacking的影响
* 重新训练reward model需要额外的训练资源，并且会让训练pipeline过于复杂

#### Training template

&#x20;

```html
A conversation between User and Assistant. The user asks a question, and the Assistant solves it.
The assistant first thinks about the reasoning process in the mind and then provides the user
with the answer. The reasoning process and answer are enclosed within <think> </think> and
<answer> </answer> tags, respectively, i.e., <think> reasoning process here </think>
<answer> answer here </answer>. User: prompt. Assistant:
```

训练时使用如上的template，故意将约束限制在这种结构格式上，避免任何特定内容的偏见（例如强制反射推理或促进特定的解决问题的策略），以确保能够在RL过程中准确观察模型的自然进展。

#### 效果

&#x20;

指标含义：

* pass\@1：**首次**生成答案时的成功率
* cons\@64：majority vote (consensus) with 64 samples，模型在给出**64次生成尝试**中，是否能够**多次生成相同的正确答案**。(在[这里](https://openai.com/index/learning-to-reason-with-llms/)提到了，来自文章：[Self-consistency improves chain of thought reasoning in language model](https://arxiv.org/pdf/2203.11171))

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1297d0271937f7268b8f1b92243be9b5a6d5d080%2Fr1-zero-performance.png?alt=media)

* 数学(美国数学邀请赛)：
  * AIME2024：pass\@1上接近o1-0912，cons\@64超了，均超越o1-mini
  * MATH-500：pass\@1超越o1-mini和o1-0912
* GPQA-Diamond（phd级别的科学问题，包括化学、物理、生物）：pass\@1超越o1-mini，不如o1-0912
* 代码：
  * LiveCode Bench：不如o1-0912和o1-mini
  * codeforces的rating：不如o1-0912和o1-mini

另外，在AIME2024上，随着训练，pass\@1能从十几涨到70几。

#### Self-evolution Process

&#x20;

* 随着训练的进行，生成的response长度也在变长，说明思考时间也变长了，其中的reasoning tokens从数百涨到了数千。
* 随着测试时间的增加，**涌现出了复杂的行为**，即不由自主地(spontaneously)出现了（这些行为并非预先在代码里设计的）：
  * 反思：重新看并且评估(revist and reevaluate)之前的steps
  * 探索：尝试其他方法来解决问题

#### Aha Moment

&#x20;

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-dc0e857fd9984c40eb90a4d6d3b35c951bc9a538%2Fr1-zero-aha.png?alt=media)

在某一个中间版本，模型突然输出上面的aha-moment，可以看到不需要显式地教模型如何解决，只要给予正确的激励（incentives），模型会自己开发出进阶的问题解决策略，这也是RL的power and beauty。

### DeepSeek-R1

2个目标：

* 用一小部分高质量数据来做冷启能否提升推理效果，或者加速收敛？
* 如何训练一个user-friendly的模型，既能提供准确和连贯的CoT，又有很强的通用能力？

#### 阶段1：Cold Start

&#x20;

从base model开始RL训练时，为了防止冷启阶段训练的不稳定，构建了少量（数千）的长CoT数据来finetune模型，作为初始的RL actor。试了几种方法

* few shot prompting，用一个long CoT作为例子
* 直接在prompt里要求模型生成详细的答案，并加上反思和验证
* 收集deepseek-r1-zero的输出，并找人类标注员后处理进行修改

相比zero，冷启数据有如下好处：

* 可读性：zero的可读性不太好，例如语言混合、缺少markdown高亮。因此设计了一个可读性比较好的pattern，即`|special_token|<reasoning_process>|special_token|<summary>`，并把没有summary的结果扔掉
* 潜力：依据人类先验精心设计的pattern产出的冷启数据，取得了比zero更好的效果，故迭代地训练对于reasoning models应该是一种更好的方式

#### 阶段2：Reasoning-oriented Reinforcement Learning

&#x20;

在冷启数据上tune完之后，和r1-zero一样，进行大规模的RL训练（在reasoning-intensive任务的数据集上训的？）。此外，为了解决CoT里语言混合的问题，加了一个**language consistency reward**（计算目标语言在CoT中的比例），直接和原来的reward相加。虽然消融实验显示这种alignment会让效果略微下降，但这更符合人类偏好，可读性更强。

#### 阶段3：Rejection Sampling and Supervised Fine-Tuning

&#x20;

用阶段2的ckpt，然后在writing, role-playing, and other general-purpose这类任务上构建SFT数据集，在约80w的样本上对DeepSeek-V3-Base SFT了2个epoch。

* reasoning data：在前一个RL阶段，只用那些能用rule-based rewards来衡量的数据。
  * 这个阶段加入了更多的数据，有一些是使用**生成式的reward model**，即把ground truth和模型预测结果输入给DeepSeek-V3做judgement。
  * 因为模型输出有时会很混乱或者无可读性，所以删掉一些满足这些条件的CoT：混合语言、长的段落、代码段
  * 对每个prompt，采样多个response，并只保留一个正确的。最终收集了大概60w的reasoning相关的训练样本
* non-reasoning data：
  * 采用DeepSeek-V3的pipeline，并复用部分DeepSeek-V3的SFT数据集。
  * 使用DeepSeek-V3时，在prompt里提到在回答答案前要生成潜在的CoT；对于简单的如hello的问题，就不用输出CoT。
  * 最终收集了大概20w的non-reasoning训练样本

#### 阶段4：Reinforcement Learning for all Scenarios

&#x20;

将reward信号和多样化的数据分布相结合，提升helpfulness and harmlessness，同时refine reasoning能力，

* reasoning数据：用R1-Zero的RL，使用rule-based reward
* 通用数据：用V3的pipeline，还是用reward model，用以学习复杂和细分领域的人类偏好

另外，提升如下两方面的能力：

* helpfulness：仅关注最终的summary，保证评估强调的是response的有用性和相关性，而尽量少地干涉潜在的reasoning过程
* harmlessness：同时评估reasoning过程和summary，尽量缓解在生成的过程中出现的风险、偏见和有害内容

#### 效果

* 大部分都接近或者超过新版o1（r1-zero只能和早期o1相当），很多任务都比v3要好
* 代码和o1差不太多，比v3提升很多，其中SWE Verified这个工程类的不太行，因为目前训练语料里这类数据还比较少，下一版会优化
* c-simpleQA（最后一行）上效果不如V3，因为有R1有safety的限制，导致模型会拒绝回答一些问题，如果去掉这个限制，准确率能达到70%
* 在AlpacaEval2.0（写作）和ArenaHard(开放领域问答)上效果很好，产出的summary也很长，说明可能reasoning能力能产出长cot，对这类任务也有用
* 数学上超越o1，大幅领先v3

### 蒸馏

基于Qwen2.5-Math-1.5B、Qwen2.5-Math-7B、Qwen2.5-14B、Qwen2.5-32B、Llama-3.1-8B、Llama-3.3-70B-Instruct蒸馏，用的数据集是deepseek-R1的第二阶段RL使用的80w数据，只进行了SFT，没有RL。理论上RL应该会效果更好，留给其他研究者去搞了。

<https://medium.com/@prabhudev.guntur/how-to-distill-deepseek-r1-a-comprehensive-guide-c8ba04e2c28c>可以参考这个自己蒸馏一个

#### 效果

* 仅sft蒸馏的效果：模型越大效果越好，32b和70b的已经在大部分任务上超越o1-mini了
* 直接拿qwen-32b做RL（第二行）：和QwQ-32b-preview（第一行）差不太多，但明显不如sft蒸馏（第3行）的模型效果

最终结论：

* 把大模型蒸馏到小模型可以有很好的效果，但对小模型做RL性价比不高
* 有更强大的模型和更大规模的RL，才能更好地发挥蒸馏的作用，让小模型变得更强

### 失败的尝试

#### PRM

&#x20;

PRM（Process-supervised Reward Model）是 OpenAI 在[Let's Verify Step by Step](https://arxiv.org/pdf/2305.20050)中首次提出的概念。与之相对应的是ORM（Outcome-supervised Reward Model）。区别：

* PRM：过程奖励模型，在生成过程中，对每一个**步骤**打分，是更细粒度的奖励模型。
* ORM：结果奖励模型，不管推理有多少步，对**完整的生成结果**进行**一次**打分，是一个反馈更稀疏的奖励模型。

PRM可以在两个阶段生效：

* Post-Training阶段：在RL过程中增加PRM，对采样的结果**按步骤**输出奖励值，为模型提供更精细的监督信号，来指导策略模型优化，提升模型按步推理的能力。
* Inference阶段：对generator模型做N次采样（如Beam Search等），并通过PRM对每个采样的每步推理进行打分，最终拟合一个整体过程打分，并选取打分最高的结果作为最终的答案。

问题：

* 难以定义细粒度的步骤
* 评估中间步骤是否正确很困难，用LLM自动评估结果不太行，手动标注又难以规模化应用
* 基于模型的PRM就会有reward hacking问题， 重新训练奖励模型需要额外的训练资源

#### MCTS

&#x20;

MCTS（Monte Carlo Tree Search）是强化学习领域，详见AlphaGo论文[Mastering the game of Go without human knowledge](https://www.nature.com/articles/nature24270)

具体操作步骤：使用已有的策略与环境做仿真交互，进行多次 rollout 采样，最终构成了一个从当前节点出发的一颗 Tree（每个 rollout 表示从当前节点到最终结束状态的多次与环境仿真交互的过程）。

这棵树的所有叶子节点都是结束状态，结束状态是可以量化收益的（比如方法1：答案错误收益-1，答案正确收益+3；再比如方法2：叶子节点的收益是到达叶子节点路径数/总路径数的概率，这是一种根据投票机制预估的价值，越多路径到达叶子节点，说明这个叶子节点越置信，那么这个叶子节点就有更高的奖励）。

一棵树的叶子节点有了奖励值，就可通过反向传播，计算每个中间节点的奖励值，最终计算出整个树所有节点的奖励值。MCTS一次rollout包括四个步骤：

* select
* expand
* simulate
* backprop

MCTS也可以用在两阶段：

* Post-Traing阶段：对于**每个problem构造一个搜索树**，然后进行树的游走遍历采样，再用采样的样本SFT或RL训练模型。
* Inference阶段：在推理阶段，也是对一个problem探索多节点构造一棵搜索树，对于到达正确答案的路径，根据节点路径的置信度打分，**贪心选取最优路径**作为最终的推理结果。

问题：

* 搜索空间巨大，虽然设置最大扩展限制使得不会无限搜索，但是容易陷入局部最优
* value model直接影响生成的质量，而训练一个细粒度的value model本质上是困难的

### 小结

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-eb6e335f991c10a877509df7d4773bcbe2163358%2Fdeepseek-r1-flow.png?alt=media)

对应的流程图[文档](https://s6alnvgc88.feishu.cn/wiki/JOutwfyGwiEAflkKImvcfpwgnQd)

### 使用注意

#### deepseek-r1使用指南

[刚刚，DeepSeek官方发布R1模型推荐设置，这才是正确用法](https://mp.weixin.qq.com/s/RA1mhAyQOoXD5XOULAGgbQ)

* temperature设置在0.5-0.7之间，推荐0.6，以防止无休止的重复或不连贯的输出。
* 不要system prompt，直接放到user prompt里
* 数学问题，建议prompt里直接`Please reason step by step, and put your final answer within \boxed{}.`
* 有些时候模型会自己跳过think的过程，如果要强制输出，可以强制模型在output前输出`<think>\n`

上传文件的prompt：

```shell
file_template = \
"""[file name]: {file_name}
[file content begin]
{file_content}
[file content end]
{question}"""
```

联网的prompt：

```shell
search_answer_zh_template = \
'''# 以下内容是基于用户发送的消息的搜索结果:
{search_results}
在我给你的搜索结果中，每个结果都是[webpage X begin]...[webpage X end]格式的，X代表每篇文章的数字索引。请在适当的情况下在句子末尾引用上下文。请按照引用编号[citation:X]的格式在答案中对应部分引用上下文。如果一句话源自多个上下文，请列出所有相关的引用编号，例如[citation:3][citation:5]，切记不要将引用集中在最后返回引用编号，而是在答案对应部分列出。
在回答时，请注意以下几点：
- 今天是{cur_date}。
- 并非搜索结果的所有内容都与用户的问题密切相关，你需要结合问题，对搜索结果进行甄别、筛选。
- 对于列举类的问题（如列举所有航班信息），尽量将答案控制在10个要点以内，并告诉用户可以查看搜索来源、获得完整信息。优先提供信息完整、最相关的列举项；如非必要，不要主动告诉用户搜索结果未提供的内容。
- 对于创作类的问题（如写论文），请务必在正文的段落中引用对应的参考编号，例如[citation:3][citation:5]，不能只在文章末尾引用。你需要解读并概括用户的题目要求，选择合适的格式，充分利用搜索结果并抽取重要信息，生成符合用户要求、极具思想深度、富有创造力与专业性的答案。你的创作篇幅需要尽可能延长，对于每一个要点的论述要推测用户的意图，给出尽可能多角度的回答要点，且务必信息量大、论述详尽。
- 如果回答很长，请尽量结构化、分段落总结。如果需要分点作答，尽量控制在5个点以内，并合并相关的内容。
- 对于客观类的问答，如果问题的答案非常简短，可以适当补充一到两句相关信息，以丰富内容。
- 你需要根据用户要求和回答内容选择合适、美观的回答格式，确保可读性强。
- 你的回答应该综合多个相关网页来回答，不能重复引用一个网页。
- 除非用户要求，否则你回答的语言需要和用户提问的语言保持一致。

# 用户消息为：
{question}'''
```

#### openai推理使用指南

[刚刚，DeepSeek揭秘R1官方同款部署设置，温度=0.6！OpenAI推理指南同时上线](https://mp.weixin.qq.com/s/M7DOriZntI5RjxCliUVyug)

<https://platform.openai.com/docs/guides/reasoning-best-practices>

简单理解：

* 推理模型就像一位经验丰富的高级同事——你只需告诉他们最终目标，就能相信他们自主完成所有细节工作。
* GPT模型则更像一位新手同事——你需要提供明确详细的指示，才能让他们准确完成特定的输出任务。

各自特点：

* 速度和成本：选择GPT模型，因为它们处理速度更快，成本更低
* 执行明确任务：选择GPT模型，它们在处理界定清晰的任务时表现出色
* 准确性和可靠性：选择o系列模型，它们是可靠的决策专家
* 复杂问题解决：选择o系列模型，它们善于处理模糊和复杂的问题

推理模型的优势：

* 处理模糊任务：推理模型特别擅长处理信息有限或零散的情况，只需通过简单的提示词就能理解用户意图并妥善处理指令中的信息缺口。 值得注意的是，推理模型通常会在做出未经验证的猜测或填补信息空缺之前，主动提出澄清性问题。
* 大海捞针：当需要处理大量非结构化信息时，推理模型特别擅长理解内容并精准提取出回答问题所需的关键信息。
* 在大型数据集中发现关系和细微差别：
  * 推理模型特别擅长分析包含数百页密集、非结构化信息的复杂文档，如法律合同、财务报表和保险索赔等。这些模型在识别文档之间的关联性，并基于数据中隐含的事实做出决策方面，表现尤为突出。
  * 推理模型还特别擅长理解细微的政策和规则，并将其准确应用于具体任务中以得出合理结论。
* 多步骤AI智能体规划：推理模型在AI智能体规划和策略制定中发挥着关键作用。将推理模型作为「计划者」时效果显著：它能为问题制定详细的多步骤解决方案，并根据具体需求（高智能或低延迟）选择和分配合适的GPT模型（执行者）来完成各个步骤。
* 视觉推理能力：截至目前，o1是唯一一个具备视觉处理能力的推理模型。与GPT-4o相比，o1的独特优势在于它能够准确理解最具挑战性的视觉内容，包括结构不规则的图表和表格，以及质量欠佳的图片。
* 代码审查、调试和质量改进：推理模型在审查和改进大规模代码方面表现突出。考虑到这类模型的较高延迟特性，通常将代码审查任务安排在后台运行。虽然GPT-4o和GPT-4o mini凭借较低的延迟可能更适合直接编写代码，但在那些对延迟要求相对不那么严格的代码生成场景中，o3-mini表现同样出色。
* 评估和基准测试其他模型的响应：推理模型在对其他模型的输出进行基准测试和评估方面表现优异。数据验证对确保数据集的质量和可靠性至关重要，这一点在医疗保健等敏感领域尤其重要。

prompt注意点：

* 用开发者消息取代系统消息：自o1-2024-12-17版本起，推理模型开始支持开发者消息（developer message）而非系统消息（system message）。
* 保持提示词简洁明确：推理模型最擅长理解和响应简短、清晰的指令。
* 避免使用CoT提示：由于模型内置推理能力，因此无需特别提示它们「一步一步思考」或「解释推理过程」。
* 善用分隔符增强清晰度：使用Markdown、XML标签和章节标题等分隔符来明确区分输入的不同部分，这有助于模型准确理解各个章节的内容。
* 优先尝试零样本学习：推理模型通常无需少样本示例即可产出优质结果，因此建议先尝试不含示例的提示词。如果对输出结果有更复杂的要求，再考虑在提示词中添加输入和期望输出的示例。请注意确保示例与提示词指令严格匹配，因为不一致可能导致性能下降。
* 提供明确约束条件：如果需要对模型的响应施加具体限制（例如「提供预算控制在500美元以内的解决方案」），请在提示词中明确列出这些约束条件。
* 明确定义目标：在指令中，请详细说明判定响应成功的具体参数，并引导模型持续优化推理过程，直到达成设定的成功标准。
* Markdown格式说明：从o1-2024-12-17版本开始，API中的推理模型默认不会生成带有Markdown格式的响应。如果确实需要在响应中包含Markdown格式，请在开发者消息的首行添加「Formatting re-enabled」字符串。

## R1的部署

[完整的671B MoE DeepSeek R1怎么塞进本地化部署？详尽教程大放送！](https://mp.weixin.qq.com/s/GnHzsgvW90DGChENqTBsRw)

<https://github.com/kvcache-ai/ktransformers>

## R1的讨论

[华人研究团队揭秘：DeepSeek-R1-Zero或许并不存在「顿悟时刻」](https://mp.weixin.qq.com/s/_VK7fm8p3mpfhPh_zBdagA)

[为什么说DeepSeek的R1-Zero比R1更值得关注？](https://mp.weixin.qq.com/s/yhZR4PainDLR5-gWKiiDjg)

[LeCun痛批硅谷傲慢病！圈内爆火长文：DeepSeek R1-Zero比R1更重要，成AGI破局关键](https://mp.weixin.qq.com/s/mSAATPeW_FM9xadf1veLDA)

[DeepSeek用的GRPO占用大量内存？有人给出了些破解方法](https://mp.weixin.qq.com/s/28GRpZwqv4gMnrmItMQchQ)，对应：<https://github.com/huggingface/trl/issues/2709>

[刘知远硬核解读 DeepSeek：大模型强化学习技术原理与大模型技术发展研判](https://mp.weixin.qq.com/s/pAn87hbT3GkfMvbcdzEGCw)

[大神卡帕西拿DeepSeek R1讲强化学习！最新大模型内部机制视频爆火，“没有技术背景也能看懂”](https://mp.weixin.qq.com/s/lBc0-8ByRxJ3JBJpMcfzkQ)

对应代码：<https://github.com/EurekaLabsAI>

[陈巍：DeepSeek是否有国运级的创新？2万字解读与硬核分析DeepSeek V3/R1的架构](https://mp.weixin.qq.com/s/-yAjdqEn62Sz0bnzp9NEKA)

[Sebastian Raschka：关于DeepSeek R1和推理模型，我有几点看法](https://mp.weixin.qq.com/s/LT22OjbJWKDzTuQeO4yvlg)

[4500美元复刻DeepSeek神话，1.5B战胜o1-preview只用RL！训练细节全公开](https://mp.weixin.qq.com/s/82i7njl4j7nOoLm-igNHtw)

[从想太多到想不透？DeepSeek-R1等长推理模型也存在「思考不足」问题](https://mp.weixin.qq.com/s/LbyHxCbtyYsOelwu6bzs2w)

[r1技术分享](https://www.xiaohongshu.com/explore/67b061460000000029030e00?app_platform=ios\&app_version=8.69.4\&share_from_user_hidden=true\&xsec_source=app_share\&type=video\&xsec_token=CBH6gEmgPsHp8CWDHlT5DUV9ifTEHPhC9nbQ8RonxCok0=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1739938712\&share_id=4d27eb3ad43e4f7b9d9a7b12eb6526f2)

一些观点：

* 打破LLM训练从Generalist到Reasoner的常规思路，使用RL先得到Reasoner，再经过SFT成为Generalist;
* GRPO算法的高效性，让RL大规模训练取得了效果;
* SFT with CoT数据的训练结果在原文中并未给出，但从最近一些复现工作和R1 distiled Qwen结果来看，SFT的作用可能比RL还大。
* 好的Base模型本身就有Aha Moment，但是是Superfacial（表面）的reflection，不具有提升Accuracy的能力，RL可以增强该能力。

r1的解读（很长，142页）

[DeepSeek-R1 Thoughtology: Let’s about LLM reasoning](https://arxiv.org/pdf/2504.07128)

模型思考过程分四步走：

* 问题定义：先把问题说清楚
* 开花期：拆解问题，给出初步方案
* 重构期：反复验证和修正想法
* 最终决策：确认并输出答案

有趣的发现：

* 思考链长度有"最佳区间"，太长反而会答错
* 模型会"死磕"用户给的信息，即使信息是错的也坚持跟着走
* 中英文环境下性格迥异：中文更重视集体，英文更个人主义
* 还会画ASCII艺术，虽然不太完美\~

缺陷：

* 上下文太长容易"走神"
* 有时会生成有害内容
* 在某些视觉任务上还不够连贯

## R1前后的一些工作

### S1

[s1: Simple test-time scaling](https://arxiv.org/pdf/2501.19393)

<https://github.com/simplescaling/s1>

[训练1000样本就能超越o1，李飞飞等人画出AI扩展新曲线](https://mp.weixin.qq.com/s/ax_CCrqpgrp5j2mLOssY4w)

（从xhs上抄的）有几点思维误区：

* s1超过的是o1-preview，没有超过o1甚至o1-mini，有很大区别
* s1的效果不敌deepseek-r1 800k数据蒸馏的32B模型，差了不少，不是媲美
* s1即使使用全量59k数据的效果也没有提高很多，甚至在math上还有下降，所以核心是数据质量
* 1k数据是从59K数据中筛选出来的，不是直接有1K数据就可以
* s1使用1k数据是节省了训练时间，但蒸馏的难点在蒸馏数据的构造上

### LIMO

[817样本激发7倍推理性能：上交大「少即是多」定律挑战RL Scaling范式](https://mp.weixin.qq.com/s/c62TWyepruRYf_1xHFKw4g)

[LIMO: Less is More for Reasoning](https://arxiv.org/pdf/2502.03387)

<https://github.com/GAIR-NLP/LIMO>

### PRIME

[挑战DeepSeek-R1-Zero！PRIME：仅10%数据刷新数学推理SOTA，隐式奖励技术颠覆RL训练](https://mp.weixin.qq.com/s/JXGCZxcluvc4YkBVq2mXSA)

[Process Reinforcement through Implicit Rewards](https://arxiv.org/pdf/2502.01456v1)

### TPO

[推理时也能做偏好优化，无需额外重训练，来自上海AI Lab港中文等](https://mp.weixin.qq.com/s/OzAHrVUK57kY9kwVQql4eg)

[Test-Time Preference Optimization: On-the-Fly Alignment via Iterative Textual Feedback](https://arxiv.org/abs/2501.12895)

<https://github.com/yafuly/TPO>

### Huginn

[推理模型新路线开源！与DeepSeek截然不同，抛弃思维链不用人类语言思考](https://mp.weixin.qq.com/s/HK6fjolKDcHG6MD_cVgifg)

[Scaling up Test-Time Compute with Latent Reasoning: A Recurrent Depth Approach](https://arxiv.org/abs/2502.05171)

<https://github.com/seal-rg/recurrent-pretraining>

抛弃长思维链和人类的语言，直接在连续的高维潜空间用隐藏状态推理，可自适应地花费更多计算来思考更长时间。

### Goedel-Prover

[哥德尔-Prover超过DeepSeek-Prover，金驰、陈丹琦团队造出当前最强形式化推理模型](https://mp.weixin.qq.com/s/IfYQdMyZ7FBEJCXNCTpZtQ)

[Goedel-Prover: A Frontier Model for Open-Source Automated Theorem Proving](https://arxiv.org/abs/2502.07640v1)

<https://github.com/Goedel-LM/Goedel-Prover>

### Kimi K1.5

[追平满血版o1的国产多模态模型终于来了！训练细节全部公开](https://mp.weixin.qq.com/s/FOAcS2jsTwNoZA2t1BJ66Q)

<https://github.com/MoonshotAI/kimi-k1.5>

[Kimi k1.5: Scaling Reinforcement Learning with LLMs](https://github.com/MoonshotAI/Kimi-k1.5/blob/main/Kimi_k1.5.pdf)，自己转存了一份：[pdf](https://github.com/daiwk/collections/blob/master/assets/Kimi_k1.5.pdf)

### O1 Embedder

[O1 Embedder: Let Retrievers Think Before Action](https://arxiv.org/abs/2502.07555)

生成关于输入查询的thought，然后和question一起拼接，然后分别独自生成嵌入，然后池化聚合。也就是说，这个Embedding模型比之前的模型多了个thought的输出。

微调，两个并行任务，一个是thought生成，一个是对比学习。

微调数据怎么来，那就是生成后进行打分评价。首先，使用LLM生成初始思想，然后使用检索评分器来根据初始思想和目标文档之间的相关性评分，最终通过多数投票选择最佳thought。

### bridge

[From Few to Many: Self-Improving Many-Shot Reasoners Through Iterative Optimization and Generation](https://arxiv.org/pdf/2502.00330)

问题背景：传统的LLM在处理长文本时效率低下，尤其是在需要进行多步推理的任务中。近年来，随着长上下文LLM的发展，出现了多示例学习（many-shot ICL）的范式，即通过更多的示例来提升模型性能。然而，这种范式的效果和影响因素仍需进一步研究。

研究动机：为了提升多示例学习的效率，分析了影响多示例学习效果的关键因素，并发现**仅少数关键示例**就能显著提升性能。基于这一发现，团队提出了一种新的算法，通过**优化选择关键示例**和**生成新的示例**来进一步提升模型的推理能力。

bridge算法结合了优化和生成两个步骤：

* 在优化步骤中，使用贝叶斯优化（Bayesian optimization）来发现关键示例；
* 在生成步骤中，利用这些关键示例作为示范，重新生成更多的示例，从而在多示例学习中提高模型性能。

### BFS-Prover

[超越DeepSeek-ProverV1.5！豆包首个形式化数学推理模型BFS-Prover来了，直接开源](https://mp.weixin.qq.com/s/OneF2OtnYbDxeZhDzXPM4A)

[BFS-Prover: Scalable Best-First Tree Search for LLM-based Automatic Theorem Proving](https://arxiv.org/abs/2502.03438)

<https://huggingface.co/bytedance-research/BFS-Prover/tree/main>

### CoE

[为DeepSeek MoE模型带来「免费午餐」加速，专家链可大幅提升LLM的信息处理能力](https://mp.weixin.qq.com/s/qTD96rcSY1cKNmH8B30V-w)

### 显式CoT

[揭示显式CoT训练机制：思维链如何增强推理泛化能力](https://mp.weixin.qq.com/s/sE2ckVDJPdMPrC9dfcvSKA)

[Unveiling the Mechanisms of Explicit CoT Training: How Chain-of-Thought Enhances Reasoning Generalization](https://arxiv.org/abs/2502.04667)

### 认知行为

[为什么Qwen能自我改进推理，Llama却不行？斯坦福找到了原理](https://mp.weixin.qq.com/s/OvS61OrDp6rB-R5ELg48Aw)

[Cognitive Behaviors that Enable Self-Improving Reasoners, or, Four Habits of Highly Effective STaRs](https://arxiv.org/abs/2503.01307)

### DR, GRPO

[揭秘DeepSeek R1-Zero训练方式，GRPO还有极简改进方案](https://mp.weixin.qq.com/s/SBGO_1JXnI9CGcLL8eANBA)

[Understanding R1-Zero-Like Training: A Critical Perspective](https://github.com/sail-sg/understand-r1-zero/blob/main/understand-r1-zero.pdf)

<https://github.com/sail-sg/understand-r1-zero>

### AReaL

[200美金，人人可手搓QwQ，清华、蚂蚁开源极速RL框架AReaL-boba](https://mp.weixin.qq.com/s/Cx8QHv2TVl-0mIJzKT7BDA)

<https://github.com/inclusionAI/AReaL>

### TAO

[模型调优无需标注数据！将Llama 3.3 70B直接提升到GPT-4o水平](https://mp.weixin.qq.com/s/WfJtfEN1gHg5NvgCYwefsw)

<https://www.databricks.com/blog/tao-using-test-time-compute-train-efficient-llms-without-labeled-data>

TAO 的核心创新在于摒弃了人工标注数据，转而利用测试时计算引导模型探索任务的可能响应，再通过强化学习根据响应评估结果更新模型参数。

该流程通过可扩展的测试时计算（而非昂贵的人工标注）实现质量提升，并能灵活融入领域知识（如定制规则）。令人惊讶的是，在高质量开源模型上应用该方法时，其效果往往优于依赖人工标注的传统方案。

TAO 包含四个核心阶段：

* 响应生成：该阶段首先收集任务相关的输入提示或查询样本。在Databricks平台上，这些提示可通过AI Gateway自动采集；
* 响应评分：系统化评估生成响应的阶段。评分方法包含多种策略，例如基于奖励模型、偏好评分，或利用LLM评判器及定制规则进行任务特异性验证，确保每个响应都做到最优；
* 强化学习（RL）训练：最终阶段采用基于强化学习的方法更新大语言模型，引导模型生成与高分响应高度契合的输出。通过这一自适应学习过程，模型持续优化预测能力以提升质量；
* 持续改进：TAO仅需LLM输入样本作为数据源。用户与LLM的日常交互自然形成该数据（一旦模型部署使用，即可自动生成下一轮TAO训练数据）。在 Databricks平台上，借助TAO机制，模型会随着使用频次增加而持续进化。

虽然TAO在训练阶段使用了测试时计算，但最终产出的模型在**执行任务时仍保持低推理成本**。这意味着经过TAO调优的模型在推理阶段（与原版模型相比）具有完全相同的计算开销和响应速度，显著优于 o1、o3 和 R1 等依赖测试时计算的模型。实验表明：采用 TAO 训练的高效开源模型，在质量上足以比肩顶尖的商业闭源模型。

TAO为AI模型调优提供了一种突破性方法：

* 不同于耗时且易出错的提示工程；
* 也区别于需要昂贵人工标注数据的传统微调；
* TAO 仅需工程师提供任务相关的典型输入样本，即可实现卓越性能。

### deepcoder

DeepCoder-14B-Preview

[UC伯克利华人开源14B「o3-mini」，代码版R1突袭OpenAI王座！](https://mp.weixin.qq.com/s/VxGofHl_KeuQa9MBD4AaTg)

### Think twice

[Think Twice: Enhancing LLM Reasoning by Scaling Multi-round Test-time Thinking](https://arxiv.org/pdf/2503.19855)

多轮思考（Multi-round Thinking）：通过迭代地利用之前的答案作为提示，对模型的推理过程进行逐步优化。允许模型在多个推理轮次中重新考虑之前的答案，每次迭代只保留上一轮的最终答案，摒弃中间推理步骤。这一过程类似于人类的认知模式，有助于模型纠正常见的推理错误。

<https://github.com/a-m-team/a-m-models>

### glm-z1

[智谱深夜开源新一代GLM模型，推理速度快DeepSeek-R1八倍，还启用了全新域名Z.ai](https://mp.weixin.qq.com/s/kPAIeYwIAqyIPf1585jR-w)

<https://github.com/THUDM/GLM-4/blob/main/README_zh.md>

<https://huggingface.co/collections/THUDM/glm-4-0414-67f3cbcb34dd9d252707cb2e>

### d1

[扩散LLM推理用上类GRPO强化学习！优于单独SFT，UCLA、Meta新框架d1开源](https://mp.weixin.qq.com/s/57onGdSBuiQfvEJpOdU_eg)

[d1: Scaling Reasoning in Diffusion Large Language Models via Reinforcement Learning](https://arxiv.org/pdf/2504.12216)

<https://github.com/dllm-reasoning/d1>

### regtool

[ReTool: Reinforcement Learning for Strategic Tool Use in LLMs](https://arxiv.org/abs/2504.11536)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5b10d3fb37d47c72b92549f45e9a5e8efcd27175%2Fregtool.png?alt=media)

两阶段训练，先冷启注入pattern，再RL进一步泛化

* 阶段1：收集纯文本数学推理数据->人工专家和Deepseek-R1双重验证过滤无效数据->直接prompt模型将手动计算步骤替换为代码片段，生成代码增强的推理数据->格式/答案验证->得到的数据集用来SFT冷启模型
* 阶段2：RL rollout时候当检测到`\code`时停止生成，代码片段在sandbox中执行，并将解释器反馈拼接到原来生成序列中，使用是否做对（+1/-1）作为奖励信号进行PPO训练

### RLVR的局限

[RL真让大模型更会推理？清华新研究：其能力边界或仍被基座「锁死」](https://mp.weixin.qq.com/s/2-GDxs8j1QYh1VnW9iBnXw)

[Does Reinforcement Learning Really Incentivize Reasoning Capacity in LLMs Beyond the Base Model?](https://arxiv.org/abs/2504.13837)

RLVR（可验证奖励的强化学习）只是将采样做得更有效率，而其输出的正确答案，早已藏在基座模型的「基因」里。

### RLFT

[谷歌DeepMind：大模型也很任性，知道最优路径偏要撞南墙](https://mp.weixin.qq.com/s/8wxEyYNYr5L9k0Kb64_O4g)

[LLMs are Greedy Agents: Effects of RL Fine-tuning on Decision-Making Abilities](https://arxiv.org/pdf/2504.16078)

### CoRT

[强迫模型自我争论，递归思考版CoT热度飙升！网友：这不就是大多数推理模型的套路吗？](https://mp.weixin.qq.com/s/lkQEy395JPnlntV1j6EfTQ)

<https://github.com/PhialsBasement/Chain-of-Recursive-Thoughts>

### R1-Reward

[RL训练总崩溃？R1-Reward稳定解锁奖励模型Long-Cot推理能力](https://mp.weixin.qq.com/s/PHGC6lQt5mXuieK6-8DiYw)

[R1-Reward: Training Multimodal Reward Model Through Stable Reinforcement Learning](https://arxiv.org/abs/2505.02835)

<https://github.com/yfzhang114/r1_reward>

### CTM

[连续思维机器来了！Transformer八子之一创企推出，让AI不再「一步到位」拍脑袋做决定](https://mp.weixin.qq.com/s/L6Tlpf6xlL6VblTnV0MEfg)

<https://github.com/SakanaAI/continuous-thought-machines/>

<https://sakana.ai/ctm/>

[Continuous Thought Machines](https://arxiv.org/abs/2505.05522)

### INTELLECT-2

[全球闲置算力训个模型，性能媲美R1，老黄天塌了！Karpathy曾投资它](https://mp.weixin.qq.com/s/NjQi_KAE18YkIBEqttnUuQ)

### AM-Thinking-v1

[纯蒸馏模型 SOTA 出现！直接 SFT 成本直降 50 倍，数据已全部开源](https://mp.weixin.qq.com/s/OlVQzw_WwziQTi0QnyWuOw)

[Not All Correct Answers Are Equal: Why Your Distillation Source Matters](https://arxiv.org/abs/2505.14464)

2个数据集：[a-m-team/AM-Thinking-v1-Distilled](https://huggingface.co/datasets/a-m-team/AM-Thinking-v1-Distilled)和[a-m-team/AM-Qwen3-Distilled](https://huggingface.co/datasets/a-m-team/AM-Qwen3-Distilled)

### STILL系列

<https://github.com/RUCAIBox/Slow_Thinking_with_LLMs>

### Embedded

[大模型推理的“左右脑”革命！华为盘古Embedded凭昇腾之力，让快慢思考合二为一](https://mp.weixin.qq.com/s/Eem1OYzEE1sM1-MWqsfcpA)

[Pangu Embedded: An Efficient Dual-system LLM Reasoner with Metacognition](https://arxiv.org/abs/2505.22375)

### CoM

[微软等提出「模型链」新范式，与Transformer性能相当，扩展性灵活性更好](https://mp.weixin.qq.com/s/UFqC41KYaE3h6KnbLw5iXQ)

[Chain-of-Model Learning for Language Model](https://arxiv.org/pdf/2505.11820)

* CoR（Chain-of-Representation，表征链）：任何表征总是可以看作是隐藏维度上多个子表征的组合。每个子表征对应一条链。通过使用不同数量的前导链（preceding chains），其对应的特征可以用来编码不同的知识（称之为 scale）
* CoL（Chain-of-layer，链式层）：在不同尺度之间引入因果依赖关系，确保每个尺度只能使用其前面尺度的信息。
* CoLM（语言模型链）：将CoL的思想应用于 Transformer 的每一层，重新构建了语言模型架构
* CoLM-Air：在注意力模块中进一步引入了键值共享机制，该机制要求所有键和值都在第一个链中进行计算

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-99d39dbdcdeaf8887c88fe16576071e119ac2cbf%2Fcor.png?alt=media)

### ProRL

[英伟达揭示RL Scaling魔力！训练步数翻倍=推理能力质变，小模型突破推理极限](https://mp.weixin.qq.com/s/RmeTW83hjTQYJLpl435o6A)

[ProRL: Prolonged Reinforcement Learning Expands Reasoning Boundaries in Large Language Models](https://arxiv.org/pdf/2505.24864)

<https://huggingface.co/nvidia/Nemotron-Research-Reasoning-Qwen-1.5B>

将RL训练步数从传统的几百步大幅提升至2000步以上，释放了小模型潜藏的巨大潜力

* **多样化可验证奖励任务**：引入了数学、编程、科学问答（STEM）、逻辑谜题、指令遵循等多领域数据，这些任务具有程序化可验证的正确答案，为RL训练提供了可靠、客观的监督信号，不再依赖「易被骗」的奖励模型。
* **GRPO+DAPO**：在GRPO框架基础上，融合DAPO关键的**解耦裁剪**（Decoupled Clipping）来避免策略更新失衡，以及**动态采样**（Dynamic Sampling）来过滤掉「太容易」或「完全不会」的无效样本，提升训练效率。
* **KL正则+周期性参考策略重置**：
  * 与一些去KL正则的做法相反，本论文发现**适度KL惩罚**是稳定训练的关键。
  * 引入**参考策略重置**机制：当KL骤增或性能下滑时，**重置参考策略为当前模型副本，并重置优化器**，让训练「重启」。这个简单机制有效打破训练停滞，使模型持续进化。

### TALE

[ACL 2025 | 基于Token预算感知的大模型高效推理技术](https://mp.weixin.qq.com/s/ErKi3J41U33C-TzMgHmXPw)

[Token-Budget-Aware LLM Reasoning](https://arxiv.org/pdf/2412.18547)

<https://github.com/GeniusHTX/TALE>

### Q-chunking

[用动作分块突破RL极限，伯克利引入模仿学习，超越离线/在线SOTA](https://mp.weixin.qq.com/s/y_g6Buw0DEzW0gXVOqYPdg)

[Reinforcement Learning with Action Chunking](https://arxiv.org/abs/2507.07969)

<https://github.com/ColinQiyangLi/qc>

传统强化学习方法在此类任务中的探索能力常常不足，因为只有在执行一系列较长的动作序列后才能获得奖励，这导致合理时间内找到有效策略变得极其困难。

模仿学习通过观察专家的行为并模仿其策略来学习，通常用于强化学习的早期阶段，尤其是在状态空间和动作空间巨大且难以设计奖励函数的场景。

Q-chunking将模仿学习中的动作分块（action chunking）引入到基于时序差分（Temporal Difference, TD）的强化学习中。

### 小结

[从ReFT, Kimi K1.5到DeepSeek R1，聊聊Reasoning Model的精巧实现](https://mp.weixin.qq.com/s/yaBMe-XOlINOBg6_CL0vEw)

[张俊林：MCST树搜索会是复刻OpenAI O1/O3的有效方法吗](https://mp.weixin.qq.com/s/_Uobawe6yf1eNzScNkySHA)

## R1的复现与部署

### open-r1

<https://github.com/huggingface/open-r1/>

[开源22万条DeepSeek R1的高质量数据！你也能复现DeepSeek了](https://mp.weixin.qq.com/s/yIEisGrfguRkpjRnHmNYCg)

<https://huggingface.co/datasets/open-r1/OpenR1-Math-220k>

### unlock-deepseek

[DeepSeek R1 Zero中文复现教程来了！](https://mp.weixin.qq.com/s/Z7P61IV3n4XYeC0Et_fvwg)

### open-reasoner-zero

[1/30训练步骤复刻DeepSeek-R1-Zero，沈向洋姜大昕张祥雨等开源推理模型RL训练方法](https://mp.weixin.qq.com/s/vkEr6oa1JQ_ntzEYJ115yg)

<https://github.com/Open-Reasoner-Zero/Open-Reasoner-Zero/>

### vllm跑gguf的r1

<https://github.com/vllm-project/vllm/pull/13167>

从源码安装参考<https://docs.vllm.ai/en/latest/getting_started/installation/gpu/index.html#build-wheel-from-source>

```shell
export https_proxy=xxxxxx
pip3 install setuptools_scm ## 不知道是不是需要的
git clone https://github.com/vllm-project/vllm.git
cd vllm
VLLM_USE_PRECOMPILED=1 pip3 install --editable .

# 如果网络有问题，可以直接pip3 install .
# 下面这3步还是比较必要的
cp -r /usr/local/lib/python3.10/dist-packages/vllm /usr/local/lib/python3.10/dist-packages/vllm.bk
rm -rf /usr/local/lib/python3.10/dist-packages/vllm
cp -r ./vllm /usr/local/lib/python3.10/dist-packages
```

* 去<https://huggingface.co/deepseek-ai/DeepSeek-R1/tree/main>把各个非model的小文件下载下来（可以直接`GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/deepseek-ai/DeepSeek-R1`）也要下载，
* 去<https://huggingface.co/unsloth/DeepSeek-R1-GGUF/tree/main>把config.json下载下来，把json里的torch\_dtype里的bfloat16改成float16，覆盖掉上面那个目录里的config.json

上面的那些文件都放到`./unsloth_dir`目录下，注意，目前只能用Q2 Q4那种量化，1.58bit那种动态量化不支持

```shell
cd ./unsloth_dir/
# merge成一个gguf
llama.cpp/llama-gguf-split --merge ./DeepSeek-R1-Q2_K/DeepSeek-R1-Q2_K-00001-of-00005.gguf ./unsloth_dir/merge.gguf 
```

代码：

```python
from vllm import LLM, SamplingParams

import multiprocessing

if __name__ == "__main__":
    # 这坨要放main里，deepseek教我的
    multiprocessing.set_start_method('spawn', force=True)
    
    llm = LLM(model="./unsloth_dir/merge.gguf",
              tokenizer="./unsloth_dir/DeepSeek-R1",
              hf_config_path="./unsloth_dir/DeepSeek-R1",
              enforce_eager=True, 
              tensor_parallel_size=8, #
              trust_remote_code=True, 
              distributed_executor_backend="mp",
              max_model_len=2000)
    sampling_params = SamplingParams(temperature=0.5, max_tokens=2000)
    
    def print_outputs(outputs):
        for output in outputs:
            prompt = output.prompt
            generated_text = output.outputs[0].text
            print(f"Prompt: {prompt!r}, Generated text\n: {generated_text}")
        print("-" * 80)
    conversation = [
        {
            "role": "user",
            "content": "中国的首都是哪里",
        },
    ]
    outputs = llm.chat(conversation,
                       sampling_params=sampling_params,
                       use_tqdm=False)
    print_outputs(outputs)
```

运行：

```shell
VLLM_MLA_DISABLE=1 VLLM_WORKER_MULTIPROC_METHOD=spawn python3 vllm_deepseek.py 
```

### unsloth

#### 跑满血版1.58bit infer

<https://unsloth.ai/blog/deepseekr1-dynamic>

#### 让小模型有reasoning能力

<https://unsloth.ai/blog/r1-reasoning>

### Logic-RL与reinforce-lite

[10美元成功复现DeepSeek顿悟时刻，3B模型爆发超强推理！微软论文反驳涌现](https://mp.weixin.qq.com/s/xH86_m71lZnSVMM7q_jzXw)

#### reinforce-lite

<https://medium.com/@rjusnba/overnight-end-to-end-rl-training-a-3b-model-on-a-grade-school-math-dataset-leads-to-reasoning-df61410c04c6>

#### Logic-RL

[Logic-RL: Unleashing LLM Reasoning with Rule-Based Reinforcement Learning](https://arxiv.org/pdf/2502.14768)

### SGLang对R1的加速

[全球首个，最接近原版DeepSeek开源复现来了！R1四个月狂飙26倍](https://mp.weixin.qq.com/s/O8_qnIsxVoc98y3RVR9sYw)

<https://lmsys.org/blog/2025-05-05-large-scale-ep/>

<https://docs.sglang.ai/references/deepseek.html>

## R1的微调

### ColossalAI

[DeepSeek V3+R1满血微调工具上线！一键启动，硬件要求降10倍](https://mp.weixin.qq.com/s/ywJAbcjXPef1RazHj1HIjg)

<https://github.com/hpcaitech/ColossalAI>

#### lora sft满血deepseek V3/R1

* 数据：<https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/examples/training_scripts/lora_sft_data.jsonl>
* fp8权重转bf16：<https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/fp8_cast_bf16.py>
* 脚本：<https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/examples/training_scripts/lora_finetune.py>

通过使用 LoRA 等优化，示例命令已将 SFT DeepSeek V3/R1 671B 最低硬件要求降低近 10 倍，可使用 32 个 Ascend 910B NPU 64GB（使用 ep=8,pp=4）或 24 个 H100/H800 GPU（使用 ep=8,pp=3）。如果你通过 --zero\_cpu\_offload 启用 CPU offload，硬件要求可以进一步降低，但会损失一定的训练速度。

```shell
colossalai run --hostfile path-to-host-file --nprocpernode 8 \
  lorafinetune.py --pretrained path-to-DeepSeek-R1-bf16 \
  --dataset path-to-dataset.jsonl --plugin moe \
  --lr 2e-5 --maxlength 256 -g --ep 8 --pp 3 \
  --batchsize 24 --lorarank 8 --loraalpha 16 \
  --numepochs 2 --warmupsteps 8 \
  --tensorboarddir logs --save_dir DeepSeek-R1-bf16-lora
```

也可以使用上述脚本，将并行度高效扩展至数百及数千卡，快速完成 DeepSeek V3/R1 671B 全参微调或并行加速。

#### 用强化学习微调蒸馏版DeepSeek

奖励设计：

1. 奖励 = 0，如果格式是错误的；
2. 奖励 = 1， 如果格式是正确的但是结果是错误的；
3. 奖励 = 10，如果格式与结果都是正确的。

* 模板和设定：<https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/conversation_template/Qwen_Qwen2.5-3B.json>
* 启动脚本：<https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/examples/training_scripts/train_grpo.sh>

## OpenAI

### O3

[OpenAI：强化学习确实可显著提高LLM性能，DeepSeek R1、Kimi k1.5发现o1的秘密](https://mp.weixin.qq.com/s/jh5L5MV6jU8W6coFH7jsAg)

[Competitive Programming with Large Reasoning Models](https://arxiv.org/pdf/2502.06807)

[刚刚，OpenAI放出最后大惊喜o3，高计算模式每任务花费数千美元](https://mp.weixin.qq.com/s/KmxARRFsjXiLTF8HScsmOQ)

### O3与隐私

[一张照片、一句简单提示词，就被ChatGPT人肉开盒，深度解析o3隐私漏洞](https://mp.weixin.qq.com/s/_pDsKWz9f9rjXFHWN2UJ_A)

[Doxing via the Lens: Revealing Privacy Leakage in Image Geolocation for Agentic Multi-Modal Large Reasoning Model](https://arxiv.org/abs/2504.19373)

## Claude

### Claude 3.7 Sonnet

[全球首个混合推理模型：Claude 3.7 Sonnet来袭，真实编码力压一切对手](https://mp.weixin.qq.com/s/RzdrxKbHKKqtN-FvbOQsZw)

* 既是普通的 LLM，又是推理模型。你可以选择何时希望模型正常回答，何时希望它在回答之前思考更长时间。在标准模式下，Claude 3.7 Sonnet 是前代 Claude 3.5 Sonnet 的升级版。在扩展思维模式下，它会在回答之前进行自我反思，从而提高其在数学、物理、指令遵循、编码和许多其他任务上的表现。Anthropic 发现，两种模式下，模型的提示词工作方式类似。
* 当通过 API 使用 Claude 3.7 Sonnet 时，用户还可以控制思考预算。你可以告诉 Claude 思考不超过 N 个 token。对于任何 N 值，其输出限制为 128K 个 token。这允许用户在速度（和成本）和答案质量之间进行权衡。
* 第三，在开发自家的推理模型时，Anthropic 对数学和计算机科学竞赛问题的优化较少，而是将重点转向更能反映企业实际使用 LLM 方式的现实任务。

[Claude 3.7 Sonnet System Card](https://assets.anthropic.com/m/785e231869ea8b3b/original/claude-3-7-sonnet-system-card.pdf)

## 字节

[200B参数击败满血DeepSeek-R1，字节豆包推理模型Seed-Thinking-v1.5要来了](https://mp.weixin.qq.com/s/wUzb58pUnZ1s7fO9aYs1vQ)

[Seed-Thinking-v1.5: Advancing Superb Reasoning Models with Reinforcement Learning](https://github.com/ByteDance-Seed/Seed-Thinking-v1.5/blob/main/seed-thinking-v1.5.pdf)

### DAPO

[超越DeepSeek GRPO的关键RL算法，字节、清华AIR开源DAPO](https://mp.weixin.qq.com/s/_w_HtjNQiG-yP5LEN85o0Q)

[DAPO: An Open-Source LLM Reinforcement Learning System at Scale](https://dapo-sia.github.io/static/pdf/dapo_paper.pdf)

<https://github.com/volcengine/verl/tree/gm-tyx/puffin/main/recipe/dapo>

数据：<https://huggingface.co/datasets/BytedTsinghua-SIA/DAPO-Math-17k>

### VAPO

[字节新作 VAPO：使用基于价值的强化学习框架进行长思维链推理](https://mp.weixin.qq.com/s/oFyW439e8B1rkogu5rjH_g)

[VAPO: Efficient and Reliable Reinforcement Learning for Advanced Reasoning Tasks](https://arxiv.org/abs/2504.05118)

### POLARIS

[Seed Research｜4B 模型数学推理接近 235B 表现，Seed 最新强化学习配方全面开源](https://mp.weixin.qq.com/s/6ohGURiGs9z-Osh_Ew7Grw)

<https://github.com/ChenxinAn-fdu/POLARIS>

## 多模态推理

### 综述

[Rule-based强化学习≠古早逻辑规则！万字拆解o1多模态推理最新进展](https://mp.weixin.qq.com/s/8pwCPuXzXoMJsDmdL9tPGA)

[Aligning Multimodal LLM with Human Preference: A Survey](https://arxiv.org/abs/2503.14504)

### 视觉推理

[视觉强化微调！DeepSeek R1技术成功迁移到多模态领域，全面开源](http://mp.weixin.qq.com/s/VCSUQXV7yv9MdIWQlxh7dQ)

[Visual-RFT: Visual Reinforcement Fine-Tuning](https://arxiv.org/abs/2503.01785)

<https://github.com/Liuziyu77/Visual-RFT>

### R1V

[全球首个工业界多模态推理模型开源！38B硬刚DeepSeek-R1，训练秘籍全公开](https://mp.weixin.qq.com/s/CYNce3oHoDrsOJSv5Pj6Nw)

<https://github.com/SkyworkAI/Skywork-R1V>

[Skywork R1V: Pioneering Multimodal Reasoning withChain-of-Thought](https://github.com/SkyworkAI/Skywork-R1V/blob/main/Skywork_R1V.pdf)

### Video-T1

[视频生成的测试时Scaling时刻！清华开源Video-T1，无需重新训练让性能飙升](https://mp.weixin.qq.com/s/HtJHXGgTAhi-uBWSsgqOKQ)

[Video-T1: Test-Time Scaling for Video Generation](https://arxiv.org/pdf/2503.18942)

<https://github.com/liuff19/Video-T1>

### mureka o1(音乐)

[音乐界迎来自己的DeepSeek！全球首个音乐推理大模型Mureka O1上线，超越Suno](https://mp.weixin.qq.com/s/XF9HQr-qlXfWGaQlesCaHQ)

[MusiCoT: Analyzable Chain-of-Musical-Thought Prompting for High-Fidelity Music Generation](https://musicot.github.io/MusiCoT_paper.pdf)

<https://musicot.github.io/>

### visual planning

[只用图像也能思考，强化学习造就推理模型新范式！复杂场景规划能力Max](https://mp.weixin.qq.com/s/KXx1t3jIlhLWu0rlVoQWNA)

[Visual Planning: Let’s Think Only with Images](https://arxiv.org/pdf/2505.11409)

<https://github.com/yix8/VisualPlanning>

### DeepEyes

[OpenAI未公开的o3「用图思考」技术，被小红书、西安交大尝试实现了](https://mp.weixin.qq.com/s/yyfeEmxmIaA7Qu5raGVHyA)

[DeepEyes: Incentivizing "Thinking with Images" via Reinforcement Learning](https://arxiv.org/abs/2505.14362)

<https://github.com/Visual-Agent/DeepEyes>

## 高效reasoning

### reasoning economy

[港中文发布全新视角高效Reasoning综述！idea已充满大脑...](https://mp.weixin.qq.com/s/rgoJlXinM-NtAjnuXr4Kfw)

[Harnessing the Reasoning Economy A Survey of Efficient Reasoning for Large Language Models](https://arxiv.org/pdf/2503.24377)

<https://github.com/DevoAllen/Awesome-Reasoning-Economy-Papers>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-41dd4dcf636fab37471f293e11c3497cad32aaa2%2Fpost-training-reason-economy.png?alt=media)

* 数据：
  * 干掉冗余、噪声、太长的数据
  * 保留高质量数据
* 算法：
  * Long2Short RL：惩罚过长的输出
  * budget-aware tuning：简单问题输出短，复杂问题输出长
  * CoT Compression：显式/隐式压缩CoT
* 模型：
  * adaptive Activated Parameters：类似稀疏激活
  * Model Cooperation：搞2个模型，简单问题走简单模型，复杂问题走复杂模型

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d24040f24c8f6cbec157bfca2b0e1f59fb286bec%2Ftest-time-reason-economy.png?alt=media)

* 输入侧：解码之前进行自适应预算分配
  * 对输入进行成本预估
* 输出侧：
  * thinking pattern的自适应预算分配：简单问题直接剪枝，复杂问题需要回溯+验证+反思
  * 解码算法的自适应预算分配：简单问题贪心解码，复杂问题多一些采样

### stop overthinking

[大模型还有哪些值得研究的方向？ || 大模型高效推理(Efficient Reasoning)研究综述](https://mp.weixin.qq.com/s/vUcmlaJ4zMmTtDolJLqJrA)

[Stop Overthinking: A Survey on Efficient Reasoning for Large Language Models](https://arxiv.org/pdf/2503.16419)

<https://github.com/Eclipsess/Awesome-Efficient-Reasoning-LLMs>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4b09c6253072eaad7e209c984955f9870d91cd50%2Fefficient-cot.png?alt=media)

* model：
  * length reward：RL时加上新的reward，鼓励答案正确且cot短的
  * variable-length cot reasoning data：构造不同长度cot的数据集，然后sft
* reasoning-output：
  * latent reasoning：将reasoning steps压缩成latent表示
  * dynamic reasoning：reasoning的过程改成投机采样、拒绝采样、tree-of-thoughts等方式
* input prompt：
  * length prompts：let's use less than k tokens
  * routing by difficulty：训一个小模型，决定简单问题不思考，困难问题再思考

例如[跟着台大李宏毅老师学：别让推理模型想太多](https://mp.weixin.qq.com/s/dXxuRN311-c6CN4zOl8lFg)里提到的[L1: Controlling How Long A Reasoning Model Thinks With Reinforcement Learning](https://arxiv.org/pdf/2503.04697)

## RL+reasoning的讨论（学习!）

[What is the objective of reasoning with reinforcement learning?](https://arxiv.org/pdf/2510.13651)

## RL最新进展

### RL Grokking

[AGI前夜重磅：RL突破模型「认知上限」，真·学习发生了！](https://mp.weixin.qq.com/s/0yk3VEJrpXWTTnR15bB4Qg)

### Training free-GRPO

[X上63万人围观的Traning-Free GRPO：把GRPO搬进上下文空间学习](https://mp.weixin.qq.com/s/mzww1pKILFSFqRA8aui0fA)

[Training-Free Group Relative Policy Optimization](https://arxiv.org/abs/2510.08191)

<https://github.com/TencentCloudADP/youtu-agent/tree/training_free_GRPO>

### R-HORIZON

[R-HORIZON：长程推理时代来临，复旦NLP&美团LongCat重磅发布LRMs能力边界探测新范式](https://mp.weixin.qq.com/s/d7sPy0hCnOu9usRFtiAepg)

[R-HORIZON: How Far Can Your Large Reasoning Model Really Go in Breadth and Depth?](https://arxiv.org/abs/2510.08189)

<https://github.com/meituan-longcat/R-HORIZON>

### Reasoning with sampling

[不用强化学习也能推理，哈佛新采样算法竟能让基础模型比肩GRPO后训练版本](https://mp.weixin.qq.com/s/JbJI5aixLAt9hfcqrepZoQ)

[Reasoning with Sampling: Your Base Model is Smarter Than You Think](https://www.arxiv.org/pdf/2510.14901)

<https://github.com/aakaran/reasoning-with-sampling>

### DisCO

[NeurIPS25高分论文｜以判别式监督学习强化推理LLM，解决难度偏差和熵崩塌难题](https://mp.weixin.qq.com/s/gmvJx4C_OaVvA-0zm_vbyg)

[DisCO: Reinforcing Large Reasoning Models with Discriminative Constrained Optimization](https://arxiv.org/abs/2505.12366)

<https://github.com/Optimization-AI/DisCO>

## 推理模型总结

[从自我进化视角出发，全面解析LLM的推理能力技术演进路径](https://mp.weixin.qq.com/s/hkYW0c26eLEHE9WgIQxwHw)

[A Survey on LLM Complex Reasoning through the Lens of Self-Evolution](https://github.com/daiwk/collections/blob/master/assets/Survey_of_LLM_Reaoning_by_Self_Evolution.pdf)

<https://github.com/cs-holder/Reasoning-Self-Evolution-Survey>

(toread)

更新的：

[DeepSeek-R1之后推理模型发展如何？Raschka长文梳理后R1时代14篇重要论文](https://mp.weixin.qq.com/s/OMblIwzOJg9POx2hDtjekg)

[从o1-mini到DeepSeek-R1，万字长文带你读懂推理模型的历史与技术](https://mp.weixin.qq.com/s/t19D5_2nsbIVI_eemLtx-Q)

<https://cameronrwolfe.substack.com/p/demystifying-reasoning-models>

<https://openai.com/index/learning-to-reason-with-llms/>这里的图：说明openai发现了在训练时用大规模的强化学习（train-time compute）以及在测试时花更多的时间思考（test-time computing）都能提升数学任务上的效果

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c7fbe4ab036a0b67ca32880233417c5e7e41d5b5%2Fcompute-power-law.png?alt=media)


# 1.9.llm\_others

## 一些工具

论文翻译网站：<https://hjfy.top/>

## 泄露的系统提示词

<https://github.com/asgeirtj/system_prompts_leaks/blob/main/OpenAI/gpt-5-thinking.md>

## 语言物理学

(toread)

[大模型边推理边纠错，有可能做到吗？这是ICML爆火的演讲](https://mp.weixin.qq.com/s/NOVFYmXiHUJ7x1SU7yH0CA)

<https://www.bilibili.com/video/BV1Yw4m1k7nH>

## 蒸馏

### ABKD

[ICML Spotlight 2025丨追求概率质量的帕累托最优：基于广义α-β散度引导的知识蒸馏框架ABKD](https://mp.weixin.qq.com/s/UwRwDJJxWrS-9mVoHSUPDQ)

[ABKD: Pursuing a Proper Allocation of the Probability Massin Knowledge Distillation via α-β-Divergence](https://arxiv.org/pdf/2505.04560)

<https://github.com/ghwang-s/abkd>

现有问题：

* 前向KL：概率分配过于“佛系”，学生“雨露均沾”，难专注目标类
* 反向KL：概率分配过于“内卷”，学生“死磕”高置信度类，忽略教师全局信息

ABKD引入α-β散度，统一前向/反向KL，并推广到此前未探索的海灵格距离和β-散度等。

## LLM常见难题

### LLM as a judge

[A Survey on LLM-as-a-Judge](https://arxiv.org/pdf/2411.15594)

[Learning to Plan & Reason for Evaluation with Thinking-LLM-as-a-Judge](https://arxiv.org/pdf/2501.18099)，meta的2025年1月的

### 重复生成

<https://www.zhihu.com/question/616130636>

<https://mp.weixin.qq.com/s/cSwWapqFhxu9zafzPUeVEw>

[Interpreting the Repeated Token Phenomenon in Large Language Models](https://arxiv.org/pdf/2503.08908)

deepmind的文章，发现和attention sink（初始token会有很高的attn score）有关，初始注意力层负责标记序列中的第一个单词，而后期的一些特定神经元则会放大这些标记单词的隐藏状态值。当处理重复单词时，这一机制会失效，导致模型行为异常。

<https://github.com/yossigandelsman/attn_sinkhole>

### 幻觉

#### 综述

[OpenAI Lilian Weng万字长文解读LLM幻觉：从理解到克服](https://mp.weixin.qq.com/s/UGcui0rLW2Vz7y2Mt4atqA)

<https://lilianweng.github.io/posts/2024-07-07-hallucination/>

#### 语义熵

[语义熵识破LLM幻觉！牛津大学新研究登Nature](https://mp.weixin.qq.com/s/fdLZ9DDqG9C_uxAAlKgQbw)

[Detecting hallucinations in large language models using semantic entropy](https://www.nature.com/articles/s41586-024-07421-0)

### Zilliz

[向量数据库的中场战事：长期主义者Zilliz如何全球突围](https://mp.weixin.qq.com/s/lRryjRiUGKdT11qfi62pUg)

### 记忆能力

[Localizing Paragraph Memorization in Language Models](https://arxiv.org/pdf/2403.19851v1.pdf)

对应代码：<https://github.com/googleinterns/localizing-paragraph-memorization>

我们能否定位出语言模型中用于记忆其训练数据中整段文字的权重和机制？

* 尽管记忆现象分布在模型的多个层级和组件中，但记忆段落的梯度在空间上有可辨别的模式，即**在较低模型层级的梯度比非记忆example的梯度大**。
* 通过**仅微调高梯度的权重**，可以使模型**遗忘记忆的example**。
* 定位了一个特别参与段落记忆的**低层注意力头**，它**主要关注**在语料库级单词频率分布中**最不频繁出现的独特、罕见的token**。
* 总的来说，相较非记忆的续写，记忆续写不仅**更难以遗忘**，也**更难以损坏**。

#### reasoning

[Reasoning or Reciting? Exploring the Capabilities and Limitations of Language Models Through Counterfactual Tasks](https://arxiv.org/pdf/2307.02477) MIT的

[Do Large Language Models Latently Perform Multi-Hop Reasoning?](https://arxiv.org/pdf/2402.16837) deepmind的

[How do Language Models Bind Entities in Context?](https://arxiv.org/pdf/2310.17191) UC berkeley的，ICLR2024

#### memorizing

[Knowledge Neurons in Pretrained Transformers](https://arxiv.org/pdf/2104.08696) ACL 2022

[Language Modeling Is Compression](https://arxiv.org/pdf/2309.10668) ICLR 2024 deepmind

[Memorization Without Overfitting: Analyzing the Training Dynamics of Large Language Models](https://arxiv.org/pdf/2205.10770) meta NeurIPS 2022

### 越狱

[长文本之罪：Claude团队新越狱技术，Llama 2到GPT-4无一幸免](https://mp.weixin.qq.com/s/C0opoIzLCFojfmoa6poM8A)

### LLM compiler

[开发者狂喜！Meta最新发布的LLM Compiler，实现77%自动调优效率](https://mp.weixin.qq.com/s/Js0lUS_5ZPspVLazthkEOg)

[Meta Large Language Model Compiler: Foundation Models of Compiler Optimization](https://ai.meta.com/research/publications/meta-large-language-model-compiler-foundation-models-of-compiler-optimization/)

### ProLong

[2024 年了，你的长文本训练数据真的够长吗？](https://mp.weixin.qq.com/s/5dVm-VWiZG09ixMMegKCbw)

[Long Context is Not Long at All: A Prospector of Long-Dependency Data for Large Language Models](https://arxiv.org/pdf/2405.17915)

<https://github.com/October2001/ProLong>

### 白化

在 transformer 领域里，“白化”（whitening）主要是指一种对句子嵌入进行后处理的方法，通过将句子向量的均值变为0，并将协方差矩阵变为单位矩阵，从而解决句子嵌入中的各向异性问题。这种技术能够提高句子嵌入在语义相似性任务中的表现，并且加快检索速度。

[Whitening Sentence Representations for Better Semantics and Faster Retrieval](https://ar5iv.labs.arxiv.org/html/2103.15316)

代码：<https://github.com/bojone/BERT-whitening>

[Transformer Scale Gate for Semantic Segmentation](https://arxiv.org/pdf/2205.07056v1)

### 蒸馏

[Revisiting Knowledge Distillation for Autoregressive Language Models](https://arxiv.org/pdf/2402.11890)

[Meta开发System 2蒸馏技术，Llama 2对话模型任务准确率接近100%](https://mp.weixin.qq.com/s/QycbrMXsR0nUsvHBx0_GBw)

[Distilling System 2 into System 1](https://arxiv.org/pdf/2407.06023v2)

### 证明者-验证者博弈

[OpenAI超级对齐团队遗作：两个大模型博弈一番，输出更好懂了](https://mp.weixin.qq.com/s/MiLYbYcYUPO9rdQjijF_tQ)

[Prover-Verifier Games improve legibility of LLM outputs](https://arxiv.org/pdf/2407.13692)

参考：[Learning to Give Checkable Answers with Prover-Verifier Games](https://arxiv.org/pdf/2108.12099)

### 道德风险

[GPT-4o模仿人类声音，诡异尖叫引OpenAI研究员恐慌！32页技术报告出炉](https://mp.weixin.qq.com/s/XSTNHTILAOkINg7mxssb6g)

openai的报告：[GPT-4o System Card](https://cdn.openai.com/gpt-4o-system-card.pdf)

之前deepmind也有一个报告[The Ethics of Advanced AI Assistants](https://arxiv.org/pdf/2404.16244)

### 选择性偏差

[ACL2024|大模型选择偏差在腾讯广告特征评测上的优化及应用](https://mp.weixin.qq.com/s/0P1D1H1HoXMwZg2nBiM07Q)

[Strengthened Symbol Binding Makes Large Language Models Reliable Multiple-Choice Selectors](https://arxiv.org/pdf/2406.01026)

给定一个问题(question)及其对应的选项内容(options)，大模型无法把选项内容(option content)和对应的选项标识符(symbol，特指选项标识A/B/C/D)关联到一起。例如，当把正确答案"the president"放到选项B时，模型能够正确选择出答案；当我们把正确答案放到C时，模型依然选择"B"，即模型偏向于选"B"或者第二个答案，而忽略了正确答案的内容。

### lost in the middle

[Lost in the Middle: How Language Models Use Long Contexts](https://arxiv.org/pdf/2307.03172)

### reasoning boundary

[NeurIPS 2024 (Oral) | 如何量化与提升思维链的推理能力边界？](https://mp.weixin.qq.com/s/BwuGacSHKY4RTdvYNMa66Q)

[Unlocking the Capabilities of Thought: A Reasoning Boundary Framework to Quantify and Optimize Chain-of-Thought](https://arxiv.org/abs/2410.05695)

<https://github.com/LightChen233/reasoning-boundary>

### 语言≠思维

[语言≠思维，大模型学不了推理：一篇Nature让AI社区炸锅了](https://mp.weixin.qq.com/s/BgMNITn5e1RGUOHQLKv7yg)

<https://www.nature.com/articles/s41586-024-07522-w>

## 一些其他比较重要的工作

### 几篇出现频率比较高的论文

[Scaling instruction-finetuned language models](https://arxiv.org/pdf/2210.11416.pdf) 引用数800+

[How can we know what language models know?](https://arxiv.org/pdf/1911.12543.pdf) 引用数800+

[Chain of thought prompting elicits reasoning in large language models](https://arxiv.org/pdf/2201.11903.pdf)引用1800+

### Anthropic的一些工作

[Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback](https://arxiv.org/pdf/2204.05862.pdf)

[Studying Large Language Model Generalization with Influence Functions](https://arxiv.org/pdf/2308.03296.pdf)

[Measuring Faithfulness in Chain-of-Thought Reasoning](https://www-files.anthropic.com/production/files/measuring-faithfulness-in-chain-of-thought-reasoning.pdf)

[从Claude 3中提取数百万特征，首次详细理解大模型的「思维」](https://mp.weixin.qq.com/s/cZhmvAva6NDLG84kD819Ww)

[Scaling Dictionary Learning to Claude 3 Sonnet](https://transformer-circuits.pub/2024/scaling-monosemanticity/index.html)

[LLM惊现篡改代码获得奖励，欺骗人类无法根除逆转！Anthropic新作揭露惊人真相](https://mp.weixin.qq.com/s/Fgkkc3p7zIW8OrCvSU-2lA)

[SYCOPHANCY TO SUBTERFUGE: INVESTIGATING REWARD TAMPERING IN LANGUAGE MODELS](https://arxiv.org/pdf/2406.10162)

## 个性化搜索

随便找一篇[Denoising Attention for Query-aware User Modeling in Personalized Search](https://arxiv.org/pdf/2308.15968.pdf)，来看看它的参考文献：

学术界：

* [A Transformer-based Embedding Model for Personalized Product Search](https://arxiv.org/pdf/2005.08936.pdf)，sigir20
* [Learning a Fine-Grained Review-based Transformer Model for Personalized Product Search](https://arxiv.org/pdf/2004.09424.pdf)，sigir21
* [RLPer: A Reinforcement Learning Model for Personalized Search](http://playbigdata.ruc.edu.cn/dou/publication/2020_WWW_RLPer.pdf)，www20

工业界：

* [A Zero Attention Model for Personalized Product Search](https://arxiv.org/pdf/1908.11322.pdf)，CIKM19，亚马逊
* [Real-time Personalization using Embeddings for Search Ranking at Airbnb](https://github.com/daiwk/collections/blob/master/assets/airbnb-kdd18.pdf)，KDD18，airbnb
* [End-to-End Deep Attentive Personalized Item Retrieval for Online Content-sharing Platforms](https://dl.acm.org/doi/pdf/10.1145/3366423.3380051)，www20，Google
* [Towards Personalized and Semantic Retrieval: An End-to-End Solution for E-commerce Search via Embedding Learning](https://arxiv.org/pdf/2006.02282.pdf)，sigir20，京东
* [Personalized Query Suggestions](https://guoweiwei.github.io/files/personalized-query-suggestion.pdf)，sigir20，LinkedIn
* [A GNN-based Multi-task Learning Framework for Personalized Video Search](https://eprints.whiterose.ac.uk/181816/1/GNNVideoSearch_WSDM2022.pdf)，WSDM22，百度

### q-i双塔的改进

#### 引入location+social

[Embedding-based Retrieval in Facebook Search](https://arxiv.org/pdf/2006.11632.pdf)，KDD20

q-d双塔结构，在两个塔的最底层均加入：

* location：用户所处地理位置，如城市
* social：facebook是社交网络，通过另一个基于graph的模型训练得到的user和item emb，直接加进来

#### 引入用户行为序列

[Encoding History with Context-aware Representation Learning for Personalized Search](http://playbigdata.ruc.edu.cn/dou/publication/2020_sigir_context_ps.pdf)，sigir20，人大，提出HTPS

![htps-disambiguate-query](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1b4c57f0b47fd63bf6e94d8ec4017a0cca5cb323%2Fhtps-disambiguate-query.png?alt=media)

把用户历史的q-d pair对和当前query一起，过短期transformer和长期transformer得到输出$$q^l$$。

![htps-predict-intent](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0d688b67ba62d3ae42d9acb6fbf14b8b7c027bb5%2Fhtps-predict-intent.png?alt=media)

把$$q^l$$加上\[mask]，过transoformer得到预估的intent $$q^p$$

然后将$$q^l$$和$$q^p$$通过gate nn融合得到最终的context-aware的query表示$$q^f$$

最终doc和query的打分包括两部分，通过$$\phi$$（一个MLP，激活是tanh）进行融合：

$$
p(d \mid q, H)=\phi\left(p(d, q), p\left(d, q^H\right)\right)
$$

* $$p(d, q)$$：q和d的语义相似度，可以用正常的nlp模型得到
* $$p\left(d, q^H\right)$$：q和d的个性化得分，公式如下，其中$$s^R$$是cos：

$$
p\left(d, q^H\right)=\phi\left(s^R\left(q^s, d^w\right), s^R\left(q^l, d^w\right), s^R\left(q^p, d^w\right), s^R\left(q^f, d^w\right)\right)
$$

有两个loss：

* pred loss：预估intent，即下一个query，拿$$q^p$$与下一个query中各个词向量的avg算cos
* rank loss：依据$$p(d \mid q, H)$$算lambda rank的pairwise loss

#### 三塔+gnn邻居+mtl

[A GNN-based Multi-task Learning Framework for Personalized Video Search](https://eprints.whiterose.ac.uk/181816/1/GNNVideoSearch_WSDM2022.pdf)，WSDM22，百度，提出MGNN-PVS

现有的PSM(g personalized search methods)大多使用用户反馈（如点击）进行训练，缺点：

* 反馈信号大部分表达的是吸引力而非相关性
* 用户的历史信号比较稀疏，很难学好PSM

两张二部图：u-q和q-d

![gnn-personalized-video-search](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c1c2a9faec3991d2af972243aa718add4a71aebc%2Fgnn-personalized-video-search.png?alt=media)

3个塔：

* user：
  * user自己
  * 一跳邻居（u->q）的q
  * 二跳邻居（u->q->u）的u
* query：
  * query自己
  * 一跳邻居（q->d）的doc
  * 二跳邻居（q->d->q）的query
* doc：
  * doc自己的title向量（训练query-正title-负title的triplet loss）和video向量（训练video-正query-负query的triplet loss）
  * 二跳邻居（d->q->d）的doc

两个task：

* ctr预估：u和q拼一起过nn得到个性化的q，再和d过nn得到的向量算内积，得到预估值，用交叉熵
* 相关性预估：q过另一个nn，d过另一个nn，内积，用mse

## LLM模型融合

<https://github.com/arcee-ai/mergekit>

[SOLAR 10.7B: Scaling Large Language Models with Simple yet Effective Depth Up-Scaling](https://arxiv.org/pdf/2312.15166)

[LLM 合并新思路：进化算法+零训练->新任务](https://mp.weixin.qq.com/s/eSWdLT0p5uyd32OOod5lKQ)

[Evolutionary Optimization of Model Merging Recipes](https://arxiv.org/pdf/2403.13187)

<https://github.com/SakanaAI/evolutionary-model-merge>

## LLM auto-ml

### LLaMA-NAS

[用神经架构搜索给LLM瘦身，模型变小，准确度有时反而更高](https://mp.weixin.qq.com/s/_cKq4a3uM4r6s5P5s9mWaA)

[LLaMA-NAS: Efficient Neural Architecture Search for Large Language Models](https://arxiv.org/pdf/2405.18377)

### SELA

[MetaGPT开源SELA，用AI设计AI，效果超越OpenAI使用的AIDE](https://mp.weixin.qq.com/s/9m933xV95uU-cX3qOQLC6Q)

[SELA: Tree-Search Enhanced LLM Agents for Automated Machine Learning](https://arxiv.org/abs/2410.17238)

<https://github.com/geekan/MetaGPT/tree/main/metagpt/ext/sela>

## 可解释AI

[XAI有什么用？探索LLM时代利用可解释性的10种策略](https://mp.weixin.qq.com/s/V35k4UJZPtJkAHqYlZiO1A)

[Usable XAI: 10 Strategies Towards Exploiting Explainability in the LLM Era](https://arxiv.org/pdf/2403.08946.pdf)

<https://github.com/JacksonWuxs/UsableXAI_LLM>

### 综述

[可解释性终极追问，什么才是第一性解释？20篇CCF-A+ICLR论文给你答案](https://mp.weixin.qq.com/s/vCAw0d2uZ_MnLrl5MT9OKA)

### TransformerLens

Neel Nanda（deepmind）的项目

<https://transformerlensorg.github.io/TransformerLens/>

### ecco

<https://www.eccox.io/>

<https://jalammar.github.io/explaining-transformers/>

<https://jalammar.github.io/hidden-states/>

### interpretability in the wild

[Interpretability in the Wild: a Circuit for Indirect Object Identification in GPT-2 small](https://arxiv.org/pdf/2211.00593)

<https://github.com/redwoodresearch/Easy-Transformer>

### activation engineering

[Activation Addition: Steering Language Models Without Optimization](https://arxiv.org/pdf/2308.10248)

### representation engineering

[Representation Engineering: A Top-Down Approach to AI Transparency](https://arxiv.org/pdf/2310.01405)

### transformer-debugger

<https://github.com/openai/transformer-debugger/tree/main>

### painter

[八问八答搞懂Transformer内部运作原理](https://mp.weixin.qq.com/s/5qhpfHfzOIdKsG_wtgTR4A)

[Transformer Layers as Painters](https://arxiv.org/pdf/2407.09298v1)

### transformer explainer

[黑匣子被打开了！能玩的Transformer可视化解释工具，本地运行GPT-2、还可实时推理](https://mp.weixin.qq.com/s/vLyIrRyoWYjhMN4gTRgA6g)

[TRANSFORMER EXPLAINER: Interactive Learning of Text-Generative Models](https://arxiv.org/pdf/2408.04619)

<http://poloclub.github.io/transformer-explainer/>

<https://bbycroft.net/llm>

### superposition

[Scaling Monosemanticity: Extracting Interpretable Features from Claude 3 Sonnet](https://transformer-circuits.pub/2024/scaling-monosemanticity/index.html)

### 3Blue1Brown

[用最直观的动画，讲解LLM如何存储事实，3Blue1Brown的这个视频又火了](https://mp.weixin.qq.com/s/PSMfQLBBQZyG2GwgzatqvA)

<https://www.youtube.com/watch?v=9-Jl0dxWQs8>

### Monitor

[他们掰开神经元，终于让大模型9.8大于9.11了：神秘创业公司，开源AI「洗脑」工具](https://mp.weixin.qq.com/s/pOOBY6cBZUn86xRtO12FtQ)

<https://transluce.org/observability-interface>

<https://monitor.transluce.org/dashboard/chat>

### llm反思

[ACL 2025｜自我怀疑还是自我纠正？清华团队揭示LLMs反思技术的暗面](https://mp.weixin.qq.com/s/Y8AOILcmnwoW68YrCR3LAQ)

[Understanding the Dark Side of LLMs’ Intrinsic Self-Correction](https://arxiv.org/abs/2412.14959)

反思失败的原因：

* 内部答案波动：在多轮问答任务上，「你确定吗？请思考后再回答」的提示语会让LLMs反复更改答案。说明反思技术会造成LLMs内部答案的波动，表现出「自我怀疑」的倾向，最终可能导致回答出错
* prompt偏差：LLMs在反思失败时会过度关注提示语「你确定吗？想一想再回答。」，而忽略问题本身；当反思失败时，LLMs在76.1%的情况下会更关注反思指令，而当坚持正确答案时，**LLMs对反思指令和问题本身的关注度非常相近**，分别为50.8%和49.2%。
* 认知偏差：
  * 过度思考：过度制定策略而不采取行动
  * 认知过载：在长文本的反思中忽略关键信息
  * 完美主义偏差：为了追求高效性而忽略环境限制

反思失败的缓解方法：

* 问题重复：在反思prompt的最后附上初始问题以引导LLMs维持对初始问题的关注。
* 少样本微调：不引入知识的少样本（4-10 个样本）微调可纠正反思失败的异常行为。

### sparse circuits

[OpenAI新论文拆解语言模型内部机制：用「稀疏电路」解释模型行为](https://mp.weixin.qq.com/s/dAUzwXkQnw7bqiKkv1T1Hw)

[OpenAI又Open了一下：发布可解释性新研究，作者来自Ilya超级对齐团队](https://mp.weixin.qq.com/s/jF4qlkMH3l7A1ZBbpe4pig)

[Weight-sparse transformers have interpretable circuits](https://cdn.openai.com/pdf/41df8f28-d4ef-43e9-aed2-823f9393e470/circuit-sparsity-paper.pdf)

## 自省

[LLM 比之前预想的更像人类，竟也能「三省吾身」](https://mp.weixin.qq.com/s/Ri-Wdl_Xk5OxWF5IIJmrxg)

[Looking Inward: Language Models Can Learn About Themselves by Introspection](https://arxiv.org/pdf/2410.13787)

## LLM+芯片设计

[登上Nature的AI芯片设计屡遭质疑，谷歌发文反击，Jeff Dean：质疑者连预训练都没做](https://mp.weixin.qq.com/s/u1NNmulcykGkgZjJb_A-UA)

[That Chip Has Sailed: A Critique of Unfounded Skepticism Around AI for Chip Design](https://arxiv.org/pdf/2411.10053)

## 其他

### 安全性

[Anthropic安全负责人：在超级AI「毁灭」人类之前，我们可以做这些准备](https://mp.weixin.qq.com/s/nxD8qeCfG1tjfpvlJ6uacg)

[OpenAI最新53页论文：ChatGPT看人下菜碟，对“小美”比“小帅”更友好](https://mp.weixin.qq.com/s/NnLAjHuBPHa-aBoT6IV4Pg)

[First-Person Fairness in Chatbots](https://cdn.openai.com/papers/first-person-fairness-in-chatbots.pdf)

[翁荔B站分享原文：AI安全与“培养”之道](https://mp.weixin.qq.com/s/92QyZcwteFXaKfJk3GdTcQ)

### time-LLM

[谁说大象不能起舞! 重编程大语言模型实现跨模态交互的时序预测 | ICLR 2024](https://mp.weixin.qq.com/s/K04haPMcbKiS6OkCihXAqQ)

[Time-LLM: Time Series Forecasting by Reprogramming Large Language Models](https://arxiv.org/pdf/2310.01728.pdf)

<https://github.com/KimMeen/Time-LLM>

将**时序预测任务**转换成一个可以由 LLMs 有效解决的**语言任务**，成功激活了llm做**高精度时序推理**的能力。

* 时序输入重编程
* 提示做前缀

### 长尾

[A Systematic Review on Long-Tailed Learning](https://arxiv.org/pdf/2408.00483)

### 文本匹配效果还行的模型

大多是基于sentence-bert的，m3e-base在电商语料上试过，效果不错

<https://huggingface.co/moka-ai/m3e-base>

<https://huggingface.co/shibing624/text2vec-base-chinese>

### 本地知识库

<https://github.com/chatchat-space/Langchain-Chatchat>

### llm应用合辑

* ChatGPT聚合站：<https://hokex.com>
* 游戏生成站：<https://latitude.io/>
* 家庭作业辅助站：<https://ontimeai.com/>
* 文字转语音站：<https://www.resemble.ai/>
* 艺术作画站：<https://starryai.com/>
* logo制作站：<https://www.logoai.com/>
* ai写作站：<https://www.getconch.ai/>
* 音乐制作站：<https://soundraw.io/>
* 声音模拟站：<https://fakeyou.com/>
* 一句话生成一段视频：<https://runwayml.com/>
* 文字转语音：[https://murf.ai/](https://runwayml.com/)

### swiftsage

[大语言模型在开放世界中的推理能力探索实践](https://mp.weixin.qq.com/s/LZ6lkTTOom-mbqV9IJ-OZg)

[SwiftSage: A Generative Agent with Fast and Slow Thinking for Complex Interactive Tasks](https://arxiv.org/pdf/2305.17390.pdf)

### 达摩院大模型技术交流

<https://developer.aliyun.com/live/248332>

ppt：[链接](https://pan.baidu.com/s/1tbckFpa8W8qJ5yRw9yvJ9A#list/path=%2F) 密码：5yyf

### 回译

通过单语数据提升 NMT 模型最高效的方法之一是回译（back-translation）。如果我们的目标是训练一个英语到德语的翻译模型，那么可以首先训练一个从德语到英语的翻译模型，并利用该模型翻译所有的单语德语数据。然后基于原始的英语到德语数据，再加上新生成的数据，我们就能训练一个英语到德语的最终模型。

[Understanding Back-Translation at Scale](https://arxiv.org/pdf/1808.09381v2.pdf)

### nan问题

[解决pytorch半精度amp训练nan问题](https://zhuanlan.zhihu.com/p/443166496)

### 时间序列

[LLM用于时序预测真的不行，连推理能力都没用到](https://mp.weixin.qq.com/s/C-N0tyQrEOoNoADtH_thTA)

[Are Language Models Actually Useful for Time Series Forecasting?](https://arxiv.org/pdf/2406.16964)

### 人脑

[MIT大牛新作震惊学界！AI「长脑子」了？LLM惊现「人类脑叶」结构并有数学代码分区](https://mp.weixin.qq.com/s/6lRAS8m4XqEfFFEP1Qa43A)

[The Geometry of Concepts: Sparse Autoencoder Feature Structure](https://arxiv.org/abs/2410.19750)

### LLM for 算法设计

[调研180多篇论文，这篇综述终于把大模型做算法设计理清了](https://mp.weixin.qq.com/s/hfDzIBcw5HTxtSzpS_694g)

[A Systematic Survey on Large Language Models for Algorithm Design](https://arxiv.org/abs/2410.14716)

### 深度生成模型课程

[教授何恺明在MIT的第二门课——《深度生成模型》，讲座PPT陆续已出](https://mp.weixin.qq.com/s/t8S7cXVAXDWhS0ypzMXiCg)

<https://mit-6s978.github.io/schedule.html>

<https://mit-6s978.github.io/assets/pdfs/lec1_intro.pdf>

<https://mit-6s978.github.io/assets/pdfs/lec2_vae.pdf>

<https://mit-6s978.github.io/assets/pdfs/lec3_ar.pdf>

<https://mit-6s978.github.io/assets/pdfs/lec4_gan.pdf>

<https://mit-6s978.github.io/assets/pdfs/lec5_diffusion.pdf>

### 时序db

influxdb

<https://github.com/influxdata/influxdb>

<https://jasper-zhang1.gitbooks.io/influxdb/content/Introduction/getting_start.html>

### 其他

[原来，这些顶级大模型都是蒸馏的](https://mp.weixin.qq.com/s/GdwH7jxK2T_Vhus2ZvwQbw)

[Distillation Quantification for Large Language Models](https://arxiv.org/abs/2501.12619)

[小模型性能饱和、表现不佳，根源是因为Softmax?](https://mp.weixin.qq.com/s/bvv-frM8bKhkZiqOa9nqDA)

[Why do small language models underperform? Studying LM Saturation via the Softmax Bottleneck](https://arxiv.org/pdf/2404.07647.pdf)

[Ilya Sutskever的推荐清单](https://arc.net/folder/D0472A20-9C20-4D3F-B145-D2865C0A9FEE)

[传说中Ilya Sutskever精选论文清单：AI领域40大论文完整版「破解」完成](https://mp.weixin.qq.com/s/7Bj_K1Vjp2FtfklfJsAMbQ)

[2024年大模型LLM还有哪些可研究的方向？](https://www.zhihu.com/question/637595961)

[Hinton万字访谈：用更大模型「预测下一个词」值得全力以赴](https://mp.weixin.qq.com/s/OydltjpVwsQ7hNBH6hq_Og)

[ChatGPT如何「思考」？心理学和神经科学破解AI大模型，Nature发文](https://mp.weixin.qq.com/s/4nO4DQE6Llfo3fiFSPSMhQ)

[适应多形态多任务，最强开源机器人学习系统「八爪鱼」诞生](https://mp.weixin.qq.com/s/HPTfOlw25F5JcvlY-Vy9Tw)

[Octo: An Open-Source Generalist Robot Policy](https://arxiv.org/pdf/2405.12213)

[LeCun新作：神经网络在实践中的灵活性到底有多大？](https://mp.weixin.qq.com/s/PjlXwwG3t5Fqp5MfrBVvBQ)

[Just How Flexible are Neural Networks in Practice?](https://arxiv.org/pdf/2406.11463)

[清华包揽最佳论文+时间检验奖，山大获荣誉提名，SIGIR 2024奖项出炉](https://mp.weixin.qq.com/s/Z2Mj7etx6KvYrSn8LhrJwg)

<https://zhuanlan.zhihu.com/p/654910335>

## 一些记录

### 打印模型参数量

<https://stackoverflow.com/questions/49201236/check-the-total-number-of-parameters-in-a-pytorch-model>

```python

pytorch_total_params = sum(p.numel() for p in model.parameters())

pytorch_total_trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)

# Load the model
from transformers import BartForConditionalGeneration
from transformers import T5ForConditionalGeneration
def cal(model):
  pytorch_total_trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
  return pytorch_total_trainable_params

model = BartForConditionalGeneration.from_pretrained("facebook/bart-base")
print("bart-base")
print(cal(model)) # 6L 139420416 139M

model = BartForConditionalGeneration.from_pretrained("facebook/bart-base")
print("bart-base")
print(cal(model)) # 12L 406291456 406M

model = T5ForConditionalGeneration.from_pretrained("t5-small")
print("t5-small")
print(cal(model)) # 6L 60506624 65M

model = T5ForConditionalGeneration.from_pretrained("t5-base")
print("t5-base")
print(cal(model)) # 12L 222903552 223M


model = T5ForConditionalGeneration.from_pretrained("t5-large")
print("t5-large")
print(cal(model)) # 24L 737668096 738M

```

### 往现有tokenizer里加一些特殊token

<https://stackoverflow.com/questions/69191305/how-to-add-new-special-token-to-the-tokenizer>

```python
num_added_toks = tokenizer.add_tokens(['[EOT]'], special_tokens=True) ##This line is updated
model.resize_token_embeddings(len(tokenizer))

###The tokenizer has to be saved if it has to be reused
tokenizer.save_pretrained(<output_dir>)
```

示例

```python
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

print("Before")
print(tokenizer.all_special_tokens) # --> ['[UNK]', '[SEP]', '[PAD]', '[CLS]', '[MASK]']
print(tokenizer.all_special_ids)    # --> [100, 102, 0, 101, 103]


special_tokens_dict = {'additional_special_tokens': ['[EOT]']}
num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)
# model.resize_token_embeddings(len(tokenizer))  # --> Embedding(30523, 768)

tok_id = tokenizer.convert_tokens_to_ids('[EOT]')  # --> 30522

print("After")
print(tokenizer.all_special_tokens) # --> ['[UNK]', '[SEP]', '[PAD]', '[CLS]', '[MASK]']
print(tokenizer.all_special_ids)    # --> [100, 102, 0, 101, 103]
```

### python的读写锁

一个写，多个并行读：<https://pypi.org/project/readerwriterlock/>

### pytorch的显存泄露

<https://github.com/pytorch/pytorch/issues/13246#issuecomment-445770039>

### torch profiling

<https://pytorch.org/tutorials/recipes/recipes/profiler_recipe.html>

可以拿这个来可视化：<https://ui.perfetto.dev/>

* 点击open trace file上传json文件
* timeline中有两个python进程，点击cuda kernel会出现箭头，方便找到是**哪个op调用了该kernel**
  * 靠上的python进程是host侧进程（主要是用户代码中调用的一些**API/pytorch op**，能比较方便能和训练代码对应上）
  * 靠下的python进程是device（gpu）侧进程（记录实际cuda kernel 的执行和一些性能相关的数据）

device timeline比较稀疏的情况下训练性能较差，GPU利用率较低，可能需要排查下训练代码是否有问题

### 显存泄露排查

<https://pytorch.ac.cn/docs/stable/torch_cuda_memory.html>

<https://pytorch.org/blog/understanding-gpu-memory-1/>

<https://pytorch.org/blog/understanding-gpu-memory-2/>

检查显存

```python
# (c) Meta Platforms, Inc. and affiliates. 
# https://pytorch.org/blog/understanding-gpu-memory-1/
import logging
import socket
from datetime import datetime, timedelta

import torch

from torchvision import models

logging.basicConfig(
   format="%(levelname)s:%(asctime)s %(message)s",
   level=logging.INFO,
   datefmt="%Y-%m-%d %H:%M:%S",
)
logger: logging.Logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)

TIME_FORMAT_STR: str = "%b_%d_%H_%M_%S"

# Keep a max of 100,000 alloc/free events in the recorded history
# leading up to the snapshot.
MAX_NUM_OF_MEM_EVENTS_PER_SNAPSHOT: int = 100000

def start_record_memory_history() -> None:
   if not torch.cuda.is_available():
       logger.info("CUDA unavailable. Not recording memory history")
       return

   logger.info("Starting snapshot record_memory_history")
   torch.cuda.memory._record_memory_history(
       max_entries=MAX_NUM_OF_MEM_EVENTS_PER_SNAPSHOT
   )

def stop_record_memory_history() -> None:
   if not torch.cuda.is_available():
       logger.info("CUDA unavailable. Not recording memory history")
       return

   logger.info("Stopping snapshot record_memory_history")
   torch.cuda.memory._record_memory_history(enabled=None)

def export_memory_snapshot() -> None:
   if not torch.cuda.is_available():
       logger.info("CUDA unavailable. Not exporting memory snapshot")
       return

   # Prefix for file names.
   host_name = socket.gethostname()
   timestamp = datetime.now().strftime(TIME_FORMAT_STR)
   file_prefix = f"{host_name}_{timestamp}"

   try:
       logger.info(f"Saving snapshot to local file: {file_prefix}.pickle")
       torch.cuda.memory._dump_snapshot(f"{file_prefix}.pickle")
   except Exception as e:
       logger.error(f"Failed to capture memory snapshot {e}")
       return

# Simple Resnet50 example to demonstrate how to capture memory visuals.
def run_resnet50(num_iters=5, device="cuda:0"):
   model = models.resnet50().to(device=device)
   inputs = torch.randn(1, 3, 224, 224, device=device)
   labels = torch.rand_like(model(inputs))
   optimizer = torch.optim.SGD(model.parameters(), lr=1e-2, momentum=0.9)
   loss_fn = torch.nn.CrossEntropyLoss()

   # Start recording memory snapshot history
   start_record_memory_history()

   for _ in range(num_iters):
       pred = model(inputs)
       loss_fn(pred, labels).backward()
       optimizer.step()
       optimizer.zero_grad(set_to_none=True)

   # Create the memory snapshot file
   export_memory_snapshot()

   # Stop recording memory snapshot history
   stop_record_memory_history()

if __name__ == "__main__":
    # Run the resnet50 model
    run_resnet50()
```

同时profile cpu和显存

```python
# (c) Meta Platforms, Inc. and affiliates. 
# https://pytorch.org/blog/understanding-gpu-memory-1/
import logging
import socket
from datetime import datetime, timedelta

import torch

from torch.autograd.profiler import record_function
from torchvision import models

logging.basicConfig(
   format="%(levelname)s:%(asctime)s %(message)s",
   level=logging.INFO,
   datefmt="%Y-%m-%d %H:%M:%S",
)
logger: logging.Logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)

TIME_FORMAT_STR: str = "%b_%d_%H_%M_%S"

def trace_handler(prof: torch.profiler.profile):
   # Prefix for file names.
   host_name = socket.gethostname()
   timestamp = datetime.now().strftime(TIME_FORMAT_STR)
   file_prefix = f"{host_name}_{timestamp}"

   # Construct the trace file.
   prof.export_chrome_trace(f"{file_prefix}.json.gz")

   # Construct the memory timeline file.
   prof.export_memory_timeline(f"{file_prefix}.html", device="cuda:0")

def run_resnet50(num_iters=5, device="cuda:0"):
   model = models.resnet50().to(device=device)
   inputs = torch.randn(1, 3, 224, 224, device=device)
   labels = torch.rand_like(model(inputs))
   optimizer = torch.optim.SGD(model.parameters(), lr=1e-2, momentum=0.9)
   loss_fn = torch.nn.CrossEntropyLoss()

   with torch.profiler.profile(
       activities=[
           torch.profiler.ProfilerActivity.CPU,
           torch.profiler.ProfilerActivity.CUDA,
       ],
       schedule=torch.profiler.schedule(wait=0, warmup=0, active=6, repeat=1),
       record_shapes=True,
       profile_memory=True,
       with_stack=True,
       on_trace_ready=trace_handler,
   ) as prof:
       for _ in range(num_iters):
           prof.step()
           with record_function("## forward ##"):
               pred = model(inputs)

           with record_function("## backward ##"):
               loss_fn(pred, labels).backward()

           with record_function("## optimizer ##"):
               optimizer.step()
               optimizer.zero_grad(set_to_none=True)

if __name__ == "__main__":
    # Warm up
    run_resnet50()
    # Run the resnet50 model
    run_resnet50()
```

### 各型号gpu对比

<https://zhuanlan.zhihu.com/p/441153412>

### 查看python的栈

```shell
pip install py-spy
py-spy dump --pid 1199

```

打出来：

```
Process 1199: /usr/bin/python3.10 -u torch_main.py
Python v3.10.14 (/usr/bin/python3.10)

Thread 0x7F62A2C43740 (active): "MainThread"
    _wait_for_tstate_lock (threading.py:1116)
    join (threading.py:1096)
    main (torch_main.py:776)
    <module> (torch_main.py:785)
Thread 0xAABBBCC (idle): "Thread-1"
    wait (threading.py:324)
    wait (threading.py:607)
    run (threading.py:1376)
    _bootstrap_inner (threading.py:1016)
    _bootstrap (threading.py:973)
Thread 0xAAAAA (idle): "Thread-3 (process)"
    wait (threading.py:320)
    get (queue.py:171)
    process (abase_writer.py:73)
    run (threading.py:953)
    _bootstrap_inner (threading.py:1016)
    _bootstrap (threading.py:973)
Thread 0xA992ACDA (idle): "Thread-4 (process)"
    wait (threading.py:320)
    get (queue.py:171)
    process (abase_writer.py:73)
    run (threading.py:953)
    _bootstrap_inner (threading.py:1016)
    _bootstrap (threading.py:973)
Thread 0xAFF11AA (active): "Thread-5 (read_file)"
    get_seq (ecom_seq_reader.py:200)
    read_file (torch_main.py:494)
    run (threading.py:953)
    _bootstrap_inner (threading.py:1016)
    _bootstrap (threading.py:973)
Thread 0x9922BCDA (idle): "Thread-6"
    wait (threading.py:324)
    wait (threading.py:607)
    run (tqdm/_monitor.py:60)
    _bootstrap_inner (threading.py:1016)
    _bootstrap (threading.py:973)
```

### 国内的huggingface模型下载地址

<https://hf-mirror.com/>

### 一些报错的解法

#### flash-attention2

<https://github.com/Dao-AILab/flash-attention/issues/451>

```shell
FLASH_ATTENTION_FORCE_BUILD=TRUE pip install flash-attn
```

## GPU机型对比

* L20：<https://www.techpowerup.com/gpu-specs/l20.c4206>
  * T flops：
    * tf32：59.8
    * fp32：59.8
    * bf16：119.5
    * fp16：119.5
* A800-40G：<https://www.techpowerup.com/gpu-specs/a800-pcie-40-gb.c3964>
  * T flops：
    * tf32：156
    * fp32：19.5
    * bf16：312
    * fp16：77.97

## 一些问题和经验

坍缩（稳定召回那k个item），attention score太集中了，低秩特征（泛化特征）容易导致这个问题

看attention score的分布，如果第一层偏向target item，但第二层可能就很平均了，这种可能就释放不出收益，应该是没学好

auc离线有收益，在线没收益：

* reload正确性，warmup有没有报错
* nn的分发效率，20min降到x min，压缩、解压耗时
* 学习充分性：发现ab开得更久的时候，就看到收益了。。
  * 累积梯度太小的 不充分
  * 历史样本变多
  * 多epoch(参考快手 阿里的一些做法，例如reset emb等)
  * 加一些辅助loss，例如生成式、蒸馏
* 出nan：bf16转化等问题，加一些grad clip，norm等


# 2.recommend

## 推荐系统整体梳理

<https://daiwk.github.io/posts/links-navigation-recommender-system.html>

<https://github.com/Doragd/Algorithm-Practice-in-Industry>

王喆的机器学习笔记系列：

<https://github.com/wzhe06/Reco-papers>

<https://github.com/wzhe06/Ad-papers>

深度学习传送门系列：

<https://github.com/imsheridan/DeepRec>

推荐系统遇上深度学习系列：

链接: <https://pan.baidu.com/s/1jZkJ2d9WckbZL48aGFudOA> 密码:kme3

[推荐系统技术演进趋势：召回->排序->重排](https://mp.weixin.qq.com/s/pCbwOEdEfAPSLGToAFXWOQ)

[推荐系统的发展与2019最新论文回顾](https://mp.weixin.qq.com/s/C6e8Pn9IoKCMuQshh_u6Xw)

[深度推荐系统2019年度阅读收藏清单](https://mp.weixin.qq.com/s/u6r5FiPbfVF31Q38OIn6xA)

[推荐工业界实战角度详解TensorFlow中Wide & Deep源码（三）](https://mp.weixin.qq.com/s/ur7xwdY86KlWU3qpmqUcog)

## 常用机器学习基础

### mse vs cross-entropy

不一定回归就用mse，分类才用交叉熵

<https://zhuanlan.zhihu.com/p/362496849>

<https://www.zhihu.com/question/415245797/answer/1791746717>

<https://zhuanlan.zhihu.com/p/304462034>

<https://blog.csdn.net/u011508640/article/details/72815981>

各种分布：

<https://github.com/graykode/distribution-is-all-you-need>

### cross-entroy vs nllloss

[聊一聊机器学习的MLE和MAP：最大似然估计和最大后验估计](https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==\&mid=2247552799\&idx=3\&sn=87cdfb929865571ec96738c42deb3240\&chksm=ebb737cbdcc0bedd74395a68fb76796f1c102a6129ee2e81e0932da786ec58450d415a448a6e\&scene=27)

贝叶斯公式：

$$
P(\theta \mid X)=\frac{P(X \mid \theta) \times P(\theta)}{P(X)}
$$

* 先验（prior）：$$P(\theta)$$，没有观测到任数据时对$$\theta$$的预先判断，例如假设硬币很大概率是均匀的，很小概率不均匀；**随着数据量的增加，先验的影响力越来越小。**
* 后验（posterior）：$$P(\theta \mid X)$$，最终的参数分布
* 似然（likelihood）：$$P(X \mid \theta)$$，假设$$\theta$$已知后，我们观察到的数据应该是什么样的

结论：

* 最大似然估计（MLE, max likelihood estimation）：等价于NLL(negative log likelihood)，即交叉熵
* 最大后验估计（MAP, max a posteriori）：假设参数服从高斯分布，等价于**MLE+L2正则**

<https://blog.csdn.net/geter_CS/article/details/84857220>

<https://blog.csdn.net/qq_22210253/article/details/85229988>

CrossEntropyLoss就是把Softmax–Log–NLLLoss合并成一步

![cnllloss](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-9cf58e4f32587997bc91014997b75ecc2c887ca0%2Fce-nllloss.png?alt=media)

### softplus

<https://stackoverflow.com/questions/44230635/avoid-overflow-with-softplus-function-in-python>

```python
import numpy as np
import math

def softplus_np(x): return np.log1p(np.exp(-np.abs(x))) + np.maximum(x, 0)
def softplus_math(x): return math.log1p(math.exp(-abs(x))) + max(x, 0)
```

因为

```python
log(1+exp(x)) = log(1+exp(x)) - log(exp(x)) + x = log(1+exp(-x)) + x
```

同理，如果要求`log(1+exp(-x))`的稳定版本，可以

```python
def softplus_math(x): return math.log1p(math.exp(-abs(x))) + max(x, 0)
```

### 一些tricks

[深度学习刷SOTA有哪些trick？](https://www.zhihu.com/question/540433389/answer/2549775065)

## 特征、样本、数据流

[浅谈微视推荐系统中的特征工程](https://mp.weixin.qq.com/s/NqVP0ksfLiRLSGkuWxiz5A)

[推荐系统之数据与特征工程](https://mp.weixin.qq.com/s/FbIO1C4Xt2WIdIln9SY8Ug)

[稠密特征加入CTR预估模型的方法汇总](https://mp.weixin.qq.com/s/xhxBbSYva4g9wUvQ5RIdVA)

## tf开源库

[社区分享 | TensorFlow Recommenders-Addons 现已开源，让推荐系统效果更好！](https://mp.weixin.qq.com/s/LKIuLYz8fP3BL3cB1CsHlw)

<https://github.com/tensorflow/recommenders-addons>

## 预估架构

### HugeCTR

点击率预估的训练传统上存在着几个困扰着广大开发者的问题：巨大的哈希表（Embedding Table），较少的矩阵计算，大量的数据吞吐。

HugeCTR 是首个全部解决以上问题的开源 GPU 训练框架，与现有 CPU 和混合 CPU / GPU 解决方案相比，它的速度提高了 12 倍至 44 倍。HugeCTR 是一种端到端训练解决方案，其所有计算都在 GPU 上执行，而 CPU 仅用于 I / O。GPU 哈希表支持动态缩放。它利用 MPI 进行多节点训练，以支持任意大的嵌入尺寸。它还还支持混合精度训练，在 Volta GPU 及其后续版本上可以利用 Tensor cores 进一步加速。

[如何解决点击率预估？英伟达专家详解HugeCTR训练框架（二）](https://mp.weixin.qq.com/s/14ETFLjojsP7Aop4_THVKQ)

[Merlin HugeCTR 分级参数服务器简介](https://mp.weixin.qq.com/s/bfnQ3glPYA0sAgZlntTDUw)

### BOX

大规模深度学习广告系统的分布式分层GPU参数服务器

[Distributed Hierarchical GPU Parameter Server for Massive Scale Deep Learning Ads Systems](https://arxiv.org/pdf/2003.05622.pdf)

## 索引架构

### ANN索引

annoy hnsw faiss pq

### 暴力召回ANN加速

<https://kexue.fm/archives/9336>

大致思想，CUR分解：query和item的MxN打分矩阵，分解成F(Mxk1), G(k1xk2), H(k2xN)三个矩阵

* Mxk1矩阵：原矩阵里搞k1列出来，即选出k1个种子item，得到F
* k2xN矩阵：原矩阵里搞k2列出来，即选出k2个种子query，得到H
* k1xk2矩阵：即矩阵1和矩阵2求交集，比如矩阵1是抽的第1,23,54列出来，矩阵2是抽的第4,80行出来，那交集元素就是(1,4),(1,80),(23,4),(23,80),(54,4),(54,80)这6个点，构成k1xk2矩阵，然后算一下伪逆得到G

建索引：

* 挑出种子query，和所有item两两计算相似度，得到H矩阵
* 挑出种子item，和种子query两两计算相似度，再算伪逆，得到G矩阵
* 计算G\*H，存起来

检索：

* 输入的query和k1个种子item算一下相似度，得到1xk1的矩阵q
* q和G\*H相乘，就能得到q和每个item的相似度了
  * 【这步可以ann化】：GH就是k1\*N，按列来看，就是N个k1维向量，相当于N个item向量，扔到annlib里去就行了，而输入的q也是一个k1维向量，就可以ann了

### BLISS

[BLISS: A Billion scale Index using Iterative Re-partitioning](https://gaurav16gupta.github.io/papers/BLISS_KDD2022.pdf)

## 召回

[360展示广告召回系统的演进](https://mp.weixin.qq.com/s/QqWGdVGVxSComuJT1SDo0Q)

[推荐场景中深度召回模型的演化过程](https://mp.weixin.qq.com/s/AHuXCH1Z6gKoIkR5MGgLkg)

<https://github.com/imsheridan/DeepRec/tree/master/Match>

[精准推荐的秘术：阿里解耦域适应无偏召回模型详解](https://mp.weixin.qq.com/s/0Cbc3aAYTeFqLDutLBXJmA?notreplace=true)对应[Co-training Disentangled Domain Adaptation Network for Leveraging Popularity Bias in Recommenders](https://ir.webis.de/anthology/2022.sigirconf_conference-2022.10/)

[谈谈文本匹配和多轮检索](https://mp.weixin.qq.com/s/uoEX0TjJZmyquNch5Wikvg)

[搜索中的深度匹配模型](https://mp.weixin.qq.com/s/lcyw_kHNxPB-DUfNzTaj5g)

### 协同

#### Swing

[Large Scale Product Graph Construction for Recommendation in E-commerce](https://arxiv.org/pdf/2010.05525.pdf)

score(i,j) = 0

* 找到同时点过i和j的用户集合A，对集合A里的用户两两组合
  * s=1/(这两个用户的共同点击数+1)（如果两个用户的交集很大，说明这个item并不独特，要惩罚，类似idf）
  * score(i,j) += s （累加每个pair对的得分得到最终得分）

![swing](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ebee95b5df7e2cb3779615a33936bb962d0c4ce6%2Fswing.png?alt=media)

### 内积、余弦和L2

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e1dfb603a1f07f781fe1e011c26b02bc8542c4be%2FL2-innerproduct-hnsw.png?alt=media)

给定a，找到和它最像的b

$$
ab=||a||cos\theta ||b||
$$

如果用内积，会找$$cos\theta ||b||$$最大的b出来，可能是夹角小，也可能是模大的b，所以可能偏热门

### DSSM

参考[Modeling Interestingness with Deep Neural Networks](https://www.microsoft.com/en-us/research/wp-content/uploads/2014/10/604_Paper.pdf)

对应的[ppt](https://github.com/daiwk/collections/blob/master/assets/dssm_ppt.pdf)

#### 2013年CIKM的dssm

[Learning Deep Structured Semantic Models for Web Search using Clickthrough Data](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/cikm2013_DSSM_fullversion.pdf)

相当于一个q，和每个d分别算cos。

$$
R(Q,D)=cosine(y\_Q,y\_D)=\frac{y\_Q^Ty\_D}{\left | y\_Q \right |\left | y\_D \right |}
$$

所以given Q点击D的概率就是：

$$
P(D|Q)=\frac{exp(\gamma R(Q,D))}{\sum \_{D'\in \textbf{D}}exp(\gamma R(Q,D'))}
$$

其中的$$\gamma$$是平滑因子。这里的$$\textbf{D}$$是需要rank的Documents的集合，理想情况肯定是全集了。实际上定义$$(Q,D^+)$$为一个query和点击文档的pair对，通过一个$$D^+$$和N个随机选的未点击的文档$$D\_j^-,j=1,...,N$$近似。

所以训练时，在训练集上，给定query，有点击doc的概率最大化就是我们的目标(其中的$$\Lambda$$是网络参数)：

$$
L(\Lambda)=-\log \prod \_{(Q,D^+)}P(D^+|Q)
$$

Word Hashing：例如，一个英文单词是”good”，那么会先在头尾各补上一个”#”，处理成”#good#”，然后拆成n-gram（假设n=3，也就是tri-gram，那就是”#go”，“goo”，”ood”，”od#”这么多个”新”词）。这样，可以把原来500k的词典缩到300k，可以有效缓解词典太大的问题，而且因为英文就26个字母，这样做也解决了新单词的OOV问题。

![dssm\_2013cikm](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c1556a9e69dbf0c4bc7a900c14569be1d3cde381%2Fdssm_2013cikm.png?alt=media)

<https://blog.csdn.net/zjrn1027/article/details/80170966>

相似度衡量可以使用cos，而最终的loss可以用hinge loss：

设置一个margin $$m$$，query $$V\_Q$$，正样本$$V\_{A^+}$$，负样本$$V\_{A^-}$$，如果**正负样本的相似度之差**小于边界值，那就还需要优化，如果**已经大于等于边界值**了，说明**模型已经能区分**了，所以用hinge loss：

$$
L=max(0, m - (cos(V\_Q,V\_{A^+} - cos(V\_Q, V\_{A^-}))))
$$

tf算cos

```python
    def getCosineSimilarity(q, a):
        q1 = tf.sqrt(tf.reduce_sum(tf.multiply(q, q), 1))
        a1 = tf.sqrt(tf.reduce_sum(tf.multiply(a, a), 1))
        mul = tf.reduce_sum(tf.multiply(q, a), 1)
        cosSim = tf.div(mul, tf.multiply(q1, a1))
        return cosSim
```

tf算hinge

```python
    def getLoss(trueCosSim, falseCosSim, margin):
        zero = tf.fill(tf.shape(trueCosSim), 0.0)
        tfMargin = tf.fill(tf.shape(trueCosSim), margin)
        with tf.name_scope("loss"):
            losses = tf.maximum(zero, tf.subtract(tfMargin, tf.subtract(trueCosSim, falseCosSim)))
            loss = tf.reduce_sum(losses)
        return loss
```

使用

```python
        self.trueCosSim = self.getCosineSimilarity(question2, trueAnswer2)
        self.falseCosSim = self.getCosineSimilarity(question2, falseAnswer2)
        self.loss = self.getLoss(self.trueCosSim, self.falseCosSim, self.margin)
```

#### multiview dssm

[A Multi-View Deep Learning Approach for Cross Domain User Modeling in Recommendation Systems](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/frp1159-songA.pdf)

<https://blog.csdn.net/shine19930820/article/details/78810984>

现在很多公司都不仅仅只有一个产品，而是有**多个产品线**。比如微软可能就有搜索、新闻、appstore、xbox等产品，如果将用户在这些产品上的行为（反馈）统一在一起训练一个深度学习网络，就能很好的解决**单个产品上**（用户）**冷启动、稀疏**等问题。

**概述**

&#x20;

![multiview-dnn](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8a345a3ab8b038e8012896f162295ed8ed3375cb%2Fmultiview-dnn.png?alt=media)

一个产品线就是一个view，一条训练样本只有user+1个view，其他view置0。

总体的优化目标是保证在所有视图上user和正向反馈的item的相似度大于随机选取的无反馈或者负向反馈的相似度，并且越大越好。

$$
p=\underset{W\_u,W\_1,...W\_v}{argmax}\sum ^N\_{j=1}\frac{exp(\alpha *a cos(Y\_u,Y*{a,j})}{\sum \_{X'\in R^{d\_a}}exp(\alpha cos(Y\_u,f\_a(X',W\_a)))}
$$

其中的$$f\_i(X\_i,W\_i)$$是$$X\_i$$到$$Y\_i$$的变换。有一个用户view，加上$$v$$个辅助(auxiliary)的item view。$$X\_i\in R^{d\_i}$$，即每个view有自己的特征空间。对于第$$j$$条样本，它只有第$$i$$个auxiliary view是有值的，其他view都是0。

tf代码：<https://github.com/InsaneLife/dssm/blob/master/multi_view_dssm_v3.py>

#### 降维

**top features**

&#x20;

对于user features，选取top-k最频繁的features。并通过TF-IDF过滤掉最常用的特征。

**k means**

&#x20;

kmeans的公式如下：

$$
\underset{C\_1,...,C\_k}{argmin}\sum ^N \_{i=1} \min \_{C\_j\in {C\_1,...,C\_k}}distance(X\_i,C\_j)
$$

通过K-means对相似的特征群分组为同一个cluster并生成新的特征，共生成k个新特征。生成的特征向量$$Y\_i$$是一个$$K$$维的向量，第$$i$$维是第$$i$$个cluster中features的出现数。

具体地，使用一个长度为$$U$$的vector $$f\_i$$，$$U$$是训练集中的用户数，$$f\_i(j)$$表示用户$$i$$有feature $$j$$的次数。将每个$$f\_i$$进行归一化。这样，对于每一个用户向量$$f\_i$$，可以产生它的降维了的用户向量$$Y\_i$$（假设feature $$a$$分配给了cluster $$Cls(a)$$，$$1\le Cls(a)\le K$$）：

$$
Y\_i(j)=\sum \_{a:X\_i(a)>0 & Cls(a) = j}f\_i(a)
$$

想要抽出reasonable的feature数目，需要比较大的cluster数$$K$$。因为如果cluster数比较少，那一个cluster里就会有非常多的用户feature，很难学到有用的pattern。在本文中，设置$$K=10000$$，平均每个cluster里大概有350个feature。因为cluster数比较大，所以用mr版的kmeans。

**Local sensitive Hashing**

&#x20;

通过一个随机的矩阵将数据映射到低维向量空间上，并且**保持原始空间上的pairwis cos距离**在**新的空间上**仍然获得**保留**。

原始矩阵$$d$$维，降到$$k$$维，所以对应的矩阵是$$A\in R^{d\times k}$$。所以$$A$$中有$$k$$个映射，每个映射$$A\_i$$都将$$X$$映射到$$Y\_i$$，输出的$$Y\_i\in R^k$$。计算方式如下：

$$
Y\_i=\left{\begin{matrix}
1,\&if\ A\_iX\ge 0\\
0,\&else
\end{matrix}\right.
$$

计算$$X\_1$$，$$X\_2$$的cos相似度是$$cos(\frac{H(Y\_1,Y\_2)}{k}\pi)$$，其中，$$X\_1,X\_2\in R^d$$。$$H(Y\_1,Y\_2)$$是LSH输出向量的汉明距离。为了保持cos相似度的高准确率，需要把$$k$$设得比较大，这里和k-means一样，$$k=10000$$。

因为对每个向量算LSH是相互独立的，所以这一步是可以高度并行化的。但是，在我们的case里，有10000的$$k$$，有3.5M的$$d$$，所以相当于要把包括了$$3.5M\times 10^4$$个服从$$N(0,1)$$浮点数的$$A$$存到每个节点的内存里，也就是300G的内存消耗，这是肯定不行的。有很多解决方法，大部分方法是生成一个sparse的矩阵$$A$$【kdd06的[Very sparse random projections](https://web.stanford.edu/~hastie/Papers/Ping/KDD06_rp.pdf)】。

而本文用了[Online Generation of Locality Sensitive Hash Signatures](https://pdfs.semanticscholar.org/db21/730d2e0e2aa1f148a5411ea23ae7ceea574a.pdf)里提到的pooling trick。

保存一个size是$$m$$的pool $$B$$，每个元素是从$$N(0,1)$$中随机出来的浮点数，m远小于transition matrix $$A$$的size。要获取$$A\_{ij}$$的一条记录，就是使用关于$$i,j$$的一致性hash的方法在$$B$$中找到一个index，然后查出它的值。在本文中，设置$$m=1000000$$，将单节点的内存损耗从100G缩减到10M，可以直接用mr搞啦。

**减少训练样本数**

&#x20;

每个用户在每个域都有大量的日志数据，将每个用户在每个域只选取一个user-item对，具体为用户特征-用户在**此域**喜欢的所有item的**平均分数**。

### YoutubeDNN

<https://daiwk.github.io/posts/dl-youtube-video-recommendation.html>

参考<http://www.sohu.com/a/155797861_465975>

参考<https://zhuanlan.zhihu.com/p/25343518>

[Deep neural networks for youtube recommendations](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf)

YouTube是世界上最大的视频上传、分享和发现网站，YouTube推荐系统为超过10亿用户从不断增长的视频库中推荐个性化的内容。整个系统由两个神经网络组成：**候选生成网络**和**排序网络**。候选生成网络从**百万量级**的视频库中生成**上百个**候选，排序网络对候选进行打分排序，输出**排名最高的数十个结果**。

#### 候选生成网络（Candidate Generation Network）

候选生成网络将推荐问题建模为一个**类别数极大的多分类问题**：对于一个Youtube用户，使用其观看历史（视频ID）、搜索词记录（search tokens）、人口学信息（如地理位置、用户登录设备）、二值特征（如性别，是否登录）和连续特征（如用户年龄）等，对视频库中所有视频进行多分类，得到每一类别的分类结果（即每一个视频的推荐概率），最终输出概率较高的几百个视频。===>即，【使用**用户特征**，对所有视频进行分类，得到**和这个用户最相关的几百个候选结果。**】

将推荐看成分类问题，用户$$U$$在上下文$$C$$中，选择视频$$i$$的概率是：

$$
P(w\_t=i|U,C)=\frac{e^{v\_iu}}{\sum \_{j\in V}e^{v\_ju}}
$$

其中，$$v\_i\in R^N$$是第i个视频的emb，$$u\in R^N$$是用户的emb，两个emb都是N维的，这里看起来是用内积$$v\_iu$$把它们变成一个数。

由于视频有百万量级，所以做这么一个超大规模的分类，需要，并且使用的是到的样本**通过importance sampling进行负采样**(参考[On using very large target vocabulary for neural machine translation](http://www.aclweb.org/anthology/P15-1001))。对每一个example而言，他的cross-entropy是在true label和采样的负类中求min。在实践中，采样了数千个负类，比传统的softmax有将近100倍的速度提升。

另一种做法是hierarchical softmax(参考[Hierarchical probabilistic neural network language model](https://www.iro.umontreal.ca/~lisa/pointeurs/hierarchical-nnlm-aistats05.pdf))，但实践中效果没那么好。因为在hsoftmax中，遍历树里的每一个节点时，会引入对经常是毫无联系的类别的分辨，使得分类问题变得更困难以至于效果变差。

在线serving时，由于低延迟的要求，需要有对类别数是sublinear的时间复杂度的近邻检索方法，之前youtube的系统使用的是hashing的方法，即[Label partitioning for sublinear ranking](http://www.thespermwhale.com/jaseweston/papers/label_partitioner.pdf)。因为在线的时候，softmax的输出没啥用，所以打分问题就变成了一个在点积的空间上进行最近邻检索的问题，有很多通用库可以用，例如基于LSH的ann算法：[ An Investigation of Practical Approximate Nearest Neighbor Algorithms](http://papers.nips.cc/paper/2666-an-investigation-of-practical-approximate-nearest-neighbor-algorithms.pdf)。

注：

item-embedding也可以参考<https://zhuanlan.zhihu.com/p/24339183?refer=deeplearning-surfing>里说的[Item2vec: Neural Item Embedding for Collaborative Filtering](https://arxiv.org/abs/1603.04259)的想法，把item视为word，用户的行为序列视为一个集合，item间的共现为正样本，并按照item的频率分布进行负样本采样，相似度的计算还只是利用到了item共现信息，缺点是：忽略了user行为序列信息; 没有建模用户对不同item的喜欢程度高低。

#### Modeling Expected Watch Time

训练用的是logistic regression加上cross-entropy，

logit和sigmoid的关系，odds表示一个事件的几率，即该事件**发生与不发生的概率比值**，x表示logit：

$$
\begin{aligned}
\&y = \frac{1}{1+exp(-x)}\\
\&exp(-x) = \frac{1}{y}-1=\frac{1-y}{y}\\
&-x=log(\frac{1-y}{y})\\
\&logit=x=log(\frac{y}{1-y})=log(odds)
\end{aligned}
$$

假设第i个正样本的播放时长是$$T\_i$$，使用weighted logistic regression，将正样本的权重设为播放时长，而负样本的权重设为1，这样，假设总共有N个样本，有k个被点击了，就相当于有了$$\sum T\_i$$个正样本，N-k个负样本。所以odds就是正样本数/负样本数=$$\frac{\sum T\_i}{N-k}$$。

而实际中，点击率P很低，也就是k很小，而播放时长的期望是$$E(T)=\frac{\sum T\_i}{N}$$，所以$$E(T)$$约等于$$E(T)(1+P)$$，约等于odds，即$$\frac{\sum T\_i}{N-k}$$

最后在inference的serving中，直接使用$$e^{Wx+b}$$来产出odds，从而近似expected watch time。

参考<https://en.wikipedia.org/wiki/Logistic_regression>

odds是平均时长，训练时输入给sigmoid的是logit，

$$
wx+b = logit = log odds
$$

所以，infer的时候：

$$
E(T) = odds = e ^{logit} = e ^{log odds} = e^{wx+b}
$$

\==>对于负样本采样率（保留百分之m的负样本）是m，正样本采样率（保留百分之n的正样本）是n

$$
e^{-logit'}=\frac{1}{e^{logit'}}=1/odds=实际负样本数/实际正样本数=m/n \* 负样本数/正样本数=m/n \* e^{-logit}
$$

然后对于经典的召回采样纠偏([Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations](https://storage.googleapis.com/gweb-research2023-media/pubtools/5716.pdf))来讲，就是$$logit' = logit - log(p)$$，就有如下公式，和上面是类似的

$$
exp(-logit')=exp(-logit+log(p))=p \* exp(-logit)
$$

参考tf的weighted sigmoid：`weighted_cross_entropy_with_logits`: <https://www.tensorflow.org/api_docs/python/tf/nn/weighted_cross_entropy_with_logits>

正常的sigmoid：

```python
labels * -log(sigmoid(logits)) +
    (1 - labels) * -log(1 - sigmoid(logits))
```

weighted sigmoid只对正样本加权：

```python
labels * -log(sigmoid(logits)) * pos_weight +
    (1 - labels) * -log(1 - sigmoid(logits))
```

![youtube-dnn-recsys-architecture](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7d3808e2f752b705440e1f0d8af30b76586a2e5e%2Fyoutube-dnn-recsys-architecture.png?alt=media)

#### 代码实现

<https://github.com/ogerhsou/Youtube-Recommendation-Tensorflow/blob/master/youtube_recommendation.py>

关于数据集：

<https://github.com/ogerhsou/Youtube-Recommendation-Tensorflow/commit/e92bac1b8b5deb0e93e996b490561baaea60bae8>

使用的是<https://github.com/facebookresearch/fastText/blob/master/classification-example.sh>

在init\_data函数中，给每个\_\_label\_\_xx编了个号，如：

```shell
__label__6 0
__label__12 1
__label__14 2
__label__7 3
```

然后read\_data的时候，y就用这个编号来表示（假装是时长）：

```python
y.append(label_dict[line[0]])
```

而使用的是nce\_loss(参考<https://daiwk.github.io/posts/knowledge-tf-usage.html#tfnnnceloss>)：

```python
ce_weights = tf.Variable(
    tf.truncated_normal([n_classes, n_hidden_1],
                        stddev=1.0 / math.sqrt(n_hidden_1)))
nce_biases = tf.Variable(tf.zeros([n_classes]))

loss = tf.reduce_mean(tf.nn.nce_loss(weights=nce_weights,
                     biases=nce_biases,
                     labels=y_batch,
                     inputs=pred,
                     num_sampled=10,
                     num_classes=n_classes))

cost = tf.reduce_sum(loss) / batch_size
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
out_layer = tf.matmul(pred, tf.transpose(nce_weights)) + nce_biases
```

### 采样

batch内shuffle采样（有放回）

[On Sampling Strategies for Neural Network-based Collaborative Filtering](https://arxiv.org/pdf/1706.07881.pdf)

[浅谈个性化推荐系统中的非采样学习](https://mp.weixin.qq.com/s/OGLJx-1tGYYuLWFricfRKg)

[Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations](https://dl.acm.org/doi/10.1145/3298689.3346996)

#### NCE/负采样/sampled-softmax等

[求通俗易懂解释下nce loss？](https://www.zhihu.com/question/50043438/answer/2529305073)

<http://demo.clab.cs.cmu.edu/cdyer/nce_notes.pdf>

[自然语言处理-word2vec-负采样/Negative Sampling](https://zhuanlan.zhihu.com/p/144146838)

<https://www.tensorflow.org/extras/candidate_sampling.pdf>

下载了一份：<https://github.com/daiwk/collections/blob/master/assets/candidate_sampling.pdf>

[推荐系统遇上深度学习(七十二)-\[谷歌\]采样修正的双塔模型](https://www.lizenghai.com/archives/38343.html)

### 召回常用Loss

[表示学习中的7大损失函数梳理](https://mp.weixin.qq.com/s/XN-ugqsziXDjj1Ax8EJD0A)

#### Contrastive Loss

[A Comprehensive Survey on Self-Supervised Learning for Recommendation](https://arxiv.org/pdf/2404.03354)

[最新综述 | SSL4Rec: 全面探索自监督学习时代的推荐算法 (含开源代码和资料)](https://mp.weixin.qq.com/s/XvV67RK_9V56Sn5ncIBQSQ)

<https://github.com/HKUDS/SSLRec>

#### Triplet Loss

#### InfoNce Loss

[Self-supervised Learning for Large-scale Item Recommendations](https://arxiv.org/pdf/2007.12865.pdf)

v3有两个图：<https://arxiv.org/pdf/2007.12865v3.pdf>

![ssl1](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-58aa4f1f1fcd549e68e57ed9e38fb0619227e2db%2Fssl-1.png?alt=media)

![ssl1](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3ee4fbf389c37331894cae798ccc944ad8ce2483%2Fssl-2.png?alt=media)

#### Focal Loss

#### Circle Loss

#### qalign

[Spherical Graph Embedding for Item Retrieval in Recommendation System](https://dl.acm.org/doi/abs/10.1145/3511808.3557704)

[自己下载了](https://github.com/daiwk/collections/tree/master/assets/Q-align.pdf)

代码：<https://github.com/WNQzhu/Q-align>

自己的注释：<https://github.com/daiwk/llms_new/blob/main/demos/qalign.py>

假设$$N\_K(u)$$是节点$$u$$的$$K$$跳邻居，那么目标函数是最大化这些邻居的概率，即

$$
\max *f \sum*{u \in \mathcal{V}} \log \operatorname{Pr}\left(N\_K(u) \mid f(u)\right)
$$

#### BYOL

[Bootstrap your own latent: A new approach to self-supervised learning](https://arxiv.org/pdf/2006.07733)

![byol](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e9804f3944e1a17883f59c71b60fa611972099be%2Fbyol.png?alt=media)

loss是最小化两者的距离：

$$
\mathcal{L}*{\theta, \xi} \triangleq\left|\overline{q*\theta}\left(z\_\theta\right)-\bar{z}*{\xi}^{\prime}\right|*2^2=2-2 \cdot \frac{\left\langle q*\theta\left(z*\theta\right), z\_{\xi}^{\prime}\right\rangle}{\left|q\_\theta\left(z\_\theta\right)\right|*2 \cdot\left|z*{\xi}^{\prime}\right|\_2}
$$

其中，$$\theta$$正常通过梯度下降更新，而$$\xi$$是stop-gradient的，通过对$$\theta$$进行moving average得到，在线只使用$$\theta$$对应的网络：

$$
\begin{aligned}
& \theta \leftarrow \operatorname{optimizer}\left(\theta, \nabla\_\theta \mathcal{L}\_{\theta, \xi}^{\text {BYL }}, \eta\right), \\
& \xi \leftarrow \tau \xi+(1-\tau) \theta,
\end{aligned}
$$

#### label smoothing

<https://spaces.ac.cn/archives/7359>

Label smooth通过soft one-hot来加入噪声,减少了真实样本标签的类别在计算损失函数时的权重,而把剩余的权重均匀分配到其他类别上,使得模型不会盲目自信,最终在fine-grained任务上能有效抑制过拟合。

### 突破双塔

#### TDM->JTM

[下一代深度召回与索引联合优化算法JTM](https://mp.weixin.qq.com/s/heiy74_QriwxpZRyTUEgPg)

#### 二向箔

xx

#### DR

[字节最新复杂召回模型，提出深度检索DR框架解决超大规模推荐系统中的匹配问题](https://cloud.tencent.com/developer/article/1698045)

[Deep Retrieval: An End-to-End Learnable Structure Model for Large-Scale Recommendations](https://arxiv.org/abs/2007.07203)

### 多兴趣召回

[推荐系统 多兴趣召回论文解读](https://zhuanlan.zhihu.com/p/404281900)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-a1e90d345593cdf6fbb778389b4ef74f72e391ee%2Fmind-comirec.png?alt=media)

sdim：<https://zhuanlan.zhihu.com/p/560657191>

### 多场景

[多模态多兴趣多场景的召回算法](https://mp.weixin.qq.com/s/nBBPuwPBVC0JEB3trEk12g)

[M5: Multi-Modal Multi-Interest Multi-Scenario Matching for Over-the-Top Recommendation](https://dl.acm.org/doi/pdf/10.1145/3580305.3599863)

### transformer+召回

ICLR2020 cmu+google：

[Pre-training Tasks for Embedding-based Large-scale Retrieval](https://arxiv.org/abs/2002.03932)

### C-Star

[Shopping Trajectory Representation Learning with Pre-training for E-commerce Customer Understanding and Recommendation](https://assets.amazon.science/c3/ee/721654a94b0a800cb7c534ba5bd8/shopping-trajectory-representation-learning-with-pre-training-for-e-commerce-customer-understanding-and-recommendation.pdf)

Customer Shopping TrAjectory Representation Learning framework (C-STAR) PR-Graph（product relational graph）：$$\mathcal{G}=(\mathcal{T}, \mathcal{E}, \mathcal{V})$$

* $$\mathcal{T}$$：所有节点，15k，可能是类目之类的，应该不是商品id
* $$\mathcal{E}$$：所有边，417k，强关联的product才有边，例如共同购买
* $$\mathcal{V}$$ ：每个节点对应的d维向量，$$\mathcal{V} \in \mathbb{R}^{|\mathcal{T}| \times d}$$。

用户的长度为$$N\_i$$的历史序列就可以看成 $$\mathcal{T}\_i \subseteq \mathcal{T} \text {, i.e., } \mathcal{T}*i=\left\[t\_n^i\right]*{n=1}^{N\_i}$$，并构成了子图$$\mathcal{G}\_i \subseteq \mathcal{G}$$

基于最优运输理论（Optimal Transport theory）：将一个分布的质量（mass）搬到另一个分布的最小成本

对于$$\boldsymbol{X} \sim P, \boldsymbol{X} \in \mathbb{R}^d$$，假设有一个函数$$f: \mathbb{R}^d \rightarrow \mathbb{R}$$，即$$f$$能把$$x$$从$$P$$分布变成另一个分布，称$$f\_{#} P$$是$$P$$的一个推前（push forward）。两个分布P和Q间的Wasserstein Distance定义为：

$$
W\_p(P, Q)=\left(\inf \_{f \in T P(P, Q)} \int|x-f(x)|^p d P(x)\right)^{\frac{1}{p}}, p \geq 1
$$

1维分布能直接算出最优距离，但对于高维分布来讲，没法直接算出来最优距离，SW距离(sliced-WD)通过将高维分布投影到一维，计算一维上的Wasserstein距离，然后对多个投影方向的距离取平均，从而降低计算复杂度。具体公式如下，其中$$g\_{\boldsymbol{\theta}}(\boldsymbol{x})=\boldsymbol{\theta}^{\top} \boldsymbol{x}$$，而$$\boldsymbol{\theta} \in \mathbb{S}^{d-1}$$是一个d维的单位向量（unit vector，模长为1），$$\mathbb{S}^{d-1}$$是d维向量的超球面，$$g\_{\theta\_{#}} P$$是$$P$$用$$g\_{\boldsymbol{\theta}}$$的推前。这个距离同时满足正定、对称、三角不等式。

$$
S W\_p(P, Q)=\left(\int\_{\mathbb{S}^{d-1}}\left(W\_p\left(g\_{\theta #} P, g\_{\theta #} Q\right)\right)^p d \theta\right)^{\frac{1}{p}}
$$

为了建模如下两种相似度：

* inter-trajectory distribution similarity: 不同用户的行为序列间的分布相似度
* intra-trajectory semantic correlation: 一个序列内部的语义相关性

小结：参考最优传输理论（Optimal Transport），即把每个购物路径视为一个概率分布，然后通过计算这些分布之间的距离来衡量路径之间的相似性。Wasserstein距离可以视为将一个分布“移动”到另一个分布所需的“工作量”，其中“工作量”由移动每个元素所需的“成本”（通常是欧几里得距离）决定。 高维空间中直接计算Wasserstein距离很难，采用了Sliced-Wasserstein距离，将高维分布投影到多个一维分布上，然后将这些一维分布之间的Wasserstein距离进行pooling，来近似原始高维Wasserstein距离。

Inter-SE和Intra-CE简单总结如下：

* Inter-trajectory similarity encoding(inter-SE)：把原分布的n维特征向量映射成1维，参考分布（可以是原来特征的向量的avg之类的）也映射成1维，计算映射后的向量与参考向量的距离（可以证明这个距离就约等于sliced-WD），作为inter-SE
* Intra-trajectory correlation encoder(intra-CE)：取每个item在graph里的邻居，用GCN得到其表示，然后和inter-SE一样也映射成1维，算映射后的向量与inter-SE里的参考向量的距离，作为intra-SE

#### 序列间

&#x20;

对于$$M$$个序列，定义probability measures $$\left\[P\_i\right]*{i=1}^M$$，每个序列相对应的特征序列是$$\mathcal{V}*i=\left\[v*{t\_n^i} \in \mathbb{R}^d\right]*{n=1}^{N\_i}$$，假设这些特征的底层分布是$$P\_i$$，而对应的经验（离散）分布$$\widehat{P}\_i$$对应的经验CDF是

$$
F\_{\widehat{P}*i}(x)=\frac{1}{N\_i} \sum*{n=1}^{N\_i} \delta\left(x \geq v\_{t\_n^i}\right)
$$

其中$$\delta(\cdot)$$如果输入是0就返回1，否则返回0。认为$$\widehat{P}\_i \approx P\_i$$，所以后面直接用$$\widehat{P}\_i$$来表示$$P\_i$$。

为了衡量两个序列分布的相似性，希望比较输入的序列分布和一个可训练的参考分布（当成序列特征空间的『原点』）。引入参考分布$$P\_0$$，对应的特征list $$\mathcal{V}*0=\left\[v*{t\_n^0} \in \mathbb{R}^d\right]\_{n=1}^N$$，每个元素是可训练的emb

目标就是找到$$\left(P\_0, P\_i\right)$$的距离，然后指导对应的序列表示$$\left(E\_0, E\_i\right)$$的学习

先进行一维WD的分布slice的计算，假设$$g\_\theta(\boldsymbol{x})$$是一个线性映射，定义$$P\_i^{\boldsymbol{\theta}}:=g\_{\boldsymbol{\theta} #} P\_i$$为$$P\_i$$关于$$g\_\theta$$的一个slice

**Proposition 1**

&#x20;

从reference slice $$P\_0^{\boldsymbol{\theta}}$$到输入分布slice $$P\_i^{\boldsymbol{\theta}}$$的$$f^\*$$可以表示为：

$$
f^\*\left(x^{\boldsymbol{\theta}} \mid \mathcal{V}*i^{\boldsymbol{\theta}}\right):=F*{P\_i^{\boldsymbol{\theta}}}^{-1}\left(F\_{P\_0^{\boldsymbol{\theta}}}\left(x^{\boldsymbol{\theta}}\right)\right), \quad x^{\boldsymbol{\theta}} \in \mathcal{V}\_0^{\boldsymbol{\theta}}
$$

对应的CDF是$$F\_{P\_0^{\boldsymbol{\theta}}}\left(x^{\boldsymbol{\theta}}\right)=\frac{1}{N} \sum\_{n=1}^N \delta\left(x^{\boldsymbol{\theta}}-\boldsymbol{\theta}^{\top} .\right.v\_{t\_n^0})$$是单调递增的。

**Proposition 2**

&#x20;

如果我们知道按升序排序的$$\mathcal{V}\_0^\theta$$(因为这原始embedding的slice，是一维的，所以可以排序)对应的每个输入$$x^\theta$$的排名$$\tau\left(x^{\boldsymbol{\theta}} \mid \mathcal{V}\_0^{\boldsymbol{\theta}}\right)$$，而且$$N=N\_i$$，那么最优的transport plan $$f^\*$$可以表示为：

$$
f^\*\left(x^{\boldsymbol{\theta}} \mid \mathcal{V}*i^{\boldsymbol{\theta}}\right)=\operatorname{argmin}*{x^{\prime} \in \mathcal{V}\_i^\theta}\left(\tau\left(x^{\prime} \mid \mathcal{V}\_i^\theta\right)=\tau\left(x^{\boldsymbol{\theta}} \mid \mathcal{V}\_0^{\boldsymbol{\theta}}\right)\right)
$$

**inter-trajectory similarity encoding**

&#x20;

对于每个分布slice的pair对$$\left(P\_0^{\boldsymbol{\theta}}, P\_i^{\boldsymbol{\theta}}\right)$$，最优的transport plan产生了最短的一组距离$$W\_p\left(P\_0^{\boldsymbol{\theta}}, P\_i^{\boldsymbol{\theta}}\right)$$。$$\boldsymbol{\theta}\_s$$表示从$$\mathbb{S}^{d-1}$$中采样的第$$s$$个映射的参数，那么对原始序列分布的累积SW距离如下：

$$
S W\_p\left(P\_0, P\_i\right) \approx\left(\frac{1}{S} \sum\_{s=1}^S W\_p\left(P\_0^{\theta\_s}, P\_i^{\theta\_s}\right)^p\right)^{\frac{1}{p}}
$$

用$$\Theta=\left{\boldsymbol{\theta}*s\right}*{s=1}^S$$表示采样的映射参数集合，首先将$$P\_0$$的embedding参考$$\mathcal{V}*0=\left\[\boldsymbol{v}*{t\_n^0}\right]\_{n=1}^N$$里的向量$$O \in \mathbb{R}^{N \cdot S}$$进行如下编码，其中$$\text { || }$$表示innermost维度的concat操作：

$$
\boldsymbol{O}:=\frac{1}{S N}\left|*{s=1}^S\right|*{n=1}^N \boldsymbol{\theta}*s^{\mathrm{T}} \boldsymbol{v}*{t\_n^0}
$$

给定输入特征list $$\mathcal{V}\_i$$，定义inter-se（inter-trajectory similarity encoder）如下：

$$
\operatorname{Inter}-\operatorname{SE}\left(\mathcal{V}*i \mid \Theta\right):=\frac{1}{S N}\left|*{s=1}^S\right|\_{n=1}^N f^\*\left(\boldsymbol{\theta}*s^{\top} v*{t\_n^0} \mid \mathcal{V}\_i^{\boldsymbol{\theta}\_s}\right)-\boldsymbol{O}
$$

其中$$E\_i \in \mathbb{R}^{N \cdot S}$$是编码后的表示

定理1：对于任意两个输入序列及其对应分布$$P\_i$$和$$P\_j$$，他们对应的编码后表示$$E\_i$$和$$E\_j$$，有：

* $$\left|E\_i-E\_j\right|\_p \approx S W\_p\left(P\_i, P\_j\right)$$
* $$\left|E\_i\right|\_p \approx S W\_p\left(P\_i, P\_0\right)$$

#### 序列内

&#x20;

对于序列$$\mathcal{G}*i$$里的每个节点而言，它的邻居节点特征集合$$\mathcal{N}*i=\left\[v*{t*\alpha^i}\right]*{t*\alpha^i \in N g h\left(\mathcal{T}\_i\right)}$$，其中$$N g h\left(\mathcal{T}*i\right)$$是$$\mathcal{T}*{\boldsymbol{i}}$$的元素在PR-Graph里的所有邻居。对于$$\mathcal{T}*i=\left\[t\_n^i\right]*{n=1}^{N\_i}$$里的每个节点$$t\_n^i$$，先将它在第$$l$$次迭代的邻居特征向量summarize起来：

$$
v\_{N g h\left(t\_n^i\right)}^{(l)}=\sum\_{t \in N g h\left(t\_n^i\right)} \frac{w\_{t, t\_n^i}^{(l-1)}}{\sqrt{|N g h(t)|+1} \sqrt{\left|N g h\left(t\_n^i\right)\right|+1}} v\_{t\_n^i}^{(l-1)}
$$

其中$$w\_{t, t\_n^i}^{(l-1)} \in \mathbb{R}$$，$$v\_{t\_n^i}^{(0)}$$通过$$\mathcal{V}*i$$中的$$v*{t\_n}^i$$初始化，定义如下的layer-wise邻居特征list：

$$
\mathcal{N}*i^{(l)}=\left\[v*{N g h\left(t\_n^i\right)}^{(l)}\right]\_{t\_n^i \in \mathcal{T}\_i}
$$

最终定义Intra-Trajectory Correlation Encoder（Intra-CE）如下：

$$
\operatorname{Intra-CE}\left(\mathcal{V}*i \mid \Theta\right):=\sum*{l=1}^L \alpha\_l\left(\frac{1}{S N}\left|*{s=1}^S\right|*{n=1}^N f^\*\left(\boldsymbol{\theta}*s^{\top} \boldsymbol{v}*{t\_n^0} \mid \mathcal{N}\_i^{(l)}\right)-\boldsymbol{O}\right)
$$

其中$$\alpha\_l$$是第$$l$$个系数，简单地定义为$$\alpha\_l=1/L$$。节点的emb一般通过邻居信息迭代更新，例如$$v\_{t\_n^i}^{(l)}=\operatorname{AGG}\left(v\_{N g h\left(t\_n^i\right)}^{(l)}, v\_{t\_n^i}^{(l-1)}\right)$$，AGG就是GNN的聚合函数。

Inter-SE的输出是$$\boldsymbol{E}\_{\boldsymbol{i}}$$，Intra-CE的输出是$$E\_i^{\prime}$$，最终整个序列的表示是二者的融合$$E\_i^{\star}=\left\[\boldsymbol{E}\_i, \boldsymbol{E}\_i^{\prime}\right] \in \mathbb{R}^{2 N S}$$

#### C-Star预训练策略

&#x20;

两个loss：

* 序列间的element overlaps：两个序列的overlap越多，越相似。用$$\Omega\_i$$表示与$$\mathcal{T}\_i$$相关的ranking list，检索出一个序列pair $$\left(\mathcal{T}\_j, \mathcal{T}\_k\right) \in \Omega\_i$$，使得$$\left|\mathcal{T}\_i \cap \mathcal{T}\_j\right|>\left|\mathcal{T}\_i \cap \mathcal{T}\_k\right|$$，即$$i$$与$$j$$的交集比$$i$$与$$k$$的大，loss如下：

$$
\mathcal{L}*1=\sum*{i=1}^M \sum\_{\left(\mathcal{G}\_j, \mathcal{G}\_k\right) \in \Omega\_i}^H \max \left(0,\left|\boldsymbol{E}\_i^{\star}-\boldsymbol{E}\_j^{\star}\right|\_2-\left|\boldsymbol{E}\_i^{\star}-\boldsymbol{E}\_k^{\star}\right|\_2+\text { margin }\right)
$$

* 序列内的contextual relalations：同一个序列里的是正样本，不同序列的是负样本，loss如下：

$$
\mathcal{L}*2=\sum*{i=1}^M \sum\_{t^{+} \in \mathcal{T}\_i, t^{-} \notin \mathcal{T}\_i}^H \max \left(0, \boldsymbol{E}*i^{\star} \cdot \boldsymbol{v}*{t^{+}}-\boldsymbol{E}*i^{\star} \cdot \boldsymbol{v}*{t^{-}}+\text {margin }\right)
$$

整体loss，其中$$|\Delta|\_2^2$$是正常的L2正则：

$$
\mathcal{L}=\mathcal{L}\_1+\mu \mathcal{L}\_2+\mu^{\prime}|\Delta|\_2^2
$$

![c-star-algo](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-8bc634237ad16e719812ab97b052f1a6ba17441b%2Fc-star-algo.png?alt=media)

## 粗排

### COLD

### CAN

### poly-encoder

<https://zhuanlan.zhihu.com/p/119444637>

### VIRT

虚拟交互：让双塔模型向单塔模型模仿如何分配注意力权重

[VIRT: Improving Representation-based Text Matching via Virtual Interaction](https://aclanthology.org/2022.emnlp-main.59.pdf)

### HCCP

[WWW'25「京东」粗排一致性建模｜A Hybrid Cross-Stage Coordination Pre-rank](https://mp.weixin.qq.com/s/RFlWwaR6luoWEjabpwQ8JQ)

[A Hybrid Cross-Stage Coordination Pre-ranking Model for Online Recommendation Systems](https://arxiv.org/pdf/2502.10284)

构造5类样本：

* N1：曝光空间中的点击/未点击作为正负样本；
* N2：未曝光空间中的排序列表，非均匀采样；
* N3：后链路排序后的粗排序列，非均匀采样；
* N4：batch内的负采样，均匀采样；
* N5：整个候选池负采样，均匀采样。

除了N1，其他样本都是额外构造的。非均匀采样是针对排序列表的，排在前面的采样率高。列表经过后链路的排序，可以增加与后链路的一致性。减少长尾item的采样可以防止长尾偏差。

然后对采样率进行分桶，对桶内进行重新排序，目的是减少后链路排序的偏差。新排序公式的思想是：和原始排序正相关，加上一定程度的和曝光/点击负相关。

多目标训练主要包括下游一致性和长尾优化。

## 精排

### 传统ctr

<https://daiwk.github.io/posts/dl-traditional-ctr-models.html>

#### lr for ctr

[Simple and scalable response prediction for display advertising](https://people.csail.mit.edu/romer/papers/TISTRespPredAds.pdf)

[Online Models for Content Optimization](https://www.researchgate.net/publication/221618458_Online_Models_for_Content_Optimization)

#### gbdt for ctr

gbdt基础知识：

<https://zhuanlan.zhihu.com/p/86263786>

bagging全称叫bootstrap aggregating，每个基学习器都会对训练集进行有放回抽样得到子训练集，比较著名的采样法为0.632自助法。每个基学习器基于不同子训练集进行训练，并综合所有基学习器的预测值得到最终的预测结果。bagging常用的综合方法是投票法，票数最多的类别为预测类别。

boosting训练过程为阶梯状，基模型的训练是有顺序的，每个基模型都会在前一个基模型学习的基础上进行学习，最终综合所有基模型的预测值产生最终的预测结果，用的比较多的综合方式为加权法。

stacking是先用全部数据训练好基模型，然后每个基模型都对每个训练样本进行的预测，其预测值将作为训练样本的特征值，最终会得到新的训练样本，然后基于新的训练样本进行训练得到模型，然后得到最终预测结果。

bagging和stacking中的基模型为强模型（偏差低，方差高），而boosting中的基模型为弱模型（偏差高，方差低）。

bagging的特点：

* 整体模型的期望等于基模型的期望，这也就意味着整体模型的偏差和基模型的偏差近似。
* 整体模型的方差小于等于基模型的方差，当且仅当相关性为1时取等号，随着基模型数量增多，整体模型的方差减少，从而防止过拟合的能力增强，模型的准确度得到提高。

所以，bagging中的基模型一定要为强模型，如果bagging使用弱模型则会导致整体模型的偏差提高，而准确度降低。

boosting的特点：

* 整体模型的方差等于基模型的方差，如果基模型不是弱模型，其方差相对较大，这将导致整体模型的方差很大，即无法达到防止过拟合的效果。因此，boosting框架中的基模型必须为弱模型。
* boosting框架中采用基于贪心策略的前向加法，整体模型的期望由基模型的期望累加而成，所以随着基模型数的增多，整体模型的期望值增加，整体模型的准确度提高。

gbdt与Adaboost对比

相同：

* 都是boosting，使用弱分类器；
* 都使用前向分布算法；

不同：

* 迭代思路不同：adaboost是通过提升错分数据点的权重来弥补模型的不足（利用错分样本），而GBDT是通过算梯度来弥补模型的不足（利用残差）；
* 损失函数不同：adaBoost采用的是指数损失，GBDT使用的是绝对损失或者Huber损失函数；

[Learning the click-through rate for rare/new ads from similar ads](https://www.researchgate.net/publication/221299556_Learning_the_click-through_rate_for_rarenew_ads_from_similar_ads)

[Using boosted trees for click-through rate prediction for sponsored search](https://www.researchgate.net/publication/254463616_Using_boosted_trees_for_click-through_rate_prediction_for_sponsored_search)

[Improving Ad Relevance in Sponsored Search](https://www.researchgate.net/publication/221520094_Improving_Ad_Relevance_in_Sponsored_Search)

[Stochastic Gradient Boosted Distributed Decision Trees](https://github.com/daiwk/collections/tree/master/assets/gbdt-Stochastic%20Gradient%20Boosted%20Distributed%20Decision%20Trees.pdf)

<https://zhuanlan.zhihu.com/p/148050748>

### 深度学习ctr

<https://daiwk.github.io/posts/dl-dl-ctr-models.html>

### 序列建模

[一文看懂序列推荐建模的最新进展与挑战](https://mp.weixin.qq.com/s/RQ1iBs8ftvNR0_xB7X8Erg)

[从MLP到Self-Attention，一文总览用户行为序列推荐模型](https://mp.weixin.qq.com/s/aMqh79_jjgSCn1StuCvyRw)

[Transformer在推荐模型中的应用总结](https://zhuanlan.zhihu.com/p/85825460)

[阿里妈妈点击率预估中的长期兴趣建模](https://mp.weixin.qq.com/s/RQ1iBs8ftvNR0_xB7X8Erg)

[DCN V2：Google提出改进版DCN，用于大规模排序系统中的特征交叉学习(附代码)](https://zhuanlan.zhihu.com/p/353223660)

[抖音/阿里/美团/微信/快手长序列兴趣建模经典方案探索](https://mp.weixin.qq.com/s/xKsT8b9cwrD1i8l-oSQ25g)

### 保序回归

参考<https://zhuanlan.zhihu.com/p/88623159>的代码，能画出下面的图

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e9c71c465cd92d61348e1eb1971198e0f767ec41%2Fbaoxuhuigui.png?alt=media)

对于二分类问题，参考<https://zhuanlan.zhihu.com/p/101766505>

对lr+gbdt的负采样校准的方法

[Practical Lessons from Predicting Clicks on Ads at Facebook](https://scontent-itm1-1.xx.fbcdn.net/v/t39.8562-6/240842589_204052295113548_74168590424110542_n.pdf?_nc_cat=109\&ccb=1-7&_nc_sid=ad8a9d&_nc_ohc=GSRnP2abLiwAX8Hp1xi&_nc_ht=scontent-itm1-1.xx\&oh=00_AfCVWcm3VWKykwQMPU9lJxZk4WP9rJP1PJE_aIeLILLIHA\&oe=641F3A4A)

### cvr预估

ecpc：用户给定一个粗粒度出价，模型可以在一定的范围内调价 ocpc：完全以模型出价为准

delay feedback <https://zhuanlan.zhihu.com/p/555950153>

### 时长预估

快手kdd 2022

[Deconfounding Duration Bias in Watch-time Prediction for Video Recommendation](https://arxiv.org/pdf/2206.06003.pdf)

[短视频推荐视频时长bias问题](https://cloud.tencent.com/developer/article/2141921)

拿物理时长（duration）分桶

D2Q 算法的具体做法如下：

* 统计训练样本的 duration 分布，得到等频分桶分位点；
* 将样本按照等频分桶分位点分成 k 个相互独立的分桶 $$D\_k$$；
* 对不同 duration 分桶的样本，在组内统计时长分位数作为 label，得到 Duration-Aware Watchtime-Distribution label；
* 分别在上述的分桶上训练时长预估模型 $$f\_k$$；

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ed61dd0dd0115a2579489aeb45f1d99c1ca355ca%2Fwtd.png?alt=media)

* 图a：M个网络完全独立，分别学习各自的label，不共享特征 embedding，特征 embedding 空间随着分桶维度扩大线性增加，存储、训练的资源开销随之增加，实现成本较高，不符合工业界场景的要求；
* 图b：M个网络共享底层特征，如果采用多输出的训练方式，则 batch 内样本分布不均的问题会导致子塔训练不稳定，收敛到局部最优。**单塔单输出**的训练方式在实际训练时效果稳定，收敛速度较快，是 D2Q 实现的基线版本。
* 图c：单塔单输出模型中引入 Duration bias 模块，用于建模不同分桶下的样本差异（Res-D2Q），离线训练指标得到进一步的提升。

论文使用 XAUC、XGAUC 以及 MAE 等指标对时长回归效果进行评估。MAE 表示短视频预估时长与观看时长 label 的误差绝对值，表示模型回归精度，是回归任务的常用评估指标。

* XAUC：将测试集中的样本两两组合，若组合的标签和预估值的序一致则为正序，否则为逆序，XAUC 是正序对数与总组合数的比值；
* XGAUC：用户维度计算的 XAUC。

由于推荐系统主要优化候选集的排序，评估指标 XAUC 能够更加直观的反映预估时长序的好坏，与论文的优化目标更加适配。

## 多目标

### 多目标+推荐综述

[Multi-task多任务模型在推荐算法中应用总结1](https://zhuanlan.zhihu.com/p/78762586)

[Multi-task多任务学习在推荐算法中应用(2）](https://zhuanlan.zhihu.com/p/91285359)

[多任务学习在推荐算法中的应用](https://mp.weixin.qq.com/s/-SHLp26oGDDp9HG-23cetg)

### 阿里多目标

[阿里提出多目标优化全新算法框架，同时提升电商GMV和CTR](https://mp.weixin.qq.com/s/JXW--wzpaFwRHSSvZEA0mg)

### Youtube多目标——MMoE

[YouTube 多目标排序系统：如何推荐接下来收看的视频](https://mp.weixin.qq.com/s/0vZqCswErlggD6S52GnYVA)

<https://daiwk.github.io/posts/dl-youtube-multitask.html>

### CGC

cgc参考paddle代码：[cgc\_demo.py](https://github.com/daiwk/collections/tree/master/assets/cgc_dir/cgc_demo.py)

## 多场景

### APG

APG: 面向CTR预估的自适应参数生成网络

摘要：目前基于深度学习的CTR预估模型（即 Deep CTR Models）被广泛的应用于各个应用中。传统的 Deep CTR Models 的学习模式是相对静态的，即所有的样本共享相同的网络参数。然而，由于不同样本的特征分布不尽相同，这样一种静态方式很难刻画出不同样本的特性，从而限制了模型的表达能力，导致次优解。在本文中，我们提出了一个高效率、高效果的通用模块，称为自适应参数生成网络(APG)。其可以基于不同的样本，动态的为CTR模型生成不同的模型参数。大量的实验表明，APG 能够被应用于各种 CTR 模型，并且显著的提升模型效果，同时能节省38.7%的时间开销和96.6%的存储。APG 已在阿里巴巴搜索广告系统部署上线，并获得3%的点击率增长和1%的广告收入增长。

[APG: Adaptive Parameter Generation Network for Click-Through Rate Prediction](https://arxiv.org/abs/2203.16218)

## 重排

### LRF

[Learned Ranking Function: From Short-term Behavior Predictions to Long-term User Satisfaction](https://www.arxiv.org/pdf/2408.06512)，rank阶段得到多目标的输出，需要把它们融合成一个目标，拿这个去排序，例如加法融合，LRF就是对其中搜参方法的优化

### NAR4Rec

[KDD 2024 | 快手生成式推荐](https://mp.weixin.qq.com/s/2Clup2_JPELWBuHqMBc97w)

[Non-autoregressive Generative Models for Reranking Recommendation](https://arxiv.org/pdf/2402.06871)

## item冷启

poso

[Personalized Cold Start Modules for Large-scale Recommender Systems](https://arxiv.org/abs/2108.04690)

<https://zhuanlan.zhihu.com/p/534056942>

## 用户冷启

### PeterRec

[仅需少量视频观看数据，即可精准推断用户习惯：腾讯、谷歌、中科大团队提出迁移学习架构PeterRec](https://mp.weixin.qq.com/s/PmVhAthYxiUspWic5Klpog)

[Parameter-Efficient Transfer from Sequential Behaviors for User Modeling and Recommendation](https://arxiv.org/pdf/2001.04253.pdf)

<https://github.com/fajieyuan/sigir2020_peterrec>

搞一个pretrain-finetune的架构，学好一套用户的表示，可以给各种下游任务用。

采用如下方式：

* **无监督**地学习用户表示：使用**序列模型**，**预测**用户的**下一次点击**。为了能建模**超长**的u-i交互序列，使用类似NextItNet（[A Simple Convolutional Generative Network for Next Item Recommendation](https://arxiv.org/pdf/1808.05163.pdf)）的模型
* 使用预训练好的模型去**有监督**地finetune下游任务
* 在各个下游任务间，想要尽可能共享更多的网络参数：参考learning to learn，即一个网络的大部分参数可以其他参数来预测（一层里95%的参数可以通过剩下的5%的参数来预测）。文章提出了model patch(模型补丁)，每个模型补丁的参数量不到原始预训练模型里的卷积层参数的10%。通过加入模型补丁，不仅可以保留原来的预训练参数，还可以更好地适应下游任务。模型补丁有串行和并行两种加入方式。

序列推荐模型:

* RNN：强序列依赖
* CNN：可并行，能比RNN叠更多层，所以准确率更高。难以建模长序列是因为卷积核一般都比较小（如3x3），但可以通过空洞(dilated)卷积来解决，可以使用不变的卷积核，指数级地扩充表示域。
* 纯attention：可并行，例如SASRec（[Self-attentive sequential recommendation](https://arxiv.org/abs/1808.09781)）。但因为时间和存储消耗是序列长度的平方的复杂度。

考虑到用户的点击序列往往成百上千，所以使用类似NextItNet的casual卷积，以及类似GRec（[Future Data Helps Training: Modeling Future Contexts for Session-based Recommendation](https://arxiv.org/abs/1906.04473)）的双向encoder的这种non-casual卷积。

与推荐系统现有的transfer learning对比：

* DUPN：
  * 训练的时候就有多个loss。如果没有相应的loss和data，学好的用户表示效果就会很差。而本文只有一个loss，却能用在多个task上，所以算是一种multi-domain learning([Efficient parametrization of multi-domain deep neural networks](https://arxiv.org/abs/1803.10082))
  * DUPN在用户和item特征上需要很多特征工程，并没有显式地对用户的行为序列建模
  * DUPN要么finetune所有参数，要么只finetune最后一个分类层。PeterRec则是对网络的一小部分进行finetune，效果并不比全finetune差，比只finetune最后一个分类层要好很多
* CoNet：杨强提出的[Conet: Collaborative cross networks for cross-domain recommendation](https://arxiv.org/abs/1804.06769)
  * cross-domain用于推荐的一个网络。同时训练2个目标函数，一个表示source网络，一个表示target网络。
  * pretrain+finetune效果不一定好，取决于预训练的方式、用户表示的表达能力、预训练的数据质量等

预训练时没有\[TCL]，fintune时加上。

* 原domain$$S$$：有大量用户交互行为的图文或视频推荐。一条样本包括$$\left(u, x^{u}\right) \in \mathcal{S}$$，其中，$$x^{u}=\left{x\_{1}^{u}, \ldots, x\_{n}^{u}\right}\left(x\_{i}^{u} \in X\right)$$表示用户的点击历史
* 目标domain$$T$$：可以是用户label很少的一些预测任务。例如用户可能喜欢的item、用户性别、用户年龄分桶等。一条样本包括$$(u, y) \in \mathcal{T}$$，其中$$y \in \mathcal{Y}$$是一个有监督的标签。

## GNN+推荐

<https://zhuanlan.zhihu.com/p/323302898>

[Graph Neural Networks in Recommender Systems: A Survey](https://arxiv.org/pdf/2011.02260.pdf)

[Graph Neural Networks for Recommender Systems: Challenges, Methods, and Directions](https://arxiv.org/pdf/2109.12843.pdf)

<https://daiwk.github.io/posts/dl-graph-representations.html>

[SIGIR2022 | SimGCL: 面向推荐系统的极简图对比学习方法](https://zhuanlan.zhihu.com/p/509511858)

[Are Graph Augmentations Necessary? Simple Graph Contrastive Learning for Recommendation](https://arxiv.org/abs/2112.08679)

<https://github.com/Coder-Yu/QRec>

### selfGNN

[图神经网络加持，突破传统推荐系统局限！北大港大联合提出SelfGNN：有效降低信息过载与数据噪声影响](https://mp.weixin.qq.com/s/j0ARLIk1lylp4UO_-6tKCw)

[SelfGNN: Self-Supervised Graph Neural Networks for Sequential Recommendation](https://arxiv.org/pdf/2405.20878)

<https://github.com/HKUDS/SelfGNN>

## RL

[快手强化学习与多任务推荐](https://mp.weixin.qq.com/s/QWnpM_n0RcP8nXlwXkuTlg)

## bias v.s. debias

[推荐系统炼丹笔记：推荐系统Bias大全 | Debias方法综述](https://blog.csdn.net/m0_52122378/article/details/110950122)

### position bias

[搜索、推荐业务中 - position bias的工业界、学术界 发展历程 - 系列1(共计2)](https://zhuanlan.zhihu.com/p/79904391)

[推荐系统遇上深度学习(七十一)-\[华为\]一种消除CTR预估中位置偏置的框架](https://www.jianshu.com/p/37768b399cd8)

#### PAL

[PAL: A Position-bias Aware Learning Framework for CTR Prediction in Live Recommender Systems](https://dl.acm.org/citation.cfm?id=3347033)

参考2007年的[Predicting Clicks: Estimating the Click-Through Rate for New Ads](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/predictingclicks.pdf)一文中的推导，

给定位置$$pos$$和对应的item $$x$$，用户点击的概率可以分解为：

* 给定$$pos$$和$$x$$，用户看到的概率$$P(seen|x,pos)$$
* 给定$$pos$$和$$x$$，用户看到后，点击的概率$$P(clk|seen, pos, x)$$

所以

$$
P(clk|x,pos) = P(seen|x,pos) \* P(clk|seen, pos, x)
$$

假设：

* 用户没看到item，那么点击概率为0
* 用户是否点击item和位置无关，只取决于用户是否看到item，即$$P(clk|seen, pos, x)=P(clk|x,seen)$$
* item被看到的概率只和位置有关，和item本身无关，即$$P(seen|x,pos) = P(seen|pos)$$

$$
P(clk|x,pos)=P(seen|pos)P(clk|x, seen)
$$

PAL就是搞两个塔：

* **仅bias塔**：$$P(seen|pos)$$：输入pos等bias特征，预估用户会不会看到**仅训练时使用**
* **无bias塔**：$$P(clk|x, seen)$$：输入item特征，预估**无bias的点击率**，**线上infer用**
* **带bias预估值**：两个塔输出乘起来，预估**有bias的点击率**，**仅训练时使用**

[推荐系统之Position-Bias建模](https://mp.weixin.qq.com/s/as8MWJZ2SAVZedx2v02fmA)

## 数据集的一些处理

[KDD2024最佳学生论文解读，中科大、华为诺亚：序列推荐新范式DR4SR](https://mp.weixin.qq.com/s/kvSMzc_8NXGKvPN66rDhtg)

[Dataset Regeneration for Sequential Recommendation](https://arxiv.org/abs/2405.17795)

<https://github.com/USTC-StarTeam/DR4S>

## 工业界的一些推荐应用

### dlrm

[Facebook深度个性化推荐系统经验总结(阿里内部分享PPT))](https://mp.weixin.qq.com/s/_LBSM_E0tNqVgLhLtULmUQ)

### instagram推荐系统

[Facebook首次揭秘：超过10亿用户使用的Instagram推荐算法是怎样炼成的？](https://mp.weixin.qq.com/s/LTFOw1jSgMogANT8gmCTpw)

<https://venturebeat.com/2019/11/25/facebook-details-the-ai-technology-behind-instagram-explore/>

[Instagram个性化推荐工程中三个关键技术是什么？](https://mp.weixin.qq.com/s/yBmISlPeRB9-mKv2-Dv6LQ)

### 微信读书推荐系统

[微信读书怎么给你做推荐的？](https://mp.weixin.qq.com/s/TcxI-XSjj7UtHvx3xC55jg)

### youtube推荐梳理

[一文总览近年来YouTube推荐系统算法梳理](https://mp.weixin.qq.com/s/hj2ecwfrwCfvrafnsNiP-g)

### 小红书

[小红书推荐系统全解析：去中心化内容分发](https://mp.weixin.qq.com/s/QAei__DLF-agcVHrWM5EaA)

中心化分发问题的本质在于**曝光越多、活跃度越高的内容**，往往能**获得更多的分发**，致使**普通创作者**的内容分发效果相对较差。此外，用户可能也会频繁看到热门兴趣，导致自身中长尾兴趣的内容所见相对较少。若要构建生态良好的社区，去中心化分发问题是需要解决的核心问题。

* 对于内容侧而言，应设法通过多种方式识别和引入笔记本身的更多信号，而非仅依赖用户对笔记的行为进行分发。
* 对于用户侧来说，应设法对用户的兴趣进行更优的挖掘，并在挖掘后予以一定的保护，鼓励用户中长尾和小众兴趣的内容分发，使用户的兴趣得到更全面的满足。

参考蚂蚁的[Bootstrap Latent Representations for Multi-Modal Recommendation](https://arxiv.org/pdf/2207.05969)的BM3：

![BM3](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-05477721aaac99d18a768e66c833ef8719fab962%2Fbm3.png?alt=media)

* $$L\_{rec}$$：uid没mask和itemid mask的搞，uid mask的和itemid没mask的搞
* $$L\_{align}$$：itemid mask的和多模态没mask的搞
* $$L\_{mask}$$：多模态没mask的和多模态mask的搞

## 其他

### 混合推荐架构

[混合推荐系统就是多个推荐系统“大杂烩”吗?](https://mp.weixin.qq.com/s/-OwxXZmbjrcpDtH-hWN-oQ)

### 认知推荐

[NeurIPS 2019 | 从感知跃升到认知，这是阿里在认知智能推荐领域的探索与应用](https://mp.weixin.qq.com/s/MzF-UT5Hm071bTUTZpKDGw)

[Learning Disentangled Representations for Recommendation](https://arxiv.org/pdf/1910.14238.pdf)


# 3.llm\_rec\_summary

## 前言

最近随着[onerec](https://arxiv.org/abs/2506.13695)的pr，生成式推荐一下子就火起来了。发现深度学习第一次用到推荐的[youtubednn](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf)是recsys16的，转眼快十年过去了，就来简单讨论下生成式推荐

[transformer](https://arxiv.org/abs/1706.03762)是2017年的文章，[din](https://arxiv.org/abs/1706.06978)是同年并且中了kdd18，在那段时间就出现了很多尝试把lstm/rnn/transformer用到推荐里的工作，例如至今还是很多论文baseline的2018年的[sasrec](https://arxiv.org/abs/1808.09781)。那么，生成式推荐和它有啥区别吗?

说实话单看模型结构和loss真没啥区别..

但我觉得以下几点还是有一些价值的：

* 现在的gpu卡比以前强无数倍了，模型大小可以尽情scale up上去，毕竟llm这么成熟，对应的一堆优化都是现成的
* [tiger](https://arxiv.org/abs/2305.05065)提出了可以用rqvae之类的方法产出语义id(sid)来代替itemid，这样解码就可以有新的可能。以前召回因为候选巨大，都是ann，而sid其实类似很2020年字节的[dr](https://arxiv.org/abs/2007.07203)，有某一种聚类的含义，就算极限情况做到了sid和itemid的一对一唯一映射，sid的解码还是会很有优势。当然这里还可以引出另一个话题那就是推荐和多模态的结合
* rlhf造就了chatgpt，onerec里把rl思想引进来了。看似很创新，但rl+推荐早在2018年的[topkoff policy correction reinforce](https://arxiv.org/abs/1812.02353)那个工作就被熟知了。不过借助着现在因为llm reasoning而带来的各种rl变种，应该会有一些新的思路吧
* 链路合并的可能性，例如[hstu](https://arxiv.org/abs/2402.17152)号称统一召回+精排，onerec号称xxx，而真正的最大入口的场景能做到吗?毕竟堆积了那么多年的逻辑，是说替换就能替换的吗?现在互联网已经这么难了，不会造成更多的失业吗?但毕竟故事好听
* 其他一些未知的可能性，llm毕竟也在飞速迭代，模型结构的创新、后训练的一些trick、llm世界知识怎么引入，甚至一些不需要训练的例如agent相关的东西，都有可能给现有的推荐算法有启发

如何将大模型应用到搜广推里？

个人觉得其实搜索是最容易用上的场景，因为搜索里相关性很重要，而文本天然就是其必不可少的输入，因此把模型从bert升级成llm就是一个最直接的想法了。而如果再叠加其他模态如图片、视频也同理，把对比学习训出来的如clip等模型升级成vlm应该也是一个相对可行的解法。

但推荐和广告似乎不太一样，因为国内最早的深度学习广告模型可以追溯到2014年百度的mio-learner（当然雅虎的lr模型是更早期的机器学习工作），时至今日，id类特征在推荐和广告模型里扮演着非常重要的作用，而搜索里最常用的文本和图片在推荐与广告里并不是那么重要。

所以，如何有效地把大模型引入到推荐和广告里呢？看过了一些论文后，发现有的挺有道理，有的包装过度，有的根本无法落地，这里就结合现有的（截止2025年7月）一些业界工作，简单地做一些个人感觉相对靠谱的思路上的总结（当然后续如果还有新思路的话会再更新下）

1. 参考大模型的结构与训练范式
2. 精排中序列建模模块的升级：保留精排整体结构，只是将序列建模部分transformer化。因为改造成了transformer，那么在LLM研究领域里累积了很多年且还相当活跃attention的变种、MoE的变种，都是可以尝试的点
3. 不断强化序列建模重要性：比较激进的是HSTU，直接只保留历史序列这一特征，别的全干掉了（当然论文附录里也说了其实推全的并不是这个）；比较保守的是美团的MTGR，保留了交叉特征。个人感觉合理的设计是介于二者之间，例如把序列建模模块的复杂度搞得足够高，那一些特征的作用就自然相对地弱化了
4. pretrain+sft/rl范式：例如阿里的GPSD、Pinterest的PinFM，就是拆成了pretrain和finetune两个步骤；快手的OneRec则是引入了RL
5. 训练/推理加速算子复用：如果模型里用到了decoder only的结构，那llm里常见的一些例如kv cache、pd分离、MTP都是可以参考的
6. 直接引入大模型的现有能力
7. 用大模型产出item向量：可以理解为传统内容理解模型的升级，将bert升级为llm，clip升级为vlm，引入TIGER里通过RQ-VAE等方式得到的semantic id等
8. 用大模型产出user向量：例如快手的LEARN，字节的HLLM，可能还会有新的方法，例如引入CoT等
9. 用大模型的自然语言推理能力：直接做到id粒度的预估不太现实，一般是作用到某种聚类粒度。主要有2种场景： 1. 场景1：很难找到groundtruth的场景，例如app的新用户，此时可以直接拿大模型进行预估 2. 场景2：针对已经有一些行为的用户，如何结合大模型的知识尝试缓解信息茧房，此时就可以基于现有用户行为定义一些label，拿用户行为对大模型进行sft，例如google的惊喜度推荐的系列文章

## 概述

可以参考gpt生成的一些报告，目录[>>>](https://github.com/daiwk/collections/tree/master/deep-research-assets/README.md)

大模型=大语言模型或者多模态大模型

* 引入大模型的模型结构
  * transformer结构的变种：tokenizer/位置编码/attention/ffn/moe/激活函数/norm等
  * loss：召回+排序loss
  * 生成式推荐：item粒度或sid粒度
* 引入大模型的世界知识
  * item侧：跨模态内容理解、sid生成/映射
  * user侧：行为摘要、意图推理、embedding生成
* 训练范式的创新
  * 预训练+sft+rl的流程：ExFM的蒸馏思路/搜广推的reward定义
  * 高效训练：LoRA、model merge（solar/sphinx等）等
  * 联合训练：大模型+搜广推模型联合训练
* 推理范式的创新
  * 缓存：kvcache/pd分离等
  * 解码加速：beamsearch/speculative decoding/multi-token prediction等
  * 线上链路覆盖：召/粗/精/混
* 探索性方向与未来趋势
  * 多智能体协同推荐
  * reasoning与链式思维的能力引入
  * 工具调用与RAG能力
  * 全模态的生成与沉浸式推荐

常用的推荐链路指标：

* 占比/独占比：召回、粗排、精排、推出
* 各阶段分：召回分、粗排分、精排分、融合分
* 各阶段序的对齐程度：召回序、粗排序、精排序、融合序
* 通过率：粗排通过率（进精排数/进粗排数）、精排通过率（进混排数/进精排数）
* Hit rate：当前召回序的topk在粗排序topk的占比、当前粗排序的topk在精排序topk的占比、召回N条有多少条在精排的topk里（目前看板用的是这个口径）...

## 引入大模型的模型结构

### transformer结构的变种

tokenizer/位置编码/attention/ffn/moe/激活函数/norm等

### loss

召回+排序loss

### 生成式推荐

item粒度或sid粒度

## 引入大模型的世界知识

### item侧

跨模态内容理解、sid生成/映射

### user侧

行为摘要、意图推理、embedding生成

## 训练范式的创新

### 预训练+sft+rl的流程

ExFM的蒸馏思路/搜广推的reward定义

### 高效训练

LoRA、model merge（solar/sphinx等）等

### 联合训练

大模型+搜广推模型联合训练

## 推理范式的创新

### 缓存

kvcache/pd分离等

### 解码加速

beamsearch/speculative decoding/multi-token prediction等

### 线上链路覆盖

召/粗/精/混

## 探索性方向与未来趋势

### 多智能体协同推荐

### reasoning与链式思维的能力引入

### 工具调用与RAG能力

### 全模态的生成与沉浸式推荐


# 4.llm\_note

参考<https://github.com/changyeyu/LLM-RL-Visualized>，对应的书《大模型算法：强化学习、微调与对齐》）

## 概述

llm训练时的teacher forcing机制：生成第i个token的输入：

* 推理时：是模型生成的第0到第i-1的序列
* 训练时：训练数据中实际的token序列

例如输入的是12345，输入1的时候生成了8，那要预测3的时候，输入的就是18；而训练时输入的还是12

## SFT

### lora

* lora的核心思想：微调前后模型的参数差异具有低秩性，所以可以用A和B两个矩阵来表示，这两个矩阵的秩是$$lora\_{rank}$$
* A一般是随机初始化，**B用0初始化**或者用很小的随机数初始化，为了保证在训练初期，lora不会对原始输出造成太大扰动
* 参数$$lora\_{alpha}$$用于缩放Lora输出，即$$W\_{merge}=W+A*B*lora\_{alpha}/lora\_{rank}$$
* 学习率一般开始的时候比较小，后面可以再调整，不过如果lora\_alpha较大，可以适当减小学习率
* 在推理的时候，可以先进行融合，其实就是算好$$W\_{merge}$$，推理的时候直接用

### prefix-tuning

大概是在prompt的最前面加若干个虚拟token，然后这部分有自己的参数（最开始的emb，还有后面的k和v，这里的k和v都是2个mlp，先映射到小一点的d'，再映射到d），总的可训练参数量参考：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0afaeefaa23a3576f10bd574446eeb1d76d23b1c%2Fprefix-tuning-params.png?alt=media)

### sft loss与logsoftmax

* LM head：从hidden dim映射到vocab size
* 计算时label是shift得到的(左移一位，因为要预测next item)
* 正常是先过LM head，算出logit矩阵，然后每个位置对所有词表里的词算softmax得到p，再去算交叉熵（只有label那个字有log(p)），所以就是log(softmax(x))
* prompt没有loss，只有response有loss，假设response长度为k，假设第i个位置对应的label是j，那交叉熵是$$-1/k\sum\_{i=1}^{k} log(p\_ij)$$

对于response里的第i个词来说，词表大小为$$n$$，$$x\_{max}=max(x\_0,x\_1,...,x\_n)$$，下式第三行就是第二行分子分母同时乘$$e^{-x\_{max}}$$

$$
\begin{aligned}
\operatorname{LogSoftmax}\left(x\_i\right) & =\log \left(\operatorname{Softmax}\left(x\_i\right)\right) \\
& =\log \left(\mathrm{e}^{x\_i} / \sum\_{j=0}^n \mathrm{e}^{x\_j}\right) \\
& =\log \left(\mathrm{e}^{\left(x\_i-x\_{\text {max }}\right)} / \sum\_{j=0}^n \mathrm{e}^{\left(x\_j-x\_{\text {max }}\right)}\right) \\
& =\left(x\_i-x\_{\text {max }}\right)-\log \left(\sum\_{j=0}^n \mathrm{e}^{\left(x\_j-x\_{\text {max }}\right)}\right)
\end{aligned}
$$

这个简化有2个好处：

* 减少计算量：例如除法、少量对数
* 数值稳定：上式是log-sum-exp技巧，减掉max可以避免溢出

另外还有一个常用名词logprobs（log probabilities），即logsoftmax的结果，因为softmax是0到1，所以logprobs取值范围是负无穷到0

### 如何减小SFT引入的幻觉

sft阶段引入的新知识越多，幻觉发生率也越高

模型主要通过预训练来获取知识，sft主要是用来教会模型如何更有效地利用这些知识。

所以，新知识应该在预训练阶段或者基于预训练模型继续预训练（CPT），再用sft进行优化

另外，sft选哪个版本的开源模型作为基础模型也有讲究：

* 需要加一堆新知识进行深度微调时，选base版本，因为base版本未指令微调，更有通用性
* 任务与现有指令任务类似（通用对话、开放域问答等），且指令数据不多，选指令微调版本（-instruct或者-chat）

## DPO

DPO（direct preference optimization）是监督学习，不是强化学习，loss如下

$$
\begin{aligned}
& \mathcal{L}*{\mathrm{DPO}}\left(\pi*\theta ; \pi\_{\mathrm{ref}}\right) \\
& =-\mathbb{E}*{\left(x, y*{\mathrm{w}}, y\_1\right) \sim \mathcal{D}}\left\[\log \sigma\left(r\left(x, y\_{\mathrm{w}}\right)-r\left(x, y\_1\right)\right)\right] \\
& =-\mathbb{E}*{\left(x, y*{\mathrm{w}}, y\_1\right) \sim \mathcal{D}}\[\log \sigma(\underbrace{\beta \log \frac{\pi\_\theta\left(y\_{\mathrm{w}} \mid x\right)}{\pi\_{\text {ref }}\left(y\_{\mathrm{w}} \mid x\right)}}*{\text {优质回答的隐式奖励}\uparrow }-\underbrace{\beta \log \frac{\pi*\theta\left(y\_1 \mid x\right)}{\pi\_{\text {ref }}\left(y\_1 \mid x\right)}}\_{\text {劣质回答的隐式奖励 } \downarrow})]
\end{aligned}
$$

其中，

* $$r$$是策略模型和参考模型的比值，即一个隐式的奖励模型，$$r\_{\theta}(x,y)=\beta log \frac{\pi\_{\theta}(y|x)}{\pi\_{ref}(y|x)}$$
* 策略模型是复制的sft模型，参考模型一般也是复制sft模型，有些时候可以选一个更复杂的模型，但要注意两者的kl散度和训练数据分布不要差太多

### DPO流程

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4b5ac4af411fa50f3a30cb19a8a8b5989140eea4%2Fdpo-training.png?alt=media)

* concat：将$$x$$和$$y\_w$$与$$y\_l$$分别concat，作为策略模型和参考模型的输入（实际会将三者concat一起）
* gather：算完logit和softmax后，再把y部分的拿出来，算出隐式奖励，再算Loss

### beta作用

在RLHF中，$$\beta$$和最终奖励$$=r(x,y)$$、最终奖励$$=r\_{\phi}(x,y)$$的关系如下，

$$
r(x,y)=r\_{\phi}(x,y)-\beta (log \pi \_{\theta}(y|x)-log \pi \_{ref}(y|x))
$$

* $$\beta$$很小时，策略模型和偏好数据分布更接近，
* $$\beta$$很大时，策略模型和参考模型更接近

在DPO中，

* $$\beta$$很小时，KL惩罚力度很小，策略模型有更多自由度去探索，策略模型和偏好数据分布更接近
* $$\beta$$很大时，KL惩罚力度很大，策略模型始终要兼顾和参考模型的距离，策略模型和参考模型更接近

### DPO的效果

对无害性有很大提升，对基础能力基本无影响（MMLU等）

### DPO的梯度

$$
\nabla\_\theta \mathcal{L}*{\mathrm{DPO}}\left(\pi*\theta ; \pi\_{\mathrm{ref}}\right)=-\beta \mathbb{E}*{\left(x, y*{\mathrm{w}}, y\_l\right) \sim \mathcal{D}}\[\underbrace{\sigma\left(r\_\theta\left(x, y\_l\right)-r\_\theta\left(x, y\_{\mathrm{w}}\right)\right)}*{\text {动态系数 }}\[\underbrace{\nabla*\theta \log \pi\_\theta\left(y\_{\mathrm{w}} \mid x\right)}*{\text {优质回答的概率 } \uparrow}-\underbrace{\nabla*\theta \log \pi\_\theta\left(y\_l \mid x\right)}\_{\text {劣质回答的概率 } \downarrow}]]
$$

* 增加优势回答出现的概率，降低劣势回答出现的概率
* 动态系数：优势答案和劣势答案的隐式奖励差异（注意$$r\_{\theta}(x,y)=\beta log \frac{\pi\_{\theta}(y|x)}{\pi\_{ref}(y|x)}$$），如下图：
  * $$r\_{\theta}(x,y\_l)\<r\_{\theta}(x,y\_w))$$时：隐式奖励模型能正确地给优质回答较高评分，图中左侧，说明已经学得比较好了，梯度比较小
  * $$r\_{\theta}(x,y\_l)>r\_{\theta}(x,y\_w))$$时：隐式奖励模型不太行，图中右侧，要加强梯度

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-08536e679127b64d0ba223ad9716a99715b1b319%2Fdpo-grad.png?alt=media)

解释：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c1cca16d4c5bfc112d1c9a6feb6565c100914be6%2Fdpo-dynamic-coeff.png?alt=media)

## Training-free的方法

### 提示词工程

prompt设计原则：

* 递进式尝试：先试zero-shot，效果不行再试few-shot，还是不行再尝试sft
* 灵活运用系统消息：引导模型的行为、风格、角色等
* 明确指令并用分隔符：在开头用冒号、三重引号、xml标签、换行等进行分隔
* 明确期望的输出格式并提供输出示例：详细描述具体输出格式要求
* 避免模糊描述：避免“较长”“较短”，要用具体数字，如5个要点、3段话
* 同时提供禁止和替代指令：告诉模型不要做什么，还有对应的替代方案
* 提供必要的上下文和角色信息：明确模型需要扮演的角色
* 分解复杂任务：复杂任务可以分进行意图分类或者逐步拆解任务
* 引导模型先思考后回答：明确指示模型在回答前先进行详细推理
* 使用参考文本并基于参考作答：提供可信的参考文本，要求模型基于此作答，可以进一步要求模型标明引用来源或参考文献
* 动态总结上下文：对话长度超出模型上下文窗口限制时，可以定期总结或筛选最相关信息

### CoT

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0d7c95f03b94a849dd813c934338975577289789%2Fcot-xot-etc.png?alt=media)

* 思维链：CoT，Chain of Thoughts，Google提出，[Chain-of-Thought Prompting Elicits Reasoning in Large Language Models](https://arxiv.org/pdf/2201.11903)
* 思维树：ToT，Tree of Thoughts，[Tree of Thoughts: Deliberate Problem Solving with Large Language Models](https://arxiv.org/pdf/2305.10601)，普林斯顿提出，允许考虑多个不同推理路径并进行自我评估，以决定下一步行动，并在必要时前瞻或回溯
* 思维图：GoT，Graph of Thoughts，[Graph of Thoughts: Solving Elaborate Problems with Large Language Models](https://arxiv.org/pdf/2308.09687)，苏黎世联邦理工学院提出，能将模型生成的信息建模为任意图结构，其中信息单元（思维）作为顶点，边对应这些顶点间的依赖关系，能有效组合任意的信息单元
* 自我一致性CoT：Self-consistency CoT，[Self-Consistency Improves Chain of Thought Reasoning in Language Models](https://arxiv.org/pdf/2203.11171)，Google提出，先生成多样化的推理路径集，然后从多个路径中选出最一致的答案
* Auto-CoT：[Automatic Chain of Thought Prompting in Large Language Models](https://arxiv.org/pdf/2210.03493)，自动构建CoT样本，先将问题聚类，再示例采样，每个类中选择一个具有代表性的问题，并用简单的Zero-shot CoT生成相应思维链
* 思维记忆：Memory of Thought，MoT，[MoT: Memory-of-Thought Enables ChatGPT to Self-Improve](https://arxiv.org/pdf/2305.05181)，复旦提出，不用更新参数，预思考：在未标注数据集上思考并将思维保存为外部记忆；推理：回忆相关记忆以帮助推理并回答给定问题
* XoT：Everything of Thoughts，[Everything of Thoughts: Defying the Law of Penrose Triangle for Thought Generation](https://arxiv.org/pdf/2311.04254)，RL+MCTS，结合轻量级的策略和价值网络，对特定任务进行训练以进行思维搜索，并随后泛化到新问题。训练完后，用轻量的策略和价值网络通过MCTS高效地思维搜索，再基于MCTS和LLM写作的框架进行思维修正，进一步提升思维质量。能最大程度减少LLM调用次数

如何自动选择few-shot示例？langchain等框架中实现了example selector

* 基于相似性
* 基于n-gram重叠分数
* 基于MMR(最大边际相关性)：在保证相关性的基础上引入多样性

多模态CoT：

* [Multimodal Chain-of-Thought Reasoning in Language Models](https://arxiv.org/pdf/2302.00923)：交大，两阶段框架，推理理由生成阶段：根据文本prompt+图像生成推理理由；答案推断阶段：根据文本prompt+图片+推理理由推断出最终答案
* [Improve Vision Language Model Chain-of-thought Reasoning](https://arxiv.org/pdf/2410.16198)，CMU，基于GPT-4o提取推理路径，对vlm进行微调以增强推理能力，再构造正负对加dpo提升效果

### 解码策略

以transformers.generate参数为例

* beam search：每次保留**累积概率**的topk，最终有k个路径，再选出最高的那个
* diverse beam search：[Diverse Beam Search: Decoding Diverse Solutions from Neural Sequence Models](https://arxiv.org/pdf/1610.02424)，分成多个组（num\_beam\_groups），每个组内beam search，组间通过多样性惩罚降低生成结果的相似性
* 受限beam search：[Guided Open Vocabulary Image Captioning with Constrained Beam Search](https://arxiv.org/pdf/1612.00576)，constraints参数指定限制条件，force\_words\_ids强制结果包含特定词/词组
* temperature：**控制不同词的概率差距**。当调小时，x/T变大，然后经过exp会指数放大，这样高logit的会变得更巨大，词的差距会被拉大，所以模型的输出会更稳定，输出结果更确定；反之不同词的差距更小，输出更多样
* 多项式采样：multinomial sampling，不是直接选概率最大的，而是按概率大小**随机采样**
  * top-k：只在概率前k的词中进行采样
  * top-p：累加概率大于p后截断，只对这些token采样，**控制长尾词的概率阈值**。top cummulative probability，是一个门槛，即从第一名往下数，累加后的概率大于p时，把后面的词扔掉，剩下的词再softmax，并去采样。调低会去掉长尾，输出稳定；调高会放低门槛，输出多样

\==> temperature和top-p虽然原理不同，但均是越大越多样，适用创作等场景；越小越稳定，适用于代码、数学

其他解码策略：

* contrastive search：对比搜索，[A Contrastive Framework for Neural Text Generation](https://arxiv.org/pdf/2202.06417)，在每个解码步骤中，从模型预测的最可能候选集中选择输出，以增强生成文本与人类编写前缀之间的语义连贯性，保持生成文本的词元相似度矩阵稀疏性，避免输出退化问题。
* speculative decoding：投机解码，引入一个较小模型，能一次性预生成多个候选token，主模型也并行验证这些候选token。deepseek v3就整合了投机采样和多token预测(MTP)，实现了每次预测2个token
* lookahead decoding：前瞻解码，[Break the Sequential Dependency of LLM Inference Using LOOKAHEAD DECODING](https://arxiv.org/pdf/2402.02057)，并行生成和验证多个n-gram，基于Jacobi迭代方法，打破自回归解码的顺序依赖，无需辅助模型或额外的数据存储，加速推理。
* decoding by contrasting layers(DoLa)：对比解码的一种，[DoLa: Decoding by Contrasting Layers Improves Factuality in Large Language Models](https://arxiv.org/pdf/2309.03883)，对比模型中较早层与最终层的logits的差异，DoLa能放大transformer层中特定部分局部化的事实知识，从而增强生成文本的真实性，旨在提高输出的事实准确性并减少幻觉现象。

控制生成细节的参数

* max\_length：包括prompt的总长度
* max\_new\_tokens：不包括prompt的总长度
* repetition\_penalty：大于1增加重复惩罚，减少重复token生成
* length\_penalty：beam类方法的长度惩罚，大于0时鼓励生成较长序列，反之鼓励较短序列
* force\_word\_ids/bad\_words\_ids：必须生成的token id列表/不能生成的token id列表
* output\_logits/output\_scores：输出logits/scores

### RAG

主要的点在于如何对文档进行分片（chunk），然后就是正常的向量召回流程了。例如Anthoripic的[Contextual RAG](https://www.anthropic.com/news/contextual-retrieval)会给每个chunk加一个上下文，把这段context放到chunk前面，然后再去做embedding。类似如下prompt：

```python
<document>…全文…</document>

<chunk>…分片…</chunk>

指令：“给一个简短、精炼的 context，用于把这个 chunk 放到整篇文档语境里，提升检索；
只输出这段 context，不要输出其它内容。”
```

### 工具调用

详见：<https://www.daiwk.net/5.llm_agentic#gong-ju-diao-yong>

## 强化学习核心知识

### 一些概念

* 回合(episode)：一次完整智能体和环境交互，从初始状态直到终止状态
* 马尔可夫链(MC)：下一状态只和当前状态有关，和之前时刻的状态无关
* 马尔可夫决策过程（MDP）：马尔可夫链的基础上引入动作和奖励，4元组$$(S,A,P,R)$$
* 部分可观测马尔可夫决策过程（POMDP）：智能体无法观测到环境的完整状态，只能看到一部分，7元组$$(S,A,T,R,\Omega,O,\gamma)$$，$$\Omega$$是观测集，智能体能观测到的所有可能结果，$$\gamma$$是折扣因子，$$T$$是转移概率，当前状态和动作下，转移到下一状态的概率

### 常见探索利用方法

* $$\epsilon$$ -greedy：以$$\epsilon$$的概率随机选一个动作，$$1-\epsilon$$的概率选择Q最大的动作；训练初期可以用大的$$\epsilon$$鼓励探索，后期减小来鼓励利用
* 上置信界（Upper Confidence Bound, UCB）：计算每个动作的置信度上界值，将预期回报和不确定性结合，选最高上界的动作
* 汤普森采样：从每个动作的后验概率分布中采样来选择动作
* 熵正则化：优化目标中加入熵正则项，下次加油策略多样性和探索性，PPO算法中提到的
* 乐观初始化：将价值函数的初始估计设置为较高值来促进探索，由于初始值被高估，算法会优先尝试未被充分探索的动作
* 玻尔兹曼探索（Boltzmann Exploration）：引入温度系数，将动作的估计价值转化为概率分布，以概率的方式选择动作。温度较高时，各动作的概率差异较小，更倾向于探索
* 噪声注入：OpenAI的[Parameter Space Noise for Exploration](https://arxiv.org/pdf/1706.01905)，在参数空间注入噪声，在奖励信号稀疏的任务中效果很好

### 同/异策略、在/离线强化学习：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-194ac44a681623a64ebe88070ca4cf525aeff1aa%2Fon-offpolicy-rl.png?alt=media)

* 行为策略(behavior policy)：智能体与环境交互时，实际执行交互行为的策略，负责收集用于训练的数据。
* 目标策略(target policy)：最终希望得到的策略，用来最大化长期回报。
* 同策略：行为和目标策略是同一个策略，例如policy gradient和SARSA，因为通常依赖最新生成的经验来训练并更新策略，所以一般不能用replay buffer
* 异策略：两个策略是不同版本或者不同类型，Q-learning/DQN都是，行为策略是$$\epsilon$$ -greedy，目标策略是最终要学习的，需要借助replay buffer
* replay buffer：一般存$$(s\_t,a\_t,r\_t,s\_{t+1})$$四元组(非Sutton教材写法)
* 在线强化学习：训练时策略持续和环境交互并收集经验，动态生成训练数据，目标策略也不断进化
* 离线强化学习：又叫batch RL，或者fully off-policy RL，训练时智能体完全不和环境交互，仅依赖预先收集的数据。训练结束之后再将策略整体部署到线上环境中

### model-based/model-free：

* model-based：利用环境模型进行规划和决策，例如Dyna-Q、MCTS（用于AlphaGo等）
* model-free：直接与环境交互，学习策略或者价值函数，例如基于价值(Q-learning、DQN、SARSA)、基于策略（REINFORCE、PG、GRPO）、Actor-Critic（DDPG、PPO、A3C）

### 奖励、回报、价值函数

* 奖励r（reward）：t时刻执行动作后，环境给的的实时奖励，**在Sutton的教材**里记为$$R\_{t+1}$$或者$$r\_{t+1}$$（以下以这个为准），一般大写是随机变量，小写是观测到的具体值，另外，在别的地方也会记成$$r\_t$$
* 奖励塑形（reward shaping）：设计复杂的奖励函数以表示具体任务目标，例如短视频推荐就可以设计一个多目标融合公式
* 回报G（gain）：到未来的累计奖励，可以加折扣，$$G\_t=R\_{t+1}+\gamma G\_{t+1}$$
* 价值函数：
  * $$Q\_{\pi}(s,a)$$：动作价值函数，在状态s下，采取动作a，获得的期望回报
  * $$V\_{\pi}(s)$$：状态价值函数，在状态s下，采取所有可能动作获得的期望回报

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-02085cc3205ea57eb742d9a340ec6730e6e8111e%2Frl-V-Q.png?alt=media)

### 贝尔曼方程

用动态规划解决优化和决策问题。对于给定策略$$\pi$$，

* 状态价值函数的贝尔曼方程为$$V\_\pi(s)=\sum\_a \pi(a \mid s) \sum\_{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left\[r+\gamma V\_\pi\left(s^{\prime}\right)\right]$$
* 动作价值函数的贝尔曼方程为$$Q\_\pi(s, a)=\sum\_{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left\[r+\gamma \sum\_{a^{\prime}} \pi\left(a^{\prime} \mid s^{\prime}\right) Q\_\pi\left(s^{\prime}, a^{\prime}\right)\right]$$
* 最优状态价值函数的贝尔曼方程为$$V\_*(s)=\max *a \sum*{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left\[r+\gamma V\_*\left(s^{\prime}\right)\right]$$
* 最优动作价值函数的贝尔曼方程为$$Q\_*(s, a)=\sum\_{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left\[r+\gamma \max *{a^{\prime}} Q**\left(s^{\prime}, a^{\prime}\right)\right]$$

### 蒙特卡洛方法（MC）

多次试验，获得多个实际运行轨迹（需要运行到回合结束），根据它们来估计价值函数或者优化策略。实际应用时，可以在每运行完一个回合后立即更新状态价值，如下，$$\alpha$$是学习率，$$G\_t$$是某个回合实验的回报

$$
V\left(s\_t\right) \leftarrow V\left(s\_t\right)+\alpha\left(G\_t-V\left(s\_t\right)\right)
$$

### 时序差分方法（TD）

TD(Temporal Difference，TD)，基于当前的价值估计进行自举（bootstrapping）学习，通过自身的估计值(如$$V(s\_{t+1})$$)来更新当前的估计值(如$$V(s\_{t})$$)。与MC的差别在于，TD不需要等整个回合结束，而是每前进一小就更新一次

TD目标和TD误差

$$
V\left(s\_t\right) \leftarrow V\left(s\_t\right)+\alpha\[\underbrace{\underbrace{r\_{t+1}+\gamma V\left(s\_{t+1}\right)}*{\text {TD 目标 }}-V\left(s\_t\right)}*{\text {TD误差 }}]
$$

TD误差：$$\delta\_t=V\_{\text {TD目标 }}-V\left(s\_t\right)=r\_{t+1}+\gamma V\left(s\_{t+1}\right)-V\left(s\_t\right)$$

* 单步TD：也叫TD(0)，智能体和环境每个时间步交互一次，仅依赖未来一步的奖励和下一个状态的价值估计$$V(s\_{t+1})$$
* 多步TD：智能体与环境交互n次，也可以在每个时间步更新，但依赖的是未来n步奖励和状态的价值估计$$V(s\_{t+n})$$，如下：

$$
\begin{aligned}
V\left(s\_t\right) & \leftarrow V\left(s\_t\right)+\alpha\left\[G\_t^{(n)}-V\left(s\_t\right)\right] \\
& =V\left(s\_t\right)+\alpha\[\underbrace{\left(r\_{t+1}+\gamma r\_{t+2}+\gamma^2 r\_{t+3}+\cdots+\gamma^{n-1} r\_{t+n}+\gamma^n V\left(s\_{t+n}\right)\right)}*{n \text { 步的折扣回报+第 }(t+n) \text { 步的价值 } V\left(s*{t+n}\right)}-V\left(s\_t\right)
\end{aligned}
$$

$$TD(\lambda)$$如下：

$$
V\left(s\_t\right) \leftarrow V\left(s\_t\right)+\alpha\left\[G\_t^\lambda-V\left(s\_t\right)\right]
$$

其中，$$G\_t^\lambda$$是在时间步$$t$$的$$\lambda$$回报，即综合考虑多个步数的回报，以$$\lambda$$为权重的加权和，计算公式如下：

$$
G\_t^\lambda=\underbrace{(1-\lambda)*{n=1}^{T-t-1} \lambda^{n-1} G*{t: t+n}}*{\text {侧重于 } \mathrm{TD}}+\underbrace{\lambda^{T-t-1} G\_t}*{\text {侧重于 } \mathrm{MC}}
$$

### REINFORCE recall

p.s.回头看一下REINFORCE recall：[Off-policy Learning in Two-stage Recommender Systems](https://www.researchgate.net/publication/341128860_Off-policy_Learning_in_Two-stage_Recommender_Systems)

1. 当reward是one-step的时候，等价于监督学习下的policy gradient；
2. 当reward是multi-step的时候（例如从列表页点击视频，进入落地页后的时长叠加），等价于TD(1)的强化学习

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6f2a4a7afa4b560acb96087b0c2e525f475f742f%2Freinforce-one-step-reward.png?alt=media)

p.s. 复习一下log trick

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-28f88f223acdc8ce0fa3d58fbc91da597c73399c%2Flogtrick.png?alt=media)

## 一些总结

### EvoLM

<https://zhuanlan.zhihu.com/p/2024394597879619874>

[EvoLM: In Search of Lost Language Model Training Dynamics](https://arxiv.org/pdf/2506.16029)

<https://github.com/zhentingqi/evolm>

<https://huggingface.co/collections/ZhentingNLP/evolm-datasets>

<https://zhentingqi.github.io/internal/projects/EvoLM/>

### 优化器

<https://docs.pytorch.org/docs/main/generated/torch.optim.Adam.html#torch.optim.Adam>

这里的weight decay其实是L2正则，求导后就是w，所以其实是对梯度做了decay，如图

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3fa2d49756e8911c89953c1065d95a53440388ca%2Fadam.png?alt=media)

<https://docs.pytorch.org/docs/main/generated/torch.optim.AdamW.html#torch.optim.AdamW>

这里真的是weight decay，即对原始w做了decay

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-958ca90453eb072775d6724df0d189ae30d99a78%2Fadamw.png?alt=media)

### BP

看周志明那本书的bp部分，没太看懂，和豆包与gpt讨论了下，发现：hiton 1986的[Learning representations by back-propagating errors](https://www.nature.com/articles/323533a0)，[pdf](https://www.cs.utoronto.ca/~hinton/absps/naturebp.pdf)

BP之前确实有多层训练方法，但大多是：局部规则、试探式扰动、逐层构造、结构搜索、无监督自组织，而其实BP很早就有人提了，比如Werbos 1974年博士论文就包含把反向传播用于训练网络的思想；Widrow的综述也提到，Werbos 1971年发展出backpropagation训练算法，1974年发表在博士论文里。Amari 1960s也讨论过用随机梯度下降端到端训练多层感知机的想法；Schmidhuber的历史综述提到，Ivakhnenko是逐层训练深层网络，而Amari 1967年提出从头用SGD端到端训练多层MLP。

但为什么大家还是把 1986 那篇当成“神经网络复兴”的关键？因为 Rumelhart、Hinton、Williams 把这个方法：讲清楚了、实验展示了、和hidden representation学习联系起来了、让社区真正用起来了。

BP：实际相当于是一个动态规划，因为多层nn的不同参数，在链式求导时中间的梯度有很多是公用的部分，而bp可以先算出来，缓存起来，算下一层的参数的梯度时候可以直接复用（这一点应该是相比周志明那本书里提的直接前向模式，即一参一路径，串行独推，原生无共享机制），这个其实和动态规划很像([这里](https://zhuanlan.zhihu.com/p/4762957769)也提到了这个思路)

这个库实现了简单的自动求导，<https://github.com/karpathy/micrograd>


# 5.llm\_agentic

## agent整体综述

[高效智能体的「幕后推手」是谁？一篇综述带你从记忆×工具学习×规划看透](https://mp.weixin.qq.com/s/H_6POgarpYMhR5x4wzp7Vg)

[Toward Efficient Agents: Memory, Tool learning, and Planning](https://arxiv.org/abs/2601.14192)

<https://github.com/yxf203/Awesome-Efficient-Agents>

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-6f42d33dc4b67a9a558c8c81f054b0eae44a2648%2Fagent-memory.png?alt=media)

* 记忆构建：通过概括、压缩与结构化把长对话转成**可用记忆**。
  * 留在推理链路的工作记忆：文本式直观但吃上下文，隐式式更像缓存，可减少重复编码；
  * 外置为可检索系统的外部记忆：先将信息压成小单元再按需召回，包括条目式、图式与分层式。
  * 此外，要警惕过度压缩带来的信息损失，即需要考虑如何在降成本与保真之间取得平衡。
* 记忆管理：防止存爆炸，也避免取太慢。规则式快但可能误删重要内容，大模型式更聪明但更贵，混合式则按层级或场景组合两者策略，在效果与成本之间取得折中。
* 记忆访问：选什么+怎么用。访问分记忆选择与记忆整合，通过检索或训练等方式挑选记忆，再用压缩过滤或隐式注入减少token与重复编码。

多智能体记忆：较于只靠通信，近年更多工作开始引入“记忆”这一概念来支撑规模化协作，可以概括为：

* 共享记忆
* 本地记忆
* 混合记忆

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5278aeadaace5287ab856e3c6a008f413b8af7de%2Fagent-tool.png?alt=media)

* 工具选择：目标是更快选对，且尽量少地塞进prompt。相关方法包括外部检索器、多标签分类，以及将工具映射为特殊token等思路，核心都是在大量工具中更快、更准地选出最需要的那几个。
* 工具调用：核心是少等、少调、少走弯路。典型路线包括边生成边调用、并行化调用，以及利用成本感知调用与测试时高效扩展来削减冗余调用；进一步还可通过面向效率的后训练把“短轨迹、少调用”写进策略本身。
* 工具融合推理：让模型学会“该不该用、何时用、用几次”。代表性方向包括选择性调用，引导智能体只在必要时才发起工具调用；以及成本约束策略优化，在保证效果的同时对冗余交互与过长轨迹施加惩罚，从而学到更短、更省的工具使用策略。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-abbe6552cda1922a59bb1b5567d55adfd0db1315%2Fagent-effecient-planning.png?alt=media)

* 单智能体：少算但不掉效果。主要思路包括自适应预算与控制的 “选择性思考”、结构化搜索的剪枝与代价感知、任务分解的先规划后执行；以及通过策略优化与记忆/技能获取把高效规划 “内化或复用”，越用越省。
* 多智能体：少通信但尽可能不丢信息。方向主要有三类：拓扑稀疏化减少全连接带来的图片的消息传递开销；协议与上下文优化压缩则关注 “传什么/怎么传”；蒸馏方法通过将多智能体协作能力蒸馏回单体，来减少运行时多智能体之间协调的成本。

未来：

* 统一评测框架：指标口径统一，模块开销边界清楚，才能真正让各个智能体方法可比可复现。
* 智能体的隐式推理（Latent Reasoning）：大模型侧的隐式推理正在升温，但面向智能体的研究仍相对稀缺。由于智能体链路更长、更复杂，还要处理工具调用、规划与记忆等环节，如何把中间推理 “做在隐式空间里”、在不掉效果的前提下降低成本，既是挑战，也是机会。
* 面向部署设计：在多智能体场景下，需要把部署成本纳入考量，核心问题是投入产出比。也就是说，增加智能体带来的收益，是否足以覆盖新增的开销。
* 多模态效率：多模态智能体发展很快，但效率研究仍相对欠缺。文本智能体的一些提效思路可以借鉴，但是直接迁移却并不容易，因为多模态智能体的感知输入、行为空间与任务结构更复杂、交互成本更高。因此，如何在多模态场景下系统地兼顾效果与成本，仍是亟待解决的关键问题。

## 工具调用

原理：

<https://chatgpt.com/share/68ff32eb-010c-8011-b7ca-feb0569804e8>

* huggingface：<https://huggingface.co/blog/zh/agents>
* vllm：<https://docs.vllm.ai/en/stable/features/tool_calling.html>

大概流程：

1. 用户输入 & 模板渲染

* 用户在客户端写一句话，比如：“帮我查一下东京明天天气。”
* 系统或你自己把这个消息、以前的上下文、还有工具定义（如一个 get\_weather(location, unit) 函数）一起填进chat\_template.jinja模板。
* 模板渲染后变成一串“对话 + 工具说明”的文本，送入模型，作为prompt。

2. 模型生成阶段 #1：考虑是否调用工具

* 模型会预测接下来的token。它可能决定：“用户要查天气，我应该调用 get\_weather 函数”，那么模型输出可能是一个标记，比如：

```xml
<minimax:tool_call>
<invoke name="get_weather">
<parameter name="location">"Tokyo, Japan"</parameter>
<parameter name="unit">"celsius"</parameter>
</invoke>
</minimax:tool_call>
```

3. 外部实体：解析 + 执行工具

* 在模型输出后，框架看到了`<minimax:tool_call>…</minimax:tool_call>`标记
* 然后解析出：函数名`get_weather`，参数 `{ "location": "Tokyo, Japan", "unit": "celsius" }`
* 然后真正调用你定义的`get_weather("Tokyo, Japan", "celsius")`（在 Python、API、脚本里）得到结果，比如 "明天天气 22°C 晴朗"。
* 再把这个结果以合适格式回馈给模型，比如插入一个“tool result”角色的消息。

4. 模型生成阶段 #2：基于工具结果生成回答

* 模型现在看到新的上下文（包含工具调用和工具结果），它继续生成token，输出给用户的最终回答，比如：`根据最新数据，东京明天天气晴朗，约 22°C。还要帮你查空气质量吗？`

这里的1、2是手动调用openai的接口，拿到模型返回结果时，从里面解析出来的要传给tool的参数，然后3需要我们自己本地调用具体函数，拿到结果再转成特定格式(加一个role为tool的content)，再去调用openai的接口拿到最终结果。整个过程可以看<https://github.com/daiwk/coding/blob/main/agentic/func_calling.py>

关于模型是如何把函数描述解析成json的，相关代码可以参考：[vllm](https://docs.vllm.ai/en/stable/api/vllm/entrypoints/openai/tool_parsers/minimax_tool_parser.html#vllm.entrypoints.openai.tool_parsers.minimax_tool_parser.MinimaxToolParser)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e3922b437378ae0443d6621e95d99338ec0edd41%2Ftool_call_code1.jpg?alt=media)

然后这个东西基于的是openai.BaseModel(transformers里最终也是走到这里)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ac1f564f30881736f2ce442a0dfc38b8bfb92394%2Ftool_call_code2.jpg?alt=media)

然后去openai里看

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-53f6788b807fe7f56f18781cb463cab22a395c99%2Ftool_call_code3.jpg?alt=media)

## prompt engineering

[万字长文总结提示词技巧！新加坡首届GPT-4提示工程大赛冠军最新分享](https://mp.weixin.qq.com/s/AWnQL3forAP-gB7e2ZEXdQ) 提出了CO-STAR框架

[高能干货分享，有关提示词工程的一切都在这份教程里](https://mp.weixin.qq.com/s/RaIzHtRIShIcpXydRE6kQg)

<https://github.com/NirDiamant/Prompt_Engineering>

[吴恩达：四个步骤，让大模型变得更好](https://mp.weixin.qq.com/s/ackyt5d2kqdzMy0-Ma_ElA)

[Can Generalist Foundation Models Outcompete Special-Purpose Tuning? Case Study in Medicine](https://arxiv.org/pdf/2311.16452)

让gpt4生成cot和答案的模板

![self-generated-cot-template](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-53c05ea08944d69dc71bf01ebf91af62025b1d54%2Fself-generated-cot-template.png?alt=media)

![medprompt](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-351e5f6f172f652903c5aa6a0ea354f92e33e199%2Fmedprompt.png?alt=media)

看着是借助GPT4+COT+RAG+投票

* 拿一坨question得到他们的向量，并按照上图的模板让gpt生成COT和答案，人工判断，对的存进知识库里
* 预测阶段：
  * 拿测试question的向量从知识库里查出5个最像(cos距离)的(q, cot, answer)作为context
  * 循环5次： shuffle测试question的答案选项，让LLM回答
  * 对生成的答案投票，选票数最多的

### APE

[还在人工炼丹？自动提示工程指南来了，还带从头实现](https://mp.weixin.qq.com/s/TxzkRUPhsiqtLhCyrIsQrQ)

<https://github.com/marshmellow77/automated-prompt-engineering-from-scratch>

### PAS

[还在死磕AI咒语？北大-百川搞了个自动提示工程系统PAS](https://mp.weixin.qq.com/s/2etnB3hbRtOCth1notqyBQ)

[PAS: Data-Efficient Plug-and-Play Prompt Augmentation System](https://arxiv.org/abs/2407.06027)

### ell

[OpenAI前研究者发布提示词工程框架ell，升级版LangChain，支持版本控制和多模态](https://mp.weixin.qq.com/s/LaNbu4bVrWLG3ueopFTj5g)

<https://github.com/MadcowD/ell>

### 一些实践

[gpt-4.1官方](https://www.xiaohongshu.com/explore/67fe98c1000000001d01477b?app_platform=ios\&app_version=8.79\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBD6_QqRzI70CObFc2ZlGE4OyHkXfEAyuQpTgGllA2rLs=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1744847767\&share_id=c452a695f467408c903e213ccf9f8d41)

## 多智能体

[《综述：全新大语言模型驱动的Agent》——4.5万字详细解读复旦NLP和米哈游最新Agent Survey](https://zhuanlan.zhihu.com/p/656676717)

[Agent > GPT5？吴恩达最新演讲：四种 Agent 设计范式（通俗易懂版）](https://mp.weixin.qq.com/s/6sh39yEO4YGZI-BGPjJnCg)

### JAT

[告别偏科，能玩转多模态、多任务、多领域的强化智能体终于来了](https://mp.weixin.qq.com/s/2GBB-w7hBf6equtqD8V0Lg)

[Jack of All Trades, Master of Some, a Multi-Purpose Transformer Agent](https://arxiv.org/pdf/2402.09844)

<https://github.com/huggingface/jat>

<https://huggingface.co/datasets/jat-project/jat-dataset>

![jat](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d8727ba724c0c815f3194b4718e86cb122ac4eb7%2Fjat.png?alt=media)

输入的序列元素是observations, actions, 和rewards的交替组合：

$$
\left\[\phi\left(s\_0, 0.0\right), \phi\left(a\_0\right), \phi\left(s\_1, r\_1\right), \phi\left(a\_1\right), \ldots\right]
$$

依据不同输入的数据类型，使用不同网络处理：

* 图像：用CNN。
* 连续向量：用线性层
* 离散值：用线性投影层

预测任务：根据所有先前的观察和动作嵌入来预测下一个动作嵌入。

序列的构造方法：

* 和文本相关的任务：用 GPT-2 的分词策略，将文本转换为一个整数序列，然后emb lookup映射到一个嵌入向量序列。
* 和图像有关的任务：用ViT，将图像切割成小块后，通过线性层转换为嵌入向量序列。
* 最终再将图像和文本的向量序列拼接在一起，形成一个统一的序列，输入到 Transformer 中。

### ReadAgent

[「有效上下文」提升20倍！DeepMind发布ReadAgent框架](https://mp.weixin.qq.com/s/xXJqJeqf8mzP9VW9kLIdgQ)

### 多模态agent

[一文详解多模态智能体（LMAs）最新进展（核心组件/分类/评估/应用）](https://mp.weixin.qq.com/s/lucGhu5-IPjIKbZ2o1q-PQ)

[Large Multimodal Agents: A Survey](https://arxiv.org/pdf/2402.15116)

<https://github.com/jun0wanan/awesome-large-multimodal-agents>

### OpenDevin

[OpenDevin出技术报告了，大模型Agent开发者必读](https://mp.weixin.qq.com/s/tfREoiwjfCZauisCE3PpvQ)

[OpenDevin: An Open Platform for AI Software Developers as Generalist Agents](https://arxiv.org/pdf/2407.16741)

### autogpt

[GitHub星标超16万，爆火AutoGPT进阶版来了：定制节点、多智能体协同](https://mp.weixin.qq.com/s/dBL47yYoVNkyPoPG8pcLLA)

<https://github.com/Significant-Gravitas/AutoGPT>

### DAAG

[三「模」联盟，谷歌DeepMind缔造终身学习智能体！](https://mp.weixin.qq.com/s/P-x8EDrfd1ydCnPP8MYu6g)

[Diffusion Augmented Agents: A Framework for Efficient Exploration and Transfer Learning](https://arxiv.org/pdf/2407.20798)

### VARP

[GPT-4o能玩《黑神话》！精英怪胜率超人类，无强化学习纯大模型方案](https://mp.weixin.qq.com/s/veHSbBxPIqRexG0OWtg4pw)

[Can VLMs Play Action Role-Playing Games? Take Black Myth Wukong as a Study Case](https://arxiv.org/abs/2409.12889)

### MARL

[北大领衔，多智能体强化学习研究登上Nature子刊](https://mp.weixin.qq.com/s/_67dbIMDjktMEw4QYiIAUA)

[Efficient and scalable reinforcement learning for large-scale network control](https://www.nature.com/articles/s42256-024-00879-7)

### MMRole

[与「李白」赏图赋诗，同「猴哥」直面天命，人大高瓴提出MMRole多模态角色扮演](https://mp.weixin.qq.com/s/I8gyDv9K8uhB3EXF_2_zVw)

[MMRole: A Comprehensive Framework for Developing and Evaluating Multimodal Role-Playing Agents](https://arxiv.org/abs/2408.04203)

<https://github.com/YanqiDai/MMRole>

### Swarm

[OpenAI今天Open了一下：开源多智能体框架Swarm](https://mp.weixin.qq.com/s/3-iKztrTuRURUGtles4-xA)

<https://github.com/openai/swarm>

### agent-as-a-judge

[卷起来！让智能体评估智能体，Meta发布Agent-as-a-Judge](https://mp.weixin.qq.com/s/YX1cmIMDonUiosSg24boUQ)

[Agent-as-a-Judge: Evaluate Agents with Agents](https://arxiv.org/pdf/2410.10934)

<https://github.com/metauto-ai/agent-as-a-judge>

### Hammer

[哪个模型擅长调用工具？这个7B模型跻身工具调用综合榜单第一](https://mp.weixin.qq.com/s/YsjjaTdDNWsoLXhr7mGOpQ)

[Hammer: Robust Function-Calling for On-Device Language Models via Function Masking](https://arxiv.org/abs/2410.04587)

<https://huggingface.co/MadeAgents>

<https://github.com/MadeAgents/Hammer>

### AgentOccam

[不靠更复杂的策略，仅凭和大模型训练对齐，零样本零经验单LLM调用，成为网络任务智能体新SOTA](https://mp.weixin.qq.com/s/UvNCUVBbH9TqfbEdoB7mTA)

[AgentOccam: A Simple Yet Strong Baseline for LLM-Based Web Agents](https://arxiv.org/abs/2410.13825)

### 苏格拉底学习

[DeepMind用语言游戏让大模型学AlphaGo自我博弈，数据限制不存在了](https://mp.weixin.qq.com/s/EC5QdHcasev8JpTp-OKLKQ)

[Boundless Socratic Learning with Language Games](https://arxiv.org/abs/2411.16905)

### 从个人模拟到社会模拟

[智能体模拟《西部世界》一样的社会，复旦大学等出了篇系统综述](https://mp.weixin.qq.com/s/Uy_NYkDGp9CqmO2j9XOfCA)

[From Individual to Society: A Survey on Social Simulation Driven by Large Language Model-based Agents](https://arxiv.org/abs/2412.03563)

### MetaGPT

ICLR2024

* [MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework](https://arxiv.org/pdf/2308.00352)
* [Data Interpreter: An LLM Agent For Data Science](https://arxiv.org/abs/2402.18679)
* [AFlow: Automating Agentic Workflow Generation](https://arxiv.org/abs/2410.10762)

4w+的stars了

<https://github.com/geekan/MetaGPT>

### insight-V

[多智能体架构Insight-V来了！突破长链视觉推理瓶颈](https://mp.weixin.qq.com/s/-8TvvTDa7zeEUlzcbtuPWg)

[Insight-V: Exploring Long-Chain Visual Reasoning with Multimodal Large Language Models](https://arxiv.org/abs/2411.14432)

<https://github.com/dongyh20/Insight-V>

### 世界经济论坛的agent报告

[Navigating the AI Frontier: A Primer on the Evolution and Impact of AI Agents](https://reports.weforum.org/docs/WEF_Navigating_the_AI_Frontier_2024.pdf)

### Claude: building effective agents(MCP)

[Claude 官方发布《Agent 构建指南》，附 PDF 下载](https://mp.weixin.qq.com/s/hqNcLv3pKgZdqpGxAPlt2A)

<https://www.anthropic.com/research/building-effective-agents>

Agent 系统分为两大类：

* 工作流 (Workflows) ：
  * 特点：通过预定义的代码路径来编排 LLM 和工具的系统。更像是一个精心设计的流程，每一步都清晰可控。
  * 场景：当任务非常明确，而且可以分解成一系列固定的步骤时，就像流水线上的工作一样，用“工作流程”就足够了。
* 智能体 (Agents)：
  * 特点：由 LLM 动态地指导自身流程和工具使用的系统。更像是一个自主的决策者，能够根据环境反馈灵活调整行动。
  * 场景：当任务需要很大的灵活性，而且需要模型自己做决策时，就像一个需要随机应变的指挥官，这时候“智能体”就更适合。

现有的框架：

* LangGraph（LangChain 的工具）：就像一套功能强大的乐高套件，可以用来搭建各种复杂的 Agent 系统。<https://langchain-ai.github.io/langgraph/>
* Amazon Bedrock 的 AI Agent 框架：就像一个专业的工具箱，提供了各种构建 Agent 系统的工具和组件。<https://aws.amazon.com/cn/bedrock/agents/>
* Rivet（拖放式 GUI LLM 工作流构建器）：就像一个可视化编辑器，可以通过拖拽的方式来构建 LLM 的工作流程，非常方便。<https://rivet.ironcladapp.com/>
* Vellum（复杂工作流的构建和测试工具）：就像一个高级的实验室，可以用来构建和测试复杂的工作流程。<https://www.vellum.ai/>

#### 基石：augmented LLM

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3c02c8a95eadfe0c8aa2b3698f19dff9ef46ba0c%2Faugmented-llm.png?alt=media)

通过**检索、工具和记忆**等机制扩展大语言模型的能力，这样大语言模型能够主动运用这些能力来生成自己的搜索查询、选择合适的工具，并决定保留哪些信息。

Anthropic有一个上下文协议（Model Context Protocol，MCP），允许开发者通过简单的客户端实现与不断增长的第三方工具生态系统集成，参考<https://www.anthropic.com/news/model-context-protocol>

[openai也妥协了，全面拥抱MCP!](https://mp.weixin.qq.com/s/R8kp1WiegAgIXM2ufLf0ZQ)

#### workflow

* prompt chaining：将一个任务分解成一系列步骤，其中的每个LLM的调用都会处理前一个调用的输出，可以在任何中间步骤中添加程序化的检查（见图中的“门控 Gate”），以确保流程仍在正轨上，即有一个失败就exit

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-494372099772c3d9c22a60106410306446ef7c9f%2Fworkflow-prompt-chaining.png?alt=media)

* Routing：将不同类型的客户服务查询（一般问题、退款请求、技术支持）导向不同的下游流程、提示和工具，例如将简单/常见的问题路由到较小的模型（如Claude 3.5 Haiku），将困难/不常见的问题路由到功能更强大的模型（如Claude 3.5 Sonnet），以优化成本和速度。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f160a04ff3d6a8c0be20376df0c828546dd793bf%2Fworkflow-routing.png?alt=media)

* Parallelization：同时执行多个任务，并通过程序化方式整合结果。适用：
  * 分段处理：
    * 构建安全防护机制，一个模型实例负责处理用户查询，而另一个模型实例负责筛选不当内容或请求。
    * 自动化评估模型性能，每个模型调用负责评估模型在给定提示下的不同性能指标。
  * 多重投票：
    * 对代码进行漏洞审查，多个不同的提示分别审查代码，并在发现问题时进行标记。
    * 评估内容是否不当，多个提示从不同角度进行评估，或采用不同的投票阈值来平衡误报和漏报。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f674309ba3aca5992fc10ac23830a190ce1f1fea%2Fworkflow-parallelization.png?alt=media)

* Orchestrator-workers（协调者-工作者模式）：一个中央LLM会**动态地分解任务**，并将这些子任务分配给不同的工作者模型，最后再整合所有工作者的结果。适用：
  * 需要对**多个文件**进行复杂修改的编码产品。
  * 需要从**多个来源**收集并分析信息以寻找相关内容的搜索任务。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-b74d0e89eb2cf19ec651f547a64ce37292ea643f%2Fworkflow-orchestrator-workers.png?alt=media)

* Evaluator-optimizer：一个LLM负责调用**生成**响应，而另一个LLM调用则在一个**循环**中提供**评估和反馈**。适用：
  * 文学翻译，比如翻译模型**最初**可能无法捕捉到的细微差别，但评估器模型可以提供有用的评审意见。
  * 需要进行**多轮**搜索和分析以收集全面信息的复杂搜索任务，评估器可以用来决定是否需要进一步搜索。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-46f3e75b1654b725100ae1b5593367dcb886ccdc%2Fworkflow-evaluator-optimizer.png?alt=media)

#### Agents

\*\* 当LLM在理解复杂输入、推理规划、可靠使用工具和从错误中恢复等关键能力上成熟时，智能体可以处理开放式问题，无需预先定义步骤，并能根据环境反馈**自主决策**。在特定节点或遇到困难时暂停的功能，以便引入人工干预或反馈。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-f71bf3eac540a242c55e2055366c70618cde2440%2Fauto-agents.png?alt=media)

### google ai agents白皮书

<https://github.com/daiwk/collections/blob/master/assets/google-ai-agents-whitepaper.pdf>

### stanford的agent综述

[Agent AI: Surveying the Horizons of Multimodal Interaction](https://arxiv.org/pdf/2401.03568)

### 李宏毅的agent课

[台大李宏毅2025 AI Agent新课来了！](https://mp.weixin.qq.com/s/d5FnSATz3tPfCOu2a53uKQ)

<https://www.youtube.com/watch?v=M2Yg1kwPpts>

[ppt](https://docs.google.com/presentation/d/1kTxukwlmx2Sc9H7aGPTiNiPdk4zN_NoH)

### google的A2A

[最新：Google 牵头搞了个 A2A，以后不同家的 AI 都能“加好友”了](https://mp.weixin.qq.com/s/fha3Yf-yK5D3JZ0bIX1tyw)

[5000字长文带你看懂，Agent世界里的A2A、MCP协议到底是个啥。](https://mp.weixin.qq.com/s/hr7wvpz-KRllwQkiKYf0Tg)

A2A协议是对 Anthropic 公司模型上下文协议 (MCP) 的补充，后者为智能体提供了有用的工具和上下文。A2A则更侧重于智能体之间的交互与协作

A2A促进了客户端 (client)智能体和远程 (remote)智能体之间的通信。客户端智能体负责制定和传达任务，远程智能体则负责执行这些任务以提供信息或采取行动。

这个交互过程包含几个关键能力：

* 能力发现 (Capability discovery): 智能体可以通过JSON格式的Agent Card来宣告自身能力。这使得客户端智能体能找到最适合执行某项任务的远程智能体，并发起A2A通信。
* 任务管理 (Task management): 通信围绕任务完成进行。协议定义了具有生命周期的任务 (task)对象。任务可以是即时完成的，也可以是长时运行的。任务的输出被称为工件 (artifact)
* 协作 (Collaboration): 智能体之间可以发送消息，以沟通上下文、回复、工件或用户指令
* 用户体验协商 (User experience negotiation): 每条消息包含parts，即完整的内容片段（如生成的图像）。每个部分都有指定的内容类型，允许客户端和远程智能体协商所需格式，并明确协商用户的UI能力（例如是否支持iframe、视频、Web表单等）。

### 字节的DeerFlow

[字节跳动开源了一款 Deep Research 项目](https://mp.weixin.qq.com/s/Le7Ic9FgcwAkQeHDuorXMw)

<https://github.com/bytedance/deer-flow>

### MASLab

[统一20+多智能体方法，MASLab震撼发布](https://mp.weixin.qq.com/s/4LzUYNyuHZhcsTd0RN-fwQ)

[MASLab: A Unified and Comprehensive Codebase for LLM-based Multi-Agent Systems](https://arxiv.org/pdf/2505.16988)

<https://github.com/MASWorks/MASLab>

### WebSailor

[开源Agent新标杆：通义WebSailor多榜夺魁，挑战OpenAI高难度Agent基准BrowseComp](https://mp.weixin.qq.com/s/duSIfK2vAbGowdrwEQCFaQ)

[WebSailor: Navigating Super-human Reasoning for Web Agent](https://arxiv.org/abs/2507.02592)

<https://github.com/Alibaba-NLP/WebAgent>

### WebShaper

[通义实验室大火的 WebAgent 续作：全开源模型方案超过GPT4.1 , 收获开源SOTA](https://mp.weixin.qq.com/s/p6ug9H4N_hbQkUQE-BTnKw?scene=1)

[WebShaper: Agentically Data Synthesizing via Information-Seeking Formalization](https://arxiv.org/abs/2507.15061)

### Reflection和Reflexion

[从零构建能自我优化的AI Agent：Reflection和Reflexion机制对比详解与实现](https://mp.weixin.qq.com/s/Y9m_fmohARH8l_xN3MDxPg)

## RAG

[Retrieval-Augmented Generation for Large Language Models: A Survey](https://arxiv.org/pdf/2312.10997.pdf)

[RAG全链路的关键模块解析](https://mp.weixin.qq.com/s/kNjOgfQs6yErNtRg6wFA3g)

[Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks](https://proceedings.neurips.cc/paper/2020/file/6b493230205f780e1bc26945df7481e5-Paper.pdf)

[Meta提出全新文档级嵌入框架，利用LLM来增强信息检索能力](https://mp.weixin.qq.com/s/RCRHjrW6jF167HG169aFwg)

[LLM-Augmented Retrieval: Enhancing Retrieval Models Through Language Models and Doc-Level Embedding](https://arxiv.org/pdf/2404.05825.pdf)

### RankRAG

[RAG微调Llama 3竟超越GPT-4！英伟达GaTech华人学者提出RankRAG框架](https://mp.weixin.qq.com/s/87qeqDSwtitYsruH_2Jdww)

[RankRAG: Unifying Context Ranking with Retrieval-Augmented Generation in LLMs](https://arxiv.org/pdf/2407.02485)

### graphRAG

[微软开源的GraphRAG爆火，Github Star量破万，生成式AI进入知识图谱时代？](https://mp.weixin.qq.com/s/BX93FvDzW7WVLK66V2usBw)

<https://github.com/microsoft/graphrag>

[From Local to Global: A Graph RAG Approach to Query-Focused Summarization](https://arxiv.org/pdf/2404.16130)

### RAGChecker

[给RAG系统做一次全面「体检」，亚马逊开源RAGChecker诊断工具](https://mp.weixin.qq.com/s/x4o7BinnwvTsOa2_hegcrQ)

[RAGCHECKER: A Fine-grained Framework for Diagnosing Retrieval-Augmented Generation](https://arxiv.org/pdf/2408.08067)

<https://github.com/amazon-science/RAGChecker>

### TAG

[表格增强生成TAG登场：解锁AI自然语言与数据库的完美结合](https://mp.weixin.qq.com/s/6gkPA-xc7GsltM1Ywui_XQ)

### Storm

[斯坦福开源学术研究神器STORM再进化，AI智能体像人一样进行圆桌讨论](https://mp.weixin.qq.com/s/-NY8Xw8ihIFgUwy4LFLMgA)

[Into the Unknown Unknowns: Engaged Human Learning through Participation in Language Model Agent Conversations](https://www.arxiv.org/pdf/2408.15232)

<https://github.com/stanford-oval/storm>

<https://storm.genie.stanford.edu/>

### Block-atttention RAG

[RAG新突破：块状注意力机制实现超低延迟检索增强](https://mp.weixin.qq.com/s/yv2iIpaJTi4g4nhZG1WLZw)

[Block-Attention for Efficient RAG](https://arxiv.org/pdf/2409.15355)

### 2024 rags

[RAG七十二式：2024年度RAG清单](https://mp.weixin.qq.com/s/icIduUFsJxOka4orKM2pCw)

### RAG的知识冲突

[深度解析RAG大模型知识冲突，清华西湖大学港中文联合发布](https://mp.weixin.qq.com/s/y9-DwgNb3Yftgf_Ulf6yDQ)

[Knowledge Conflicts for LLMs: A Survey](https://arxiv.org/pdf/2403.08319)

### myscaledb

[长文本杀不死RAG：SQL+向量驱动大模型和大数据新范式，MyScale AI数据库正式开源](https://mp.weixin.qq.com/s/JvyKnEbdOSb1fTwhiQTO5A)

<https://github.com/myscale/myscaledb>

### 多模态RAG

[多模态RAG技术：从语义抽取到VLM](https://mp.weixin.qq.com/s/VyW6xXHt39o5FTD6JkpcuA)

## agentic AI

### Agentic概述

[再见AI Agents，你好Agentic AI！](https://mp.weixin.qq.com/s/5_pjJLo5zDCwygcgM4A6xQ)

[AI Agents vs. Agentic AI: A Conceptual Taxonomy, Applications and Challenges](https://arxiv.org/pdf/2505.10468)

* 定义：AI Agents是执行特定任务的自主软件程序，而Agentic AI是多个AI代理协作以实现复杂目标的系统。
* 自主性水平：AI Agents在其特定任务内具有高自主性，而Agentic AI具有更高的自主性，能够管理多步骤、复杂的任务。
* 任务复杂性：AI Agents通常处理单一、特定的任务，而Agentic AI处理需要协作的复杂、多步骤任务。
* 协作：AI Agents独立运行，而Agentic AI涉及多智能体协作和信息共享。
* 学习和适应能力：AI Agents在特定领域内学习和适应，而Agentic AI在更广泛的范围和环境中学习和适应。

### agent memory

[xhs1](https://www.xiaohongshu.com/explore/68e90ac90000000007039cb3?app_platform=ios\&app_version=9.3.2\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBXwEkYmO4oy_8n6sVsd5Co6N0ULnvl_pmqbfGDXi3XGc=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1760269969\&share_id=2089ba404e074d68a4c0d758f10d3382)

[xhs2](https://www.xiaohongshu.com/explore/68e6710500000000030135b8?app_platform=ios\&app_version=9.3.2\&share_from_user_hidden=true\&xsec_source=app_share\&type=normal\&xsec_token=CBEA5bPsV063NH-ZLUjnJW70iFxIzGlOxiPyQ6hfj-YDQ=\&author_share=1\&xhsshare=WeixinSession\&shareRedId=ODY2NUg4NE82NzUyOTgwNjY0OTc1STdO\&apptime=1760270342\&share_id=35e4062f470f4c3fbb54b35890a683ab)

### 自我进化系列：AlphaEvolve

[LSTM之父22年前构想将成真？一周内AI「自我进化」论文集中发布，新趋势涌现？](https://mp.weixin.qq.com/s/0PPw4t2YCwu-7zrxpjglcA)

[打破56年数学铁律！谷歌AlphaEvolve自我进化实现算法效率狂飙，堪比AlphaGo“神之一手”](https://mp.weixin.qq.com/s/1bDOTjyuBRfR2cW8WrZNDQ)

[AlphaEvolve: A coding agent for scientific and algorithmic discovery](https://storage.googleapis.com/deepmind-media/DeepMind.com/Blog/alphaevolve-a-gemini-powered-coding-agent-for-designing-advanced-algorithms/AlphaEvolve.pdf)

### 自我进化系列：Darwin Gödel Machine

[Darwin Gödel Machine: Open-Ended Evolution of Self-Improving Agents](https://arxiv.org/a/2505.22954)

哥德尔机：Jürgen Schmidhuber数十年前提出的构想，让AI通过重写自身代码（包括负责学习的代码）来实现自我改进。当它在数学上证明存在更优策略时，它会通过递归地重写自身代码来优化问题解决方案，因此成为元学习（即「学会学习」）领域的核心概念。虽然理论上的哥德尔机能确保可证明的良性自我修改，但其实现依赖于一个不切实际的假设：AI必须能**在数学上证明代码修改会带来净效益才会实施变更**。

DGM利用达尔文进化等开放式算法的原理，逐步构建起一个**不断扩增的智能体库**。该系统通过交替执行自我修改与下游任务评估的方式，**持续创建新智能体**并对其进行评分。

### 自我进化系列：SRT

[Can Large Reasoning Models Self-Train?](https://arxiv.org/a/2505.21444)

<https://github.com/tajwarfahim/srt>

自我奖励训练（Self-Rewarded Training，SRT）。该方法在强化学习训练期间，通过模型生成的多个解决方案之间的一致性来评估正确性，从而在没有标注数据的情况下提供自监督信号。

### 自我进化系列：MM-UPT

[Unsupervised Post-Training for Multi-Modal LLM Reasoning via GRPO](https://arxiv.org/a/2505.22453)

<https://github.com/waltonfuture/MM-UPT>

在完全无监督场景下，通过强化学习框架 GRPO 实现多模态大模型的持续自我改进。无需任何外部监督信号或真实答案，使得模型可以基于自身的「共识」行为进行强化学习，从而实现持续的性能提升。

* 强化学习中的GRPO提供了稳定高效的在线策略优化能力；
* 多数投票可以在无标签数据上为模型输出生成伪标签，驱动自我优化。

流程：

* 给定一张图片和一个问题，模型生成多个候选回答；
* 使用多数投票选出出现频率最高的回答，作为当前输入的「伪标签」；
* 使用这个「伪标签」来计算 reward，引导模型根据 GRPO 策略更新；

### 自我进化系列：SEAL

[LLM已能自我更新权重，自适应、知识整合能力大幅提升，AI醒了？](https://mp.weixin.qq.com/s/WvC7kX1_XfNO218YAa8g)

[Self-Adapting Language Models](https://arxiv.org/pdf/2506.10943)

<https://github.com/Continual-Intelligence/SEAL>

一个包含两个嵌套循环的算法：

* 外部RL循环：生成候选的自编辑(self edit, SE)
* 内部更新循环：使用生成的自编辑通过梯度下降更新模型

### ReasoningBank

[「微调已死」再添筹码，谷歌扩展AI自我进化范式，成功经验与失败教训双向学习](https://mp.weixin.qq.com/s/EFFtMwU5asva_IzY2sS79A)

[ReasoningBank: Scaling Agent Self-Evolving with Reasoning Memory](https://arxiv.org/pdf/2509.25140)

用于智能体系统的创新记忆框架，从智能体自身判断的成功和失败经验中提炼并组织记忆项，无需真实标签。

### Agentic Context Engineering

[微调已死？Agentic上下文工程登场，无需微调实现模型进化](https://mp.weixin.qq.com/s/f-1h0Q-QKOWghJb7Fmrvtw)

[Agentic Context Engineering: Evolving Contexts for Self-Improving Language Models](https://www.arxiv.org/abs/2510.04618)

### Early Experience

[刚刚，Meta风雨飘摇中发了篇重量级论文，作者几乎全是华人](https://mp.weixin.qq.com/s/jjnYRgGbkWItYnj6jL6_iQ)

[Agent Learning via Early Experience](https://arxiv.org/abs/2510.08558)

### Agentic Retrieval

[长上下文窗口、Agent崛起，RAG已死？](https://mp.weixin.qq.com/s/TMhJ5lYdEo8beBnnRch3Jw)

[RAG is dead, long live agentic retrieval](https://www.llamaindex.ai/blog/rag-is-dead-long-live-agentic-retrieval)

### VISTA

[VISTA: A Test-Time Self-Improving Video Generation Agent](https://arxiv.org/pdf/2510.15831)

实际上重写了自己的提示,使每一代都比上一代更好。无需再训练,无需微调,只需纯粹的测试时自我反思。

1. 将您的想法变成完整的场景故事板
2. 生成多个视频候选
3. 举办比赛,选出最佳选手
4. 然后从视觉、听觉和语境上自我批评,然后再尝试每个循环=更清晰的视觉效果、更紧凑的故事叙述、更协调的动作。

## deep research

### local-deep-research

[本地也能运行Deep Research！支持arXiv平台，兼容PDF、Markdown等](https://mp.weixin.qq.com/s/U5lXj0lhMR6x_Wy3GHpNfQ)

<https://github.com/LearningCircuit/local-deep-research>

### CycleResearcher

[ICLR 2025 | 真正「Deep」的「Research」，通过强化学习实现可自主进化的科研智能体来了！](https://mp.weixin.qq.com/s/-n3bo-mNklCIVFZV6splmw)

[CycleResearcher: Improving Automated Research via Automated Review](https://openreview.net/forum?id=bjcsVLoHYs)

<https://ai-researcher.net/>

<https://github.com/zhu-minjun/Researcher>

### Anthropic的research

[Anthropic：我们如何构建多智能体研究系统](https://mp.weixin.qq.com/s/g6M2KXTpYM8-HTcRnzypNA)

<https://www.anthropic.com/engineering/built-multi-agent-research-system>

### Kimi-Researcher

[月之暗面「调教」出最强Agent，在「人类最后一场考试」拿下最新 SOTA](https://mp.weixin.qq.com/s/1ektvvMVp_9z2VGgaK1_bw)

<https://moonshotai.github.io/Kimi-Researcher/>

传统agent开发存在如下问题：

* 基于工作流的系统(例如anthropic的[link](https://github.com/daiwk/collections/tree/master/posts/\(https:/www.anthropic.com/engineering/built-multi-agent-research-system\)/README.md))：流程固定，依赖于特定的llm版本，可扩展性和灵活性有限。
* 基于SFT的模仿学习(Imitation Learning)：数据标注方面很难，尤其是在具有长时间跨度、动态环境中的智能体任务中。此外，SFT数据集通常与特定工具版本强耦合，即工具变了，泛化能力会下降。

端到端的智能体强化学习（agentic RL）训练的是能够**整体性解决问题的单一模型**：给定一个query，智能体会探索大量可能的策略，通过获得正确解答的奖励进行学习，并从整个决策轨迹中总结经验。挑战如下：

* 动态环境：即使面对相同的query，环境结果也可能随时间发生变化，智能体必须具备适应不断变化条件的能力。
* 长程任务：Kimi–Researcher每条轨迹可执行超过70次搜索查询，使用的上下文窗口长度甚至达数十万token。
* 数据稀缺：高质量的用于智能体问答的强化学习数据集非常稀缺，通过自动合成训练数据的方式解决这一问题。
* 执行效率：多轮推理和频繁工具调用可能导致训练效率低下，GPU资源利用不足，需要优化rollout效率。

Kimi–Researcher是一个自主的智能体与思维模型，旨在通过多步规划、推理和工具使用来解决复杂问题。它利用了三个主要工具：

* 并行的实时**内部搜索**工具
* 用于**交互式网页任务**的基于文本的**浏览器**工具
* 用于自动执行代码的**编码**工具

#### 训练数据

* 将工具依赖性融入任务设计中：将任务提示刻意构造为**必须调用特定工具**才能解决。让智能体学会**何时**调用工具，以及在复杂的现实环境中如何**高效协同使用多种工具**。
* 整合了一批以推理为核心的任务：强化智能体的核心认知能力，以及其将推理与工具使用结合的能力：
  * 数学与代码推理：逻辑推理、算法问题求解和序列计算。需要使用思维链+工具集一起解决。
  * 高难度搜索：在上下文限制下进行多轮搜索、信息整合与推理，最终得出有效答案。

因此，做了如下几点：

* 开发了一条全自动数据生成与验证流程，可在极少人工干预下生成大量问答对，同时保证数据的多样性与准确性。
* 设计了GT（ground truth）提取方法，以尽可能确保每个问题都配有可靠的答案。
* 还设计了严格的过滤流程，以剔除歧义、不严谨或无效的问答对。包括引入Pass\@N检查机制，确保**仅保留具有挑战性的问题**。

#### RL训练

用REINFORCE方法，

* on-policy：训练时关闭了LLM的engine机制（例如强制toolcall格式等），保证每个序列都是llm自己根据其概率分布产出的
* 负采样控制：负样本会降低token概率，从而在训练rl的时候有entropy崩塌的风险。因此策略性地丢弃部分负样本，使模型能够在更长的训练周期中持续提升表现。

训练时用的是outcome rewards：

* format reward：惩罚非法工具调用或者上下文超过最大限制的情况
* correctness reward：比较模型答案和ground truth

还引入了gamma-decay，即第$$i$$个step的reward是$$r\times \gamma ^{T-i}$$，其中$$T$$是step数，$$\gamma\in(0,1)$$。可以鼓励模型做出更高效更短的探索。即当两个序列都会有相同的最终reward时，更短的那个在开始时就能拿到更高reward。

#### context management

如果不做memory management，对于那种很长的research来讲，很容易在10轮内就超过最大长度限制。设计了一个context-management mechanism，让模型能够保留重要的信息，丢掉没什么用的文档，从而可以扩大到50轮。

#### 大规模agent RL架构

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-66001d527c7c77b7a4ec7844043b192e2fc5e6f3%2Fkimi-researcher-agent-rl-infra.png?alt=media)

* Fully asynchronous rollout: 用可扩展的Gym-like接口实现了全异步rollout，server-based架构可以高效地并行编排actor rollouts、环境互动、reward计算
* Turn-level partial rollout: 在agentic rl里，大部分task很快就结束了，但有少量任务需要非常多轮。设计的Turn-level partial rollout，即超过时间预算的task会扔到replay buffer里去，在后续的迭代中，省下的轮数会使用新的模型参数。
* Robust sandbox environment: 通用的沙盒架构消除了容器间的额外开销，同时保持隔离性。用基于k8s的混合云架构的Zero-downtime scheduling实现动态资源分配，通过MCP的agent tool通信维护了具有重连功能的有状态会话，还支持多分片部署和比较好的容错机制。

#### 智能体能力涌现

出现了一些值得关注的能力涌现

* 面对多来源信息冲突时，能通过迭代假设修正与自我纠错机制(hypothesis refinement and self-correction)来消除矛盾，逐步推导出一致且合理的结论。
* 展现出谨慎与严谨的行为模式：即便面对看似简单的问题，也会主动进行额外搜索，并交叉验证信息后再作答。

### Tongyi-DeepResearch

[通义DeepResearch震撼发布！性能比肩OpenAI，模型、框架、方案完全开源](https://mp.weixin.qq.com/s/XLpRvvpG7XPX1GmpwG3BMQ)

<https://github.com/Alibaba-NLP/DeepResearch>

<https://huggingface.co/Alibaba-NLP/Tongyi-DeepResearch-30B-A3B>

#### 数据策略

* 增量预训练(CPT, continual pre-training)数据：
  * 数据重组和问题构建：基于广泛收集和增量更新的文档、公开的爬虫数据、知识图谱、后训练产生的轨迹数据和工具调用返回结果（如搜索结果和网页访问记录）等，构建了一个**以实体为锚定的开放世界知识记忆**。然后，基于采样的实体和相关知识构造多风格的（问题，答案）对，以尽可能涵盖智能体所面临的真实场景。
  * 动作合成：基于多风格问题和历史轨迹数据，构建了三种类型的动作数据：**规划**、**推理**和**决策**。能够在离线环境下大规模、全面地探索潜在的reasoning-action空间，从而消除了对额外商业工具API调用的需求。特别地，对于决策动作合成，该研究将轨迹重构为多步骤决策过程，以增强模型的决策能力。

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3801d67c304fac5ffedf1ebfc3a15bf8694a27c9%2Ftongyi-deepresearch-action-synthesis.png?alt=media)

* 后训练数据：
  * 全自动的合成数据生成方案：从早期从点击流进行逆向工程的QA pair对的WebWalker([WebWalker: Benchmarking LLMs in Web Traversal](https://arxiv.org/abs/2501.07572))，到更系统的基于图的合成的WebSailor([WebSailor: Navigating Super-human Reasoning for Web Agent](https://arxiv.org/abs/2507.02592)和[WebSailor-V2: Bridging the Chasm to Proprietary Agents via Synthetic Data and Scalable Reinforcement Learning](https://arxiv.org/abs/2509.13305))，再到形式化的任务建模的WebShaper([WebShaper: Agentically Data Synthesizing via Information-Seeking Formalization](https://arxiv.org/abs/2507.15061))，旨在全自动化生成超越人工标注质量的数据集，以挑战模型的能力极限。
  * 生成能应对复杂问题的问答数据：
    * 通过知识图谱随机游走和表格数据融合等方式，从真实网站数据中提取信息，保证数据结构的真实性。
    * 再通过策略性地模糊或隐藏问题中的信息来增加难度。将问答难度建模为一系列可控的 “原子操作”，这样就可以系统性地提升问题的复杂度。
  * 减少推理捷径：基于集合论对信息搜索问题进行了形式化建模，开发了能够以可控方式扩展问题的智能体，并最大限度地减少了推理捷径和结构冗余，进一步提升了问答系统的质量。
  * 自动化数据引擎：

#### 推理模式

#### 训练

### Universal Deep Research

[英伟达推出通用深度研究系统，可接入任何LLM，支持个人定制](https://mp.weixin.qq.com/s/i6gn7u8ffZNgLeZ0FTUG0g)

[Universal Deep Research: Bring Your Own Model and Strategy](https://arxiv.org/pdf/2509.00244)

<https://github.com/NVlabs/UniversalDeepResearch>

传统的deep research tool

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-30614608cea2bdf82191bd14267155d79e5b912e%2Fdeep-research-tool.png?alt=media)

Universal Deep Research，输入有strategy和prompt

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-c09dbe2a9ffa23f4d7492d17309a8ff921c7edc9%2Fudr.png?alt=media)

### HyperAgents

[HyperAgents](https://arxiv.org/pdf/2603.19461)

meta的开源库，<https://github.com/facebookresearch/Hyperagents>

拆成

* task agent：解决目标任务
* meta agent：修改自己和task agent

## context engineering

### 概述

[季逸超亲述Manus构建之谜，一文读懂AI智能体的上下文工程](https://mp.weixin.qq.com/s/vbf9_4xorAGTu5nuExk9jA?scene=1)

[囊括1400+论文！大语言模型上下文工程全面综述：框架、系统与挑战](https://mp.weixin.qq.com/s/625oe8K3gZrbtMrZgbHe7w)

[A Survey of Context Engineering for Large Language Models](https://arxiv.org/a/2507.13334)

## VeRL

<https://github.com/verl-project/verl>

[HybridFlow: A Flexible and Efficient RLHF Framework](https://arxiv.org/pdf/2409.19256v2)

工业界RL的比较通用的代码库，像OpenRLHF、trl那些可以拿来学习基本原理和跑小模型，大的模型一般还是VeRL

<https://verl.readthedocs.io/en/latest/start/agentic_rl.html>

## Slime

[揭秘GLM-5技术底牌：「异步强化学习框架Slime」成终极杀招](https://mp.weixin.qq.com/s/Qmg6iOYo2BXB9qFf4TOpsg?scene=1)

## Agentic RL

[The Landscape of Agentic Reinforcement Learning for LLMs: A Survey](https://arxiv.org/pdf/2509.02547)

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-81e390384b7b9542b9561c3b0933cb53e7e50159%2Fagentic-rl-loop.png?alt=media)

## Harness engineering

Vibe Coding就是聊天式的，只是抛出一个很粗略的想法，ai写出来的往往是个demo，看起来功能都有，但细节会有很多问题

spec coding：是openai的人员在[演讲](https://www.youtube.com/watch?v=8rABwKRsec4)里提出的，不是和大模型直接聊天，而是写markdown文档。分类方式可以参考[Understanding Spec-Driven-Development: Kiro, spec-kit, and Tessl](https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html)

* Spec-as-source：只维护spec，迭代需求时只改spec，不接触代码
* Spec-anchored：同时维护Spec和代码，spec保留在代码库中，会维护和迭代
* Spec-first：只维护代码，spec仅用于单次代码生成，不放进代码库

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-679a00d9c75756873d9ead07945d028d01b907ca%2Fspec-coding.png?alt=media)

harness engineering：[Harness engineering: leveraging Codex in an agent-first world](https://openai.com/index/harness-engineering/)，[中文版](https://openai.com/zh-Hans-CN/index/harness-engineering/)，openai的项目，所有代码（前已超过100万行）都用codex编写，参与项目的的工程师不允许写一行代码，只能用测试用例、lint等方式对AI进行约束，最终实现效率大幅提升，AI能够最长连续执行6个小时的长程任务。

<https://github.com/openai/symphony>

## Loop Engineering

[黄仁勋：Prompt正在过时，Loop才是新范式](https://mp.weixin.qq.com/s/A5OXrljqsxPZDPlQP3FAaA)

## RSI-harness

<https://lilianweng.github.io/posts/2026-07-04-harness/>

## openclaw项目管理

<https://github.com/daiwk/agent-teamwork>

```shell
openclaw agents add super-pm --workspace /xxx/xxxx/agent-teamwork

openclaw agents bind --agent super-pm --bind feishu
```

然后人肉去json里配一下accountId

用npx vercel可以部署到公网上

## pi

<https://pi.dev/docs/latest/providers>

```shell
export MINIMAX_CN_API_KEY="你的国内 Token Plan Key"

pi --provider minimax-cn --model MiniMax-M2.7
```


# 6.llm\_math

## 线性代数(linear algebra)

[MIT Gilbert Strang系列视频](https://www.bilibili.com/video/BV1rH4y1N7BW/?spm_id_from=333.788.videopod.episodes\&vd_source=1ae2f94a63a5ab75ddbbb426fa107515\&p=3)

### lecture1 方程组的几何解释

如下的二元一次方程组，可以写成矩阵的形式，$$A$$是系数矩阵，$$\mathbf{x}$$是未知数列向量，$$b$$是结果向量

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-df5f5e49933d2d3af52b2cc699b4e90afe501ff3%2Flinear-equations-matrix.png?alt=media)

行图像：就是2条直线求交点

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7819872479917cc13a0c05629f22b47f011f9bc1%2Frowpicture.png?alt=media)

列图像：求解两个列向量的线性组合

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4d23f49c0bb60dcc801cb6346341ed068aee4c4e%2Fcolumnpicture1.png?alt=media)

col1和col2的线性组合，要得到$$\[0,3]$$这个向量。我们已经知道答案是$$\[1,2]$$，所以从col1的尾部，画一个2倍col长度的向量，得到一个点，从原点连过来刚好就是$$\[0,3]$$这个向量

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1c0b5f8c7a8c393e8e60adc09a75acae589de0ba%2Fcolumnpicture2.png?alt=media)

注意，向量平移，结果还是它本身，即上面从col1尾部画向量那一步

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-24615edfedb64ae190fe67d49c67c4d10844261c%2Fvec-move.png?alt=media)

如果是三元方程组，从行图像的角度来讲，那就是3个平面，前2个相交是一条直线，和第3个再相交就是一个点

从列图像来讲，就更简单一点了，还是3个向量的线性组合，只不过换成了3维空间

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-43d30bbd71dd1a5964a4773567f768d83cf0cc24%2Fcolumnpicture-3d.png?alt=media)

对于任意一个$$b$$，是否都能求解$$Ax=b$$？(如果有，消元法就能求解)

这个问题就转化成，列向量的线性组合是否可以覆盖整个3维空间？

答案：对于可逆矩阵（非奇异矩阵），可以；如果3个列向量在同一平面上，不行，这种情况叫奇异矩阵(不可逆)

矩阵乘向量的列视角：$$Ax$$是$$A$$各列的线性组合

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-675ca8a497e71a9e9a8da65008d431e8caedf2df%2Fmat-mul-vec-colview.png?alt=media)

### lecture2 矩阵消元

先选中第1行第1列为主元（pivot），其所在的行不变，乘以一个消元系数（图中的3），然后被第2行减掉（即$$R\_2 \leftarrow R\_2-3 R\_1$$），让第2行的pivot对应的元素变成0；然后对第3行也这么做

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2599eb7f6d92c140b75435845dd745585bd58d9c%2Felimination1.png?alt=media)

然后第2行第2列为主元，消掉第3行

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-d94e5ac00f7247fe972ed869f9583bf4e71bc05e%2Felimination2.png?alt=media)

这样矩阵消元最后得到的就是一个**上三角矩阵**（左下角全0，右上角非0），这是计算机中最常见的运算，人们在想各种加速方法。

另外矩阵的行列式正好等于主元的积

注意，主元不能是0，这个矩阵很好，刚好主元都没有0。特殊情况：

1. 第1个主元是0，不代表不行，可以交换矩阵的行再继续
2. 但如果下面的元素也全是0，那就没法交换了，消元就失效了

接下来把b拼进去（增广矩阵），然后一起消元，就可以得到下图

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7007f581171dfb35123134732a2e3728c1c772ea%2Felimination3.png?alt=media)

然后还原成方程组，发现第3行只有z，那么从下往上依次求解z、y、x就行了（代入，substitution）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-07d6228a7fd6f4d3debe319cd930d85a281bbcfa%2Felimination4.png?alt=media)

向量乘以矩阵的行视角：向量的每个元素对矩阵每一行的线性组合

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1b9a0ddb289abef774550db5564a1c5687adb33f%2Fvec-mul-matrix-row-view.png?alt=media)

接下来从矩阵的视角来理解消元，目标是找到一个矩阵，使得原矩阵第2行变成它减掉3倍的第1行，然后第1和第3行不变：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-7293fb5b766e7717b28a146a7832c07c703729f0%2Felimination-matrix-view.png?alt=media)

第1行是1 0 0，因为只要右边的第一行，别的不要；第3行是0 0 1，因为只要第3行；第2行是-3 1 0，因为第一行的-3倍，加上行2行原始值；这个矩阵叫$$E\_{21}$$，因为是要把第2行第1列变成0

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-48c071f23955cf3ea8753630092869c08d007ffc%2Felimination-matrix-view2.png?alt=media)

同理，第3行减掉2倍的第2行，就得到下图

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4a03f750c44d1bb2f1e4f9d23ae764729ef462a2%2Felimination-matrix-view3.png?alt=media)

最终就有$$E\_{32}(E\_{21}A)=U$$，但如何一次性从$$A$$到$$U$$？结合律(associative law)：$$(E\_{32}E\_{21})A=U$$

置换矩阵（permutation matrix）：交换两行的位置，可以看到就是个类似单位矩阵的东西

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-e752d389d53877b14994c970aaf529c07e1ee5b9%2Fpermutation-rows.png?alt=media)

但如果要交换列呢？P矩阵要放右边：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-5e892de5be7284abcab7ca17cea335f8fe76fb67%2Fpermutation-cols.png?alt=media)

倒回来看那个$$E\_{21}A=U$$，如果我想变回去，即把U变回A，那就是$$?E\_{21}A=A$$，即$$?E\_{21}=I$$，其实就是求逆。因为我们$$E\_{21}$$是第2行减去第1行的3倍，那其实就是逆向操作，即第2行不变，加回第1行的3倍就行了，不要第3行

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-870a3dd1b003db79cebb3128ec8377ef77d5ebef%2Finverse-intro.png?alt=media)

### lecture3 矩阵乘法和逆

一些有趣的性质：$$AB=C$$

* 列的角度：

矩阵$$B$$有好几列，取其中一列出来，这列的每个元素作为权重，去和$$A$$里每一列相乘，再相加，就得到$$C$$的这一列（就是**对A中所有列的线性组合**）

$$
A
\begin{bmatrix}
x\y\z
\end{bmatrix}=
x(A\text{第1列})
+y(A\text{第2列})
+z(A\text{第3列})
$$

$$
(AB)*{:,j}=\sum *k b*{kj}A*{:,k}
$$

* 行的角度：

矩阵$$A$$有好几行，取其中一行出来，这行的每个元素作为权重，去和$$B$$里每一行相乘，再相加，就得到$$C$$的这一行（就是**对B中所有行的线性组合**）

$$
\begin{bmatrix}
x\&y\&z
\end{bmatrix}
B=
x(B\text{第1行})
+y(B\text{第2行})
+z(B\text{第3行})
$$

$$
(AB)*{i,:}=\sum *k a*{ik} B*{k,:}
$$

* 外积的角度

$$A$$的第$$k$$列乘以$$B$$的第$$k$$行，得到一个外积矩阵，再把所有外积矩阵加起来。

$$
AB=\sum *k A*{:,k} B\_{k,:}
$$

* 分块乘法

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-bd7e39a2d02c3be56e3197e7c1123dddbabf4417%2Fblock-mul.png?alt=media)

方阵的左逆=右逆，非方阵没这个性质，因为shape不一样 可逆、非奇异

行列式=0的矩阵(奇异矩阵)没有逆

$$
A=\begin{bmatrix}
1&2\\
3&6\\
\end{bmatrix}
$$

这个矩阵没有逆

解释1：因为这两列是平行的，不论如何线性组合都是平行于$$\begin{bmatrix} 1\ 3\ \end{bmatrix}$$那条线的，没法和$$\begin{bmatrix} 1\ 0\ \end{bmatrix}$$有交点

解释2：如果能够找到一个非0向量$$x$$，使得$$Ax=0$$，那么$$A$$没有逆。证明：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-1e108955e8f723c92e6383557c22745409032d87%2Fproof-no-inverse.png?alt=media)

\==>不可逆矩阵、奇异矩阵，其列能通过线性组合得到0

如何求逆？高斯-若尔当（Gauss-Jordan）消元法：同时求解2个方程组

增广矩阵的思想，把单位矩阵增广进去，然后进行消元，把左边变成单位矩阵，而右边就变成了逆矩阵

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-43836784eff4b35d2c8fbd95a712beee0dc739f3%2Fgauss-jordan.png?alt=media)

为什么？如上消了2次，总的消元矩阵假设是$$E$$

$$E\[A I] = \[I E]$$, 而$$EA=I$$，说明$$E=A^{-1}$$，所以最右边那个矩阵就是$$A^{-1}$$

### lecture4 矩阵A的LU分解

如果$$A$$和$$B$$的逆均已知，那么$$AB$$的逆是多少？是$$B^{-1}A^{-1}$$，因为结合律$$(AB)(B^{-1}A^{-1})=A(BB^{-1})A^{-1}=I$$

如何求$$(A^T)^{-1}$$？因为$$AA^{-1}=I$$，两边同时转置，就有$$(A^{-1})^TA^T=I$$，所以$$(A^T)^{-1}$$就是$$(A^{-1})^T$$

\==>转置和逆这两种运算，对于同一个矩阵，顺序可以互换，即$$(A^T)^{-1}=(A^{-1})^T$$

考虑如下情况，之前学的消元，把第2行第1列消成0：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-4c7223f7bb12f820593346b8d0574440435900e0%2Flu1.png?alt=media)

然后左右各乘一个$$E\_{21}$$的逆（第一行不变，第二行把-4变回4），这样就有如下的图的第一行，可以发现第一个是下三角矩阵（lower, L），第二个是上三角矩阵（upper, U）

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-504df98947abdff03e6ee90cc7642510fed2ddcf%2Flu2.png?alt=media)

而第二行是对U矩阵进行变换，想加一个对角矩阵进来，那就可以算出第3个矩阵。第1个还是下三角，第2个是对角矩阵，第3个还是上三角

接下来看3x3的矩阵，假设没有行交换，需要进行3步：$$E\_{32}E\_{31}E\_{21}A=U$$，所以$$A=E^{-1}*{21}E^{-1}*{31}E^{-1}*{32}U=LU$$，这里的$$L$$就是$$E*{32}E\_{31}E\_{21}$$这个乘积的逆

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-3b20dd6bca7ebd6cca2fd353f0c85717ae124d23%2Flu3.png?alt=media)

可以发现，对于$$A=LU$$，如果没有行交换，那么$$L$$是下三角，对角线是1，下面的元素是消元所用的乘数，且$$U$$是上三角，主对角线是主元即下图

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-ca12ba8c591ce5e454fc99cf334567dbb15f9ab6%2Flu%E6%80%A7%E8%B4%A8.png?alt=media)

对于一个$$n \times n$$的矩阵，消元需要进行多少次操作？假设n=100

第一次变换是把第1行第1列(主元)下面的那一列全变成0，即第一行确定了，第一列确定了，剩下的是一个$$99\times 99$$的矩阵。这一次变换是对第i行乘一个数，然后被第2行减，假设乘+减算一次操作，这里对99行做了这个操作，所以就是$$99\times 100$$，大概是$$100^2$$的量级

第二次变换就是$$99^2$$的量级，以此类推，总共就是$$n^2+(n-1)^2+...+1^2$$，由于这里是递减的，大概是$$1/3n^3$$的量级。为啥是$$1/3$$？要用微积分，因为这个其实就是对$$y=x^2$$在x=1到n的曲线下方面积，可以拆成n个小长方形面积求和，即对$$x^2$$求积分就是$$1/3x^3$$。因为微积分就是对连续的情况下的求和，而线性代数是离散的

以上是对A的操作次数，如果对增广矩阵中的b(右侧向量)呢？因为b就一列，所以这里是$$n^2$$次

### lecture5 转置、置换和向量空间

接下来讨论可以进行行交换的场景，即主元位置存在0的情况，$$A=LU$$就变成了$$PA=LU$$，即对于任意可逆矩阵$$A$$，均有$$PA=LU$$

置换（permutation）：从单位矩阵出发，对其**行进行交换**，可以得到$$A\_n^n=n!$$个置换，它们的逆就在这些置换矩阵之中(其实就是它的转置)，它们的转置也在这些置换矩阵之中，它们的两两的乘积也在置换矩阵之中，这就构成了一个矩阵乘法运算下的群。

性质：$$P^{-1}=P^T$$，然后就有$$P^TP=I$$

转置（transpose）：行列互换，即$$(A)^T\_{ij}=A\_{ji}$$

对称矩阵（symmetric）：转置后还是本身，即$$A^T=A$$

定理：对于任意一个矩阵$$R$$，$$R^TR$$是一个对称矩阵。

因为转置后的第i行=现在的第i列，转置后的第j行=现在的第j列，结果矩阵的第i行第j列=转置后的第i行和现在的第j列的内积，结果矩阵的第j行第i列=转置后的第j行和现在的第i列的内积=现在的第j列和转置后的第i行的内积，所以这两个相等，所以是对称矩阵。

证明：假设$$A=R^TR$$，$$(R^TR)^T=R^TR$$，即$$A^T=A$$

向量空间：$$R^n$$是所有n维实数列向量

举例：$$R^2$$是所有2维实数向量，即一个x-y plane(平面)，注意，不能没有原点，因为需要0乘以任何向量都=0向量，两个相反的向量加起来要是0。

性质：

1. 任意2个向量之和还在空间中
2. 数乘某向量仍在空间中
3. 可以从前2个推导出来：向量的线性组合仍在空间中

子空间(subspace)：空间里的空间

例如，$$R^2$$中的任意一条直线并不是子空间，它的子空间包括：

1. $$R^2$$自己
2. 穿过原点的任意一条直线，通常叫$$L$$
3. 一个点，即0向量，原点（origin），通常叫$$Z$$

以此类推，$$R^3$$的子空间有$$R^3$$、穿过原点的平面$$P$$，穿过原点的直线、原点

矩阵的子空间：对于一个矩阵$$A$$来讲，其任意2个列向量的线性组合都要在这个空间里，称为列空间（$$C(A)$$）。例如下面这个3行2列的例子，其子空间就是经过原点的那个平面。当然，如果这2个向量刚好共线，那得到的就是一条直线

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-0b7a2ddc38c569677973bf2142d5ef9af197c48b%2Fcolspace.png?alt=media)

### lecture6 列空间和零空间

给定2个子空间$$P$$（平面）和$$L$$（直线），它们的并集也是子空间吗？并不是，因为如果从$$P$$和$$L$$中各取一个向量，他们的和并不在$$P$$或者$$L$$中，即加法不封闭。

如果是交集呢？是，因为交点是原点

如果是更通用的情况，两个子空间$$S$$和$$T$$，$$S\cap T$$还是子空间吗？

是，因为假设从$$S\cap T$$中取出2个向量$$v$$和$$w$$，所以这2个向量都在$$S$$中，而$$S$$是子空间，所以$$v+w$$也在$$S$$中，同理，这两个向量也在$$T$$中，所以和也在$$T$$中，也就是在$$S\cap T$$ 中。

矩阵的列空间：对于一个矩阵$$A$$来讲，其列空间（$$C(A)$$）由所有列的线性组合构成。

从解方程的角度来看，$$Ax=b$$对于任意的$$b$$，是否都有解？例如：

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-2dde59bc420c836e4c9b83861a02d84286293016%2Fcolspace-axeqb.png?alt=media)

因为3个列向量的线性组合无法充满整个四维空间，所以会有非常多的$$b$$，它们并不是这3个列向量的线性组合。这里有4个方程，却只有3个未知数，大多数时候是无解的。简单理解就是，假设前3个方程确定了唯一解，第4个方程可能还是这个解，也可能破坏了这个解导致无解。

那么，什么样的$$b$$，可以使得这样的方程组有解呢？当且仅当(exactly when) $$b$$属于$$A$$的列空间$$C(A)$$

值得注意的是，上面这个例子里第3列=前两列的和，所以这3列并不是线性无关的。所以第3列其实是没有贡献的，可以直接删了，并不影响这个矩阵的列空间。前2列称为主列（pivot columns）。当然，也可以扔掉第1列

零空间（null space）：使得$$Ax=0$$的所有解构成的空间

对于$$m\times n$$的矩阵$$A$$，其列空间是$$C(A) \in R^m$$，而零空间是$$N(A) \in R^n$$

为何这个零空间是个空间？需要证明一个解$$x$$，以及另一个解$$x^*$$，他们的和$$x+x^*$$仍然在空间里

### lecture7 求解Ax=0：主变量，特解

### lecture8 可解性和解的结构

### lecture9 线性相关性，基，维数

### lecture10 4个基本子空间

### lecture11 矩阵空间，秩1矩阵，小世界图

## LLM+math

### mathscale

[【LLM-数学】MathScale 用于数学推理的指令调优扩展方法](https://mp.weixin.qq.com/s/tQUIGdViMZTb_9NNh3b3RQ)

[MathScale: Scaling Instruction Tuning for Mathematical Reasoning](https://arxiv.org/pdf/2403.02884.pdf)

### AlphaGeometry

[奥数能力金牌级：DeepMind几何推理模型登上Nature，代码开源，菲尔兹奖得主点赞](https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==\&mid=2650904746\&idx=1\&sn=d39a3d92078cecbd29bd0fc82560d1da\&chksm=84e45cd4b393d5c24747f163fa0338761690447904a1a654aacf2344d7a16d36dfa2ac3ccdb0\&scene=21#wechat_redirect)提出了AlphaGeometry

### AlphaProof & AlphaGeometry 2

[谷歌AI拿下IMO奥数银牌，数学推理模型AlphaProof面世，强化学习 is so back](https://mp.weixin.qq.com/s/LNzbyf0w412BIz71sROyzw)提出AlphaProof和AlphaGeometry 2

### WE-Math基准

[真相了！大模型解数学题和人类真不一样：死记硬背、知识欠缺明显，GPT-4o表现最佳](https://mp.weixin.qq.com/s/uU1lZV0Ymj31cmZryhffyQ)

[WE-MATH: Does Your Large Multimodal Model Achieve Human-like Mathematical Reasoning?](https://arxiv.org/pdf/2407.01284)

<https://github.com/We-Math/We-Math>

<https://huggingface.co/datasets/We-Math/We-Math>

### case-based or rule-based

[ICML 2024｜Transformer究竟如何推理？基于样例还是基于规则](https://mp.weixin.qq.com/s/aVRiGW3xU_LpvxZzjDpwzQ)

[Case-Based or Rule-Based: How Do Transformers Do the Math?](https://arxiv.org/pdf/2402.17709)

<https://github.com/GraphPKU/Case_or_Rule>

## AlphaProof(nature)

[Olympiad-level formal mathematical reasoning with reinforcement learning](https://www.nature.com/articles/s41586-025-09833-y)

[代码](https://github.com/daiwk/collections/blob/master/assets/alphaproof_pseudocode.py)，从<https://www.nature.com/articles/s41586-025-09833-y>这里的Supplementary Data下载

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-eca2580e5245b84b5327040306d561a5acbe98f3%2Falphaproof1.png?alt=media)

* 状态：Lean prover的逻辑状态，即Lean tactic state，表示已经建立的假设，和剩下的目标
* 环境：给定一个状态，和agent采取的动作，输出下一个状态
* 动作：一个证明的中间步骤，是一段文本，例如“a=2,b=2a,==>b=4”
* episode结束条件：证明完成or预算花完（例如超时）
* reward：每个tactic的reward都是-1，因为要鼓励用更少的步骤完成证明，即到达终点的分支路径最短

prover agent是把dnn和alphazero的搜索算法相结合：

* proof network：是一个3B的encoder-decoder transformer，输入Lean tactic state，输出2个东西：
  * policy：下一步要尝试的N个动作
  * value：当前**状态**的价值，即从此刻到episode结束时的每步reward之和
* tree search：和alphazero类似，使用AND-OR tree structure将证明拆成多个独立的子目标(类似[Hypertree proof search for neural theorem proving](https://arxiv.org/pdf/2205.11491))，采样使用的progressive sampling

![](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-cadb95a82883b687c76c5f542abd0b84b01f85b1%2Falphaproof2.png?alt=media)

* 预训练：proof network在大概300 billion tokens的代码和数学语料通过next token prediction预训练
* SFT：在300k的人类用matlab标注的证明语料(state-tactic pairs)上sft，
* main RL：
  * 用gemini的LLM搞了一个自动形式化（formalization）的系统，将大概1M的非形式化的问题形式化成了80M的问题
  * proof network+tree search和Lean环境交互，生成形式化的证明和反证（disproof），然后用Alphazero的方式基于得到的经验去RL训练
* inference：
  * 首先参考Alphazero，增加tree search的预算，例如产生更多的搜索路径
  * 如果增加了搜索路径还不够，那就用Test-time RL（TTRL）：
    * 给定一个问题，variant generator生成其变种（例如简化或者泛化）
    * 基于这些变种去进行RL训练


# 8.int-ml

本文参考自李航的《统计学习方法》、周志华的《机器学习》、Hulu的《百面机器学习》等。

## 概述

### 统计学习三要素

#### 模型

监督学习中，模型是**要学习的条件概率分布或决策函数**。

**模型的假设空间**

假设空间是所有可能的条件概率分布或决策函数

**定义1**

可以定义为**决策函数的集合**：

$$
\mathcal{F}={f|Y=f(X)}
$$

* $$X$$和$$Y$$是定义在$$\mathcal{X}$$和$$\mathcal{Y}$$上的变量
* $$\mathcal{F}$$是一个参数向量决定的**函数族**：

$$
\mathcal{F}={f|Y=f\_\theta(X),\theta \in R^n}
$$

参数向量$$\theta$$取值于n维欧式空间$$R^n$$，称为**参数空间**

**定义2**

也可以定义为**条件概率的集合**：

$$
\mathcal{F}={P|P(Y|X)}
$$

* $$X$$和$$Y$$是定义在$$\mathcal{X}$$和$$\mathcal{Y}$$上的**随机变量**
* $$\mathcal{F}$$是一个参数向量决定的**条件概率分布族**：

$$
\mathcal{F}={P|P\_\theta(Y|X),\theta \in R^n}
$$

#### 策略

**损失函数与风险函数**

**损失函数（loss function）或代价函数（cost function）：** 度量预测值$$f(X)$$与真实值$$Y$$的误差程度，记为$$L(Y,f(X))$$，是个非负实值函数。损失函数越小，模型越好。

* 0-1损失函数：

$$
L(Y,f(X))=\left{\begin{matrix}
0 & Y\neq f(X) \\
1 & Y = f(X)
\end{matrix}\right.
$$

* 平方损失函数：

$$
L(Y,f(X))=(Y-f(X))^2
$$

* 绝对损失函数：

$$
L(Y,f(x))=|Y-f(X)|
$$

* 对数损失函数(logarithmic loss function)/对数似然损失函数(log-likelihood loss function)：

$$
L(Y,P(Y|X))=-logP(Y|X)
$$

**风险函数(risk function)或期望损失(expected loss)**：$$X$$和$$Y$$服从联合分布$$P(X,Y)$$，理论上模型$$f(X)$$关于**联合分布**$$P(X,Y)$$的平均意义下的损失：

$$
R\_{exp}(f)=E\_P\[L(Y,f(X))]=\int \_{\mathcal{X}\times \mathcal{Y}}L(y,f(x))P(x,y)dxdy
$$

学习的目标：选择期望风险最小的模型。但联合分布$$P(X,Y)$$是未知的，所以无法直接计算$$R\_{exp}(f)$$。所以监督学习是病态问题（ill-formed problem）：一方面需要联合分布，另一方面联合分布是未知的。

给定训练集：

$$
T={(x\_1,y\_1),...(x\_N,y\_N)}
$$

**经验风险(expirical risk)/经验损失(expirical loss)**：模型$$f(X)$$关于**训练集**的平均损失

$$
R\_{emp}(f)=\frac{1}{N}\sum ^N\_{i=1}{L(y\_i,f(x\_i))}
$$

根据**大数定律**，当样本容量$$N$$趋向无穷时，经验风险$$R\_{emp}$$趋于期望风险$$R\_{exp}(f)$$。

**经验风险最小化与结构风险最小化**

**经验风险最小化（empirical risk minimization, ERM）**：**经验风险最小**的模型就是最优模型。所以需要求解的最优化问题是：

$$
\min\_{f\in \mathcal{F}}R\_{erm}=\min\_{f\in \mathcal{F}}\frac{1}{N}L(y\_i,f(x\_i))
$$

当满足以下两个条件时，**经验风险最小化**就等价于**极大似然估计**（maximum likelihood estimation）：

* 模型是**条件概率分布**
* 损失函数是**对数损失函数**

当样本量足够大时，ERM能有很好的效果，但样本量不够多时，为了防止过拟合，需要用下面的方法。

**结构风险最小化（structual risk minimization, SRM）**：结构风险=经验风险+表示**模型复杂度**的正则化项(regularizer)或罚项(penalty term)。结构风险定义如下：

$$
R\_{srm}(f)=\frac{1}{N}\sum^N\_{i=1}L(y\_i,f(x\_i))+\lambda J(f)
$$

其中，$$J(f)$$是模型的复杂度，模型越复杂，$$J(f)$$越大。$$\lambda\ge 0$$是用于权衡经验风险和模型复杂度的系数。

当满足以下3个条件时，**结构化风险最小化**等价于）**贝叶斯估计中的最大后验概率估计**(maximum posterior probability estimation, MAP)：

* 模型是**条件概率分布**
* 损失函数是**对数损失函数**，对应后验估计中的**似然函数**
* 模型复杂度由**模型的先验概率**表示

**似然函数**和**先验概率**的**乘积**即对应**贝叶斯最大后验估计**的形式

参考[https://www.zhihu.com/question/23536142](https://www.zhihu.com/question/235361420)

所以结构风险最小化就是求解优化问题：

$$
\min\_{f\in\mathcal{F}}\frac{1}{N}\sum ^N\_{i=1}L(y\_i,f(x\_i))+\lambda J(f)
$$

#### 算法

算法指的是学习模型的具体方法，即使用什么计算方法求解最优模型。

因为统计学习问题归结为最优化问题，所以统计学习的算法就是**求解最优化问题的算法**。

* 如果有显式的解析解，此最优化问题就比较简单
* 如果没有，需要用数值计算方法求解，需要考虑如何**保证找到全局最优解，并使求解过程高效**

### 模型评估与模型选择

#### 训练误差与测试误差

假设学习到的模型是$$Y=\hat{f}(X)$$，训练误差是模型$$Y=\hat{f}(X)$$关于训练数据集的平均损失（$$N$$是样本容量）：

$$
R\_{emp}(\hat{f})=\frac{1}{N}\sum ^N\_{i=1}L(y\_i,\hat{f}(x\_i))
$$

测试误差是模型$$Y=\hat{f}(X)$$关于测试数据集的平均损失（$$N'$$是测试样本容量）：

$$
e\_{test}(\hat{f})=\frac{1}{N'}\sum ^{N'}\_{i=1}L(y\_i,\hat{f}(x\_i))
$$

* 训练误差的大小，对判断给定的问题是不是一个容易学习的问题是有意义的
* 测试误差反映了学习方法对未知数据的预测能力，即泛化能力（generalization ability）

#### 过拟合与模型选择

当模型复杂度增加时，训练误差会逐渐减小并趋向于0；测试误差会先减小，达到最小值后又会增大。

当模型复杂度过大时，就会出现过拟合。所以需要在学习时防止过拟合，选择复杂度适当的模型。

### 正则化与交叉验证

#### 正则化

模型选择的典型方法是正则化（regularization）。正则化是**结构风险最小化**策略的实现，即在经验上加一个正则化项（regularizer）或罚项（penalty term）。

正则化项一般是**模型复杂度**的**单调递增函数**，模型越复杂，正则化值越大。比如，正则化项可以是模型参数向量的范数。

$$
\min\_{f\in \mathcal{F}}\frac{1}{N}\sum^N\_{i=1}L(y\_i,f(x\_i))+\lambda J(f)
$$

其中$$\lambda \ge 0$$

正则化符合奥卡姆剃刀（Occam's razor）原理：在所有可能选择的模型中，能够**很好地解释已知数据**并且**十分简单**才是最好的模型，也就是应该选择的模型。

从贝叶斯估计的角度来看，**正则化项**对应于模型的**先验概率**。可以假设复杂的模型有较小的先验概率，简的模型有较大的先验概率。

#### 交叉验证

### 泛化能力

#### 泛化误差

#### 泛化误差上界

### 生成模型与判别模型

### 分类问题

### 标注问题

### 回归问题

一个常问的问题：平方损失在做分类问题的损失函数时，有什么缺陷？

一方面，直观上看，平方损失函数**对每一个输出结果都十分看重**，而交叉熵**只看重正确分类**的结果。例如三分类问题，如果预测的是$$(a,b,c)$$，而实际结果是$$(1,0,0)$$，那么：

$$
mse=(a-1)^2+b^2+c^2
$$

$$
crossentropy=-1\times \log a-0\times \log b -0\times \log c=-\log a
$$

所以，交叉熵损失的梯度只和正确分类有关。而平方损失的梯度和错误分类有关，**除了让正确分类尽可能变大，还会让错误分类都变得更平均**。实际中后面这个调整在分类问题中是不必要的，而回归问题上这就很重要。

另一方面，从理论角度分析。两个损失的源头不同。平方损失函数**假设最终结果都服从高斯分布**，而高斯分布的随机变量实际是一个**连续变量**，而非离散变量。如果假设结果 变量服从均值$$t$$，方差$$\sigma$$的高斯分布，那么利用最大似然法可以优化其负对数似然，最终公式变为：

$$
\max\sum^N\_i\[-\frac{1}{2}\log(2\pi \sigma^2)-\frac{(t\_i-y)^2}{2\sigma ^2}]
$$

除去与$$y$$无关的项，剩下的就是平方损失函数。

## 感知机

## k近邻法

## 朴素贝叶斯法

参考<https://www.cnblogs.com/jiangxinyang/p/9378535.html>

### 贝叶斯公式

$$
p(\theta|X)=\frac{p(X|\theta)p(\theta)}{p(X)}
$$

又可以写为：

$$
posterior=\frac{likelihood \* prior}{evidence}
$$

其中：

* $$posterior$$：通过样本$$X$$得到参数$$\theta$$的概率，即后验概率
* $$likelihood$$：通过参数$$\theta$$得到样本$$X$$的概率，即似然函数。
* $$prior$$：参数$$\theta$$的先验概率
* $$evidence$$：$$p(X)=\int p(X|\theta)p(\theta)d\theta$$。样本$$X$$发生的概率，是各种$$\theta$$条件下发生的概率的积分。

### 极大似然估计（MLE）

极大似然估计的核心思想是：认为**当前发生的事件**是**概率最大的事件**。因此就可以给定的数据集，使得该数据集**发生的概率最大**来求得模型中的参数。

似然函数如下：

$$
p(X|\theta)=\prod ^n\_{i=1}p(x\_i|\theta)
$$

为便于计算，对似然函数两边取对数，得到对数似然函数：

$$
\begin{aligned}
LL(\theta)&=\log p(X|\theta) \\
&= \log \prod ^n\_{i=1}p(x\_i|\theta) \\
&= \sum ^n\_{i=1}\log p(x\_i|\theta)  \\
\end{aligned}
$$

极大似然估计**只关注当前的样本**，也就是只关注当前发生的事情，**不考虑事情的先验情况**。由于计算简单，而且不需要关注先验知识，因此在机器学习中的应用非常广，最常见的就是**逻辑回归**。

### 最大后验估计（MAP）

最大后验估计中引入了**先验概率**（先验分布属于**贝叶斯学派**引入的，像L1，L2正则化就是对参数引入了**拉普拉斯先验**分布和**高斯先验**分布），而且最大后验估计要求的是$$p(\theta|X)$$

$$
\begin{aligned}
f(x)&= \arg\max \_{\theta}p(\theta|X) \\
&= \arg\max \_{\theta}\frac{p(X|\theta)p(\theta)}{p(X)} \\
&= \arg\max \_{\theta} p(X|\theta)p(\theta) \\
\end{aligned}
$$

其中因为分母$$p(X)$$与$$\theta$$无关，所以可以去掉，同样地，取log：

$$
\begin{aligned}
f(x)&= \arg\max \_{\theta} \log p(X|\theta)p(\theta) \\
&= \arg\max *{\theta} {\sum ^n*{i=1}\log p(x\_i|\theta)+\log p(\theta)}\\
\end{aligned}
$$

最大后验估计不只是关注当前的样本的情况，还关注**已经发生过的先验知识**。

最大后验估计和最大似然估计的区别：

最大后验估计允许我们**把先验知识加入到估计模型中**，这在**样本很少的时候是很有用的**（因此朴素贝叶斯在较少的样本下就能有很好的表现），因为**样本很少**的时候我们的**观测结果很可能出现偏差**，此时先验知识会把估计的结果“拉”向先验，实际的预估结果将会在先验结果的两侧形成一个顶峰。通过调节先验分布的参数，比如beta分布的$$\alpha$$，$$\beta$$，我们还可以调节把估计的结果“拉”向先验的幅度，$$\alpha$$，$$\beta$$越大，这个顶峰越尖锐。这样的参数，我们叫做预估模型的“超参数”。

### 贝叶斯估计

贝叶斯估计和极大后验估计有点相似，都是以最大化后验概率为目的。区别在于：

* 极大似然估计和极大后验估计都是**只返回了的预估值**。
* 极大后验估计在计算后验概率的时候，把**分母**$$p(X)$$**忽略了，在进行贝叶斯估计的时候则不能忽略**
* 贝叶斯估计要计算**整个后验概率**的概率分布

## 决策树

## logistic回归与最大熵模型

## 支持向量机

## 提升方法

### gbdt

参考<https://www.cnblogs.com/pinard/p/6140514.html>

梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)有很多简称，有GBT（Gradient Boosting Tree）, GTB（Gradient Tree Boosting ）， GBRT（Gradient Boosting Regression Tree）, MART(Multiple Additive Regression Tree)等等。

#### gbdt概述

在Adaboost中，我们是利用前一轮迭代弱学习器的误差率来更新训练集的权重，这样一轮轮的迭代下去。

GBDT也是迭代，但是弱学习器限定了只能使用CART回归树模型，同时迭代思路和Adaboost也有所不同。

假设我们前一轮迭代得到的强学习器是$$f\_{t-1}(x)$$，损失函数是$$L(y, f\_{t-1}(x))$$，本轮迭代的目标是找到一个CART回归树模型的弱学习器$$h\_t(x)$$，使得本轮的损失函数$$L(y, f\_{t}(x)) =L(y, f\_{t-1}(x)+ h\_t(x))$$最小。也就是说，要找到一个决策树，使得样本的损失$$L(y-f\_{t-1}(x), h\_t(x))$$最小。

#### gbdt的负梯度拟合

第$$t$$轮的第$$i$$个样本的损失函数的负梯度：

$$
r\_{ti} = -\bigg\[\frac{\partial L(y\_i, f(x\_i)))}{\partial f(x\_i)}\bigg]*{f(x) = f*{t-1}(x)}
$$

利用

## EM算法及其推广

## 隐马尔可夫模型

## 条件随机场

## 附录

### 矩阵

### 优化

#### 拉格朗日乘子法

拉格朗日乘子法(Lagrange multipliers)是一种寻找多元函数在**一组约束下**的极值的方法。通过引入拉格朗日乘子，将$$d$$个变量和$$k$$个约束条件的最优化问题转化为具有$$d+k$$个变量的无约束优化问题求解。

**等式约束**

假设$$x$$是$$d$$维向量，要寻找$$x$$的某个取值$$x^\*$$，使目标函数$$f(x)$$最小且同时满足$$g(x)=0$$的约束。

从几何角度看，目标是在由方程$$g(x)=0$$确定的$$d-1$$维曲面上，寻找能使目标函数$$f(x)$$最小化的点。

1. 对于约束曲面$$g(x)=0$$上的**任意点**$$x$$，该点的梯度$$\nabla g(x)$$正交于约束曲面
2. 在**最优点**$$x^*$$，目标函数$$f(x)$$在该点的梯度$$\nabla f(x^*)$$正交于约束曲面

对于**第1条**，梯度本身就与曲面的切向量垂直，**是曲面的法向量**，并且**指向数值更高的等值线**。

证明：

参考<http://xuxzmail.blog.163.com/blog/static/251319162010328103227654/>

假设$$z=f(x,y)$$的等值线：$$\Gamma :f(x,y)=c$$，两边求微分：

$$
\begin{matrix}
df(x,y)=dc & \\
\frac{\partial f}{\partial x} dx + \frac{\partial f}{\partial y} dy =0 & \\
&
\end{matrix}
$$

看成两个向量的内积：

$$
\frac{\partial f}{\partial x} dx + \frac{\partial f}{\partial y} dy = {\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}}\cdot {dx,dy}=0
$$

而内积$$a\cdot b=|a||b|cos\theta$$为0说明夹角是90度，而$${\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}}$$是梯度向量，$${dx,dy}$$是等值线的切向量，所以梯度向量和切向量是垂直的。

对于**第2条**，可以用反证法，如下图，蓝色是$$g(x)=0$$，橙色是$$f(x)$$的等值线(图里假设$$f(x)=x^2+y^2$$)，交点的$$\nabla f(x^*)$$的梯度和$$g(x)$$的切面不垂直，那么，可以找到更小的等值线，使夹角更接近90度，也就是说，这个点不是真正的最优点$$x^*$$。

![等式约束-非相切](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-44fe16e1b8aac053b0ca660e7100323bc4726dbe%2Flagrange-equal-1.png?alt=media)

所以，在最优点$$x^\*$$处，梯度$$\nabla g(x)$$和$$\nabla f(x)$$的方向必然**相同或相反**，也就是存在$$\lambda \neq 0$$，使得：

$$
\nabla f(x^*)+\lambda \nabla g(x^*)=0
$$

其中$$\lambda$$是拉格朗日乘子，定义拉格朗日函数

$$
L(x,\lambda)=f(x)+\lambda g(x)
$$

其中$$L(x,\lambda)$$对x的偏导$$\nabla \_xL(x,\lambda)$$置0，就得到：

$$
\nabla f(x)+\lambda \nabla g(x)=0
$$

而$$L(x,\lambda)$$对$$\lambda$$的偏导$$\nabla \_{\lambda}L(x,\lambda)$$置0，就得到

$$
g(x)=0
$$

所以，原约束问题可以转化为对$$L(x,\lambda)$$的无约束优化问题。

**不等式约束**

考虑不等式约束$$g(x)\le 0$$，最优点或者在边界$$g(x)=0$$上，或者在区域$$g(x)<0$$中。

![(a)是等式约束，(b)是不等式约束](https://1725978874-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MAwALUwRCP16VZ2I1KP%2Fuploads%2Fgit-blob-74d87e6a4d98e97a010d4b2b27f5d18ab704a880%2Flagrange-equal-not-equal.png?alt=media)

* 对于$$g(x)<0$$

相当于使$$f(x)$$取得最小值的点落在可行域内，所以**约束条件相当于没有用**，所以，直接对$$f(x)$$求极小值即可。因为$$L(x,\lambda)=f(x)+\lambda g(x)$$，所以

$$
\nabla \_xL(x,\lambda)=\nabla f(x)+\lambda \nabla g(x)
$$

因为$$g(x)<0$$，想要只让$$\nabla f(x)=0$$，那么令 $$\lambda = 0$$ 即可。

* 对于$$g(x)=0$$

这就变成了等式约束，且此时$$\nabla f(x^*)$$和$$\nabla g(x^*)$$反向相反。因为在$$g(x)=0$$越往里值是越小的，而梯度是指向等值线高的方向，所以梯度是指向外的。而$$f(x)$$的可行域又在$$g(x)$$的里面和边界上，我们要找的是$$f(x)$$的最小值，所以$$f(x)$$的梯度是指向内部的。

而$$\nabla f(x)+\lambda \nabla g(x)=0$$，两个又是反向的，所以$$\lambda>0$$。

结合$$g(x)\le 0$$和$$g(x)=0$$两种情况的结论，就得到了KKT（Karush-Kuhn-Tucker）条件

$$
\left.\begin{matrix}
g(x)=0, \lambda >0  \\
g(x)<0, \lambda = 0
\end{matrix}\right}\Rightarrow \left{\begin{matrix}
g(x)\le 0 \\
\lambda \ge 0\\
\lambda g(x)=0
\end{matrix}\right.
$$

其中$$\lambda g(x)=0$$是因为$$\lambda$$和$$g(x)$$**至少一个是0，而且不能都不是0。**

以上三个条件有各自的名字：

* Primal feasibility(原始可行性)：$$g(x)\le 0$$
* Dual feasibility(对偶可行性)：$$\lambda \ge 0$$
* Complementary slackness：$$\lambda g(x)=0$$

**带等式和不等式约束的拉格朗日乘子法**

对于多个约束的情形，$$m$$个等式约束和$$n$$个不等式约束，可行域$$\mathbb{D}\subset \mathbb{R}^d$$非空的优化问题：

$$
\min\_{x}f(x)
$$

$$
\begin{matrix}
s.t & h\_i(x)=0,i=1,...,m \\
& g\_j(x)\le 0,j=1,...,n
\end{matrix}
$$

引入拉格朗日乘子$$\lambda=(\lambda\_1,\lambda\_2,...,\lambda\_m)^T$$和$$\mu=(\mu\_1,\mu\_2,...,\mu\_n)^T$$，相应的拉格朗日函数为：

$$
L(x,\lambda, \mu)=f(x)+\sum^m\_{i=1}\lambda\_ih\_i(x)+\sum^n\_{j=1}\mu\_jg\_j(x)
$$

由不等式约束引入的KKT条件$$(j=1,2,...n)$$为

$$
\left{\begin{matrix}
g\_j(x)\le 0\\
\mu\_j\ge 0\\
\mu\_jg\_j(x)=0
\end{matrix}\right.
$$

#### 梯度下降

**《统计学习方法》的视角**

假设$$f(x)$$有一阶连续偏导，对于无约束的最优化问题而言：$$\min \_{x\in R^n}f(x)$$

而$$f(x)$$在$$x^{(k)}$$附近的一阶泰勒展开如下，其中$$g\_k=g(x^{(k)})=\nabla f(x^{(k)})$$是$$f(x)$$在$$x^{(k)}$$的梯度：

$$
f(x)=f(x^{(k)})+g^T\_k(x-x^{(k)})
$$

所以对于$$x=x^{(k+1)}$$：

$$
f(x^{(k+1)})=f(x^{(k)})+g^T\_k(x^{(k+1)}-x^{(k)})
$$

令$$x^{(k+1)}=x^{(k)}+\lambda \_kp\_k$$，$$p\_k$$是搜索方向，$$\lambda \_k$$是步长，代入上式，有

$$
\begin{aligned}
f(x^{(k+1)})&=f(x^{(k)})+g^T\_k(x^{(k)}+\lambda \_kp\_k-x^{(k)})  \\
&=f(x^{(k)})+g^T\_k\lambda \_kp\_k  \\
\end{aligned}
$$

为了让每次迭代的函数值变小，可以取$$p\_k=-\nabla f(x^{(k)})$$

把$$\lambda\_k$$看成是可变化的，所以需要搜索$$\lambda \_k$$使得

$$
f(x^{(k)}+\lambda\_kp\_k)=\min\_{\lambda \ge0}f(x^{(k)}+\lambda p\_k)
$$

**梯度下降法：**

输入：目标函数$$f(x)$$，梯度$$g(x)=\nabla f(x)$$，精度要求$$\varepsilon$$。

输出：$$f(x)$$的极小点$$x^\*$$。

1. 取初始值$$x^{(0)}\in R^n$$，置$$k=0$$
2. 计算$$f(x^{(k)})$$
3. 计算梯度$$g\_k=g(x^{(k)})$$，当$$\left | g\_k \right |<\varepsilon$$，则停止计算，得到近似解$$x^\*=x^{(k)}$$；否则，令$$p\_k=-g(x^{(k)})$$，求$$\lambda\_k$$使得 $$f(x^{(k)}+\lambda\_kp\_k)=\min\_{\lambda \ge0}f(x^{(k)}+\lambda p\_k)$$
4. 置$$x^{(k+1)}=x^{(k)}+\lambda\_kp\_k$$，计算$$f(x^{(k+1)})$$ 当$$\left | f(x^{(k+1)}) -f(x^{(k)}) \right |<\varepsilon$$或$$\left | x^{(k+1)}-x^{(k)} \right |<\varepsilon$$时，停止迭代，令$$x^\*=x^{(k+1)}$$
5. 否则，置$$k=k+1$$，转第3步

只有当目标函数是**凸函数**时，梯度下降得到的才是**全局最优解**。

**《机器学习》的视角**

梯度下降是一阶(first order)（只用一阶导，不用高阶导数）优化方法，是求解无约束优化问题最简单、最经典的方法之一。

考虑无约束优化问题$$\min\_xf(x)$$，$$f(x)$$是连续可微函数，如果能构造一个序列$$x^0,x^1,x^2,...$$满足

$$
f(x^{t+1}) < f(x^t),\ t=0,1,2,...
$$

那么不断执行这个过程，就可以收敛到局部极小点，根据泰勒展开有：

$$
\begin{aligned}
f(x)&=f(x^{(k)})+\nabla f(x^{(k)})^T(x-x^{(k)})  \\
f(x+\Delta x) &= f(x^{(k)})+\nabla f(x^{(k)})^T(x+\Delta x-x^{(k)}) \\
& =  f(x^{(k)})+\nabla f(x^{(k)})^T(x-x^{(k)}) + \nabla f(x^{(k)})^T\Delta x  \\
& = f(x) + \nabla f(x^{(k)})^T\Delta x
\end{aligned}
$$

而$$\nabla f(x^{(k)})^T\Delta x$$是一个标量，其转置等于自己，所以

$$
f(x+\Delta x)=f(x) + \Delta x^T\nabla f(x^{(k)})
$$

想要让$$f(x+\Delta x)< f(x)$$，只需要令：

$$
\Delta x=-\gamma \nabla f(x)
$$

其中的步长$$\gamma$$是一个小常数

如果$$f(x)$$满足$$L$$-Lipschitz条件，也就是说对于任意的$$x$$，存在常数$$L$$，使得$$\left | \nabla f(x) \right |\le L$$成立，那么设置步长为$$\frac{1}{2L}$$就可以确保收敛到局部极小点。

同样地，当目标函数是凸函数时，局部极小点就对应全局最小点，此时梯度下降可以确保收敛到全局最优解。

#### 牛顿法

**二阶导基本性质**

对于点$$x=x\_0$$，

* 一阶导$$f'(x\_0)=0$$时，如果二阶导$$f''(x\_0)>0$$，那么$$f(x\_0)$$是极小值，$$x\_0$$是极小点
* 一阶导$$f'(x\_0)=0$$，如果二阶导$$f''(x\_0)<0$$，那么$$f(x\_0)$$是极大值，$$x\_0$$是极大点
* 一阶导$$f'(x\_0)=0$$，如果二阶导$$f''(x\_0)=0$$，那么$$x\_0$$是鞍点

证明：

对于任意$$x\_1$$，根据二阶泰勒展开，有

$$
f(x\_1)=f(x\_0)+f'(x\_0)(x\_1-x\_0)+\frac{1}{2}f''(x\_0)(x\_1-x\_0)^2+...+R\_n(x\_1)
$$

因为$$f''(x\_0)>0$$且$$f'(x\_0)=0$$，所以，不论$$x\_1> x\_0$$还是$$x\_1< x\_0$$，总有$$f(x\_1)>f(x\_0)$$，也就是周围的函数值都比$$f(x\_0)$$大，而$$x\_0$$又是极值点，所以是极小点。

**牛顿法**

对于矩阵形式，$$x$$是一个nx1的列向量，$$H(x)$$是$$f(x)$$的海赛矩阵，即二阶导，shape是$$n\times n$$：

$$
f(x)=f(x^{(x)})+g^T\_k(x-x^{(k)})+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)})
$$

函数$$f(x)$$有极值的必要条件是在极值点处一阶导为0，特别地，当$$H(x^{(k)})$$是正定矩阵时（二阶导大于0），是极小值。

牛顿法利用极小点的必要条件$$\nabla f(x)=0$$，每次迭代从点$$x^{(k)}$$开始，求目标函数极小点，作为第$$k+1$$次迭代值$$x^{(k+1)}$$，具体地，假设$$\nabla f(x^{(k+1)})=0$$，有

$$
\begin{aligned}
f(x) &= f(x^{(x)})+g^T\_k(x-x^{(k)})+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)}) \\
&=f(x^{(x)})+[g^T\_k+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})](https://www.daiwk.net/x-x^{\(k\)}) \\
&=f(x^{(x)})+\[g\_k+\frac{1}{2}H(x^{(k)})(x-x^{(k)})]^T(x-x^{(k)})  \\
\end{aligned}
$$

把其中的$$g\_k+\frac{1}{2}H(x^{(k)})(x-x^{(k)})$$看成一阶导，则上式就是一阶泰勒展开。记$$H^k=H(x^{(k)})$$，令$$x=x^{(k+1)}$$，令一阶导为0：

$$
\begin{matrix}
g\_k+\frac{1}{2}H^k(x^{(k+1)}-x^{(k)})=0 \\
g\_k=-\frac{1}{2}H^k(x^{(k+1)}-x^{(k)}) \\
-2H^{-1}\_kg\_k=x^{(k+1)}-x^{(k)} \\
x^{(k+1)} = -2H^{-1}\_kg\_k+x^{(k)}
\end{matrix}
$$

可以无视这个2，变成：

$$
x^{(k+1)}=x^{(k)}-H^{-1}\_kg\_k
$$

或者

$$
x^{(k+1)}=x^{(k)}+p\_k
$$

其中，

$$
H\_kp\_k=-g\_k
$$

**牛顿法**：

输入：目标函数$$f(x)$$，梯度$$g(x)=\nabla f(x)$$，海赛矩阵$$H(x)$$，精度要求$$\varepsilon$$。

输出：$$f(x)$$的极小点$$x^\*$$。

1. 取初始点$$x^{(0)}$$，置$$k=0$$
2. 计算$$g\_k=g(x^{(k)})$$
3. 若$$\left | g\_k \right |<\varepsilon$$，则停止计算，得到近似解$$x^\*=x^{(k)}$$
4. 计算$$H\_k=H(x^{(k)})$$，并求$$p\_k$$，满足 $$H\_kp\_k=-g\_k$$
5. 置$$x^{(k+1)}=x^{(k)}+p\_k$$
6. 置$$k=k+1$$，转到第2步

其中的步骤4，求$$p\_k$$时，$$p\_k=-H^{-1}\_kg\_k$$需要求解$$H^{-1}\_k$$很复杂。

#### 拟牛顿法的思路

基本想法就是通过一个$$n$$阶矩阵$$G\_k=G(x^{(k)})$$来近似代替$$H^{-1}(x^{(k)})$$。

#### DFP(Davidon-Fletcher-Powell)

#### BFGS(Broydon-Fletcher-Goldfarb-Shanno)

### 拉格朗日对偶性

### 信息论相关

#### 凸集

假设$$S$$为在实或复向量空间的集。若对于所有$$x,y\in S$$和所有的$$t\in \[0,1]$$都有$$tx+(1-t)y\in S$$，则$$S$$称为凸集。

也就是说，$$S$$中任意两点间的线段都属于$$S$$

性质：

如果$$S$$是凸集，对于任意的$$u\_1,u\_2,...,u\_r\in S$$，以及所有的非负$$\lambda\_1,\lambda\_2,...,\lambda\_r$$满足$$\lambda\_1+\lambda\_2+...+\lambda\_r=1$$，都有$$\sum\_{k=1}^{r}\lambda\_ku\_k\in S$$。这个组合称为$$u\_1,u\_2,...,u\_r$$的凸组合。

#### 凸函数

函数是凸函数：曲线上任意两点x和y所作割线（与函数图像有两个不同交点的直线，如果只有一个交点，那就是切线）一定在这两点间的函数图象的上方：

$$
tf(x)+(1-t)f(y)\ge f(tx+(1-t)y),0\le t \le 1
$$

有如下几个常用性质：

* 一元可微函数在某个区间上是凸的，当且仅当它的**导数**在该区间上**单调不减**。
* 一元连续可微函数在区间上是凸的，当且仅当函数位于**所有它的切线的上方**：对于区间内的所有$$x$$和$$y$$，都有 $$f(y) ≥ f(x) + f '(x) (y − x)$$**(右边就是一阶泰勒展开)**。特别地，如果$$f '(c) = 0$$，那么$$f(c)$$是$$f(x)$$的最小值。
* 一元二阶可微的函数在区间上是凸的，当且仅当它的**二阶导数是非负的**；这可以用来判断某个函数是不是凸函数。如果它的二阶导数是正数，那么函数就是严格凸的，但反过来不成立。
* 多元二次可微的连续函数在凸集上是凸的，当且仅当它的**黑塞矩阵**在凸集的内部是**半正定的**

#### KL散度

熵的小结：<https://blog.csdn.net/haolexiao/article/details/70142571>

**相对熵**（relative entropy）又称为**KL散度**（Kullback–Leibler divergence，简称KLD），**信息散度（information divergence）**，**信息增益（information gain）**。

KL散度是两个概率分布P和Q差别的**非对称性**的度量。 KL散度是用来度量使用**基于Q的编码**来编码**来自P的样本** **平均所需的额外的位元数**。 典型情况下，**P表示数据的真实分布**，**Q表示数据的理论分布，模型分布，或P的近似分布**。

注意：$$D\_{KL}(P||Q)$$是指的用**分布Q**来**近似**数据的**真实分布P**，先写P再写Q，公式里没有-ln的时候，就是p/q

对于离散随机变量：

$$
D\_{KL}(P||Q)=\sum\_{i}P(i)ln\frac{P(i)}{Q(i)}=-\sum \_{i}P(i)ln\frac{Q(i)}{P(i)}
$$

KL散度仅当**概率P和Q各自总和均为1**，且对于任何i皆满足$$Q(i)>0$$及$$P(i)>0$$时，才有定义。如果出现$$0ln0$$，当做0

对于连续随机变量：

$$
D\_{KL}(P||Q)=\int ^{\infty }\_{-\infty}p(x)ln\frac{p(x)}{q(x)}dx
$$

性质：

KL散度大于等于0

证明：

先了解一下Jensen不等式：

如果$$\varphi$$是一个凸函数，那么有：

$$
\varphi(E(x))\le E(\varphi(x))
$$

对于**离散随机变量**，$$\sum\_{i=1}^n \lambda\_i=1$$：

$$
\varphi(\sum *{i=1}^n g(x\_i)\lambda\_i)\le \sum^{n}*{i=1}\varphi(g(x\_i))\lambda\_i
$$

当我们取$$g(x)=x$$，$$\lambda\_i=1/n$$，$$\varphi(x)=log(x)$$时，就有

$$
log(\sum^{n}*{i=1}\frac{x\_i}{n})\ge \sum^{n}*{i=1}\frac{log(x\_i)}{n}
$$

对于**连续随机变量**，如果f(x)是非负函数，且满足（f(x)是概率密度函数）：

$$
\int^{\infty}\_{-\infty}f(x)dx=1
$$

如果$$\varphi$$在g(x)的值域中是凸函数，那么

$$
\varphi(\int^{\infty}*{-\infty}g(x)f(x)dx)\le \int ^{\infty}*{-\infty}\varphi(g(x))f(x)dx
$$

特别地，当$$g(x)=x$$时，有

$$
\varphi(\int^{\infty}*{-\infty}xf(x)dx)\le \int ^{\infty}*{-\infty}\varphi(x)f(x)dx
$$

回到这个问题中，$$g(x)=\frac{q(x)}{p(x)}$$，$$\varphi(x)=-logx$$是一个严格凸函数，那么$$\varphi(g(x))=-log\frac{q(x)}{p(x)}$$，所以

$$
\begin{aligned}
D\_{KL}(P||Q)&=\int ^{\infty }*{-\infty}p(x)ln\frac{p(x)}{q(x)}dx \\
&=\int ^{\infty }*{-\infty}p(x)(-ln\frac{q(x)}{p(x)})dx  \\
&=\int ^{\infty }*{-\infty}(-ln\frac{q(x)}{p(x)})p(x)dx  \\
&\ge -ln(\int^{\infty }*{-\infty}\frac{q(x)}{p(x)}p(x)dx) \\
&\ge -ln(\int^{\infty }\_{-\infty}q(x)dx) \\
&=-ln1=0
\end{aligned}
$$

### 采样

假设有一个很复杂的概率密度函数$$p(x)$$，求解随机变量基于此概率下的某个函数期望，即：

$$
E\_{x\sim p(x)}\[f(x)]
$$

求解有两种方法：

解析法：

将上式展开成积分，并通过积分求解：

$$
\int \_x p(x)f(x)dx
$$

对于简单的分布，可以直接这么做。但dnn就不可行了。

蒙特卡洛法：

根据大数定理，当采样数量足够大时，采样的样本就可以无限近似地表示原分布：

$$
\frac{1}{N}\sum ^N\_{x\_i\sim p(x),i=1}f(x\_i)
$$

#### 拒绝采样

拒绝采样又叫接受/拒绝采样(Accept-Reject Sampling)，对于目标分布$$p(x)$$，选取一个容易采样的参考分布$$q(x)$$，使得对于任意$$x$$都有$$p(x)\le M\cdot q(x)$$，则可以按如下过程采样：

* 从参考分布$$q(x)$$中随机抽取一个样本$$x\_i$$
* 从均匀分布$$U(0,1)$$产生一个随机数$$u\_i$$
* 如果$$u\_i\le \frac{p(x\_i)}{Mq(x\_i)}$$，则接受样本$$x\_i$$，否则拒绝。

重新进行如上3个步骤，直到新产生的样本$$x\_i$$被接受

其中的第三步是因为$$p(x)\le M\cdot q(x)$$，所以$$\frac{p(x\_i)}{Mq(x\_i)}\le 1$$，说明只有函数值在$$p(x\_i)$$下方的$$x\_i$$才接受，所以$$x\_i\sim p(x)$$。相当于为目标分布$$p(x)$$选一个包络函数$$M\cdot q(x)$$，包络函数紧，每次采样时样本被接受的概率越大，采样效率越高。实际应用中还有自适应拒绝采样等。

#### 重要性采样

强化学习经常使用重要性采样。重要性采样主要应用在一些**难以直接采样**的数据分布上。

我们令待采样分布为$$p(x)$$，有另一个简单可采样且定义域和$$p(x)$$相同的概率密度函数为$$\tilde {p}(x)$$，可以得到：

$$
\begin{aligned}
E\_{x\sim p(x)}\[f(x)]&=\int *x p(x)f(x)dx \\
&=\int *x \tilde{p}(x) \frac{p(x)}{\tilde {p}(x)}f(x)dx  \\
&=E*{x\sim \tilde{p}(x)} \[\frac{p(x)}{\tilde {p}(x)}f(x)]  \\
& \simeq \frac{1}{N} \sum ^N*{x\_i\sim \tilde{p}(x),i=1}\frac{p(x)}{\tilde{p}(x)}f(x)
\end{aligned}
$$

因此，只需要从简单分布$$\tilde {p}(x)$$中采样，然后分别计算$$p(x)$$、$$\tilde {p}(x)$$和$$f(x)$$就可以了。

**最好选择一个和原始分布尽量接近的近似分布进行采样。**

例如，要对一个均值1，方差1的正态分布进行采样，有两个可选的分布：均值1方差0.5和均值1方差2。

从图像上可以看到方差为0.5的过分集中在均值附近，而且方差为2的与原分布重合度较高，所以应该选方差为2的。

#### 马尔可夫蒙特卡洛采样（MCMC）

如果是高维空间的随机向量，拒绝采样和重要性采样经常难以找到合适的参考分布，采样效率低下（样本的接受概率低或者重要性权重低），此时可以考虑马尔可夫蒙特卡洛采样法。

蒙特卡洛法指基于采样的数值近似求解方法，马尔可夫链用于进行采样。

基本思想是：

* 针对待采样的目标分布，**构造一个马尔可夫链**，使得该马尔可夫链的平稳分布就是目标分布；
* 然后**从任何一个初始状态出发**，沿着马尔可夫链进行**状态转移**，最终得到的状态转移序列会收敛到目标分布
* 由此可以得到目标分布的一系列样本

核心点是**如何构造合适的马尔可夫链**，即确定马尔可夫链的状态转移概率。

**Metropolis-Hastings采样**

对于目标分布$$p(x)$$，首先选择一个容易采样的参考条件分布$$q(x^\*|x)$$，并令

$$A(x,x^*)=\min {1,\frac{p(x^*)q(x|x^*)}{p(x)q(x^*|x)}}$$

然后根据如下过程采样：

* 随机选一个初始样本$$x^{(0)}$$
* For t = 1, 2, 3, ... :
  * 根据参考条件分布$$q(x^*|x^{(t-1)})$$抽取一个样本$$x^*$$；
  * 根据均匀分布$$U(0,1)$$产生随机数$$u$$；
  * 若$$u < A(x^{(t-1)},x^*)$$，则令$$x^{(t)}=x^*$$**【接受新样本】**，否则令$$x^{(t)}=x^{(t-1)}$$**【拒绝新样本，维持旧样本】**

可以证明，上述过程得到的样本序列$${...,x^{(t-1)},x^{(t)},...}$$最终会收敛到目标分布$$p(x)$$

**吉布斯采样**

吉布斯采样是**Metropolis-Hastings算法的一个特例**，核心思想是**只对样本的一个维度**进行采样和更新。对于目标分布$$p(x)$$，其中$$x=(x\_1,x\_2,...,x\_d)$$是一个多维向量，按如下过程采样：

* 随机选择初始状态$$x^{(0)}=(x^{(0)}\_1,x^{(0)}\_2,...,x^{(0)}\_d)$$
* For t = 1, 2, 3, ... :
  * 对于前一步产生的样本$$x^{(t-1)}=(x^{(t-1)}\_1,x^{(t-1)}\_2,...,x^{(t-1)}\_d)$$，依次采样和更新每个维度的值，即依次抽取分量$$x^{(t)}\_1\sim p(x\_1|x^{(t-1)}\_2,x^{(t-1)}\_3,...,x^{(t-1)}\_d)$$, $$x^{(t)}\_2\sim p(x\_1|x^{(t-1)}\_1,x^{(t-1)}\_3,...,x^{(t-1)}\_d)$$, ..., $$x^{(t)}\_d\sim p(x\_1|x^{(t-1)}\_1,x^{(t-1)}*2,...,x^{(t-1)}*{d-1})$$
  * 形成新的样本$$x^{(t)}=(x^{(t)}\_1,x^{(t)}\_2,...,x^{(t)}\_d)$$

同样可以证明，上述过程得到的样本序列$${...,x^{(t-1)},x^{(t)},...}$$会收敛到目标分布$$p(x)$$。另外，步骤2中对样本每个维度的抽样和更新操作，**不是必须按下标顺序进行的，可以是随机顺序。**

注意点：

* 拒绝采样中，如果某一步中采样被拒绝，则**该步不会产生新样本，需要重新采样**。但MCMC采样**每一步都会产生一个样本**，只是有时候这个样本与之前的样本一样而已。
* MCMC采样是在**不断迭代**过程中**逐渐收敛**到平稳分布的。实际应用中一般会对得到的样本序列进行"burn-in"处理，即截除掉序列中最开始的一部分样本，**只保留后面的样本。**

MCMC得到的样本序列中相邻的样本是**不独立的**，因为后一个样本是由前一个样本根据特定的转移概率得到的。如果仅仅是采样，并不要求样本之间相互独立。

如果确实需要产生独立同分布的样本，可以：

* 同行运行多条马尔可夫链，这样不同链上的样本是独立的
* 或者在同一条马尔可夫链上每隔若干个样本才选取一个，这样选出来的样本也是近似独立的。


# 9.collections

## 一些回顾性的经典总结

### 2019年盘点

[告别2019：属于深度学习的十年，那些我们必须知道的经典](https://mp.weixin.qq.com/s/GT-o7nA9Fc_-4xhtUoFgvQ)

[“深度学习”这十年：52篇大神级论文再现AI荣与光](https://mp.weixin.qq.com/s/RYU6SBlD6FFkCVJk0VvGuA)

[Jeff Dean谈2020ML：专用芯片、多模态多任务学习，社区不用痴迷SOTA](https://mp.weixin.qq.com/s/w8zGd9x7li-1UA0PNvM9_g)

[NLPer复工了！先看看这份2019机器学习与NLP年度盘点吧](https://mp.weixin.qq.com/s/-Uk74MjhZtVroasFUFdmvA)

[三巨头共聚AAAI：Capsule没有错，LeCun看好自监督，Bengio谈注意力](https://mp.weixin.qq.com/s/nDDAx6AB9SYgQ9cVevjZvA)

Geoffrey Hinton 介绍了[Stacked Capsule Autoencoders](https://arxiv.org/abs/1906.06818)，即一种无监督版本的 Capsule 网络，这种神经编码器能查看所有的组成部分，并用于推断跟细节的特征； Yann LeCun 在《Self-Supervised Learning》中再次强调了自监督学习的重要性；(nlp那章里讲到了) Yoshua Bengio 在[Deep Learning for System 2 Processing](http://www.iro.umontreal.ca/~bengioy/AAAI-9feb2020.pdf)中回顾了深度学习，并讨论了当前的局限性以及前瞻性研究方向。

### 2019nlp

[2019 NLP大全：论文、博客、教程、工程进展全梳理（长文预警）](https://mp.weixin.qq.com/s/5T3-SxBTVzndULwKiFp4Hw)

### 2021年盘点

google research总结

<https://ai.googleblog.com/2022/01/google-research-themes-from-2021-and.html>

[谷歌大神Jeff Dean领衔，万字展望5大AI趋势播报文章](https://baijiahao.baidu.com/s?id=1721742678416388422\&wfr=spider\&for=pc)

## 传统ML

### PRML

[GitHub标星6000+！Python带你实践机器学习圣经PRML](https://mp.weixin.qq.com/s/xbsS7OOJTt8RQqhDPaTKqA)

### 传统ML库

[Scikit-learn新版本发布，一行代码秒升级](https://mp.weixin.qq.com/s/MdYo7H1H8-5YCqTjF8nvow)

### 数学相关

[这本机器学习的数学“百科全书”，可以免费获取 | 宾大计算机教授出品](https://mp.weixin.qq.com/s/xr48R8nkCPHhv0obsjczQw)

<https://www.cis.upenn.edu/~jean/math-deep.pdf>

[一图胜千言，这本交互式线代教科书让你分分钟理解复杂概念，佐治亚理工出品](https://mp.weixin.qq.com/s/bHr4t0ygcBsO2nzVMCBt2w)

<https://textbooks.math.gatech.edu/ila/>

<https://textbooks.math.gatech.edu/ila/ila.pdf>

<https://github.com/QBobWatson/gt-linalg>

### 数据降维

[哈工大硕士生用 Python 实现了 11 种经典数据降维算法，源代码库已开放](https://mp.weixin.qq.com/s/CNP2jtAjt1tm4gd2mV0-tQ)

<https://github.com/heucoder/dimensionality_reduction_alo_codes>

### 孪生网络

[Siamese network 孪生神经网络--一个简单神奇的结构](https://mp.weixin.qq.com/s/DJASmx6Wk3dmpvWb0L91tQ)

### 聚类

[快速且不需要超参的无监督聚类方法](https://mp.weixin.qq.com/s/Nx2yANGKt0WtxN5TYaQjoQ)

[Efﬁcient Parameter-free Clustering Using First Neighbor Relations](https://arxiv.org/abs/1902.11266)

<https://github.com/ssarfraz/FINCH-Clustering>

### 树相关

### xgb

[珍藏版 | 20道XGBoost面试题](https://cloud.tencent.com/developer/article/1500914)

参考[7 papers | Quoc V. Le、何恺明等新论文；用进化算法设计炉石](https://mp.weixin.qq.com/s/lLeWCgZJfc-921jZd2rlTA)

[A Comparative Analysis of XGBoost](https://arxiv.org/pdf/1911.01914v1.pdf)

XGBoost 是一项基于梯度提升可扩展集合技术，在解决机器学习难题方面是可靠和有效的。在本文中，研究者对这项新颖的技术如何在训练速度、泛化性能和参数设置方面发挥作用进行了实证分析。此外，通过精心调整模型和默认设置，研究者还对 XGBoost、随机森林和梯度提升展开了综合比较。结果表明，XGBoost 在所有情况下并不总是最佳选择。最后，他们还对 XGBoost 的参数调整过程进行了扩展分析。

推荐：通过对随机森林、梯度提升和 XGBoost 的综合比较，来自法国波尔多大学、匈牙利帕兹曼尼·彼得天主教大学以及马德里自治大学的三位研究者得出结论：从调查问题的数量看，梯度提升是最好的分类器，但默认参数设置下 XGBoost 和随机森林在平均排名（average rank）方面的差异不具备统计显著性。

### 深度森林

[周志华团队：深度森林挑战多标签学习，9大数据集超越传统方法](https://mp.weixin.qq.com/s/AwvSTF8j0AinS-EgmPFJTA)

### 主题模型

[如何找到好的主题模型量化评价指标？这是一份热门方法总结](https://mp.weixin.qq.com/s/Ax0PzXjpPZ8TOU8pJPvpDw)

### CRF

[【机器学习】条件随机场](https://mp.weixin.qq.com/s/8QPA0lobUmdPirZI7WbWPA)

## DL基础研究

### DL背后的原理

[从2019 AI顶会最佳论文，看深度学习的理论基础](https://mp.weixin.qq.com/s/34k4UK0xZ9TUZIsq1-eHcg)

MIT 教授 Tomaso Poggio 曾在他的系列研究中 \[1] 表示深度学习理论研究可以分为三大类：

* 表征问题（Representation）：为什么深层网络比浅层网络的表达能力更好？
* 最优化问题（Optimization）：为什么梯度下降能找到很好的极小值解，好的极小值有什么特点？
* 泛化问题（Generalization）：为什么过参数化仍然能拥有比较好的泛化性，不过拟合？

对于表征问题，我们想要知道深度神经网络这种「复合函数」，它的表达能力到底怎么确定，它的复合机制又是什么样的。我们不再满足于「能拟合任意函数」这样的定性描述，我们希望知道是不是有一种方法能描述 50 层 ResNet、12 层 Transformer 的拟合能力，能不能清楚地了解它们的理论性质与过程。

有了表征能力，那也只是具备了拟合潜力，深度学习还需要找到一组足够好的极值点，这就是模型的最优解。不同神经网络的「最优化 Landscape」是什么样的、怎样才能找到这种高维复杂函数的优秀极值点、极值点的各种属性都需要完善的理论支持。

最后就是泛化了，深度模型泛化到未知样本的能力直接决定了它的价值。那么深度模型的泛化边界该怎样确定、什么样的极值点又有更好的泛化性能，很多重要的特性都等我们确定一套理论基准。

[英伟达工程师解读NeurIPS 2019最热趋势：贝叶斯深度学习、图神经网络、凸优化](https://mp.weixin.qq.com/s/lj5B81hQumfJGYkgSfNVTg)

neurips2019 杰出新方向论文奖颁给了Vaishnavh Nagarajan和J. Zico Kolter的《一致收敛理论可能无法解释深度学习中的泛化现象》(Uniform convergence may be unable to explain generalization in deep learning)，其论点是一致收敛理论本身并不能解释深度学习泛化的能力。随着数据集大小的增加，泛化差距(模型对可见和不可见数据的性能差距)的理论界限也会增加，而经验泛化差距则会减小。

Shirin Jalali等人的论文《高斯混合模型的高效深度学习》(Efficient Deep Learning of Gaussian mix Models)从这个问题引入：“通用逼近定理指出，任何正则函数都可以使用单个隐藏层神经网络进行逼近。深度是否能让它更具效率？”他们指出，在高斯混合模型的最佳贝叶斯分类的情况下，这样的函数可以用具有一个隐藏层的神经网络中的O(exp(n))节点来近似，而在两层网络中只有O(n)节点。

### NTK

神经正切核(neural tangent kernel, NTK)是近年来研究神经网络优化与泛化的一个新方向。它出现在数个spotlight报告和我在NeuIPS与许多人的对话中。Arthur Jacot等人基于完全连通神经网络在无限宽度限制下等同于高斯过程这一众所周知的概念，在函数空间而非参数空间中研究了其训练动力学。他们证明了“在神经网络参数的梯度下降过程中，网络函数(将输入向量映射到输出向量)遵循函数的核函数梯度成本，关于一个新的核：NTK。”他们还表明，当有限层版本的NTK经过梯度下降训练时，其性能会收敛到无限宽度限制NTK，然后在训练期间保持不变。

NeurIPS上关于NTK的论文有：

[Learning and Generalization in Overparameterized Neural Networks, Going Beyond Two Layers](https://arxiv.org/abs/1811.04918)

[On the Inductive Bias of Neural Tangent Kernels](https://arxiv.org/abs/1905.12173)

但是，许多人认为NTK不能完全解释深度学习。神经网络接近NTK状态所需要的超参数设置——低学习率、大的初始化、无权值衰减——在实践中通常不用于训练神经网络。NTK的观点还指出，神经网络只会像kernel方法一样泛化，但从经验上看，它们可以更好地泛化。

Colin Wei等人的论文“Regularization Matters: Generalization and Optimization of Neural Nets v.s. their Induced Kernel”从理论上证明了具有权值衰减的神经网络泛化效果要比NTK好得多，这表明研究 L2-regularized 神经网络可以更好的理解泛化。NeurIPS的以下论文也表明，传统的神经网络可以超越NTK：

[What Can ResNet Learn Efficiently, Going Beyond Kernels?](https://arxiv.org/abs/1905.10337)

[Limitations of Lazy Training of Two-layers Neural Network](https://arxiv.org/abs/1906.08899)

### 优化算法

### 优化算法综述

[理论、算法两手抓，UIUC 助理教授孙若愚 60 页长文综述深度学习优化问题](https://mp.weixin.qq.com/s/-vD6OMcyJ_hQ3ms5RW20JA)

[Optimization for deep learning: theory and algorithms](https://arxiv.org/pdf/1912.08957.pdf)

[一个框架看懂优化算法之异同 SGD/AdaGrad/Adam](https://zhuanlan.zhihu.com/p/32230623)

### 复合函数最优化

[Efﬁcient Smooth Non-Convex Stochastic Compositional Optimization via Stochastic Recursive Gradient Descent](https://papers.nips.cc/paper/8916-efficient-smooth-non-convex-stochastic-compositional-optimization-via-stochastic-recursive-gradient-descent)

nips2019快手，针对复合函数的最优化方法。这里复合指的是一个数学期望函数中复合了另一个数学期望，而常规的 ML 目标函数就只有最外面一个数学期望。这种最优化方法在风险管理或 RL 中非常有用，例如在 RL 中解贝尔曼方程，它本质上就是复合函数最优化问题。

### adabound

AdaBound是一种优化程序，旨在提高不可见的数据的训练速度和性能，可用PyTorch实现。

AdaBound：一种基于PyTorch实现的优化器，训练速度堪比Adam，质量堪比SGD（ICLR 2019）

[Adaptive Gradient Methods with Dynamic Bound of Learning Rate](https://openreview.net/forum?id=Bkg3g2R9FX)

<https://github.com/Luolc/AdaBound>

### batchsize与学习率相关

《控制批大小和学习率以很好地泛化：理论和实证证据》(Control Batch Size and Learning Rate to Generalize Well: Theoretical and Empirical Evidence)中，Fengxiang He 的团队在CIFAR数据集上使用SGD训练了1600个ResNet-110和VGG-19模型，发现这些模型的泛化能力与 batch size负相关，与学习率正相关，与批大小/学习率之比负相关。

### backpack框架

[BackPACK: Packing more into backprop](https://arxiv.org/abs/1912.10985)

自动微分框架只在计算平均小批量（mini-batch）梯度时进行优化。但在理论上，小批量梯度方差或 Hessian 矩阵近似值等其他数量可以作为梯度实现高效的计算。研究人员对这些数量抱有极大的兴趣，但目前的深度学习软件不支持自动计算。此外，手动执行这些数量非常麻烦，效率低，生成代码的共享性也不高。这种情况阻碍了深度学习的进展，并且导致梯度下降及其变体的研究范围变窄。与此同时，这种情况还使得复现研究以及新提出需要这些数量的方法之间的比较更为复杂。因此，为了解决这个问题，来自图宾根大学的研究者在本文中提出一种基于 PyTorch 的高效框架 BackPACK，该框架可以扩展反向传播算法，进而从一阶和二阶导数中提取额外信息。研究者对深度神经网络上额外数量的计算进行了基准测试，并提供了一个测试最近几种曲率估算优化的示例应用，最终证实了 BackPACK 的性能。

### Ranger

[可以丢掉SGD和Adam了，新的深度学习优化器Ranger：RAdam + LookAhead强强结合](https://mp.weixin.qq.com/s/htneyNQ779P1qzOafOY-Rw)

### Shampoo

[二阶梯度优化新崛起，超越 Adam，Transformer 只需一半迭代量](https://mp.weixin.qq.com/s/uHrRBS3Ju9MAWbaukiGnOA)

[Second Order Optimization Made Practical](https://arxiv.org/abs/2002.09018)

摘要：目前，无论是从理论还是应用层面来说，机器学习中的优化都是以随机梯度下降等一阶梯度方法为主。囊括二阶梯度和/或二阶数据统计的二阶优化方法虽然理论基础更强，但受限于计算量、内存和通信花销等因素，二阶梯度优化方法的普及度不高。然而在谷歌大脑与普林斯顿大学等研究者的努力下，二阶梯度优化终于在实战大模型上展现出独特的优势。

研究者表示，为了缩短理论和实际优化效果之间的差距，该论文提出了一种二阶优化的概念性验证，并通过一系列重要的算法与数值计算提升，证明它在实际深度模型中能有非常大的提升。具体而言，在训练深度模型过程中，二阶梯度优化 Shampoo 能高效利用由多核 CPU 和多加速器单元组成的异构硬件架构。并且在大规模机器翻译、图像识别等领域实现了非常优越的性能，要比现有的顶尖一阶梯度下降方法还要好。

推荐：本文的亮点在于研究者提出了真正应用的二阶梯度最优化器，在实战大模型上展现出独特的优势。

### 激活函数

### 激活函数汇总

[从ReLU到GELU，一文概览神经网络的激活函数](https://mp.weixin.qq.com/s/np_QPpaBS63CXzbWBiXq5Q)

### GELU

[超越ReLU却鲜为人知，3年后被挖掘：BERT、GPT-2等都在用的激活函数](https://mp.weixin.qq.com/s/LEPalstOc15CX6fuqMRJ8Q)

[Gaussian Error Linear Units (GELUs)](https://arxiv.org/pdf/1606.08415.pdf)

### Relu神经网络的记忆能力

[Small ReLU networks are powerful memorizers: a tight analysis of memorization capacity](https://arxiv.org/abs/1810.07770)

Chulhee Yun等人发表“小型ReLU网络是强大的记忆器：对记忆能力的严格分析”，表明“具有Omega(sqrt(N))隐藏节点的3层ReLU网络可以完美地记忆具有N个点的大多数数据集。

### 梯度泄露

[梯度会泄漏训练数据？MIT新方法从梯度窃取训练数据只需几步](https://mp.weixin.qq.com/s/nz2JFp8Y7WD5UgOpCDagwQ)

[Deep Leakage from Gradients](https://arxiv.org/abs/1906.08935)

### 彩票假设

原始论文：[The lottery ticket hypothesis: Finding sparse, trainable neural networks](http://arxiv.org/abs/1803.03635)

[田渊栋从数学上证明ICLR最佳论文“彩票假设”，强化学习和NLP也适用](https://mp.weixin.qq.com/s/Q3n28uDk1UEi43bN61NF8w)

fb的博客：<https://ai.facebook.com/blog/understanding-the-generalization-of-lottery-tickets-in-neural-networks>

[One ticket to win them all: generalizing lottery ticket initializations across datasets and optimizers](https://arxiv.org/pdf/1906.02773.pdf)

NLP中彩票假设的应用：

[Playing the lottery with rewards and multiple languages: lottery tickets in RL and NLP](https://arxiv.org/pdf/1906.02768.pdf)

[Proving the Lottery Ticket Hypothesis: Pruning is All You Need](https://arxiv.org/pdf/2002.00585.pdf)

Frankle 和 Carbin 在 2018 年提出的彩票假说表明，一个随机初始化的网络包含一个小的子网络，这个子网络在进行单独地训练时，其性能能够与原始网络匹敌。在本文中，研究者证明了一个更有力的假说（正如 Ramanujan 等人在 2019 年所猜想的那样），即对于每个有界分布和每个带有有界权重的目标网络来说，一个具有随机权重的充分过参数化神经网络包含一个具有与目标网络几乎相同准确率的子网络，并且无需任何进一步的训练。

\===>从根本上来说，剪枝随机初始化的神经网络与优化权重值一样重要。

[剪枝与学习权重同等重要，Lottery Ticket Hypothesis第一次被理论证明](https://mp.weixin.qq.com/s/3X48NLdTHYoYeqVS0-A1OQ)

### 知识蒸馏

[一文总览知识蒸馏概述](https://mp.weixin.qq.com/s/-krzT5svcRsGILCDms7-VQ)

### 生成模型

[AAAI 2020 论文解读：关于生成模型的那些事](https://mp.weixin.qq.com/s/b3vSKfHY12XtlIeps7gaNg)

[Probabilistic Graph Neural Network（PGNN）：Deep Generative Probabilistic Graph Neural Networks for Scene Graph Generation](https://grlearning.github.io/papers/135.pdf)

[Reinforcement Learning（RL）: Sequence Generation with Optimal-Transport-Enhanced Reinforcement Learning](https://pdfs.semanticscholar.org/826d/b2e5f340a90fc9672279f9e921b596aba4b7.pdf)

[Action Learning: MALA: Cross-Domain Dialogue Generation with Action Learning](https://arxiv.org/pdf/1912.08442.pdf)

### 双下降问题

[深度学习模型陷阱：哈佛大学与OpenAI首次发现“双下降现象”](https://mp.weixin.qq.com/s/RG2mVNAocf0hjXgMArK9NQ)

[Deep Double Descent: Where Bigger Models and More Data Hurt](https://arxiv.org/pdf/1912.02292.pdf)

### 一些疑难杂症

[如何发现「将死」的ReLu？可视化工具TensorBoard助你一臂之力](https://mp.weixin.qq.com/s/XttlCNKGvGZrD7OQZOQGnw)

### 度量学习

[深度度量学习中的损失函数](https://mp.weixin.qq.com/s/1Tqu8aLn4Jy6ED0Rk3iPHQ)

### 损失函数

### L\_DMI

[NeurIPS 2019 | 一种对噪音标注鲁棒的基于信息论的损失函数](https://mp.weixin.qq.com/s/MtApYev80-xVEd70lLp_zw)

[L\_DMI: An Information-theoretic Noise-robust Loss Function](https://arxiv.org/abs/1909.03388)

<https://github.com/Newbeeer/L_DMI>

### 损失函数的pattern

[Loss Landscape Sightseeing with Multi-Point Optimization](https://arxiv.org/abs/1910.03867)

<https://github.com/universome/loss-patterns>

### softmax优化

### Mixtape

[CMU杨植麟等人再次瞄准softmax瓶颈，新方法Mixtape兼顾表达性和高效性](https://mp.weixin.qq.com/s/DJNWt3SpnjlwzQqUiLhdXQ)

[Mixtape: Breaking the Softmax Bottleneck Efficiently](https://papers.nips.cc/paper/9723-mixtape-breaking-the-softmax-bottleneck-efficiently.pdf)

### 自监督

[OpenAI科学家一文详解自监督学习](https://mp.weixin.qq.com/s/wtHrHFoT2E_HLHukPdJUig)

<https://lilianweng.github.io/lil-log/2019/11/10/self-supervised-learning.html>

[A Cookbook of Self-Supervised Learning](https://arxiv.org/pdf/2304.12210.pdf)

### 机器学习+博弈论

[当博弈论遇上机器学习：一文读懂相关理论](https://mp.weixin.qq.com/s/1t6WuTQpltMtP-SRF1rT4g)

### normalization相关

### BN

[批归一化到底做了什么？DeepMind研究者进行了拆解](https://mp.weixin.qq.com/s/6jAKhdw93E22PPQyBEwBQw)

### FRN

[超越BN和GN！谷歌提出新的归一化层：FRN](https://mp.weixin.qq.com/s/9EjTX-Al28HLV0k1FZPvIg)

[谷歌力作：神经网络训练中的Batch依赖性很烦？那就消了它！](https://mp.weixin.qq.com/s/2QUlIm8AmA9Bc_kpx7Dh6w)

[Filter Response Normalization Layer: Eliminating Batch Dependence in the Training of Deep Neural Networks](https://arxiv.org/abs/1911.09737)

### VAE

[变分推断（Variational Inference）最新进展简述](https://mp.weixin.qq.com/s/olwyTaOGCugt-thgZm_3Mg)

### 优化方法

[On Empirical Comparisons of Optimizers for Deep Learning](https://arxiv.org/pdf/1910.05446.pdf)

摘要：优化器选择是当前深度学习管道的重要步骤。在本文中，研究者展示了优化器比较对元参数调优协议的灵敏度。研究结果表明，在解释文献中由最近实证比较得出的排名时，元参数搜索空间可能是唯一最重要的因素。但是，当元参数搜索空间改变时，这些结果会相互矛盾。随着调优工作的不断增加，更一般的优化器性能表现不会比近似于它们的那些优化器差，但最近比较优化器的尝试要么假设这些包含关系没有实际相关性，要么通过破坏包含的方式限制元参数。研究者在实验中发现，优化器之间的包含关系实际上很重要，并且通常可以对优化器比较做出预测。具体来说，流行的自适应梯度方法的性能表现绝不会差于动量或梯度下降法。

推荐：如何选择优化器？本文从数学角度论证了不同优化器的特性，可作为模型构建中的参考资料。

### 调参

[你有哪些deep learning（rnn、cnn）调参的经验？](https://www.zhihu.com/question/41631631/)

### 表示学习

[窥一斑而知全豹，三篇论文遍历ICLR 2020新型表征方式](https://mp.weixin.qq.com/s/k_vTgZGoVD-pVBjEqI6sfw)

### 新的结构

### NALU

[Measuring Arithmetic Extrapolation Performance](https://arxiv.org/abs/1910.01888)

摘要：神经算术逻辑单元（NALU）是一种神经网络层，可以学习精确的算术运算。NALU 的目标是能够进行完美的运算，这需要学习到精确的未知算术问题背后的底层逻辑。评价 NALU 性能是非常困难的，因为一个算术问题可能有许多种类的解法。因此，单实例的 MSE 被用于评价和比较模型之间的表现。然而，MSE 的大小并不能说明是否是一个正确的方法，也不能解释模型对初始化的敏感性。因此，研究者推出了一种「成功标准」，用来评价模型是否收敛。使用这种方法时，可以从很多初始化种子上总结成功率，并计算置信区间。通过使用这种方法总结 4800 个实验，研究者发现持续性的学习算术推导是具有挑战性的，特别是乘法。

推荐：尽管神经算术逻辑单元的出现说明了使用神经网络进行复杂运算推导是可行的，但是至今没有一种合适的评价神经网络是否能够成功收敛的标准。本文填补了这一遗憾，可供对本领域感兴趣的读者参考。

### 权重无关

<https://weightagnostic.github.io/>

[Weight Agnostic Neural Networks](https://arxiv.org/abs/1906.04358)

[探索权重无关神经网络](https://mp.weixin.qq.com/s/g7o60Ypri0J1e65cZQspiA)

### on-lstm

[Ordered Neurons: Integrating Tree Structures Into Recurrent Neural Networks](https://arxiv.org/abs/1810.09536)

<https://zhuanlan.zhihu.com/p/65609763>

### 其他相关理论

### 因果关系

[贝叶斯网络之父Judea Pearl力荐、LeCun点赞，这篇长论文全面解读机器学习中的因果关系](https://mp.weixin.qq.com/s/E04x_tqWPaQ4CSWfGVbnTw)

[Causality for Machine Learning](https://arxiv.org/abs/1911.10500)

由 Judea Pearl 倡导的图形因果推理（graphical causal inference）源于 AI 研究，并且在很长一段时间内，它与机器学习领域几乎没有任何联系。在本文中，研究者探讨了图形因果推理与机器学习之间已建立以及应该建立哪些联系，并介绍了一些关键概念。本文认为，机器学习和 AI 领域的未解决难题在本质上与因果关系有关，并解释了因果关系领域如何理解这些难题。

<https://www.cnblogs.com/caoyusang/p/13518354.html>

### 能量模型

[ICLR 2020 | 分类器其实是基于能量的模型？判别式分类器设计新思路](https://mp.weixin.qq.com/s/7qcuHvk9UoCvoJRFzQXuHQ)

[Your Classifier is Secretly an Energy Based Model and You Should Treat it Like One](https://arxiv.org/abs/1912.03263)

### 贝叶斯深度学习

正如Emtiyaz Khan在他的受邀演讲《基于贝叶斯原理的深度学习》中所强调的那样，贝叶斯学习和深度学习是非常不同的。根据Khan的说法，深度学习使用“试错”(trial and error)的方法——看实验会把我们带向何方——而贝叶斯原理迫使你事先思考假设(先验)。

与常规的深度学习相比，贝叶斯深度学习主要有两个吸引人的点：不确定性估计和对小数据集的更好的泛化。在实际应用中，仅凭系统做出预测是不够的。知道每个预测的确定性很重要。在贝叶斯学习中，不确定性估计是一个内置特性。

传统的神经网络给出单点估计——使用一组权值在数据点上输出预测。另一方面，贝叶斯神经网络使用网络权值上的概率分布，并输出该分布中所有权值集的平均预测，其效果与许多神经网络上的平均预测相同。因此，贝叶斯神经网络是自然的集合体，它的作用类似于正则化，可以防止过拟合。

拥有数百万个参数的贝叶斯神经网络的训练在计算上仍然很昂贵。收敛到一个后验值可能需要数周时间，因此诸如变分推理之类的近似方法已经变得流行起来。Probabilistic Methods – Variational Inference类发表了10篇关于这种变分贝叶斯方法的论文。

[Importance Weighted Hierarchical Variational Inference](https://arxiv.org/abs/1905.03290)

[A Simple Baseline for Bayesian Uncertainty in Deep Learning](https://arxiv.org/abs/1902.02476)

[Practical Deep Learning with Bayesian Principles](https://arxiv.org/abs/1906.02506)

### 可解释性

[相信你的模型：初探机器学习可解释性研究进展](https://mp.weixin.qq.com/s/7ngrHNd4__MN3Wb5RMv6qQ)

[NeurIPS 2019：两种视角带你了解网络可解释性的研究和进展](https://mp.weixin.qq.com/s/oud7w6MNWPO8svEHZxD4ZA)

[Intrinsic dimension of data representations in deep neural networks](https://arxiv.org/pdf/1905.12784v1.pdf)

对于一个深度网络，网络通过多层神经层渐进的转换输入，这其中的几何解释应该是什么样的呢？本文的作者通过实验发现，以固有维度（ID：intrinsic dimensionality）为切入点，可以发现训练好的网络相比较未训练网络而言，其每层的固有维度数量级均小于每层单元数，而且 ID 的存在可以来衡量网络的泛化性能。

[This Looks Like That: Deep Learning for Interpretable Image Recognition](https://arxiv.org/pdf/1806.10574.pdf)

当人遇到图像判断的时候，总是会分解图片并解释分类的理由，而机器在判断的时候总是跟人的判断会有些差距。本文旨在缩小机器分类和人分类之间的差距，提出了一个 ProtoPNet，根据人判断的机理来分类图像。本文网络通过分解图像，得到不同的原型部分，通过组成这些信息最终得到正确的分类。

challenge sets，大部分是英文，中文比较少。构造方法：

* 从已有数据集泛化：改下位词、同义词、反义词
* 从已有数据集只抽出可用的部分
* 使用模板建模具体语言特征
* 对抗样本

### 子集选择

[AAAI 2020线上分享 | 南京大学：一般约束下子集选择问题的高效演化算法](https://mp.weixin.qq.com/s/gl6HNZZoQcsHdhF2v_uriQ)

[An Efficient Evolutionary Algorithm for Subset Selection with General Cost Constraints](http://www.lamda.nju.edu.cn/qianc/aaai20-eamc-final.pdf)

子集选择问题旨在从 n 个元素中，选择满足约束 c 的一个子集，以最大化目标函数 f。它有很多应用，包括影响力最大化，传感器放置等等。针对这类问题，现有的代表性算法有广义贪心算法和 POMC。广义贪心算法耗时较短，但是受限于它的贪心行为，其找到的解质量往往一般；POMC 作为随机优化算法，可以使用更多的时间来找到质量更好的解，但是其缺乏多项式的运行时间保证。因此，我们提出一个高效的演化算法 EAMC。通过优化一个整合了 f 和 c 的代理函数，它可以在多项式时间内找到目前已知最好的近似解，并且其在多类问题上的试验也显示出比广义贪心算法更好的性能。

[AAAI 2020 | 南京大学提出高效演化算法 EAMC：可更好解决子集选择问题](https://mp.weixin.qq.com/s/QDbWwT5ZP2MNF3NVHX_SzQ)

## 计算机视觉

### cv数据集

[ResNet图像识别准确率暴降40个点！这个ObjectNet让世界最强视觉模型秒变水货](https://mp.weixin.qq.com/s/4kqswia0QKaj5J1505lLOg)

[实测超轻量中文OCR开源项目，总模型仅17M](https://mp.weixin.qq.com/s/enVx8sLoxmaSM8NlUL5IMQ)

<https://github.com/ouyanghuiyu/chineseocr_lite>

### cv基础

[计算机视觉入门大全：基础概念、运行原理、应用案例详解](https://mp.weixin.qq.com/s/uCzd5HPjSUBXGhgvhw_2Cw)

[Pytorch 中的数据增强方式最全解释](https://mp.weixin.qq.com/s/HLdzPymLT3w6gR7lI1wR9A)

[传统计算机视觉技术落伍了吗？不，它们是深度学习的「新动能」](https://mp.weixin.qq.com/s/dIIWAKv9woLO8M0CyN8lsw)

[Deep Learning vs. Traditional Computer Vision](https://arxiv.org/pdf/1910.13796.pdf)

### cv历史

[历史需要重写？AlexNet之前，早有算法完成计算机视觉四大挑战](https://mp.weixin.qq.com/s/xo7bRNKEeT0QHcND6DxThg)

[图像分类最新技术综述论文: 21种半监督、自监督和无监督学习方法一较高低](https://mp.weixin.qq.com/s/tJaNpW7TyUowdn9JRBVnJQ)

### cnn相关

[67页综述深度卷积神经网络架构：从基本组件到结构创新](https://mp.weixin.qq.com/s/acvpHt4zVQPI0H5nHcg3Bw)

[A Survey of the Recent Architectures of Deep Convolutional Neural Networks](https://arxiv.org/pdf/1901.06032.pdf)

[卷积神经网络性能优化](https://zhuanlan.zhihu.com/p/80361782)

[解析卷积的高速计算中的细节，一步步代码带你飞](https://mp.weixin.qq.com/s/Ji2PjZowifkIdGlHJPwEaw)

### 图像分割

### 图像分割综述

[最全综述 | 图像分割算法](https://mp.weixin.qq.com/s/l6b1C0hH9mFbNevfsjE-5w)

[100个深度图像分割算法，纽约大学UCLA等最新综述论文](https://mp.weixin.qq.com/s/VXjNbMN0j0slZaJd8s8sKA)

### MoCo

[何恺明一作，刷新7项检测分割任务，无监督预训练完胜有监督](https://mp.weixin.qq.com/s/-cXOUw9zJteVUkbpRMIWtQ)

[Momentum Contrast for Unsupervised Visual Representation Learning](https://arxiv.org/abs/1911.05722)

### PointRend

[何恺明团队又出神作：将图像分割视作渲染问题，性能显著提升！](https://mp.weixin.qq.com/s/2w_oy3SQB7-k5zq3CM6iSQ)

[Ross、何恺明等人提出PointRend：渲染思路做图像分割，显著提升Mask R-CNN性能](https://mp.weixin.qq.com/s/3vNnqCFTuVHQ58dZRinX4g)

[PointRend: Image Segmentation as Rendering](https://arxiv.org/abs/1912.08193)

### Graph-FCN

[另辟蹊径，中科院自动化所等首次用图卷积网络解决语义分割难题](https://mp.weixin.qq.com/s/i_v1GoR-VzVxmy2Wm97t4w)

[Graph-FCN for image semantic segmentation](https://arxiv.org/pdf/2001.00335.pdf)

使用深度学习执行语义分割在图像像素分类方面取得了巨大进步。但是，深度学习提取高级特征时往往忽略了局部位置信息（local location information），而这对于图像语义分割而言非常重要。

为了避免上述问题，来自中科院自动化所、北京中医药大学的研究者们提出一个执行图像语义分割任务的图模型 Graph-FCN，该模型由全卷积网络（FCN）进行初始化。首先，通过卷积网络将图像网格数据扩展至图结构数据，这样就把语义分割问题转换成了图节点分类问题；然后，使用图卷积网络解决图节点分类问题。研究者称，这是首次将图卷积网络用于图像语义分割的尝试。该方法在 VOC 数据集上获得了有竞争力的 mIOU 性能，相比原始 FCN 模型有 1.34% 的性能提升。

### 目标检测

### 自然场景文字定位

[ICDAR 2019论文：自然场景文字定位技术详解](https://mp.weixin.qq.com/s/l1rmGxOVrXKAaf4yYUt4kQ)

### EfficientDet

[比当前SOTA小4倍、计算量少9倍，谷歌最新目标检测器EfficientDet](https://mp.weixin.qq.com/s/AA6F43A59Ybv7NcZ4jvSLg)

[EfficientDet: Scalable and Efficient Object Detection](https://arxiv.org/abs/1911.09070)

计算机视觉领域，模型效率已经变得越来越重要。在本文中，研究者系统地研究了用于目标检测的各种神经网络架构设计选择，并提出了一些关键的优化措施来提升效率。首先，他们提出了一种加权双向特征金字塔网络（weighted bi-directional feature pyramid network，BiFPN），该网络可以轻松快速地进行多尺度特征融合；其次，他们提出了一种复合缩放方法，该方法可以同时对所有骨干、特征网络和框/类预测网络的分辨率、深度和宽度进行统一缩放。基于这些优化，研究者开发了一类新的目标检测器，他们称之为EfficientDet。在广泛的资源限制条件下，该检测器始终比现有技术获得更高数量级的效率。具体而言，在没有附属条件的情况下，EfficientDet-D7在52M参数和326B FLOPS1的COCO数据集上实现了51.0 mAP的SOTA水平，体积缩小了4倍，使用的FLOPS减少了9.3倍，但仍比先前最佳的检测器还要准确（+0.3% mAP）。

推荐：本文探讨了计算机视觉领域的模型效率问题，分别提出了加权双向特征金字塔网络和复合缩放方法，进而开发了一种新的EfficientDet目标检测器，实现了新的 SOTA 水平。

### YoloVxxx

[超全！YOLO目标检测从V1到V3结构详解](https://mp.weixin.qq.com/s/5weWze-75FwEjfbHDbpPCw)

[【目标检测】YOLOv4特征提取网络——CSPDarkNet结构解析及PyTorch实现](https://blog.csdn.net/EasonCcc/article/details/108879514)

### 图像识别

[显著提升图像识别网络效率，Facebook提出IdleBlock混合组成方法](https://mp.weixin.qq.com/s/tc7DaM8dkq7SjiXtPp4uHA)

[Hybrid Composition with IdleBlock: More Efficient Networks for Image Recognition](https://arxiv.org/pdf/1911.08609.pdf)

近年来，卷积神经网络（CNN）已经主宰了计算机视觉领域。自 AlexNet 诞生以来，计算机视觉社区已经找到了一些能够改进 CNN 的设计，让这种骨干网络变得更加强大和高效，其中比较出色的单个分支网络包括 Network in Network、VGGNet、ResNet、DenseNet、ResNext、MobileNet v1/v2/v3 和 ShuffleNet v1/v2。近年来同样吸引了研究社区关注的还有多分辨率骨干网络。作者认为目前实现高效卷积网络的工作流程可以分成两步：1）设计一种网络架构；2）对该网络中的连接进行剪枝。在第一步，作者研究了人类专家设计的架构与搜索得到的架构之间的共同模式：对于每种骨干网络，其架构都是由其普通模块和归约模块（reduction block）的设计所确定的。第二步会将某些连接剪枝去掉，这样就不能保证每个模块都有完整的信息交换了。Facebook AI 的研究者在这篇论文中通过在网络设计步骤中考虑剪枝，为图像识别任务设计了一种更高效的网络。他们创造了一种新的模块设计方法：Idle。

### 图像补全

[拍照总被路人甲抢镜？那就用这个项目消Ta](https://mp.weixin.qq.com/s/kgQBQz2u8aMzZaHFhWF_VQ)

### 文字检测与识别

[AAAI 2020 | 旷视研究院：深度解读文字检测与识别新突破](https://mp.weixin.qq.com/s/1EewWtY70UgdMXm9mEifsQ)

### 图像合成

[SEAN: Image Synthesis with Semantic Region-Adaptive Normalization](https://arxiv.org/abs/1911.12861)

本论文要解决的问题是使用条件生成对抗网络（cGAN）生成合成图像。具体来说，本文要完成的具体任务是使用一个分割掩码控制所生成的图像的布局，该分割掩码的每个语义区域都具有标签，而网络可以根据这些标签为每个区域「添加」具有真实感的风格。尽管之前已经有一些针对该任务的框架了，但当前最佳的架构是 SPADE（也称为 GauGAN）。因此，本论文的研究也是以 SPADE 为起点的。具体来说，本文针对原始 SPADE 的两个缺陷提出了新的改进方案。本文在几个高难度的数据集（CelebAMaskHQ、CityScapes、ADE20K 和作者新建的 Facades 数据集）上对新提出的方法进行了广泛的实验评估。定量实验方面，作者基于 FID、PSNR、RMSE 和分割性能等多种指标对新方法进行了评估；定性实验方面，作者展示了可通过视觉观察进行评估的样本。

推荐：图像合成是近来非常热门的研究领域，世界各地的研究者为这一任务提出了许多不同的框架和算法，只为能合成出更具真实感的图像。阿卜杜拉国王科技大学和卡迪夫大学近日提出了一种新改进方案 SEAN，能够分区域对合成图像的内容进行控制和编辑（比如只更换眼睛或嘴），同时还能得到更灵活更具真实感的合成结果。有了这个技术，修图换眼睛时不用再担心风格不搭了。

[CVPR 2020 | 让合成图像更真实，上交大提出基于域验证的图像和谐化](https://mp.weixin.qq.com/s/oV9vYbUmXOsdJsMuSGTjXg)

### 人脸识别

[面部识别必看！5篇顶级论文了解如何实现人脸反欺诈、跨姿势识别等](https://mp.weixin.qq.com/s/b2umP_9y6v6xuCdLbZvosg)

### CV相关比赛

[ICCV 2019 COCO & Mapillary挑战赛冠军团队技术分享](https://mp.weixin.qq.com/s/bJOUg9k_EHOrLu7Db7ANLA)

### 3D模型相关

[图像转换3D模型只需5行代码，英伟达推出3D深度学习工具Kaolin](https://mp.weixin.qq.com/s/srHmkY_t3ChFAzhvXG6RPA)

[内存计算显著降低，平均7倍实测加速，MIT提出高效、硬件友好的三维深度学习方法](https://mp.weixin.qq.com/s/kz5ja8K4rPD_m1GvUznByg)

[Point-Voxel CNN for Efficient 3D Deep Learning](https://arxiv.org/pdf/1907.03739.pdf)

[FaceBook开源PyTorch3D：基于PyTorch的新3D计算机视觉库](https://mp.weixin.qq.com/s/2EHv669PUqqgvAGz3XoZ6Q)

<https://github.com/facebookresearch/pytorch3d>

[PolyGen: An Autoregressive Generative Model of 3D Meshes](https://arxiv.org/pdf/2002.10880.pdf)

摘要：在本文中，来自 DeepMind 的研究者提出了一种直接建模网格的方法 PolyGen，该方法利用 Transformer 架构来循序地预测网格的顶点和表面。文中提出的 3D 网格深度生成模型 PolyGen 以对象类、三维像素和图像等一系列输入为条件，同时由于该模型是概率性的，因此它可以生成捕获模糊场景中不确定性的样本。

实验表明，该模型能够生成高质量、可用的网格，并为网格建模任务创建对数似然基准。研究者表示，PolyGen 模型能够生成连贯的、多样化的 3D 网格，并且相信可以扩展该模型在计算机视觉、机器人学和 3D 内容创建中的应用。

推荐：本文的亮点在于，研究者将网格生成问题作为自回归序列建模来处理，同时结合了 Transformers 和指针网络的优势，从而能够灵活地建模长度可变的网格序列。

### GNN+CV

[一文读懂：图卷积在基于骨架的动作识别中的应用](https://mp.weixin.qq.com/s/aMFFQBfVXgQr71nyjpyf0g)

[NTU RGB+D 120: A Large-Scale Benchmark for 3D Human Activity Understanding](https://arxiv.org/abs/1905.04757)

### CV最新进展

### 半弱监督

[10亿照片训练，Facebook半弱监督训练方法刷新ResNet-50 ImageNet基准测试](https://mp.weixin.qq.com/s/t1Js479ZRDAw1XzPdx_nQA)

<https://github.com/facebookresearch/semi-supervised-ImageNet1K-models>

<https://ai.facebook.com/blog/billion-scale-semi-supervised-learning>

Facebook将该方法称为“半弱监督”(semi-weak supervision)，是结合了半监督学习和弱监督学习者两种不同训练方法的有点的一种新方法。通过使用teacher-student模型训练范式和十亿规模的弱监督数据集，它为创建更准确、更有效的分类模型打开了一扇门。如果弱监督数据集(例如与公开可用的照片相关联的hashtags)不能用于目标分类任务，该方法还可以利用未标记的数据集来生成高度准确的半监督模型。

### advprop

[Quoc Le推新论文：打破常规，巧用对抗性样本改进图像识别性能](https://mp.weixin.qq.com/s/lBEihC-4GgxlfWHvZUx42g)

[Adversarial Examples Improve Image Recognition](https://arxiv.org/pdf/1911.09665.pdf)

<https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet>

对抗样本经常被认为是卷积神经网络的一个威胁。而研究者在这篇论文中提出了相反的论点：对抗网络可以被用来提升图像识别模型的准确率，只要使用正确的方式。研究者在这里提出了 AdvProp，这是一个增强对抗训练方法，能够将对抗样本视为额外样本，以方式过拟合。这一方法的关键在于对对抗样本使用了分离的辅助批归一化，因为它们和正常样本的隐藏分布不同。

研究说明，AdvProp 在很多图像识别任务上提升了一系列模型的性能，而且当模型变得更大的时候，性能也会更好。例如，通过将 AdvProp 用在最新的 EfficientNet-B7 模型上，使用 ImageNet 进行训练，研究者可以取得性能点的提升，如 ImageNet (+0.7%)、ImageNet-C (+6.5%)、ImageNet-A (+7.0%)、Stylized- ImageNet (+4.8%）。而在 增强的 EfficientNet-B8 上，这一方法在没有额外数据的情况下达到了 SOTA——85.5% 的 ImageNet top-1 精确度。这一结果超越了使用 3.5B Instagram 数据和 9.4 倍参数量的最佳模型。

### 稀疏性+cv

[Fast Sparse ConvNets](https://arxiv.org/abs/1911.09723v1)

从历史发展的角度来看，对有效推理（efficient inference）的追求已经成为研究新的深度学习架构和构建块背后的驱动力之一。近来的一些示例包括：压缩和激发模块（squeeze-and-excitation module）、Xception 中的深度级可分离卷积（depthwise seperable convolution）和 MobileNet v2 中的倒置瓶颈（inverted bottleneck）。在所有这些示例中，生成的构建块不仅实现了更高的有效性和准确率，而且在领域内得到广泛采用。在本文中，来自 DeepMind 和 Google 的研究者们进一步扩展了神经网络架构的有效构建块，并且在没有结合标准基本体（standard primitive）的情况下，他们主张用稀疏对应（sparse counterpart）来替换这些密集基本体（dense primitive）。利用稀疏性来减少参数数量的想法并不新鲜，传统观点也认为理论浮点运算次数的减少不能转化为现实世界的效率增益。

研究者通过提出一类用于 ARM 和 WebAssembly 的有效稀疏核来纠正这种错误观点，并且进行开源作为 XNNPACK 库的组成部分。借助于稀疏标准体（sparse primitive）的有效实现，研究者表明，MobileNet v1、MobileNet v2 和 EfficientNet 架构的稀疏版本在有效性和准确率曲线（efficiency-accuracy curve）上显著优于强大的密集基线（dense baseline）。在骁龙 835 芯片上，他们提出的稀疏网络比同等的密集网络性能增强 1.3-2.4 倍，这几乎相当于 MobileNet-family 一整代的性能提升。研究者希望他们的研究成果可以促进稀疏性更广泛地用作创建有效和准确深度学习架构的工具。

### 自监督+半监督EnAET

[华为美研所推出EnAET：首次用自监督学习方法加强半监督学习](https://mp.weixin.qq.com/s/rvxjBdBUkwsO-AN39k3FrQ)

[EnAET: Self-Trained Ensemble AutoEncoding Transformations for Semi-Supervised Learning](https://arxiv.org/abs/1911.09265)

<https://github.com/wang3702/EnAET>

### 无监督SimCLR

[Hinton组力作：ImageNet无监督学习最佳性能一次提升7%，媲美监督学习](https://mp.weixin.qq.com/s/8RU3qLWkbP86-6dU2w023A)

[A Simple Framework for Contrastive Learning of Visual Representations](https://arxiv.org/pdf/2002.05709.pdf)

在这篇论文中，研究者发现：

* 多个数据增强方法组合对于对比预测任务产生有效表示非常重要。此外，与有监督学习相比，数据增强对于无监督学习更加有用；
* 在表示和对比损失之间引入一个可学习的非线性变换可以大幅提高模型学到的表示的质量；
* 与监督学习相比，对比学习得益于更大的批量和更多的训练步骤。

基于这些发现，他们在 ImageNet ILSVRC-2012 数据集上实现了一种新的半监督、自监督学习 SOTA 方法——SimCLR。在线性评估方面，SimCLR 实现了 76.5% 的 top-1 准确率，比之前的 SOTA 提升了 7%。在仅使用 1% 的 ImageNet 标签进行微调时，SimCLR 实现了 85.8% 的 top-5 准确率，比之前的 SOTA 方法提升了 10%。在 12 个其他自然图像分类数据集上进行微调时，SimCLR 在 10 个数据集上表现出了与强监督学习基线相当或更好的性能。

### 图像对抗攻击

[胶囊网络显神威：Google AI和Hinton团队检测到针对图像分类器的对抗攻击](https://mp.weixin.qq.com/s/ux81Z5H2ZcC0Rq8Hi6c27w)

## 语音算法

### 语音数据集

### 中文音乐数据集

[中文歌词生成，缺不缺语料？这里有一个开源项目值得推荐](https://mp.weixin.qq.com/s/QKC46npREiCgJr6HKKLqpw)

<https://github.com/yangjianxin1/QQMusicSpider>

数据集链接: <https://pan.baidu.com/s/1WNYLcOrd3hOiATu44gotBg> 提取码: cy6f

### 时域音频分离模型

[时域音频分离模型登GitHub热榜，效果超传统频域方法，Facebook官方出品](https://mp.weixin.qq.com/s/5ZVl2fRZifIDiNI-fU9YWw)

### 中文语音识别

[实战：基于tensorflow 的中文语音识别模型 | CSDN博文精选](https://mp.weixin.qq.com/s/rf6X5Iz4IOVtTdT8qVSi4Q)

### 顺滑度

[赛尔原创 | AAAI20 基于多任务自监督学习的文本顺滑研究](https://mp.weixin.qq.com/s/1DK-6GDLajm3r7JhbKfSLQ)

[Multi-Task Self-Supervised Learning for Disfluency Detection](http://ir.hit.edu.cn/~slwang/AAAI-WangS.1634.pdf)

自动语音识别（ASR）得到的文本中，往往含有大量的不流畅现象。这些不流畅现象会对后面的自然语言理解系统（如句法分析，机器翻译等）造成严重的干扰，因为这些系统往往是在比较流畅的文本上训练的。不流畅现象主要分为两部分，一部分是ASR系统本身识别错误造成的，另一部分是speaker话中自带的。NLP领域主要关注的是speaker话中自带的不流畅现象，ASR识别错误则属于语音识别研究的范畴。顺滑 (Disfluency Detection)任务的目的就是要识别出speaker话中自带的不流畅现象。

### 语音识别加速

[GPU解码提升40倍，英伟达推进边缘设备部署语音识别，代码已开源](https://mp.weixin.qq.com/s/6b-cmb8iVhYk50BpMYsNyQ)

### 唇读

[Hearing Lips: Improving Lip Reading by Distilling Speech Recognizers](https://arxiv.org/pdf/1911.11502.pdf)

年来，得益于深度学习和大型数据集的可用性，唇读（lip reading）已经出现了前所未有的发展。尽管取得了鼓舞人心的结果，但唇读的性能表现依然弱于类似的语音识别，这是因为唇读刺激因素的不确定性导致很难从嘴唇运动视频中提取判别式特征（discriminant feature）。

在本文中，来自浙江大学、斯蒂文斯理工学院和阿里巴巴的研究者提出了一种名为 LIBS（Lip by Speech）的方法，其目的是通过学习语音识别器来增强唇读效果。方法背后的基本原理是：提取自语音识别器的特征可能提供辅助性和判别式线索，而这些线索从嘴唇的微妙运动中很难获得，并且这些线索会因此促进唇阅读器的训练。具体而言，这是通过将语音识别器中的多粒度知识蒸馏到唇阅读器实现的。为了进行这种跨模式的知识蒸馏，研究者不仅利用有效的对齐方案来处理音频和视频之间长度不一致的问题，而且采用一种创造性的过滤策略来重新定义语音识别器的预测结果。研究者提出的方法在 CMLR 和 LRS2 数据集上取得了新的 SOTA 结果，在字符误差率（Character Error Rate，CER）方面分别超出基准方法 7.66% 和 2.75%。

### Live caption

[借助 Live Caption 在设备上生成字幕](https://mp.weixin.qq.com/s/lsTxYF2RU6iIvAe-6iviWw)

### demucs

[Demucs: Deep Extractor for Music Sources with extra unlabeled data remixed](https://arxiv.org/pdf/1909.01174v1.pdf)

<https://github.com/facebookresearch/demucs>

在录制某些歌曲时，每种乐器都分别录制到单独的音轨或stem中。之后在混音和母带阶段，这些词干被合并在一起，生成歌曲。本文的目的是找到这一过程的逆向过程的方法，也就是说要从完成的歌曲中提取每个单独的stem。这个问题的灵感源自所谓“鸡尾酒会效应”，是说人脑可以从一个嘈杂的聊天室的环境中将单独对话分离出来，并专注于这个特定的对话，自带降噪效果。

本文提出的体系架构是SING神经网络体系结构和Wave-U-Net的思想的结合。前者用于符号到乐器的音乐合成，而后者是从混音中提取stem的方法之一。本质上是LSTM、卷积层与U-Net架构的结合。其中卷积层负责体系结构的编码，LSTM层用于解码。为了提高模型性能，本文中的架构不使用批量归一化层。

### 语音版bert

[语音版BERT？滴滴提出无监督预训练模型，中文识别性能提升10%以上](https://mp.weixin.qq.com/s/4wLR_9RVxbTsHKXf-1MLIw)

[Improving transformer-based speech recognition using unsupervised pre-training](https://arxiv.org/pdf/1910.09932.pdf)

### 搜狗录音笔

[投喂4万种噪声，20种语言方言实时转录，搜狗「开挂」录音笔这样炼成](https://mp.weixin.qq.com/s/p4uckiXAkVQVaJhfpISjOQ)

[非常时期，搜狗新一代“AI笔皇”问世！支持同声传译，转写准确率98%](https://mp.weixin.qq.com/s/KWnu_aHwHlhwDxJ2Cj-cZg)

### 音乐推荐相关

<https://paperswithcode.com/search?q_meta=&q=music+recommend>

spotify的paper：

<https://research.atspotify.com/?s=playlist&type=publications>

歌单生成：

[A Comparison of Methods for Treatment Assignment with an Application to Playlist Generation](https://arxiv.org/pdf/2004.11532v3.pdf)

探索利用：

[Explore, Exploit, and Explain: Personalizing Explainable Recommendations with Bandits](https://static1.squarespace.com/static/5ae0d0b48ab7227d232c2bea/t/5ba849e3c83025fa56814f45/1537755637453/BartRecSys.pdf)

## 视频算法

### 视频数据集

### VTAB

[The Visual Task Adaptation Benchmark](https://arxiv.org/abs/1910.04867)

谷歌 AI 推出了「视觉任务适应性基准」（Visual Task Adaptation Benchmark，VTAB）。这是一个多样性的、真实的和具有挑战性的表征基准。这一基准基于以下原则：在所需领域内数据有限的情况下，更好的表征应当能够在未见任务上实现更佳的性能。受启发于推动其他机器学习领域进展的一些基准，如用于自然图像分类的 ImageNet、自然语言处理的 GLUE 和强化学习的 Atari，VTAB 遵循相似的准则：（i）对解决方案施加最小约束，以鼓励创造性；（ii）注重实际；（iii）借助挑战性任务进行评估。

### 视频检索

[用语言直接检索百万视频，这是阿里TRECVID 视频检索冠军算法](https://mp.weixin.qq.com/s/wQRut3_QO0WCTzGklE07DA)

### 视频编码相关

[TIP 2019开源论文：基于深度学习的HEVC多帧环路滤波方法](https://mp.weixin.qq.com/s/OkywKX4XygM8VqkL8A1fcA)

### 视频显著区域检测

[AAAI 2020 | 速度提升200倍，爱奇艺&北航等提出基于耦合知识蒸馏的视频显著区域检测算法](https://mp.weixin.qq.com/s/VbvCTEYC2FSMAff6bkjAjQ)

[Ultrafast Video Attention Prediction with Coupled Knowledge Distillation](https://arxiv.org/pdf/1904.04449.pdf)

### 视频理解

### pyslowfast

[视频识别SOTA模型都在这了—PySlowFast! Facebook AI Research开源视频理解前沿算法代码库](https://mp.weixin.qq.com/s/kRUa4fL64BbxqQ6Y-kuQ1g)

<https://github.com/facebookresearch/SlowFast>

### 视频插帧相关

### DAIN

[Depth-Aware Video Frame Interpolation](https://arxiv.org/pdf/1904.00830)

<https://github.com/baowenbo/DAIN>

视频帧合成是信号处理领域的一个有趣的分支。通常，这都是关于在现有视频中合成视频帧的。如果在视频帧之间完成操作，则称为内插（interpolation）；而在视频帧之后进行此操作，则称为外推（extrapolation）。视频帧内插是一个长期存在的课题，并且已经在文献中进行了广泛的研究。这是一篇利用了深度学习技术的有趣论文。通常，由于较大的物体运动或遮挡，插值的质量会降低。在本文中，作者使用深度学习通过探索深度信息来检测遮挡。

他们创建了称为“深度感知视频帧内插”（Depth-Aware video frame INterpolation，DAIN）的架构。该模型利用深度图、局部插值核和上下文特征来生成视频帧。本质上，DAIN是基于光流和局部插值核，通过融合输入帧、深度图和上下文特征来构造输出帧。 在这些文章中，我们有机会看到一些有趣的论文和在深度学习领域取得的进步。这一领域在不断发展，我们预计2020年会更有趣。

### Quadratic Video Interpolation

[NeurIPS 2019 Spotlight | 超清还不够，商汤插帧算法让视频顺滑如丝](https://mp.weixin.qq.com/s/KUM5Qygxa7EuEYoR-UA_bA)

这个方法的论文被 NeurIPS 2019 接收为 Spotlight 论文，该方法还在 ICCV AIM 2019 VideoTemporal Super-Resolution Challenge 比赛中获得了冠军。

[Quadratic Video Interpolation](https://papers.nips.cc/paper/8442-quadratic-video-interpolation.pdf)

### TVN

[单CPU处理1s视频仅需37ms、GPU仅需10ms，谷歌提出TVN视频架构](https://mp.weixin.qq.com/s/Ev2vBSIPyLpFa9pU4ybcTA)

[Tiny Video Networks](https://arxiv.org/abs/1910.06961v1)

### MvsGCN：多视频摘要

[MvsGCN: A Novel Graph Convolutional Network for Multi-video Summarization](https://dl.acm.org/citation.cfm?doid=3343031.3350938)

试图为视频集合生成单个摘要的多视频摘要，是处理不断增长的视频数据的重要任务。在本文中，我们第一个提出用于多视频摘要的图卷积网络。这个新颖的网络衡量了每个视频在其自己的视频以及整个视频集中的重要性和相关性。提出了一种重要的节点采样方法，以强调有效的特征，这些特征更有可能被选择作为最终的视频摘要。为了解决视频摘要任务中固有的类不平衡问题，提出了两种策略集成到网络中。针对多样性的损失正则化用于鼓励生成多样化的摘要。通过大量的实验，与传统的和最新的图模型以及最新的视频摘要方法进行了比较，我们提出的模型可有效地生成具有良好多样性的多个视频的代表性摘要。它还在两个标准视频摘要数据集上达到了最先进的性能。

### A-GANet

[Deep Adversarial Graph Attention Convolution Network for Text-Based Person Search](https://dl.acm.org/citation.cfm?id=3350991)

新出现的基于文本的行人搜索任务旨在通过对自然语言的查询以及对行人的详细描述来检索目标行人。与基于图像/视频的人搜索（即人重新识别）相比，它实际上更适用，而不需要对行人进行图像/视频查询。在这项工作中，我们提出了一种新颖的深度对抗图注意力卷积网络（A-GANet），用于基于文本的行人搜索。A-GANet利用文本和视觉场景图，包括对象属性和关系，从文本查询和行人画廊图像到学习信息丰富的文本和视觉表示。它以对抗性学习的方式学习有效的文本-视觉联合潜在特征空间，弥合模态差距并促进行人匹配。具体来说，A-GANet由图像图注意力网络，文本图注意力网络和对抗学习模块组成。图像和文本图形注意网络设计了一个新的图注意卷积层，可以在学习文本和视觉特征时有效利用图形结构，从而实现精确而有区别的表示。开发了具有特征转换器和模态鉴别器的对抗学习模块，以学习用于跨模态匹配的联合文本-视觉特征空间。在两个具有挑战性的基准（即CUHK-PEDES和Flickr30k数据集）上的大量实验结果证明了该方法的有效性。

### VRD-GCN

[Video Relation Detection with Spatio-Temporal Graph](https://dl.acm.org/citation.cfm?doid=3343031.3351058)

我们从视觉内容中看到的不仅是对象的集合，还包括它们之间的相互作用。用三元组\<subject，predicate，object>表示的视觉关系可以传达大量信息，以供视觉理解。与静态图像不同，由于附加的时间通道，视频中的动态关系通常在空间和时间维度上都相关，这使得视频中的关系检测变得更加复杂和具有挑战性。在本文中，我们将视频抽象为完全连接的时空图。我们使用图卷积网络使用新颖的VidVRD模型在这些3D图中传递消息并进行推理。我们的模型可以利用时空上下文提示来更好地预测对象及其动态关系。此外，提出了一种使用暹罗网络的在线关联方法来进行精确的关系实例关联。通过将我们的模型（VRD-GCN）与所提出的关联方法相结合，我们的视频关系检测框架在最新基准测试中获得了最佳性能。我们在基准ImageNet-VidVRD数据集上验证了我们的方法。实验结果表明，我们的框架在很大程度上领先于最新技术，一系列的消去研究证明了我们方法的有效性。

### video caption

[AAAI 2020 | 北理工&阿里文娱：结合常识与推理，更好地理解视频并生成描述](https://mp.weixin.qq.com/s/zkf5_vsgdgDgk0OiTTI-IA)

[Joint Commonsense and Relation Reasoning for Image and Video Captioning](https://wuxinxiao.github.io/assets/papers/2020/C-R_reasoning.pdf)

北京理工大学和阿里合作的一篇关于利用对象之间的关系进行图像和视频描述 (image caption/video caption) 的论文。大多数现有方法严重依赖于预训练的对象及其关系的检测器，因此在面临诸如遮挡，微小物体和长尾类别等检测挑战时可能效果不佳。

在本文中，研究者提出了一种联合常识和关系推理的方法 (C-R Reasoning)，该方法利用先验知识进行图像和视频描述，而无需依赖任何目标检测器。先验知识提供对象之间的语义关系和约束，作为指导以建立概括对象关系的语义图，其中一些对象之间的关系是不能直接从图像或视频中获得。特别是，本文的方法是通过常识推理和关系推理的迭代学习算法交替实现的，常识推理将视觉区域嵌入语义空间以构建语义图，关系推理用于编码语义图以生成句子。作者在几个基准数据集上的实验验证了该方法的有效性。

这篇论文并不是聚焦于常识知识和常识推理本身，而是联合常识和关系推理使得图像和视频描述中那些「难以捉摸」，「并非直接可见」的物体或关系现形，使得描述更加精准。

### 小视频推荐

### MMGCN

[MMGCN: Multi-modal Graph Convolution Network for Personalized Recommendation of Micro-video](https://dl.acm.org/citation.cfm?id=3351034)

个性化推荐在许多在线内容共享平台中起着核心作用。为了提供优质的微视频推荐服务，重要的是考虑用户与项目（即短视频）之间的交互以及来自各种模态（例如视觉，听觉和文本）的项目内容。现有的多媒体推荐作品在很大程度上利用多模态内容来丰富项目表示，而为利用用户和项目之间的信息交换来增强用户表示并进一步捕获用户对不同模式的细粒度偏好所做的工作却较少。在本文中，我们建议利用用户-项目交互来指导每种模式中的表示学习，并进一步个性化微视频推荐。我们基于图神经网络的消息传递思想设计了一个多模态图卷积网络（MMGCN）框架，该框架可以生成用户和微视频的特定模态表示，以更好地捕获用户的偏好。具体来说，我们在每个模态中构造一个user-item二部图，并用其邻居的拓扑结构和特征丰富每个节点的表示。通过在三个公开可用的数据集Tiktok，Kwai和MovieLens上进行的大量实验，我们证明了我们提出的模型能够明显优于目前最新的多模态推荐方法。

### ALPINE

[Routing Micro-videos via A Temporal Graph-guided Recommendation System](https://dl.acm.org/citation.cfm?id=3350950)

在过去的几年中，短视频已成为社交媒体时代的主流趋势。同时，随着短视频数量的增加，用户经常被他们不感兴趣的视频所淹没。尽管现有的针对各种社区的推荐系统已经取得了成功，但由于短视频平台中的用户具有其独特的特征：多样化的动态兴趣，多层次的兴趣以及负样本，因此它们无法应用于短视频的一种好的方式。为了解决这些问题，我们提出了一个时间图指导的推荐系统。特别是，我们首先设计了一个新颖的基于图的顺序网络，以同时对用户的动态兴趣和多样化兴趣进行建模。同样，可以从用户的真实负样本中捕获不感兴趣的信息。除此之外，我们通过用户矩阵将用户的多层次兴趣引入推荐模型，该矩阵能够学习用户兴趣的增强表示。最后，系统可以通过考虑上述特征做出准确的推荐。在两个公共数据集上的实验结果证明了我们提出的模型的有效性。

### 长视频剪辑

[让UP主不再为剪视频发愁，百度等提出用AI自动截取故事片段](https://mp.weixin.qq.com/s/yZ1lTEPVK1KaLr9__NC51Q)

[TruNet: Short Videos Generation from Long Videos via Story-Preserving Truncation](https://arxiv.org/pdf/1910.05899v1.pdf)

### AutoFlip

[不想横屏看视频？谷歌开源框架AutoFlip一键截出最精彩竖版视频](https://mp.weixin.qq.com/s/Jtf7ZsploJ40-WninCPuVg)

在使用过程中，只需要将一段视频和目标维度（如截取的长宽比类型）作为输入，AutoFlip 会分析视频内容并提出一个优化路径和裁剪策略，最后输出一段视频。

<https://github.com/google/mediapipe>

<https://github.com/google/mediapipe/blob/master/mediapipe/docs/autoflip.md>

### 快手视频相关工作

[同为工业界最大的推荐业务场景，快手短视频推荐与淘宝推荐有何不同？](https://mp.weixin.qq.com/s/AsJDF-JmbYlv8dYFeYXVKw)

[AI碰撞短视频，从推荐到直播，快手探索了这些ML新思路](https://mp.weixin.qq.com/s/Wn-5VD2-YWwVUWCMEy-lvw)

视频推荐、内容分发优化、视频码率优化这三方面探索提升快手视频体验的新方案。

### EIUM：讲究根源的快手短视频推荐

[Explainable Interaction-driven User Modeling over Knowledge Graph for Sequential Recommendation](https://dl.acm.org/citation.cfm?id=3350893)

### Comyco：基于质量感知的码率自适应策略

[Comyco: Quality-aware Adaptive Video Streaming via Imitation Learning](https://dl.acm.org/citation.cfm?id=3351014)

### Livesmart：智能CDN调度

[Livesmart: a QoS-Guaranteed Cost-Minimum Framework of Viewer Scheduling for Crowdsourced Live Streaming](https://dl.acm.org/citation.cfm?id=3351013)

### google视频相关工作

### 阿里短视频推荐相关工作

[淘宝如何拥抱短视频时代？视频推荐算法实战](https://mp.weixin.qq.com/s/8N09Argm9sNJRYipq3Mipw)

## GAN

### GAN综述

[密歇根大学最新28页综述论文《GANs生成式对抗网络综述：算法、理论与应用》，带你全面了解GAN技术趋势](https://mp.weixin.qq.com/s/31fvudco4KCRq-ngpS4dYQ)

### LOGAN

[BigGAN被干了！DeepMind发布LOGAN：FID提升32%，华人一作领衔](https://mp.weixin.qq.com/s/jglebP4Zb9rZtb2EhWiQDA)

### ShapeMatchingGAN

[ICCV 2019 开源论文 | ShapeMatchingGAN：打造炫酷动态的艺术字](https://mp.weixin.qq.com/s/FWBYNBlSwj-adjcgXMk3XA)

### 图像生成+GAN

[在图像生成领域里，GAN这一大家族是如何生根发芽的](https://mp.weixin.qq.com/s/oEnQPWs5WFak_qwajYKq3A)

### 模式崩塌问题

[GAN：「太难的部分我就不生成了，在下告退」](https://mp.weixin.qq.com/s/yPl2h8E2VKXd83cvwlhAtA)

[Seeing What a GAN Cannot Generate](https://arxiv.org/abs/1910.11626v1)

### imagestylegan++

[Image2StyleGAN++: How to Edit the Embedded Images?](https://arxiv.org/pdf/1911.11544.pdf)

研究者提出了一个名为 Image2StyleGAN++的网络，是一种多应用的图像编辑框架。这一框架从三个方面扩展了近来提出的 Image2StyleGAN。首先，研究者引入了噪声优化机制，用来弥补 W+隐空间嵌入。这一噪声优化机制可以重置图像中的高频特征，并显著提升重建图像的质量。其次，研究者扩展了全局 W+印控机嵌入，以便局部嵌入。第三，研究者将嵌入和激活张量（activation tensor）操纵结合，让局部编辑像全局情感编辑那样有着很高的图像质量。这种编辑方法能够推动很多高质量图像编辑应用，如图像重建、重着色、图像混合、局部风格迁移等。

### stylegan2

[英伟达发布最强图像生成器StyleGAN2，生成图像逼真到吓人](https://mp.weixin.qq.com/s/e1g1B-6bLe0IjNAHMJtGOw)

[如果没有StyleGAN2，真以为初代就是巅峰了：英伟达人脸生成器高能进化，弥补重大缺陷](https://mp.weixin.qq.com/s/t4WWQSTbPWQ7AVwVpTAtcw)

<https://github.com/NVlabs/stylegan2>

[Analyzing and Improving the Image Quality of StyleGAN](https://arxiv.org/pdf/1912.04958.pdf)

### starganv2

[StarGAN v2: Diverse Image Synthesis for Multiple Domains](https://arxiv.org/pdf/1912.01865v1.pdf)

<https://github.com/clovaai/stargan-v2>

特别是在图像创建和处理方面。这个领域中一个非常有趣的问题就是所谓的“图像到图像转换问题”，我们希望将特征从一个图像域转移到另一个图像域（这里的“图像域”代表可以归类为视觉上独特的类别的一组图像）。我们喜欢CycleGAN和StarGAN等旨在解决此问题的解决方案，因此您可以想象几天前看到StarGAN v2论文时我们有多么兴奋。

本文还讨论了另一个问题——域的可伸缩性。这意味着它可以同时解决多个图像域的问题。本质上，这个架构依赖于StarGAN早期版本的成功，并为其添加了样式层。它由四个模块组成：第一个模块是生成器，它负责将输入图像转换为反映域特定样式的输出图像；接下来是映射网络转换器（Mapping Network Transformer），它将潜在代码转换为多个域的样式代码；第三个是样式编码器，它提取图像的样式并将其提供给生成器；最后，判别器可以从多个域中区分真实图像和伪图像。

### nlp+gan

[AAAI 2020 线上分享 | Bert稳吗？解读NLP对抗模型新进展](https://mp.weixin.qq.com/s/Uh2b7XDR8ndAGYrk4oIwug)

[Is BERT Really Robust? A Strong Baseline for Natural Language Attack on Text Classification and Entailment](https://arxiv.org/abs/1907.11932?context=cs)

众所周知，CV 领域的 adversarial attack 被非常广泛的研究，但是在 NLP 领域的对抗攻击却因为文本的离散的特性而难以推进。对于 NLP 的模型来说，那些在人们眼里几乎没变的文本却会被模型非常不同地对待，甚至错判。这些是特别致命的、且急需研究的方向。这是一篇与 MIT 合作的 AAAI 2020 Oral 文章，自然语言对抗样本生成，我们将详细解读如何简单高效地生成自然语言对抗样本，并且高度 attack 文本分类和文本推测的 7 个数据集。

### gan压缩

[韩松、朱俊彦等人提出GAN压缩法：算力消耗不到1/9，现已开源](https://mp.weixin.qq.com/s/SGCoCy8wJEhEpLSHrYK3pQ)

## 图神经网络

<https://daiwk.github.io/posts/links-navigation-gnn.html>

### GNN数据集

[Bengio参与、LeCun点赞：图神经网络权威基准现已开源](https://mp.weixin.qq.com/s/ldkYTvess0Wte5HzKbMBfQ)

<https://github.com/graphdeeplearning/benchmarking-gnns>

### GNN综述

[图神经网络（Graph Neural Networks，GNN）综述](https://mp.weixin.qq.com/s/wgR-NURxXpZdngFicgj7Sg)

[A Comprehensive Survey on Graph Neural Networks](https://arxiv.org/abs/1901.00596)

[网络图模型知识点综述](https://mp.weixin.qq.com/s/b_QqUxFbQ70xmsxGMtoaDQ)

[想入门图深度学习？这篇55页的教程帮你理清楚了脉络](https://mp.weixin.qq.com/s/hyHUkiEyXGn3v-M0d0igVg)

[A Gentle Introduction to Deep Learning for Graphs](https://arxiv.org/pdf/1912.12693.pdf)

[2020年，图机器学习将走向何方？](https://mp.weixin.qq.com/s/YC2gvjbSBs2qOgix6wVhuQ)

常见问题：[QA派\｜GNN工业应用-PinSAGE](https://zhuanlan.zhihu.com/p/195735468)

<https://keg.cs.tsinghua.edu.cn/jietang/publications/KDD23-MLG-keynote.pdf>

### GNN理论研究

[On The Equivalence Between Node Embeddings And Structural Graph Representations](https://arxiv.org/pdf/1910.00452.pdf)

在本文中，来自普渡大学计算机科学系的两位研究者提供了首个用于节点（位置）嵌入和结构化图表征的统一的理论框架，该框架结合了矩阵分解和图神经网络等方法。通过利用不变量理论（invariant theory），研究者表明，结构化表征和节点嵌入之间的关系与分布和其样本之间的关系类似。他们还证明，可以通过节点嵌入执行的任务也同样能够利用结构化表征来执行，反之亦然。此外，研究者还表明，直推学习和归纳学习的概念与节点表征和图表征无关，从而澄清了文献中的另一个困惑点。最后，研究者介绍了用于生成和使用节点嵌入的新的实践指南，从而修复了现在所使用的的标准操作流程的缺陷。

推荐：实证研究结果表明，在本文提出的理论框架加持下，节点嵌入可以成功地作为归纳学习方法使用，并且 non-GNN 节点嵌入在大多数任务上的准确度显著优于简单的图神经网络（GNN）方法。

### 图翻译

[ICDM 2019最佳论文：从图片、文本到网络结构数据翻译，一种新型的多属性图翻译模型](https://mp.weixin.qq.com/s/QwCIfinaLo50428KOi16gg)

### 异构图GNN

[2019年，异质图神经网络领域有哪些值得读的顶会论文？](https://mp.weixin.qq.com/s/ee_Mq2vzJ2z253B7PZZc9w)

### HAN-GNN

[Heterogeneous Graph Attention Network](https://arxiv.org/abs/1903.07293)

<https://github.com/Jhy1993/HAN>

### GTN

[Graph Transformer Networks](https://arxiv.org/abs/1911.06455)

<https://github.com/seongjunyun/Graph_Transformer_Networks>

### HetGNN

[Heterogeneous Graph Neural Network](http://www.shichuan.org/hin/time/2019.KDD%202019%20Heterogeneous%20Graph%20Neural%20Network.pdf)

<https://github.com/chuxuzhang/KDD2019_HetGNN>

### HGAT

[Heterogeneous Graph Attention Networks for Semi-supervised Short Text Classification](http://www.shichuan.org/doc/74.pdf)

[EMNLP 2019开源论文：针对短文本分类的异质图注意力网络](https://mp.weixin.qq.com/s/eCmvUaM4Vg5KCFQJcRO-TQ)

短文本分类在新闻及微博等领域得到了广泛的应用。但是，目前的文本分类算法主要集中于长文本分类并且无法直接应用于短文本分类。这是由于短文本分类的两个独有挑战：

1. 数据的稀疏和歧义：短文本通常不超过 10 个词，提供的信息非常有限。经典的 Bi-LSTM+Attention 往往无法有效的捕获短文本中的语义信息。
2. 标签数量较少：传统的监督学习无法有效工作，尤其是传统深度学习算法需要大量的监督数据。

针对上述两个挑战，本文创新地将短文本建模为异质图（见 Figure 1），通过图数据的复杂交互来解决数据稀疏和歧义带来的挑战。同时，本文提出了一种异质图注意力HGAT来学习短文本的表示并进行分类。HGAT 是一种半监督学习算法可以更好的适用于标签数量较少的场景，如短文本的分类

### MEIRec

[Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation](http://www.shichuan.org/doc/67.pdf)

### GAS

[CIKM最佳应用论文：11亿节点的大型图，看闲鱼如何用图卷积过滤垃圾评论](https://mp.weixin.qq.com/s/YNIwmR8K-H2eKbKoZSZZ-Q)

[Spam Review Detection with Graph Convolutional Networks](https://arxiv.org/pdf/1908.10679)

### AAAI2020 GNN

[AAAI 2020 论文抢先看！图学习GNN火爆，谷歌、港科大、北邮最新力作](https://mp.weixin.qq.com/s/qnVtFKIFlExY4pSvsFtLuQ)

### cluster-GCN

[Google图嵌入工业界最新大招，高效解决训练大规模深度图卷积神经网络问题](https://mp.weixin.qq.com/s/1GHjjJNhUGEo-sFkA1wyXA)

<https://github.com/benedekrozemberczki/ClusterGCN>

### 深层GCN

[从3/4层拓展到56层，如何训练超级深层的图卷积神经网络](https://mp.weixin.qq.com/s/gfqrKwlXBHD66QgCybD4pw)

[Deep GCNs: Can GCNs Go as Deep as CNNs?](https://arxiv.org/abs/1904.03751)

### GNN或者图模型的一些应用场景

### 风控关系

[风控特征—关系网络特征工程入门实践](https://mp.weixin.qq.com/s/EF0S5nGfg2zmIwD2la1H_A)

### 社区发现相关

[最小熵原理：“层层递进”之社区发现与聚类](https://mp.weixin.qq.com/s/0ssSBQC8oFP0JutlKZ3yCA)

### transformer+gnn

[原来Transformer就是一种图神经网络，这个概念你清楚吗？](https://mp.weixin.qq.com/s/DABEcNf1hHahlZFMttiT2g)

## 强化学习

<https://daiwk.github.io/posts/rl-summary.html>

### RL历史

[漫画带你图解强化学习](https://mp.weixin.qq.com/s/MdtjTRGV813t6Mn3JES-pw)

[强化学习70年演进：从精确动态规划到基于模型](https://mp.weixin.qq.com/s/sIS9VvZ3yTtn6puJScuHig)

### RL概述

[强化学习之路——清华博士后解读83篇文献，万字长文总结](https://mp.weixin.qq.com/s/eQslEpJIT1negsbzmcORcA)

pg/ddpg相关

<https://daiwk.github.io/posts/rl-stepbystep-chap9.html>

### MAB相关

### multitask+mab

[多任务学习时转角遇到Bandit老虎机](https://mp.weixin.qq.com/s/8Ks1uayLw6nfKs4-boiMpA)

### RL基础

### srl+drl

[大白话之《Shallow Updates Deep Reinforcement Learning》](https://mp.weixin.qq.com/s/TmucqZyIp9KKMJ3uv3CWGw)

[Shallow Updates Deep Reinforcement Learning](https://arxiv.org/abs/1705.07461)

### 模仿学习

[今晚，NeurIPS 2019 Spotlight论文分享：不完备专家演示下的模仿学习](https://mp.weixin.qq.com/s/8gV8MzEOGBuu5jLPyg97OQ)

[Imitation Learning from Observations by Minimizing Inverse Dynamics Disagreement](https://arxiv.org/abs/1910.04417)

[视频 | NeurIPS 2019分享：清华大学孙富春组提出全新模仿学习理论](https://mp.weixin.qq.com/s/XXO4hkjJkcZ5sTVVKWghEw)

ppt：<https://pan.baidu.com/s/1Zj59PAe4hYhDDh5zd4gWZg>

### 推荐+强化学习

[Deep Reinforcement Learning in Large Discrete Action Spaces](https://arxiv.org/pdf/1512.07679.pdf)

### 2019强化学习论文

[2019年深度强化学习十大必读论文！DeepMind、OpenAI等上榜](https://mp.weixin.qq.com/s/vUIVDkxiQ5c9JhPvs6Pyng)

### ICLR2020强化学习相关

[ICLR 2020 高质量强化学习论文汇总](https://mp.weixin.qq.com/s/l8TP_cFMWFKebBowgJanSQ)

### HER

[“事后诸葛亮”经验池：轻松解决强化学习最棘手问题之一：稀疏奖励](https://mp.weixin.qq.com/s/BYgIk19vYPBVqXoLEsilRg)

本文介绍了一个“事后诸葛亮”的经验池机制，简称为HER，它可以很好地应用于稀疏奖励和二分奖励的问题中，不需要复杂的奖励函数工程设计。强化学习问题中最棘手的问题之一就是稀疏奖励。本文提出了一个新颖的技术：Hindsight Experience Replay（HER），可以从稀疏、二分的奖励问题中高效采样并进行学习，而且可以应用于所有的Off-Policy算法中。

Hindsight意为"事后"，结合强化学习中序贯决策问题的特性，我们很容易就可以猜想到，“事后”要不然指的是在状态s下执行动作a之后，要不然指的就是当一个episode结束之后。其实，文中对常规经验池的改进也正是运用了这样的含义。

### 多智能体RL

### LIIR

[LIIR: Learning Individual Intrinsic Reward in Multi-Agent Reinforcement Learning](https://papers.nips.cc/paper/8691-liir-learning-individual-intrinsic-reward-in-multi-agent-reinforcement-learning)

nips2019快手跟腾讯 AI Lab 和 Robotics X 合作，它希望智能体能快速学会利用自己所观测的信息来相互配合。比如说在星际争霸中，我们发现确实会产生多智能体合作的现象，模型会让一些防高血厚的单位去抗对方的输出，己方输出高的单元会躲到后方攻击。

虽然把所有的 agents 看成是一个 agent，理论上也可以学到最终的配合效果，但是效率会非常低，不具有可扩展性。我们的方法通过一种 intrinsic reward 的机制兼顾了可扩展性和效率，通过鼓励每个 agent 按照单体利益最大化的原则去学习自己的 policy，然后这种 intrinsic reward 的影响会越来越小最后快速达到学到整体最后的方案。

### AlphaStar

[Nature：闭关修炼9个月，AlphaStar达成完全体，三种族齐上宗师，碾压99.8%活跃玩家](https://mp.weixin.qq.com/s/6-iZv40wb0Zyfwmo_D6ibQ)

### TVT

[离人类更近一步！DeepMind最新Nature论文：AI会“回忆”，掌握调取记忆新姿势](https://mp.weixin.qq.com/s/onnV3Jc9xhyQSOB12lCDxw)

[Optimizing agent behavior over long time scales by transporting value](https://arxiv.org/abs/1810.06721)

<https://www.nature.com/articles/s41467-019-13073-w>

<https://github.com/deepmind/deepmind-research/tree/master/tvt>

### upside-down rl

[超有趣！LSTM之父团队最新力作：将强化学习“颠倒”过来](https://mp.weixin.qq.com/s/eZohnFXxl-hnrac6XVZr3g)

[Reinforcement Learning Upside Down: Don’t Predict Rewards - Just Map Them to Actions](https://arxiv.org/pdf/1912.02875.pdf)

RL算法要么使用价值函数预测奖励，要么使用策略搜索使其最大化。该研究提出一种替代方法：颠倒RL(Upside-Down RL)，主要使用监督学习来解决RL问题。

标准RL预测奖励，而UDRL使用奖励作为任务定义的输入，以及时间范围的表示和历史数据以及可期的未来数据的其他可计算函数。

UDRL学会将这些输入观察结果解释为命令，并根据过去(可能是偶然的)经历通过SL将它们映射为行为(或行为概率)。UDRL一般通过输入命令来实现高奖励或其他目标，例如：在一定时间内获得大量奖励！另一篇关于UDRL的首个实验的论文(Training agents with upside-down reinforcement learning)表明，UDRL在某些具有挑战性的RL问题上可以胜过传统的baseline算法。

我们还提出了一种相关的简单而且通用的方法来教机器人模仿人类。首先，对人模仿机器人当前的行为进行录像，然后让机器人通过监督学习将视频(作为输入命令)映射到这些行为上，然后让其概括和模仿先前未知的人类行为。这种Imitate-Imitator的概念实际上可以解释为什么生物进化导致父母会模仿婴儿的咿呀学语。

### 游戏+RL

### 游戏AI历史(alphago系列)

<https://deepmind.com/research/case-studies/alphago-the-story-so-far>

[从α到μ：DeepMind棋盘游戏AI进化史](https://mp.weixin.qq.com/s/IcaxjdDLjihCK-nKBlJVWg)

alphago：[Mastering the game of Go with deep neural networks and tree search](https://storage.googleapis.com/deepmind-media/alphago/AlphaGoNaturePaper.pdf)

alphago zero：[Mastering the game of Go without Human Knowledge](https://www.nature.com/articles/nature24270.epdf?author_access_token=VJXbVjaSHxFoctQQ4p2k4tRgN0jAjWel9jnR3ZoTv0PVW4gB86EEpGqTRDtpIz-2rmo8-KG06gqVobU5NSCFeHILHcVFUeMsbvwS-lxjqQGg98faovwjxeTUgZAUMnRQ)

alpha zero: [Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm](https://arxiv.org/pdf/1712.01815.pdf)

mu zero: [Mastering Atari, Go, Chess and Shogi by Planning with a Learned Model](https://science.sciencemag.org/content/sci/362/6419/1140.full.pdf)

#### alphago

reward：1胜，-1负，中间状态0

3个网络：

* SL：学习棋谱的P
* RL：自己和自己下，学习一个P
* V：学习s的长期收益
* fast roolout：用一个简单的线性模型学习棋谱的P

[蒙特卡罗树搜索+深度学习 -- AlphaGo原版论文阅读笔记](https://blog.csdn.net/dinosoft/article/details/50893291)

mcts：

选Q+u最大的a，

首先模拟n次，

* N(s,a)：对于第i次，如果经过当前的(s,a)，那么+1
* Q(s,a)：对于第i次，如果走到叶子时经过了当前的(s,a)，那么把V(叶子)加上，最后除以N(s,a)
* V(叶子)：(1-lambda) \* value network的输出+lambda \* fastrollout走到结束时的reward
* u(s,a)：与P(s,a)/(1+N(s,a))成正比
* P(s,a)：policy network的输出

最开始还没expand时，Q是0，那SL的P就是prior probabilities。P还能起到减少搜索宽度的作用，普通点得分很低。比较难被select到。有趣的结论是，比较得出这里用SL比RL的要好！！模仿人类走棋的SL结果更适合MCTS搜索，因为人类选择的是 a diverse beam of promising moves。而RL的学的是最优的下法（whereas RL optimizes for the single best move）。所以人类在这一点暂时获胜！不过另一方面，RL学出来的value networks在评估方面效果好。所以各有所长。**搜索次数N一多会扣分， 鼓励exploration其他分支。**

#### alphago zero

模型输出p和v，训练的时候通过mcts去选action。loss就是p的交叉熵+v的rmse

#### alpha zero

主要是特征改了一下，使得可以适用于各种棋,loss没变

#### muzero

模型加了个r，loss里加了个r，

planning需要考虑r V P，还有次数N

### 绝悟

[不服SOLO：腾讯绝悟AI击败王者荣耀顶尖职业玩家，论文入选AAAI，未来将开源](https://mp.weixin.qq.com/s/_qbzHG1IEOvcCpvlAKP0Dw)

[Mastering Complex Control in MOBA Games with Deep Reinforcement Learning](https://arxiv.org/abs/1912.09729)

以 MOBA 手游《王者荣耀》中的 1v1 游戏为例，其状态和所涉动作的数量级分别可达 10^600 和 10^18000，而围棋中相应的数字则为 10^170 和 10^360

为了实现有效且高效的训练，本文提出了一系列创新的算法策略：

* 目标注意力机制；用于帮助 AI 在 MOBA 战斗中选择目标。
* LSTM；为了学习英雄的技能释放组合，以便 AI 在序列决策中，快速输出大量伤害。
* 动作依赖关系的解耦；用于构建多标签近端策略优化（PPO）目标。
* 动作掩码；这是一种基于游戏知识的剪枝方法，为了引导强化学习过程中的探索而开发。
* dual-clip PPO；这是 PPO 算法的一种改进版本，使用它是为了确保使用大和有偏差的数据批进行训练时的收敛性。

### RL+因果

[华为诺亚ICLR 2020满分论文：基于强化学习的因果发现算法](https://mp.weixin.qq.com/s/mCOSvEwTNoX-x3PphLUjhw)

### RL+Active learning

[Ready Policy One: World Building Through Active Learning](https://arxiv.org/pdf/2002.02693.pdf)

基于模型的强化学习（Model-Based Reinforcement Learning，MBRL）为样本高效学习提供了一个有前途的方向，通常可以实现连续控制任务（continuous control task）的 SOTA 结果。然而，许多现有的 MBRL 方法依赖于贪婪策略（greedy policy）与探索启发法的结合，甚至那些利用原则试探索奖金（exploration bonus）的方法也能够以特定方式构建双重目标。

### ES

[Evolution Strategies as a Scalable Alternative to Reinforcement Learning](https://arxiv.org/pdf/1703.03864.pdf)

在本文中，研究者介绍了 Ready Policy One（RP1），这是一种将 MBRL 视为主动学习问题的框架。研究者的目标是在尽可能少样本中改进世界模型（world model）。RP1 通过利用混合目标函数来实现这一目标，该函数在优化过程中的适应性调整至关重要，从而使算法可以权衡不同学习阶段的奖励与探索。此外，一旦拥有足够丰富的轨迹批（trajectory batch）来改进模型，研究者会引入一种原则式机制（principled mechanism）来终止样本收集。

## Auto-ML

### automl综述

<https://github.com/hibayesian/awesome-automl-papers>

[CVPR 2019神经网络架构搜索进展综述](https://mp.weixin.qq.com/s/c7S_hV_8iRhR4ZoFxQYGYQ)

<https://drsleep.github.io/NAS-at-CVPR-2019/>

### HM-NAS

[ICCV Workshop最佳论文提名：通过层级掩码实现高效神经网络架构搜索](https://mp.weixin.qq.com/s/DJaFnfDAVO1KYlhmE1VFpQ)

### FGNAS

[Fine-Grained Neural Architecture Search](https://arxiv.org/abs/1911.07478v1)

在本文中，研究者提出了一种优雅的细粒度神经架构搜索（fine-grained neural architecture search，FGNAS）框架，该框架允许在单层中采用多个异构运算，甚至可以使用几种不同的基础运算生成合成特征图。与其他方法相比，尽管搜索空间非常大，但FGNAS仍可高效运行，因为它能够通过随机梯度下降方法端对端地训练网络。此外，所提出的FGNAS框架允许在预定义的资源约束下根据参数数量、FLOP和时延来优化网络。FGNAS已应用于资源要求很高的计算机视觉任务中的两个关键应用-大型图像分类和图像超分辨率，结果证明可以通过灵活的运算搜索和通道剪枝展示了SOTA性能。

### NAT

[NeurIPS 2019 |自动优化架构，这个算法能帮工程师设计神经网络](https://mp.weixin.qq.com/s/ABNPCpgyk_2EeYwnJFFehg)

[NAT: Neural Architecture Transformer for Accurate and Compact Architectures](https://papers.nips.cc/paper/8362-nat-neural-architecture-transformer-for-accurate-and-compact-architectures.pdf)

### NASP

[比可微架构搜索DARTS快10倍，第四范式提出优化NAS算法](https://mp.weixin.qq.com/s/w9CjMXRmU_XgwDKmvsKNbg)

神经架构搜索（NAS）因其比手工构建的架构更能识别出更好的架构而备受关注。近年来，可微分的搜索方法因可以在数天内获得高性能的 NAS 而成为研究热点。然而，由于超级网的建设，其仍然面临着巨大的计算成本和性能低下的问题。

在本文中，我们提出了一种基于近端迭代（NASP）的高效 NAS 方法。与以往的工作不同，NASP 将搜索过程重新定义为具有离散约束的优化问题和模型复杂度的正则化器。由于新的目标是难以解决的，我们进一步提出了一种高效的算法，由近端启发法进行优化。

通过这种方式，NASP 不仅比现有的可微分的搜索方法速度快，而且还可以找到更好的体系结构并平衡模型复杂度。最终，通过不同任务的大量实验表明，NASP 在测试精度和计算效率上均能获得更好的性能，在发现更好的模型结构的同时，速度比 DARTS 等现有技术快 10 倍以上。此外，NASP 消除了操作之间的关联性。

[Efficient Neural Architecture Search via Proximal Iterations](https://arxiv.org/abs/1905.13577)

<https://github.com/xujinfan/NASP-codes>

### NASP+推荐系统

[Efficient Neural Interaction Functions Search for Collaborative Filtering](https://arxiv.org/pdf/1906.12091)

<https://github.com/quanmingyao/SIF>

<https://www.tuijianxitong.cn/cn/school/openclass/27>

<https://www.tuijianxitong.cn/cn/school/video/26>

### automl+nlp

[超强大自动NLP工具！谷歌推出AutoML自然语言预训练模型](https://mp.weixin.qq.com/s/sh5akbFh_fTTp0ku0LRnvw)

### nni

[长期盘踞热榜，微软官方AutoML库教你三步学会20+炼金基本功](https://mp.weixin.qq.com/s/MjNs3fVChn01KLQdfr2VKw)

<https://github.com/microsoft/nni>

### 视频NAS

[比手工模型快10\~100倍，谷歌揭秘视频NAS三大法宝](https://mp.weixin.qq.com/s/0kGJfKARKs2TuIQ4YJYbUA)

## few-shot & meta-learning

<https://daiwk.github.io/posts/ml-few-shot-learning.html>

[英伟达小样本换脸AI：金毛一秒变二哈，还有在线试玩](https://mp.weixin.qq.com/s/xyfw3eFmMx6vyt9lvv4fBQ)

### meta-learning

[NeurIPS提前看 | 四篇论文，一窥元学习的最新研究进展](https://mp.weixin.qq.com/s/F1MhWTUUdT3qpuZOmKPVbw)

### few-shot数据集

[FewRel 2.0数据集：以近知远，以一知万，少次学习新挑战](https://mp.weixin.qq.com/s/fnR_-B0PEnSpnwDN9r6btg)

### incremental few-shot

[多伦多大学提出注意式吸引器网络，实现渐进式少量次学习](https://mp.weixin.qq.com/s/pY5TElFk9DXK0R_oWfREdw)

[Incremental Few-Shot Learning with Attention Attractor Networks](https://arxiv.org/abs/1810.07218)

<https://github.com/renmengye/inc-few-shot-attractor-public>

### few-shot无监督img2img

[Few-Shot Unsupervised Image-to-Image Translation](https://arxiv.org/abs/1905.01723)

本项目的灵感来自人类自身。人可以从少量示例中获取新对象的本质，并进行概括。本项目实现了一种无监督模式的图像到图像转换算法，在测试时仅由几个示例图像加以确定，就能用于之前未见过的新目标类。

<https://github.com/NVlabs/FUNIT>

### TADAM

<https://blog.csdn.net/liuglen/article/details/84193555>

[TADAM:Task dependent adaptive metric for improved few-shot learning](https://papers.nips.cc/paper/7352-tadam-task-dependent-adaptive-metric-for-improved-few-shot-learning.pdf)

[meta-learning with latent embedding optimization](https://arxiv.org/abs/1807.05960)

nips18的tadam还有这篇，基本思路都是把问题先转化成做样本matching的deep metric learning任务 并对类目信息做task condition

### AutoGRD

CIKM 2019最佳论文

<https://daiwk.github.io/assets/autogrd.pdf>

近来，非机器学习人士也希望能够使用相关的算法进行应用。其中一个主要的挑战是，他们需要选择算法并用它来解决问题。如果能够选择正确的算法，在给定数据集、任务和评价方法的情况下可以使算法得到很好的效果。

本文中，研究者提出了一个名为 AutoGRD 的算法，这是一种新颖的元学习算法，用于算法推荐。AutoGRD 首先将数据表示为图，并将其隐式表示提取出来。提取出来的表示会被用来训练一个排序元模型，这个模型能够精确地对未见数据集提供表现最好的算法。研究者将这一算法在 250 个数据集上进行了测试，在分类和回归任务上都表现出了很高的性能，而且 AutoGRD 比现有的元学习 SOTA 模型和贝叶斯算法表现得都要好。

### few-shot的一些应用

[论文推荐 | 基于单阶段小样本学习的艺术风格字形图片生成](https://mp.weixin.qq.com/s/AwdgQeiOeq394I4c7s4Qxw)

### nips 2019 few-shot

[NeurIPS 2019 少样本学习研究亮点全解析](https://mp.weixin.qq.com/s/XHfibJQGzcL8OhJCpoqjqQ)

## 压缩与部署

### 压缩综述

[深度学习助力数据压缩，一文读懂相关理论](https://mp.weixin.qq.com/s/YBJwLqqL7aVUTG0LaUbwxw)

### layer dropout

[模型压缩实践系列之——layer dropout](https://mp.weixin.qq.com/s/K1R_thLJqegm6QDj2GA5ww)

### 剪枝相关

[2019年的最后一个月，这里有6种你必须要知道的最新剪枝技术](https://mp.weixin.qq.com/s/dABJbmPyEyKugdntHJqwsw)

### slimmable networks

[深度学习模型剪枝：Slimmable Networks三部曲](https://mp.weixin.qq.com/s/Yiu3GNzzWtuX7aszyKKt5A)

### TAS(NAS+剪枝)

[Network Pruning via Transformable Architecture Search](https://arxiv.org/pdf/1905.09717.pdf)

<https://github.com/D-X-Y/NAS-Projects>

网络剪枝是深度学习的一个有趣的领域。其思路是分析神经网络的结构，并在其中找到“死角”和有用的参数。然后按照估计好的深度和宽度建立一种新架构，称为剪枝网络。然后，可以将来自原网络中的有用参数传输到新网络。这种方式对于深度卷积神经网络（CNN）特别有用，如果在嵌入式系统中进行部署，网络规模可能会变得很大且不切实际。在前一种情况下，网络剪枝可以减少超参数数量，降低CNN的计算成本。

本文实际上一开始就进行了大型网络的训练。然后通过传输体系结构搜索（TAS）提出了搜索小型网络的深度和宽度的建议。最后，使用知识提炼将大型网络中的知识转移到小型网络中。

### GDP

[GDP：Generalized Device Placement for Dataflow Graphs](https://arxiv.org/pdf/1910.01578.pdf)

大型神经网络的运行时间和可扩展性会受到部署设备的影响。随着神经网络架构和异构设备的复杂性增加，对于专家来说，寻找合适的部署设备尤其具有挑战性。现有的大部分自动设备部署方法是不可行的，因为部署需要很大的计算量，而且无法泛化到以前的图上。为了解决这些问题，研究者提出了一种高效的端到端方法。该方法基于一种可扩展的、在图神经网络上的序列注意力机制，并且可以迁移到新的图上。在不同的表征深度学习模型上，包括 Inception-v3、AmoebaNet、Transformer-XL 和 WaveNet，这种方法相比人工方法能够取得 16% 的提升，以及比之前的最好方法有 9.2% 的提升，在收敛速度上快了 15 倍。为了进一步减少计算消耗，研究者在一系列数据流图上预训练了一个策略网络，并使用 superposition 网络在每个单独的图上微调，在超过 50k 个节点的大型图上得到了 SOTA 性能表现，例如一个 8 层的 GNMT。

推荐：本文是谷歌大脑的一篇论文，通过图网络的方法帮助将模型部署在合适的设备上。推荐收到硬件设备限制，需要找到合适部署图的方法的读者参考。

[ICCV 2019 提前看 | 三篇论文，解读神经网络压缩](https://mp.weixin.qq.com/s/86A9kZkl_sQ1GrHMJ6NWpA)

### metapruning

[MetaPruning: Meta Learning for Automatic Neural Network Channel Pruning](https://arxiv.org/abs/1903.10258)

旷视。近年来，有研究表明无论是否保存了原始网络的权值，剪枝网络都可以达到一个和原始网络相同的准确率。因此，通道剪枝的本质是逐层的通道数量，也就是网络结构。鉴于此项研究，Metapruning决定直接保留裁剪好的通道结构，区别于剪枝的裁剪哪些通道。

本文提出来一个Meta network，名为PruningNet，可以生成所有候选的剪枝网络的权重，并直接在验证集上评估，有效的搜索最佳结构。

### data-free student

[Data-Free Learning of Student Networks](https://arxiv.org/abs/1904.01186v1)

该篇论文是华为提出的一篇蒸馏方向的论文，其主要的创新点是提出的蒸馏过程**不需要原始训练数据的参与**。

### 样本相关性用于蒸馏

[Correlation Congruence for Knowledge Distillation](https://arxiv.org/abs/1904.01802)

这篇论文是由商汤提出的一篇蒸馏方向论文，其主要的亮点在于研究**样本之间的相关性**，利用这种相关性作为蒸馏的知识输出。

### pu learning+压缩

[视频 | NeurIPS 2019分享：华为诺亚方舟提出基于少量数据的神经网络模型压缩技术](https://mp.weixin.qq.com/s/yAQxDASOg-w5NLi_dSyVsA)

[Positive-Unlabeled Compression on the Cloud](https://arxiv.org/pdf/1909.09757.pdf)

NeurIPS 2019，华为诺亚方舟。神经网络的小型化已经在 cnn 网络中取得了巨大的成功，并且能够在终端设备上例如手机、相机等进行落地应用。然而，由于隐私方面等限制，在实际进行神经网络的小型化时，可能只存在少量标记过的训练数据。如何在这种情况下压缩神经网络并取得好的结果，是急需解决的问题。本讲座首先介绍了半监督学习的正类与未标记学习（pu learning）方法，之后介绍了基于**pu learning**的少量数据下的**神经网络模型压缩**方法。

### 对抗训练+压缩

[Adversarially Trained Model Compression: When Robustness Meets Efﬁciency](https://papers.nips.cc/paper/8410-model-compression-with-adversarial-robustness-a-unified-optimization-framework)

快手nips2019，把各种压缩方法都集中到一起，并做一种联合优化，这和之前按照 Pipeline 的形式单独做压缩有很大的不同。与此同时，模型还能抵御对抗性攻击。

### GSM

[Global Sparse Momentum SGD for Pruning Very Deep Neural Networks](https://papers.nips.cc/paper/8867-global-sparse-momentum-sgd-for-pruning-very-deep-neural-networks)

快手nips2019，一般剪枝方法都需要大量调参以更好地保留模型性能，而全局稀疏动量 SGD 会端到端地学习到底哪些权重比较重要，重要的就少压缩一点，不重要的就多压缩一点。核心思想在于，我们给定一个压缩率，模型在训练中就能自己剪裁，并满足这个压缩率。

### 无监督量化

[ResNet压缩20倍，Facebook提出新型无监督模型压缩量化方法](https://mp.weixin.qq.com/s/eUfy_MhyD3mEa73j4m6evA)

[And the Bit Goes Down: Revisiting the Quantization of Neural Networks](https://arxiv.org/abs/1907.05686)

### Autocompress

[AAAI 2020 | 滴滴&东北大学提出自动剪枝压缩算法框架，性能提升120倍](https://mp.weixin.qq.com/s/4UcjyNQLp7_BNT-LzuscCw)

[AutoCompress: An Automatic DNN Structured Pruning Framework forUltra-High Compression Rates](https://arxiv.org/abs/1907.03141)

## 硬件

### 硬件综述

[2小时演讲，近140页PPT，这个NeurIPS Tutorial真是超硬核的AI硬件教程](https://mp.weixin.qq.com/s/h5aZi4vHCQIJNrJbhOCMRg)

[Efficient Processing of Deep Neural Network: from Algorithms to Hardware Architectures](http://eyeriss.mit.edu/2019_neurips_tutorial.pdf)

### TPU

[TPU的起源，Jeff Dean综述后摩尔定律时代的ML硬件与算法](https://mp.weixin.qq.com/s/XXO4hkjJkcZ5sTVVKWghEw)

[【Jeff Dean独自署名论文】深度学习革命引领计算机架构与AI芯片未来](https://mp.weixin.qq.com/s/4YDH8WT31XEJxy26s4U1mA)

[The Deep Learning Revolution and Its Implications for Computer Architecture and Chip Design](https://arxiv.org/abs/1911.05289)

[Kaggle竞赛硬件如何选择？不差钱、追求速度，那就上TPU吧](https://mp.weixin.qq.com/s/HK-lq-6_LxzVkBo9k7kjMg)

### pixel 4

[数十亿次数学运算只消耗几毫瓦电力，谷歌开源Pixel 4背后的视觉模型](https://mp.weixin.qq.com/s/uySIMxsZRmDLq-5zAZO9bQ)

2019年11月，谷歌发布了 MobileNetV3 和进行了 Pixel 4 Edge TPU 优化后的 MobileNetEdgeTPU 模型的源代码及检查点（checkpoint）。这些模型是最新的可感知硬件（hardware-aware）的自动机器学习（AutoML）技术与一些新型架构设计的结晶。

<http://ai.googleblog.com/2019/11/introducing-next-generation-on-device.html>

MobileNetV3 和 MobileNetEdgeTPU 的代码，以及用于 ImageNet 分类的浮点和量化的检查点，都可以在 MobileNet 的 github 主页上找到：<https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet>。

在 Tensorflow 目标检测 API 中提供了 MobileNetV3 和 MobileNetEdgeTPU 目标检测的开源实现：<https://github.com/tensorflow/models/tree/master/research/object_detection>。

MobileNetV3 语义分割的 TensorFlow 版开源实现可以在 DeepLab 中找到：<https://github.com/tensorflow/models/tree/master/research/deeplab>。

### MNNKit

[阿里开源MNNKit：基于MNN的移动端深度学习SDK，支持安卓和iOS](https://mp.weixin.qq.com/s/r3GxEfcrmlps03Yxw7kdaw)

### deepshift

[把CNN里的乘法全部去掉会怎样？华为提出移动端部署神经网络新方法](https://mp.weixin.qq.com/s/ufn04nrOrD6XuziH9H3Ehw)

[DeepShift: Towards Multiplication-Less Neural Networks](https://arxiv.org/pdf/1905.13298.pdf)

<https://github.com/mostafaelhoushi/DeepShift>

### 传感器相关

[基于传感器的人类行为识别DL方法难在哪？这篇综述列了11项挑战](https://mp.weixin.qq.com/s/OnUaZyO9ZMmQlpacKbU7ug)

## 架构

### 分布式机器学习

[MLSys提前看 | 机器学习的分布式优化方法](https://mp.weixin.qq.com/s/dc2KJENJuwOJE6Mg8sfvTA)

[机器学习系统(MLsys)综述：分布式、模型压缩与框架设计](https://mp.weixin.qq.com/s/lG74FQr-TIff-yaWfWFx1A)

### JAX

[DeepMind发布神经网络、强化学习库，网友：推动JAX发展](https://mp.weixin.qq.com/s/6p-dYObU0p8iayS3Ba4YtA)

[​Jax 生态再添新库：DeepMind 开源 Haiku、RLax](https://mp.weixin.qq.com/s/XMgskf2b7U6N8OZOPZ4fSw)

Haiku：<https://github.com/deepmind/haiku>

RLax：<https://github.com/deepmind/rlax>

### trax

[谷歌大脑开源Trax代码库，你的深度学习进阶路径](https://mp.weixin.qq.com/s/tLAzDnAr5a2TwafE4Jg91g)

<https://github.com/google/trax>

### spark

[Spark 通信篇 | spark RPC 模块篇](https://mp.weixin.qq.com/s/_Zwknq_yd5SbZ85RnXX9xQ)

[PySpark源码解析，教你用Python调用高效Scala接口，搞定大规模数据分析](https://mp.weixin.qq.com/s/wWhhDU0LQUVtJcs1S8cZoA)

### kaggle相关工具

[Kaggle最流行NLP方法演化史，从词袋到Transformer](https://mp.weixin.qq.com/s/qbttUHimbksMqFDfOtc2Xg)

### blink

[伯克利与微软联合发布：任意网络结构下的最优GPU通信库Blink](https://mp.weixin.qq.com/s/MS7EP5NJql-j0Uw_lxnuiw)

[Blink: Fast and Generic Collectives for Distributed ML](https://arxiv.org/abs/1910.04940)

### cortex

[模型秒变API只需一行代码，支持TensorFlow等框架](https://mp.weixin.qq.com/s/QLu53DKpnL07gId3uvuEpw)

<https://github.com/cortexlabs/cortex>

<https://daiwk.github.io/posts/platform-cortex.html>

### optuna

[召唤超参调优开源新神器：集XGBoost、TensorFlow、PyTorch、MXNet等十大模块于一身](https://mp.weixin.qq.com/s/UYhK1guQMnrjQ5KoZ4TRIg)

<https://github.com/optuna/optuna>

### DALI

[英伟达DALI加速技巧：让数据预处理速度比原生PyTorch快4倍](https://mp.weixin.qq.com/s/BUHEkeN8nOyf5y9pf901gA)

DALI 和 TensorFlow 自带的 DataLoader 类似，是一个专门用于加速数据预处理过程的库。英伟达数据加载库 DALI 是一个便捷式开源库，用于图像或视频的解码及增强，从而加速深度学习应用。通过并行训练和预处理过程，减少了延迟及训练时间，并为当下流行的深度学习框架中的内置数据加载器及数据迭代器提供了一个嵌入式替代器，便于集成或重定向至不同框架。

### tf

### tf-lite

[借助 TFLite GPU Delegate 的实时推理扫描书籍](https://mp.weixin.qq.com/s/8Vbpq2YQ_VTt6CxCq6g0eQ)

### tensorboard.dev

[可视化ML实验数据：谷歌推出免费托管服务，TensorBoard.dev可在线一键共享](https://mp.weixin.qq.com/s/60H78eHYCz8qtJgq-cAgRw)

### pytorch

#### torch里的categorical分布(类别分布)

<https://blog.csdn.net/qq_37388085/article/details/127251550>

<https://zhuanlan.zhihu.com/p/59550457>

#### pytorch设计思路

[NeurIPS顶会接收，PyTorch官方论文首次曝光完整设计思路](https://mp.weixin.qq.com/s/_hZSIha2MURdH3oUKhWVRw)

[PyTorch: An Imperative Style, High-Performance Deep Learning Library](https://papers.nips.cc/paper/9015-pytorch-an-imperative-style-high-performance-deep-learning-library.pdf)

#### pytorch分布式训练

[了解Pytorch 分布式训练，这一篇足够了!](https://mp.weixin.qq.com/s/P1vVkZglyXtTrYqLh8sHAw)

#### Texar-PyTorch

[Texar-PyTorch：在PyTorch中集成TensorFlow的最佳特性](https://mp.weixin.qq.com/s/PyV6uQk5gAT9PjAiU7Xi2w)

<https://github.com/asyml/texar>

### Streamlit

[从Python代码到APP，你只需要一个小工具：GitHub已超3000星](https://mp.weixin.qq.com/s/WZDuxH-SYZlD6DED539J6Q)

### paddle

[提速1000倍，预测延迟少于1ms，百度飞桨发布基于ERNIE的语义理解开发套件](https://mp.weixin.qq.com/s/C5TcRezsJFlXK1UQEz7QzQ)

[20+移动端硬件，Int8极速推理，端侧推理引擎Paddle Lite 2.0 正式发布](https://mp.weixin.qq.com/s/DokAiDgHqgeAY6S_eA4ggA)

[AI产业化应用落地不用愁，这里有份国产最大框架上手完整解析](https://mp.weixin.qq.com/s/Q3lK87RvqBrwuTbrszdREg)

[强化学习、联邦学习、图神经网络，飞桨全新工具组件详解](https://mp.weixin.qq.com/s/TFXXOZPU-40NdOmk4lb-iw)

[YOLOv3比原作高10个点，飞桨更新至73个视觉算法、203个预训练模型](https://mp.weixin.qq.com/s/WjJFTMvVtToeAn3QXsoewQ)

### TensorRT

[手把手教你采用基于TensorRT的BERT模型实现实时自然语言理解](https://mp.weixin.qq.com/s/rvoelBO-XjbswxQigH-6TQ)

<https://developer.nvidia.com/deep-learning-software>

[7倍AI算力芯片，TensorRT重大更新，英伟达GTC新品全介绍](https://mp.weixin.qq.com/s/aK-7MFHyelSqPqR812uFug)

### 开源gnn平台

<https://daiwk.github.io/posts/platform-gnn-frameworks.html>

### dgl

[Amazon图神经网络库DGL零基础上手指南](https://mp.weixin.qq.com/s/OyhRANA044waOdIA-VuB-A)

### plato

[十亿节点大规模图计算降至「分钟」级，腾讯开源图计算框架柏拉图](https://github.com/tencent/plato)

### angel(java)

<https://github.com/Angel-ML/angel>

[腾讯大数据将开源高性能计算平台 Angel，机器之心专访开发团队](https://mp.weixin.qq.com/s/wyv2gApIk_JJx6ToMETZRA)

[跻身世界顶级AI项目：腾讯机器学习平台Angel从LF AI基金会毕业](https://mp.weixin.qq.com/s/Tyv3BsPsh6HSNomZd10i2Q)

### bytegraph

[字节跳动自研万亿级图数据库 & 图计算实践](https://mp.weixin.qq.com/s/uYP8Eyz36JyTWska0hvtuA)

### tensorlayer

[几行代码轻松实现，Tensorlayer 2.0推出深度强化学习基准库](https://mp.weixin.qq.com/s/4nbqS7YCUAsOVPOQtg5jDQ)

### MAX

<https://github.com/IBM/MAX-Framework>

<https://github.com/IBM/MAX-Skeleton>

cikm 2019最佳Demo奖

[Model Asset eXchange: Path to Ubiquitous Deep Learning Deployment](https://arxiv.org/abs/1909.01606)

IBM 的研究者提出了一种名为 Model Asset Exchange（MAE）的系统，使得开发人员可以方便地利用当前最新的 DL 模型。无论底层的 DL 编程框架是什么，该模型都能提供一个开源的 Python 库（MAX 框架），该库封装 DL 模型，并使用标准化的 RESTful API 统一编程接口。这些 RESTful API 使得开发者能够在推理任务中利用封装的 DL 模型，无需完全理解不同的 DL 编程框架。利用 MAX，研究者封装并开源了来自不同研究领域的 30 多个 SOTA DL 模型，包括计算机视觉、自然语言处理和信号处理等。

### CogDL

[集成图网络模型实现、基准测试，清华推出图表示学习工具包](https://mp.weixin.qq.com/s/PEltOwR1Am7RX6N-4UN9vw)

<http://keg.cs.tsinghua.edu.cn/cogdl/index.html>

与其他图表示学习工具包相比，CogDL 具有以下特点：

* 稀疏性：在具有数千万节点的大规模网络上实现快速网络嵌入；
* 任意性：能够处理属性化、多路和异构等不同图结构的网络；
* 并行处理：在多个 GPU 上实现不同种子和模型的并行训练并自动输出结果表格；
* 可扩展性：轻松添加新的数据集、模型和任务并在所有现有的模型/数据集上测试。

pytorch版本：

<https://github.com/THUDM/cogdl/>

tf版本：

<https://github.com/imsheridan/CogDL-TensorFlow>

### auto-ml架构

[比谷歌AutoML快110倍，全流程自动机器学习平台应该是这样的](https://mp.weixin.qq.com/s/2dBJZLgVICXRmR7JcmnciA)

### megengine

[国产深度学习框架MegEngine，旷视打造，三月底即将开源](https://mp.weixin.qq.com/s/Eq8L-NuESY1uIqUO2Qxcew)

### 异构硬件加速

[广告深度学习计算：异构硬件加速实践](https://mp.weixin.qq.com/s/DFkzvhLwLFlOg6QJwtSBbw)

### GPU基础知识

CPU与GPU之间通过PCIe进行连接

## 课程资源

### 分布式系统课程

[MIT经典课程“分布式系统”视频版上线！网友：终于来了非偷拍清晰版本](https://mp.weixin.qq.com/s/xzVedmaoNMtDxIELr2sNqQ)

### 微软ml基础课程(win10版)

[GitHub 6600星，面向中国人：微软AI教育与学习共建社区2.0登场！](https://mp.weixin.qq.com/s/45Wow1_kO_X6S0bm8j5bMg)

<https://github.com/microsoft/ai-edu>

### 无监督课程

[14周无监督学习课程，UC伯克利出品，含课件、视频](https://mp.weixin.qq.com/s/leQEWqfBfLfAnyD0LU0uqA)

### tf2.0课程

[全新版本，李沐《动手学深度学习》TF2.0版本来了](https://mp.weixin.qq.com/s/XNPWUui4Z9tQ1iKOEV43ZQ)

<https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0>

TensorFlow 2.0 深度学习开源书：

[TensorFlow 2.0中文开源书项目：日赞700，登上GitHub热榜](https://mp.weixin.qq.com/s/Ldn9dHKrQ1IVde5fqDM0iw)

<https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book>

<https://daiwk.github.io/posts/platform-tensorflow-2.0.html>

[TensorFlow 2.0 常用模块1：Checkpoint](https://mp.weixin.qq.com/s/KTj3wJSA4_95pJvN-pkoZw)

[TensorFlow 2.0 常用模块2：TensorBoard](https://mp.weixin.qq.com/s/zLpDVFEHBwUip2je6ME6bw)

[TensorFlow 2.0 常用模块3：tf.data](https://mp.weixin.qq.com/s/SNBz1JkhimkVIQMnFdvaAg)

[TensorFlow 2.0 常用模块4：TFRecord](https://mp.weixin.qq.com/s/Rd5Byxs5WJprAjlzAFun3A)

[TensorFlow 2.0 常用模块5：@tf.function](https://mp.weixin.qq.com/s/k3cHBDRofKGIVfT5TIZedA)

[TensorFlow 2.0中的tf.keras和Keras有何区别？为什么以后一定要用tf.keras？](https://mp.weixin.qq.com/s/RcolwQnCqrAsGaKEK0oo_A)

[上线俩月，TensorFlow 2.0被吐槽太难用，网友：看看人家PyTorch](https://mp.weixin.qq.com/s/hTSXKUpTKBB-1dz1TkBqNg)

[快速掌握TensorFlow中张量运算的广播机制](https://mp.weixin.qq.com/s/PXORGN7O2uuKPzIK2w1nDg)

### tf 2.0分布式课程

[TensorFlow 2.0 分布式训练](https://mp.weixin.qq.com/s/QINaa9iBu0Y3NXRMPAViow)

### 深度学习+强化学习课程

[Bengio、Sutton的深度学习&强化学习暑期班又来了，2019视频已放出](https://mp.weixin.qq.com/s/HdwgIqaFfIsnpiAQNN2IAg)

<https://dlrlsummerschool.ca/>

<https://www.youtube.com/playlist?list=PLKlhhkvvU8-aXmPQZNYG_e-2nTd0tJE8v>

### 统计学习方法课程

[学它！李航《统计学习方法》课件，清华大学深圳研究院教授制作](https://mp.weixin.qq.com/s/KJSh0NxoPml7Ss4w8sSbbA)

<https://pan.baidu.com/s/1HUw0MeBD-1LP-r441oykhw>

[GitHub趋势榜首：李航《统计学习方法》Python代码实现](https://mp.weixin.qq.com/s/sGXNxICjXWswMY15aVoNhg)

### Colab相关课程

[帮初学者快速上手机器学习，这有一份Colab资源大全](https://mp.weixin.qq.com/s/YlypXT8sQV9_89rpUWp71w)

<https://www.google-colab.com/>

<https://github.com/firmai/awesome-google-colab>

<https://github.com/toxtli/awesome-machine-learning-jupyter-notebooks-for-colab>

### 李宏毅机器学习课程

[你离开学只差这个视频：李宏毅机器学习2020版正式开放上线](https://mp.weixin.qq.com/s/33pIcWxm3tPay-e2riQ5Sw)

### nlp+社交课程

[社科NLP课程来了：斯坦福开年公开课主讲NLP和社交网络应用](https://mp.weixin.qq.com/s/lQolkb1yzfi2zVlqVHPPGQ)

### 图机器学习课程

[【斯坦福大牛Jure Leskovec新课】CS224W：图机器学习，附课程PPT下载](https://mp.weixin.qq.com/s/Vgb6hj8ZOlFfp7BaOG6n4w)

<http://web.stanford.edu/class/cs224w/>

ppt也在这个网页上

### deeplearning.ai课程

[吴恩达deeplearning.ai新课上线：TensorFlow移动和web端机器学习](https://mp.weixin.qq.com/s/OutkkfCpJND9RBqqmUB9dg)

### 多任务与元学习课程

[斯坦福CS330 2019秋季课程视频全新上线，专注多任务与元学习](https://mp.weixin.qq.com/s/cekZ78Grw4Bu_umWaQDUdw)

## 一些网址和应用

### 一些笔记

[超干货！一位博士生80篇机器学习相关论文及笔记下载](https://mp.weixin.qq.com/s/LIJU1WTL7ugwDziQDyNyBA)

[机器学习研究者的养成指南，吴恩达建议这么读论文](https://mp.weixin.qq.com/s/QMDNKC0-sZu5p8LdMIULfg)

### 各类数据集

<https://datasetsearch.research.google.com/>

### 数据集搜索

[谷歌数据集搜索正式版出炉：全面升级，覆盖2500万数据集](https://mp.weixin.qq.com/s/cx06tZBSsEAlxaT5S8n0gA)

<https://www.datasetlist.com/>

### 烂番茄影评数据集

<https://github.com/nicolas-gervais/6-607-Algorithms-for-Big-Data-Analysis/blob/master/scraping%20all%20critic%20reviews%20from%20rotten%20tomatoes>

<https://drive.google.com/file/d/1N8WCMci_jpDHwCVgSED-B9yts-q9_Bb5/view>

### numpy实现ml算法

<https://github.com/ddbourgin/numpy-ml>

### pytorch实现rl

作者列出了17种深度强化学习算法的PyTorch实现。包括DQN，DQN-HER，DoubleDQN，REINFORCE，DDPG，DDPG-HER，PPO，SAC，离散SAC，A3C，A2C等。

<https://github.com/p-christ/Deep-Reinforcement-Learning-Algorithms-with-PyTorch>

### 一些有趣应用

[一键抠图，毛发毕现：这个GitHub项目助你快速PS](https://mp.weixin.qq.com/s/mRYp8bvkSjBTP3xdr4p5dQ)

<https://github.com/pymatting/pymatting>

[“狗屁不通文章生成器”登顶GitHub热榜，分分钟写出万字形式主义大作](https://mp.weixin.qq.com/s/gp9eFeM5Q85pAazWDuG9_g)

[实时可视化Debug：VS Code 开源新工具，一键解析代码结构](https://mp.weixin.qq.com/s/943dZHSZyQbjlxTpv54w7Q)

## 基础知识

### C++

[百度C++工程师的那些极限优化（内存篇）](https://mp.weixin.qq.com/s/wF4M2pqlVq7KljaHAruRug)

<https://daiwk.github.io/posts/knowledge-c++-useful-features.html>

### python

<https://daiwk.github.io/posts/knowledge-python.html>

### core相关

<https://daiwk.github.io/posts/knowledge-stack-heap-core.html>

tf.keras中的预训练修改模型中layer的名字，解决“The name is used 2 times … all layer names should be unique.”问题。

<https://nrasadi.medium.com/change-model-layer-name-in-tensorflow-keras-58771dd6bf1b>

```python
import tensorflow as tf

def add_prefix(model, prefix: str, custom_objects=None):
    '''Adds a prefix to layers and model name while keeping the pre-trained weights
    Arguments:
        model: a tf.keras model
        prefix: a string that would be added to before each layer name
        custom_objects: if your model consists of custom layers you shoud add them pass them as a dictionary. 
            For more information read the following:
            https://keras.io/guides/serialization_and_saving/#custom-objects
    Returns:
        new_model: a tf.keras model having same weights as the input model.
    '''
    
    config = model.get_config()
    old_to_new = {}
    new_to_old = {}
    
    for layer in config['layers']:
        new_name = prefix + layer['name']
        old_to_new[layer['name']], new_to_old[new_name] = new_name, layer['name']
        layer['name'] = new_name
        layer['config']['name'] = new_name

        if len(layer['inbound_nodes']) > 0:
            for in_node in layer['inbound_nodes'][0]:
                in_node[0] = old_to_new[in_node[0]]
    
    for input_layer in config['input_layers']:
        input_layer[0] = old_to_new[input_layer[0]]
    
    for output_layer in config['output_layers']:
        output_layer[0] = old_to_new[output_layer[0]]
    
    config['name'] = prefix + config['name']
    new_model = tf.keras.Model().from_config(config, custom_objects)
    
    for layer in new_model.layers:
        layer.set_weights(model.get_layer(new_to_old[layer.name]).get_weights())
    
    return new_model
```

## 其他领域

### 信息安全

[破解神经网络、攻击GPU，AI黑客教程来了，已登GitHub热榜](https://mp.weixin.qq.com/s/XUy7fMjSFY2Q5nmBxL84SA)

<https://github.com/Kayzaks/HackingNeuralNetworks>

[NeurIPS 2019 论文分享 | 微众银行：重新思考DNN所有权验证，以数字护照抵御模糊攻击](https://mp.weixin.qq.com/s/H2qCjTIsDm3IuRjG7UFnWA)

[密码学重大里程碑！科学家暴力破解迄今最长RSA密钥，功劳却不在摩尔定律](https://mp.weixin.qq.com/s/jXSMb_ndS6dNu9Bmx1_SlQ)

[阿里的AI安全武功秘籍：迁移+元学习开路，小样本数据能用跨模态](https://mp.weixin.qq.com/s/8X1REQzCVwxqxzutwMh28g)

### 量子计算

<https://daiwk.github.io/posts/dl-quantum-computing.html>

[量子导航即将上路：实时更新，全局优化，不仅更快还能解决拥堵](https://mp.weixin.qq.com/s/xfFPdukHOr_LAdqmKHeNJg)

[对标谷歌、IBM、微软，亚马逊正式推出量子计算云服务Braket](https://mp.weixin.qq.com/s/rMMdI22-_t1IT0Ckwda89w)

### 机器人

[四大视角、万字长文，欧盟MuMMER项目之商场服务机器人深入解读](https://mp.weixin.qq.com/s/x6p6ghxrPOu-heO6zZ5bIQ)

### 落地的一些思考

[AI模型走下高科技神坛、走进大规模量产、深入渗透产业界|百度研究院2020十大预测](https://mp.weixin.qq.com/s/Wd27UcbbaTDi8WWGBygu-A)

[分析了自家150个ML模型之后，这家全球最大的旅行网站得出了6条经验教训](https://mp.weixin.qq.com/s/ylwfnKcUSJdDDxWFhfMYjg)

[你的算法耗尽全球GPU算力都实现不了，DeepMind阿尔法系列被华为怒怼，曾登Nature子刊](https://mp.weixin.qq.com/s/xTqmXBsWodmOamkd-asbOg)

[不要只关注算法与模型，这里有份产品级深度学习开发指南](https://mp.weixin.qq.com/s/n_6IKp5M96Tx8pEgUm9ABQ)

[一日千星的「机器学习系统设计指南」，这个英伟达小姐姐的项目火了](https://mp.weixin.qq.com/s/X_LSll_u-KmD4Wd2Se9LWA)

<https://github.com/chiphuyen/machine-learning-systems-design/blob/master/build/build1/consolidated.pdf>

<https://github.com/chiphuyen/machine-learning-systems-design>

[AI落地的2019：注定残酷，真实终会浮出水面](https://mp.weixin.qq.com/s/QyiXlVNpM_sSXzI6Qvixog)

[Nature发表Google新型AI系统！乳腺癌筛查完胜人类专家](https://mp.weixin.qq.com/s/GbBRK5nZxj3qKedfQQnTWw)

[用户增长怎么做？UG涉及哪些技术领域](https://mp.weixin.qq.com/s/bYD45hsmvXPMPio48Mu9Xw)

[「拥抱产业互联网」一年后，腾讯首次完整披露20年技术演进之路](https://mp.weixin.qq.com/s/AP6vaTtC4PBAhA92M6ssvQ)

[阿里达摩院发布2020十大科技趋势！量子计算、类脑计算系统崛起](https://mp.weixin.qq.com/s/E0-I066FTT5miFH4zGZWIg)

[从工具选择到团队沟通，看ML工程师一步步打造生产级机器学习](https://mp.weixin.qq.com/s/fjnXy6u4Z2XINvNJYXTzPA)

[疫情期间如何让快递送得更快？菜鸟网络AAAI论文用深度学习驱动MIP求解](https://mp.weixin.qq.com/s/9WgKLVKlZQ1KIp48nOKCtg)

附上自己对电商直播的一些感想：

直播电商能准确预估gmv/复购/长期价值吗？不好说。

很多时候比如7点钟直播间里主播说了一些话或者发生了一个什么事情（常说的『高光时刻』），你是会有冲动去下单的

但比如模型学到了7点钟这个直播间这个商品成单率很高，假设7点15分模型更新了，发现你可能喜欢这个商品，推荐给你，你7点16分进入直播间 就算你看到同样的商品和价格，因为不是在直播时看到高光时刻，即使看到回放，可能也没有那种冲动去买

电商毕竟买东西是有决策成本的，可能在那个场景下就突然想买了，重复消费的情况是相对少的

打赏也类似，不过打赏可能会相对容易预估一点，因为对于铁粉、大金主或者背后的mcn工作人员/管理员来说，可能他们打赏行为比较稳定和有规律，只要你让这些人能看到直播间，大概率他们每次都会花差不多的钱进行打赏


