LLM主流架构和模型

news2024/11/27 16:29:19

本文参考自https://github.com/HqWu-HITCS/Awesome-Chinese-LLM?tab=readme-ov-file和Huggingface中的ModelCard(https://huggingface.co/)

LLM主要类别架构

LLM本身基于transformer架构。自2017年,attention is all you need诞生起,transformer模型为不同领域的模型提供了灵感和启发。基于原始的Transformer框架,衍生出了一系列模型,一些模型仅仅使用encoder或decoder,有些模型同时使encoder+decoder。

LLM分类一般分为三种:自编码模型(encoder)、自回归模型(decoder)和编解码器模型(encoder-decoder)。

自编码器模型(AutoEncoder model,AE)

BERT

BERT base model (uncased)

使用掩码语言建模 (masked language modeling-MLM) 目标对英语进行预训练的模型。该模型不区分大小写:它不会区分english和English。

模型描述

BERT 是一个以自监督方式在大量英语数据上进行预训练的 Transformer 模型。这意味着它只在原始文本上进行预训练,没有任何人工标记(这就是它可以使用大量公开数据的原因),并有一个自动流程从这些文本中生成输入和标签。更准确地说,它进行了两个预训练目标:

掩码语言建模 (MLM):取一个句子,模型随机掩码输入中的 15% 的单词,然后通过模型运行整个掩码句子,并预测被掩码的单词。这与通常一个接一个地看到单词的传统循环神经网络 (RNN) 或内部掩码未来标记的 GPT 等自回归模型不同。它允许模型学习句子的双向表示。

下一句预测 (NSP):模型在预训练期间将两个掩码句子连接起来作为输入。有时它们对应于原文中彼此相邻的句子,有时则不是。然后,模型必须预测这两个句子是否彼此相连。

通过这种方式,模型可以学习英语的内部表征,然后可以使用该表征提取对下游任务有用的特征:例如,如果您有一个带标签的句子数据集,则可以使用 BERT 模型生成的特征作为输入来训练标准分类器。

请注意,此模型主要针对使用整个句子(可能被屏蔽)进行决策的任务进行微调,例如序列分类、标记分类或问答。对于文本生成等任务,您应该考虑 GPT2 之类的模型。

模型变体

在这里插入图片描述

如何使用

