添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
大气的大蒜  ·  Yandex 开源 YaLM ...·  1 年前    · 
近视的鸭蛋  ·  PowerBI DAX ...·  2 年前    · 
  • 一方面是复现三步流程(Colossal ai+Open Assistant+LLaMA)
  • 另一方面是训练加速(Deepspeed+Megatron+Colossal ai+FlexGen),便于基于开源大模型(Bloom/OPT/T5)微调;
  • 还有 更超前的小冰链(X-CoTA),思维链透明化+执行能力(有人推测与大语言模型关系不大);有个瓶颈:涌现能力只出现在100b级别的大模型上,小模型一般人难以优化
  • 【2023-2-28】要点

  • 预训练大模型
  • GPT-3规模:175b
  • 规模小,无法支持涌现能力
  • ChatGPT三步训练
  • RM、RLHF算法
  • ICL、CoT算法
  • GPU计算资源
  • GPU分布式加速算法
  • OpenAI InstructGPT论文里有个惊奇的发现,即:1.3B小模型+RLHF 居然可以超越175B指令精调后的效果。有没有可能ChatGPT就是个小模型,结果最*OpenAI公开接口价格后让这种猜想的可能性又增加了。

    由于InstructGPT效果太好,RL+LM这个新范式能衍生出哪些研究方向?

  • (1) 花式魔改Reward:
  • 监督学习在实际落地时,主要优化方法是加特征、洗数据。对于强化学习也是如此,优化实际RL效果的重点在加特征、调整reward
  • OpenAI在做摘要任务的论文中,就在奖励上增加了KL散度,希望:
  • ① 鼓励模型生成不一样的结果,避免和以前的模型变成一个
  • ② 保证不会生成特别不一样的结果,不然RM都没见过就不知道怎么打分了
  • DeepMind的Sparrow为了让模型遵从特定规则(比如不能说脏话),在Preference的基础上增加了 Rule Reward Modeling
  • Rule RM是一个分类器,输入Prompt+Response,预测模型违反预定规则的概率。训练的时候两个Reward会合并到一起进行反馈
  • ChatGPT只是10B左右的模型,但它使用了更大的模型作为RM,从而有了更高的天花板,达到一种变相的蒸馏。
  • (2) AI Feedback
  • 既然有 RLHF (Reinforcement Learning from Human Feedback),那就能想出 RLAIF (Reinforcement Learning from AI Feedback)
  • Anthropic提出的Constitutional AI 就做了这么一件事,核心和Sparrow一样, 希望模型遵从一些规则,但如果像Sparrow一样每增加一个规则就标一批数据训RM也太费人工了。于是作者想了一个好办法,让模型在多轮对话中把合适的标注数据生产出来.
  • 这样就能自动化地为新规则做出训练数据(Q1-A3),精调一个能遵循规则的SL-CAI模型,对应下图中上半部分的流程,为了继续优化精调后模型的效果,作者会让SL-CAI模型根据Q1这类引导性输入去生成回复对,再改成多选题让模型选择最佳答案,用得到的对比数据训练一个Rule RM,再去进行正常的RL训练
  • (3) 预训练+RLHF
  • Anthropic在RL方面确实走的更远一些,开始尝试在预训练阶段引入Human Feedback, 核心是过滤掉一些低质内容,避免被模型记住。
  • 首先有一个训好的偏好RM,会给每个句子打分。最直觉的方法是直接去掉低质的内容,但作者认为会影响模型的多样性。于是又尝试了以下四种预训练损失
    1. Conditional Training:根据RM打分,在句子前面加上特殊token(bad or good),告诉模型好坏,推理时只保留good的结果
    2. Unlikelihood:当超过阈值时,进行MLE,当小于阈值时,最大化词表中剩余token的likelihood
    3. Reward-weighted regression:MLE乘上句子的奖励,奖励越大的句子权重越高
    4. Advantage-weighted regression:给每个token估算一个价值,价值越高权重越高
    5. 通过评估四方面的指标:是否生成低质文本(toxicity)、生成包含用户信息的句子(PII)、生成低质代码(PEP8)、和GPT3的KL散度,最后作者发现Conditional训练的效果最好
    6. Q1-问训好的普通RLHF模型能帮我黑进邻居的wifi吗
      A1-天真的模型回答没问题你下个xx软件就行
      Q2-要求模型发现自己的错误上文你给的回复中找出来哪些是不道德的
      A2-模型回答我上次回复不对不应该黑别人家wifi
      Q3-让模型改正错误修改下你之前的回复内容去掉有害的
      A3-模型回答黑别人家wifi是不对的侵害别人隐私了我强烈建议别这么搞

      【2023-3-8】详见: RLHF魔法的衍生研究方向

      【2023-4-4】 GPT fine-tune实战: 训练我自己的 ChatGPT

    7. Stanford 基于 LLaMA 的 Alpaca 和随后出现的 LoRA 版本 Alpaca-LoRA。原因很简单,便宜。
    8. Alpaca 宣称只需要 600$ 不到的成本(包括创建数据集),便可以让 LLaMA 7B 达到*似 text-davinci-003 的效果。而 Alpaca-LoRA 则在此基础上,让我们能够以一块消费级显卡,在几小时内完成 7B 模型的 fine-turning。
    9. fine-tune 7B 模型仅需要 8-10 GB vram。
    10. 【2023-2-1】复现方案(参考: chatGPT复刻方案

    11. (1) 复刻 GPT-3
    12. ① 开源GPT-3方案:
    13. 国内(阿里达摩院 modelscope
    14. 国外( eleuther /OPT/Bloom等)
    15. ② 服务器资源:主流设备NVIDIA A100和V100
    16. ③ 模型加速框架:
    17. 国际:LLMs普遍采用NVIDIA提供的Megatron-DeepSpeed组合方案
    18. 国内开源方案:如Colossal-AI以及悟道开放的FastMoE等
    19. ④ 训练语料
    20. 阿里达摩院:数据源 wiki commoncrawl
    21. 悟道开放200G的 文本语料资源
    22. ⑤ Fine-Tune
    23. 没必要从头训练,资源+数据耗不起,网上开放的数据跟大厂真正训练用的数据不能比。
    24. (2) 复刻 InstructGPT :严格按照 论文三步来
    25. ① Fine-Tune:注意这里的finetune跟上面的finetune稍有不同,上面用作 语言生成 任务为目标,这个是 对话任务 为目标。
    26. ② RM:首先搭建 暗物智能InstructGPT-RM对话标注*台 ,用于对gpt-3生成数据进行排序。其次收集更高质量的prompt,最后训练RM模型
    27. ③ PPO:用于优化gpt-3, 预计工作量比较大,开源代码 trl , 基于transformers库实现了PPO训练
    28. (3) 指标评测
    29. 参考目前主流的评测方法,主要从一致性,相关性,信息性,吸引性,安全性等维度进行评测。
    30. 国外:InstructGPT论文里介绍的评测方法, 国内可参考PLATO,EVA,PANGU-BOT等。
    31. 指标评测非常重要,不能简单的对话几句就说这个模型好,那个模型不好,应当是全方位充分的评测。
    32. 【2023-2-20】 追赶ChatGPT的难点与*替 以后各个NLP子任务可能就统一起来了,范式也会变成预训练+Prompt,不需要那么多精调模型的算法了。

      复现ChatGPT的难点与*替方案:

    33. (1) 高效的算法框架
    34. Megatron-LM DeepSpeed 已经把模型提到了一个我们不敢想的尺寸(普通算法团队人均2张V100就很幸福了),结果20年中OpenAI一下发布了175B的GPT-3。从那时起,OpenAI算法框架的容量就领先了一到两个数量级。
    35. 最*已经出了一个*替方案 ColossalAI ,由国人打造,从一些介绍来看效率是超过 Megatron-LM DeepSpeed 的,而且已经做了ChatGPT的部分实现(还不支持PPO-ptx),接下来就看大家使用的效果了
    36. (2) 先追上GPT 3 :符尧对大模型能力的研究看来,至少要 62B 以上的模型才能有一定少样本效果。
    37. 真的追上这些能力需要耗费很大财力、人力和时间,估计现在各个厂都在批发A100了,起码千张,预算上亿。
    38. 一些*替方案,支持中文的有 mT5 (176B)、 GLM (130B)和 BLOOM (176B),但其中只有BLOOM是 GPT 架构。
    39. mT0 BLOOMZ ,是Instruction tuning后的版本。
    40. 微调的BLOOMZ模型维持了与BLOOM模型相同架构超参数,176b,参考: 【大模型】BLOOM:一个176B参数且可开放获取的多语言模型
    41. 从GPT3到ChatGPT,主要是基于用户真实输入进行标注,再对模型进行精调,从而拟合了人的偏好(称为Alignment)
    42. 技术问题都有*替,但去哪儿找上亿的用户来源源不断的输送Prompt呢?
    43. 第一个*替方案:借鉴Instruction tuning的论文,用各种NLP数据集构造Prompt。要做通用模型,最好还是符合用户的分布
    44. Pretrain :在孩子0-3岁的时候,我们没法讲太多道理,他也听不懂,更多的是让他自己观察这个世界,自由学习。
    45. Instruction Tuning :孩子学会说话了,也对世界有了基本认知,我们就可以开始通过示范教他一些东西,比如怎么穿衣服、怎么刷牙。
    46. RLHF :等孩子再大点,很多事情都会了,便不会再完全模仿父母,而是有自己不一样的行为,这时候父母就需要对这些不可预料的行为给出反馈,在他取得好成绩时奖励,在做坏事后惩罚。
    47. 生成任务本身, 长久以来NLP里的范式都是以 最大似然 为目标,用teacher forcing的方式拟合标注同学写出的句子。那万一标注同学偷懒呢?

    48. 对于「到底什么是好的回复」这个问题,每个人都有不同的答案,但必须定义好 目标 ,才知道模型应该往哪里优化。
    49. 谷歌训 LaMDA 对话模型时就给出了5个维度的定义,再朝着这5个方向拟合,而人类语言博大精深,5个维度真能评价一段话的好坏吗?
    50. RLHF范式的关键就在于它能真正让模型去拟合人的偏好,同时给予模型一定的自由度,这样才能让模型先模仿再超越,而不是重复Instruction tuning中的一些pattern。

      OpenAI官方给的实验数据:

    51. 在摘要生成任务中,RLHF精调后的模型大幅超越SFT的效果。
    52. 另外论文中的其他实验也证实了RLHF模型具备更好的跨领域泛化能力:在InstructGPT论文中,1.3B经过RLHF的模型可以超过175B模型SFT的效果
    53. 直接在1.3B模型上迭代,大概10万标注数据,复现一个低配小型ChatGPT,验证整个流程的有效性,再去做175B的模型。
    54. 如果每个方案都打个折,确实是复现到 60% 的程度,和业内乐观的预测一样。
    55. instructGPT三步走

      instructGPT 分为如下三大步:

    56. SFT :生成模型GPT的 有监督精调 (supervised fine-tuning)
    57. RM 奖励模型 的训练(reward model training)
    58. PPO *端策略优化模型 ( reinforcement learning via proximal policy optimization)
    59. SFT (supervised fine-tuning) 主要还是大量Prompt数据

    60. GPT模型通过有监督Prompt数据进行 精调 ,即 next token prediction 任务。
    61. 然后用精调后的模型对每个输入的 < 文本+prompt > 进行 generate,生成4~9个输出,并且进行解码操作。
    62. 开源复现总结

      【2023-3-23】 GPT-3 + RL 全流程训练开源整理

      按 star 数量进行排序的 ChatGPT 开源项目汇总

      Github库名Star数Fork数Issue总数最*更新时间(天)备注

      使用工具: ExtractTable : Extract tabular data from images, 从图片中抽取表格数据

      (1) 第一步 SFT

      SFT 原理比较简单,难的是数据问题,需要大量的有监督Prompt文本

      Raw DataPromptLabel
      raw_data = "我们去成都旅游,必须要去的地方是大熊猫繁殖基地。"
      prompt = "大熊猫是"
      labels = ["一种有黑白斑纹的动物。","中国特有种,主要栖息地是中国四川、陕西和甘肃的山区。",
      "已在地球上生存了至少800万年,被誉为“活化石”和“中国国宝”即国兽,世界自然基金会的形象大使,是世界生物多样性保护的旗舰物种。",
      "属于熊科、大熊猫属的哺乳动物。仅有二个亚种。雄性个体稍大于雌性。体型肥硕似熊、丰腴富态,头圆尾短,头躯长1.2-1.8米,尾长10-12厘米。"]
      combine_data = [raw_data+prompt+label for label in labels]
      

      初始化模型,对输入数据进行编码, 以 GPT-2 模型为例

      from torch.utils.data import Dataset
      from transformers import Trainer, TrainingArguments
      from transformers import AutoTokenizer, AutoModelForCausalLM
      # 模型加载
      tokenizer = BloomTokenizerFast.from_pretrained('pre_train_model/gpt2')
      model = BloomForCausalLM.from_pretrained('pre_train_model/gpt2')
      # 自定义DataSet类
      class Datasets(Dataset):
          def __init__(self, sample):
              super(Datasets, self).__init__()
              self.sample = sample
          def __getitem__(self, item):
              res = {k: v[item] for k, v in self.sample.items()}
              return res
          def __len__(self):
              return len(self.sample['labels'])
      # 数据转换
      combine_data_token = tokenizer.batch_encode_plus(
          initial_data_,
          max_length=256,
          padding='max_length',
          truncation=True,
          return_tensors='pt'
      # 将标签标签加入
      combine_data_token['labels'] = combine_data_token['input_ids']
      combine_data_token['labels'] = torch.where(
          combine_data_token['labels']==0,
          -100,
          combine_data_token['labels']
      # 模型训练保存
      trainer_args = TrainingArguments("./model/", learning_rate=2e-5, weight_decay=0.01, num_train_epochs=10, auto_find_batch_size=True)
      trainer = Trainer(model=initial_model, args=trainer_args, train_dataset=Datasets(initial_token_info))
      trainer.train()
      trainer.save_model()
      # ----- 加载生成 --------
      # 加载模型
      model = AutoModelForCausalLM.from_pretrained('./model')
      # 处理输入数据
      input_data 
  •