文献阅读:LLaMA: Open and Efficient Foundation Language Models

news2024/10/7 20:37:16
  • 文献阅读:LLaMA: Open and Efficient Foundation Language Models
    • 1. 文章简介
    • 2. 模型训练
      • 1. 训练数据
      • 2. 模型结构
      • 3. 模型训练
        • 1. Optimizer
        • 2. 效率优化
    • 3. 效果评估
      • 1. 经典任务下效果
        • 1. Commen Sense Reasoning
        • 2. Closed-book Question Answering
        • 3. Reading Comprehension
        • 4. Mathematical reasoning
        • 5. Code generation
        • 6. Massive Multitask Language Understanding
        • 7. Evolution of performance during training
      • 2. 其他任务下的评测结果
        • 1. Instruction Tuning效果
        • 2. Toxicity
        • 3. Bias
        • 4. Bias on Gender
        • 5. TruthfulQA
    • 4. 结论 & 思考
  • 文献链接:https://arxiv.org/abs/2302.13971v1
  • git链接:https://github.com/facebookresearch/llama

1. 文章简介

这篇文章是Meta最近刚放出的一篇新的大模型的论文,最近关于大模型的工作真的太多了……

关于这篇文章貌似也有些段子,貌似一开始Meta还没打算开源,结果又是被人把code爆出来,然后就被迫开源了,我没考证过真实性,反正当成段子听听就行了。

不过关于这篇文章,可能本来就是有一定的开源的打算的,因为文章里面宣称,他只使用了一些常用的公开数据集……

回归正题,这篇文章的核心工作主要就是train了一个更小,但是效果更好的LLM模型。

按照文中的说法,他们train的13B的模型效果就已经基本追平了当前的主流大模型,而到了65B参数的模型,已经可以和PaLM-540B模型相提并论了。

而关于他们如何达到的这样的效果,主要就是通过两点:

  1. train了更多的步数;
  2. 微调了模型的结构。

此外,文中还对训练的代码进行了优化,使得训练可以得到加速。

下面,我们来具体对这篇文章的细节进行一下展开。

2. 模型训练

文中关于这部分的内容主要分三部分进行展开:

  1. 模型训练使用的数据以及分布;
  2. 模型的具体结构;
  3. 模型训练细节

下面,我们来具体看一下其中各部分的内容。

1. 训练数据

首先,关于训练数据方面,如前所述,LLaMA模型所使用的训练数据全都是公开数据集,其具体的分布如下表所示:

在这里插入图片描述

整体而言,模型训练共使用了1.4T个token,而具体的tokenize方法则是采用BPE分词。

2. 模型结构

而关于模型的具体模型的结构,则仕主要基于最早17年Vaswani在Attention is all you need给出的经典transformer结构,但是做了以下三点改动:

  1. 参考GPT3的方式使用Pre-normalization替换掉post-normalization;
  2. 参考PaLM的方式使用SwiGLU作为FFN的激活函数;
  3. 参考GPTNeo使用RoPE作为位置编码而不是使用绝对位置编码;

不同版本的模型的维度以及参数量等可以参考下表:

在这里插入图片描述

3. 模型训练

1. Optimizer

关于模型训练中所使用的优化器,文中倒是没有什么太多的改动,还是使用的AdamW优化器,超参 β 1 = 0.9 , β 2 = 0.95 \beta_1=0.9,\beta_2=0.95 β1=0.9,β2=0.95,learning rate的decay采用cosine函数,最终的learning rate为起始时的10%,然后设置2000步warmup。

2. 效率优化

不过,文中为了优化效率,倒是自己重新开发了一个多头attention的模块,且优化了线性层的激活函数参数回传更新过程,整体上来说进一步优化了计算效率。

关于这部分的具体实现倒是还没有去看,不过文中宣称说是已经将他们的改动开源到了下述项目当中:

  • https://github.com/facebookresearch/xformers

有兴趣的读者可以自行研究一下。

3. 效果评估

然后,介绍完了模型之后,就是看一下LLaMA在各类任务上面的效果表现。

