Datawhile 组队学习Tiny-universe Task01
Task01:LLama3模型讲解

仓库链接:GitHub - datawhalechina/tiny-universe: 《大模型白盒子构建指南》:一个全手搓的Tiny-Universe
参考博客:LLaMA的解读与其微调(含LLaMA 2):Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙_llama微调-CSDN博客
https://zhuanlan.zhihu.com/p/694072728
Part1:LLama的发展历程
LLaMA(Large Language Model Assistant)一系列大型开源语言模型,自2023年以来,已经经历了几次重要的迭代和升级。以下是LLaMA模型的发展历程:
-
LLaMA 1系列:2023年2月,Meta发布了LLaMA 1,这是一系列基于Transformer架构的模型,包括7B、13B、30B和65B四个参数量版本。这些模型在超过1T token的语料上进行了预训练,并且在多个基准测试中表现出色,超越了当时具有175B参数的GPT-3模型。LLaMA 1的开源策略使其迅速成为开源社区中受欢迎的大模型之一,促进了基于LLaMA的生态圈的发展。
-
LLaMA 2系列:2023年7月,Meta发布了LLaMA 2,包括7B、13B、34B和70B四个参数量版本。与LLaMA 1相比,LLaMA 2将预训练的语料扩充到了2T token,并将模型的上下文长度从2048翻倍到了4096。此外,LLaMA 2引入了分组查询注意力机制(Grouped Query Attention, GQA)等技术,进一步提升了模型性能。
-
LLaMA 3系列:2024年4月,Meta发布了LLaMA 3,包括8B和70B两个参数量版本,并且透露了400B参数量的版本正在训练中。LLaMA 3在技术上实现了全面升级,支持更长的上下文长度,采用了更高效的tokenizer,并且在推理、代码生成和指令跟随等方面展现出卓越的性能。
LLaMA模型的开源策略不仅推动了AI技术的普及和创新,也为广大开发者提供了宝贵的研究资源,加速了AI技术的商业化进程,并促进了多模态、多语言技术的发展。随着技术的不断进步和应用场景的不断拓展,LLaMA模型预计将在更多领域发挥重要作用,为人类社会带来更加智能、便捷的生活体验。
Part2:LLama3的主要特点
LLaMA 3模型作为Meta公司在人工智能领域的最新贡献,具有以下几个主要特点:
-
更大的词汇表和上下文支持:LLaMA 3模型采用了128,256个标记的分词器,相比之前的32,000个标记有显著提升,这使得模型能够更有效地编码文本,无论是输入还是输出,都可能带来更强的多语言处理能力和整体性能提升。此外,模型支持的上下文长度也得到了增加,能够处理更长的序列,这对于理解和生成文本尤为重要。
-
分组查询注意力(Grouped-Query Attention, GQA):LLaMA 3模型采用了分组查询注意力技术,这是一种优化的自注意力机制,可以提高模型处理长距离依赖关系的能力,同时提高推理效率。这对于处理长文本和复杂语言结构非常有帮助。
-
大规模预训练数据:LLaMA 3使用了超过15万亿个Token的庞大数据集进行训练,这是之前模型的数倍。这些数据涵盖了广泛的主题和语言,使得模型在多种任务和领域上都表现出色。
-
多语言能力:LLaMA 3的预训练数据集融入了超过5%的非英语内容,覆盖了超过30种不同的语言,这使得LLaMA 3具备更强的多语言处理能力,能够更好地服务于全球用户。
这些特点使得LLaMA 3在大型语言模型领域中具有显著的地位,并且由于其开源特性,它有望推动AI技术的普及和创新。LLaMA 3模型的发布,不仅在技术上实现了多项创新,更在多个应用场景中展现出强大的性能,预示着开源大模型时代的来临。
Part3:LLama3的网络结构
LLaMA 3模型的网络结构遵循了Transformer架构的设计,这是当前大型语言模型(LLMs)中常用的架构。以下是LLaMA 3模型网络结构的一些关键特点:
-
解码器架构:
- Transformer模型通常由编码器(Encoder)和解码器(Decoder)组成。在LLaMA 3中,使用的是纯解码器架构,这意味着模型专注于生成响应或翻译,而不是同时进行编码和解码。
- 解码器架构特别适合于文本生成任务,因为它能够基于之前的输出继续生成文本,这对于聊天机器人、文本摘要、机器翻译等应用至关重要。
-
自注意力机制:
- 自注意力机制是Transformer的核心,它允许模型在处理每个词元时考虑到整个输入序列,从而捕捉长距离依赖关系。
- 自注意力层通过计算词元之间的注意力权重来工作,这些权重表明在生成响应时应该给予每个词元多少关注。
-
多头注意力:
- 多头注意力机制是自注意力的一个扩展,它将自注意力过程复制多次,每个“头”学习输入数据的不同表示。
- 这增加了模型的容量,使其能够同时学习多种特征和模式,提高了对复杂语言结构的处理能力。
-
前馈网络:
- 前馈网络是Transformer中的另一个关键组件,它对自注意力层的输出进行处理,引入非线性变换。
- 这些网络通常是逐位置的,意味着它们独立地对序列中的每个位置应用相同的操作,这有助于模型学习更复杂的特征。
-
残差连接和层归一化:
- 残差连接允许模型在每个子层(自注意力和前馈网络)的输出中添加输入,这有助于信息在深层网络中的流动,减轻梯度消失的问题。
- 层归一化是在每个子层之后应用的,它对每个样本的特征进行归一化,有助于稳定训练过程并加快收敛速度。
-
分组查询注意力(Grouped-Query Attention, GQA):
- GQA是一种优化技术,它通过将查询(Query)分组来减少自注意力计算的复杂性,从而提高模型的效率。
- 这种方法在处理长序列时特别有用,因为它可以减少计算量和内存需求,同时保持模型性能。
-
位置编码:
- 位置编码是Transformer模型中的一个关键概念,因为模型本身无法直接理解序列中词元的顺序。
- 位置编码向模型提供关于词元在序列中位置的信息,通常通过添加一组正弦和余弦函数来实现,这些函数的频率随位置变化。
这些特点共同构成了LLaMA 3模型的网络结构,使其能够有效地处理和生成自然语言。每个组件都经过精心设计,以确保模型在各种NLP任务中都能表现出色。
RMSNorm
RMSNorm(Root Mean Square Normalization)是一种归一化技术,是 Layer Normalization 的一个变体,它在训练深度神经网络时有助于稳定梯度并加速收敛。以下是 RMSNorm 的一些关键特点和工作原理:
-
归一化过程:
- RMSNorm 对每个特征维度的输入进行归一化,使得它们的均值接近于0,标准差接近于1。这是通过计算输入的均值和根均方(RMS,即标准差的平方根)来实现的。
-
计算方式:
- 对于给定的输入张量 X,RMSNorm 首先计算每个特征维度的均值 μ 和根均方 σ(标准差 μ)。
- 然后,每个特征值会被归一化,其中 x 是输入张量中的元素。
-
可学习参数:
- RMSNorm 通常包含两个可学习参数 γγ 和 ββ,这些参数在训练过程中与归一化的输出相乘和相加,以允许模型学习最佳的缩放和偏移量。
- 最终的归一化输出为:
-
与Layer Normalization的比较:
- Layer Normalization 计算每个样本的均值和方差,并对每个样本的特征进行归一化。这有助于减少内部协变量偏移,但在处理长序列时可能不太有效。
- RMSNorm 计算每个特征维度的均值和根均方,而不是每个样本的,这使得它在处理长序列时更加有效,因为它考虑了整个批次的信息。
代码实现
class RMSNorm(nn.Module):def __init__(self, dim, eps=1e-8):super(RMSNorm, self).__init__()self.dim = dimself.eps = epsself.scale = nn.Parameter(torch.ones(dim))def forward(self, x):mean = x.mean(dim=-1, keepdim=True)rms = torch.sqrt(x.var(dim=-1, keepdim=True, unbiased=False) + self.eps)x_norm = x / rmsreturn self.scale * x_norm
GQA
分组查询注意力(Grouped Query Attention),是一种优化的自注意力机制,旨在提高大型语言模型的效率和性能。这种方法通过将查询(queries)分组来减少计算复杂度,同时保持或甚至提高模型的性能。GQA在处理长序列时尤其有用,因为它可以减少自注意力操作中的冗余计算。
在标准的自注意力机制中,每个输入元素都会生成一个查询、键(keys)和值(values),然后计算所有查询与所有键的点积,以确定每个元素应该关注序列中的哪些部分。这种方法在处理长序列时计算量很大,因为它需要对序列中的每个元素进行全对全的比较。
GQA通过以下步骤来优化这一过程:
-
分组查询:将查询(queries)分成多个组,每组只与对应的键(keys)和值(values)进行交互。这样可以减少需要计算的点积的数量。
-
点积和注意力权重:在每个组内计算点积和注意力权重,然后应用softmax函数来获得归一化的注意力权重。
-
加权和:使用注意力权重对每个组内的值(values)进行加权和,得到最终的输出。
-
残差连接和层归一化:与标准的Transformer层一样,GQA的输出通常会与输入进行相加(残差连接),然后进行层归一化(Layer Normalization)。
GQA的关键优势在于它能够在不牺牲太多准确性的情况下减少计算量,这对于在资源受限的环境中部署大型模型尤为重要。
class GQALayer(nn.Module):def __init__(self, dim, num_heads, group_size):super(GQALayer, self).__init__()self.num_heads = num_headsself.group_size = group_sizeself.head_dim = dim // num_headsself.scale = self.head_dim ** -0.5self.to_qkv = nn.Linear(dim, dim * 3, bias=False)self.to_out = nn.Linear(dim, dim)def forward(self, x):batch_size, seq_length, dim = x.shapegroups = x.view(batch_size, seq_length // self.group_size, self.group_size, dim)qkv = self.to_qkv(groups)q, k, v = qkv.chunk(3, dim=-1)q = q * self.scaleattn_weights = torch.matmul(q, k.transpose(-2, -1))attn_weights = F.softmax(attn_weights, dim=-1)out = torch.matmul(attn_weights, v)out = out.transpose(1, 2).reshape(batch_size, -1, dim)out = self.to_out(out)return out
RoPE
旋转编码(Rotary Positional Embedding,简称RoPE)是一种用于Transformer模型中的位置编码技术。它旨在改进模型对序列中单词位置信息的处理,特别是在处理长序列时。RoPE的核心思想是通过将位置信息编码为旋转矩阵,然后将这些矩阵与词嵌入相乘,从而使模型能够更有效地利用位置信息。
RoPE的关键特点包括:
-
旋转矩阵:对于序列中的每个位置,RoPE使用两个旋转矩阵(一个用于每个维度的偶数和奇数位置)来编码位置信息。这些矩阵是基于正弦和余弦函数构建的,它们能够保持相对位置信息,即使在序列很长时也是如此。
-
与词嵌入的结合:RoPE通过将旋转矩阵与词嵌入相乘来整合位置信息,这允许模型在处理每个词时同时考虑其位置和内容。
-
相对位置编码:RoPE能够捕捉序列中单词之间的相对位置关系,这对于理解文本中的句法和语义结构非常重要。
RoPE的数学表达式如下:
对于序列中的每个位置 p,我们定义两个旋转矩阵 和
,其中 i 是维度索引。这些矩阵的元素定义为:
其中 是位置 p 的角度,通常由位置索引和缩放因子决定。
然后,对于每个词嵌入 在位置 t,我们应用RoPE:
这里 是应用RoPE后的位置编码词嵌入,
和
是词嵌入 etet 中的相邻维度对。
RoPE的实现通常涉及为序列中的每个位置定义一对旋转矩阵,这些矩阵基于正弦和余弦函数构建,并且与位置索引相关联。这些矩阵然后与词嵌入的相应维度相乘,以注入位置信息。RoPE的设计允许模型在计算自注意力时考虑到单词的相对位置,这对于理解文本中的句法和语义结构至关重要。
class RotaryPositionalEmbedding(torch.nn.Module):def __init__(self, dim, max_seq_len=512):super(RotaryPositionalEmbedding, self).__init__()self.dim = dimself.max_seq_len = max_seq_lenself.inv_freq = 1.0 / (10000 ** (torch.arange(0, dim, 2).float() / dim))def forward(self, x):seq_len, batch_size, _ = x.shapepositions = torch.arange(0, seq_len).unsqueeze(1).unsqueeze(2).to(x.device)freqs = torch.einsum("i,j->ij", positions, self.inv_freq)cos_terms = torch.cos(freqs)sin_terms = torch.sin(freqs)x1 = x[..., ::2] * cos_terms + x[..., 1::2] * sin_termsx2 = -x[..., ::2] * sin_terms + x[..., 1::2] * cos_termsx_new = torch.stack((x1, x2), dim=-1).reshape(seq_len, batch_size, self.dim)return x_new
相关文章:
Datawhile 组队学习Tiny-universe Task01
Task01:LLama3模型讲解 仓库链接:GitHub - datawhalechina/tiny-universe: 《大模型白盒子构建指南》:一个全手搓的Tiny-Universe 参考博客:LLaMA的解读与其微调(含LLaMA 2):Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子…...
MCU与SOC的区别
自动驾驶中 MCU 与 SoC 的区别 在自动驾驶系统中,**MCU(微控制单元,Microcontroller Unit)和SoC(系统级芯片,System on Chip)**都是关键的电子元件,但它们在性能、功能和应用领域等…...
51单片机-DS18B20(温度传感器)AT24C02(存储芯片) IIC通信-实验2-温度实时监测(可设置阈值)
作者:王开心 座右铭:刻苦专研,百折不挠,千磨万击还坚韧,任尔东西南北风!干就完了!(可交流技术) 主要利用DS18B20芯片去采集温度,通过采集的温度能够自动保存…...
Vue2接入高德地图API实现搜索定位和点击获取经纬度及地址功能
目录 一、申请密钥 二、安装element-ui 三、安装高德地图依赖 四、完整代码 五、运行截图 一、申请密钥 登录高德开放平台,点击我的应用,先添加新应用,然后再添加Key。 如图所示填写对应的信息,系统就会自动生成。 二、安装…...
msvcp140.dll丢失如何解决?msvcp140.dll丢失的多种解决方法
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行,给用户带来很大的困扰。那么,当我们遇到msvcp140.dll丢失的情况时,应该如何解决呢&a…...
高效财税自动化软件如何提升企业财务工作的效率与准确性
在当今企业运营中,财务管理发挥着核心作用。它不仅涉及企业正常运转和市场决策,还是推动企业向高质量发展迈进的关键动力。面对激烈的市场竞争与科技革新的双重挑战,财务管理亟需进行持续的转型与提升,为企业高质量发展目标的实现…...
Leetcode 3286. Find a Safe Walk Through a Grid
Leetcode 3286. Find a Safe Walk Through a Grid 1. 解题思路2. 代码实现 题目链接:3286. Find a Safe Walk Through a Grid 1. 解题思路 这一题的话思路上就是一个宽度优先遍历,我们按照health进行排序进行宽度优先遍历,看看在health被消…...
shell脚本语法
shell脚本的变量 系统变量 系统变量是操作系统用来存储配置信息的变量,它们可以控制操作系统的行为和程序的运行环境。系统变量的种类和内容取决于操作系统的类型和版本。以下是一些常见的系统变量类别和它们可能包含的内容: 环境变量:这些…...
TCP 拥塞控制:一场网络数据的交通故事
从前有条“高速公路”,我们叫它互联网,而这条公路上的车辆,则是数据包。你可以把 TCP(传输控制协议)想象成一位交通警察,负责管理这些车辆的行驶速度,以防止交通堵塞——也就是网络拥塞。 第一…...
(黑马点评) 五、探店达人系列功能实现
5.1 发布和查看探店笔记 5.1.1 发布探店笔记 这块代码黑马已经完成了,在发布探店笔记界面,有两块内容是需要上传的。一是笔记内容,二是笔记配图。其中笔记配图部分黑马使用的是上传到本地前端服务器上面的。我我觉得可以将图片文件发布在阿里…...
SQLiteDatabase insert or replace数据不生效
在Android开发中,如果您在SQLite数据库中更新了数据,但重启应用后更新的数据不再生效,那么可能的原因有: 更新操作没有正确执行,可能是由于SQL语句错误或者数据库没有正确打开。 更新操作在事务中没有被正确提交。 更…...
基于Python实现一个浪漫烟花秀
为了实现一个类似烟花秀的效果,我们可以通过复杂的粒子系统来模拟烟花的升起、绽放和下落效果。以下是一个示例,旨在创建更为动态和逼真的烟花秀效果。 示例代码 这个代码示例将使用 matplotlib 和 numpy,并实现更丰富的视觉效果࿱…...
电气自动化入门03:安全用电
视频链接:2.1 电工知识:触电原因与防触电措施_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW/?p4&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.电流对人体的危害 电击:电流通过人体。 电伤:电流热效应…...
【深度学习】(2)--PyTorch框架认识
文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader(数据加载器)4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…...
前端面试记录
js 1. 函数式编程 将计算过程视为一系列的函数调用,函数的输出完全由输入决定,不依赖于或改变程序的状态,使得函数式编程的代码更加可预测和易于理解。 函数式编程的三个核心概念:纯函数、高阶函数和柯里化。 高阶函数:函数可以作为参数传…...
裁员了,很严重,大家做好准备吧!
最近刷到这样一个故事: 一个网友在大厂当牛马接近10年,部门优秀员工,业绩一直很稳,没想到,今年公司引进AI降本增效,开始大幅裁员,有些部门一夜之间被连锅端! 上个月果然轮到他了&a…...
uniapp组件uni-datetime-picker选择年月后在ios上日期不显示
uniapp组件uni-datetime-picker选择年月后在ios上日期不显示 操作步骤: ios 选择年月 预期结果: 日期变为选择年月的日期 实际结果: 日期不显示 bug描述: uni-datetime-picker 2.2.22 ios点击年月选择后日期不显示 解决方案 …...
01_快速入门
读取数据 import pandas as pd# df pd.read_excel(https://xxxx/xxx//xx.xslx) # 读取网络数据 # df pd.read_excel(rd:\data\xx.xslx) # 读取本地文件 # 如果是csv文件,用read_csv()函数 df pd.read_csv(seaborn/iris.csv)查看数据 df.head() # 前5条记录 d…...
数据结构之分文件编译学生管理
list.h #ifndef LIST_H_ #define LIST_H_ #define MAX 30 typedef struct {int id;//学号char name[20];//姓名char major[20];//专业int age;//年龄 }student,*Pstudent;typedef struct {student data[MAX];//储存学生信息的数组int len;//统计学生个数 }list,*Plist;Plist c…...
TypeScript入门 (二)控制语句
引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文主要讲解TypeScript中控制语句的部分;希望通过我的知识点总结,能够帮助你更好地…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
