大模型入门 ch01:大模型概述

news2024/11/24 6:32:07

本文是github上的大模型教程LLMs-from-scratch的学习笔记,教程地址:教程链接

在这里插入图片描述

STAGE 1: BUILDING

1. 数据准备与采样

在这里插入图片描述
LLM的预测过程,是一个不断预测下一个词(准确的说是token)的过程,每次根据输入的内容,预测下一个词,然后将新的句子重新丢入模型预测,得到下下个输出,重复这个过程,直到模型输出结束标志。

正如上面所说,准确来说,大模型不是预测下一个单词,而是预测下一个tokentoken是模型预测输出的单位,可能不止一个单词,也可能小于一个单词(例如先输出一个单词的前半部分,然后根据前文再推导出单词后缀)。

tokenization是大模型中重要的一部分,决定了模型如何将输入的句子拆分开,根据拆分后输出的token,预测下一个token

有许多tokenizer,例如可以简单地根据空格拆分句子,或者GPT使用的BPE tokenizer
在这里插入图片描述

  1. 人为定义的Tokenizer
    • 规则型Tokenizer:这种类型的tokenizer通常是基于一些预定义的规则,比如空格、标点符号等来切分文本。例如,简单的空格分割就是基于空格将句子切分成单词。这种tokenizer是人为定义的,不需要训练。
  2. 训练得到的Tokenizer
    • 基于统计的Tokenizer:这种tokenizer会基于大量的文本数据统计信息来决定最佳的切分点。例如,字节对编码(Byte Pair Encoding, BPE)、WordPiece等算法,它们会通过训练数据来学习如何将单词切分成子词单元。这种tokenizer需要通过训练过程来优化其切分规则。

简单的说,一个tokenizer就是一本词典,告诉预处理的时候,输入的句子要如何拆分成一个一个token,并且tokenizer提供了每个token对应的索引位置,这些索引通常被用作查找表(look-up table)中的键,以获取token的嵌入向量(embedding vector)。嵌入向量是token在连续向量空间中的表示,它们通常是通过训练得到的,并且能够捕获token的语义信息。
嵌入矩阵(embedding matrix)是一个大型的矩阵,其中每一行对应词汇表中一个token的嵌入向量。

如何处理没有见过的词:正如上图所示,tokenizer包含很小的词组,因此一个大的单词,即使是一个随便拼的单词,也能被拆分成许多小的token组合而成,但是准确率和效率可能不高。

2. 模型架构

在这里插入图片描述
蓝色部分就是transformer,LLM通过重复这一模块,以及在每一层使用多个注意力头来扩大模型规模。(每一层有多个transformer,然后重复多层)
关于transformer的介绍可以阅读其他博客。

STAGE 2: PRETRAINING

类似GPT和LLAMA,都采用了自回归模型来预训练。
自回归训练(Autoregressive Training)是一种用于语言模型(如GPT)的训练方法,旨在让模型通过学习上下文来预测序列中的下一个token。该方法是生成模型的重要组成部分,特别适用于文本生成任务。下面详细介绍自回归训练的过程及其背后的原理。

自回归模型的基本思想是通过递归的方式生成序列中的每个token。具体来说,模型从序列的第一个token开始,通过观察当前已经生成的部分,逐步预测下一个token,直到生成完整的序列。

数学上,自回归模型的目标是通过给定先前的tokens来估计下一个token的条件概率,即:
P ( x t ∣ x 1 , x 2 , … , x t − 1 ) P(x_t | x_1, x_2, \dots, x_{t-1}) P(xtx1,x2,,xt1)

2.1 数据准备
  • 输入数据:预训练使用的文本数据通常是未经标注的自然语言文本。训练时,数据会被token化成一个个离散的单位(例如单词、子词或字符)。
  • 序列处理:文本数据被分割成固定长度的序列(例如512个token)。每个序列会被用作模型的输入,其中部分token将被用于预测下一个token。
2.2 模型输入和输出
  • 输入序列:输入序列通常是一个连续的文本片段,例如 ["The", "cat", "is", "on", "the", "mat"]
  • 目标序列:目标序列是输入序列右移一个位置后的版本,模型的目标是基于输入序列预测目标序列的每个token。例如,输入 ["The", "cat", "is", "on", "the"] 的目标序列是 ["cat", "is", "on", "the", "mat"]
