大模型基础知识汇总

news2024/11/25 14:08:00

本文总结大模型相关基础知识,用于大模型学习入门 (持续更新中…)

文章目录

    • NLP 基础知识
      • 传统 NLP 知识
        • NLU 与 NLG 各种任务的差异
      • Transformer 相关知识
        • Pre Norm与Post Norm的区别?
        • Bert 预训练过程
        • 手写 transformer 的 attention layer 并计算模型参数量
    • 深度学习基础
        • BN 和 LN 的区别
    • 大模型基础知识
      • 训练框架
      • 开源大语言模型介绍
        • Llama
        • ChatGLM and ChatGLM2
        • Bloom
      • Tokenizer
        • tokenizer 计算方式,不同 tokenizer 的优缺点
        • BPE 介绍
      • position embedding
        • 为什么要引入 position embedding
        • RoPE
        • Alibi
      • PEFT
        • Pattern-Exploiting Training(PET)
        • P-tuning and P-tuningv2
        • LoRA
      • 大语言模型推理
        • 温度系数(Temperature)对大模型推理结果的影响
        • Huggingface generate 函数中的 top_p sampling、top_k sampling、greedy_search、beam_search 参数解释
      • 大语言模型应用
        • LangChain 介绍
      • 可精读的博客/演讲
      • 大语言模型前沿研究
        • 大模型涌现分析
        • 大语言模型知识蒸馏

NLP 基础知识

传统 NLP 知识

NLU 与 NLG 各种任务的差异

  • NLU (Natural Language Understanding):自然语言理解
  • NLG (Natural Language Generation):自然语言生成
  • NLU 从语言中提取事实,而NLG则将NLU提取的见解用于创造自然语言

Transformer 相关知识

Pre Norm与Post Norm的区别?

