大语言模型面试问题【持续更新中】

本文深入探讨了Transformer中的求和与归一化原理,注意力机制的softmax计算,多头注意力的优势,RNN与Transformer的对比,以及BERT的训练任务、优缺点和微调方法。还涵盖了LSTM的选择、梯度问题解决方案,Deepspeed的分布式计算,大模型生成的采样策略,temperture参数的作用,以及如何创建有效的Prompt。
摘要由CSDN通过智能技术生成

自己在看面经中遇到的一些面试题,结合自己和理解进行了一下整理。

transformer中求和与归一化中“求和”是什么意思?
求和的意思就是残差层求和,原本的等式为y = H(x)转化为y = x + H(x),这样做的目的是防止网络层数的加深而造成的梯度消失,无法对前面网络的权重进行有效调整,导致神经网络模型退化(这种退化不是由过拟合造成的,而是较深模型后面添加的不是恒等映射反而是一些非线性层)。已经学习到较饱和的准确率(或者当发现下层的误差变大时),那么接下来的学习目标就转变为恒等映射的学习,也就是使输入x近似于输出H(x),以保持在后面的层次中不会造成精度下降。

注意力机制中计算注意力分数时为什么会除以根号dk?
这和softmax的求导有关,softmax的计算公式=exp(x1)/exp(x1)+exp(x2),另p=exp(x1)/exp(x1)+exp(x2),那么softmax求导之后=p*(1-p),当p趋近于1时,softmax的导数就趋近于0。故除以根号dk的原因是:为了避免softmax计算的结果过大,造成偏导数为0。

多头注意力比单头注意力的好处?
注意力的计算是并行进行的,多头可以提高计算效率。并且多头可以捕获不同子空间内的特征。

transformer比起RNN的优势?
RNN在传播的过程中会出现信息衰减,而transformer当前词不管距离其他词多远,其只有这个词与其他词的相关性有关。并且transformer的encode可以并行计算,RNN不可以。

transformer为什么使用层归一化?
(当前值减均值)/ 标准差。减小梯度消失和梯度爆炸的问题,并提高网络的泛化性能。

批量归一化是不同训练数据之间对单个神经元的归一化,层归一化是单个训练数据对某一层所有神经元之间的归一化。

transformer中解码器的注意力与编码器的区别
decode中的自注意力是带掩码的,不让decode看到后文。还有一个encode-decode注意力层,这一层注意力层只有q来源于上一层decode单元的输出,剩下的k、v都来源于encode最后一层的输出。

前馈层
两层relu激活函数,一层全连接神经网络。

BERT的训练任务
1.在输入数据中选择15%用于预测,这15%的数据中有80%被替换为mask,10%的单词被替换为其他词,10%的单词保持不变。2.上下段落匹配,其中50%使用正确的上下句关系,50%随机抽取一个句子拼在后面。

BERT的优缺点
1.预训练阶段会出现特殊的[MASK]字符,而在下游任务中不会出现,造成预训练和下游任务之间的不匹配。
2.每个batch只有15%的token会被预测,所有收敛速度会比传统语言模型慢。
3.缺乏生成能力。

chatgpt的训练过程
1.SFT阶段(有监督微调):使用问答对微调GPT3。这一阶段的损失是交叉熵。
2.RM奖励模型:使用1的SFT模型收集每个问题的4-9个回答,并对其进行人为排序。这一阶段使用的损失是排序损失函数,排序高的回答的奖励值-排序低的回答的奖励值,我们希望这个值越大越好。
3.PPO算法更新迭代。

LLAMA作出的改进
1.归一化由LN改为了RMS Norm。
2.SwiGLU替代ReLU。
3.旋转位置编码替代位置编码。

ChatGLM作出的改进
1.重新排列了层归一化和残差连接的顺序
2.用GeLU替换ReLU激活函数
3.在结构和训练目标上兼容这三种预训练模型,需要GLM中同时存在单向注意力和双向注意力,当attention_mask为全1时为双向的attention,当attention_mask为三角矩阵时为单向的attention。
4.使用P-tuning进行的微调。