1. 经典任务下效果

1. Commen Sense Reasoning

在这里插入图片描述

2. Closed-book Question Answering

  1. Natural Questions

在这里插入图片描述

  1. TriviaQA

在这里插入图片描述

3. Reading Comprehension

在这里插入图片描述

4. Mathematical reasoning

在这里插入图片描述

5. Code generation

在这里插入图片描述

6. Massive Multitask Language Understanding

在这里插入图片描述

7. Evolution of performance during training

在这里插入图片描述

在这里插入图片描述

2. 其他任务下的评测结果

1. Instruction Tuning效果

在这里插入图片描述

2. Toxicity

在这里插入图片描述

3. Bias

在这里插入图片描述

4. Bias on Gender

在这里插入图片描述

5. TruthfulQA

在这里插入图片描述

4. 结论 & 思考

整体来说其实这篇文章感觉就是一个大模型的实验报告,技术上真要说有什么突破点感觉完全说不上,倒是给出的开源代码和模型非常的有意义,不过估计也就大厂研究岗可以玩玩了……

就我个人来说,还是他在模型结构的改动上面比较打动我,感觉还比较有意思,不过之前好像在苏剑林的哪篇文章里面见过他的一个讨论,印象中他认为pre-normalization虽然可以叠多层,但是训练效果上并不能真正起到多层的效果,这方面可能还是得后面研究一下Fundation Transformer的效果。

不过RoPE和SwiGLU倒是可以试试看用在小模型上是否能有效,虽然我估摸着效果应该也不会太明显……

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

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

相关文章

数据分析03——矩阵常用计算方法和函数