2.3 损失函数
  • 交叉熵损失:训练时,模型生成的每个token的概率分布与目标token的真实分布之间的差异由交叉熵损失函数来衡量。公式为:
    Loss = − ∑ t = 1 T log ⁡ P ( y t ∣ x 1 , … , x t − 1 ) \text{Loss} = -\sum_{t=1}^{T} \log P(y_t | x_1, \dots, x_{t-1}) Loss=t=1TlogP(ytx1,,xt1)
    其中, y t y_t yt 是目标token, P ( y t ∣ x 1 , … , x t − 1 ) P(y_t | x_1, \dots, x_{t-1}) P(ytx1,,xt1) 是模型预测的目标token的概率。

STAGE 3: FINETUNING

在预训练好的模型上进行微调,根据微调的目的,可以有两种情况,一种是基于分类任务,一种是基于指令任务。

1. 分类任务

分类任务较为简单,只需要将模型的最后一层全连接层(例如图中的768到50257,50257是tokenizer的词汇量)的维度转换为分类任务的维度,例如一个二分类任务,我们替换掉最终的50257的词汇表查找维度,改为2个维度的分类任务即可。

在这里插入图片描述

微调的时候不需要微调全部的参数,作者指出,随着微调层数的增多,微调任务的准确率没有显著上升,并且会带来更多的微调耗时。

2. 指令微调

相比于分类任务,大家更关心的可能是指令微调,如何构建一个私人,适合下游子任务的交互大模型。

通过对应任务要求,给出指令,输入,输出的数据集,微调大模型在特定任务上的能力。
在这里插入图片描述
与预训练不同,预训练是一个无监督训练的过程,不需要标签,给定一个文本后,只需要不断地做next token prediction就可以,指令微调是一个有监督的训练过程。

在指令微调过程中,损失的计算主要依赖于生成的输出序列与目标序列(即期望响应)之间的差异。通常使用交叉熵损失来衡量模型生成的每个token与目标序列中的对应token之间的差异。

  • 输入序列:包含指令(或提示),例如:“Translate the following English sentence to French: ‘Hello, how are you?’”
  • 目标序列:包含期望的响应,例如:“Bonjour, comment ça va?”

损失计算过程

  • Token化:输入序列和目标序列首先被token化,即被分解为一个个离散的token。
  • 模型预测:模型基于输入序列生成一个输出序列。在训练时,模型逐个token生成预测结果。
  • 交叉熵损失
    • 对于每一个生成的token,计算它与目标token之间的交叉熵损失。
    • 对于整个序列,交叉熵损失的公式为:
      Loss = − 1 T ∑ t = 1 T log ⁡ P ( y t ∣ X , y 1 , … , y t − 1 ) \text{Loss} = -\frac{1}{T} \sum_{t=1}^{T} \log P(y_t | X, y_1, \ldots, y_{t-1}) Loss=T1t=1TlogP(ytX,y1,,yt1)
      其中 T 是序列的长度, P ( y t ∣ X , y 1 , … , y t − 1 ) P(y_t | X, y_1, \ldots, y_{t-1}) P(ytX,y1,,yt1)是模型预测的token y t y_t yt 的概率。
    • 换句话说,对于序列中的每个token,模型计算生成该token的概率(基于先前的上下文),然后计算模型输出的概率分布与目标分布之间的交叉熵。

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

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

相关文章

太狠了:华为的卫星通信能免费使用了

在科技日新月异的今天,手机已不再仅仅是通讯工具,它们正逐步成为我们生活中的全能助手。 而华为,作为科技领域的佼佼者,再次以其创新技术引领了一场卫星通信的革命。 近日,华为正式官宣Pura 70系列首发支持中国移动北…

压缩PDF,介绍这五种压缩方案

压缩PDF,在现代信息社会中,PDF文件已经成为我们日常工作和学习中不可或缺的重要载体。但随着PDF文件内容的增多和复杂化,文件大小的膨胀也成为一个常见问题,给存储、共享和传输带来了不少挑战。今天,我们将详细介绍五种…

美业小程序可以解决哪些行业痛点?美业SaaS收银系统管理系统拓客系统源码

随着移动互联网的快速发展,美业小程序成为了美容美发行业的一大利器,为企业和消费者带来了诸多便利。在当前美业的现状下,美业小程序已经开始解决许多行业痛点,并且在未来将继续发挥重要作用。 ▶美业现状 美业市场规模庞大&…

python-A-B数对

题目描述 给出一串数以及一个数字 C,要求计算出所有 A−BC 的数对的个数(不同位置的数字一样的数对算不同的数对)。输入 输入共两行。 第一行,两个整数 N,C。 第二行,N 个整数,作为要求处理的那串数。输出 …

review——Linux进程调度与切换