ChatGLM的训练任务
1.文档级别的预测/生成:从文档中随机采样一个文本片段进行掩码,片段的长度为文档长度的50%-100%。
2.句子级别的预测/生成:从文档中随机掩码若干文本片段,每个文本片段必须为完整的句子,被掩码的词数量为整个文档长度的15%。
既保证了模型的自编码能力又有自回归能力。

Baichuan作出的改进
1.RoPE位置编码
2.RMSNorm归一化
3.SwiGLU激活函数
4.1.2万亿训练数据/上下文窗口4096

参数微调的方法
1.Adapter Tuning:将其嵌入Transformer的结构里面,在训练时,固定住原来预训练模型的参数不变,只对新增的Adapter结构进行微调。
2.Prefix Tuning:构造隐式的输入token,加入到输入作为前缀;但是不同的任务类型需要的输入token也不同。比如针对翻译任务,需要在输入之前加入“翻译:”对应的token,来引导模型进行翻译任务。[不需要改变模型参数]
3.P-tuning:在Prefix-Tuning中加入的prompt输入token是离散的;事实上,prompt词与词之间是存在关联的,因此P-tuning将prompt组成的token输入到LSTM,再讲LSTM最后一层的输出向量来代替原始的token。
4.P-tuning V2:与P-tuning的区别是不仅仅在embedding加入了prompt,在其他层同时加入了前置prompt。
5.LoRA:冻结了预训练的模型权重,在需要训练的矩阵开通一个旁路矩阵,分为一个降秩矩阵和一个升秩矩阵(比如一个100×100的矩阵可以替换为一个100×2和一个2×100两个矩阵,参数量减少了10000-400),将最后的结果加到原始矩阵上。
6.QLoRA:引入了4位量化、双量化和利用nVidia统一内存进行分页。所有这些步骤都大大减少了微调所需的内存,同时性能几乎与标准微调相当。

模型量化
比如8位量化需要最大值为127,那么选取模型中参数最大的值/127为缩放比例a,将所有的数都除以这个缩放比例a。

Actor-Critic架构
在这里插入图片描述
Actor演员使用SFT模型初始化,使用问答对来更新其策略;Critic评论家使用RM模型初始化,用来拟合旧价值估计;Reward Model用来产生当前状态和策略下获得的奖励值;奖励值减掉SFT旧策略与新策略之间的KL散度作为reward,优势函数等于reward减掉旧状态价值估计。当优势函数大于0时,就要鼓励当前的动作;当优势函数小于0时,就要抑制当前动作。

优化器
SGD:随机梯度下降,它使用数据集中的单个样本或一批样本的梯度来更新模型参数。计算过程为原始参数=原始参数-学习率×梯度。
Adam:自适应学习率的梯度下降,Adam算法将不同的梯度给予不同的权重,使得神经网络在学习率稳定时,能快速、稳定的收敛到最佳点。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
当m0很小时,使用修正因子重新计算了mt。

为什么sigmoid函数和tanh函数会出现梯度消失
这和两者的求导有关,sigmoid(x) = 1/(1+exp(-x)) = p,求导后表达式为p(1-p),当x趋于正无穷或负无穷时,p趋于1或0,求导后的结果趋于0,因此会出现梯度消失。
tanh(x) = (exp(x)-exp(-x))/(exp(x)+exp(-x)) = p,求导后表达式为1-p2,当x趋于正无穷或负无穷时,p趋于1或-1,求导后的结果趋于0,因此会出现梯度消失。

BERT为什么会做编码任务、完型填空任务、段落匹配任务
BERT本身的结构就是transformer的Encode,其会使用位置编码、词级编码以及段级编码作为输入,经过Encoder的单元之后形成嵌入向量。
当BERT在做完型填空任务时,BERT会将需要预测的位置,通过将最后的输出linear线性变换后,将Embedding_size转化为vovab_size,再进行softmax激活函数之后得到最后单词的概率,使用交叉熵函数进行损失计算。
在这里插入图片描述
当BERT在做段落匹配任务时,会将CLS处进行linear线性变换后将Embedding_size转化为2,再通过sigmoid函数计算概率来判断这两个句子是否构成上下句的关系。
在这里插入图片描述

