llama系列模型学习

一、目录

  1. llama1 模型与transformer decoder的区别
  2. llama2 模型架构
  3. llama2 相比llama1 不同之处
  4. llama3 相比llama2 不同之处
  5. llama、llama2、llama3 分词器词表大小以及优缺点
  6. 采用的损失函数是什么?
  7. 为什么Layer Norm 改为RMS Norm?
  8. 如何消除模型幻觉?

二、实现

  1. llama1 模型与transformer decoder的区别
    Transformer Decoder 架构,做了以下修改:
    1.和GPT3-样将Normalization从每个子层的输出位置移动到了输入位置。
    2.将Layer Norm 改为 RMS Norm。
    3.采用旋转位置编码,
    4.采用silu激活函数。(根据光滑,实验效果更好)

  2. llama2 模型架构
    在这里插入图片描述
    在这里插入图片描述

  3. llama2 相比llama1 不同之处
    数据方面
    LLama2训练语料相比LLaMA多出40%,上下文长度是由之前的2048升级到4096,可以理解和生成更长的文本。
    新增预预训练数据,并注重安全&隐私问题。
    训练出了chat版本:llama-2-chat:SFT, RLHF。在这里插入图片描述
    模型结构方面
    模型结构基本和llama一样,transformer decoder结构,RMSNorm 应用预归一化、使用 SwiGLU 激活函数和旋转位置嵌入RoPE。
    上下文长度是由之前的2048升级到4096,可以理解和生成更长的文本。
    7B和13B 使用与 LLaMA 相同的架构,34B和70B模型采用分组查询注意力(GQA)。
    For speed up decoding! 自回归解码的标准做法(past key-value 机制)是缓存序列中先前标记的k,v矩阵,从而加快注意力计算速度。但上下文长度、批量大小、模型大小较大时,多头注意力
    (MHA) 中的kv缓存无疑巨大。
    所以采用分组查询注意力机制(GQA)可以提高大模型的推理可扩展性。它的工作原理是将键和值投影在多个头之间共享,而不会大幅降低性能。可以使用具有单个KV投影的原始多查询格式
    (MQA)或具有8KV投影的分组查询注意力变体(GQA)。
    训练方式:
    【优化器:AdamW;学习率计划:cosine learning rate schedule。使用 0.1 的权重衰减和1.0的梯度裁剪。】
    0、Llama2使用与Llama1相同的分词器;它采用BPE算法,使用 SentencePiece 实现。与Llama 1 一样,将所有数字拆分为单独的数字,并使用字节来分解未知的 UTF-8 字符。词汇量为 32k token
    1、使用公开的在线数据进行预训练。
    2、SFT:然后通过使用有监督微调创建 Llama-2-chat 的初始版本。
    3、RLHF:接下来,llama-2-chat 使用人类反馈强化学习 (RLHF) 进行迭代细化,其中包括拒绝采样和近端策略优化 (PPO)。

  4. llama3 相比llama2 不同之处
    vocab_size:32000 ->128256
    LLaMA 3具有128K词汇量大小的Tokenizer,可以更有效的对文本进行编码,从而显着提高模型性能。
    max_position_embeddings:4096->8192
    在8,192 个Token的较长序列上训练模型,使用掩码机制确保自注意力不会跨越文档边界。需要注意的是LLaMA 3采用了8K Token进行训练,并不代表只能生成8K Token以内文本。
    num_key_value_heads:32 -> 8
    使用了GQA,因为num_attention_heads维持32,也就是计算时key、value要复制 4份。参数量会下降,K_proj、V_proj的参数矩阵会降为llama2-7B的1/4。
    intermediate_size:11008->14336
    只是FFN(MLP)时的中间维度变了,计算范式不变。
    训练数据:
    15T的训练Token,全部来自公开数据。是Lama2的7倍大小。代码数据多了4倍5%高质量非英语数据,涵盖30多种语言。
    对数据进行了清洗过滤,lama2生成训练数据来帮助训练文本质量分类器。
    微调阶段除了开源数据集,还人工标注了1000万样本。

  5. llama、llama2、llama3 分词器词表大小以及优缺点
    llama 2使用与 llama 1 相同的分词器; 它采用字节对编码(BPE)算法,使用 SentencePiece 实现。 与llama 1 一样,将所有数字拆分为单独的数字,并使用字节来分解未知的 UTF-8 字符,总数词汇量为 32k 个token。
    基于word粒度会导致词表(vocab)过大,进而致使训练冗余,主要是因为每个单词的衍生词过多,比如look,looking,looks等等;最重要的是会导致OOV问题(out of vocabulary)即未出现在词表当中的词将无法处理。
    另外,对于低频词/稀疏词,无法在训练当中得到充分的学习,模型无法充分理解这些词的语义。
    而基于char会导致词表过小,无法充分理解语义信息。字符粒度分词无法直接表达词的语义,可能导致在一些语义分析任务中效果较差;由于文本被拆分为字符,处理的粒度较小,增加后续处理的计算成本和时间。
    在很多情况下,既不希望将文本切分成单独的词(太大),也不想将其切分成单个字符(太小),而是希望得到介于词和字符之间的子词单元。这就引入了 subword(子词)粒度的分词方法。

  6. 采用的损失函数是什么?
    自回归语言模型,LLaMA 通过接收一系列单词作为输入并预测下一个单词来递归生成文本。

  7. 为什么Layer Norm 改为RMS Norm?
    RMS Norm 是Layer Norm 的改进,依据 数据分布平移不变性,对layer Norm 去除平移参数。

  8. 如何消除模型幻觉?
    首先,为什么会产生幻觉?这主要原因是用于训练语言模型的大数据语料库在收集时难免会包含一些错误的信息,这些错误知识都会被学习,存储在模型参数中,相关研究表明模型生成文本时会优先考虑自身参数化的知识,所以更倾向生成幻觉内容。
    数据阶段: 使用置信度更高的数据,消除原始数据中本来的错误和不一致地方。
    训练阶段:有监督学习算法非常容易使得求知型查询产生幻觉。在模型并不包含或者知道答案的情况下,有监督训练仍然会促使模型给出答案。而使用强化学习方法,则可以通过定制奖励函数,将正确答案赋予非常高的分数,将放弃回答的答案赋予中低分数,将不正确的答案赋予非常高的负分,使得模型学会依赖内部知识选择放弃回答,从而在一定程度上缓解模型的幻觉问题。
    基于后处理:在生成输出后,对其进行迭代评估和调整。对于摘要等任务,只有在生成整个摘要后才能准确评估,因此后期修正方法更为有效。缺点是不改变模型本身。
    基于知识检索增强的方式:模型幻觉很大程度来源之一是外部知识选择不正确,因此用更强的检索模型搜索知识,返回更加有用的知识,也是消除对话回复幻觉的有效途径。

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

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