文章目录 目录 前言 1.进程的一些概念 2.进程的优先级 二、进程切换 三、进程调度 总结 前言 在我们的windows电脑上,常常会开启许多不同的软件,我们知道他们会一种和谐的方式存在于我们的电脑上,它们会随着我们的点击而启动,会随…

PMP核心知识点—之项目的整合管理

知识点1:制定项目章程 项目章程是启动过程组的输出。 项目章程主要是:批准项目、给项目经理授权 明确项目与组织战略目标之间的直接联系。 项目章程是由项目发起人编制或者是项目经理和项目发起人共同编制。 项目章程是由项目启动者或者项目发起人发布。…

【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器(附项目源码)

最终效果 前言 使用CharacterController实现3d角色控制器,之前已经做过很多了: 【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用 【unity实战】C…

这些OA办公系统,才是企业高效行政的秘诀

本文将盘点10款OA办公系统,为企业选型提供参考。 大量的文件堆积在办公室,查找困难,浪费时间?文件的借阅和归还流程不规范,文件不知去向,无翼而飞?纸质单据审批周期长、审批过程不透明&#xff…

仕考网:事业单位考试分为哪几种类型?

事业单位招聘考试每年举行一次或两次,全国性的联考通常在每年的5月和10月底至11月初进行,省和市级直属单位的招聘次数则不受限制,各省的具体考试时间由各自安排。 事业单位的考试类型主要分为以下几种:全国事业单位联考、省级事业…

ELK学习笔记(一)——使用K8S部署ElasticSearch8.15.0集群

一、下载镜像 #1、下载官方镜像 docker pull elasticsearch:8.15.0 #2、打新tag docker tag elasticsearch:8.15.0 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0 #3、推送到私有仓库harbor docker push 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0二、…

港迪技术IPO上市:专注国产替代,盾构机变频器技术领先市场

武汉港迪技术股份有限公司(以下称:“港迪技术”或“公司”)是第四批国家级专精特新“小巨人”企业,公司及子公司港迪智能、港迪软件均为高新技术企业。据港迪技术IPO上市招股书(注册稿)显示,公司…

Java中实现JSON格式的转换(通过实例讲解)

创建项目 在IDEA中新建一个Java项目,在建好后的项目结构中添加一些必要的目录和文件,我最终的项目结构如图所示: 其中, Person和Dog是用于演示的两个类;JSONTest是实现将Person和Dog的实例对象转换成字符串&#xff…

Vue3 数据通信

一、基本概念 数据在 vue 中是单向流动的,有利于管理数据状态和变化。 而在日常组件开发中,难以避免组件之间的数据通信。组件通信可以分为不同的场景,例如父子组件通信、兄弟组件通信、跨层级组件通信等。 Vue3 提供了多种方式进行组件间的…

无法访问,你可能没有权限使用网络资源,此用户无法登录

解决方法: 打开控制面板,WinR运行框输入 control 控制面板主页更改为小图标,并选择凭据管理器 选择Window凭证,添加凭证(如果之前输错过的,这里会有信息,请删掉重新添加)

Mysql基础练习题 620.有趣的电影 (力扣)

620.编写解决方案,找出所有影片描述为 非 boring (不无聊) 的并且 id 为奇数 的影片,返回结果按 rating 降序排列 题目链接: https://leetcode.cn/problems/not-boring-movies/ 建表插入数据: Create table If Not Exists cinema (id int…

HIS系统|HIS系统成品|HIS系统应用

随着医疗信息化的飞速发展,HIS(医院信息系统)已经成为现代医院不可少的组成部分。HIS系统在医疗行业中扮演着至关重要的角色,广泛应用于医院的各个环节,不仅提高了医疗服务的效率,也增强了患者体验。本文将…

Vision Transformer (ViT) + 代码【详解】

文章目录 1、Vision Transformer (ViT) 介绍2、patch embedding3、代码3.1 class embedding Positional Embedding3.2 Transformer Encoder3.3 classifier3.4 ViT总代码 1、Vision Transformer (ViT) 介绍 VIT论文的摘要如下,谷歌翻译如下: 虽然 Transf…

JVM面试(四)类加载器和双亲委派机制

什么是类加载器? 简单来说的话,是用于实现“类加载动作”的加载器 “通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器…

Web测试(知识总结)

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 随着Internet和Internet/Extranet的快速增长,Web已经对商业、工业、银行、财政、教育、政府和娱乐及我们的工作和生活产生了深远的影响。许多传统的…

代码随想录打卡第10天

232 用队列实现栈 两个栈一个负责入一个负责出。 class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue() {stackInnew Stack<>();stackOut new Stack<>();}public void push(int x) {stackIn.push(x);}public int pop() {…