大模型相关问题

大模型问题汇总

  1. llama 2注意力机制,手写分组注意力机制

    • GQA分组注意力机制(为了加速模型训练和推理,MHA每个head都需要一个QKV矩阵,于是有了将K,V矩阵分组,几个head共用一个KV矩阵,Q矩阵不变)
    • MQA 则是所有的head共用KV矩阵
  2. langchain介绍,主要组件

    • langchain主要包含langchain,langchain-core,langchain-community,LangServe,LangSmith
      • langchain: 包含ModelIO,Retrieval,Agent,Chains,Memory,Callbacks

        • ModelIO主要是和LLM进行交互
        • Retrieval主要是和外部数据检索交互
        • Agent提供工具的代理能力
        • Chains提供调用序列抽象能力
        • Memory存储会话状态和记录
        • Callbacks回调监控、日志
      • Langchain-community: 提供第三方集成的功能,譬如文档载入、分割等

      • langchain-core: 包含langchain的基本抽象已经LCEL(Langchain Expression Language)

      • LangServe: 使用了FastAPI提供服务能力,有server和client端侧的能力

      • LangSmith: 提供测试、开发、监控的平台

    • 具体详细介绍http://shiyanjun.cn/archives/2613.html
  3. 位置编码,几种位置编码的异同

    • 绝对位置向量编码(1...N),扩展性差,很难外推,泛化性不好

    • 正余弦标准位置编码(偶数正弦,基数余弦编码)

    • PEpos,2i+1=cos(pos100002i+1/dm) ; PEpos,2i=sin(pos100002i/dm)

    • RoPE 旋转位置编码(QK进行乘法的时候,会将绝对位置转化成相对位置,可以理解是一种位置编码的转换)

      • <fq(xm,m),fk(xn,n)>=g(xm,xn,mn) 详细介绍:https://blog.csdn.net/v_JULY_v/article/details/134085503
      • 具体实施步骤:
        • token编码向量后+pos编码向量,使用Q,K矩阵计算出qm,kn向量,此时向量携带绝对位置
        • 然后对qm,kn应用旋转矩阵,具体做法针对向量元素,每2个一组进行旋转操作,也就是乘以旋转矩阵[cos(mθ0)sin(θ0)0sin(mθ0)cos(θ0)0cos(mθd/21)sin(θd/21)0sin(mθd/21)cos(θd/21)] ,其中d对应的向量维度
        • RoPE有相应的局限,无法聚焦远处;attention score在随着distance很大时候会很小
    • ALiBi(Attention with Linear Biases) 不和标准transformer那样,在embedding层添加位置编码,而是QK^T结果后添加一个静态的不可学习的偏置项(说白了,就是数值固定)

      • Alt text
      • softmax(qiKT+m[(i1),,2,1,0]), m=8n,其中n是head的索引
  4. PPO相关内容

    • 强化学习中的动作价值函数和状态价值函数互推和递推关系,如下图所示
      • img
      • 两者可以递推,也能互推
    • 如何求解最优策略
      • 有递推公式,可以使用DP(动态规划),拆解成小问题迭代
      • MC蒙特卡洛法,统计模拟法,通过大量的随机样本来估算或近似真实值,需要采样完整的路径
      • 时序差分,δ=Rt+1+γVπ(St+1)Vπ(St),TD误差,也叫一步时序差分法;Rt+1+γVπ(St+1) 也叫单步回报
      • TD和MC不同,不需要等待交互最终结果,才可以更新Vπ(St)
      • img
    • SARSA(0) 单步回报Gt:t+1=Rt+1+γVπ(St+1)
    • QLearning 动作价值函数Q(St,At)=Q(St,At)+α[Rt+1+γmaxaQ(St+1,a)Q(St,At)]
    • 策略梯度(直接对策略分布进行参数化)
      • 参数为θ的策略πθ接受状态s,输出动作概率分布,在动作概率分布中采样动作,执行动作(形成运动轨迹τ),得到奖励r,跳到下一个状态
      • 使用策略π收集一批样本,然后使用梯度下降算法学习这些样本,不过当策略π的参数更新后,这些样本不能继续被使用,还要重新使用策略π与环境互动收集数据
      • img
      • 为了避免采样的数据只能使用一次,需要使用重要性采样;使用另外一个分布和环境交互产生数据
      • 为避免奖励总为正以及奖励方差偏大问题, Rτb 有正有负,而且减少奖励方差 b一般可为平均奖励b=1TtRt(τ) 或者状态价值函数Vπ(St),当为状态价值函数时候,Advantage Actor-Critic(A2C)优势演员评论家模型进行策略梯度优化时候,Aπ(s,a)=Qπ(s,a)Vπ(s),是对一个动作在平均意义上比其他动作好多少的度量,刚好状态价值可以理解为平均的动作期望
      • 基于信任区域的TRPO:加进KL散度解决两个分布相差大或步长难以确定的问题
      • TRPO使用KL散度作为约束条件,没放在目标函数,所以计算量很大
      • PPO将KL散度约束条件加入到约束条件
        • JPPOθ(θ)=E(st,at)πt[pθ(st,at)pθ(st,at)Aθ(st,at)]βKL(θ,θ)
        • JPPOclipθ(θ)=(st,at)πtmin(pθ(st,at)pθ(st,at)Aθ(st,at),clip(pθ(st,at)pθ(st,at),1ϵ,1+ϵ)Aθ(st,at))βKL(θ,θ)
  5. RLHF具体流程,包含几种模型

    • 包含3个步骤,4个模型(actor,critic,SFT,reward)四个模型
    • 3个步骤:
      • 使用人类的问答数据去微调预训练模型,形成SFT
      • 通过人类偏好数据训练RM奖励模型
      • 通过奖励模型以及PPO策略优化策略模型
    • 通过PPO-clip目标函数,重写InstructGPT训练的目标函数

