Value-based与Policy-based

  1. 目标不同

vb:最大化动作价值函数
pb:最大化每个epi的总回报

基于价值与基于策略的强化学习区别:

  1. 价值:通过学习价值函数指导策略
  2. 策略:直接学习对应的策略
  3. ac:价值+策略

重要度采样

首先需要明确,该方法是一种普世的方法,不仅用于RL。

核心思想是通过一个已知策略的分布情况,根据采样比,进而修正得到当前未知的策略分布情况。
IS

References

  1. [讀些東西,做點筆記] PPO & TRPO

策略梯度方法

  1. 基本思想

最大化状态价值来更新策略函数参数,即最大化目标函数
$J(\theta) = \mathbb{E}_S[V_\pi(s)]$,其中$\theta$为策略函数的参数.具体优化过程:

image-20230604225752515

  1. 优缺点

优点:

相对于Value Based的方法,基于策略梯度的强化学习方法的很明显的优势是它可以直接去学习Policy本身,这样学习速度会更快,并且更关键的是它可以用于连续动作空间的情况。

  • 更好的收敛性
  • 高维空间场景下,基于策略的方法要更高效
  • 能够学习到一些随机策略

缺点:

RL环境变化往往较大,导致Value的方差要比一般的DL数据大得多,学习率的选择会直接影响到策略的好坏(学习率需要针对调整),且差异会很大。

  • 方差大,受初始策略选择波动大
  • 策略评估效率低
  • 一般收敛到局部最优

解决办法:

TRPO与PPO,通过调整新旧策略,为新旧策略增加约束,保证策略的更新是在可控范围之内的。

  1. 策略梯度

选定合适的策略目标函数,对策略目标函数求梯度上升至局部最大值即可;

目标函数:
$$
J(\theta)
= \sum_{s \in \mathcal{S}} d^\pi(s) V^\pi(s)
= \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} \pi_\theta(a \vert s) Q^\pi(s, a)
$$

其中$d^{\pi}(s)=\lim _{t\to \infty} P(s_t=s|s_0,\pi_\theta)$是平稳分布。

在具体更新过程中,

image-20230810125638794

前一项控制更新方向,后一项控制更新幅度,因此就会朝着高回报的轨迹更新。

References

  1. 深入理解TRPO和PPO算法
  2. 《强化学习》第七讲 策略梯度
  3. For: 策略梯度算法专题

MC、TD与DP

Same:

References

  1. 强化学习之遇到的一些面试问题

贝尔曼方程

最优贝尔曼方程

image-20230712163055793

贝尔曼期望方程

img

References

1.面试篇——强化学习高频面试题整理

多任务loss差异较大

归一化、动态权重调整(自适应超参-根据变化)、梯度裁剪、自适应学习率(不同任务单独设置)、任务相关性分析、注意力机制、周期性调度(不是一直更新所有任务,交替更新不同的任务)

多任务的任务平衡

  1. loss方面调整
    归一化、均匀分配、按照难度分配、按照验证集分布调整、自适应调整(采用梯度等信息)、使用正则化(知识蒸馏-将一个任务的知识转移到另一个任务中)、超参数优化(网格搜索)、结合任务相关性调整、基于经验和领域知识

  2. 动态任务调度-根据当前的任务性能动态优化某一任务的性能

  3. 模型结构设计-共享特征

  4. 引入注意力机制-按照任务难度调整偏向参数

  5. 任务相关性分析-根据相关性设定相似或不同的权重

  6. 早停&模型选择-结合验证集上模型的性能表现选择模型(多任务性能均衡)

  7. 网格搜索

  8. 数据增强

  9. 多任务学习时引入特定任务的正则化项,提升模型的抗干扰

CLIP模型

Learning transferable visual models from natural language supervision

研究背景

clip-contrastive learning

局限:最先进的计算机视觉系统被训练来预测一组预定的物体类别。这种受限的监督形式限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何其他视觉概念。
本文希望直接通过原始文本学习图像,利用了更广泛的监督来源。

主要工作

  1. 核心:利用text信息监督视觉任务自训练,本质就是将分类任务化成了图文匹配任务,效果可与全监督方法相当;
  2. 高效预训练任务
    • 采用双流模型获取文本(Transformer)与图像特征(ViT&ResNet)
    • 多模特征投影到同一空间,计算两个模型的余弦相似度,使得匹配图文信息相似度最大,反之最小
    • 采用对称交叉熵-图文的双标签;并且对图像数据进行了增强
  3. 大规模数据集-4亿对图像文本对

优缺点

缺点:

  1. 需要较大的batch-size才会有比较好的效果

References

  1. 【多模态】CLIP模型
  2. 神器CLIP:连接文本和图像,打造可迁移的视觉模型

ALBEF模型

ALBEF:Align before Fuse

研究背景

当前VLP(Vision-and-Language Pre-training)框架依旧存在着几个关系限制:

(1) 图像特征和单词嵌入都处于自己的空间中,这使得多模态编码器学习建模他们的交互更具挑战性;(双流模型)
(2) 目标检测器的标准和计算都很昂贵,因为其需要在预训练的时候人工标注bounding box,并且在推断时为高分辨率图像;
(3) 广泛被使用的image-text数据集都是从网络上收集的并且存在大类噪音,现有像$\text{MLM}$这样的预训练目标可能会过拟合噪音文本,并降低模型的泛化性能。

主要工作

  1. 模型结构
    ALBEF
    结合了单双流模型,分别由图像编码器(image encoder)、文本编码器(text encoder)和 多模态编码器(multimodal encoder)组成。其中文本编码和多模态编码分别是bert模型中的前半部分和后半部分。

  2. 预训练任务

    • ITC-图文对比(Image-Text Contrastive Learning)

      与CLIP相似,通过对图像文本特征进行余弦相似度计算,使得两个特征能够对齐。而在具体实现中,采用了memory bank+动量编码器的方式去实现,使得不用这么大的batch size也能够实现较好的效果。

    • MLM-掩码建模(Masked Language Modeling)

      经典掩码操作,对于图像特征与文本特征均可以进行掩码操作后进行重建。

    • ITM-图文匹配(Image-Text Matching)

      在多模编码器直接进行二分类判断图像与文本是否匹配即可。

  3. 动量蒸馏

    主要用于改善在噪音监督下的学习。

    具体实现:

    在训练过程中,通过对模型参数进行平均来维护一个动量版本的模型,并使用动量模型来生成伪标签作为额外的监督。使用$\text{MoD}$,模型不会因为生成不同于网络标注的合理输出而受到惩罚。$\text{MoD}$不仅能够改善预训练,也能够改善下游任务。

