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

本文是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.rhkb.cn/news/415479.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络(八股文)

这里写目录标题 计算机网络一、网络分层模型1. TCP/IP四层架构和OSI七层架构⭐️⭐️⭐️⭐️⭐️2. 为什么网络要分层?⭐️⭐️⭐️3. 各层都有那些协议?⭐️⭐️⭐️⭐️ 二、HTTP【重要】1. http状态码?⭐️⭐️⭐️2. 从输入URL到页面展示…

佰朔资本:两步走!“科创板八条”后首单,亮点多多!

“科创板八条”后首单并购重组 普源精电创立于1998年,是国产电子测量仪器领军企业,公司拥有数字示波器、射频类仪器、波形发生器、电源及电子负载、万用表及数据收集五大产品族、八大产品线,并供应芯片级、模块级和系统级多层次处理方案&…

Carla自动驾驶仿真十:Carlaviz三维可视化平台搭建

文章目录 前言一、环境准备1、docker安装2、websocket-client安装3、carlaviz代码下载 二、carlaviz使用1、打开carla客户端2、输入启动命令3、进入carlaviz4、修改manual_control.py脚本5、运行manual_control.py脚本6、运行carlaviz官方脚本(推荐) 前言…

Oracle授权如何购买?多少钱?如何计算?

前言 作为DBA时常也会遇到一些商务的问题,比如购买Oracle 的授权,比如老板问用oracle有没有法律风险,这个组件是否收费?如何计算授权数?等等,本文根据博主的经验和一些Oracle公开的资料,来做一个…

戴尔科技领涨市场,AI服务器需求成关键驱动力

戴尔科技强劲上涨,AI服务器需求激增 戴尔科技公司日内股价飙升4.2%,达到115.42美元,接近一个月高点。这一强劲表现主要得益于该公司上调了年度盈利预期,原因是对Nvidia驱动的人工智能优化服务器的需求显著增加。戴尔将2025财年的年…

智能的JavaScript开发工具WebStorm v2024.2全新发布

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具,被广大中国JS开发者誉为"Web前端开发神器""强大的HTML5编辑器""智能的JavaSscript IDE"等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。 立即获…

mate-indicators占用内存过高导致熔断

目录: 1、问题现象2、解决方法 1、问题现象 mate-indicators占用内存达30.9%(内存溢出)导致内存不足服务熔断。 2、解决方法 发现mate-indicators进程占用内存资源达到节点总内存40%,导致服务出现内存熔断 临时解决 systemct…

React 实现PDF预览(数据源使用文件流而不是url)

一 前提 应公司要求,需要进行上传文件(pdf)的预览功能,网上大部分都是使用url作为预览数据源,但是现在后端那边只返回了pdf文件流,所以本文主要是用文件流来预览pdf。 二 首先需要获取pdf文件流&#xff…

OpenCV绘图函数(15)图像上绘制矩形函数 rectangle()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 绘制一个简单的、粗的或填充的直立矩形。 这个函数 cv::rectangle 绘制一个矩形轮廓或一个填充的矩形,其两个相对的顶点分别是 pt1 和…

【STM32+HAL库】---- 按键中断控制LED

硬件开发板:STM32G0B1RET6 软件平台:cubemaxkeilVScode1 新建cubemax工程 1.1 配置系统时钟树 1.2 配置相关GPIO引脚 ①LED由PC13引脚控制 选择PA5引脚,GPIO_Output模式 GPIO模式配置: ②按键开关由PC13引脚控制 选择PC13引…

arcgisjs4.0 内网部署字体不显示问题处理

问题背景问题定位解决方案 问题背景 内网环境,通过压缩包的hash值验证了包是一摸一样的,ningx也读到了index.html,但是网格的字提显示出不来,并且地图上的注记文字均不显示 本地环境地图情况: 内网环境地图情况&…

Pepper佩盼尔wordpress模板

Pepper佩盼尔WordPress模板是一款专为追求简洁、现代和专业外观的网站设计者和开发者打造的高品质主题。它以简站为主题,强调“让建网站更简单”的理念,旨在为用户提供一个易于使用、功能丰富的平台来构建他们的在线业务或个人网站。 模板特点包括&…

AT+MQTT指令连接华为云实现数据上传

1 准备工作 硬件设备模块:ESP-01-S 固件烧录工具:ESP8266下载器 串口调试工具:VOFA参考文章:stm32AT指令ESP8266接入华为云物联网平台并完成属性上报与下发的命令处理 2 固件更新 2.1 为什么要重新安装固件 由于ESP-01-S模块出…

模拟算法专题——算法介绍算法讲解力扣实战应用

目录 1、模拟算法介绍 2、算法应用【leetcode】 2.1 替换所有的问号 2.1.1 算法思想 2.1.2 算法代码 2.2 提莫攻击 2.2.1 算法思想 2.2.2 算法代码 2.3 Z字形变换 2.3.1 算法思想 2.3.2 算法代码 2.4 外观数列 2.4.1 算法思想 2.4.2 算法代码 2.5 数青蛙 2.5.1 算…

计算机毕业设计选题推荐-博客平台-博客系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

【NLP自然语言处理】文本处理的基本方法

目录 🍔什么是分词 🍔中文分词工具jieba 2.1 jieba的基本特点 2.2 jieba的功能 2.3 jieba的安装及使用 🍔什么是命名实体识别 🍔什么是词性标注 🍔小结 学习目标 🍀 了解什么是分词, 词性标注, 命名…

解锁高效项目管理:精选软件项目管理工具与技术实战

在当今快节奏的商业环境中,项目管理不仅是确保任务按时完成的手段,更是企业战略规划与执行的核心。面对日益复杂的项目需求和不断变化的市场环境,传统的手工管理方式已难以满足高效协同的要求。此时,项目管理软件作为数字化时代的…

10款主流图纸加密软件大盘点|2024企业常用图纸加密软件分享(赶快码住!)

某天早上,小李,作为一家大型制造企业的设计工程师,正准备提交他耗时数月设计的一份机密产品图纸。就在点击发送的那一刻,突然发现网络异常。他的心猛地一沉,联想到前段时间公司内部的泄密事件,他不由得心跳…

yolov8目标检测pyside6可视化图形界面+检测源码ui文件——用于计数统计

项目结构 YOLOv8模型加载:加载预训练的YOLOv8模型。PySide6 GUI:设计图形用户界面,用于显示检测结果和控制选项。摄像头/视频输入:从摄像头或视频文件读取图像帧。目标检测:使用YOLOv8模型对输入图像进行实时目标检测…

中国水资源用水紧张程度数据(栅格/0.5度)

2010-2020年中国用水紧张程度栅格数据集 数据介绍 用水紧张程度被定义为淡水汲取量占可用淡水资源的比例,又称取水强度,是衡量可持续发展目标具体目标6.4进展状况的重要指标。本数据集为2010年至2020年中国用水紧张程度逐年数据,格式为Geoti…