object(ϕ)=E(x,y)DπϕRL[rθ(x,y)βlog(πϕRL(y|x)πϕSFT(y|x))]+γExDpretrainlog(πϕRL)=E(x,y)DπϕRL[πϕRL(y|x)πRL(y|x)rθ(x,y)βlog(πRL(y|x)πϕSFT(y|x))]+γExDpretrainlog(πϕRL)=E(x,y)DπϕRL[min(πϕRL(y|x)πRL(y|x),clip(πϕRL(y|x)πRL(y|x),1ϵ,1+ϵ))rθ(x,y)βlog(πRL(y|x)πϕSFT(y|x))]+γExDpretrainlog(πϕRL)=E(x,y)DπϕRL[min(πϕRL(y|x)πRL(y|x),clip(πϕRL(y|x)πRL(y|x),1ϵ,1+ϵ))Aθ(x,y)]+γExDpretrainlog(πϕRL)

其中Aθ=rθβlog(πRL(y|x)πϕSFT(y|x))+γV(st+1)V(st)

  • 具体四个模型作用如下:
    • img
    • img
  • 总结一下
    • 采样一批prompt数据经过actor模型,获取response,这样就能获取actor模型的logits,也就是旧策略预估
    • 通过旧的critic模型获取旧的values(旧的价值回报)
    • 通过reward模型,获取奖励值
    • [seq,action_logits,adv,values,reword] 经验数据 expbuf数据
    • 根据上面获取经验数据,再细分批次去迭代actor和critic网络
      • actor评论家模型,基于优势函数adv(高于平均回报动作鼓励,低于则惩罚)不断去更新策略参数
      • critic评论家模型(试图减少预期回报和经验回报returns的差异,从而更新网络),相当于评论模型不断优化评估回报的标准,是的模型预期回报越来越符合经验回报
    • 最后优化好的actor(策略模型)就是符合人类偏好的
  1. encoder-only,decoder-only,encoder-decoder代表模型

    • encoder-only bert以及bert变种模型
    • decoder-only llama2等一些大模型
    • encoder-decoder 模型有T5模型,GLM第一代模型
  2. 数据并行和模型并行

    • 模型并行(TP),主要是将模型tensor切分放到不同GPU上

    • img

      • MLP层的数据并行: σ(xA)B 将A先按列进行切分,这样每块GPU获取到的xA'相当于行切分了,否则结果要concate在一起; 如果输入xA'按照行切分了,那B也要按照行切分,最终各个GPU结果merge就行;
      • self-attention: 本身各个head头操作就是并行,只需要把各个head放到对应GPU上,最后cat在一起即可
    • Pipeline Parallelism 流水线并行,也是模型并行的一种

      • img

      • 只需要减少bubble占比,batch拆分的更细

      • 数据并行(模型小、数据大则适合采用数据并行的训练方式),DistributedDataParallel,简称DDP,各GPU复制一份模型,数据则切分到不同机器上,然后各GPU进行梯度计算,最后汇总梯度再反向传播。数据并行因其易用性,得到了最为广泛的应用。

      • deepspeed针对数据并行的Zero方案,大规模训练中的显存占用可以分为 Model States 与 Activation 两部分,而 ZeRO 就是为了解决 Model States 而诞生的一项技术, Model States分成:

        • Optimizer States
        • Gradient
        • Model Parameter
      • ZeRO-1:分割 Optimizer States,ZeRO-2:分割 Optimizer States 与 Gradients,ZeRO-3:分割 Optimizer States、Gradients 与 Parameters

      • img

  3. p-turing,lora微调方法介绍,与传统finetune区别

    • p-turing 讲prompt进行参数隐式微调;一般会通过训练一些隐式的token(也有对应的emb参数),有些可能会通过MLP+LSTM训练拿到emb
    • lora则是通过外挂一个低秩的矩阵进行参数微调,一般在nn.linear线性矩阵层,attention矩阵参数
    • Qlora则是quant+lora
      • 一般量化针对比较稳定的参数,譬如nn.linear层参数;激活层参数有较大值,量化可能会影响精度
      • 量化可以降低显存占用,加快运算速度
      • quant: float -> int8 (先将矩阵参数float映射到int8;计算【forward,backward】的时候再反量化回去);所以量化的好坏取决于映射函数的压缩比以及反量化解码效率
      • 譬如int8量化策略:Q=round(realvalzeropointscale255)128,这样将量化到区间[-127,127]之间
  4. 显存不够一般怎么解决

    • 训练:
      • 量化参数,主要量化nn.linear线性层参数
      • Zero3优化数据并行
      • FlashAttention
      • PageAttention
  5. 主流大模型的loss了解过吗?

    • 参考speedchat函数损失,主要Lloss=LPPO+LPTX+Lvalue,参考第5点RLHF训练流程
  6. deepspeed介绍,使用情况

    • 微软开发的并行训练框架,为训练大规模模型提供了一系列优化工具和技术,包括内存优化、并行训练、混合精度训练等
  7. 领域模型continue Pretrain数据选取?

    • 混合领域与通用数据:在进行领域特定微调时,加入部分通用领域的数据,确保模型在特定领域精细化的同时,不丧失对其他领域的认知能力。
    • 多领域微调:在微调过程中,轮换或交替使用来自不同领域的数据集,以保持模型的多样性,减少单一领域数据对模型的过度影响。
    • 高质量数据:选择文本流畅、结构清晰、信息准确的高质量数据源。低质量数据(如拼写错误多、语法混乱)可能会导致模型学习到不良的语言模式。
    • 内容多样性:引入不同主题和类型的文本,如科技、金融、医疗、法律等,以提升模型的通用能力和在不同任务上的适应性。
    • 多样的数据来源:选取多种数据来源可以提高模型的鲁棒性。常见的数据来源包括维基百科、新闻网站、学术文章、论坛、社交媒体等。
  8. 领域模型训练后通用能力下降,怎么缓解幻觉

    • RAG
    • 领域数据混合一些通用数据进行微调(p-turning或LORA等)
  9. 指令微调、如何选择、设定、优化不同的超参数(具体实践)

    • batch_size,lr,Zero开启和关闭,epoch,优化器选择
  10. 指令微调如何选择最佳指令策略,以及该指令对模型的效果影响(更多偏大模型训练实践)

    • 精心设计指令模板,使其清晰、具体,减少模型的理解偏差
    • 实验不同指令模板,观察其对模型性能的影响,基于验证集或开发集的结果,调整指令的复杂度和结构,找到最佳的指令设计
  11. llama,glm,bloom等大模型在数据处理,训练细节以及模型结构的优化点,包括但不限于注意力机制,归一化,嵌入层

    • llama采用decoder-only结构,使用RMSlayernorm进行归一化,同时位置编码采用了RoPE,llama long版本更是采用PI(位置插值)进行外推扩展,注意力机制使用了GQA分组注意力机制,KV分组共享矩阵,Q矩阵不共享
    • GLM采用encoder-decoder结构,使用post-norm归一化,注意力机制使用MQA,KV矩阵共享1个,Q不共享;同时使用RoPE位置编码
    • bloom不清楚

相关文章:
强化学习:https://blog.csdn.net/v_JULY_v/article/details/128965854

posted @   adam86546853  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示