References

  1. ALBEF:《Align before Fuse》
  2. 自然语言处理】【多模态】ALBEF:基于动量蒸馏的视觉语言表示学习

BLIP模型

不同的大模型

LLaMA模型

LLaMA: Open and Efficient Foundation Language Models

研究背景

希望通过完全公开的数据集,更小的模型,实现比起更大模型的效果。

本文主要是在预训练数据、模型结构上做了相应的改进,为了提高训练速度也提出了一些相关的工作

主要工作

  1. 数据处理-在七个开源数据集上做数据预处理,主要是消除重复数据、过滤低质量内容(启发式过滤、n-gram语言模型过滤)
  2. 模型结构-在原有基础上分别增加了Pre-norm(RMSNorm)SwiGLU激活函数RoPE(旋转位置编码)
  3. 提速-Flashattention(用于提高显存的使用效率)

模型参数:
llama-7B:词表大小-32k,word_embedding-4096,head-32,layer-32
实现中QKV矩阵没有用偏置参数;
llama-params

结论:

1)在阅读理解、代码生成领域,优于GPT-3或者PaLM模型。

2)在数学推理领域表现欠佳,作者给出的原因是没有在数学数据上进行过finetune。

3)在大规模多任务语言理解领域表现欠佳,不如Chinchilla-70B和PaLM-540B模型,原因是LLaMA在预训练数据集中,仅仅使用了很少一部分书籍和专业论文(177G VS 其他模型的2TB)。

References

  1. 开源大模型LLaMA(羊驼)论文详解——Facebook母公司Meta推出,超越GPT-3

LLaMA 2

Llama 2模型的主要特点和升级如下:

  1. 提供了7B、13B和70B参数三个规模的版本。

  2. 70B参数版本使用了分组查询注意力(GQA),提升了推理性能。

  3. 发布了专门针对聊天进行微调的Llama 2-Chat模型,效果与ChatGPT相当。

  4. 相比Llama 1,训练数据量增加40%,上下文长度加倍到4096,采用了更强的数据清理。

  5. 在多项推理、编码、知识测试的基准上,Llama 2的表现优于其他开源语言模型。

  6. Llama 2-Chat通过强化学习从人类反馈中继续提升,注重模型的安全性和帮助性。

  7. Llama 2主要针对英文优化,由于词表大小限制,直接应用于中文效果一般,需要进行中文特定的增强训练。

References

  1. 【LLM系列之LLaMA2】LLaMA 2技术细节详细介绍!
  2. 【LLM】Meta LLaMA 2中RLHF技术细节
  3. 【LLM系列之LLaMA2】LLaMA 2技术细节详细介绍! - 知乎 (zhihu.com)

Chinese LLaMA

扩展词表,将中文token添加到此表中,提高中文编码效率,具体实现:

  1. 中文语料上使用Sentence Piece训练一个中文tokenizer,使用了20000个中文词汇。然后将中文tokenizer与原始的 LLaMA tokenizer合并起来,通过组合二者的词汇表,最终获得一个合并的tokenizer,称为Chinese LLaMA tokenizer。词表大小为49953。
  2. 为了适应新的tokenizer,将transformer模型的embedding矩阵从 V*h 扩展到 V’*h ,新加入的中文token附加到原始embedding矩阵的末尾,确保原始词表表的embedding矩阵不受影响。(这里输出层应该也是要调整的)
  3. 在中文语料上进一步预训练,冻结和固定transformer的模型参数,只训练embedding矩阵,学习新加入中文token的词向量表示,同时最小化对原模型的干扰。
  4. 在指令微调阶段,可以放开全部模型参数进行训练。

中文tokenizer-扩展embedding矩阵-预训练只训练embedding矩阵-指令微调,放开全部模型参数进行训练

参考

1.大语言模型综述<演进,技术路线,区别,微调,实践,潜在问题与讨论>

alpaca模型

Alpaca: A Strong, Replicable Instruction-Following Model

基于指令调优的LLaMA模型,实现类ChatGPT大模型的训练步骤-SFT、Reward Model、RLHF

研究背景

关键词概括:指令调优、容量小、易复现、成本低

实现方式:即指令调优,通过设计相应的训练方法实现模型性能的提升

主要工作

基于text-davinci-003的接口以及self-instruct技术生成对应的高效指令用以微调LLaMA模型

alpaca

References

  1. 开源大模型斯坦福Alpaca(小羊驼)——指令调优的LLaMA模型——100美元媲美GPT3.5

ChatGLM模型

双语对话模型、6B模型

背景:

  1. 自回归模型:GPT-无条件生成
  2. 自编码模型:BERT-NLU
  3. encoder-decoder:T5-条件生成

综合以上GLM模型基于autoregressive blank infilling方法

GLM框架:

  1. AE:input随机删除连续token(mlm)
  2. AR: 顺序重建连续token
  3. span shuffling + 二维位置编码技术
  4. 通过改变缺失spans的数量和长度,自回归空格填充目标可以为条件生成以及无条件生成任务预训练语言模型。

具体细节

  1. 自回归空格填充任务

任务设计:

  • 自注意力掩码

对文本片段采样(采用泊松分布采样span长度与BART参数一致),先得到挖空之后的文本parta(相当于掩码操作);

然后对所有采样片段随机排列(捕获不同片段之间的依赖关系)拼接到parta之后,用特殊字符切分不同的位置。

  • 位置编码

二维位置编码:

2d-pos
从图像来看,AE学习parta,AR学习partB

  1. 多目标预训练

通过多任务预训练实现能够同时处理NLU和文本生成的模型效果。

目标任务:

  • 文档级别。采样一个单一的区域,其长度从原始长度的 50% 到 100% 之间的均匀分布中采样。该目标旨在进行长文本生成。
  • 句子级别。限制遮盖的区域必须是完整的句子。多个区域(句子)被采样,覆盖原始文本的 15% 的词数。该目标旨在进行 seq2seq 任务,其预测结果通常是完整的句子或段落。
  1. 模型结构调整

layerNorm位置的影响

1)重组了LN和残差连接的顺序;

2)使用单个线性层对输出token进行预测;

3)激活函数从ReLU换成了GeLUS。

  1. 微调工作

将NLU任务转换成完形填空任务,对于具体的情感分类任务,生成得到对应的结果。为了与真实标签匹配上,会将情感的类别映射到对应的不同表示。

References

  1. GLM: General Language Model Pretraining with Autoregressive Blank Infilling
  2. ChatGLM2-6B
  3. 清华ChatGLM底层原理详解——ChatGPT国内最强开源平替,单卡可运行
  4. 清华大学通用预训练模型:GLM
  5. 【报告笔记】 大规模语言模型系列技术:以GLM-130B为例

