• LLaMA参数微调方法


    1.Adapter Tuning:嵌入在transformer中

    新增了一个名为adapter的结构,其核心思想是保持模型其他原始参数不变,只改变adapter的参数,其结构如下图所示:

    在这里插入图片描述

    1.在每一个transformer模块最后都加入一层adapter。

    2.adapter首先使用一个feedforward将高维特征映射到了低维特征。

    3.低维特征经过一层非线性层之后将低维特征映射回高维特征。

    2.Prefix Tuning:构造虚拟token

    1.在输入token之前构造一段任务相关的虚拟token作为Prefix。

    2.在训练时可以只更新Prefix部分的参数,而transformer预训练的参数固定。

    【注】该方法与构造Prompt类型,但是构造人为构造的显示提示并且构造参数不可更新,而Prefix是隐式构造。

    3.Prompt Tuning

    与Prefix Tuning相比之下,prompt tuning使用单个提示表示,该表示前置于嵌入式输入。除了需要更少的参数外,所提出方法允许transformer更新中间层任务表示,通过输入示例进行上下文化。

    Prompt tuning只需要为每个任务存储一个小的特定于任务的提示,并使用原始的预训练模型支持混合任务推理。
    P-Tuning V1只在输入层加入了Prompt,而P-Tuning V2则在每一层都加入了Prompt,解决了深度提示优化的问题。另外P-Tuning V2还提出了Multi-task learning解决不同规模和任务的适配性问题。

    4.LoRA

    在这里插入图片描述

    LoRA的核心思想是用一种低秩的方式来调整这些参数矩阵,在数学上低秩意味着一个矩阵可以用两个极小的矩阵来近似。它提出用两个小矩阵近似一个大矩阵,先降维(减小计算量)后升维(维持维度不变)。具体来说是固定原始模型的参数,只训练降维矩阵A与升维矩阵B。最后用原始模型参数与B矩阵相加。

    A矩阵一般用随机高斯分布初始化,维度上是降维;B矩阵用0矩阵初始化,维度上是升维。

    参数更新 :W = W + A*B。

    梯度更新 :在微调过程中,计算关于矩阵A和矩阵B的损失,在优化过程中对A和B进行更新,原始矩阵W保持不变。

    代码具体操作:①将原始矩阵W参数冻结。②新引入两个线性层对应图中两个矩阵,先降维后升维。③LoRA主要实现了两分支通路,一条分支为已被冻结weight参数的原始结构,另一条分支为新引入的降维再升维线性层。

    5.QLoRA:相比于LoRA进一步降低显存消耗

    而QLoRa更进一步,引入了4位量化、双量化和利用nVidia统一内存进行分页。

    分页优化器、双量化、增加Adapter。

  • 相关阅读:
    [Linux打怪升级之路]-system V共享内存
    N 皇后问题
    mysql索引覆盖之innodb和myisam效率问题
    代码签名证书到期了怎么续费?
    一次因生产事故与chatGpt的对话
    Kafka中主题和分区的概念
    顺序存储二叉树 [数据结构与算法][Java]
    K8s源码分析(22)-client go组件之clientset
    Vue3 - watchEffect 使用教程
    无主复制系统(3)-Quorum一致性的局限性
  • 原文地址:https://blog.csdn.net/weixin_44563460/article/details/132942761