0、前言: 数组:计算机领域的概念矩阵:数学领域的概念对于Numpy而言,矩阵是数组的分支 1、创建矩阵: 字符串创建矩阵:mat1 np.matrix(‘1 2;3 4’)列表形式创建矩阵:mat2 np.matrix([[5, 6],…

MySQL基础(八)聚合函数

上一章讲到了 SQL 单行函数。实际上 SQL 函数还有一类,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。 1. 聚合函数介绍 什么是聚合函数 聚合函数作…

深度学习目标检测项目实战(五)—基于mobilenetv2和resnet的图像背景抠图及其界面封装

深度学习目标检测项目实战(五)—基于mobilenetv2和resnet的图像背景抠图及其界面封装 该项目很有意思,也是比较前沿,项目主要参考了开源代码: https://github.com/PeterL1n/BackgroundMattingV2 环境搭建 kornia0.4.1 tensorboard2.3.0 to…

图像修复_criminis算法及改进算法学习小结

摘要 对图像修复专题学习情况的一个总结,学习内容包括: (1)综述文献的阅读及对图像修复的理解。 (2)criminis算法的仿真情况。 (3)criminis算法的改进算法的仿真 一、 前言 1&…

【leetcode】138.复制带随机指针的链表

《力扣》138.复制带随机指针的链表 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设…

[羊城杯 2020]a_piece_of_java

首先jd-gui进行反编译 简单查看发现有用的类就两个一个是 MainContrller.class和InfoInvocationHandler.class public class MainController {GetMapping({"/index"})public String index(CookieValue(value "data", required false) String cookieDa…

【C++】类和对象(初阶认识)#上篇#

目录 对面向过程和面向对象的初步认识 类的引入 封装 和 类的访问限定符 所以祖师爷在类中还引入了访问权限 用类定义变量 类的理解和对象的实例化 sizeof 计算类对象的大小 类对象的成员函数在公共代码区 this 指针 对面向过程和面向对象的初步认识 什么,是…

分片集群-搭建

分片集群 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。 为了解决这些问题,有两个基本的方法: 垂直扩展和水平扩展。 垂直扩展:增加更多的…

阿里云服务器地域和可用区怎么选择合适?

阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置,地域选择就近选择,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域&#…

ROHM常见的电冰箱控制电路图,轻松了解冰箱工作原理

​冰箱是我们日常生活中使用频率非常高的电器,它可以将食物和饮料保存在低温下,以延长它们的保质期。冰箱的工作原理主要基于制冷循环和温度控制。 先看电路图: 1. 单门直冷式电冰箱重锤式控制电路 电路的基本组成:采用重锤式启…

win10安装pytorch全网最好用的教程[2023.5.7更新]

目录 0.关于pytorch a. 什么是 PyTorch ? b. 为何选择 PyTorch ? 1.安装pytorch 1.1确定关联性 1.2下载最新版本的pytorch 1.3.pytorch历史版本下载 1.4 避坑 1.4.1、猜测 1.4.2、验证 1.4.3、解决方案 1.5、检验 0.关于pytorch a. 什么是…

前端学习----webpack入门学习

webpack是前端项目工程化的具体解决方案 主要功能:它提供了友好的前端模块化开发支持,以及 代码压缩(将空格和注释全部消除,变成一行代码)、 处理浏览器端JavaScript的兼容性(只管写高级语法,自动向下兼容。例如ie8不支持let 语法…

【Shell】一天快速入门

1 Shell解析器 Linux提供的shell解析器有6种: /bin/sh /bin/bash /sbin/nologin /bin/csh /bin/dash /bin/tashsh是bash的软连接。 2 Shell脚本 2.1 hello.sh脚本 #!/bin/bash echo hello world!#! 告诉系统这个脚本需要什么解释器来执行; 脚本以#!…

NCNN----Monodepthv2单目深度估计 小米手机部署

题目要求:学习了解单目深度估计模型MonoDepthv2,基于NCNN推理框架部署到小米手机 MonoDepthv2 论文:Digging Into Self-Supervised Monocular Depth Estimation MonoDepthv2 源码:Monodepth2 GitHub 分析: 1&#xff0…

Illustrator如何进行任务自动化之实例演示?

文章目录 0.引言1.动作的录制2.对文件播放动作3.批处理 0.引言 因科研等多场景需要进行绘图处理,笔者对Illustrator进行了学习,本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结,本文对任务自动化进行…

Cadence技巧总结学习(DRC、Annotate)持续更新~

Cadence技巧总结学习持续更新~ 你还可以再哪里看到这篇文章:知乎 1. 画叉 对于芯片上不用的引脚信号画上号,如下: 按大写X就可以了,或是双脚引脚,在跳出的界面中,Is No Connect上✔。 2. 画线快捷键&#…

【关于C++中----智能指针】

文章目录 一、概念引入二、内存泄漏2.1 内存泄漏概念及其危害2.2 内存泄漏分类2.3 避免内存泄漏 三、智能指针的原理3.1 RAII3.2 像指针一样 四、三类智能指针4.1 auto_ptr4.2 unique_ptr4.3 shared_ptr 五、循环引用和weak_ptr 一、概念引入 在我们日常写代码过程中&#xff…

ARM学习(21)STM32 外设Can的认识与驱动编写

笔者来聊聊can的认识以及can接收数据的驱动编写 1、STM32 Can 外设的认识 Can的特性就不多说了,主要来聊聊can的一些标识符以及收发状态。can有一套收发机制,发送和接收都有硬件缓存,叫邮箱,通过下面的图可以看出,下面…

ESP32学习笔记 -- ESP32-S3 使用外部 PSRAM

ESP32-S3是乐鑫科技推出的一款专为物联网而生的SOC芯片,该芯片同时支持WIFI和BLE蓝牙功能,集成了高性能的Xtensa 32位LX7双核处理器,最高主频可达240MHz。 根据乐鑫官方资料介绍,该芯片内置512KB SRAM片上内存,并且具有45个可编程GPIO管脚和丰富的通信接口。为了更好地扩…

Flask框架之路由与蓝图的使用

路由与蓝图 路由路由概述路由的基本使用查看路由信息url_map对象命令行方式 HTTP请求方法 蓝图概述蓝图的基本使用蓝图的拆分指定蓝图的url前缀蓝图构造URL蓝图静态文件蓝图模板目录 路由 路由概述 在Flask中,路由用于将HTTP请求与特定的Python函数相匹配。通过定义…