Ziya模型

基于LLaMA-13B训练得到的;重新构建了中文词表(LLaMA只针对英文),使得模型具备中文能力。

微调:
500万条多任务样本的有监督微调(SFT)和综合人类反馈训练(RM+PPO+HFFT+COHFT+RBRS)

评估:
重新设计了一个评估集,主要分为9类任务,32个子类共185个问题

方法

  • 基于LLaMA的大规模增量训练
    超参:bs:2,6m tokens,FP16混精

增量式学习110B tokens

  • tokenizer

原本词表的基础上增加7k+个常见中文字,词表大小:39410,解决LLaMA原生分词对中文编码效率低下的问题。

  • 数据

数据清洗-更高质量的预料。

英文数据:Books、Wikipedia、Code、OpenWebText

中文数据:“悟道”数据集(智源)+自建中文数据集

清洗操作:去重、模型打分、数据分桶、规则过滤、敏感主题过滤和数据评估

  • 多阶段课程学习+增量学习

用大模型辅助划分已有的数据难度,分多个阶段进行有监督微调。

有监督微调数据包含多个高质量数据,总计500w训练样本,经过人工筛选和校验。

  • 综合多种人类反馈学习算法

在以RM、PPO为主的方法基础上,结合了多种其他手段,包含人类反馈微调(HFFT)、AI反馈、基于规则的奖励系统(RBRS)和后见链微调(COHFT)弥补PPO方法的短板加速训练。

References

  1. IDEA研究院封神榜团队再次出击, 推出开源通用大模型系列“姜子牙”
  2. 多模态Ziya上线!姜子牙通用模型垂直能力系列 Vol.1发布

PaLM模型

参考

1.【自然语言处理】【大模型】PaLM:基于Pathways的大语言模型

BLOOM模型

参考

  1. 【自然语言处理】【大模型】BLOOM:一个176B参数且可开放获取的多语言模型

RWKV模型

参考

1.【自然语言处理】【大模型】RWKV:基于RNN的LLM

Chinchilla模型

References

Vicuna模型

概述:LLaMA-13B+ShareGPT用户对话数据(70k)微调

主要工作:

Vicuna在训练中将序列长度由512扩展到了2048,并且通过梯度检测和flash attention来解决内存问题;调整训练损失考虑多轮对话,并仅根据模型的输出进行微调。

效果可以:可以达到ChatGPT 90%的效果

References

  1. 大模型入门(一)—— LLaMa/Alpaca/Vicuna

Claude模型

References

数据集

BoolQ PIQA SIQA HellaSwag WinoGrande ARC-e ARC-c OBQA

MMLU

微调工具

RLHF

https://zhuanlan.zhihu.com/p/624589622
https://zhuanlan.zhihu.com/p/468828804
https://github.com/microsoft/DeepSpeedExamples/tree/master/applications/DeepSpeed-Chat
https://huggingface.co/blog/rlhf
https://www.cnblogs.com/jiangxinyang/p/17374278.html

细节内容

分词实现

分词粒度

word:
优点:词的边界和含义得到保留;
缺点:1)词表大,稀有词学不好;2)OOV;3)无法处理单词形态关系和词缀关系;

char:
优点:词表极小,比如26个英文字母几乎可以组合出所有词,5000多个中文常用字基本也能组合出足够的词汇;
缺点:1)无法承载丰富的语义;2)序列长度大幅增长;

subword:可以较好的平衡词表大小与语义表达能力;

分词算法

token-alg

  1. BPE

核心思想
从一个基础小词表开始,通过不断合并最高频的连续token对来产生新的token。

优势
可以有效地平衡词汇表大小和编码步数(编码句子所需的token数量,与词表大小和粒度有关)。

劣势
基于贪婪和确定的符号替换,不能提供带概率的多个分词结果(这是相对于ULM而言的);decode的时候面临歧义问题。
BPE-disa

典型模型
GPT/GPT2/RoBERTa

  1. Byte-level BPE

核心思想
将BPE的思想从字符级别扩展到字节级别。(UTF-8)
由于这种方式获得的token长度会长很多,可以考虑采用可变长度的n-gram实现分割;

需要注意的
1,ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字度节的空间。
2,UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节
3,Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节

优势
1)效果与BPE相当,但词表大为减小;2)可以在多语言之间通过字节级别的子词实现更好的共享;3)即使字符集不重叠,也可以通过子节层面的共享来实现良好的迁移。

劣势
1)编码序列时,长度可能会略长于BPE,计算成本更高;2)由byte解码时可能会遇到歧义,需要通过上下文信息和动态规划来进行解码。

典型模型
GPT-2

  1. WordPiece

核心思想:
与BPE类似,也是从一个基础小词表出发,通过不断合并来产生最终的词表。主要的差别在于,BPE按频率来选择合并的token对,而wordpiece按token间的互信息来进行合并。注:互信息,在分词领域有时也被称为凝固度、内聚度,可以反映一个词内部的两个部分结合的紧密程度

优势:可以较好的平衡词表大小和OOV问题;

劣势:可能会产生一些不太合理的子词或者说错误的切分;对拼写错误非常敏感;对前缀的支持不够好;

典型模型
BERT/DistilBERT/Electra

  1. ULM
    核心思想:
    初始化一个大词表,然后通过unigram 语言模型计算删除不同subword造成的损失来代表subword的重要性,保留loss较大或者说重要性较高的subword

优势
1)使用的训练算法可以利用所有可能的分词结果,这是通过data sampling算法实现的;2)提出一种基于语言模型的分词算法,这种语言模型可以给多种分词结果赋予概率,从而可以学到其中的噪声;3)使用时也可以给出带概率的多个分词结果。

劣势
1)效果与初始词表息息相关,初始的大词表要足够好,比如可以通过BPE来初始化;2)略显复杂。

典型模型:
XLNet/ALBERT/Marian/T5.

分词算法关系

  1. SentencePiece
    SentencePiece,有些文章将其看作一种分词方法,有的地方将其视为一个分词工具包。
    支持:BPE、ULM子词算法,也支持char, word分词;以unicode方式编码字符,无须Pre-tokenization;支持编码与解码的可逆;快速便捷。

  2. tokenizers库:支持快速从头训练自己的分词器

参考

  1. 【OpenLLM 008】大模型基础组件之分词器-万字长文全面解读LLM中的分词算法与分词器(tokenization & tokenizers):BPE/WordPiece/ULM & beyond


大规模训练技术挑战

  • 分布式训练:

数据并行:每张卡部分数据

模型并行:将模型每一层是现成可以并行到多卡实现的形式,进而将单层的计算可以切分到多卡上

流水并行:对模型块切分,将不同的层放到不同的卡上

挑战:

  • 显存墙

模型比较大,单卡无法承载模型,需要用模型并行以及流水并行才能训练模型,但是会降低CPU的运算强度

  • 计算墙

大数据+大模型->巨大计算量。但由于显存墙的缘故,单卡运算强度低,多卡加速比较差->再多资源也可能无法训练完

显存挑战

模型训练对显存的占用可以分为两部分:一部分是模型 forward 时保存下来的临时变量,这部分显存会在反向传播时会逐渐释放掉,这部分一般被称为 Activations。另一部分则是参数、梯度等状态信息占用的显存,这部分一般被称为 Model States。

  1. 前向计算的过程是最占用显存的,降低这部分的峰值就能够给不超过显存墙
  2. 短板效应-Model states 和 Activations 都有可能造成显存墙问题。它们相互独立但又相互制约。任意一侧的增大都会导致留给另一侧的显存空间变小,所以单单对一侧做优化是不够的,必须同时优化 Model states 和 Activations。
  3. Transformer的大矩阵乘法能够拆分做模型并行,可以降低Activations的占用。

通信挑战

需要将切分的训练信息做聚合,问题:

  • 更新频繁,但传输速率远比不上加速芯片的运算速率;
  • 机器规模较大的时候,基于 Ring-AllReduce 的通信聚合方式所构造的 Ring 将越来越大(节点越多通信量越大、延迟越高),延迟将不可接受。
  • 需要通信的梯度较多,带宽扛不住;多种并行也增加了通信的压力
  • 大部分采用同步的通信步调,导致短板效应明显,单卡波动以及通信延迟导致问题变得更加严重
  1. 直接增大宽带-无法解决

受限于网络协议,宽带的利用率不够高;

计算挑战

需要较大的算力,但各种技术也会降低计算资源的利用率,需要考虑怎样提高计算效率

  • Operator-level

算子级别优化,需要解决的问题:

小算子过多Kernel实现不够高效内存局部性差

  • Graph-level

计算图优化,加速大规模训练,需要解决:

如何搜索出计算效率更高的计算图,如何用计算编译技术解决小算子问题,如何进行通信和计算的overlap 等

  • Task-level

训练阶段系统设计-实现一个计算效率最高的系统设计

  1. 优秀分布式训练架构-扩展性强、节点很多也能保持较高加速比
  2. 平衡显存优化和速度优化

References

  1. 大规模训练系列之技术挑战

微调经验与技术说明

经验方法

  1. Freeze方法

Freeze方法,即参数冻结,对原始模型部分参数进行冻结操作,仅训练部分参数,以达到在单卡或不进行TP或PP操作,就可以对大模型进行训练。

  1. P-Tuning方法

Alt text

一种针对于大模型的soft-prompt方法。

P-Tuning,仅对大模型的Embedding加入新的参数。

P-Tuning-V2,将大模型的Embedding和每一层前都加上新的参数。

  1. lora方法

LORA

在大型语言模型上对指定参数增加额外的低秩矩阵,并在模型训练过程中,仅训练额外增加的参数。当“秩值”远小于原始参数维度时,新增的低秩矩阵参数量很小,达到仅训练很小的参数,就能获取较好的结果。

技术分类说明

ft技术概括

  1. fine-tuning技术

    • (无监督)预训练+finetune的方式,实现对不同任务的适应,这是比较common的方法;

    • 另一种则是采用迁移学习,对网络实现冻结,仅更新全连接层,其他层权重不变;

当前FT方式

  1. parameter-efficient fine-tuning技术(PEFT)

旨在在尽可能减少所需的参数和计算资源的情况下,实现对预训练语言模型的有效微调。

  • 蒸馏:学生模型(小模型)模仿教师模型(大模型)
  • 适配器训练(adapter training):适配器是添加到预训练模型中的小型神经网络,用于特定任务的微调。这些适配器只占原始模型大小的一小部分,这使得训练更快,内存需求更低。适配器可以针对多种任务进行训练,然后插入到预训练模型中以执行新任务。eg:lora
  • 渐进收缩(progressive shrinking):FT期间逐渐减小预训练模型,减少模型参数量的同时保证模型的性能。
  1. prompt-tuning技术

重点是调整输入提示(input prompt)而非修改模型参数,即不会对原有的参数做任何修改,只有输入提示被修改以适应下游的任务。

相比于FT优势:

  1. 计算成本和资源、时间等更少
  2. 更加灵活

相关技术:

  1. Prefix tuning(前缀调整)

    对特定任务学习连续提示,通过优化这个提示表示特征,模型能够在不修改底层模型的前提下实现不同的任务。

  2. P-Tuning

    不同在于这个对位置没有特定的要求

    P-Tuning涉及训练可学习的称为“提示记号”的参数,这些参数与输入序列连接。这些提示记号是特定于任务的,在精调过程中进行优化,使得模型可以在保持原始模型参数不变的情况下在新任务上表现良好。

References

  1. 大模型LLM-微调经验分享&总结
  2. 预训练大语言模型的三种微调技术总结:fine-tuning、parameter-efficient fine-tuning和prompt-tuning的介绍和对比

LoRA技术介绍

研究背景

在LoRA方法提出之前,也有很多方法尝试解决大模型微调困境的方法。其中有两个主要的方向:

(1) 添加adapter层;

(2) 由某种形式的输入层激活。

但是这两种方法都有局限性:

  1. Adapter层会引入推理时延
    adapter

  2. prefix-tuning难以优化
    prefix-tuning

prefix-tuning方法是受语言模型in-context learning能力的启发,只要有合适的上下文则语言模型可以很好的解决自然语言任务。但是,针对特定的任务找到离散token的前缀需要花费很长时间,prefix-tuning提出使用连续的virtual token embedding来替换离散token。

技术细节

LoRA实现

总体概括:LoRA的基本原理是冻结预训练好的模型权重参数,在冻结原模型参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。由于这些新增参数数量较少,这样不仅 finetune 的成本显著下降,还能获得和全模型微调类似的效果。

其中,增加的是低秩分解矩阵,参数量小,也不会增加推理延迟。在实现过程中,会将该矩阵注入到transformer的每一层。

实现说明:
通常,神经网络中会包含许多进行矩阵乘法的稠密层,这些层通常是满秩的。相关研究表示其实预训练语言模型具有低的“内在维度”,受该工作的启发,在模型适配下游任务的过程中,权重更新也应该具有低的“内在秩”。

