ChatGPT  一本正经的胡说八道 那也看看原理吧

news/2024/11/28 9:33:49/

最近,ChatGPT横空出世。这款被马斯克形容为“强大到危险”的AI,不但能够与人聊天互动,还能写文章、改代码。于是,人们纷纷想让AI替自己做些什么,有人通过两分钟的提问便得到了一篇完美的论文,有人希望它能帮自己写情书、完成工作

我觉得Musk担心的应该是‘信息茧房’中的‘思考劫持’

大家可以查一下传播学中的这两个概念

几个测试案例

小学白念了,这是哪家不正经的小学教这个

你把柳传志往哪放...

这.....

总结,就这人工智障,还图灵测试...

ChatGPT基本原理

第一步 收集数据,训练有监督的策略模型

第二步 收集对比数据,训练回报模型

第三步 使用强化学习,增强回报模型优化策略

SFT:生成模型GPT的有监督精调 (supervised fine-tuning)

RM:奖励模型的训练(reward model training)

PPO:近端策略优化模型( reinforcement learning via proximal policy optimization)

找了一堆外包,可以看出人的干预有多重要

补充知识

prompt

Prompting指的是在文本上附加额外的提示(Prompt)信息作为输入,将下游的预测等任务转化为语言模型(Language Model)任务,并将语言模型的预测结果转化为原本下游任务的预测结果

对于传统的Fine-tuning范式,以BERT为例,我们会使用PLM提取[CLS]位置的特征,将其作为句子的特征,并对情感分类任务训练一个分类器,使用特征进行分类

对于Prompting,它的流程分为三步

  1. 在句子上添加Prompt。一般来说,Prompt分为两种形式,分别是完形填空(用于BERT等自编码PLM)与前缀(用于GPT等自回归PLM)

例如  

I love this movie. It is a [MASK] movie. (完形填空模式)

I love this movie. The movie is (前缀模式)

2.根据Prompt的形式,在[MASK]位置或Prompt前缀的后面进行预测单词

3. 根据预先定义的Verbalizer(标签词映射)将单词转化为预测结果,若预测单词’Good’则情感倾向为正向,若预测结果为单词’Bad’则情感倾向为负向

SFT

GPT模型通过有监督的Prompt数据进行精调,其实就是做next token prediction任务。然后用精调后的模型对每个输入的[文本+prompt]进行generate,生成4~9个输出,并且进行解码操作

数据举例

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

RM

RM模型的作用是对生成的文本进行打分排序,让模型生成的结果更加符合人类的日常理解习惯,更加符合人们想要的答案

RM模型主要分为两个部分:训练数据获取、模型训练

在原论文中使用GPT的架构做了一个reward model,这里需要注意的是要将模型的输出映射成维度为1的打分向量,也就是增加一个linear结构

RM模型的主要点还是在于人工参与的训练数据构建部分,将训练好的SFT模型输入Prompt进行生成任务,每个Prompt生成4~9个文本,然后人为的对这些文本进行排序

将每个Prompt生成的文本构建为排序序列的形式进行训练,得到打分模型,以此模型用来评估SFT模型生成的文本是否符合人类的思维习惯

这里尝试两种方法,这两种方法为direct score和rank score:

Direct score:一个是直接对输出的文本进行打分,通过与自定义的label score计算loss,以此来更新模型参数;

Rank score:二是使用排序的方法,对每个Prompt输出的n个句子进行排序作为输入,通过计算排序在前面的句子与排序在后面的句子的差值累加作为最终loss。

Direct score方法

这个方法就是利用Bert模型对标注数据进行编码,用linear层映射到1维,然后利用Sigmoid函数输出每个句子的得分,与人工标记的得分进行loss计算,以此来更新模型参数

Rank score方法

这种方法与前一种方法的区别在于loss函数的设计

首先需要明白的是为什么在InstructGPT中不采用上面的方法,主要的原因在于给生成句子在打分时,不同标注人员的标准是不一样的,而且这个标准是很难进行统一的,这样会导致标注的数据评判标准不一样

即使每个标注人员的理解是一样的,但对于同一条文本给的分数也不一样的,因此在进行标注时需要把这个定量的问题转为一种更为简单的处理方法,采用排序来方法来进行数据标注可以在一定程度上解决这个问题

两种方法区别

明显的看出标注员在使用直接打分(Direct Score)时,会由于主观意识的不同,对同一个文本出现不同的分值;而使用等级排序(Rank Level)来进行数据标注时,可以统一标注结果

Rank Loss

PPO算法

邻近策略优化(Proximal Policy Optimization,PPO)算法的网络结构有两个。PPO算法解决的问题是 离散动作空间和连续动作空间 的强化学习问题,是 on-policy 的强化学习算法。

论文原文《Proximal Policy Optimization Algorithms》

涉及到强化学习的概念太多,就不在这里展开了

Reference

https://www.sohu.com/a/644391012_121124715

https://blog.csdn.net/Ntech2099/article/details/128263611

https://zhuanlan.zhihu.com/p/461825791

https://zhuanlan.zhihu.com/p/609795142


http://www.ppmy.cn/news/30437.html

相关文章

C#开发的OpenRA的游戏主界面怎么样创建3

继续游戏主界面创建的主题, 我们知道游戏的主界面上有很多部件,比如显示文本的标签(LabelWidget), 显示按钮(ButtonWidget)。那么这些部件又是如何创建在主界面上的呢? 其实这些部件是否显示,都是来源于文件yaml,在这里就是文件mainmenu.yaml, 在这个文件里定义了所有…

28个案例问题分析---027---单表的11个Update接口--MyBatis

一:背景介绍 项目开发中。我们使用的是MyBatis,在MyBatis的xml文件里,两个表的更新功能,写了足足11个更新接口,毫无复用的思想 这种方式可以正常的实现功能,但是没有复用,无论是从时间上还是维…

Java Web 实战 03 - 多线程基础(2)

Java Web 实战 03 - 多线程基础篇 2二 . Thread类常见方法2.1 Thread 的常见构造方法2.2 Thread 的几个常见属性getId()getName()getState()getPriority()isDaemon()案例 : 实现 getId()、getName()、 getState()、getPriority()、isDaemon()、isAlive()2.3 启动一个线程-start…

Qt音视频开发20-vlc内核动态保存录像文件(不需要重新编译源码)

一、前言 在vlc默认提供的保存文件方式中,通过打开的时候传入指定的参数来保存文件,直到关闭播放生成文件,这种方式简单暴力,但是不适用大部分的场景,大部分时候需要的是提供开始录制和停止录制的功能,也就…

JavaScript RegExp 正则对象

文章目录JavaScript RegExp 正则对象RegExp 对象修饰符test()exec()方括号元字符量词RegExp 对象方法支持正则表达式的 String 对象的方法JavaScript RegExp 正则对象 RegExp:是正则表达式(regular expression)的简写。 RegExp 对象 正则表…

【精品】SpringBoot中基于拦截器实现登录验证功能

拦截器简介 拦截器是属于springmvc体系的,只能拦截controller的请求。拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。 Interceptor 作用 日志记录:记录请求信息的日志&…

浏览器主页被hao123劫持的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

基于jdk8的HashMap源码解析

hashMap常见面试题总览 为什么重写Equals还要重写HashCode方法?HashMap如何避免内存泄漏问题?HashMap1.7底层是如何实现的?HashMapKey为null存放在什么位置?HashMap如何解决Hash冲突问题?HashMap底层采用单链表还是双…