【Gemini论文阅读】:谷歌DeepMind的多模态大模型家族,首个在MMLU上超越人类专家的AI
论文信息标题Gemini: A Family of Highly Capable Multimodal Models发表arXiv 2023更新至2025年5月v5单位Google DeepMind代码Google官方发布通过Google AI Studio和Cloud Vertex API访问论文https://arxiv.org/pdf/2312.11805.pdf一、引言AI进入多模态原生时代还记得那个只能和你文字聊天的AI吗现在它已经进化到能看懂你的手写作业、听懂你的语音、分析你的视频甚至能直接给你画图了。这就是谷歌DeepMind在2023年底推出的Gemini大模型家族——一个真正意义上的多模态原生AI系统。什么是多模态原生通俗来说就是它不是先把图片转成文字、再把声音转成文字然后分别处理而是从出生开始就同时学习文本、图像、音频和视频就像人类婴儿一样通过多种感官同时认识世界。这种设计让Gemini拥有了前所未有的跨模态推理能力。而最震撼的是Gemini Ultra成为了历史上第一个在MMLU基准测试上超越人类专家水平的AI模型得分达到90.04%超过了人类专家的89.8%。这标志着AI在通用知识和推理能力上达到了一个新的里程碑。二、Gemini模型家族总有一款适合你Gemini不是一个单一的模型而是一个完整的模型家族针对不同的应用场景和硬件条件做了优化。它包含三个主要尺寸Ultra、Pro和Nano。Model sizeModel descriptionUltra我们最强大的模型在各种高度复杂的任务上提供最先进的性能包括推理和多模态任务。由于其架构优势它可以在TPU加速器上高效地大规模部署。Pro在性能和成本、延迟之间进行了优化的模型在各种任务上都有出色的表现。它具有强大的推理能力和广泛的多模态能力。Nano我们最高效的模型专为设备端运行设计。我们训练了两个版本的Nano1.8B参数的Nano-1和3.25B参数的Nano-2分别针对低内存和高内存设备。它通过蒸馏自更大的Gemini模型得到并进行了4位量化以优化部署。*Table 1 | Gemini 1.0模型家族概览。大白话解释UltraAI界的学霸什么难题都能解决但需要强大的云端服务器才能运行适合科研、复杂推理等场景。ProAI界的全能选手性能和速度平衡得很好是谷歌日常服务如Gemini App的主力模型。NanoAI界的随身听可以直接在你的手机上运行不需要联网适合离线翻译、本地摘要等场景。三、核心架构增强的Transformer解码器Gemini的核心是一个增强版的Transformer解码器这是现在所有大语言模型的基础架构但谷歌做了很多关键改进。3.1 统一的多模态输入输出Gemini最独特的地方在于它支持交错的多模态输入序列也就是说你可以在一句话里混合文本、图片、音频和视频它会把它们都转换成统一的token序列然后一起输入到Transformer解码器中。*Figure 1 | Gemini模型支持交错的文本、图像、音频和视频输入序列。从图中可以看到不同颜色的token代表不同的模态它们被无缝地拼接在一起输入到同一个Transformer解码器中。这种设计让Gemini能够自然地理解跨模态的上下文关系比如这张图片里的物体叫什么名字这样的问题。3.2 注意力机制Transformer的灵魂Transformer的核心是自注意力机制它让模型能够关注输入序列中最重要的部分。注意力机制的公式如下Attention(Q,K,V)softmax(QKTdk)VAttention(Q, K, V) softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)softmax(dkQKT)V其中每个符号的含义QQQQuery查询向量代表当前token想要寻找的信息KKKKey键向量代表其他所有token的身份标识VVVValue值向量代表其他所有token的实际内容dkd_kdk键向量的维度用来缩放点积结果避免数值过大导致softmax函数饱和softmaxsoftmaxsoftmax归一化函数将注意力权重转换为0到1之间的概率分布总和为1大白话解释注意力机制就像你在图书馆找书。QQQ是你写的借书条上面写着你想要找的书的名字KKK是每本书的书名标签VVV是书的内容。你把借书条QQQ和所有书名标签KKK进行比对找到最相似的那些书然后把这些书的内容VVV按照相似度加权组合起来就得到了你需要的信息。3.3 32K上下文窗口Gemini支持32768个token的上下文窗口这意味着它可以一次性记住大约24000个汉字的内容相当于一本短篇小说的长度。谷歌通过实验验证Gemini在整个32K上下文长度上都能保持98%以上的检索准确率。大白话解释上下文窗口就像AI的短期记忆。32K的上下文窗口意味着你可以把一篇20多页的论文一次性扔给它它能完整地记住论文的所有内容然后回答你关于这篇论文的任何问题。四、训练基础设施用TPU打造AI超级计算机训练像Gemini Ultra这样的大模型需要惊人的计算资源。谷歌使用了自己研发的TPUv4和TPUv5e张量处理单元以及专门为大规模AI训练设计的JAX和Pathways框架。4.1 TPUv4超级计算机Gemini Ultra是在由数千个TPUv4芯片组成的超级计算机上训练的。每个TPUv4超级计算机包含4096个芯片通过专用的光学交换机连接可以动态地重新配置成任意的3D torus拓扑结构。4.2 革命性的训练可靠性训练大模型最大的挑战之一是硬件故障。在Gemini Ultra的训练规模下平均每周都会发生几次硬件故障如果每次故障都要从头开始训练那将是一场灾难。谷歌解决这个问题的方法是使用冗余内存复制和快速恢复技术。他们在内存中保留了多份模型状态的副本当某个硬件发生故障时可以直接从其他完好的副本中恢复而不需要从磁盘加载检查点。这项技术将训练的好put有效计算时间占比从之前的85%提升到了97%。大白话解释好put就像你上班的有效工作时间。之前训练大模型的时候经常因为电脑死机导致半天的工作白做了有效工作时间只有85%。现在谷歌用了多备份技术就像你写文档的时候每隔10秒自动保存一次而且同时保存在多个硬盘上这样即使一个硬盘坏了你也不会丢失任何数据有效工作时间提升到了97%。五、预训练与后训练打造全能AI5.1 大规模多模态预训练Gemini的预训练数据集是真正的多模态多语言数据集包含了文本网页、书籍、代码图像自然图像、图表、截图、PDF音频语音、音乐视频各种类型的视频内容谷歌对所有数据集都进行了严格的质量过滤和安全过滤确保训练数据的高质量。他们还特别注意移除了所有评估数据避免数据污染。5.2 后训练让AI更有用、更安全预训练只是让模型学会了世界的知识后训练则是让模型学会如何与人类交流如何安全地回答问题。Gemini的后训练流程包括两个主要阶段监督微调SFT人类专家给模型提供高质量的示范回答让模型学习如何正确地回答问题。人类反馈强化学习RLHF人类评估者对模型的回答进行打分模型根据这些分数不断改进自己的回答直到人类满意为止。大白话解释监督微调就像老师给学生上课告诉学生什么是正确的答案。人类反馈强化学习就像学生做完作业后老师给批改打分学生根据老师的反馈不断改进自己的作业直到老师满意为止。六、全面评估碾压所有对手的性能谷歌对Gemini进行了全面的评估覆盖了文本、图像、视频、音频四个模态的50多个基准测试。结果显示Gemini Ultra在32个基准测试中的30个上取得了最先进的结果。6.1 文本能力首个超越人类专家的AI在文本基准测试中Gemini Ultra的表现最为惊艳特别是在MMLU这个被广泛认可的通用知识和推理基准上。BenchmarkGemini UltraGPT-4PaLM 2-LHuman ExpertMMLU (57个学科的考试)90.04%86.4%78.4%89.8%GSM8K (小学数学)94.4%92.0%80.0%-MATH (高中数学竞赛)53.2%34.1%34.8%-HumanEval (Python代码生成)74.4%67.0%--*Table 2 | Gemini在文本基准测试上的性能。最值得关注的是MMLU的结果Gemini Ultra以90.04%的得分首次超越了人类专家的89.8%。这意味着在涵盖数学、物理、生物、历史、法律、医学等57个学科的大学水平考试中Gemini Ultra的表现已经超过了人类专家的平均水平。有趣案例AlphaCode 2基于Gemini Pro的AlphaCode 2在Codeforces编程竞赛平台上排名前15%比之前的AlphaCode提升了1.7倍。这意味着它已经超过了85%的人类程序员能够解决复杂的算法竞赛问题。6.2 图像理解比GPT-4V更强大在图像理解基准测试中Gemini Ultra在所有9个基准上都超过了GPT-4V特别是在需要复杂推理的任务上。BenchmarkGemini UltraGPT-4VPrevious SOTAMMMU (多学科大学水平问题)62.4%56.8%56.8%TextVQA (自然图像文本阅读)82.3%78.0%79.5%DocVQA (文档理解)90.9%88.4%88.4%MathVista (数学推理)53.0%49.9%49.9%*Table 3 | Gemini在图像理解基准测试上的性能。有趣案例1批改物理作业Gemini最令人印象深刻的能力之一是它能够看懂手写的作业找出学生的错误并给出正确的解答。*Figure 2 | 验证学生的物理题解答。从图中可以看到学生错误地使用了斜面长度L而不是高度H来计算势能。Gemini不仅准确地识别了手写的文字和公式还找出了这个错误给出了正确的解答并且生成了漂亮的LaTeX公式。有趣案例2生成matplotlib代码Gemini还能够看懂图表理解用户的需求然后生成正确的Python代码来重新排列子图。*Figure 3 | 使用Gemini的多模态推理能力生成matplotlib代码。这个任务需要模型同时具备识别图表中的函数类型理解用户的指令重新排列子图生成正确的Python代码进行抽象推理确定哪个子图应该移动到哪里Gemini完美地完成了所有这些步骤生成的代码可以直接运行并得到正确的结果。有趣案例3原生图像生成与其他需要单独文生图模型的AI不同Gemini能够原生输出图像不需要中间的文本描述。这意味着它可以生成与文本交错的图像内容就像人类写文章时插入图片一样。Figure 6 | Gemini的原生图像生成能力。来源原文第17页从图中可以看到用户给了一个示例蓝色和黄色的毛线可以做蓝色的猫或蓝色的狗带黄色耳朵然后让Gemini用粉色和绿色的毛线想两个主意。Gemini不仅生成了文字描述还直接生成了对应的图像绿色的牛油果带粉色种子和绿色的兔子带粉色耳朵。6.3 视频与音频理解Gemini在视频和音频理解上也取得了最先进的结果在6个视频理解基准上全部超越之前的SOTA能够理解视频中的时间顺序和动作逻辑在5个音频基准上全部超越USM和Whisper特别是在稀有单词和专有名词的识别上表现更好七、负责任部署安全第一谷歌非常重视AI的安全和负责任部署。在Gemini发布之前他们进行了全面的安全评估包括影响评估识别Gemini可能带来的潜在风险和益处安全政策制定了严格的模型安全政策禁止生成有害内容缓解措施通过数据过滤、SFT和RLHF来减少有害输出安全评估进行了多轮红队测试包括内容安全、偏见、危险能力等方面大白话解释红队测试就像找一群黑客来攻击你的系统找出系统的所有漏洞然后修复它们。Gemini经过了数百名专家的多轮红队测试确保它不会生成有害、虚假或歧视性的内容。八、总结与展望Gemini代表了多模态AI发展的一个重要里程碑。它的核心贡献包括多模态原生架构从一开始就联合训练文本、图像、音频和视频实现了真正的跨模态推理超越人类专家的性能在MMLU基准上首次超越人类专家在大多数其他基准上也取得了最先进的结果高效的训练基础设施使用TPU和Pathways框架解决了大规模训练的可靠性问题负责任的部署进行了全面的安全评估确保模型的安全性和可靠性未来Gemini将继续提升性能扩展应用场景在教育、医疗、科研、工业等领域发挥重要作用。正如谷歌所说Gemini是他们迈向通用人工智能AGI的重要一步。九、核心代码示例多模态输入处理虽然Gemini的完整代码没有开源但我们可以写一个简单的示例代码模拟Gemini的多模态输入处理流程。这个代码展示了如何将文本、图像和音频转换为统一的token序列然后输入到Transformer模型中。importtorchimporttorch.nnasnnfromtransformersimportAutoTokenizer,AutoImageProcessor,AutoFeatureExtractorclassMultimodalInputProcessor(nn.Module): 模拟Gemini的多模态输入处理器 将文本、图像、音频转换为统一的token序列 def__init__(self,text_model_namebert-base-uncased,image_model_namegoogle/vit-base-patch16-224,audio_model_namefacebook/wav2vec2-base-960h):super().__init__()# 文本tokenizerself.text_tokenizerAutoTokenizer.from_pretrained(text_model_name)# 图像处理器和编码器self.image_processorAutoImageProcessor.from_pretrained(image_model_name)self.image_encodernn.Identity()# 实际使用时替换为ViT编码器# 音频处理器和编码器self.audio_processorAutoFeatureExtractor.from_pretrained(audio_model_name)self.audio_encodernn.Identity()# 实际使用时替换为Wav2Vec2编码器# 投影层将不同模态的特征对齐到相同维度self.text_projnn.Linear(768,512)self.image_projnn.Linear(768,512)self.audio_projnn.Linear(768,512)# 模态特殊tokenself.text_tokennn.Parameter(torch.randn(1,1,512))self.image_tokennn.Parameter(torch.randn(1,1,512))self.audio_tokennn.Parameter(torch.randn(1,1,512))defforward(self,textNone,imagesNone,audioNone): 处理多模态输入返回统一的token序列 Args: text: 文本输入字符串或字符串列表 images: 图像输入PIL图像或PIL图像列表 audio: 音频输入numpy数组或numpy数组列表 Returns: unified_tokens: 统一的token序列shape为(batch_size, seq_len, hidden_dim) all_tokens[]# 处理文本iftextisnotNone:text_encodingself.text_tokenizer(text,return_tensorspt,paddingTrue,truncationTrue)text_featuresself.text_encoder(text_encoding[input_ids])# 实际使用时替换为真实的文本编码器text_featuresself.text_proj(text_features)# 添加文本模态tokentext_tokenstorch.cat([self.text_token.expand(text_features.shape[0],-1,-1),text_features],dim1)all_tokens.append(text_tokens)# 处理图像ifimagesisnotNone:image_encodingself.image_processor(images,return_tensorspt)image_featuresself.image_encoder(image_encoding[pixel_values])# 实际使用时替换为真实的图像编码器image_featuresself.image_proj(image_features)# 添加图像模态tokenimage_tokenstorch.cat([self.image_token.expand(image_features.shape[0],-1,-1),image_features],dim1)all_tokens.append(image_tokens)# 处理音频ifaudioisnotNone:audio_encodingself.audio_processor(audio,return_tensorspt,sampling_rate16000)audio_featuresself.audio_encoder(audio_encoding[input_values])# 实际使用时替换为真实的音频编码器audio_featuresself.audio_proj(audio_features)# 添加音频模态tokenaudio_tokenstorch.cat([self.audio_token.expand(audio_features.shape[0],-1,-1),audio_features],dim1)all_tokens.append(audio_tokens)# 拼接所有模态的tokeniflen(all_tokens)0:unified_tokenstorch.cat(all_tokens,dim1)returnunified_tokenselse:raiseValueError(至少需要提供一种模态的输入)# 使用示例if__name____main__:processorMultimodalInputProcessor()# 单模态输入text_input这是一个文本输入text_tokensprocessor(texttext_input)print(f文本token形状:{text_tokens.shape})# 多模态输入实际使用时需要提供真实的图像和音频数据# multimodal_tokens processor(text这张图片里有什么, images[pil_image], audio[audio_array])# print(f多模态token形状: {multimodal_tokens.shape})代码解释这个代码实现了一个简单的多模态输入处理器它可以同时处理文本、图像和音频输入将它们转换为统一的token序列。主要步骤包括使用各自的处理器和编码器将不同模态的输入转换为特征向量使用投影层将不同模态的特征对齐到相同的维度为每个模态添加特殊的模态token让模型能够区分不同的模态将所有模态的token拼接在一起形成统一的输入序列在实际的Gemini模型中这个过程会更加复杂和高效但基本原理是相同的。