相关文章

Vscode配置Verilog开发环境(二)

两年前我写过一篇vscode配置fpga开发环境的博客,近期发现查看的人数还是比较多的,经过两年的使用,优化了代码模板以及删减了一些插件等等,因此有了本文。 目前我的vscode只有下图中的九个插件,相比前文已经减少了一些了…

地级市绿色创新及碳排放与环境规划数据(2000-2021年)

数据简介:分享各个城市对于碳排放的降低做出了哪些共享。该数据是地级市2000-2021年间由绿色创新、碳排放与环境规制数据构成的能源与环境研究数据大合集,并对其进行可视化处理,供大家研究使用。当今我国大力推进生态文明建设、美丽中国建设等…

【日常开发之Windows共享文件】Java实现Windows共享文件上传下载

文章目录 Windows 配置代码部分Maven代码 Windows 配置 首先开启服务,打开控制面板点击程序 点击启用或关闭Windows功能 SMB1.0选中红框内的 我这边是专门创建了一个用户 创建一个文件夹然后点击属性界面,点击共享 下拉框选择你选择的用户点击添加…

python爬虫必须要高匿IP吗 ?

各个平台搜索关键词就可以找到不同品牌的代理IP了。 找倒是不难,难的是能从中挑选出靠谱且合适的代理品牌。 在选择代理IP这块,不建议使用免费和超低价的代理,因为这一类的代理往往非常不稳定,很多都被网站拉黑过,特…

PS添加物体阴影

一、选择背景,确保物体和北京分割出图层 二、右键单击物体图层,点击混合选项,点击投影 三、调整参数,可以看效果决定(距离是高度,扩展是浓度,大小是模糊程度),保存即可

实用软件下载:CrossOver 2024最新安装包及详细安装教程

​根据软件大数据显示上传或者手动输入软件都非常简单,一般来说CrossOver会自动连接到一个Win文件共享服务器(Samba或CIFS)上,使用者能够直接在这个服务器中选择并上传软件执行文件。实际上我们可以这样讲调整CrossOver设置&#…

汽车数据应用构想(五)

如果说路面信息(POI)可以通过采集车、人工等方式来获取,用户习惯可以通过手机生态应用来获取,那么车的信息应该算是车辆独有的垂直领域价值了,它是实实在在只有车厂才拥有的数据财富,任何互联网大厂都抢不走…

如何使用mapXplore将SQLMap数据转储到关系型数据库中

