算法岗面试经验分享-大模型篇
文章目录
- A 基础语言模型
- A.1 Transformer
- A.2 Bert
- B 大语言模型结构
- B.1 GPT
- B.2 LLama
- B.3 ChatGLM
- B.4 Qwen
- C 大语言模型微调
- C.1 Fine-tuning
- C.2 Adapter-tuning
- C.3 Prefix-tuning
- C.4 P-tuning
- C.5 LoRA
A 基础语言模型
A.1 Transformer
(1)资源
- 论文:Attention is all you need
- 一文读懂BERT(原理篇)_bert-as-service 原理-CSDN博客
- Transformer源码详解(Pytorch版本)
(2)Attention机制计算过程
- 线性变换:将输入序列的每一个词嵌入分别通过不同的全连接层转换为query、key和value向量;
- score计算: S c o r e ( Q , K ) = Q K T / d k Score(Q,K)=QK^T/\sqrt{d_k} Score(Q,K)=QKT/dk;
- softmax:对得分矩阵应用softmax,将每个位置的分数转化为概率分布,表示每个位置的重要性;
- 加权求和:将value向量乘以对应的softmax得分,对结果进行加权,得到Attention。
(3)要点
- attention机制代替RNN搭建整个框架、提出多头注意力机制
- encoder=多头自注意力+前馈,decoder=掩码多头注意力+多头注意力+前馈
- d k \sqrt{d_k} dk是为了减小点积的结果,避免将softmax推到具有极小梯度的区域
- encoder和decoder的输入向量编码要额外加入一层位置编码
- padding mask(对齐输入序列长度)和sequence mask(不学到未来信息)
A.2 Bert
(1)资源:
- 一文读懂BERT(原理篇)_bert-as-service 原理-CSDN博客
(2)待解决问题
- Bert-base的参数量计算:Bert/Transformer参数量计算
B 大语言模型结构
B.1 GPT
(1)资源
- GPT-1:Language Models are Unsupervised Multitask Learners
- GPT-2:Language Models are Few-Shot Learners
- GPT-3:Improving Language Understanding by Generative Pre-Training
- InstructGPT:Training language models to follow instructions with human feedback
- Few-Shot, Zero-Shot & One-shot 的通俗理解
- 从GPT-1到GPT-4,GPT系列模型详解
(2)要点
- GPT-1:无监督预训练+有监督微调,12层Transformer-decoder,激活函数GELU
- GPT-2:zero-shot
- GPT-3:In-context Learning(few-shot),1750亿参数
- InstructGPT:RLHF(reinforcement learning from human feedback)
(3)问题汇总
- GPT-1、GPT-2、GPT-3、InstructGPT的每一次改进之处是什么
- GPT-2主要解决的问题是如何利用大规模未标注的自然语言文本来预训练一个通用的语言模型,从而提高自然语言处理的能力。
- GPT-3主要解决的问题是如何使一个预训练的语言模型具有迁移学习的能力,即在只有少量标注数据的情况下,能够快速适应到新的任务中。
- InstructGPT主要解决的问题是如何让语言模型能够更好地遵循人类给出的指令,并在实践中实现它们。
- few-shot、one-shot和zero-shot
- few-shot为少样本学习,one-shot为一次样本学习(人脸识别),zero-shot为零样本学习(完全的无监督学习)
B.2 LLama
(1)资源
- 论文:LLaMA: Open and Efficient Foundation Language Models
- llama源代码逐行分析
(2)要点
- 在输入中使用RMSNorm(不计算均值),而不是Transformer中的Layer normalization(对输出使用)
- 在LayerNorm中,每个样本的特征向量会被中心化,即减去其均值,以使数据的均值为0,而在全连接层中,每个神经元都有一个可学习的偏置项,用于调整该神经元的输出。通过中心化操作,模型可能会学习到与特定预训练任务相关的数据分布信息。这种信息可能有助于模型在预训练任务上的表现,但也可能限制了模型在新任务上的适应性。
- 如果模型在预训练阶段学习到了过于特定的数据分布信息,那么当模型被迁移到新的、不同的任务时,这些信息可能会成为负担,导致模型的迁移学习能力下降。换句话说,模型可能过于适应预训练任务,而难以适应新任务。
- 使用SwiGLU来代替ReLU
- SwiGLU激活函数将GLU和Sish部分结合起来,通过门控机制洗择性地应用Swish变换,以产生最终的激活输出。它的设计目的是在提供非线性表达能力的同时,保持一定的线性性质,从而提高神经网络的表示能力和学习能力。
- 采用旋转位置编码RoPE
- 一文看懂 LLaMA 中的旋转式位置编码(Rotary Position Embedding)
- v2使用Group Query Attention,而不是MHA或者MQA。
- 为什么LLM都是decoder-only?
LLM之所以主要都用Decoder-only架构,除了训练效率和工程实现上的优势外,在理论上是因为Encoder的双向注意力会存在低秩问题(详见论文:Attention is Not All You Need: Pure Attention Loses Rank Doubly Exponentially with Depth),这可能会削弱模型表达能力,就生成任务而言,引入双向注意力并无实质好处。而Encoder-Decoder架构之所以能够在某些场景下表现更好,大概只是因为它多了一倍参数。所以,在同等参数量、同等推理成本下,Decoder-only(满秩的下三角矩阵)架构就是最优选择了。
B.3 ChatGLM
(1)资源
- GLM: General Language Model Pretraining with Autoregressive Blank Infilling
- 第三代ChatGLM发布,ChatGLM3
(2)要点
综合了LLM的三大主流思想,自回归空格填充任务+二维位置编码,PartA(双向encoder)+PartB(单向decoder)
(3)思考
- 三大主流LLM思想
- AutoRegressive自回归模型(AR模型):decoder-only,代表作GPT。本质上是一个left-to-right的语言模型。通常用于生成式任务,在长文本生成方面取得了巨大的成功,比如自然语言生成(NLG)领域的任务:摘要、翻译或抽象问答。当扩展到十亿级别参数时,表现出了少样本学习能力。缺点是单向注意力机制,在NLU任务中,无法完全捕捉上下文的依赖关系。
- AutoEncoding自编码模型(AE模型):encoder-only,代表作BERT。是通过某个降噪目标(比如MLM)训练的双向文本编码器。编码器会产出适用于NLU任务的上下文表示,但无法直接用于文本生成。
- encoder-decoder(Seq2seq模型):代表作T5。采用双向注意力机制,通常用于条件生成任务,比如文本摘要、机器翻译等。
B.4 Qwen
(1)资料
千问Qwen2 beta/1.5模型代码逐行分析(一)
千问Qwen2 beta/1.5模型代码逐行分析(二)
千问Qwen2 beta/1.5模型代码逐行分析(三)
(2)结构
-
RMS归一化:相较于LayerNorm,去掉了均值和偏置b,减少计算量。
-
旋转位置编码:代码上看没有做linear scale和NTK(考虑下怎么做长度外推,Yarn代码)。
C 大语言模型微调
C.1 Fine-tuning
全参数微调,全部参数权重参与更新以适配领域数据。
C.2 Adapter-tuning
(1)论文
- Parameter-Efficient Transfer Learning for NLP
- AdapterFusion: Non-Destructive Task Composition for Transfer Learning
- AdapterDrop: On the Efficiency of Adapters in Transformers
嵌入 Transformer 的结构里面,在训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构进行微调。首先是一个 down-project 层将高维度特征映射到低维特征,然后过一个非线形层之后,再用一个 up-project 结构将低维特征映射回原来的高维特征。
C.3 Prefix-tuning
论文:Prefix-Tuning:Optimizing Continuous Prompts for Generation
在输入token之前构造一段任务相关的virtual tokens作为Prefix,然后训练的时候只更新Prefix部分的参数,而PLM中的其他部分参数固定。
针对不同的模型结构,需要构造不同的Prefix。
- 针对自回归架构模型:在句子前面添加前缀,得到
z = [PREFIX; x; y]
,合适的上文能够在固定 LM 的情况下去引导生成下文(比如:GPT3的上下文学习)。 - 针对编码器-解码器架构模型:Encoder和Decoder都增加了前缀,得到
z = [PREFIX; x; PREFIX0; y]
。Encoder端增加前缀是为了引导输入部分的编码,Decoder 端增加前缀是为了引导后续token的生成。
该方法是在输入token之前构造一段任务相关的virtual tokens作为Prefix相当于对于transformer的每一层 (不只是输入层,且每一层transformer的输入不是从上一层输出,而是随机初始化的embedding作为输入),都在真实的句子表征前面插入若干个连续的可训练的"virtual token" embedding,这些伪token不必是词表中真实的词,而只是若干个可调的自由参数
C.4 P-tuning
(1)P-tuning v1
论文:GPT Understands, Too
P-Tuning成功地实现了模版的自动构建,且借助P-tuning,GPT在SuperGLUE上的成绩首次超过了同等级别的BERT模型,这颠覆了在那年之前“GPT不擅长NLU”的结论,也是该论文命名的缘由。
P-Tuning加了可微的virtual token,但是仅限于输入,没有在每层加,且virtual token的位置也不一定是前缀,插入的位置是可选的,这里的出发点实际是把传统人工设计模版中的真实token替换成可微的virtual token。
(2)P-tuning v2
论文:P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks
在输入前面的每层加入可微调的参数。
C.5 LoRA
(1)资源
- LoRA: Low-Rank Adaptation of Large Language Models
- QLoRA: Efficient Finetuning of Quantized LLMs
- LoRA及其变体概述:LoRA, DoRA, AdaLoRA, Delta-LoRA-CSDN博客
(2)LoRA的工作原理:
LoRA的核心思想是用一种低秩的方式来调整这些参数矩阵。在数学上,低秩意味着一个矩阵可以用两个较小的矩阵相乘来近似。

(3)Lora改进
- DoRA:多维权重矩阵存在大小和方向,对矩阵的大小和方向都进行分解,并进行独立训练。
- AdaLoRA:将LoRA矩阵的奇异值作为参数重要性的指标。
- LoRA+:为矩阵A和B分别引入不同的学习率。