BERT模型为什么要将15%的词语进行80%mask、10%替换、10%什么也不做,而不是全部mask
在训练时,不是用这种方式,而是全部mask掉的话,模型就会把虽有的注意力集中到“mask”这个词汇上了,模型就能知道不出现“mask”的地方我不用管,啥时候出现“mask”我在管,这对模型提取语义关系是不利的。使用(80% mask,10% 随机替换,10% 保持原词)的方式之后呢,模型不只是需要在“mask”位置做工作,还要时刻预防着随机替换的情况,也就是检查这个句子对不对,这就大大提高了模型提取语义效果的能力。

为什么relu激活函数要优于sigmoid激活函数?
1.relu激活函数在正区间内不会出现梯度消失。
2.relu的偏导数计算量比sigmoid小。
3.relu使得一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的互相依存关系,缓解了过拟合问题的发生。
缺点:函数导致负梯度在经过该ReLU单元时被置为0,在下一层传播时也为0,即流经该神经元的梯度永远为0,不对任何数据产生响应。

为什么会出现梯度消失?
采用了不合适的激活函数。
隐藏层数太多。
解决:使用合适的激活函数,使用归一化,残差网络。

为什么会出现梯度爆炸?
参数初始化太大
隐藏层数太多。
解决:使用梯度裁剪策略,使用合适的激活函数,使用归一化,使用残差网络。

lora为什么可以映射到低秩维度?
lora论文中指出常见的预训练模型具有非常低的内在维度(如果你有一个在三维空间中分布的数据集,但所有的数据点都严格地位于同一平面上,那么这个数据集的内在维度就是2,因为你只需要两个坐标就能准确地描述每个数据点);换句话说,存在一个低维度的重新参数化,对于微调来说与完整参数空间一样有效。用少量数据微调大语言模型可能不需要那么多维度的参数,而因为尽管模型可能有数亿个参数,但这些参数中的大部分可能并不需要改变,或者它们的改变对模型的性能没有太大影响。

LSTM为什么选择sigmoid和tanh而不选择relu?
因为sigmoid和tanh都是饱和函数,当输入达到一定值时,输出几乎不发生变化;而relu难以实现门控的效果。
sigmoid用于“开关”,控制信息能流出多少;tanh符合0中心分布,此外tanh函数在输入为0附近相比 Sigmoid函数有更大的梯度,通常使模型收敛更快。

LSTM如何缓解RNN的梯度消失或梯度爆炸
因为每个LSTM都有门控机制,中间记忆细胞通过输入门和遗忘门之后进行累加,而不像RNN那样的累乘,从而缓解了RNN的梯度消失或梯度爆炸。

Deepspeed分布式计算
1.数据并行,在几张GPU卡上平均把训练的数据分开。
2.模型并行,分为层间并行和层内并行(比如多头注意力分开多个卡进行训练)。
在这里插入图片描述
3.混合并行

大模型生成过程中的采样方式
1.贪心法:每次只采样词表中概率最大的那个词。
2.Top-k法:取词表中概率最大的k个词,然后随机选择一个。
3.Top-p法:取词表中概率最大的词之和大于p为止,然后随机选择一个。

如何理解大模型中的temperture参数?
这个参数与大模型中采样方式Top-p法有关。最后单词的计算概率为softmax,加入参数temper之后,计算公式变为了p=exp(xi/T)/exp(x1/T)+…+exp(xn/T),当T趋于无穷大时,所有单词的概率都变为了1/n,相当于拉进了每个词的概率,所以在top-p的列表中的被选择的概率也就越大。所以这就是为什么参数temperture越大,模型回答越多样性的原因。

如何制定一个好的Prompt
一个不错的Prompt包括以下三个部分:目标、上下文、输入。

Prompt的技巧
界定符&占位符、围栏(不要做什么)、角色扮演、示例、COT。

知识蒸馏为什么能work?
因为负样本也包含了推理信息,可以学习大模型的输出分布情况。想要学习更多的负样本推理信息,可以增加softmax的temperature。

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值