参考:为什么Pre Norm的效果不如Post Norm?

  • 定义:
    • Pre Norm(Norm and add): x t + 1 = x t + F t ( N o r m ( x t ) ) x_{t+1} = x_{t} + F_{t}(Norm(x_{t})) xt+1=xt+Ft(Norm(xt))
    • Post Norm(Add and Norm): x t + 1 = N o r m ( x t + F t ( x t ) x_{t+1} = Norm(x_{t} + F_{t}(x_{t}) xt+1=Norm(xt+Ft(xt)
  • 在同一训练设置下,同一设置之下,Pre Norm结构往往更容易训练,但最终效果通常不如Post Norm:
    • Pre Norm更容易训练好理解,因为它的恒等路径更突出
    • Pre Norm的深度有“水分”!也就是说,一个L层的Pre Norm模型,其实际等效层数不如L层的Post Norm模型,而层数少了导致效果变差了。Post Norm每Norm一次就削弱一次恒等分支的权重,所以Post Norm反而是更突出残差分支的,因此Post Norm中的层数更加“足秤”,一旦训练好之后效果更优。
  • Post Norm的结构迁移性能更加好,也就是说在Pretraining中,Pre Norm和Post Norm都能做到大致相同的结果,但是Post Norm的Finetune效果明显更好

Bert 预训练过程

  • Bert的预训练主要包含两个任务,MLM和NSP,Masked Language Model任务可以理解为完形填空,随机mask每一个句子中15%的词,用其上下文来做预测;Next Sentence Prediction任务选择一些句子对A与B,其中50%的数据B是A的下一条句子,剩余50%的数据B是语料库中随机选择的,学习其中的相关性。BERT 预训练阶段实际上是将上述两个任务结合起来,同时进行,然后将所有的 Loss 相加

手写 transformer 的 attention layer 并计算模型参数量

深度学习基础

BN 和 LN 的区别

  • BN 与 LN 定义:Batch Normalization 是对这批样本的同一维度特征做规范化处理, Layer Normalization 是对这单个样本的所有维度特征做规范化处理
    在这里插入图片描述
    • 区别:
      • LN中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;BN中则针对不同神经元输入计算均值和方差,同一个batch中的输入拥有相同的均值和方差
    • 为什么 NLP 使用 LN 而不是 BN?
      • LN 不依赖于 batch 的大小和输入 sequence 的长度,因此可以用于 batchsize 为 1 和 RNN 中 sequence 的 normalize 操作
      • BN 不适用于 batch 中 sequence 长度不一样的情况,有的靠后面的特征的均值和方差不能估算;另外 BN 在 MLP 中的应用对每个特征在 batch 维度求均值方差,比如身高、体重等特征,但是在 NLP 中对应的是每一个单词,但是每个单词表达的特征是不一样的
      • 如果特征依赖于不同样本间的统计参数(比如 CV 领域),那么 BN 更有效(它抹杀了不同特征之间的大小关系,但是保留了不同样本间的大小关系);NLP 领域 LN 更合适(抹杀了不同样本间的大小关系,但是保留了一个样本内不同特征之间的大小关系),因为对于 NLP 或序列任务来说,一条样本的不同特征其实就是时序上字符取值的变化,样本内的特征关系是非常紧密的
    • 相同点:标准化技术目的是让每一层的分布稳定下来,让后面的层可以在前面层的基础上安心学习,加快模型收敛

大模型基础知识

训练框架

  • megatron-lm、deepspeed 介绍

开源大语言模型介绍

Llama

  • causal LM: 严格遵守只有后面的token才能看到前面的token的规则
  • 使用 RoPE 位置编码

ChatGLM and ChatGLM2

  • ChatGLM
    • 使用 prefix LM:prefix部分的token互相能看到
    • 使用 RoPE 位置编码
  • ChatGLM2
    • 回归 decoder-only 结构,使用 Causal LM
    • 使用 RoPE 位置编码

Bloom

  • BLOOM 使用 Alibi 位置编码

Tokenizer

tokenizer 计算方式,不同 tokenizer 的优缺点

BPE 介绍

position embedding

为什么要引入 position embedding

参考

  • 对于任何一门语言,单词在句子中的位置以及排列顺序是非常重要的,它们不仅是一个句子的语法结构的组成部分,更是表达语义的重要概念。一个单词在句子的位置或排列顺序不同,可能整个句子的意思就发生了偏差。

    I do not like the story of the movie, but I do like the cast.
    I do like the story of the movie, but I do not like the cast.
    上面两句话所使用的的单词完全一样,但是所表达的句意却截然相反。那么,引入词序信息有助于区别这两句话的意思。

  • Transformer模型抛弃了RNN、CNN作为序列学习的基本模型。我们知道,循环神经网络本身就是一种顺序结构,天生就包含了词在序列中的位置信息。当抛弃循环神经网络结构,完全采用Attention取而代之,这些词序信息就会丢失,模型就没有办法知道每个词在句子中的相对和绝对的位置信息。因此,有必要把词序信号加到词向量上帮助模型学习这些信息,位置编码(Positional Encoding)就是用来解决这种问题的方法。

RoPE

参考1, 参考2,参考3

  • RoPE
    • 二维情况下用复数表示的RoPE
      在这里插入图片描述
      根据复数乘法的几何意义,该变换实际上对应着向量的旋转,所以我们称之为“旋转式位置编码”
    • RoPE通过绝对位置编码的方式实现相对位置编码,综合了绝对位置编码和相对位置编码的优点
      • 绝对位置编码:最原始的正余弦位置编码(即sinusoidal位置编码)是一种绝对位置编码,但从其原理中的正余弦的和差化积公式来看,引入的其实也是相对位置编码。
        • 优势: 实现简单,可预先计算好,不用参与训练,速度快
        • 劣势: 没有外推性,即如果预训练最大长度为512的话,那么最多就只能处理长度为512的句子,再长就处理不了了。当然,也可以将超过512的位置向量随机初始化,然后继续微调
      • 相对位置编码:经典相对位置编码RPR式
        • 直接地体现了相对位置信号,效果更好。具有外推性,处理长文本能力更强
    • 主要就是对attention中的q, k向量注入了绝对位置信息,然后用更新的q,k向量做attention中的内积就会引入相对位置信息了

Alibi

参考1, 参考2

  • ALiBi (Attention with Linear Biases,22年ICLR),是一种 position embedding 方法,允许Transformer 语言模型在推理时处理比其训练时更长的序列。
    • ALiBi在不使用实际位置嵌入的情况下实现这一目标。相反,ALiBi计算某个键和查询之间的注意力时,会根据键和查询的距离来对查询可以分配给键的注意力值进行惩罚。因此,当键和查询靠近时,惩罚非常低,而当它们相距较远时,惩罚非常高。这个方法的动机很简单,即靠近的单词比远离的单词更重要。
    • ALiBi方法的速度与正弦函数嵌入或绝对嵌入方法相当(这是最快的定位方法之一)。在评估超出模型训练序列长度的序列时,ALiBi优于这些方法和Rotary嵌入(这称为外推)方法(ALiBi的方式,训练快了11%,并且会减少11%的内存消耗)。
    • position embedding并没有加在work embedding上,而是加在了Q*K^T上面

PEFT

Pattern-Exploiting Training(PET)

参考

  • 它通过人工构建的模版与 BERT 的 MLM 模型结合,能够起到非常好的零样本、小样本乃至半监督学习效果,而且该思路比较优雅漂亮,因为它将预训练任务和下游任务统一起来了

P-tuning and P-tuningv2

  • P-tuning(GPT Understands, Too)(参考)

    • P-tuning 重新审视了关于模版的定义,放弃了“模版由自然语言构成”这一常规要求,从而将模版的构建转化为连续参数优化问题,虽然简单,但却有效
    • P-tuning直接使用[unused*]的token来构建模版,不关心模版的自然语言性
      在这里插入图片描述
    • 借助 P-tuning,GPT 在 SuperGLUE 上的成绩首次超过了同等级别的 BERT 模型,这颠覆了一直以来“GPT 不擅长 NLU”的结论
  • P-tuningv2

LoRA

参考1,参考2

  • 低秩自适应 (Low-Rank Adaptation, LoRA):冻结了预训练的模型权重,并将可训练的秩分解矩阵注入到 Transformer 架构的每一层,极大地减少了下游任务的可训练参数的数量,有效提升预训练模型在下游任务上的 finetune 效率
  • 【背景】之前的 PEFT 方法是 adapter/prefix/promp/P-tuning,但是Adapter会引入很强的推理延迟(只能串行),prefix/prompt/P-tuning很难练,而且要占用context length,变相的降低模型能力
  • 【详解】具体来说,就是考虑到语言模型(LLM 尤其如此)的参数的低秩属性(low intrinsic dimension),或者说过参数化,在做 finetune 的时候不做 full-finetune,而是用一个降维矩阵A和一个升维矩阵B去做finetune。如果我们认为原来的模型的某个参数矩阵为 W 0 W_{0} W0,那么可以认为原来经过全微调的参数矩阵为 W 0 + Δ ( W ) W_{0} + \Delta(W) W0+Δ(W) ,但考虑到前面的低秩属性,在 lora 中我们可以简单认为 Δ ( W ) = B A \Delta(W)=BA Δ(W)=BA (B 是降维矩阵,A是升维矩阵,其中 A 正常随机数初始化,B 全 0 初始化,从而保证训练初期的稳定性),其中 BA 的秩相当于是你认为的模型实际的秩。这样的话在做推理的时候, h = W 0 x + B A x h=W_{0}x + BAx h=W0x+BAx ,根本不会引入推理延迟,因为你只需要把训好的 lora 参数 A B AB AB 加进模型初始权重 W 0 W_{0} W0 中就可以了。在 Transformer 中 self-attention 和 mlp 模块都有对应的 params 矩阵,对应加上 lora 即可。
    • llama 为了节省参数量一般只加在 q、v 上 (参考),原论文实验是不会掉点
    • bloom 一般加在 q、k、v 上

大语言模型推理

温度系数(Temperature)对大模型推理结果的影响

参考:What is Temperature in NLP / LLMs?

Huggingface generate 函数中的 top_p sampling、top_k sampling、greedy_search、beam_search 参数解释

参考:Huggingface 的 generate 方法介绍:top_p sampling、top_k sampling、greedy_search、beam_search

  • Greedy search 每次都选择概率最大的词作为单词序列中的下一个词
  • beam search(束搜索):通过在每个时间步骤保留最有可能的 num_beams 个假设,最终选择具有最高概率的假设,从而降低错过隐藏的高概率词序列的风险
  • top-k sampling:在Top-K采样中,选择最有可能的 K 个下一个词,并将概率质量重新分配给这 K 个下一个词
  • Top-p (nucleus) sampling:与仅从最可能的 K 个单词中进行采样不同,Top-p 采样从概率累积超过概率 p 的可能性最小的单词集中进行选择

大语言模型应用

LangChain 介绍

参考:大语言模型集成工具 LangChain

  • LangChain 通过可组合性使用大型语言模型构建应用程序
  • 【背景】大型语言模型 (LLM) 正在成为一种变革性技术,使开发人员能够构建他们以前无法构建的应用程序,但是单独使用这些 LLM 往往不足以创建一个真正强大的应用程序,当可以将它们与其他计算或知识来源相结合时,就有真的价值了。LangChain 旨在协助开发这些类型的应用程序
  • LangChain 主要功能:
    • 实现统一接口,支持不同大语言模型的统一化调用
    • 支持引入 google 搜索、python 解释器等外部工具
    • 支持便捷 prompt 模板设置(并提供一些教科书 prompt 模板供参考)
    • 支持智能体 (Agent) 等高阶应用

可精读的博客/演讲

  • State of GPT (OpenAI Karpathy 介绍 ChatGPT 原理及现状)
    • Andrej Karpathy 介绍如何训练 ChatGPT 以及如何将 ChatGPT 用于定制化应用程序
  • A Stage Review of Instruction Tuning
    • 符尧讲解 SFT 现状及可以关注的问题

大语言模型前沿研究

大模型涌现分析

  • 大模型涌现能力探讨:大型语言模型的涌现能力是幻象吗?
    • 探索大语言模型表现出涌现能力的原因,初步结论是涌现能力主要是由研究人员选择一个非线性或不连续的评价指标导致的,另外探索了如何诱导涌现能力的出现,本文在视觉任务上通过对评价指标的修改复现了涌现现象。

大语言模型知识蒸馏

  • Fine-tune-CoT: 旨在利用非常大的语言模型 (LMs) 的CoT推理能力来教导小模型如何解决复杂任务,蒸馏出来的小模型在某些数据集上精度甚至能超过 teacher 大模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0到1:跑团小程序开发心得笔记

背景介绍 随着健康意识的兴起,越来越多的人选择加入跑步俱乐部,不仅体验到了运动的乐趣,也感受到了人生的不同色,那么通过小程序,把俱乐部搬到手机上,通过小程序了解俱乐部动态和运动常识,可以…

C++自定义信号和QML的槽函数建立连接

0x00 在C代码在定义一个信号函数&#xff1a;“void sendData2UI(QString msg);”&#xff0c;该函数主要是将接收到的UDP消息发送到QML界面中 #ifndef UDPCLI_H #define UDPCLI_H#include <QObject> #include <QUdpSocket> #include <QString>class UdpCli …

【Netty】NIO基础(三大组件)

文章目录 三大组件Channel & BufferSelector ByteBufferByteBuffer 正确使用姿势ByteBuffer 内部结构ByteBuffer 常见方法分配空间向 buffer 写入数据从 buffer 读取数据mark 和 reset 字符串与 ByteBuffer 互转Scattering ReadsGathering Writes粘包、半包分析 附&#xf…

《啊哈算法》第一章--排序

文章目录 前言一、排序算法二、桶排序三、冒泡排序三、快速排序总结 前言 今年蓝桥杯没有拿到省一&#xff0c;所以就决定沉下心来学习算法&#xff0c;为了使得算法的学习更加稳固&#xff0c;所以就拿起了&#xff0c;最基础的且最经典的一本算法书《啊哈算法》&#xff0c;…

Redis进阶底层原理- 持久化

Redis作为基于内存的缓存数据库&#xff0c;就会存在断电即失的问题&#xff0c;所以数据的持久化是非常重要的。Redis随着版本升级迭代&#xff0c;持久化技术也在不断的升级&#xff0c;&#xff08;从最开始的RDB&#xff0c;到的Redis1.1版本加入AOF&#xff0c;3.0版本支持…

全志F1C200S嵌入式驱动开发(sd卡驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 说是sd卡,其实是micro sd卡,或者称之为tf卡更合适。一般的soc都支持从tf卡启动,所以用tf卡来学习soc、驱动和linux,对新人来说是比较合适的。前面我们已经用sd卡构建了一个类似…

uniapp:针对与富文本解析的几种方法

第一章、富文本的解析方法 1.1 uniapp自带组件&#xff1a;rich-text <rich-text :nodes"nodes"></rich-text> 1.2 v-html <view v-html"item.content"></view> 1.3 uview组件&#xff1a;u-parse <u-parse :content&quo…

学习babylon.js --- [3] 开启https

babylonjs提供WebVR功能&#xff0c;但是使用这个功能得用https&#xff0c;本文讲述如何使用自签名证书来开启https&#xff0c;基于第二篇文章中搭建的工程。 一 生成自签名证书 首先要安装openssl&#xff0c;这个去网上搜下就行了。安装完之后在终端下输入openssl回车可以…

DeepC 实用教程(三)环境数据

目 录 一、前言二、风谱/风剖三、洋流四、波浪4.1 规则波浪4.2 随机波浪谱 五、方向六、海床属性七、位置7.1 创建位置7.2 规则波时域条件7.3 随机波时域条件7.4 波浪散布图7.4.1 散布图分块7.4.2 时域条件 八、参考文献 一、前言 SESAM &#xff08;Super Element Structure A…

y0usef靶场详解

y0usef靶场详解 靶机感悟&#xff1a;对于这个靶机并没有太多的难点&#xff0c;也没有的别多的绊子&#xff0c;就是猜测下一步是什么&#xff0c;耐心的去思考怎么才能进行到下一步。 靶机下载地址&#xff1a;https://download.vulnhub.com/y0usef/y0usef.ova 这个靶机是…

每天一点Python——day55

#第五十五天Python内置数据结构&#xff1a;列表、字典、元组 本次学另外一种数据结构&#xff1a;集合 集合也是可变类型序列 重点&#xff1a;集合里面没有value&#xff0c;只有键&#xff0c;采用也是哈希函数#如图&#xff1a; #集合与字典的对比字典&#xff1a; 字典{ke…

Java 提供的线程安全集合

一、CopyOnWrite&#xff08;COW算法的容器&#xff09; 最终一致性、写分离思想。 用Volatile修饰&#xff0c;每次直接从内存地址中读取&#xff0c;读取时不加锁。 写时用显式锁整个容器&#xff08;防止其它写线程&#xff09;&#xff0c;然后拷贝一份副本&#xff0c;对…

【NLP】transformers的位置编码

一、背景 本文是“实现的变压器”系列的第二篇。它从头开始引入位置编码。然后,它

【Linux | Shell】结构化命令 - if 语句

目录 一、概述二、if-then 语句三、if-then-else 语句四、if-then-elif 语句五、嵌套 if 语句 一、概述 前面文章介绍了一些Shell脚本的基础知识&#xff0c;也了解了怎样构建一个shell脚本文件&#xff0c;让shell脚本执行一些基础的指令&#xff0c;但都是从上到下依次执行的…

少年侠客【InsCode Stable Diffusion美图活动一期】

少年侠客【InsCode Stable Diffusion美图活动一期】 文章目录 Stable Diffusion 模型在线使用地址第一张图第二张图第三张图第四张图第五张图第六章图 一、InsCode Stable Diffusion 体验1.1 界面很友好1.2 小小体验一下1.3 体验感受 二、如何在InsCode给Stable Diffusion安装L…

车载软件架构 —— 闲聊几句AUTOSAR OS(九)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标…

Keil中文注释乱码解决

1、打开Keil之后&#xff0c;点击Edit 2、点击Configuration 3、 选择Encording &#xff0c;在下拉列表中 选择Chinese GB2312 保存设置&#xff0c;重启keil。

4-1 Working with images

4-Real-world data representation using tensors How do we take a piece of data, a video, or a line of text, and represent it with a tensor in a way that is appropriate for training a deep learning model? This is what we’ll learn in this chapter. We menti…

Spring Boot环境配置Envirnoment

Srping Boot 中我们使用 EnvironmentAware 注入 Environment 对象后&#xff0c;可以在 Environment 中获得系统参数&#xff0c;命令行采参数&#xff0c;文件配置等信息。 Environment 是如何存储&#xff0c;管理这些值的呢&#xff1f;变量发生冲突怎么办呢&#xff1f;我…

Linux--fork创建子进程,操作系统都做了什么

一句话总结&#xff1a;为该进程创建内核数据结构task_struct、地址空间mm_struct、页表并创建映射关系&#xff0c;一定程度上还要将该进程的代码和数据加载进内存 以下是对上面的解释&#xff1a; 首先&#xff0c;fork创建子进程&#xff0c;是不是操作系统里多了一个进程&…