优点:显存和存储空间的减少。可以在部署时以更低的成本切换任务,仅需要交换LoRA权重即可。

References

  1. 【自然语言处理】【大模型】极低资源微调大模型方法LoRA以及BLOOM-LORA实现代码
  2. LoRA(Low-Rank Adaptation of Large Language Models)– 一种大模型prompt-tuning调优方法
  3. LoRA:大语言模型参数高效性微调方法
  4. 深入浅出 LoRA - 知乎 (zhihu.com)

Chain of Thought

思维链主要用于提升模型的逻辑推理能力,使得AI能够有类似于人一样的推理能力。

研究背景

最早的相关工作是few-shot,one-shot,zero-shot等在推理时能够提供不同量的样本,使得模型的推理能力能够有进一步的提升。但这种方法依旧存在较大的问题,如果你的问题相对简单,不需要什么逻辑推理,可能靠大模型背答案就能做得不错,但是对于一些需要推理的问题,都不用太难,就一些简单的算术应用题,大模型就大概率不太 work。

相关工作

CoT
简单来说就是将原本的问题,经过多个中间步骤最终获取答案,实现更好的推理。

具体实现效果:常识推理能力赶超人类;数学逻辑推理能力大幅度提升;LLM可解释性更强。

  • Zero-shot-CoT

zsCoT

零样本思维链通过引入与样本无关指示,来实现自我增强

  • 多数投票提高CoT性能——自洽性(Self-consistency)

其实核心就是对生成的多个结果选择取多数的答案,这一个可以直接通过控制temprature和Top-K来实现,很显然这会使得时间会变长。

  • LtM(Least to Most prompting)

LtM

将问题按步骤拆分成多个子问题,解决完多个子问题后回答最终问题。具体训练就是分为多个CoT阶段实现。

  • Flan-PaLM/T5:CoT + Finetuning

Flan-T5:在超大规模的任务上对模型进行微调,使得单个模型在1800多个NLP任务上都能够有很好的表现。

微调方法就是在加入CoT数据。其核心是对多任务数据的统一。

实现流程:

  1. 收集带有标签的数据,将每个任务定义为<数据,任务类型>
  2. 对数据的形式进行改写,比如改写成CoT的形式;并对是否需要CoT和few-shot,进行组合构造
  3. 训练过程:恒定的学习率以及 Adafactor 优化器;同时将多个训练样本打包成一个训练样本,通过特殊结束token进行分割。

结论:

  1. 微调有效果,模型越大越好,任务越多越好
  2. 混杂CoT很重要
  • 提升小模型的推理能力:Fine-tune-CoT

旨在利用大模型思维链推理能力指导小模型解决复杂问题。

FuCoT

简单的说就是用ChatGPT这类大模型生成CoT数据,然后再喂给小模型进行微调。同时该方法需要生成尽可能多的数据。

CoT的局限性

  1. 思维链只有在模型规模足够大的时候才适用,如何实现小模型的思维链应用是值得探索的方向
  2. 应用领域有限,当前的实验结果只是在部分领域有所评估。另外,思维链只是提高模型的推理能力,但不代表模型真正理解内在的逻辑。

References

  1. 【他山之石】大模型思维链(Chain-of-Thought)技术原理

LLM-Tricks

数据相关

self-instruct

Self-Instruct: Aligning Language Model with Self Generated Instructions

基于指令框架降低人工标注指令数据的成本。

相关工作-人工标注:

  • 人工设计相关指令任务
  • 对当前指令任务进行标注(编写正确答案)

当前工作self-instruct:

  • 人工设计175个表示不同任务的指令(完整输入输出),将这部分数据作为种子池
  • 使用模型生成新的指令:6个人工指令+2个生成指令-》生成新的指令
  • 对该模型生成的指令判断是否分类任务:prompt模板会根据是否是分类任务有所不同。
  • 使用模型生成实例:输入优先以及输出优先(分类)两种输出策略。
  • 对上述模型生成的数据进行过滤和后处理:ROUGE-L<0.7才加入-保证多样性,减少重复内容;排除一些无法处理的指令;过滤输入相同但输出不同的实例。
  • 将经过过滤和后处理的数据添加到种子池中;
    一直重复上述2到6步直到种子池有足够多的数据;

对于分类任务,如果先生成文本,后生成标签,模型会偏向于生成比较单一的结果。所以对于分类任务,是先生成随机的标签,然后再生成该标签对应的文本。

指标ROUGE-L:最长连续公共子串占比对两个字符串的比值,再通过F1计算

结论:GPT3+self-instruct性能与text-davinci-001接近;self-instruct是有一定性能提升的;数据集不大-252条指令

  1. Self-Instruct: Aligning Language Model with Self Generated Instructions
  2. NLP评估指标之ROUGE

In-Context learning

References

1.

大模型相关基础内容

算力区分

FLOPS(Floating-Point Operations Per Second) - 这是衡量计算机或其他设备执行浮点运算速度的基本单位,表示每秒钟可以执行多少次浮点运算(加、减、乘和除等运算)。FLOPS 以前通常用于衡量大规模科学计算和数值模拟等需要双精度浮点数计算的应用程序,现在也被用于描述AI高精度训练算力。

FP64:双精度浮点数,占用64位存储空间,通常用于大规模科学计算、工程计算等需要高精度计算的算法。

FP32:单精度浮点数,占用32位存储空间。与双精度浮点数相比,存储空间较小但精度较低,部分科学计算和工程计算也可以使用FP32,但通常也用于神经网络的前向推理和反向传播计算。

FP16:半精度浮点数,占用16位存储空间。存储空间更小但精度进一步降低,通常用于模型训练过程中参数和梯度的计算。

BF16: 用于半精度矩阵乘法计算(GEMM)的浮点数格式,占用16位存储空间。相对于FP16,在保持存储空间相同的情况下能够提高运算精度和效率。

TF32:TensorFLoat-32,是NVIDIA定义的使用TensorCore的中间计算格式。

INT8:8位整数,用于量化神经网络的计算,由于存储和计算都相对于浮点数更加高效,在低功耗、嵌入式系统和边缘设备等领域有着广泛的应用。用TOPS(Tera Operations Per Second,每秒处理的万亿级别的操作数)作为计算性能的单位。

INT4:4位整数,只能表示-8到7的16个整数。因为新的量化技术出现,追求更低的存储空间,减少计算量和更高的算力密度,而产生的新格式。

量化:本质上只是对数值范围的重新调整,可以「粗略」理解为是一种线性映射。

CUDA内核对INT8处理不是十分高效,INT8计算难以使得GPU核心饱和,且由于需要额外的量化开销,因此会减慢整体的推理速度。

参考

  1. 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍-原博客
  2. int8速度慢原理分析

面经

https://zhuanlan.zhihu.com/p/643829565
https://zhuanlan.zhihu.com/p/643836163
https://zhuanlan.zhihu.com/p/643560888

Transformer

结构篇:

transformer结构

encoder-decoder:6 block

相关问题

  1. self-attention实现

    $Softmax\frac{(Q*k)}{\sqrt{d_k}}V$,其中$d_k$是Q,K的列数,防止内积过大;可以使得输入的数据的分布变得更好,防止梯度消失,让模型能够更容易训练。

    只要能够建模相关性,别的建模方式也能够代替当前的自注意力计算;同样的能够缓解梯度消失问题也不用除掉列数值。

    对位置信息不敏感,需要增加pos-emb;embedding 的直接相加,类似于信号的叠加,只要保证频率不同叠加的信号就能够再后续发挥作用。

    QKV的不同主要是为了增强容量和表达能力。多头也是为了增加参数量进而增强模型的表达能力,

  2. 整体的维度变化

    input:(bs,max_len)
    embedding:(bs,max_len,hidden_size)
    MHA:(bs,max_len,hidden_size)

     Q(K,V): (bs,max_len,hidden_size)
     多头机制:
     input:(bs*num_heads,max_len,hidden_size//num_heads)
     output:(bs*num_heads,max_len,hidden_size//num_heads)
     concat&Linear:(bs,max_len,hidden_size)
    

    add&Post-Norm:(bs,max_len,hidden_size)
    FF:(bs,max_len,hidden_size)

     先升维再降维
     FF1:(bs,max_len,hidden_size*4)
     FF2:(bs,max_len,hidden_size)
    
  3. 计算复杂度对比

img

References

  1. 【关于Transformer】 那些的你不知道的事(上)
  2. 从Attention 到 MultiHeadAttention
  3. Transformer模型详解(图解最完整版)
  4. 说说transformer当中的维度变化
  5. 大模型面试八股

位置编码相关工作

总述

基于自注意力机制本身的计算原理,其对位置信息不敏感,具体从公式角度来看:

Attention-cal

调换序列中两个元素的位置不会影响到当前的注意力得分计算。

绝对位置编码

  • 训练式

直接将位置编码当作可训练参数。一般的认为,该方法的缺点在于没有外推性,超过预设窗口大小的内容就无法处理了。(当前有一些可以通过如层次分解的方法将位置编码外推足够长的范围)

  • 三角式-transformer:

image-20230718230559320

image-20230718230640108

通过内积的方法将相对位置信息融入到特征中。但具体实现中,由于参数矩阵也需要参与计算$p^{T}{t}W^{T}{Q}W_{K}p_s \not ={p^{T}_{t}p_s}.$经相关研究,可知由于参数矩阵使得余弦波不再是理想情况,无法真正感知元素的相对未知信息。

  • 递归式

本质思想是RNN这类递归模型,学习位置编码,再接入transformer。但最大的问题是牺牲了一定的并行性,会带来速度瓶颈。

相对位置编码

相对位置编码在计算自注意力矩阵时,根据矩阵元素的下标,直接考虑每个元素对应的两个token间的相对位置关系。此外,相比于绝对位置编码仅仅在输入层考虑顺序特征,相对位置编码则通过修改自注意力计算的过程,植入到Transformer架构的每一层。

不同模型的相对位置编码:

参考

  1. Transformer位置编码(基础)
  2. 让研究人员绞尽脑汁的Transformer位置编码

RoPE

不同激活函数与优化器设计

优化器

AdamW

激活函数

SwiGLU

  1. siwish-线性函数与ReLU之间的平滑

$f(x)=x \times sigmoid(\beta x)$

  1. GELU-高斯误差线性单元,RELU的变种

$f(x)=x \times \phi(x),\phi(x)是正态分布的累积函数$,和Swish形式性质相似,表现相当

  1. GLU-门控
    $\text{GLU}(a, b) = a \otimes \sigma(b)$

具体就是首先通过中间向量g(x)=xW进行门控操作,使用Sigmoid函数σ将其映射到0到1之间的范围,表示每个元素被保留的概率。然后,将输入向量x与门控后的向量进行逐元素相乘(即 ⊗ 操作),得到最终的输出向量。

  1. GEGL-GLU变体

就是将GLU中的sigmoid激活函数替换成GELU激活函数
5. SwiGLU
swishglu

就是将GLU中的sigmoid激活函数替换成Swish激活函数

参考

  1. 大语言模型综述<演进,技术路线,区别,微调,实践,潜在问题与讨论>

模型结构微调

Norm

Pre-Norm

  • LayerNorm会影响训练的稳定性

Megatron-LM 用实验证明layernorm后置效果要更加稳定

image-20230712101727279

Post-LN(原始的BERT)

Pre-LN:On layer normalization in the transformer architecture

Sandwich-LN: Cogview: Mastering text-to-image generation via transformers

通常认为稳定性上: Sandwich-LN > Pre-LN > Post-LN

Norm类型

  • LayerNorm
    传统transformer-Post-LN、随着层数加深梯度范数会增大导致训练不稳定。
    Pre-LN:使用pre LN的深层transformer训练更稳定,可以缓解训练不稳定问题。但缺点是pre LN可能会轻微影响transformer模型的性能 大语言模型的一个挑战就是如何提升训练的稳定性。
    LayerNorm

    Norm中采用的性质:

    1. 平移不变性:均值
    2. 缩放不变性:方差
  • RMSNorm
    只保留缩放,简化计算的同时,效果基本相当甚至还略有提升。
    RMSNorm

  • DeepNorm

    deepnorm

    用以缓解爆炸式模型更新的问题,更可以再此基础上实现千层堆积。
    $x = LayerNorm(x \times \alpha + f(x))$

    1. DeepNorm在进行Layer Norm之前会以 α参数扩大残差连接
    2. 在Xavier参数初始化过程中以 β减小部分参数的初始化范围

参考

  1. 大语言模型综述<演进,技术路线,区别,微调,实践,潜在问题与讨论>
  2. DEEPNORM:千层transformer…

不同attention实现

Flash-Attention

PageAttention

Multi-Query Attention

Group-Query Attention

Bert与GPT的不同

自回归模型

AR,代表GPT,从左向右学习。

AR模型通常用于生成式任务,在长文本的生成能力很强,比如自然语言生成(NLG)领域的任务:摘要、翻译或抽象问答。

具体来说,就是利用上文词预测下一个词的发生概率。

优点:AR模型擅长生成式NLP任务。AR模型使用注意力机制,预测下一个token,因此自然适用于文本生成。此外,AR模型可以简单地将训练目标设置为预测语料库中的下一个token,因此生成数据相对容易。

缺点:AR模型只能用于前向或者后向建模,不能同时使用双向的上下文信息,不能完全捕捉token的内在联系。

GPT系列模型

  • GPT1
    通过无监督预训练+有监督微调实现模型性能的提升。另外,将预训练目标作为辅助目标加入下游任务loss中,将会提高有监督模型的泛化性能,并加速收敛。

  • GPT2-15B

“所有的有监督学习都是无监督语言模型的一个子集”

增大了模型大小与参数规模,提出了zero-shot,并且提出了以一个通用预训练模型为基础,使得下游任务无需手动生成或标记训练数据集,更不需要修改预训练模型的参数或结构。

GPT2通过实验验证了海量数据与大量参数训练得到的语言模型可以迁移到下游其他任务中,无需额外训练和微调。

  • GPT3-175B
    引入了In-Context Learning的概念,GPT3参数量增大的同时,期望不通过微调直接能够通过上下文指示也能够有较好的性能。

    In-Context learning是元学习(Meta-learning)的一种,元学习的核心思想在于通过少量的数据寻找一个合适的初始化范围,使得模型能够在有限的数据集上快速拟合,并获得不错的效果。

  • InstructGPT

    提出动机:让模型的输出达到3H(helpful,honest,harmless)

    1. RLHF

    人类喜欢的内容大致符合以上的3H标准,并且也能够保证生成内容流畅性与语法正确性;

    通过RL指导模型训练,以人类反馈作为奖励,实现将人类经验内容的注入。

    1. 实验步骤

    有监督微调-基于人工标注的对比数据训练奖励模型-基于RM利用PPO微调SFT模型;

    三部分数据集:
    SFT数据:简单任务、few-shot任务、用户相关的任务;
    RM数据:让模型先生成一批候选文本,然后针对这部分数据进行排序;
    PPO数据:无标注数据,来自GPT3的API用户调用任务数据;

    训练设置:
    SFT:与GPT3一致,适当过拟合有助于后续的训练;
    RM:输入prompt和response,输出奖励值;训练过程中将同一个prompt的k个输出成对取出共有$C_{K}^{2}$个结果作为一个batch输入,loss就是最大化结果的差值;
    PPO:KL惩罚确保两个策略的输出差距不会很大;为了防止模型在通用NLP任务上性能大幅度下降,优化目标中增加了通用语言模型的目标;

    1. 优缺点

    优点:结果更真实,无害性提高,coding能力提升;
    缺点:会降低在通用NLP任务上的效果;依然会给出奇怪的输出;对指示十分敏感;对简单概念过分解读。

  • GPT4-1.8T

  1. 模型架构

采用的是MoE的架构

  1. 数据组成

自编码模型

AE,代表BERT,主要是对掩码部分能够实现重建,常用于内容理解任务,比如自然语言理解(NLU)中的分类任务:情感分析、提取式问答。

优点:在上下文依赖中,BERT的表示可以涵盖前后向两边的上下文。BERT使用双向transformer,在语言理解相关的任务中表现很好。

缺点:

  • 输入噪声:
    BERT在预训练过程中使用【mask】符号对输入进行处理,这些符号在下游的finetune任务中永远不会出现,这会导致预训练-微调差异。而AR模型不会依赖于任何被mask的输入,因此不会遇到这类问题。
  • BERT在对联合条件概率进行因式分解时,基于一个独立假设:在给定了unmasked tokens时,所有待预测(masked)的tokens是相互独立的。

Encoder-Decoder

同时包含编码器和解码器两部分,常用的有T5、BART等模型

参考

  1. [万字长文]ChatGPT系列论文精读——大模型经典论文GPT1、GPT2、GPT3
  2. 一文读懂GPT家族和BERT的底层区别——自回归和自编码语言模型详解
  3. 大规模语言模型(LLMs)预训练十六: GPT-4大揭密
  4. GPT-4 Architecture, Infrastructure, Training Dataset, Costs, Vision, MoE (semianalysis.com)
  5. ChatGPT/InstructGPT详解

介绍

CRF:给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型-假设:输出变量构成马尔科夫随机场,其联合概率分布构成概率无向图模型。

CRF:判别模型

学习方法:极大似然估计或正则化的极大似然估计-最大化发生概率

常用解码方法:维特比算法

维特比算法

CRF预测问题-非规范化概率最大的最优路径问题
即:$\max_{y} (w \cdot F(y,x)),w表示特征权值,F表示转移的特征$

  • 参数:输入-模型特征向量、权值向量、观测序列;输出:最优路径
  • 初始化:起始标签-dp[0][state] = start[state] * emission[state][x1]
  • 递推-动态规划:计算每一个前一个状态prev_state到当前状态state的得分: dp[t][state] = dp[t-1][prev_state] * transition[prev_state][state] * emission[state][xt]从中选择最大的得分,同时记录使得得分最大的prev_state,以便后续进行路径回溯。
  • 终止:找到在最后位置的最大得分及其对应的状态。
  • 路径回溯:从最后位置的最优状态开始,使用之前存储的prev_state信息回溯找到整个最优路径。
  • 输出最优路径。

BART-预训练方法

BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

研究背景

文本理解任务,大部分的工作范式都是采取语言模型预训练+下游任务finetune这一种方式。BART模型相当于采用了BERT+GPT的模型结构兼顾上下文语境信息的同时带有自回归特性。BART相当于是建立在seq2seq Transformer model的基础上,使其分别能够适用于文本生成和文本理解的任务,并在这些任务都实现了较好的性能。

主要工作

  1. 模型结构BERT+GPT,兼顾理解与生成;
  2. BART的预训练任务是恢复基于随机噪声破坏后的文本;
  3. 具体的noise有5种:
    • token mask:单个掩码
    • token deletion:随机删去token
    • text infilling:随机将一段连续的token(称作span)替换成一个[MASK],span的长度服从$$ \lambda=3 $$的泊松分布。注意span长度为0就相当于插入一个[MASK]。
    • Sentence Permutation: 将一个document的句子打乱
    • Document Rotation: 从document序列中随机选择一个token,然后使得该token作为document的开头
  4. 适用于不同的下游任务

References

  1. 【论文精读】生成式预训练之BART
  2. BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

T5

BLOOM

GPT

References

  1. 预训练语言模型之GPT-1,GPT-2和GPT-3

CPT

解码算法

  1. greeedy-贪心

    直接logit最大

  2. beam search
    beam-search
    始终从k条最优序列中选择K个最好的

    beach search需要选择beam size,越小越接近greedy,beam size=1就等价于greedy. 越大beam size 计算代价就越大,并且有些试验告诉我们太大的beam size可能会有更差的效果。一般来说beam size=3是一个不错的trade off。

  3. sampling-based

    每次算出最有可能的token集合,然后按照某种概率分布从中采样n个候选答案。和beam search区别是用softmax代替argmax,通常用于开放式或者需要创造性的生成任务上,比如写故事/写诗之类。

  4. softmax temperature

    Softmax temperature是在softmax层上加了一个超参数,可以用来平衡diverse的。Softmax temperature是调节softmax的技巧,它不能单独使用,要配合greedy search或者beam search做decoding.

Refereces

  1. NLP综述:(三)自然语言生成-NLG
  2. 【自然语言处理】【文本生成】Transformers中用于语言生成的不同解码方法

Word2Vec模型

模型作用

对词语实现向量化表示,获得词向量。将one-hot表示转换成为稠密向量表示。

实现与细节

  • 具体模型实现

skip-gram:一对多映射

cbow:多对一映射

  • 实现方式

通过词向量的点积计算,获取词与词之间的相似性;并采用softmax映射到概率值。通过梯度下降,调整词向量的表示,进而获得良好的词向量。

b213f095-4f5b-40e6-a3fa-540de9a85157

两个网络权重行向量和列向量分别表示当前的词向量。

  • word2vec训练加速:

由于计算概率值时,需要对整个单词表做乘积和exp运算,因此计算量耗费较大。

高频词抽样;负采样提高训练效率;层级softmax

Tricks

  • 负采样

负采样损失函数

从单词表中按照一定规则随机选出一部分负样本,再进行概率计算,避免了在整个词汇表上的计算。并将原本的指数计算转换成sigmoid函数,也减小了这部分的计算量。

计算公式:
$$
\frac{\partial{J_{neg-sample}(\boldsymbol v_c,o,\boldsymbol U)}}{\partial\boldsymbol v_c} \= \frac{\partial (-log(\sigma (\boldsymbol u_o^T\boldsymbol v_c))-\sum_{k=1}^{K} log(\sigma (-\boldsymbol u_k^T\boldsymbol v_c)))}{\partial \boldsymbol v_c} \= -\frac{\sigma(\boldsymbol u_o^T\boldsymbol v_c)(1-\sigma(\boldsymbol u_o^T\boldsymbol v_c))}{\sigma(\boldsymbol u_o^T\boldsymbol v_c)}\frac{\partial \boldsymbol u_o^T\boldsymbol v_c}{\partial \boldsymbol v_c} - \sum_{k=1}^{K}\frac{\partial log(\sigma(-\boldsymbol u_k^T\boldsymbol v_c))}{\partial \boldsymbol v_c} \= -(1-\sigma(\boldsymbol u_o^T\boldsymbol v_c))\boldsymbol u_o+\sum_{k=1}^{K}(1-\sigma(-\boldsymbol u_k^T\boldsymbol v_c))\boldsymbol u_k
$$

References

  1. [NLP] 秒懂词向量Word2vec的本质
  2. word2vec

glove模型

GloVe:Global Vectors for Word Representation

两者最直观的区别在于,word2vec是“predictive”的模型,而GloVe是“count-based”的模型。

相比Word2Vec,GloVe更容易并行化,所以对于较大的训练数据,GloVe更快(大数据集训练更快)。

GloVe的本质是对共现矩阵进行降维。

实现流程概括:

  1. 构建共现矩阵

根据语料库构建共现矩阵,每个元素代表当前词(行)与其他词共现的次数(在特定窗口大小内)。并且增加了衰减函数计算权重,距离越远权重越小。

  1. 词向量与共现矩阵的近似关系

$$
w_{i}^{T}\tilde{w_{j}} + b_i + \tilde{b_j} = \log(X_{ij})
$$

  1. 构造损失函数

$$
J = \sum_{i,j=1}^{V} f(X_{ij})(w_{i}^{T}\tilde{w_{j}} + b_i + \tilde{b_j} – \log(X_{ij}) )^2
$$
需要在原有的基础上增加一个分段函数调节损失。

References

  1. 斯坦福大学的词向量工具:GloVe

LSTM模型

BiLSTM模型

References

  1. 详解BiLSTM及代码实现 - 知乎 (zhihu.com)

N-gram语言模型

N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。

每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。

根据窗口大小不同,每次截取N个词构成的内容,然后依照one-hot表示得到对应的特征向量

Refs

  1. N-gram提取特征 - 知乎 (zhihu.com)

词袋模型

选定文本内一定的词放入词袋,统计词袋内所有词在文本中出现的次数(忽略语法和单词出现的顺序),将其用向量的形式表示出来。

词袋选词:设置一些停用词;对相近词进行词干提取,只将词干放入词袋;词的同类变形,则通过词形还原将同一个特征加入词袋;

通过TF-IDF调整词袋模型得到的词频向量矩阵

Refs

  1. 文本特征提取—词袋模型,TF-IDF模型,N-gram模型(Text Feature Extraction Bag of Words TF-IDF N-gram ) - HuZihu - 博客园 (cnblogs.com)

prompt构建原则

  1. 清晰准确的指令
  • 使用分隔符,将不同的内容分隔开来
  • 要求模型给出HTML、JSON等标准化输出
  • 给出当前任务需要的假设条件
  • 给出一些标准样例作为提示
  1. 需要给模型思考的时间(CoT)
  • 指定完成一个任务需要的具体步骤
  • 需要先引导模型完成自我思考,再进行对比结论总结;直接让其对内容判断会出现一些误判

模型局限

模型幻觉,会生成一些看似合理但不正确的结果。

减轻影响的办法:

先让模型找到相关的知识背景内容;然后再让模型基于这些相关内容回答问题;

prompt的迭代

流程:

  1. 给出确定清晰的prompt
  2. 针对具体的出现的问题逐步迭代优化
  3. 必要时可以对批量样本迭代评估测试prompt性能

!prompt本身没有这么重要,主要是需要有能力迭代优化prompt

不同任务的prompt

文本概括

推理

文本转换

文本扩展

prompt实践

聊天机器人

Prompt与Instruct

prompt:激发语言模型的补全能力;针对具体的下游任务;

Instruct:激发语言模型的理解能力;设计面向多任务微调,进而实现有效的zero-shot;

参考

  1. ChatGPT/InstructGPT详解
0%