关于mapXplore mapXplore是一款功能强大的SQLMap数据转储与管理工具,该工具基于模块化的理念开发,可以帮助广大研究人员将SQLMap数据提取出来,并转储到类似PostgreSQL或SQLite等关系型数据库中。 功能介绍 当前版本的mapXplore支持下列功能…

一条Redis命令是如何执行的?

一条Redis命令是如何执行的? 源码结构核心数据结构redisServerredisClientredisDbredisObjectaeEventLoop 核心流程redis启动流程main() 主循环aeEventProcess执行过程命令执行的流程过程1(redis启动)过程2(客户端与服务端建立链接…

【Android】Android Studio 使用Kotlin写代码时代码提示残缺问题解决

问题描述 Android Studio升级之后,从Android Studio 4.2升级到Android Studio Arctic Fox版本,因为项目比较老,使用的Gradle 版本是3.1.3,这个版本的Android Studio最低支持Gradle 3.1版本,应该算是比较合适的版本。 …

不翻墙安装yolov8环境下的RT-DETR并实现PCB表面缺陷检测

目录 一、新建conda环境二、安装yolov8环境1.克隆安装包2.安装依赖包3.测试模型 任务2:基于RT-DETR实现PKU-PCB表面缺陷检测数据准备 数据增强测试 总结 一、新建conda环境 创建并激活conda环境: 在conda创建一个名为yolov8的新环境,并在其中…

国际网络专线的开通流程

1. 选择服务商:首先,您需要选择一个可靠的服务商来提供国际网络专线服务。确保服务商具有良好的声誉和专业知识,以便为您提供高质量的网络连接和支持。 2. 评估需求:在与服务商沟通之前,您需要明确自己的网络需求。这…

dp经典问题:LCS问题

dp:LCS问题 最长公共子序列(Longest Common Subsequence, LCS)问题 是寻找两个字符串中最长的子序列,使得这个子序列在两个字符串中出现的相对顺序保持一致,但不要求连续。 力扣原题链接 1.定义 给定两个字符串 S1…

猫狗识别—视频识别

猫狗识别—视频识别 1. 导入所需的库:2. 创建Tkinter主窗口并设置标题:3. 设置窗口的宽度和高度:4. 创建一个Canvas,它将用于显示视频帧:5. 初始化一个视频流变量cap,用于存储OpenCV的视频捕获对象&#xf…

【速速收藏】适用于Linux系统的五个优秀PDF编辑器

PDF (Portable Document Format) 是便携文档格式的缩写,这是一种用于电子共享文档的标准格式,广泛应用于各种文档类型的存储和分发。然而,有时我们可能需要对PDF文档进行更改和编辑。本文将介绍五款在Linux平台上广受欢迎的PDF编辑器。 ​​…

陀螺仪LSM6DSV16X与AI集成(8)----MotionFX库解析空间坐标

陀螺仪LSM6DSV16X与AI集成.8--MotionFX库解析空间坐标 概述视频教学样品申请源码下载开启CRC串口设置开启X-CUBE-MEMS1设置加速度和角速度量程速率选择设置FIFO速率设置FIFO时间戳批处理速率配置过滤链初始化定义MotionFX文件卡尔曼滤波算法主程序执行流程lsm6dsv16x_motion_fx…

【分布式事务】Seata AT实战

目录 Seata 介绍 Seata 术语 Seata AT 模式 介绍 实战(nacos注册中心,db存储) 部署 Seata 实现 RM 实现 TM 可能遇到的问题 1. Seata 部署成功,服务启动成功,全局事务不生效 2. 服务启动报错 can not get …

[java]集合类stream的相关操作

1.对list中的map进行分组 下面例子中&#xff0c;根据高度height属性进行分组 List<Map<String, Float>>originalList new ArrayList<>();originalList.add(new HashMap<String,Float>() {{put("lng", 180.0f);put("lat",90f);…

C++使用Poco库封装一个FTP客户端类

0x00 Poco库中 Poco::Net::FTPClientSession Poco库中FTP客户端类是 Poco::Net::FTPClientSession , 该类的接口比较简单。 上传文件接口&#xff1a; beginUpload() , endUpload() 下载文件接口&#xff1a; beginDownload() , endDownload() 0x01 FTPCli类说明 FTPCli类…

CSS规则——font-face

font-face 什么是font-face&#xff1f; 想要让网页文字千变万化&#xff0c;仅靠font-family还不够&#xff0c;还要借助font-face&#xff08;是一个 CSS 规则&#xff0c;它允许你在网页上使用自定义字体&#xff0c;而不仅仅是用户系统中预装的字体。这意味着你可以通过提…