以下是如何在 PyTorch 中使用该模型获取给定文本的特征:

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained("bert-base-uncased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
训练数据

BERT 模型在 BookCorpus 上进行了预训练,BookCorpus 是一个包含 11,038 本未出版的书籍和英文维基百科(不包括列表、表格和标题)的数据集。

训练过程
Preprocessing

使用 WordPiece 将文本小写化并标记化,词汇量为 30,000。模型的输入形式如下:

[CLS] Sentence A [SEP] Sentence B [SEP]

句子 A 和句子 B 对应于原始语料库中的两个连续句子的概率为 0.5,在其他情况下,则是语料库中的另一个随机句子。请注意,这里所指的句子是一段连续的文本,通常比单个句子长。唯一的限制是,包含两个“句子”的结果的总长度小于 512 个标记。

每个句子的掩蔽过程的细节如下:

  • 15% 的 token 被屏蔽。
  • 在 80% 的情况下,屏蔽的 token 被 [MASK] 替换。
  • 在 10% 的情况下,屏蔽的 token 被替换为与它们所替换的 token 不同的随机 token。
  • 在剩余的 10% 的情况下,屏蔽的 token 保持原样。
Pretraining

该模型在 4 个云 TPU(共 16 个 TPU 芯片)上进行训练,训练步骤为 100 万步,批处理大小为 256。90% 的步骤的序列长度限制为 128 个标记,其余 10% 的步骤的序列长度限制为 512 个标记。使用的优化器是 Adam,学习率为 1e-4, β 1 = 0.9 \beta_1=0.9 β1=0.9 β 2 = 0.999 \beta_2=0.999 β2=0.999,权重衰减为 0.01,学习率预热 10,000 步,之后学习率线性衰减。

Evaluation results

在下游任务上进行微调后,该模型可实现以下结果:

Glue test results:

TaskMNLI-m/mmQQPQNLISST-2CoLASTS-BMRPCRTEAverage
Score84.6/83.471.290.593.552.185.888.966.479.6

自回归模型(Autoregressive model,AR)

GPT

GPT-2

在此处测试整个生成功能:https://transformer.huggingface.co/doc/gpt2-large

使用因果语言建模 (CLM) 目标对英语进行预训练的模型。

模型描述

GPT-2 是一个以自监督方式在大量英语数据上进行预训练的 transformers 模型。这意味着它只在原始文本上进行预训练,没有任何人以任何方式标记它们(这就是它可以使用大量公开数据的原因),并自动从这些文本中生成输入和标签。更准确地说,它被训练来猜测句子中的下一个单词。

更准确地说,输入是一定长度的连续文本序列,目标是相同的序列,向右移动一个标记(单词或单词片段)。该模型在内部使用掩码机制来确保对标记 i 的预测仅使用从 1 到 i 的输入,而不使用未来的标记。

这样,该模型学习了英语的内部表示,然后可用于提取对下游任务有用的特征。然而,该模型最擅长的是它预训练的目的,即根据提示生成文本。

这是 GPT-2 的最小版本,具有 124M 个参数。

如何使用

以下是如何在 PyTorch 中使用该模型获取给定文本的特征:

from transformers import GPT2Tokenizer, GPT2Model
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2Model.from_pretrained('gpt2')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
训练数据

OpenAI 团队希望在尽可能大的语料库上训练这个模型。为了构建它,他们从 Reddit 上获得至少 3 个 karma 的出站链接中抓取了所有网页。请注意,所有维基百科页面都已从此数据集中删除,因此该模型未在维基百科的任何部分上进行训练。生成的数据集(称为 WebText)重达 40GB 文本,但尚未公开发布。您可以在此处找到 WebText 中存在的前 1,000 个域的列表。

训练过程
Preprocessing

使用字节级版本的字节对编码 (BPE)(用于 Unicode 字符)和 50,257 个词汇量对文本进行标记。输入是 1024 个连续标记的序列。

较大的模型在 256 个云 TPU v3 核心上进行训练。训练持续时间未披露,训练的具体细节也未披露。

Evaluation results

该模型无需任何微调(零样本)即可实现以下结果:

DatasetLAMBADA (PPL)LAMBADA (ACC)CBT-CN (ACC)CBT-NE (ACC)WikiText2 (PPL)PTB (PPL)enwiki8 (BPB)text8 (BPC)WikiText103 (PPL)1BW (PPL)
Metric35.1345.9987.6583.429.4165.851.160.1737.5075.20

序列到序列模型(Sequence to Sequence Model)

T5

模型描述

Text-To-Text Transfer Transformer (T5) 的开发人员写道:

借助 T5,我们建议将所有 NLP 任务重新定义为统一的文本到文本格式,其中输入和输出始终是文本字符串,而 BERT 样式的模型只能输出类标签或输入的跨度。我们的文本到文本框架允许我们在任意 NLP 任务上使用相同的模型、损失函数和超参数。

T5-Base 是具有 2.2 亿个参数的检查点。

直接利用和下游利用

开发人员在一篇博客文章中写道,该模型:

我们的文本到文本框架允许我们在任何 NLP 任务上使用相同的模型、损失函数和超参数,包括机器翻译、文档摘要、问答和分类任务(例如情绪分析)。我们甚至可以将 T5 应用于回归任务,通过训练它来预测数字的字符串表示而不是数字本身。

有关更多详细信息,请参阅博客文章和研究论文。

训练数据

该模型在 Colossal Clean Crawled Corpus (C4) 上进行了预训练,该语料库是在与 T5 相同的研究论文背景下开发和发布的。

该模型在无监督 (1.) 和监督任务 (2.) 的多任务混合上进行了预训练。因此,以下数据集用于 (1.) 和 (2.):

  1. 用于无监督去噪目标的数据集:
  • C4
  • Wiki-DPR
  1. 用于监督文本到文本语言建模目标的数据集
  • 句子可接受性判断
    CoLA Warstadt et al., 2018
  • 情感分析
    SST-2 Socher et al., 2013
  • 释义/句子相似性
    MRPC Dolan and Brockett, 2005
    STS-B Ceret al., 2017
    QQP Iyer et al., 2017
  • 自然语言推理
    MNLI Williams et al., 2017
    QNLI Rajpurkar et al.,2016
    RTE Dagan et al., 2005
    CB De Marneff et al., 2019
  • 句子完成
    COPA Roemmele et al., 2011
  • 词义消歧
    WIC Pilehvar and Camacho-Collados, 2018
  • 问答
    MultiRC Khashabi et al., 2018
    ReCoRD Zhang et al., 2018
    BoolQ Clark et al., 2019
训练过程

模型开发人员在摘要中写道:

在本文中,我们通过引入一个统一的框架来探索 NLP 迁移学习技术的前景,该框架将每个语言问题转换为文本到文本格式。我们的系统研究比较了数十种语言理解任务的预训练目标、架构、未标记数据集、迁移方法和其他因素。

引入的框架 T5 框架涉及一个将本文研究的方法结合在一起的训练程序。有关更多详细信息,请参阅研究论文。

Evaluation
测试数据、因素和指标

开发人员根据 24 项任务评估该模型,请参阅研究论文了解详细信息(https://jmlr.org/papers/volume21/20-074/20-074.pdf)。

结果

有关 T5-Base 的完整结果,请参阅研究论文表 14(https://jmlr.org/papers/volume21/20-074/20-074.pdf)。

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

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

相关文章

P1223 排队接水

题目描述 有 𝑛 个人在一个水龙头前排队接水,假如每个人接水的时间为 𝑇𝑖,请编程找出这 𝑛 个人排队的一种顺序,使得 𝑛个人的平均等待时间最小。 输入格式 第一行为一个整数 &a…

C++ | Leetcode C++题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; class Solution { public:int majorityElement(vector<int>& nums) {int candidate -1;int count 0;for (int num : nums) {if (num candidate)count;else if (--count < 0) {candidate num;count 1;}}return candidate;…

根据状态转移写状态机-二段式

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 描述 题目描述&#xff1a; 如图所示为两种状态机中的一种&#xff0c;请根据状态转移图写出代码&#xff0c;状态转移线上的0/0等表示的意思是过程中data/flag的值。 要求&#xff1a; 1、 必须使用对应类型的状…

Django 条件判断模板标签

1&#xff0c;条件判断模板标签 1. 2 {% if %} 标签 {% if variable %}<!-- 如果 variable 为 True&#xff0c;则渲染此处内容 --> {% endif %} 1. 3 {% if %} 与 {% else %} 组合 {% if variable %}<!-- 如果 variable 为 True&#xff0c;则渲染此处内容 -->…

Ubuntu使用 NVIDIA GPU 和 CUDA 设置 LLM 的训练、微调和推理

0.引言 近年来&#xff0c;人工智能领域取得了令人瞩目的进步&#xff0c;其核心是图形处理单元&#xff08;GPU&#xff09;和并行计算平台的强大组合。 大模型如 GPT、BER能够理解和生成具有前所未有的流畅性和连贯性的类人文本。然而&#xff0c;训练这些模型需要大量的数据…

外卖APP开发详解:从同城O2O系统源码开始

近期&#xff0c;从事软件开发的小伙伴们都在讨论外卖APP&#xff0c;热度非常之高&#xff0c;所以小编今天将与大家一同探讨同城O2O系统源码、外卖APP开发。 一、外卖APP开发的前期准备 了解目标用户的需求&#xff0c;分析竞争对手的优劣势&#xff0c;明确自身的市场定位。…

算法金 | 统计学的回归和机器学习中的回归有什么差别?

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 统计学中的回归 目标&#xff1a; 主要用于解释和推断自变量&#xff08;independent variables&#xff09;和因变量&#xff08;de…

免杀笔记 ---> C语言

这次的更新可能有点慢&#xff0c;因为这段时间也比较忙&#xff0c;加上C语言还得和汇编结合&#xff0c;导致小编一个知识点总是得反复揣摩&#xff08;太菜了&#xff09;&#xff0c;所以免杀的更新篇幅长度可能会达到两个月和三个月&#xff0c;但是小编能保证&#xff0c…

中国科学院西北生态环境资源研究院联合多单位在《PNAS》发文:气候变暖对多年冻土区地上与地下生物量分布的影响

文章简介 论文名称&#xff1a;Changes in above-versus belowground biomass distribution in permafrost regions in response to climate warming&#xff08;气候变暖对多年冻土区地上与地下生物量分布的影响&#xff09; 第一作者及单位&#xff1a;贠汉伯&#xff08;研…

Hadoop archive

Index of /dist/hadoop/commonhttps://archive.apache.org/dist/hadoop/common/

【Git】--Part3--远程操作 配置 标签管理

1. 远程仓库 Git 是分布式版本控制系统&#xff0c;同⼀个 Git 仓库&#xff0c;可以分布到不同的机器上。怎么分布呢&#xff1f; 最早&#xff0c;肯定只有⼀台机器有⼀个原始版本库&#xff0c;此后&#xff0c;别的机器可以 “克隆” 这个原始版本库&#xff0c;⽽且每台机…

css grid实现九宫格布局

常见的九宫格布局可以使用flex布局实现&#xff0c;但是flex布局有个致命的缺陷&#xff0c;比如3行3列的布局&#xff0c;当第不足3个元素的时候&#xff0c;元素依然是平局平铺的&#xff0c;这样就不满足九宫格的效果&#xff0c;这种情况&#xff0c;使用grid布局可以轻松搞…

web中间件漏洞-Jenkins漏洞-弱口令、反弹shell

web中间件漏洞-Jenkins漏洞-弱口令、反弹shell Jenkins弱口令 默认用户一般为jenkins/jenkins 使用admin/admin123登陆成功 Jenkins反弹shell 格式为 println"命令".execute().text 在/tmp目录中生成shell.sh文件&#xff0c;并向其中写入反弹shell的语句 new…

猫头虎分享已解决Bug || Null Pointer Exception: `java.lang.NullPointerException`

猫头虎分享已解决Bug || Null Pointer Exception: java.lang.NullPointerException &#x1f63a;&#x1f42f; 关于猫头虎 大家好&#xff0c;我是猫头虎&#xff0c;别名猫头虎博主&#xff0c;擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程…

10分钟入门Vue3

前言&#xff1a;你的阅读速度够快&#xff0c;10 分钟能看完这篇文章。文章整体比较粗浅&#xff08;入门级&#xff09;&#xff0c;如需深入了解细枝末节&#xff0c;请移步官网。 1. Vue3 和 Vue2 的区别 双向数据绑定原理&#xff1a; Vue2使用的是Object.definePropert…

6/22 第四周 python操作word

学习到了word有四个段落&#xff0c;都可以通过python来操作。 并且课程的体系&#xff0c;只是一个启蒙&#xff0c;需要在公司的项目中熟悉&#xff0c;从而具备专项测试的能力。 后续每天的学习笔记也需要侧重于理解的部分。

java—类反射机制

简述 反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息&#xff08;如成员变量&#xff0c;构造器&#xff0c;成员方法等&#xff09;&#xff0c;并能操作对象的属性及方法。反射机制在设计模式和框架底层都能用到。 类一旦加载&#xff0c;在堆中会产生…

扫码称重上位机

目录 一 设计原型 二 后台代码 一 设计原型 模拟工具: 二 后台代码 主程序&#xff1a; using System.IO.Ports; using System.Net; using System.Net.Sockets; using System.Text;namespace 扫码称重上位机 {public partial class Form1 : Form{public Form1(){Initialize…

人脸特征标注——OpenCV

特征标注 导入必要的库创建窗口显示原始图片和标注后的图片存储用户选择的图片路径字体样式和大小定义了select_image函数定义了annotate_landmarks()函数设置按钮调整图片标签的位置设置图片位置主事件循环运行显示&#xff1a;全部代码 导入必要的库 import tkinter as tk: 导…

docker 环境部署

1.Redis部署 用docker拉取redis镜像 docker pull redis 用docker查看拉取的镜像版本号&#xff0c;这里查到的是 6.2.6 版本 docker inspect redis 通过wget指令下载对应版本的tar包&#xff0c;下载完成后解压 wget https://download.redis.io/releases/redis-6.2.6.tar.gz …