LLM 网络结构的优化:RMSNorm
Batch Norm 的归一化方法不适合在文本模型上做归一化,最重要的原因是文本长度并不固定,同时,基于 Batch Norm 的方法会破坏文本 token 之间的相对顺序,因此才有了 Layer Norm,同时,为了简化,又可以省略掉均值,因此就有了 RMS Norm,针对 Norm 在网络中的位置,Pre Norm 相比较与 Post Norm 来说,使得网络更加容易训练。
Batch Norm 的归一化方法不适合在文本模型上做归一化,最重要的原因是文本长度并不固定,同时,基于 Batch Norm 的方法会破坏文本 token 之间的相对顺序,因此才有了 Layer Norm,同时,为了简化,又可以省略掉均值,因此就有了 RMS Norm,针对 Norm 在网络中的位置,Pre Norm 相比较与 Post Norm 来说,使得网络更加容易训练。
LoRA 技术结合了残差连接的思想,针对新的训练数据,在固定住原始的矩阵的前提下,通过残差的方式进行微调,同时为了进一步减少参数的量,对微调矩阵进行低秩分解,进一步减少了需要学习的参数的量。
KV Cache 的提出,将 LLM 的推理过程分成了两个阶段,分别是 Prefill 阶段和 Decode 阶段,其中,Prefill 阶段处理的是 LLM 的 Prompt,用于产出首个 Token 以及存储 Prompt 中所有 Token 的 K 向量和 V 向量,此阶段算力要优先于内存的带宽;Decode 阶段则是根据新生成的 Token 以及历史所有 Token 的 K 向量和 ...
LLM 在推理阶段,其实用到的是最终 Embedding 矩阵的最后一行,而影响最后一行的最关键的计算是 Attention 的计算,进而在 Attention 中与其相关的是新增 Token 的 Q 向量,完整 Input 的 K 矩阵以及完整 Input 的 V 矩阵,因此,我们可以将该新增 Token 之前所有 Token 对应的 K,V 向量缓存起来,这便形成了 KV Cache。
RoBERTa,全称是 A Robustly Optimized BERT Pretraining Approach,从名字来看是 BERT 的增强版。模型结构与 BERT 完全相同,不同的是在模型的训练上,通过对 BERT 的训练过程的优化,进一步的提升下游任务的表现,且相较于 BERT 来说具有更强的鲁棒性。
FastChat 是一个开源的用于训练,评估以及部署大模型的框架,本文聚焦在模型的推理部分,从源码的角度介绍其基本的工作原理。</p> <p>利用 FastChat 框架部署一个完整的模型服务主要分为三个部分,分别为: Controller , Server 以及多个 Worker 。
在TinyBERT中,精简了BERT模型的大小,设计了三种层的蒸馏,分别为transformer-layer,embedding-layer以及prediction-layer。同时,为了能够对以上三层的蒸馏,文中设计了两阶段的训练过程,分别与BERT的训练过程对应,即预训练和fine-tunning。
Distilled BiLSTM是对于知识蒸馏较为一般性的实践,将BERT模型(Teacher)蒸馏到一个简单的BiLSTM模型(Student),蒸馏的目标函数中的蒸馏loss也是采用了对比logits结果的差异。虽然理论上较为简单,但是最终的结果是与与ELMo模型具有相同的效果,说明知识蒸馏的方法的有效性。
Bidirectional Encoder Representation from Transformers(BERT),即双向Transformer的Encoder表示,是2018年提出的一种基于上下文的预训练模型,通过大量语料学习到每个词的一般性embedding形式,学习到与上下文无关的语义向量表示,以此实现对多义词的建模。
Google于2017年提出了解决Seq2Seq问题的Transformer模型,用Self-Attention的结构完全代替了传统的基于RNN的建模方法,同时在Transformer的模块中加入了词序的信息,最终在翻译任务上取得了比RNN更好的成绩。
GPT模型中通过采用Transformer结构中的Decoder作为语义模型的提取模型,可以显著提升文本语义的学习能力,同时两阶段的学习方法对于可以方便的将GPT应用在不同的任务中。
与原始的Encoder-Decoder模型相比,加入Attention机制后最大的区别就是原始的Encoder将所有输入信息都编码进一个固定长度的向量之中。而加入Attention后,Encoder将输入编码成一个向量的序列,在Decoder的时候,每一步都会选择性的从向量序列中挑选一个集合进行进一步处理。这样,在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。
ELMo通过大量语料训练出与上下文无关的一系列向量表示,不同层级的向量带有不同的语言,包括了词法信息,句法信息以及语义信息,通过不同的组合,并在具体的上下文环境中微调得到带有上下文的词向量表示,并能够应用到具体的下游任务中。
什么是语言模型?通俗的来讲是判断一句话是否符合人说话的模型,神经网络语言模型是在统计语言模型的基础上,通过神经网络模型对句子的概率分布建模的方法。