2023年2月25日,Meta使用2048张A100 GPU,花费21天训练的Transformer大模型LLaMA开源了。
1.4T tokenstakes approximately 21 days
以下是觉得论文中重要的一些要点
1)相对较小的模型也可以获得不错的性能
研究者发现在给定计算能力限制的情况下,最好的性能并不是来源于更大的模型,而是来源于相对较小模型在更多的数据上进行训练。LLaMA就采用了这种策略,LLaMA模型,模型参数从7B到65B不等,13B版本性能优于GPT-3(175B),65B版本获得相比目前最好模型差不多的性能。目前大家公认的大模型openai的GPT3系列,参数量大约175B。LLaMA相比GPT-3,在获得接近性能的前提下,将参数量降低了一个数量级,模型可在当前单卡GPU上部署。
2)不一定要专业语料,精细处理的开源语料也可以
LLaMA使用CommonCrawl、C4、Wikipedia、Books等语料,并且引入了Github、XrXiv、StackExchange等开源专业语料,模型也具备了不错的写代码、处理数据公式和推理的能力。

3)各种稳定模型训练的优化技术必不可少
LLaMA基于Transformer模型架构,并且应用了各种优化技术以加速和稳定模型的训练过程。
参考GPT3的训练经验,使用RMSNorm标准化每个transformer block输入,标准化输入能提高训练的稳定性。
参考PaLM经验,使用SwiGLU激活函数替代ReLU激活函数。
参考GPTNeo,使用RoPE位置编码替代原来的绝对位置编码。
同时LLaMA引入causal multi-head attention以减少计算和存储开销,重写了transformer的backward以减少冗余计算,同时考虑GPU的计算和通信的重叠加速训练。
LLaMA使用AdamW优化器,并采用warmup技巧。其实我觉得AdaMax可能会更好些,AdaMax在Speech上相比AdamW更稳定,当然Speech数据和文本数据还是有较大差别的。
4)LLaMA的模型的结果还是可以的
LLaMA在多个指标上同样获得了不错的性能,获得和GPT3差不多的性能。
类似于GPT-3,LLaMA也能没经过调优直接应用到下游任务,具体为zero-shot task和few-shot task。
zero-shot不给参考例子,在给定q时直接让模型生成回答a。few-shot则类似于给出参考例子,给出1、5或64个qa对作为参考,然后在给定同类型的q让模型生成回答a。以下是一个one-shot的例子。

在zero-shot和few-shot类任务中LLaMA获得不错的性能,并不比更大的模型差(分数越高越好)。

同当前大模型GPT-3,Gopher、Chinchilla、PaLM相比,LLaMA在多个指标上获得明显的性能提升,并且LLaMA在数学推理任务上获得更好的性能,数学推理据说在chatGPT上栽了跟头。
虽然LLaMA在保证回答正确、没有偏见和对人类有用上花费了很多优化,但正如论文所说,由于预训练语料中的一些偏见,模型可能会产生一些匪夷所思的答案。模型要真正服务人类,可能还是需要使用RLHF,使用人类反馈指导模型对问题回答的选择。
---
[1] LLaMA. llama/MODEL_CARD.md at main · facebookresearch/llama · GitHub
[2] LLaMA: Open and Efficient Foundation Language Models. https://scontent-xsp1-1.xx.fbcdn.net/v/t39.8562-6/333078981_693988129081760_4712707815225756708_n.pdf?_nc_cat=108&ccb=1-7&_nc_sid=ad8a9d&_nc_ohc=ov6yTHfLfNQAX_ixTyd&_nc_ht=scontent-xsp1-1.xx&oh=00_AfDnH5IYrqTcFoOpLmrskeR_kQUe4To1BWUk-ZLv5unymg&oe=6401C9E2
[3] Illustrating Reinforcement Learning from Human Feedback (RLHF). Illustrating Reinforcement Learning from Human Feedback (RLHF)
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我在开发的Rails3网站的一些搜索功能上遇到了一个小问题。我有一个简单的Post模型,如下所示:classPost我正在使用acts_as_taggable_on来更轻松地向我的帖子添加标签。当我有一个标记为“rails”的帖子并执行以下操作时,一切正常:@posts=Post.tagged_with("rails")问题是,我还想搜索帖子的标题。当我有一篇标题为“Helloworld”并标记为“rails”的帖子时,我希望能够通过搜索“hello”或“rails”来找到这篇帖子。因此,我希望标题列的LIKE语句与acts_as_taggable_on提供的tagged_with方法
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序