是共生还是毁灭,ChatGPT启示录
2022年11月,OpenAI推出人工智能聊天原型ChatGPT,吸引了全世界的关注,人工智能再一次回到人类的话题中心,《纽约时报》甚至称其为“有史以来向公众发布的最好的人工智能聊天机器人”。ChatGPT在发布后OpenAI估值已涨至290亿美元,上线两个月后用户数量达到1亿。
ChatGPT能够根据用户的文本输入,产生相应的智能回答。这个回答可以是简短的词语,也可以是长篇大论。其中GPT是生成型预训练变换模型(Generative Pre-trained Transformer)的缩写。ChatGPT是一种基于变压器的模型,利用上下文信息来优化提高语义理解能力。ChatGPT能够进行深度语义分析,并生成高质量的言语交互;具备语言翻译功能,可以在人机对话过程中实现简单的翻译、自然语言理解和基于深度学习的文本分析等功能;同时还具备文本和语音的会话处理能力,可以为服务机器人和虚拟助手提供服务。这一强大的NLP模型为未来的自然语言处理系统树立了标准,在一定程度上证明了从前人们认为不会被AI取代的知识型工作实际上有可能会被取代。
InstructGPT
图1 OpenAI官网截图
从官网介绍可以看到,ChatGPT与InstructGPT是同源的模型,也就是说透过InstructGPT,我们能对ChatGPT有个大致的了解。
InstructGPT是基于GPT-3模型训练出来的。OpenAI 在2 至3 年前推出了GPT-3 模型,比起前两代模型,GPT-3用以训练模型的资料量大幅增加,用于训练的模型参数已达1750 亿。但相较于InstructGPT,GPT3的回答简短,回复过于通俗毫无亮点。而InstructGPT则显得“侃侃而谈”,这是因为GPT3只是个语言模型,它被用来预测下一个单词,丝毫没有考虑用户想要的答案,而InstuctGPT则进一步利用在GPT-3的庞大数据中学到的知识和能力进行进一步深化工作。
InstructGPT(which is trained to follow an instruction in a prompt and provide a detailed response)顾名思义就是指令式的GPT。InstructGPT通过遵循数据中的指令进行训练模型,从而提供详细的响应文本。InstructGPT是OpenAI在今年3月在文献 《Training language models to follow instructions with human feedback》[1]中提出的,其整体工作原理和下一节要详细介绍的ChatGPT工作原理基本相同,都是三步走的战略:收集反馈数据 、训练奖励模型 、PPO强化学习。但是在数据收集、基座模型(GPT3 vs GPT 3.5)以及初始化PPO模型方面ChatGPT要更为强大。
透过InstructGPT分析ChatGPT
ChatGPT比其前身 GPT-3 有显著的提升,比起同源的InstructGPT也有着独到的优势,甚至可以说ChatGPT是站在InstructGPT及GPT-3的肩膀上完成的一项伟大的工作。与InstructGPT类似,ChatGPT 能以不同的方式生成文本,并使用监督学习和强化学习的组合来进行迭代优化,但是ChatGPT 在泛用性、准确性、细节性及连贯性等方面比InstructGPT等大数据模型更强,其关键优势来源于强大的基座大模型能力(InstructGPT)、高质量的真实数据(干净且丰富)、强化学习(PPO算法)三个部分。
要说最值得称道的就是强化学习模块。强化学习模型OpenAI 使用了人类反馈强化学习(RLHF)的训练方法,在训练中除了自身算法训练外,还大量使用了人类反馈,提高了算法的人性化。因此ChatGPT的对话能力、文本生成能力、对不同语言表述的理解均很出色。ChatGPT可以回答各类问题,在多轮对话下的历史记忆能力和篇幅扩展方面均比InstructGPT更强。与InstructGPT等大模型相比,ChatGPT回答更为广泛全面,可以通过多角度对提出的问题进行回答及后续追述,相较以往的大模型,知识被“挖掘”得更充分。
在机器学习领域,我们评价模型的能力一般是看对应模型执行特定任务或一组任务的能力以及通过它能够优化其目标函数的程度来评估。例如,用来模拟评估秋田犬培育情况的模型,如果这个模型能够较为准确地预测秋田犬随时间、天气等自然因素的成长变化,则认为该模型具有的分析能力处于一个较高阶段。但在实际应用中,这些模型的训练方式与期望使用它们的方式之间存在明显的差异。尽管按照逻辑,机器计算词序列的统计分布才是建模最高效的选择,但这种方式对于大部分人来说是无法适应的,人类更愿意通过选择最适合特定情境的文本来生成语言,并在此基础上增加部分背景知识和常识来丰富语言文本,但是这对于机器来说很难实现。
在训练语言模型中,Next-token-prediction 和 masked-language-modeling 是核心技术。Next-token-prediction会给模型一个词序作为输入,并且预测承接这个词的下一个词序,例如我输入“I want to work at”,那么下一个承接的词序可能会是“woodhouse”或者其他相关度更低的词汇,因为它的判断逻辑来自于前面上下文中高频率出现的字母,然后根据这些字母在词库里按照一定逻辑寻找合适的词。masked-language-modeling 是 Next-token-prediction 的变体,它能自动识别语句,并且将输入语句中的一些词替换为特殊 token,例如“I [want] to work at home”,然后模型将会按照一定逻辑寻找合适的词插入到 want位置。例如hope等词汇。这些技术将让模型学习语言的统计结构,例如常见的语气和语法。这将有助于模型生成更自然、更流畅的文本,是每个语言模型预训练阶段的重要步骤。然而由于技术不够完善,无法区分重要错误和不重要错误,一定程度上可能导致出现一些问题。例如“I [want] to work at home”,可能会被填入hate等完全和人类所希望产生的语境相反的词汇。但是ChatGPT却很大地改善了这一问题,想知道ChatGPT是怎么实现的,就要分析它的工作原理。
图2 ChatGPT工作原理[1]
由于目前OpenAI尚未公布ChatGPT的详细技术原理,我们只能根据现有透露的信息结合以及和它同源的InstructGPT的原理来进行分析。
首先使用有监督学习方式,基于GPT3.5微调训练一个初始模型,训练数据为2w~3w量级(此处为推测量级,根据同源模型InstructGPT的训练数据量级估算)。从训练数据中抽取部分数据(例如在数据库中随机抽取一条数据:”我想在绿盟从事安全工作”),在这些数据的基础上,进行进一步精细化的人工干预,干预方式通常为某个特定人类定下这个数据具体想要模型训练的方向(如我想让我训练的数据模型的回答在收到“我想在绿盟从事安全工作”这类问题时,模型的回答会偏向“从事逆向研究方向”),就像给数据打上一个小小的标签,告诉下一步模型需要将这个数据具体训练成什么样,然后通过由人类模拟人和机器进行对话及通过机器自身生成的一些建议来辅助人类撰写回复(这一步就和传统的训练模型类似,通过人类预先设定好的一些回复以及靠模型自身从网络收集的数据来调试初始的数据模型,从而使得模型和人类的对话兼备准确性和类人性),以此提高工作效率和准确度,如此多轮循环后得到含人工精确标注的对话数据。在有监督的训练后将会得到一个初始的模型,该模型即作为指令式GPT的冷启动模型(新模型对GPT来说没有过往数据积累,需要通过一定的优化及迭代来收集基础数据。这个从0到1积累基础数据的过程就是冷启动。其效果的好坏直接关系到整个模型后续的使用效果及优化策略,而数据的积累是做冷启动优化的动力来源)。虽然精标的训练数据的数据量不大,但由于经过人工监督训练,数据的准确性和可用性非常高。
其次收集相同上下文数据,并根据回复质量进行排序:即随机抽取一大批数据,使用第一阶段的冷启动模型,产生多个不同回答(A 我想从事安保工作,B 钝角,C 我想从事安全研究工作,D 我想从事安全研究下的具体分支),结果出来后,标注者将对这些输出结果进行打分并排序(D>C>A=B),这些标注数据用来训练奖励模型,使其预测出标注者更喜欢哪个输出,机器在"比较中"学习可以给出相对精确的奖励值。这一步就是为什么ChatGPT能解决其他大型数据模型及相关技术无法解决的区分问题,可以说ChatGPT让训练模型从传统的命令驱动转向了意图驱动,也意味着之后的模型训练数据不需过多,基本维持在万量级即可。因为训练模型不再像过往训练模型一样需要在训练模型前先穷举并回复所有的问题才能在上层应用为用户提供较为准确的回复,因为所有的问题回答模型之前已经训练过了。ChatGPT只需要告诉模型特定人类的喜好,从而根据特定人类具体的喜好来强化模型意图驱动的能力即可,此外如果需要泛用的模型则需要通过不同的人多轮训练奖励模型,从而减少模型回答的主观性,符合大多数人类的认知。
最后使用PPO强化学习策略(2017年OpenAI提出的一种新型的强化学习策略优化算法,它提出了新的目标函数,可以在多个训练步骤实现小批量的更新,其实现简单、易于理解、性能稳定、能同时处理离散/连续动作空间问题、利于大规模训练)来微调第一阶段的模型。通过随机抽取新的数据,然后用第二步产生的奖励模型给数据产生的回答自动打分。这个分数即回答的整体奖励值,然后将此奖励值回传给标注者,标注者根据情况进行沿用或者奖励模型调整,由此产生的策略梯度可以更新PPO模型参数。并以此反复,这就是标准的强化学习(reinforcement learning)的训练框架了。
以上三个步骤即ChatGPT的训练过程,合称为人类反馈强化学习(RLHF)。通俗来讲,整个ChatGPT的强化学习算法可以简单理解为通过不断在人工干预下由模型调整训练参数,使模型得到令人满意的奖励值,令人满意的奖励值意味着此时训练出来的回复最符合人类的选择取向。
ChatGPT对网络安全的影响
从ChatGPT发布到现在,大量安全圈相关从业者对ChatGPT嗤之以鼻,认为ChatGPT不过就是个简单的八股文编译器,对安全行业不会产生任何助益,也不会造成任何威胁,但是随着Chatgpt展现出改变安全行业未来格局的潜力后,越来越多的安全从业者开始重视并研究Chatgpt。
Chatgpt的爆火使得AI技术再一次登上舞台,但是在无人关注的幕后,AI对网络安全的影响从未停止扩散。
近些年由于AI自动化和智能化的能力,黑客攻击速度的攻击速度大幅提升,像平时使用的智能端口扫描等工具,其实就是低等AI的利用,这些AI通过简单的判断逻辑帮助黑客快速的搜集目标的准确信息或同时攻击多个目标。举个例子,现在黑客会使用AI来识别网站验证码(无论滑动拼格或者识图填写),从而绕过网站安全防护。
安全机构Check Point Research公司在今年1月发布了一份调查报告,主要调查网络犯罪分子如何恶意使用ChatGPT。调查发现,犯罪论坛上的威胁参与者创建了一封“令人信服的鱼叉式网络钓鱼邮件”,并且使用ChatGPT创建了一个恶意Java脚本文件。为什么目前安全圈从业者对于ChatGPT表示不看好,根因就是ChatGPT代码编写能力还不是很完善且输出质量、稳定性不高,导致如果目前使用ChatGPT编写恶意代码,还需要由有一定技术的人员进行校对及完善工作,说白了目前ChatGPT就像一枚研发不完全的洲际巡航导弹,即使侥幸能发射,如果不由专家来操控,导弹根本不能打击到准确的目标,造成威胁的概率不大。但是随着技术的完善,未来ChatGPT将有可能可以稳定编写恶意代码,届时网络犯罪成本将急剧下降,可能会导致不懂任何恶意代码编写的网络犯罪分子激增,到时候洲际巡航导弹将变成小巧精致的手枪,使用者无论是谁,只要会瞄准并扣动扳机就能打到人。
ChatGPT代码编写能力相对初级,对于实现开发安全工具这类对于网络安全最直接的收益目前还差得远,但是对于安全检测及安全分析方面的应用已经开始崭露头角,如编写程序检测目标主机或URL是否存在漏洞、编写程序扫描主机目录是否存在恶意文件、逆向分析机器语言shellcode、解释反编译代码、代码安全审计、安全告警评估等,都已经有专家测试并验证过,虽然细化程度不高,但确实可行。这就意味着随着ChatGPT能力的成熟,目前困扰着社会安全人才严重短缺的问题将得到缓解,一些初级的安服人员将有可能依靠ChatGPT分析他们在警报和检测中看到的内容,然后要求 ChatGPT 给出准确的威胁分析报告,并快速启动安全事件分类流程,大幅降低了安全服务准入门槛的同时也大幅提高了安全分析的工作效率。此外在各式的安全事件分析汇总到 ChatGPT 后, ChatGPT 将有潜力成为世界上最大的威胁情报平台。
随着ChatGPT的进步,未来某些日子我们的网络安全防护可能变得更智能、反应更快,可以防护以前注意不到或防不住的攻击行为,同时也可以通过AI技术自动生成防护规则,大幅缩短攻击响应时间。
ChatGPT就像一把双刃剑,一方面在人机交互方面具有高度的灵活性和流动性,几乎任何话题都可以得到令人满意的回复及更进一步的探讨研究。另一方面ChatGPT 的响应可能包含错误(例如可以发明不存在的词汇或者给出错误的信息),即使ChatGPT 在这方面比它的前辈模型好了太多。
ChatGPT是一个令人印象深刻的人工智能工具,它就像火药,在善意的人手里就是过年时夜空中绽放的烟花,在心存歹念的人手里就是射穿他人的子弹。在安全方面ChatGPT具有无限可能,当然在恶意安全攻击方面的潜力也深不见底,归根结底这并不是技术本身的固有风险,而是由它的使用者决定的,相较于被动存在的风险,ChatGPT的广泛应用可能性及未来的发展性,才是我们应该重点关注的。
