利用LLM对齐:让人工智能更易于使用

通过LLM对齐:使人工智能更加易于使用

编辑注:Sinan Ozdemir将于10月30日至11月2日参加ODSC West的演讲。一定要去听听他的演讲,“使用强化学习从反馈中对齐开源LLM。”

回顾2020年,世界第一次见识到OpenAI的GPT-3,对许多人来说,这是人工智能领域的奇迹。然而,直到两年后的2022年,OpenAI发布了GPT-3的指令对齐版本,即“InstructGPT”,其全部潜力才受到关注,世界才真正开始关注。这种创新不仅是AI对齐的技术飞跃,也展示了强化学习在使AI更容易接触的过程中的力量。

对齐我们的期望

广义上,对齐是使AI系统行为符合人类期望的过程。对齐不仅仅是训练AI遵循指令,还需要设计一个系统,将已经强大的AI模型塑造成对技术倾向的用户和需要帮助策划生日派对的人都更易用和有益的东西。正是对齐的这一方面使得大型语言模型(LLMs)的魅力被大众所共享,让更广泛的受众能够从中获得价值。

如果对齐是LLMs可用性的核心,那么是什么让这个核心保持运转?这就是复杂的强化学习(RL)的作用。虽然对于一些人来说,“对齐”这个术语可能与强化学习同义,但其背后的内容远不止这些。在下一个令牌预测中捕捉人类情绪、伦理或幽默的多维度特点是一项巨大而且可能无法实现的任务。你如何有效地将“中立”或“道德行为”编程到损失函数中?可以说,你无法做到这一点。这就是强化学习的优点,它以一种动态的方式对这些复杂的微妙之处进行建模,而不是严格编码。

RLHF代表强化学习来自人类反馈,这是OpenAI最初用于对齐他们的InstructGPT模型的技术,经常在AI爱好者中被讨论作为LLMs对齐的主要方法,但它仅仅是对齐的众多工具之一。RLHF的核心原则是获取高质量的人类反馈,并用它来给LLMs关于任务表现的反馈,希望在循环结束时让AI以一种更用户友好的方式进行交流。

然而,在我们与LLMs的日常工作中,我们通常不需要AI对所有问题都有答案,我们需要它解决与我们/我们的业务/我们的项目相关的任务。在我们与RL的旅程中,我们将探索使用其他形式的反馈机制的替代方法,这些方法不依赖于人类的偏好。

案例研究-对齐FLAN-T5以制作更中立的摘要

我们来看一个例子,使用Hugging Face的两个分类器来增强FLAN-T5模型的能力,使其能够撰写新闻文章摘要,既语法上完善,又始终保持中立风格。

下面的代码将定义一个这样的反馈奖励,使用一个预先微调的情感分类器来获取中立类别的logits,以激励FLAN-T5以中立的语调进行言论,并对其进行惩罚:

sentiment_pipeline = pipeline(  'text-classification',   'cardiffnlp/twitter-roberta-base-sentiment')def get_neutral_scores(texts):  scores = []  # function_to_apply='none' returns logits which can be negative  results = sentiment_pipeline(texts, function_to_apply='none', top_k=None)  for result in results:    for label in result:      if label['label'] == 'LABEL_1': # logit for neutral class        scores.append(label['score'])    return scores>> get_neutral_scores(['hello', 'I love you!', 'I hate you']) >> [0.85, -0.75, -0.57]

我们可以使用这个分类器和另一个分类器来对一段文字的语法正确性进行分类,以调整我们的FLAN-T5模型生成我们想要的摘要。

来自反馈循环学习的过程大致如下:

  1. 给FLAN-T5提供一批新闻文章用于摘要(取自https://huggingface.co/datasets/argilla/news-summary,仅使用原始文章)
  2. 根据以下奖励的加权和分配奖励:
    1. 来自textattack/roberta-base-CoLA的CoLA模型(判断语法正确性)
    2. 来自cardiffnlp/twitter-roberta-base-sentiment 的情感模型(判断中立性)
  3. 使用奖励来更新FLAN-T5模型,使用TRL库,并考虑更新后的模型与原始参数的偏差程度
  4. 反复进行这个过程

以下是我们将在研讨会上建立的训练循环的一个示例:

for epoch in tqdm(range(2)):  for batch in tqdm(ppo_trainer.dataloader):    #### 在摘要标记之前添加    game_data["query"] = ['summarize: ' + b for b in batch["text"]]    #### 从参考和当前的flan-t5获取响应    input_tensors = [_.squeeze() for _ in batch["input_ids"]]    # ....    for query in input_tensors:      response = ppo_trainer.generate(query.squeeze(), **generation_kwargs)      response_tensors.append(response.squeeze())            #### 奖励系统    game_data["response"] = [flan_t5_tokenizer.decode(...)    game_data['cola_scores'] = get_cola_scores(    game_data["clean_response"])    game_data['neutral_scores'] = get_neutral_scores(    game_data["clean_response"])    #### 运行PPO训练并记录统计信息    stats = ppo_trainer.step(input_tensors, response_tensors, rewards)    stats['env/reward'] = np.mean([r.cpu().numpy() for r in rewards])    ppo_trainer.log_stats(stats, game_data, rewards)

为了节省空间,我省略了这个循环的几行代码,但你当然可以参加我的研讨会,看到完整的循环!

结果

经过几个训练周期,我们的FLAN-T5开始显示出更加与目标更加语法正确和中立的摘要对齐的迹象。这里是使用数据集中的验证数据生成的不同摘要的样本:

FLAN-T5在RL之前和之后的样本。我们可以看到,经过RL微调的模型使用了“宣布”之类的词汇,而不是“抛弃”之类的词汇。

在整个验证集上运行我们的两个模型(未对齐的基础FLAN-T5模型和对齐后的版本),我们可以看到从我们的CoLA模型和情感模型中获得了一些增加的奖励(尽管是微小的)!

该模型从我们的系统中获得了更多的奖励,并且经过检查,我们可以看到其摘要生成发生了微妙的变化。然而,其核心摘要能力与基础模型基本保持一致。

结论

对齐不仅仅是收集数据和让LLM回答任何问题的工具或方法论。它还涉及理解我们从LLM中真正想要的东西。对齐的目标是使LLM的输出与人类的感受产生共鸣,使人工智能不仅仅是工程师的工具,而是所有人的伴侣。无论你是人工智能爱好者还是希望涉足这个领域的人,这里都有适合你的东西。一起参加今年的ODSC,我们一起探索LLM对齐的领域!

关于作者/ODSC West演讲者:

Sinan Ozdemir 是一位数学家、数据科学家、NLP专家、讲师和成就斐然的作家。他目前以LoopGenius的创始人和首席技术官的身份运用我丰富的知识和经验在人工智能和大型语言模型(LLM)方面,改变创业者和初创公司市场产品和服务的方式。

同时,他为创新投资公司Tola Capital提供人工智能和大型语言模型的咨询服务。他还曾担任Addison Wesley和Pearson的人工智能作者,撰写全面的资源,帮助专业人士在人工智能和大型语言模型这一复杂领域中进行导航。

之前,他在Directly担任数据科学总监,他的工作对公司的战略方向产生了重大影响。作为福布斯科技委员会的正式成员,他从2017年到2021年分享了自己关于人工智能、机器学习、NLP和新兴技术相关的企业流程的见解。