llama系列模型学习

2024-06-21 15:04
文章标签 学习 模型 系列 llama

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

这篇关于llama系列模型学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081548

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx