对GPT-4o技术实现的猜测

对GPT-4o技术实现的猜测

对GPT-4o技术实现的猜测

原创 ADaM实验室  2024年06月04日 12:00 北京

对GPT-4o技术实现的猜测

GPT-4o主要展现了三方面的能力:图文音多模态理解和合成、情绪和副语言理解和表达、以及流畅的对话轮次切换。OpenAI的演示通过夸张的情绪表达和故意打断,重点演示了后两种主要和语音相关的能力。这两种能力都是谷歌Astra项目中未能展示的。

图文音多模态理解和合成即多模态输入、多模态输出:GPT-4o可以接受图像(视频通过提取图像帧来理解)、语音、文本模态的输入,输出也是图像、语音和文本模态。视频生成能力目前没有集成。

相比机械地朗读文本内容,GPT-4o带来的自然口语化体验很大程度上归功于情绪和副语言的理解和表达能力。聆听急促呼吸和面部表情识别的例子展现了情绪理解能力,用不同声音朗读故事的例子展现了情绪生成能力。副语言指的是不包含具体内容语义的信息,包括体现说话者状态的非语言性发声(如笑声、叹气),以及不含内容语义的语言发声(如填充词“嗯”、“啊哈”,和反馈词“对”、“明白了”)。不含内容语义的语言发声在之前的语音版ChatGPT中就有了,这次GPT-4o展示了全新的非语言性发声能力。一个例子是在要求它讲一个关于机器人和爱的故事后,发出的”Oh~”的感叹。另一个例子是可汗在提出帮助辅导解答数学题的请求后,发出的简短的略带不屑的”Tsk~”声。

流畅的对话轮次切换包括低延时的响应、允许人类打断、以及非语言性发声的重叠(比如人类说话时模型会发出”Hmm”、”Uh-huh”等表示倾听状态的回应声)。其中后两个能力改变了之前一轮问题、一轮回答的固定模式,使对话更像人和人之间的自然交流。

1. 图文音多模态理解和合成

同时实现多模态理解和生成目前主要有三种结构:工具式、微调式、从头预训练式。

工具式采用流水钱的方式,先通过独立的识别系统将图像和语音转化为文本,然后调用对话系统生成文本回复,最后将文本回复通过合成系统转化为图像和语音输出。之前的对话版ChatGPT采用的是这种方式。这种方式有三个缺点:响应速度慢、错误累积、以及丢失信息(特别是语音模态中无法用文本语义表示的部分)。

OpenAI在主页上明确说GPT-4o是一种端到端的多模态模型。端到端多模态模型通常包含多模态编码、生成模型、多模态解码三个模块。为了借助GPT-4语言模型的能力,GPT-4o选择的生成模型应该是自回归的方式。而Sora采用了扩散生成的方式,这部分解释了为何GPT-4o没有集成视频生成功能。下面围绕自回归式的多模态模型进行分析。

基于微调的自回归多模态模型基于已有的语言模型,通过微调来对齐其他模态。主要包括模态对齐和指令微调两步,有些方法可能在模态对齐之前重新训练多模态编码器和解码器。模态对齐的数据集一般是文本和另一种模态数据配对的形式,指令微调需要面向不同任务设计包含多种模态的对话数据,相关数据集整理可参考最近的综述[6]。

根据模态对齐的不同实现方式,基于微调的方法又可以分为对齐映射和词表拓展两类。

NExT-GPT[

对齐映射的代表模型是NExT-GPT[1],在多模态编码器之后和解码器之前分别训练映射层,将不同模态token与文本模态对齐。这种方法需要将其他模态显式转换到文本模态,在处理语音理解和生成时可能会丢失一部分副语言信息。

www.zeeklog.com  - 对GPT-4o技术实现的猜测

AnyGPT

词表拓展的代表模型是AnyGPT[2],将其他模态token当成新的语言token加入语言模型词表,并对应拓展语言模型的embedding层和prediction层。这种方法不需要先转换到语言空间,理论上可以保留尽可能多的各模态信息。

www.zeeklog.com  - 对GPT-4o技术实现的猜测

AnyGPT[2]

基于从头预训练的自回归多模态模型将不同模态数据编码为多模态token,然后通过自回归的方式统一进行预训练,在生成多模态token后再通过解码器获得不同模态数据输出。代表模型是VideoPoet[3]和Unified-IO 2 [4]。这种模型理论上有机会学到不同模态之间更底层的关联模式,并可以协同提升不同模态的能力。不过,目前实验结果显示,这些开源的多模态模型在能力上相比单模态模型都有所下降。

www.zeeklog.com  - 对GPT-4o技术实现的猜测

Unified-IO 2 [4]

OpenAI可能采用的是介于微调和从头预训练之间的方式,在GPT-4训练的中间状态基础上加入多模态,这样既可以利用已有的语言模型能力,又同时保证了与其他模态的深度融合。注意到,GPT-4o相比GPT-4-turbo,在语言和视觉能力上都有明显的提升。除了工程技巧和数据上的优势,不排除GPT-4o采用MoE框架的可能,将不同模态的专家模型进行组合[5]。而且,MoE也为结合自回归和扩散两种生成结构提供了可能,比如语言和语音模态选择自回归生成,图像和视频模态选择扩散生成。

www.zeeklog.com  - 对GPT-4o技术实现的猜测

Uni-MoE [5]

2. 情绪和副语言理解和表达

端到端的结构尽可能保留了不同模态的信息,使准确的情绪理解和表达成为可能。情绪可以较好地通过语言模态来表达。有一些商业或开源的工具可以实现从对话中识别情绪(如emotion2vec)和融合情绪的语音合成(如Azure TTS)。基于自回归多模态编解码的结构,对话中的情绪理解和表达也已经有了较好的解决方案[7]。在端到端模型中,自回归生成输入和输出的情绪可以都是token编码,再结合视觉信息可以进一步提升多模态情绪理解的准确性。

关于副语言的理解和表达,首先需要强大的语音编码器和解码器来识别和合成这些语音,OpenAI可能对Whisper和Voice Engine进行了重要升级。通过编码器将副语言转换为特殊token后,可以和普通token一样学习对话中副语言和语义内容之间的关联模式。相比现有研究中10万小时级别的语音规模,GPT-4o的训练数据可能有几个数量级的提升。相信语音建模的scaling law可以让它学到更丰富的语音模式和副语言表达。

3. 流畅的对话轮次切换

低延时的响应不仅依赖推理速度的提升,还需要快速判断人类何时结束提问,即模型要决定“何时开始说”。目前实际对话系统的主要做法是设置一定的时间间隔,比如在人类停顿1s之后开始输出回答。简单解决思路是设计一个很快的轮次预测算法来判断人类是否结束提问[8],这需要在训练对话语料中加入轮次的标注。

当判断人类结束提问后,系统对问题进行编码、自回归生成和解码,然后返回回答。为了进一步减少响应延时,可以在人类提问时同步进行自回归生成,在判断用户结束提问后,对之前生成的内容进行修正,然后一起解码输出。这也符合人类对话的方式:在对方说话时,我们会同步思考怎么回复,等对方说完后,再进行修正并做出回答。

另一种可能是,OpenAI通过对对话语音进行说话人识别,获得了对话双方的不同声道数据。语音的低信息密度让同时建模双声道的生成成为可能。在这种情况下,可以将轮次切换也作为一种特殊token,让模型在自回归生成的过程中自动判断何时开始说。对双声道语音的建模也有助于副语言token的准确预测[9]。

“允许人类打断”相对好理解。在输出说的同时监听如果有人类输入就中断输出,这一点之前的语音版ChatGPT中已经实现了。从这个角度看,其实对人类结束提问的判断错了也没关系。模型提前开始回答虽然打断了人类的提问,但当人类继续说时模型就会终止输出。这也模拟了真实人类对话的模式。另外,可以考虑将轮次预测算法的阈值设置成可调整的参数,用来控制是模型是倾听型的还是表达型。

“非语言性发声的重叠”的实现,可能需要对双声道语音建模,并采用同步自回归生成的方式。模型一边监听人类声道,一边基于多模态上下文生成回复,当生成了非语言性发声时可以直接解码输出,不需要等待人类结束提问。这种保留独立的说的声道的方式,也保证了被人类打断后再次回答时与之前输出的一致性。

www.zeeklog.com  - 对GPT-4o技术实现的猜测

简单来说,GPT-4o展现的三方面能力可能分别来自端到端的自回归生成模型、强大的多模态编码器和解码器、以及可以同时听和说的双声道建模。当然,除了模型结构和算法设计,还涉及了精细的预训练和微调任务设计、大量丰富的数据标注、以及多种模型训练和部署技巧。

从算法、数据、产品三个角度来看,图文音多模态理解和生成目前已有较成熟的算法研究和数据积累,但没有很好地集成到产品中。在情绪和副语言理解和表达方面,虽然已有较为成功的算法方案,但可用的数据规模还不足以训练出达到实用效果的模型。而在流畅的对话轮次切换方面,相关算法探索还比较初步,没有应用到人机对话系统的研究中。OpenAI这次虽然没有带来GPT-5级别的基础能力的提升,但从应用的角度,GPT-4o展现的三方面能力同时实现了从算法、数据到产品的进步,让多模态理解和生成的很多方面从非共识变成共识,相信会极大推动相关技术的发展。

GPT-4o的发布同时提升了人们对多模态交互界面的想象和期待。在同等能力模型的规模不断缩小的同时,端上芯片的算力也在持续提升,这使得云端协同的终端智能解决方案成为可能。现有的有屏硬件终端,如手机、PC、新能源汽车,将自然成为具备多模态交互界面的智能助理的载体。谷歌开发者大会上展示的Astra在谷歌眼镜上的应用,也预示着眼镜、耳机、手表等可穿戴设备可能迎来新的发展契机。

从应用场景看,除了智能助理,多模态交互界面将对教育、医疗等领域产生深远影响。目前功能单一的情感陪伴类应用也可以拓展到更广泛的心理咨询、儿童陪伴和社交互动等场景。

自然的多模态交互还将拓展视频娱乐和交流的形式。从个人数码设备普及,到互联网,再到移动互联网,我们对视频的体验经历了拍摄、传播(如YouTube)和编辑(如抖音)的变化。智能时代的视频生成将带我们进入一个人人可以生成视频、短剧,甚至电影的新时代。结合多模态交互和视频/3D生成,观众可以成为故事的参与者和创作者。想象一下,你可以进入一部电影,与电影中的角色和场景互动,并且能够影响电影的剧情发展方向。Sam Altman说,“电影将会变成电子游戏,而电子游戏将会变成难以想象的好东西”。

参考文献:

[1] NExT-GPT: Any-to-Any Multimodal LLM.

[2] AnyGPT: Unified Multimodal LLM with Discrete Sequence Modeling.

[3] VideoPoet: A Large Language Model for Zero-Shot Video Generation

[4] Unified-IO 2: Scaling Autoregressive Multimodal Models with Vision, Language, Audio, and Action.

[5] Uni-MoE: Scaling Unified Multimodal LLMs with Mixture of Experts.

[6] LLMs Meet Multimodal Generation and Editing: A Survey

[7] Advancing Large Language Models to Capture Varied Speaking Styles and Respond Properly in Spoken Conversations

[8] Response Timing Estimation for Spoken Dialog Systems Based on Syntactic Completeness Prediction

[9] Towards human-like spoken dialogue generation between ai agents from written dialogue

Read more

基本的编程概念 ——算法(Algorithm)详解

基本的编程概念 ——算法(Algorithm)详解

基本的编程概念 ——算法(Algorithm)详解 算法是编程和计算机科学中的一个核心概念,它定义了解决特定问题的一系列步骤。以下是对算法的详细解释: 定义 * 算法:是解决特定问题的明确和有限的步骤集合,这些步骤遵循一定的顺序,以实现特定的计算任务。 特性 1. 输入:一个算法有0个或多个输入。 2. 输出:一个算法至少产生一个输出。 3. 明确性:算法的每个步骤都必须清晰、明确,没有歧义。 4. 有限性:算法必须在执行有限步骤后终止。 5. 可行性:算法描述的操作必须可以通过已经实现的基本运算执行。 类型 * 排序算法:如快速排序、归并排序,用于将一系列元素按特定顺序排列。 * 搜索算法:如二分搜索、线性搜索,用于在数据结构中查找特定元素。 * 图算法:如Dijkstra算法、A*搜索算法,用于在图结构中找到路径或解决问题。 * 动态规划算法:通过将复杂问题分解为更简单的子问题来解决优化问题。 * 递归算法:通过函数自己调用自己来解决问题。 复杂度 * 时间复杂度:

By Ne0inhk
基本的编程概念 ——逻辑(Logic)详解

基本的编程概念 ——逻辑(Logic)详解

基本的编程概念 ——逻辑(Logic)详解 在编程中,逻辑是指在代码中实现决策和控制流程的规则和原则。以下是对编程中逻辑的详细解释: 定义 * 逻辑:是指导计算机执行特定任务的一系列指令和决策规则。它涉及如何根据条件和数据来控制程序的执行流程。 重要性 * 控制流程:逻辑是控制程序流程的基础,决定了程序如何响应不同的输入和条件。 * 决策制定:逻辑允许程序根据数据和条件做出决策,执行不同的操作。 逻辑结构 * 顺序结构:代码按照编写的顺序执行,没有跳转或分支。 * 选择结构:基于条件选择执行不同的代码块。常见的选择结构包括: * if 语句:根据条件执行不同的代码。 * switch 语句:根据表达式的值选择多个选项中的一个执行。 * 循环结构:重复执行一段代码直到满足特定条件。常见的循环结构包括: * for 循环:已知迭代次数的循环。 * while 循环:基于条件的循环。 * do-while 循环:至少执行一次的循环,然后检查条件。 逻辑运算符 * 比较运算符:如 ==(等于)、!=(不等于)、>

By Ne0inhk
基本的编程概念 ——递归(Recursion)详解

基本的编程概念 ——递归(Recursion)详解

基本的编程概念 ——递归(Recursion)详解 * 递归(Recursion)详解 —— 基本的编程概念 递归是编程中常用的一种强大方法,它允许一个函数直接或间接地调用自身。递归常用于描述和实现一系列复杂的思想和算法,这些算法通过不断将问题分解为更小、更易解决的子问题来逐步逼近最终答案。以下是关于递归的详细解析和要点: 1. 递归定义 递归函数是一种特殊的函数,它在其执行过程中会调用自身。 2. 基本形式 递归函数通常包含两个核心部分: * 基本情况(Base Case):这是递归终止的条件,用于防止无限递归。 * 递归步骤(Recursive Case):这是函数体中的部分,它调用自身以进一步解决问题。 3. 基本情况 基本情况是递归函数的终止条件,当满足这个条件时,函数不再调用自身,而是直接返回结果。例如,在计算阶乘时,基本情况通常是n=0或n=1。 4. 递归步骤 递归步骤是函数执行过程中调用自身以解决问题的一部分。它通过分解问题为更小的子问题,并递归地解决这些子问题来工作。 5. 递归深度 递归深度指的是递归调用的层数。

By Ne0inhk
基本的编程概念 ——面向对象编程(Object-Oriented Programming, OOP)详解

基本的编程概念 ——面向对象编程(Object-Oriented Programming, OOP)详解

基本的编程概念 ——面向对象编程(Object-Oriented Programming, OOP)详解 * 基本的编程概念 —— 面向对象编程(Object-Oriented Programming, OOP)详解 面向对象编程(Object-Oriented Programming,简称OOP)是一种强大的编程范式,它通过“对象”来构建和设计软件。这些对象不仅包含数据(通常称作属性或字段),还封装了操作这些数据的方法(或函数)。OOP的核心概念主要包括以下几个方面: 1. 类(Class) * 类是创建对象的蓝图或模板,它定义了对象将拥有的属性和方法。 2. 对象(Object) * 对象是类的实例,每个对象都包含了类定义的所有属性和方法,并具有唯一的状态。 3. 封装(Encapsulation) * 封装是将对象的数据和行为紧密结合起来,同时隐藏对象的内部实现细节,仅对外提供必要的接口访问。 4. 继承(Inheritance) * 继承允许一个类(子类或派生类)继承另一个类(基类或父类)的属性和方法,

By Ne0inhk