当前位置: 首页 > news >正文

51c大模型~合集79

我自己的原文哦~  https://blog.51cto.com/whaosoft/12661268

#还是回谷歌好

创业一年半,胖了30斤,AI大佬感叹

回到大厂,和老领导重聚。

「由于工作强度和不健康的生活方式,我已胖了 15 公斤。」

本周一,知名 AI 学者、前谷歌大脑高级研究科学家 Yi Tay 在短短一年半的创业之后官宣回到谷歌,他显得很高兴。

图片

在初创企业世界探索了一年半之后,我决定回归我研究事业的出发点。

我将回到谷歌 DeepMind 从事人工智能研究。我很高兴能探索与 LLM 相关的令人兴奋的研究方向,并找到改变研究游戏规则的新方法。

我将以高级研究科学家的身份向我之前的经理 Quoc Le 汇报工作。

这是我回来的第一周,我非常兴奋。

Yi Tay 这次回到谷歌,成为了 DeepMind 旗下的一名高级研究员。此前,他是创业公司 Reka AI 的首席科学家和联合创始人。而在成为这家初创公司联合创始人之前,他是 Google Brain 的高级研究员,从事大型语言模型和人工智能研究。再往前,他是 Google Research 美国研究团队的技术主管,负责 Transformer 架构和扩展。

这是 Yi Tay 的头像照片。

创办 Reka 之前,在谷歌大脑工作的 3 年多的时间里,他总共参与撰写了大约 45 篇论文,是其中 16 篇的一作。一作论文包括 UL2、U-PaLM、DSI、Synthesizer、Charformer 和 Long Range Arena 等。

很多知名的大模型背后都有他的贡献,包括 PaLM、UL2、Flan-U-PaLM、LaMDA/Bard、ViT-22B、PaLI、MUM 等等。

然而就是这样一位科研牛人,出去创业不久之后也表示自己「悟」了。

AI 领域的创业究竟有多卷?Yi Tay 在回看这段经历之余,分享了在短短一年多创业时间里他的一些工作、生活瞬间。

的确肉眼可见地越来越胖。

在最新的一篇博客中,Yi Tay 对他近一年半的经历进行了复盘。

《重返 Google DeepMind》

关于 Reka 的反思

我很感谢在加入 Reka 并与他人共同创建 Reka 的过程中学到和经历的一切。

在技术上,我学到了很多谷歌之外的基础架构知识,学会了使用 Pytorch/GPU 和其他外部基础架构。我和 Reka 创始团队的其他成员一起,还以成本最优的方式建立了非常好的模型。我还学会了如何应对不可靠的 GPU、供应商和计算资源(参考报道:《「还是谷歌好」,离职创业一年,我才发现训练大模型有这么多坑》)。

基于我的经验,我还在 WebConf LLM 日主题演讲和越南 GenAI 峰会上发表了技术、反思和个人演讲。此外,我还要特别感谢 swyx 在 latentspace pod 上邀请我讲述我的探险经历,以及 TechInAsia 为我提供的有趣的炉边谈话。

同时,作为初创企业的联合创始人,我还经历了许多有趣的事件,如果我一直待在谷歌的话,我永远也不会有机会经历这些。这是一次大开眼界的经历。我学到了很多关于初创企业、业务和从头开始创建公司的过程的知识。尽管如此,我仍然更认同自己是一名科学家 / 研究员,因此我决定回归本源。

我为我们取得的成就感到骄傲,尤其是在 Reka 的早期。五月份,我们的 Reka Core 在 Lmsys 上首次进入前五名。实际模型排名第 7,我们实现了超越 GPT-4 早期版本的目标。与其他实验室相比,我们拥有的资源(资金、计算和人力)要少得多,因此我们的成绩令人印象深刻。我们筹集了 1 亿多美元的 lifetime funding,这与其他团队相比仍然相对较少。

此外,这还是由一个不到 15 人的技术团队完成的。

对个人来说,这又是一段神经紧张的时期,尤其是在我开始创业之旅时,也是我离开谷歌之后,我和妻子即将迎来我们的第一个孩子。为了同时兼顾这么多事情,我的身体和精神健康都受到了很大的影响,由于工作强度和不健康的生活方式,我的身体胖了 15 公斤。

好的一面是,我现在正积极努力地调养自己,使自己恢复到完全健康的状态,也许下次我还会写一篇关于我的这段疗伤经历的文章。

对我来说,这是一次狂野而有意义的旅程。我感谢大家给了我这段美妙的旅程。我非常享受与大家共事的过程,也非常享受在迪拜、京都和巴厘岛等有趣的地方举行的团队活动。

我有过一段美好的时光,我相信公司会在 Reka 雇用的这么多有才华、有能力的人的帮助下发展得很好!

这是一次很好的休假 / 学习经历。

现在是时候回到谷歌从事研究工作了。

特别声明

这可能有点随意,但对我个人来说,放弃舒适的生活环境而去创业真的很可怕。

我很感谢在这段时间里一直与我保持联系的所有谷歌朋友。即使在我转型成为一名 Xoogler 并更多地融入初创企业生活的过程中,我也为拥有这样一个支持网络而感到幸运。特别要感谢(排名不分先后)Vinh、Derek、Denny、Steven、Siamak、Mostafa、Don、Divy 和 Quoc,还有 Xoogler 的其他朋友,如 Jason、Jerry、Hyung Won 和 Afroz,他们在我离开后仍保持联系。

有趣的是,在这段时间里,我和你们中的很多人都见了面!在新加坡的某个时刻,我还和 Derek、Vinh、Jason、Jerry、Quoc、Divy、Sanket、Swaroop 和 Neil 一起玩耍过。此外,邀请我去越南演讲的 Thang Luong 也非常好!

感谢大家对我的热情 / 支持,感谢大家低调地提醒我应该回来。最后,也是最重要的一点,我感谢 Quoc 在这 1 年半的时间里对我的关心和友谊;感谢 Jeff Dean 在新加坡与我共进晚餐(并提醒我谷歌很棒!);感谢我的招聘人员 Katelyn 在这 1 年多的时间里一直与我保持联系!

我很高兴能回来。

始于热情,终于疲惫:大厂人才回流,风向又变了?

2023 年 3 月份,Yi Tay 宣布离开谷歌,参与创办了 Reka 并担任该公司的首席科学家,主攻大型语言模型。

我们知道当时 ChatGPT 刚推出不久,在这个时间段,选择趁大模型热潮辞职创业的人很多,离开的原因很多样:对大模型方向前景的看好,对经济复苏的推断,投资人的推动,还有就是,很多人提到了积重难返的大公司病。

许多从谷歌离开的员工都发过「小作文」,表示谷歌问题的根源不是「技术」,而是在于「文化」,比如员工的使命感不足,公司为了避免风险设置了繁琐的系统和流程。

和 Yi Tay 前后脚离职的 AppSheet 创始人 Praveen Seshadri 就写过一篇《Google 出了什么问题》,直言「如今的谷歌与当年的微软一样,正在逐步走向衰落。」

然而一年半过去了,我们发现很多 AI 人才都在「回流」大厂。

除去因为种种原因创业受阻的一批人之外,其他人想回去的原因可能很简单:创业真太累了。

今年 8 月,李沐也复盘了自己创业一年的体会:

在 Amazon 呆到第五年的时候就想着创业了,但被疫情耽搁了。到第 7 年半的时候,觉得太痒了,就提了离职。现在想来,如果有什么事这一辈子总要试下的,就蹭早。因为真开始后会发现有太多新东西要学,总感叹为啥没能早点开始。

即使拿到了融资,拿到了做 LLM 的入场券,这其中也包含了常人很难经历的「大起大落」:

运气不错,很快拿到了种子投资。但钱还不够买卡,得去拿第二轮。这一轮领头是一家非常大的机构,做了几个月文档、商讨条款。但在签字前一天,领头说不投了,直接导致了跟投的几家退出。

在回到母校上海交大的演讲中,他也提到了创业给自己带来的健康方面的影响:

创业不好的地方就是婴儿般的睡眠,每三个小时醒一次,怀疑自己是不是快混不下去了。为此,我还问过很多人,包括张一鸣,以及世界首富级别的人,向他们取经。

在公司步入正轨之后,李沐仍然觉得自己当时「脑子抽了」:

去年跟宿华在斯坦福散步,他拍着我肩膀说:“跟我说句实话,你为什么想创业呀?” 当时候不以为然:“就是想换个事情做做”。然后宿华笑了笑。

现在我懂了,因为他经历了创业酸甜苦辣。如果今天再来回答这个问题,我会说:“我就是脑子抽了”。但也庆幸当时没想到会那么不容易,所以一头扎进来了。否则,大家看到的可能是「工作十年反思」。我觉得今天我写的故事更有意思些。

品尝完创业的艰辛之后,知名的学者也会发出感叹。

对此,你怎么看?

参考内容:

​​https://www.yitay.net/blog/returning-to-google-deepmind​​​

#aisuite

吴恩达出手,开源最新Python包,一个接口调用OpenAI等模型

在构建应用程序时,与多个提供商集成很麻烦,现在 aisuite 给解决了。

用相同的代码方式调用 OpenAI、Anthropic、Google 等发布的大模型,还能实现便捷的模型切换和对比测试。

刚刚,AI 著名学者、斯坦福大学教授吴恩达最新开源项目实现了。

图片

吴恩达在推文中宣布了这一好消息开源新的 Python 包:aisuite!

这个工具可以让开发者轻松使用来自多个提供商的大型语言模型。

在谈到为何构建这个项目时,吴恩达表示构建应用时,发现与多个提供商集成非常麻烦。aisuite 正是为了解决这个问题而诞生的,用户只需通过更改一个字符串(如 openai:gpt-4o、anthropic:claude-3-5-sonnet-20241022、ollama:llama3.1:8b 等),即可选择不同提供商的模型。

图片

项目地址:https://github.com/andrewyng/aisuite

项目一上线,大家纷纷表示「这对开发人员来说非常有用。」

「超级方便!简化集成总是有益的,非常好的研究!」

统一接口设计,支持多个 AI 提供商的模型

aisuite 使开发者能够通过标准化的接口轻松使用多个 LLM。其接口与 OpenAI 的类似,aisuite 可以很容易地与最流行的 LLM 交互并比较结果。

aisuite 是一个轻量级的包装器,它基于 Python 客户端库构建,允许用户在不修改代码的情况下,轻松切换并测试来自不同 LLM 提供商的响应。

目前,这个项目主要集中在聊天补全功能,未来将扩展到更多使用场景。

当前,aisuite 支持的提供商包括:

OpenAI

Anthropic

Azure

Google

AWS

Groq

Mistral

HuggingFace 

Ollama

为了确保稳定性,aisuite 使用 HTTP 端点或 SDK 来与提供商进行调用。

安装

安装过程有多种选择。

下面是只安装基础包,而不安装任何提供商的 SDK。

pip install aisuite

带 Anthropic 支持的安装方式

pip install 'aisuite [anthropic]'

下面是将安装所有特定于提供商的库。

pip install 'aisuite [all]'

设置

开始使用时,你需要为打算使用的提供商获取 API 密钥。API 密钥可以作为环境变量设置,具体的使用方式可以参考 aisuite 的 examples 文件夹。

如果大家还不是很明白,可以参考下面简短的示例展示,即如何使用 aisuite 生成来自 GPT-4o 和 Claude-3-5-Sonnet 的聊天补全响应。

先设置 API 密钥:

export OPENAI_API_KEY="your-openai-api-key"
export ANTHROPIC_API_KEY="your-anthropic-api-key"

使用 Python 客户端:

import aisuite as ai
client = ai.Client ()models = ["openai:gpt-4o", "anthropic:claude-3-5-sonnet-20240620"]messages = [{"role": "system", "content": "Respond in Pirate English."},{"role": "user", "content": "Tell me a joke."},
]for model in models:response = client.chat.completions.create (model=model,messages=messages,temperature=0.75)print (response.choices [0].message.content)

想要尝试的读者可以跟着原项目进行配置。如今,我们身处大模型时代,对于开发者而言,用一个统一的接口就能调用各种大模型,这给开发者们节省了大量的时间成本。

#XGrammar

陈天奇团队LLM结构化生成新引擎:百倍加速、近零开销

现在,大语言模型的结构化生成有了一个更加高效、灵活的引擎。

不管是编写和调试代码,还是通过函数调用来使用外部工具,又或是控制机器人,都免不了需要 LLM 生成结构化数据,也就是遵循某个特定格式(如 JSON、SQL 等)的数据。

但使用上下文无关语法(CFG)来进行约束解码的方法并不高效。针对这个困难,陈天奇团队提出了一种新的解决方案:XGrammar。

图片

XGrammar 是一个开源软件库,可实现高效、灵活且可移植的结构化生成。该团队在博客中表示:「我们毫不妥协地实现了这三个目标,并致力于一个核心使命:将灵活、零开销的结构化生成带到任何地方。」

  • 论文标题:XGrammar: Flexible and Efficient Structured Generation Engine for Large Language Models
  • 论文地址:https://arxiv.org/pdf/2411.15100
  • 代码地址:https://github.com/mlc-ai/xgrammar

对于结构化生成,一种常用方法是约束解码。在每个解码步骤中,约束解码都会检查词表,并通过将无效 token 的概率设置为零来过滤掉违反指定结构的 token。为了支持多种多样的结构格式,需要一种灵活的机制来指定和检查这些约束。

图片

使用 JSON 方案实现约束解码

上下文无关语法(CFG)就能提供一种通用方法,即通过一组规则来定义结构。其中每条规则都包含一个字符序列或其他规则,并允许递归组合来表示复杂的结构。相比于正则表达式等其它格式,CFG 由于支持递归结构,因而能提供更大的灵活性,使其适合描述 JSON、SQL 和领域特定语言(DSL)等常见语言。

下图展示了一个用于数组和字符串的 CFG,可以清楚地看到其中的递归结构。

图片

但是,也正因为 CFG 很灵活,所以直接将其应用于约束解码的效率并不高。首先,每个解码步骤都需要对词表中每个可能的 token 解释 CFG,在 Llama 3.1 中,这个词表的大小可能高达 128k。此外,CFG 解释需要一个堆栈状态来跟踪之前匹配的递归规则,因此无法提前计算和缓存堆栈模式的所有组合。最后,LLM 生成结果中的每个 token 都包含多个字符,这些字符可能会跨越语法元素的边界,并在运行时执行期间导致进一步的递归或堆栈弹出。这种未对齐的边界问题很棘手,需要在语法执行期间小心处理它们。

XGrammar 便是为解决上述难题而生的,并且效果卓越:相比于之前的 SOTA 方法,XGrammar 可以将上下文无关语法的每 token 延迟减少多达 100 倍!此外,他们还基于 Llama3.1 模型实验了集成了 XGrammar 的 LLM serving 引擎;在 H100 GPU 上,这能将通过结构化输出实现端到端 LLM serving 的速度提升 80 倍!

该团队表示:「我们正在开源 XGrammar 并将其集成到主要的开源 LLM 框架中。」

XGrammar 概览

如图 1 所示,Grammar 利用了字节级下推自动机(byte-level pushdown automaton)来解释上下文无关语法。

图片

这种字节级设计允许每个字符边缘包含一个或多个字节,处理不规则的 token 边界并支持包含 sub-UTF8 字符的 token 。该自动机的结构经过优化以加快匹配速度。

在预处理阶段,会生成一个自适应 token 掩码缓存,它会通过预先计算与上下文无关的 token 来加快运行时的掩码生成。上下文扩展(context extension)能进一步提升这种缓存的有效性。

在运行时,token 掩码缓存会快速生成大部分掩码,而持续性执行堆栈会高效处理其余的上下文相关 token。

此外,掩码生成和 LLM 推理是互相重叠的,以最大限度地减少约束解码的开销。一旦 LLM 在掩码约束下生成新 token,就会使用此 token 来更新下推自动机的堆栈状态,以进行下一次掩码生成。

具体来说,陈天奇团队首先得到了一个见解:虽然无法预先计算下推自动机(PDA)无限多个状态的完整掩码,但可以预先计算掩码中相当一部分(通常超过 99%)的 token。因此,可将这些 token 分成两类:

  • 上下文无关 token:仅通过查看 PDA 中的当前位置而不是堆栈即可确定其有效性的 token。
  • 上下文相关 token:必须使用整个堆栈来确定其有效性的 token。

下图展示了一组上下文相关和无关 token 的示例。大多数情况下,上下文无关 token 占大多数。我们可以预先计算 PDA 中每个位置的上下文无关 token 的有效性,并将它们存储在自适应 token 掩码缓存中。此过程称为语法编译(grammar compilation)。

图片

下图则展示了自适应存储格式。

图片

在运行时,首先检索来自缓存的上下文无关 token 的有效性。然后,高效地执行 PDA 来检查其余的上下文相关 token。通过跳过运行时检查大多数 token,便可以显著加快掩码生成速度。XGrammar 执行时间的整体工作流程见图 1。

此外,他们还设计了一组额外的算法和系统优化方法,以进一步提高掩码生成速度并减少预处理时间,包括上下文扩展、持续性执行椎栈、下推自动机结构优化、并行式语法编译。

上下文扩展

该团队提出的方法是检测语法中每个规则的额外上下文信息,并将其用于减少上下文相关 token 的数量,并进一步加快运行时检查速度。

图片

持续性执行堆栈

为了加快由于多种可能的扩展路径而导致的拆分和合并期间多个并行堆栈的维护速度,他们设计了一个基于树的数据结构,可以有效地同时管理多个堆栈。

图片

它还可以存储以前的状态并实现高效的状态回滚,从而加快上下文相关 token 的运行时检查速度。

下推自动机结构优化

研究者进行了额外的优化,以改进下推自动机的结构,加快最终执行的效率。这些优化借鉴了传统的编译器优化概念,它们对于高效约束解码特别有用。

一是规则内联。在指定的上下文无关语法中,可能有许多片段规则,即只有少数元素的规则,然后在下推自动机中将其转换为小的 FSA(有限状态自动机)。

为了解决这个问题,研究者为片段规则引入了一种自动内联策略。他们迭代地选择不引用其他规则的规则并将它们内联到父规则中。为了避免自动机大小的爆炸式增长,研究者将内联规则和内联结果的大小限制为常量。该内联过程几乎消除了片段规则,从而提高了 token 检查的效率并增强了上下文扩展的有效性。

二是下推自动机节点合并。对于下推自动机,在许多情况下,歧义来自具有相同标签的节点的多个外向边。在匹配 token 时,如果到达此节点,并且下一个字符恰好与标签匹配,则匹配堆栈将被拆分为多个堆栈,每个外向边一个。堆栈数量增多会增加计算量,这是因为需要检查每个堆栈的上下文相关 token 并合并 token 掩码。

为了减少这种歧义,节点合并算法会合并满足以下两个条件的后续节点,a)它们由来自同一点的具有相同标签的边指向,b)它们没有被其他边指向。

以上两种优化保留了自动机的等效性,但减少了节点和边的数量。运行时,减少了堆栈的数量和 token 检查所需的计算量,从而加快了掩码的生成过程。

重叠掩码生成和 LLM 推理

通过上述优化,token 掩码生成过程显著加快,但仍需要 CPU 计算。为了进一步消除约束解码的开销,研究者将 mask 生成计算与 LLM 推理过程重叠,如下图 8 所示。

图片

研究者观察到,mask 生成过程和 LLM 推理过程可以重叠,原因在于 mask 生成只需要 CPU,并且只依赖于之前生成的 token。LLM 推理过程(除采样阶段外)只需要 GPU,并且也只依赖于之前生成的 token。因此可以将 CPU 上的 mask 生成过程与 GPU 上的 LLM 推理过程并行化。

评估结果

研究者利用 12,000 行核心 C++ 代码来实现 XGrammar,并提供了 Python 捆绑包以方便与 LLM 推理框架无缝集成。他们在评估 XGrammar 过程中回答以下几个问题:

  • XGrammar 能否高效支持约束解码的每个步骤?
  • XGrammar 能否在 LLM serving 中实现端到端结构化生成的最小开销?
  • XGrammar 能否部署在更广泛的平台上?

语法引擎效率

本节中评估了语法引擎的性能。研究者在 Llama-3.1-8B Instruct 上评估了他们的方法和基线,该模型能够遵循人类的指令。

结果如下图 9 所示,在 JSON 模式设置中,XGrammar 可以实现高达 3 倍的加速;在 JSON 语法用例下,可以实现超过 100 倍的加速。与 JSON 模式(更受限制)相比,JSON 的上下文无关语法包含更复杂的规则,因为它可以包含递归列表和字典,导致语法引擎更难有效地执行它。

在这两种情况下,XGrammar 都可以在不到 40 微秒的时间内生成每个 token 的掩码,使其成为低延迟 LLM 推理的理想选择。

图片

端到端 LLM 引擎评估

本节在 LLM serving 设置下来评估 XGrammar。研究者将 XGrammar 集成到端到端 LLM 推理框架中,并与其他 LLM serving 框架进行效率比较。同时,他们还与其他支持结构化生成的 LLM 引擎进行效率比较,包括集成 Outlines 的 vLLM (v0.6.3) 和内置语法引擎的 llama.cpp。

实验结果如下图 10 所示,XGrammar 在 CFG 和 JSON 模式的所有基线中实现了最佳的 TTFT 和 TPOT。vLLM 和 llama.cpp 的计算受到其语法引擎更长预处理和每个 token 处理时长的阻碍。

在批量较大的情况下,vLLM 中 TPOT 速度的下降尤为明显。与现有解决方案相比,XGrammar 引擎总体上可以将输出 token 的速度提高 80 倍。这种加速来自 XGrammar 带来的性能优化。

图片

研究者还在下表 1 中研究了语法处理的开销问题。由于 token 掩码生成效率和语法 GPU 重叠,语法过程在 TPOT 中几乎不产生任何开销。

图片

跨平台部署

本节探讨如何将 XGrammar 引入各种平台。研究者利用 Emscripten 将 XGrammar 编译成 WebAssembly 并构建 JavaScript 捆绑包。他们进一步将 web-binding 与浏览器内 LLM 推理框架 WebLLM 集成,以实现结构化生成。

研究者使用 JSON-mode-eval 数据集评估端到端性能,在装有 Google Chrome 的 MacBook Pro M3 Max(macOS 14.5)上使用 4 位量化模型 Llama-3.1-8B-Instruct,并在装有 Safari 的 iPhone 14 Pro Max(iOS 18)上使用 Qwen2.5-0.5B-Instruct。

结果如下图 11 所示,研究者比较了使用 XGrammar 进行结构化生成和非结构化生成时的第一个 token 时间 (TTFT) 和每个输出 token 时间 (TPOT),同时确保生成的 token 数量相同。结果表明,XGrammar 在两种设置下都几乎实现了零开销,在支持未来高性能端侧智能体方面具有巨大潜力。

图片

#毕昇一号

DNA活字存储喷墨打印机来了,低成本、高效率、全自动的DNA存储

2024 年 11 月 18 日,中科院北京基因组研究所(国家生物信息中心)陈非团队、计算所处理器全国重点实验室谭光明、卜东波团队、中科计算技术西部研究院段勃团队、微生物所杨怀义团队、武汉所刘翟团队以及吉林大学李全顺团队等在知名国际学术期刊《Advanced Science》上发表了题为 “Cost-Effective DNA Storage System with DNA Movable Type” 的论文,借鉴毕昇活字印刷术的思想,提出了“DNA活字存储”新思路,并实现了具有完全自主知识产权的全自动、低成本、高效率的DNA 活字存储喷墨打印机“毕昇一号”。

  • 论文标题:Cost-Effective DNA Storage System with DNA Movable Type
  • 论文地址:https://onlinelibrary.wiley.com/doi/10.1002/advs.202411354

,时长01:44

1. 什么是 DNA 存储?

数据指数级增长,磁带、磁盘、光盘、U 盘不敷使用,怎样才能存得下?

存到 DNA 中吧!存到 DNA 中是一种有潜力的方案!

互联网时代的到来, 数字化和信息化浪潮使知识与数据都经历着爆炸式的增长。海量数据给现有的数据存储技术带来了巨大的挑战:现有的硬盘、磁带存储模式存在保存时长有限(最长约 30 年)、占用空间大、转运不方便、电能损耗大等缺点,无法满足数据指数形式增长的需求。

DNA 存储技术是一种新兴的大数据存储技术。简要地说,DNA 存储技术突破了传统的以硅基介质(如 U 盘等)为媒介的存储方式,而是利用 DNA 碱基天然的信息存储能力,依据一定规则将文本、图片、声音、影像文件等传统数据 0-1 二进制编码转换为 DNA 核苷酸四进制编码(A、T、C、G 组合),然后通过人工合成特定序列的 DNA 来存储数据。相比于现有的数据信息存储方式,DNA 存储技术具有数据密度高、保存时间长、配套设备能耗低、便于携带、运输隐蔽性高和便于多重加密等优点。

图片

图 1. DNA 存储技术及其优势

鉴于 DNA 存储技术的巨大潜力,美国微软公司陆续投资近亿美元,与华盛顿大学于 2015 年成立 DNA 存储项目组,于 2018 年 3 月完成了约 200MB 数据的保存,其中包括古登堡计划数据库中的 100 部世界名著,创造了 DNA 存储领域的新纪录。2019 年,他们构建了端到端全流程原型机,实现了 “hello” 单词的完整写读。

2. 什么是 DNA 活字存储?

现有的 DNA 存储技术 “一次合成、一次使用”,价格昂贵,怎样才能降低成本?

用 DNA 活字吧!DNA 活字存储是一种有潜力的方案!

“庆历中,有布衣毕昇,又为活板。其法:用胶泥刻字,薄如钱唇,每字为一印,火烧令坚…… 欲印,则以一铁范置铁板上,乃密布字印,满铁范为一板,持就火炀之,药稍镕,则以一平板按其面,则字平如砥。若止印三二本,未为简易;若印数十百千本,则极为神速”。这是沈括写的《活板》中的一段话 ---《活板》被选作初中课文,是以举凡在中国读过初中者,想必对毕昇发明活字印刷术的故事皆耳熟能详。《活板》有言:“有奇字素无备者,旋刻之,以草火烧,瞬息可成”,活字印刷术相较于雕版印刷术之优势可见一斑。

那什么是 DNA 活字存储呢?所谓 DNA 活字存储,就是 “DNA 版本的活字印刷术”。目前的 DNA 存储技术方案,多采用化学合成法,一次合成,一次使用,可比作雕版印刷术;而 DNA 活字能够一次合成,多次使用,可比作活字印刷术。

具体来说,DNA 活字存储采用酶连反应替代部分化学合成步骤完成数据写入,每个活字可重复使用多达一万次,从而将数据存储成本降低至每兆字节仅 122 美元,成为当前业内最具成本效益的存储解决方案。

图片

图 2. 毕昇发明的活字印刷术与 DNA 活字存储。以唐诗《行路难・其一》为例,我们将每个字符及其位置索引转换成 DNA 活字,用酶联技术连接成 DNA 片段,最终转导入大肠杆菌中长期存储

3. “毕昇一号”--- 全自动的 DNA 活字存储喷墨打印机

DNA 活字存储包括选活字、酶联活字、酶联后的 DNA 片段转导入大肠杆菌中长期存储等多个环节。如何提高存储效率呢?联合团队研发了 DNA 活字喷墨打印机 “毕昇一号”,全自动完成上述诸多环节,显著提升了数据写入效率 --- 研究团队将这台打印机命名为 “毕昇一号”,以表达对毕昇的崇敬之意。

图片

图 3. “毕昇一号”--- 全自动的 DNA 活字存储喷墨打印机

 “毕昇一号” 系统使用 350 个 DNA 活字,成功存储并精准检索了 43.7 KB 的多媒体数据,包括文本、图像、音频和视频,充分证明了其技术的可行性和应用潜力。这项工作为 DNA 数据存储技术的未来产业化提供了全新的思路与可能性。

毕昇一号 DNA 活字存储系统的工作流程包括四个主要步骤:

第一步,编码:将目标文件(如《十四行诗》第 12 首)分割为 100 字节 / 字符的片段,每个片段进一步划分为 20 个数据切片。每个切片包含 5 字节的有效载荷和 4 字节的地址,形成数据条带。例如,图中展示了第四条数据条带的 20 个连续数据切片(第 0–19 行),这些切片覆盖了第 300 到第 399 个字符的内容(如 “ed up...question ma”),其中第 8 个切片在第 340 个位置编码了单词 “white”。此外,通过列校验和(第 20–29 行)和行校验和(第 9 列)提供了额外的错误检测和纠正功能。

第二步,打印:利用 “毕昇一号” DNA-MT 喷墨打印机,将 4 个地址活字(AMTs)、5 个有效载荷活字(PMTs)和 1 个校验活字(CMT),以及连接酶和预切割载体打印到每个试管中,通过酶促连接形成包含 DNA-MT 块的质粒。

第三步,存储:组装完成的重组质粒可以以液体或冻干形式进行体外保存,或者转化至大肠杆菌中实现长期体内存储。

第四步,解码:通过高通量测序对 DNA 活字块进行测序,获得的 DNA 序列根据编码表解码为对应活字,从而还原原始数据。例如,解码一个 250 个碱基的序列可以恢复第 340 个位置的单词 “white”。最终,解码后的有效载荷活字根据地址活字的顺序排列,完成对原始文件的重建。

图片

图 4. 毕昇一号 DNA 活字存储系统的工作流程

毕昇一号 DNA 活字存储的成本约为 122 $/MB,明显低于现有的 DNA 存储技术。该团队表示,后续研究通过增加活字连接段数和减小反应体系,可将存储成本降低至 0.06 $/MB,伴随着编码技术的进步,如集成高密度喷泉码和改进校验的 DNA 活字,成本将进一步降低,有望进一步推动 DNA 存储的商业化进程。

图片

图 5. DNA 活字存储技术可显著降低存储成本

4. 展望

DNA 存储技术是生物技术与信息处理技术的碰撞与交叉。它开辟了一种新的存储模式,从根本上改变了数据、信息的保存及传递方式,是大数据存储模式的新篇章。

北宋时,毕昇发明了活字印刷术,尽扫雕版印刷术之弊;而时至今日,古老的活字印刷术与现代的 DNA 存储相互激发,相互交叉,碰撞出 “DNA 活字存储” 这一新思维。

“发挥旧事重增焕”。我们期待:“毕昇一号” DNA 活字存储喷墨打印机将像毕昇的 “活板” 一样,另辟蹊径,开创新篇!

图 6. 研究团队部分人员。左起:张心茹、范婷文、邢晶、段勃、陈非、卜东波、刘翟、杨怀义、马灌楠、魏征、魏迪、王晨阳、王佩、侯鹏飞、涂朝仕。

#LLM 可以从简单数据中学习吗?

在 10 月份的一次周会结束后,我提到 SFT 训练后的 Loss 曲线呈现阶梯状,至于为什么,并没有人有合理的解释,加上当时的重心是提升次日留存率,Loss 曲线呈现阶梯状与次日留存率的关系还太远,即使有问题,起码次日留存率是逐渐在提升。

幸运的是,在一次逛论坛时发现了一篇博客 Can LLMs learn from a single example?,也是我这篇博客的标题名称由来,在其基础上结合了公司业务的一些现状和我个人的思考。

可以清楚地看到每个 epoch 的终点——loss 突然向下跳。我们以前也见过类似的损失曲线,但都是由于错误造成的。例如,在评估验证集时,很容易意外地让模型继续学习——这样在验证之后,模型就会突然变得更好。因此,开始寻找训练过程中的错误。

发现该“问题”的时间,恰好与单句重复问题同一时期(9 月份),于是推测是不是 context length 从 2k 变到 4k 所致,以及 Transformers 库和 RoPE 位置编码的问题。在开始逐步修改代码的同时,在 Alignment Lab AI Discord 上看到他人反馈的类似的奇怪 loss 曲线,并且每个回复的人也都在使用 Trainer,这在当时加深了我认为 Transformers 库存在问题的猜测,甚至我还去询问了同事李老师是否有同样的问题,以及 load model 时的 warning。

9 月中旬,老板要求我们加上验证 loss,于是出现了如下图所示的 eval loss 曲线。

该问题在 Discord 上讨论得越来越激烈,也有人反映在不使用 Trainer 的情况下,也会出现阶梯状的 loss 曲线。

查阅资料,看到一种假设:即这些训练曲线实际上显示了过拟合。起初,这似乎是不可能的。这意味着模型正在学习识别来自一个或两个示例的输入。如果回过头来看我们展示的第一条曲线,就会发现 loss 在第二和第三个 epoch 期间,它根本没有学习到任何新东西。因此,除了在第一个 epoch 开始时的初始学习(学习了多轮对话的对齐方式)外,几乎所有表面上的学习都是(根据这一理论)对训练集的记忆。此外,对于每个问题,它只能获得极少量的信号:它对答案的猜测与真实标签的比较。

资料提到了一项实验:使用以下学习率计划,对 Kaggle 模型进行了两个 epoch 的训练:

如今,这种 schedule 并不常见,但莱斯利-史密斯(Leslie Smith)在 2015 年发表的论文《训练神经网络的循环学习率》(Cyclical Learning Rates for Training Neural Networks)中讨论了这种方法,并取得了很大成功。

下面就是我们因此而看到的看起来很疯狂的训练和验证损失曲线:

到目前为止,我们唯一能完全解释这种情况的方法就是假设是正确的:模型正在快速学习识别实例,即使只看到一次。让我们依次查看 loss 曲线的各个部分:

  • 从第一个 epoch 来看,这是一条非常标准的 loss 曲线。在第一个 10% 的 epoch 中,学习率开始升温,一旦达到温度后,训练和验证 loss 就会迅速降低;然后按照余弦曲线逐渐下降,两者都会放缓。
  • 第二个 epoch 才是我们感兴趣的地方。我们并没有在 epoch 开始时重新 shuffle 数据集,因此第二个 epoch 的第一批数据是学习率仍在预热的时候。这就是为什么在我们展示的第一条 loss 曲线中,没有看到像从 epoch 2 到 epoch 3 那样的直接阶跃变化——这些批次只有在学习率较低时才会出现,所以它学不到太多东西。在 epoch 2 开始 10% 时,训练 loss 急剧下降,因为在第一个 epoch 中看到这些批次时,学习率很高,模型已经知道了它们的样子,因此它可以非常自信地猜出正确答案。但在此期间,验证 loss 会受到影响。这是因为虽然模型变得非常自信,但实际上它的预测能力并没有提高。它只是记住了数据集(早期没有清洗掉训练数据中的保底回复以及一些涉及到公司信息的关键词,模型会输出这些内容,甚至会将原样的超时保底回复输出),但并没有提高泛化能力。过于自信的预测会导致验证损失变大,因为损失函数会对更自信的错误进行更高的惩罚。
  • 曲线的末端是特别有趣的地方。训练 loss 开始变得越来越大,而这是绝对不应该发生的!事实上,我还从未在使用合理的学习率时遇到过这种情况。根据记忆假说,这完全说得通:这些批次是模型在学习率再次下降时看到的,因此它无法有效地记忆这些批次。但模型仍然过于自信,因为它刚刚得到了一大堆几乎完全正确的批次,还没有适应现在看到的批次没有机会学得那么好这一事实。它会逐渐重新校准到一个更合理的置信度水平,但这需要一段时间,因为学习率越来越低。在重新校准的过程中,验证 loss 会再次下降。

记忆假说很有可能是真的。按照先前小模型时代的训练经验,我们往往需要大量的数据来让模型学习输入分布和模式。使用随机梯度下降法(SGD)导航的损失面太崎岖,无法一下子跳得很远。不过,有些东西可以让损失面变得更平滑,比如使用残差连接,如经典论文《可视化神经网络的损失景观》(Li et al,2018)中所示。

很可能的情况是,预训练的大语言模型在接近最小损失的区域具有极其平滑的损失面,而开源社区所做的大量微调工作都是在这一区域。这是基于最初开发微调通用语言模型的基本前提。简单来说,我们的训练数据并不能够让模型跳出该平滑的损失面,只是让模型记住了 BOT 的回复、以及通过几个数据就让模型学到了说话风格。

如果以上猜测都属实,这不是什么糟糕的事情,拥有一个学习速度非常快、且能够举一反三的模型是一件非常棒的事情。同时,这也佐证了《LIMA:Less Is More for Alignment》、《A Few More Examples May Be Worth Billions of Parameters》、《Maybe only 0.5% Data is Needed: A Preliminary Exploration of Low Training Data Instruction Tuning》等一系列证明少量优质、多样性丰富的指令数据就能让模型有很强指令遵循的论文的有效性。以及最近出现的一系列关于指令数据集子集选择的论文,例如《Smaller Language Models are capable of selecting Instruction-Tuning Training Data for Larger Language Models》、《LESS: Selecting Influential Data for Targeted Instruction Tuning》。这些论文提到经过他们方法挑选出来的子集,在该子集上训练出来的模型比在全量数据集上微调的模型效果要更好。

我统计了从 7 月 到 11 月份所训练模型的 Loss 曲线是否呈现阶梯状,正常表示平滑下降,不正常表示阶梯下降(在每个 epoch 交界处骤降)。早期训练的模型的 loss 曲线都是正常,可惜的是早期的训练数据被删了,无法准确地判断是数据质量的因素,还是基底模型的因素。

早期训练遵循多阶段的方式,即先在 continual pretrain 得到的 base 模型上用 GPT4all 数据集以及一个闲聊场景的对话集进行训练,然后再用高质量的对话数据集再次微调。以此得到的模型表现平常,虽不会犯错,但也没有新意,不能提升平均对话轮数,因此后续我们不再进行 base model -> GPT4all + 闲聊数据集 -> 高质量对话数据集的多段式 SFT,而是直接在 base model 上用高质量对话数据集进行 SFT。在这之后训练的模型的 loss 曲线都是阶梯状,按照记忆假说和先前分析的内容来看,llama2、vicuna-13b-v1.5 等模型的对话、闲聊能力得到了提升(也有可能是 GPT4all 数据集让模型闲聊能力下降),在我们所认为的“高质量”数据集上进行训练,模型只是记住了对话内容,而非真正意义上地学习(训练数据集对于模型来说非常简单)。

PS:我没有否认和贬低这种方式,当模型的“脑容量”(记忆力)大到能够将我们提供的优质回复都记住,并且在合适的场景输出,这在业务上完全没有问题。在复读机问题上,将高质量数据集从 4k 扩充至 26k 后,的确减少了该问题的频次。一个可解释的原因是数据集的多样性增加,能够囊括更多的对话场景以及角色。

一个猜想:当模型的学习速度如此之快时,灾难性遗忘问题可能会突然变得明显得多。例如,如果一个模型看到了十个非常常见关系的示例,然后又看到了一个不太常见的反例,那么它很可能会记住这个反例,而不仅仅是稍微降低它对原来十个示例的记忆权重。

在 6 月下旬时,老板询问我为什么模型的效果不太好时,我想了想说是灾难性遗忘(找的理由)。现在看来,似乎的确大概率是这个原因。沿着 base model -> GPT4all + 闲聊数据集 -> 高质量数据集训练的路径,希望模型能够不断地进化,但实际上 base model 原先的知识和 GPT4all 数据集中的内容都遗忘得差不多。因此,不要多阶段 SFT,而是将每个阶段的训练数据进行混合,可以减少灾难性遗忘的影响,这或许就是后来尝试数据混合方案后,能够提升次日留存率的一个原因?

此外,我们还需要审视,对于模型来说,什么是高质量的数据集。

#QuadMamba 

该研究通过分析Transformer模型中的反向传播矩阵,提出了一种新的方法来理解语言模型(LM)如何学习和记忆信息。论文提出了将梯度矩阵映射到词汇空间的技术,揭示了LM在学习新知识时的内在机制,并探讨了梯度的低秩性以及“印记与偏移”的知识存储与模型编辑机制。

近年来,状态空间模型(State Space Models)中的Mamba取得了显著的进展,在性能上超过了主导的Transformer模型,尤其是在降低计算复杂度方面,从二次降到了一次。然而,由于视觉数据的独特特性,如图像中的空间局部性和邻接关系以及视觉 Token 的信息粒度变化很大,Mamba从语言任务转换到视觉任务时存在困难。现有的视觉Mamba方法要么将 Token 扁平化为在光栅扫描方式下的序列,这破坏了图像的局部邻接关系,要么手动将 Token 分区到窗口,这限制了它们的远程建模和泛化能力。

为了解决这些限制,作者提出了一种新的视觉Mamba模型,称为QuadMamba,它通过基于四叉树(quadtree)的图像分区和扫描有效地捕获了不同粒度局部依赖性。

具体来说,作者的轻量级四叉树扫描模块学习到在学习的窗口四角内保持空间区域2D局部性。模块根据每个 Token 的特征估计局部性分数,然后适当地将 Token 分区到窗口四角。作者还引入了一种全方位窗口平移方案,以捕获不同局部区域之间的更多完整和有用的特征。为了使离散化的四叉树分区端到端可训练,作者进一步设计了一种基于Gumbel-Softmax及其直接导数序列 Mask 策略。大量实验表明,QuadMamba在各种视觉任务中实现了最先进的性能,包括图像分类、目标检测、实例分割和语义分割。

代码已在https://github.com/VISION-SJTU/QuadMamba。

1 Introduction

结构化状态空间模型(SSMs)的架构在近年来得到了显著的普及。SSMs为序列建模提供了一种灵活的方法,在计算效率和模型灵活性之间实现了平衡。受到Mamba在语言任务中成功的影响,越来越多地使用SSMs进行各种视觉任务。这些应用范围从设计通用的 Backbone 模型 到推进图像分割 和合成(如[17])等领域。这些进步突显了Mamba在视觉领域的适应性和潜力。

尽管在长序列建模方面,SSMs具有令人满意的线性复杂度,但直接将SSMs应用于视觉任务只能带来微小的改进,这相对于常见的CNN和视觉Transformer模型。在本文中,作者试图扩大Mamba模型在计算机视觉领域的适用性。作者观察到语言和视觉领域之间的差异可能会在将Mamba应用于后者时带来巨大的障碍。

这些挑战源于图像数据的两个自然特性:

1)图像数据具有严格的2D空间依赖性,这意味着将图像块平铺成序列可能会破坏高级理解。

2)自然视觉信号具有严重的空间冗余性--例如,无关的图像块不会影响物体的表示。为了解决这两个问题,作者开发了一种专用的扫描方法,为视觉Mamba构建1D Token 序列。通常,视觉Mamba模型需要将2D图像转换为1D序列进行处理。

如图1(a)所示,直接将空间数据平铺成1D Token 会破坏自然局部2D依赖关系。LocalMamba通过将图像分割成多个窗口来提高局部表示,如图1(b)所示。每个窗口在单独扫描后,在窗口之间进行遍历,确保相同2D语义区域内的 Token 被紧密地处理在一起。然而,手工制作的窗口分割缺乏处理不同物体尺度的灵活性,并且无法忽略信息较少的区域。

图片

在本研究中,作者提出了一种名为QuadMamba的新的Mamba架构,该架构通过关注更多具有信息性的区域来提高局部表示,从而实现局部感知序列建模的改进。如图1(c)所示,QuadMamba的核心在于可学习的窗口划分,该划分能够自适应地以粗粒度到细粒度的方式建模局部依赖关系。作者提出在视觉Mamba模型中的多个轻量级预测模块,用于评估每个空间 Token 的局部邻接关系。得分最高的四分之一区域进一步以递归的方式分割为子四分之一区域进行细粒度扫描,而其他区域(可能包含信息性较弱的 Token )保持粗粒度。这一过程导致了从二维图像特征中分得的不同粒度的窗口四分之一区域。

值得注意的是,直接从基于索引的二维窗口图像特征中进行采样是非可微分的,这使得学习窗口选择变得不可行。为了解决这个问题,作者采用了Gumbel-Softmax,从分区间得分映射中生成一个序列 Mask 。然后,作者使用全可微分运算符(即Hadamard乘法和逐元素求和),从序列 Mask 和局部窗口构造一维 Token 序列。这导致了端到端可训练的流水线,计算开销可以忽略不计。对于跨越两个相邻四分之一窗口的有用 Token ,作者在连续块中应用了全方位位移方案。在两个方向上移动二维图像特征允许四分之一窗口分区间在任意位置出现的目标建模更加灵活。​

1 相关工作

Generic Vision Backbones

卷积神经网络(CNNs)[10; 30; 31]和视觉 Transformer (ViT)[7]是计算机视觉领域两种主导的后备网络。它们在广泛的计算机视觉任务中,包括但不局限于图像分类[29; 53; 55; 20; 23; 21; 74; 4; 12],分割[44; 19],目标检测[36; 79],视频理解[28; 76],生成[11]等方面,都证明了自己是通用的视觉 Backbone 网络。与CNNs的受限制的感知域不同,视觉 Transformer (ViT)[7; 42; 61]从语言任务中借用,在全局上下文建模方面具有优势。后来,为了更好地适应视觉领域,提出了许多视觉特定的修改,如引入层次特征[42; 61],优化训练[58],以及将CNN元素集成[5; 54]。因此,视觉 Transformer 在各种视觉应用中表现出色。然而,这以注意力操作的平方时间复杂度和内存复杂度为代价,尽管提出了[42; 61; 72; 57]的补救措施,但其可扩展性仍然受到阻碍。

近年来,状态空间模型(SSMs)作为一种强大的范式,在语言任务中建模顺序数据。先进的SSM模型与最先进的视觉 Transformer (ViT)架构相比,在性能上甚至更优,同时具有线性复杂度。它们在视觉任务上的初步成功,更重要的是,惊人的计算效率,暗示了SSM作为CNN和Transformer的有前途的通用后端替代品的潜力。

2 State Space Models

状态空间模型(SSMs)[16; 15; 18; 35] 是一类用于序列建模的完全循环架构。最近的研究 使得 SSMs 的性能达到了 Transformer  Level ,同时其复杂度呈线性增长。作为一项重大突破,Mamba [13] 革新了传统的 SSM,采用了输入相关的参数化方法,并支持可扩展的、面向硬件优化的计算,使其在涉及顺序 1D 数据的多种任务中,与高级 Transformer 模型相媲美或表现更优。

随着Mamba的成功,ViM [80]和VMamba [41]将Mamba的1D扫描转换为双向和四向的2D交叉扫描,以便处理图像。此后,SSMs已迅速应用于视觉任务(语义分割[51; 65; 46],目标检测[26; 3],图像修复[17; 52],图像生成[9],等)以及其他模态的数据(例如,视频[67; 32],点云[40; 73],图[2],以及跨模态学习[60; 6]。

在将Mamba适应非一维数据时,一个基本考虑因素是设计一个路径,该路径遍历并映射所有图像块到一个SSM友好的1D序列。在这个方向上,初步的工作包括ViM中的双向ZigZag扫描[80],VMamba中的4个方向交叉扫描[41],以及PlainMamba和ZigMa中的蛇形扫描[66;22],这些工作都是在高度和宽度轴所覆盖的空间域中进行的。其他工作[52;75;33]将扫描扩展到额外的通道[52;33]或时间[75;33]维度。然而,这些扫描策略在遍历块时忽视了空间局部性的重要性。LocalMamba[26]部分地缓解了这一固有弱点,它将块分成窗口并在每个窗口内进行遍历。

然而,由于整个图像域的单一致局部细粒度,由任意的窗口大小控制,很难确定最优粒度。LocalMamba选择DARTS [38]以分别搜索每个层的最佳窗口大小和最佳扫描方向,这使得方法变得更加复杂。另一方面,所有现有方法都涉及硬编码的扫描策略,这些策略可能是次优的。与所有这些方法不同,本文引入了一种可学习的四叉树结构来扫描具有不同局部细粒度的图像块。​

3 Preliminaries

状态空间模型(SSMs)[16;15;18;35]本质上是一种线性时不变系统,它通过隐藏状态  (序列长度  和状态大小  )将一维输入序列  循环映射到输出响应序列  (其中  和 

图片

其中, 矩阵  包含了演化参数;  和  是投影矩阵。然而, 在实际中, 通过零阶保持 (ZOH) 规则[16], 方程 1 通常被转化为离散形式[18], 其中 的值在样本间隔 

图片

在上述内容中,  和  是  和  的离散表示: , 并且 . 为实现高效计算, 方程 2 中的迭代计算可以并行执行, 同时进行全局卷积操作。

图片

其中  表示卷积运算符, 

选择状态空间模型(S6)。 传统状态空间模型(SSMs)具有输入无关的参数。为了改进这一点,提出了选择状态空间模型(S6)或“Mamba”,它们具有输入相关的参数,使得 和 变得可学习。为了弥补并行性困难,还进行了硬件感知的优化。在本工作中,作者特别研究了Mamba架构在视觉任务中的有效适应性。

早期的工作,如ViM [80]和V Mamba [41],通过将2D图像转换为以光栅扫描方式的一维序列来探索直观的适应性。作者认为简单的光栅扫描并不是最优设计,因为它破坏了图像的局部邻域。在作者的工作中,提出了一种基于四叉树的新颖可学习扫描方案。​

4 Method

General Architecture

QuadMamba 共享了与许多卷积神经网络(CNNs)[20; 64; 23]和视觉 Transformer (Vision Transformers)  相似的多尺度背身设计。如图2所示, 一张大小为  的图像首先被分割成大小为  的patch, 从而得到  个视觉tokens。一个线性层将这些视觉tokens映射到具有维度 

与在语言建模中使用的Mamba结构不同, QuadVSS块遵循了 Transformer 块的流行结构 , 68], 如图2(b)所示。QuadMamba由四个阶段的QuadVSS块组成,其中阶段 有 

图片

Quadtree-based Visual State Space Block

如图2所示,作者的QuadVSS块采用了视觉Transformer的元架构[68],由一个 Token 运算符、一个 FFN (FFN)和两个残差连接组成。Token 运算符包括一个位移模块、一个分区映射预测器、一个基于四叉树扫描器和一个Mamba Layer。在 Token 运算符内部,一个轻量级预测模块首先在特征 Token 上预测一个分区映射。四叉树策略然后通过递归地将二维图像空间分成四个象限或窗口来对它进行细分。根据粗粒度分区映射的得分,跳过较不具有信息量的细粒度子窗口。

因此,一个多尺度、多粒度的1D Token 序列被构建,在更具有信息量的区域捕获更多的局部性,同时保留其他区域的全球上下文建模。QuadVSS块的关键组件如下:

分区映射预测。图像特征  ,包含  个嵌入 Token,首先被投影为得分嵌入 

图片

φs 是一个轻量级的 Projector ,具有规范线性 GELU 层。为了更好地评估每个 Token 的局部性,作者利用每个象限内的本地嵌入和上下文信息。具体而言,作者首先在通道维度上对 xs 进行拆分,得到局部特征 xs^local 和全局特征 xs^global:

图片

因此, 作者得到了聚合得分嵌入 , 并将其输入到线性 GELU 层  中, 用于预测分段得分:where Interpolate  是双线性插值运算符,将上下文向量插值到空间大小为 

从而, 作者得到了聚合得分嵌入 , 并将其输入到线性 GELU 层 

图片

其中  表示在空间坐标  的 Token 的配分。基于四叉树(Quadtree)的窗口划分。在预测每个特征 Token 的划分得分 

四叉树基策略将图像特征在粗粒度 Level 划分为  个子窗口, 在细粒度 Level 划分为 

因此, 作者选择在粗粒度 Level 具有最高平均局部邻域得分的顶点 

图片

其中, 包含在粗粒度窗口和细粒度窗口中的样本,并发送到 SS2D 块进行序列建模。

为了考虑最具有信息量的 Token 跨越相邻的两个窗口四分之一,作者借用了Swin Transformer [42]中的移位窗口方案。不同之处在于,Swin Transformer在窗口内的每个 Token 内部都忽略了空间局部性,而Mamba窗口内的 Token 序列仍然具有方向性。

因此,在后续的VSS模块中,作者添加了额外的移位方向,如图4所示,与Swin Transformer中只有一个方向移位相比。

图片

Model Configuration

值得注意的是,QuadMamba模型的容量可以通过调整输入特征维度和(Q)VSS层数量来定制。在本研究中,作者构建了四种具有不同容量的QuadMamba架构变体,分别为QuadMamba-Li/T/S/B:

值得注意的是,QuadMamba-S在目标检测上比EfficientVMamba-B(一种基于Mamba的 Backbone 网络,以其更高的效率而著称)提高了3.0%的mAP,在实例分割上提高了2.2%,使用相似的参数。此外,QuadMamba-S能够跟上并甚至超越LocalVMamba-T(一种局部Mamba Backbone 网络)的表现,同时避免了表2的复杂性测量所反映的架构和扫描搜索的麻烦。

这些结果表明,QuadMamba可以作为一种实用且功能强大的视觉 Backbone 网络,在计算复杂度、设计成本和性能之间实现平衡。

图片

Semantic Segmentation on ADE20K

如图3所示,在可比的网络复杂度和效率下,QuadMamba相较于基于ConvNet的ResNet-50/101 [20]和ConvNeXt [43],基于Transformer的DeiT [58]和Swin Transformer [42],以及大多数基于Mamba的架构 [80, 49, 66],实现了显著更高的分割精度。

例如,QuadMamba-S在  的mloU下报告了优越的分割精度,超过了Vim-S (  ), LocalVim-S (46.4%), EfficientVMamba-B (46.5%),以及PlainMamba-L2 (46.8%),并且与 VMamba-T ( 

值得注意的是,LocalMamba是由神经架构搜索(NAS)技术设计的,该技术依赖于数据,并且与其他数据模式和数据源缺乏灵活性。

图片

Ablation Studies

作者从多个角度进行了消融实验来验证QuadMamba设计选择的正确性。除非另有说明,所有实验都使用了QuadMamba-T。

Mamba中局域性的影响。 作者在构建一维 Token 序列时,考虑了粗粒度和细粒度局部性建模对模型性能的影响。具体而言,作者将[80, 41]中的原始窗口无损平铺策略与三个尺度(即28x28、14x14、2x2)的窗口划分(即特征局部性的三个粒度 Level )进行了比较。在实际中,作者将QuadMamba-T模型中的QuadVSS块替换为[41]中的简单VSS块。

为了排除填充操作的负面影响,作者在第一个模型阶段只划分了空间尺寸为56x56的特征。如表4所示,原始扫描策略导致与采用窗口扫描相比,目标检测和实例分割性能显著降低。局部窗口的规模也显著影响了模型性能,这表明在给定图像分辨率的情况下,太大的或太小的窗口可能是次优的。

图片

基于四叉树的分区分辨率。作者探讨了在双层四叉树分区间策略中分区分辨率的选取。表格5中配置的分区分辨率在第一阶段两个模型中应用,特征分辨率为{56×56, 28×28, 14×14}。实验中作者推导出粗粒度窗口和细粒度窗口的最优分辨率为{1/2, 1/4}。这种手工配置的设置可能在未来的工作中被更灵活和可学习的设置所替代。

分层模型阶段的层模式 作者研究了在分层模型 Pipeline 中的层模式设计选择。从图5可以看出,层模式LP2在减少了0.2%的准确率上超过了层模式LP1。这可能是因为局部建模效果在较浅的阶段比在较深的阶段更明显,以及第三阶段的填充操作产生了负面影响。LP3在第一和第二阶段将QuadVSS模块以交错方式放置,实现了最佳性能,并作为作者的模型设计。

图片

必要性多向窗口平移。与Swin Transformer [42]中的单向平移不同,图5显示了在添加互补平移方向时,准确率提高了0.2%。这可以预见,因为Transformer中的注意力是非因果的,而Mamba中的一维序列具有因果性质,因此它们对相对位置非常敏感。在处理信息区域跨越相邻窗口的情况时,多向平移操作也是必不可少的。图6进一步可视化了在不同层级的层次结构中学习的细粒度四象限中的平移,这些四象限在不同层适当地关注不同的空间细节。

每个阶段使用的(Quad)VSS模块数量 作者进行了实验来评估每个阶段不同数量(Quad)VSS模块的影响。表6呈现了遵循图5中设计规则LP3的四个配置,固定通道维度为96。作者发现,庞大的第二或第四阶段会导致与第三阶段设计相比性能下降,而将(Quad)VSS模块在第二和第三阶段之间分配得更加均匀,可以获得与有利的复杂性相当甚至更好的性能。这些证据可以作为未来模型设计的一条基本规则,尤其是在模型扩展时。

图片

6 Conclusion

在本文中,作者提出了一种名为QuadMamba的视觉Mamba架构,作为一种通用且高效的后端,用于诸如图像分类和密集预测等视觉任务。

QuadMamba通过可学习的四叉树扫描有效地捕获了不同粒度的局部依赖关系,同时适应地保留了图像数据的固有局部性,且计算开销极低。

QuadMamba的有效性已经通过大量实验和消融研究得到证明,其性能优于流行的卷积神经网络(CNNs)和视觉 Transformer (ViTs)。

然而,QuadMamba的一个局限性是窗口分级的深度尚未探索,这可能特别适用于处理密集预测视觉任务和高分辨率数据,如遥感图像。细粒度分区的区域刚性且缺乏针对任意形状和大小的区域的灵活性,这留待作者未来研究。

作者希望作者的方法能激发进一步将Mamba应用于更多样化和复杂的视觉任务的研究。

#天工大模型4.0

国产大模型首发中文逻辑推理,o1版来了

没想到,技术发展得竟然这么快。最近,人们已经开始畅想 AI 时代后的生活了。

上周末,摩根大通 CEO 杰米・戴蒙(Jamie Dimon)表示,由于人工智能技术,未来几代人每周可以只工作三天半,活到一百岁。

一些研究认为,生成式 AI 等技术可以让目前占用人们工作时间 60-70% 的任务实现自动化。这些变革需要的技术从何而来?那一定是突破性 AI,有人整理出了各位 AI 领域大佬对通用人工智能(AGI)出现时间的预测。DeepMind 的哈萨比斯就认为,我们距离 AGI 的出现还差两到三个重大技术创新。

像 OpenAI CEO 山姆・奥特曼,甚至认为 AGI 明年就会出现。想来想去,如此自信的原因可能在于最近人们让大模型学会了「推理」的方法。

就在 9 月份,OpenAI 正式公开前所未有的复杂推理大模型 o1,这是一个重大突破,新模型既具有通用的能力,也可以解决比此前的科学、代码和数学模型能做到的更难问题。实验结果表明,在绝大多数推理任务中,o1 的表现明显优于 GPT-4o。

图片

o1 在具有挑战性的推理基准上比 GPT-4o 有了很大的改进。

OpenAI 为大模型的能力开启了新方向:「能不能像人一样思考与推理」已经成为了评判它们能力的重要指标。厂商发布的新模型要是不带点思维链,恐怕都不好意思拿出手了。

不过直到如今,o1 的正式版仍然迟迟没有推出。AI 社区尤其是国内大模型公司正在向 o1 的霸主地位发起冲击,并开始在一些权威评测中取得领先。

今天,国内首款具备中文逻辑推理能力的 o1 模型来了,它便是由昆仑万维推出的「天工大模型 4.0」 o1 版(英文名:Skywork o1)。这也是近一个月来,该公司在大模型及相关应用上的第三次大动作,此前天工 AI 高级搜索、实时语音对话 AI 助手 Skyo 先后亮相。

自即日起,Skywork o1 将开启内测,想要体验的小伙伴赶紧申请起来了。

申请地址:www.tiangong.cn

三款模型并举

角逐推理新战场

此次,Skywork o1 包含了以下三款模型,既有回馈开源社区的开放版本,也有能力更强的专用版本。

其中,开源版本的 Skywork o1 Open 参数为 8B,在各项数学和代码指标上实现显著提升,并将 Llama-3.1-8B 的性能拉到同生态位 SOTA,超越了 Qwen-2.5-7B instruct。同时,Skywork o1 Open 还解锁了 GPT-4o 等更大量级模型无法完成的数学推理任务(如 24 点计算)。这也为推理模型在轻量级设备上的部署提供了可能性。

图片

图片

另外,昆仑万维还将开源两个针对推理任务的 Process-Reward-Model(PRM),分别是 Skywork o1 Open-PRM-1.5B 和 Skywork o1 Open-PRM-7B。此前开源的 Skywork-Reward-Model 仅能对整个模型回答打分,而 Skywork o1 Open-PRM 可以细化到对模型回答中的每个步骤进行打分。

相较于开源社区现有的 PRM,Skywork o1 Open-PRM-1.5B 能达到 8B 的模型效果,例如RLHFlow 的 Llama3.1-8B-PRM-Deepseek-Data、OpenR 的 Math-psa-7B。Skywork o1 Open-PRM-7B 更强,能同时在大部分基准上接近甚至超越 10 倍量级的 Qwen2.5-Math-RM-72B。

据介绍,Skywork o1 Open-PRM 还是第一款适配代码类任务的开源 PRM。下表为以 Skywork-o1-Open-8B 作为基础模型,使用不同 PRM 在数学和代码评测集上的评估结果。

图片

图片

注:除 Skywork-o1-Open-PRM 外,其他开源 PRM 均未针对代码类任务上进行专门优化,故不进行代码任务的相关对比。

详细技术报告也将在不久后发布。目前模型和相关介绍已在 Huggingface 开源。

开源地址:https://tinyurl.com/skywork-o1

Skywork o1 Lite 具备了完整的思考能力,达到了更快的推理与思考速度,在中文逻辑和推理、数学等问题上表现尤为突出。Skywork o1 Preview 是此次完整版推理模型,搭配自研的线上推理算法,对比 Lite 版本可以呈现更多样和深度的思考过程,做到了更完善和更高质量的推理。

也许你会问,当前复现 o1 模型的工作都在推理层面下足了功夫,Skywork o1 又有什么与众不同呢?

昆仑万维表示,该系列模型在模型输出上内生了思考、计划和反思等能力,在慢思考中一步步地进行推理、反思与验证,解锁了「深思熟虑」等典型的进阶版复杂人类思考能力,确保了回答的质量和深度。

当然,Skywork o1 的成色如何,我们还是得看实战效果。

一手实测

这次 Skywork o1 彻底拿捏住了推理

机器之心提前拿到了测试资格,对 Skywork o1 系列模型,尤其是 Lite 和 Preview 版本的推理能力进行了全方位的考察。下图为 Skywork o1 Lite 的界面展示。

图片

我们先让 Skywork o1 Lite 自报家门,可以看到,模型并没有直接给出答案,而是将包括问题定位、自我能力剖析等在内的完整思考过程直观展现给用户,并且会显示思考时间,这也是如今推理模型的显著特点。

图片

接下来正式进入测试环节,我们搜罗了各种类型的推理问题,看究竟能不能绕晕 Skywork o1。

比大小、数「r」问题,不再翻车

此前,大模型在面对一些看起来非常简单的比大小、数数问题时往往翻车。现在这些问题再也难不倒 Skywork o1 Lite 了。

在比较 13.8 与 13.11 孰大孰小时,Skywork o1 Lite 给出了完整的思维链路,找出解题的关键在于小数位大小。同时模型还自我反思,二次检查自己得出的结论,并提醒容易答错的点。

图片

同样地,在正确回答「Strawberry 中有多少个 “r”?」时,Skywork o1 Lite 也是思考、验证、确认的完整链路。

图片

在回答具有扰乱项的问题时,Skywork o1 Lite 很快厘清思路,不受干扰因素的影响。

图片

玩转脑筋急转弯,不陷入语言陷阱

大模型有时会被中文语境下的脑筋急转弯问题搞糊涂,导致给出错误的答案。这次 Skywork o1 Lite 可以轻松拿下这类问题。

图片

图片

两对父子只钓到三条鱼,却每人都分到了一条,Skywork o1 Lite 能弄明白是怎么回事。

图片

掌握各种常识,告别智障属性

大模型能不能在常识推理层面接近人类水平,是提高其自身可信度、增强决策能力、拓展多领域应用的重要指标之一。Skywork o1 Lite 和 Preview 在这点上都表现不错。

比如长度(英寸、厘米、码)与质量单位(公斤)的区分。

图片

比如盐水冰块为什么比纯水冰块更容易融化。

图片

再比如一个人站在完全静止的船上,当向后跳跃时船向前运动。Skywork o1 Lite 解释清楚了现象背后的物理知识。

图片

化身做题小能手,高考题也不在话下

数学推理是解决复杂任务的基础能力,具备强大数学推理能力的大模型有助于用户高效地解决跨学科复杂任务。

在求解序列问题「2, 6, 12, 20, 30... 这个序列的第 10 项是多少?」时,Skywork o1 Lite 观察数字排列特点、找到规律、验证规律,最终给出了正确答案。

图片

在求解组合(从 10 人中选出 3 人组成一队,共多少种选择)问题时,Skywork o1 Preview 在全链路思考过后,答案正确。

图片

再来一道动态规划(硬币面值 1、3、5,最少几枚硬币凑出 11?)问题,Skywork o1 Lite 给出了最优解。

图片

我们接下来给 Skywork o1 Lite 上上难度,考它两道高考数学题,题目出自 2024 年高考全国甲卷数学(文)。

首先是一道概率题(甲、乙、丙、丁四人排成一列,丙不在排头,且甲或乙在排尾的概率是多少),Skywork o1 Lite 很快给出了正确答案。

图片

然后是函数题(

图片

),Skywork o1 Lite 解题思路、答案一气呵成。

图片

心思缜密,逻辑思辨能力很强

大模型的逻辑推理是实现更强通用人工智能的核心能力之一,而 Skywork o1 Lite 在解答这类问题时颇有心得。比如经典的说谎问题,Skywork o1 Lite 从逻辑自洽的角度分辨出谁说实话、谁在说谎。

图片

对于悖论问题,Skywork o1 Lite 也没有被蒙蔽头脑。

图片

面对道德困境,做到不偏不倚

伦理决策很大程度上是保证人工智能安全发展、遵守社会道德规范、增强用户信任与接受度的重要因素,大模型更要谨言慎行。

关于「救老婆还是救老妈」这个千古难题,Skywork o1 Lite 没有给出绝对答案,而是权衡利弊,并给出了合理的建议。

图片

还有「救多救少」的两难取舍问题,Skywork o1 Preview 也没有轻易下结论,而是提出了一些更深层次的思考。

图片

弱智吧考验,也能 hold 住

弱智吧问题常常用来考验大模型的智力水平,Skywork o1 Lite 能够轻松应答这类问题,比如高考满分 750、考上 985 的区别。

图片

再比如「午餐肉能不能在晚上吃」,Skywork o1 Lite 显然没有受到食物名称的误导。

图片

代码问题也能搞定

Skywork o1 Lite 能够解决一些代码问题,比如 LeetCode 上的孤岛个数(Number of islands)问题。

题目为「给定一个 2 维网格图,其中 “1”(陆地) 和 “0”(水),计算岛屿的数量。岛屿被水包围,通过水平或垂直连接相邻的陆地形成,你可以假设网格的四边都被水包围着。」

图片

到这里,我们可以下一波结论了:

一方面,以往大模型经常翻车的「小」问题,在推理能力加持下的 Skywork o1 眼里都是小菜一碟。另一方面,通过完整的思考与规划、自我反思以及自我验证链路,Skywork o1 在复杂问题场景同样具备缜密的思辨能力,可以更加准确、高效地输出结果。

如此一来,相较以往强得多的推理能力将激发 Skywork o1 在更多样垂类任务和领域的应用潜力,尤其是容易翻车的逻辑推理和复杂的科学、数学任务。同时上线天工之后,也势必将进一步优化在创意写作等高质量内容生成与深度搜索领域的任务效果。

国产 o1 模型

自研技术驱动

此前,我们已经见证过昆仑万维提出的一系列生成式 AI 垂直类应用,包括但不限于搜索、音乐、游戏、社交、AI 短剧等方向。在这背后,在大模型基础技术的研发上,昆仑万维早有布局。

自 2020 年起,昆仑万维开始持续加码 AI 大模型投入,ChatGPT 刚上线一个月后,该公司就发布了自己的 AIGC 模型系列。在很多垂直领域,昆仑万维都已经推出了应用,包括全球首款 AI 流媒体音乐平台 Melodio、AI 音乐创作平台 Mureka、AI 短剧平台 SkyReels 等等。

在基础技术层面上,昆仑万维目前已经构建起「算力基础设施 — 大模型算法 —AI 应用」的全产业链布局,其中「天工」系列大模型是其核心。

去年 4 月,昆仑万维发布自主研发的「天工 1.0」大模型。到今年 4 月,天工大模型升级到了 3.0 版本,采用 4 千亿级参数 MoE 混合专家模型,并同步选择开源。如今,天工 4.0 版本又基于智能涌现的方法实现了逻辑推理任务上的能力提升。

在技术上,Skywork o1 在逻辑推理任务上性能大幅提升,要得益于天工三阶段自研的训练方案,包括如下:

一是推理反思能力训练。Skywork o1 通过自研的多智能体体系构建了高质量的分步思考、反思和验证数据,并辅以高质量、多样性的长思考数据对基座模型进行继续预训练和监督微调。

二是推理能力强化学习。Skywork o1 团队研发了最新的适配分步推理强化的 Skywork o1 Process Reward Model(PRM),不仅可以有效捕捉到复杂推理任务中间步骤和思考步骤对最终答案的影响,而且结合自研分步推理强化算法进一步加强了模型推理和思考能力。

三是推理 planning。基于天工自研的 Q * 线上推理算法配合模型在线思考,并寻找最佳推理路径。这也是全球首次将 Q * 算法实现和公开,在 MATH 等数据集上可以显著提升 LLM 的推理能力,并降低计算资源的需求。

图片

在 MATH 数据集上,Q * 帮助 DeepSeek-Math-7b 提升至 55.4% 的准确率,超越了 Gemini Ultra。

Q * 算法论文地址:https://arxiv.org/abs/2406.14283

可以看出,昆仑万维的技术已经达到了业界的领先水平,在竞争激烈的生成式 AI 领域,逐渐站稳了一席之地。

相对于目前生成式 AI 应用的百花齐放,在基础技术层面上,研究已经开始走进「深水区」。只有那些经过长期积累的公司,才能构建起改变我们生活的新一代应用。

期待昆仑万维在未来给我们带来更多、更强大的技术。

#Scaling Laws for Neural Language Models

遗憾不?原来百度2017年就研究过Scaling Law,连Anthropic CEO灵感都来自百度

原来早在 2017 年,百度就进行过 Scaling Law 的相关研究,并且通过实证研究验证了深度学习模型的泛化误差和模型大小随着训练集规模的增长而呈现出可预测的幂律 scaling 关系。只是,他们当时用的是 LSTM,而非 Transformer,也没有将相关发现命名为「Scaling Law」。

在追求 AGI 的道路上,Scaling Law 是绕不开的一环。

如果 Scaling Law 撞到了天花板,扩大模型规模,增加算力不能大幅提升模型的能力,那么就需要探索新的架构创新、算法优化或跨领域的技术突破。

作为一个学术概念,Scaling Law 为人所熟知,通常归功于 OpenAI 在 2020 年发的这篇论文:

  • 论文标题:Scaling Laws for Neural Language Models
  • 论文链接:https://arxiv.org/pdf/2001.08361

论文中详细地论证了模型的性能会随模型参数量、数据量、计算资源增加而指数提升。后来的几年里,OpenAI 作为整个大模型领域的技术引领者,也将 Scaling Law 充分地发扬光大。

但关于我们今天所谈论的 Scaling law,它是怎么被发现的,谁最早发现的,又是哪个团队最早验证的,似乎很少有人去考据。

近日,Anthropic 的 CEO Dario Amodei 在播客中讲述了一个出人意料的版本。

图片

图源:https://xueqiu.com/8973695164/312384612。发布者:@pacificwater

我们可能更了解 Dario 在 2016 年之后的经历。他加入了 OpenAI,担任研究副总裁,负责公司的安全工作,并领导团队开发了 GPT-2 和 GPT-3。

然而,2020 年底,由于对 OpenAI 的发展方向产生分歧, Dario 选择离开,并于 2021 年 2 月与妹妹共同创立了 Anthropic。

如今,Anthropic 推出的 Claude 已成为挑战 GPT 系列霸主地位的最有力竞争者。

不过,Dario 原本的研究方向是神经回路,他第一次真正进入 AI 领域是在百度。

从 2014 年 11 月到 2015 年 10 月,Dario 在百度工作了一年 —— 正好是吴恩达在百度担任首席科学家,负责「百度大脑」计划的时期。

他们当时在研发语音识别系统。Dario 表示,尽管深度学习展示了很大潜力,但其他人仍然充满疑虑,认为深度学习还不足以达到预期的效果,且距离他们所期待的与人类大脑相匹配的框架还有很长的距离。

于是,Dario 开始思考,如果把百度用于语音的循环神经网络做得更大,增加更多的层数会怎样?同时扩大数据量又会怎样呢?

在不断的尝试中,Dario 观察到了随着给模型投入越多的数据、计算和训练,它们的表现就越好,「那时我没有精确地测量,但与同事们一起,我们非常直观地能感受到。」

但 Dario 和同事们也没深究,Dario 觉得:「也许这只对语音识别系统有效,也许这只是一个特定领域的特殊情况。」

直到 2017 年,他在 OpenAI 第一次看到 GPT-1 的训练结果时,他才意识到这种「越多越好」的规则同样适用于语言数据。而计算资源的增加,托起了 Scaling Law 生效的底层逻辑。

真理是不会只属于一个人的,最终它会被每个人发现。

当时有一批人都意识到了 Scaling Law 的存在,比如 Ilya Sutskever、「RL 教父」Rich Sutton、Gwern Branwen。

百度也在 2017 年发了一篇论文:「DEEP LEARNING SCALING IS PREDICTABLE, EMPIRICALLY」,展示了在机器翻译、语言建模、图像处理和语音识别等四个领域中,随着训练集规模的增长,DL 泛化误差和模型大小呈现出幂律增长模式。

图片

《NLP with Transformers》的作者 Lewis Tunstall 发现,OpenAI 在 2020 发表的《Scaling Laws for Neural Language Models》引用了百度论文一作 Joel Hestness 在 2019 年的后续研究,却没发现 Hestness 早在 2017 年就研究过同类问题。

图片

DeepMind 的研究科学家 @SamuelMLSmith 表示,原来在 NeurIPS 和 Hestness 线下交流过。但两年后 Scaling Laws 论文发表时,他对关注过这个问题,但没发论文的自己很生气。

图片

而同期注意到 Scaling Law 的 Gwern Branwen,也经常提起百度的这篇论文确实被忽视了。

图片

百度 2017 年的论文写了啥?  

这篇题为「DEEP LEARNING SCALING IS PREDICTABLE, EMPIRICALLY(深度学习扩展的可预测性:经验性研究)」发布于 2017 年。当时,机器学习先驱 Rich Sutton 还没有发布他的经典文章《苦涩的教训》(发布时间是 2019 年)。

图片

论文链接:https://arxiv.org/abs/1712.00409

论文提到,当时,深度学习社区已经通过遵循一个简单的「配方」在不同的应用领域取得了具有影响力的进展。这个「配方」如今大家已非常熟悉,即寻找更好的模型架构、创建大型训练数据集以及扩展计算。

通过分解「配方」,百度的研究者注意到,寻找更好的模型架构困难重重,因为你要对建模问题进行复杂或创造性的重构,这就涉及大规模的超参数搜索。所以,架构方面的创新很多时候要依赖「顿悟」,具有极大的偶然性。如果只把精力放在这上面,风险势必很高。

为了降低风险,百度的研究者提到,「配方」的另外两个部分 —— 创建大型训练集和扩展计算 —— 是非常值得去研究的,因为这两个方面的进展明显更加可控。而且,「只需使用更多数据来训练更大的模型,就能提高准确率」已经成为一个共识。不过,百度想更进一步,分析训练集规模、计算规模和模型准确性提高之间的关系。他们认为,准确预测泛化误差随训练集规模扩大的变化规律,将提供一个强大的工具,以估计推进 SOTA 技术所需的成本,包括数据和计算资源的需求。

在此之前,也有不少研究者进行了类似研究,分析了达到期望泛化误差所需的样本复杂度,但论文中提到,这些结果似乎不足以准确预测实际应用中的误差 scaling 规律。还有一些研究从理论上预测泛化误差「学习曲线」呈幂律形式,即 ε(m) ∝

图片

。在这里,ε 是泛化误差,m 是训练集中的样本数量,α 是问题的一个常数属性。β_g= −0.5 或−1 是定义学习曲线陡峭度的 scaling 指数 —— 即通过增加更多的训练样本,一个模型家族可以多快地学习。不过,在实际应用中,研究者发现,β_g 通常在−0.07 和−0.35 之间,这些指数是先前理论工作未能解释的。

在这篇论文中,百度的研究者提出了当时最大规模的基于实证的学习曲线特征描述,揭示了深度学习泛化误差确实显示出幂律改进,但其指数必须通过实证进行预测。作者引入了一种方法,能够准确预测随着训练集规模增加而变化的泛化误差和模型大小。他们使用这种方法来估计四个应用领域(机器翻译、语言建模、图像分类和语音识别)中的六个深度神经网络模型的 scaling 关系。

他们的结果显示,在所有测试的领域中都存在幂律学习曲线。尽管不同的应用产生了不同的幂律指数和截距,但这些学习曲线跨越了广泛的模型、优化器、正则化器和损失函数。改进的模型架构和优化器可以改善幂律截距,但不影响指数;单一领域的模型显示出相同的学习曲线陡峭度。最后,他们发现模型从小训练集区域(主要由最佳猜测主导)过渡到由幂律 scaling 主导的区域。有了足够大的训练集,模型将在主要由不可约误差(例如贝叶斯误差)主导的区域达到饱和。

图片

此外,他们还描述了可预测的准确度和模型大小 scaling 的重要意义。对于深度学习从业人员和研究人员来说,学习曲线可以帮助调试模型,并为改进的模型架构预测准确性目标。

百度的研究者在论文中表示,他们的研究结果表明,我们有机会加倍努力,从理论上预测或解释学习曲线指数。在操作上,可预测的学习曲线可以指导一些决策,如是否或如何增加数据集。最后,学习曲线和模型大小曲线可用于指导系统设计和扩展,它们强调了持续扩展计算的重要性。

图片

神经机器翻译学习曲线。

图片

单词语言模型的学习曲线和模型大小结果和趋势。

图片

字符语言模型的学习曲线和模型大小结果和趋势。

图片

ResNet 图像分类任务上的学习曲线和模型大小结果和趋势。

图片

DS2 和注意力语音模型的学习曲线(左),以及不同 DS2 模型尺寸(1.7M ~ 87M 参数)的学习曲线(右)。

关于这篇论文的细节,感兴趣的读者可以去阅读原文。

对于百度而言,早期对 Scaling Law 的研究未能及时转化为广泛的实践应用,这在公司的发展史上或许算得上是一个不小的遗憾。

参考链接:

​​https://x.com/jxmnop/status/1861473014673797411​​

​​https://arxiv.org/abs/1712.00409​​

#如何在Transformer中实现最好的位置编码

HuggingFace工程师亲授

一个有效的复杂系统总是从一个有效的简单系统演化而来的。——John Gall

在 Transformer 模型中,位置编码(Positional Encoding) 被用来表示输入序列中的单词位置。与隐式包含顺序信息的 RNN 和 CNN 不同,Transformer 的架构中没有内置处理序列顺序的机制,需要通过位置编码显式地为模型提供序列中单词的位置信息,以更好地学习序列关系。

位置编码通常通过数学函数生成,目的是为每个位置生成一个独特的向量。这些向量在嵌入空间中具有特定的性质,比如周期性和连续性。

在最近的一篇文章中,HuggingFace 机器学习工程师 Christopher Fleetwood 介绍了逐步发现 Transformer 模型中最先进位置编码的方法。为此,作者会讲述如何不断改进位置编码方法,最终形成旋转位置编码 (RoPE),并在最新的 LLama 3.2 版本和大多数现代 Transformer 中使用。在读这篇文章前,你需要掌握一些基本的线性代数、三角学和自注意力的知识。

问题陈述

与所有问题一样,最好首先了解我们想要实现的目标。Transformer 中的自注意力机制用于理解序列中 token 之间的关系。自注意力是一种集合运算,这意味着它是置换等变的。如果我们不利用位置信息来丰富自注意力,就无法确定许多重要的关系。

举例说明最能说明这一点。

考虑一下这个句子,其中同一个单词出现在不同的位置:

「这只狗追赶另一只狗」

直观地看,「狗」指的是两个不同的实体。如果我们首先对它们进行 token 化,映射到 Llama 3.2 1B 的真实 token 嵌入,并将它们传递给 torch.nn.MultiheadAttention ,会发生什么。

import torchimport torch.nn as nnfrom transformers import AutoTokenizer, AutoModelmodel_id = "meta-llama/Llama-3.2-1B"tok = AutoTokenizer.from_pretrained(model_id)model = AutoModel.from_pretrained(model_id)text = "The dog chased another dog"tokens = tok(text, return_tensors="pt")["input_ids"]embeddings = model.embed_tokens(tokens)hdim = embeddings.shape[-1]W_q = nn.Linear(hdim, hdim, bias=False)W_k = nn.Linear(hdim, hdim, bias=False)W_v = nn.Linear(hdim, hdim, bias=False)mha = nn.MultiheadAttention(embed_dim=hdim, num_heads=4, batch_first=True)with torch.no_grad():    for param in mha.parameters():        nn.init.normal_(param, std=0.1) # Initialize weights to be non-negligibleoutput, _ = mha(W_q(embeddings), W_k(embeddings), W_v(embeddings))dog1_out = output[0, 2]dog2_out = output[0, 5]print(f"Dog output identical?: {torch.allclose(dog1_out, dog2_out, atol=1e-6)}") #True

可以看到,如果没有任何位置信息,那么(多头)自注意力运算的输出对于不同位置的相同 token 是相同的,尽管这些 token 显然代表不同的实体。

让我们开始设计一种利用位置信息增强自注意力的方法,以便它可以确定按位置编码的单词之间的关系。

为了理解和设计最佳编码方案,让我们探讨一下这种方案应具备的一些理想特性。

理想特性

属性 1 :每个位置的唯一编码(跨序列)

每个位置都需要一个无论序列长度如何都保持一致的唯一编码 - 无论当前序列的长度是 10 还是 10,000,位置 5 处的标记都应该具有相同的编码。

属性 2 :两个编码位置之间的线性关系

位置之间的关系在数学上应该是简单的。如果知道位置 p 的编码,那么计算位置 p+k 的编码就应该很简单,这样模型就能更容易地学习位置模式。

如果你想一想如何在数线上表示数字,就不难理解 5 距离 3 是 2 步,或者 10 距离 15 是 5 步。同样的直观关系也应该存在于编码中。

属性 3:可泛化到比训练中遇到的序列更长的序列上

为了提高模型在现实世界中的实用性,它们应该在训练分布之外泛化。因此,编码方案需要有足够的适应性,以处理意想不到的输入长度,同时又不违反任何其他理想特性。

属性 4:由模型可以学习确定性过程生成

如果位置编码能从一个确定的过程中产生,那将是最理想的。这样,模型就能有效地学习编码方案背后的机制。

属性 5:可扩展至多个维度

随着多模态模型成为常态,位置编码方案必须能够自然地从 1D 扩展到 nD。这将使模型能够使用像图像或脑部扫描这样的数据,它们分别是 2D 和 4D 的。

现在我们知道了理想的属性(以下简称为

图片

),让我们开始设计和迭代编码方案吧。

整数位置编码

我们首先想到的方法是将 token 位置的整数值添加到 token 嵌入的每个分量中,取值范围为 0→L,其中 L 是当前序列的长度。

图片

IntegerEncoding

在上面的动画中,我们为索引中的 token 创建了位置编码向量,并将其添加到 token 嵌入中。这里的嵌入值是 Llama 3.2 1B 中真实值的子集。可以观察到,这些值都集中在 0 附近。这样可以避免在训练过程中出现梯度消失或爆炸的情况,因此,我们希望在整个模型中都能保持这种情况。

很明显,目前的方法会带来问题,位置值的大小远远超过了输入的实际值。这意味着信噪比非常低,模型很难从位置信息中分离出语义信息。

有了这一新知识,一个自然的后续方法可能是将位置值归一化为 1/N。这就将数值限制在 0 和 1 之间,但也带来了另一个问题。如果我们选择 N 为当前序列的长度,那么每个长度不同的序列的位置值就会完全不同,这就违反了

图片

有没有更好的方法来确保我们的数字介于 0 和 1 之间呢?如果我们认真思考一段时间,也许会想到将十进制数转换为二进制数。

二进制位置编码

我们可以将其转换为二进制表示法,并将我们的值(可能已归一化)与嵌入维度相匹配,而不是将我们的(可能已归一化的)整数位置添加到嵌入的每个分量中,如下图所示。

图片

BinaryEncoding

我们将感兴趣的位置(252)转换为二进制表示(11111100),并将每一位添加到 token 嵌入的相应组件中。最小有效位(LSB)将在每个后续标记的 0 和 1 之间循环,而最大有效位(MSB)将每 2^(n-1) 个 token 循环一次,其中 n 是位数。你可以在下面的动画中看到不同索引的位置编码向量。

图片

我们已经解决了数值范围的问题,现在我们有了在不同序列长度上保持一致的唯一编码。如果我们绘制 token 嵌入的低维版本,并可视化不同值的二进制位置向量的加法,会发生什么情况呢?

可以看到,结果非常「跳跃」(正如我们对二进制离散性的预期)。优化过程喜欢平滑、连续和可预测的变化。那么有哪些具有类似取值范围的函数是平滑连续的吗?

如果我们稍加留意,就会发现 sin 和 cos 都符合要求!

正弦位置编码

图片

上面的动画形象地展示了我们的位置嵌入,如果每个分量都是由波长逐渐增加的 sin 和 cos 交替绘制而成。如果将其与之前的动画进行比较,你会发现两者有惊人的相似之处。

现在,我们已经掌握了正弦波嵌入的方法,这最初是在《Attention is all you need》论文中定义的。让我们来看看方程式:

图片

其中,pos 是词块位置索引,i 是位置编码向量中的分量索引,d 是模型维度。10,000 是基本波长(下文简称为 θ),我们根据分量索引的函数对其进行拉伸或压缩。我鼓励大家输入一些实际值来感受这种几何级数。

这个等式有几个部分乍看之下令人困惑。作者是如何选择 10,00 的?为什么偶数和奇数位置分别使用 sin 和 cos?

看来,使用 10000 作为基本波长是通过实验确定的。破解 sin 和 cos 的用法涉及的问题较多,但对我们的迭代理解方法至关重要。这里的关键是我们希望两个编码位置之间存在线性关系 (

图片

)。要理解正弦和余弦如何配合使用才能产生这种线性关系,我们必须深入学习一些三角学知识。

考虑一串正弦和余弦对,每对都与频率 ω_i 相关联。我们的目标是找到一个线性变换矩阵 M,它能将这些正弦函数移动一个固定的偏移量 k:

图片

频率 ω_i 随维度指数 i 递减,其几何级数为:

图片

要找到这个变换矩阵,我们可以将其表示为一个包含未知系数 u_1、v_1、u_2 和 v_2 的一般 2×2 矩阵:

图片

根据三角加法定理,我们可以将右边的公式扩展为:

图片

通过匹配系数,此展开式为我们提供了两个方程的系统:

图片

通过比较两边的 sin (ω_ip) 和 cos (ω_ip) 项,我们可以解出未知系数:

图片

这些解决方案为我们提供了最终的变换矩阵 M_k:

图片

如果你以前做过游戏编程,你可能会发现我们的推导结果非常熟悉。没错,这就是旋转矩阵。

因此,早在 2017 年,Noam Shazeer 在《Attention is all you need》论文中设计的编码方案就已经将相对位置编码为旋转。从正弦编码到 RoPE 又花了 4 年时间,尽管旋转已经摆在桌面上......

绝对 vs 相对位置编码

在了解了旋转在这里的重要性之后,让我们回到我们的激励样本,尝试为下一次迭代发现一些直觉。

图片

在上面,我们可以看到 token 的绝对位置,以及从 chased 到其他 token 的相对位置。通过正弦编码,我们生成了一个单独的向量来表示绝对位置,并使用一些三角函数技巧来编码相对位置。

当我们试图理解这些句子时,这个单词是这篇博文的第 2149 个单词重要吗?还是我们关心它与周围单词的关系?一个单词的绝对位置对其意义来说很少重要,重要的是单词之间的关系。

上下文中的位置编码

从这一点出发,在自注意力的背景下考虑位置编码是关键。重申一下,自注意力机制使模型能够衡量输入序列中不同元素的重要性,并动态调整它们对输出的影响。

图片

在我们以前的迭代中,我们已经生成了一个单独的位置编码向量,并在 Q、 K 和 V 投影之前将其添加到我们的 token 嵌入中。通过将位置信息直接添加到 token 嵌入中,我们正在用位置信息污染语义信息。我们应该尝试在不修改规范的情况下对信息进行编码。转向乘法是关键。

使用字典类比,当查找一个词 (查询) 在我们的字典 (键) ,附近的词应该比遥远的词有更多的影响。一个 token 对另一个 token 的影响是由 QK^T 点积决定的 —— 所以这正是我们应该关注位置编码的地方。

图片

上面显示的点乘的几何解释给了我们一个洞察:我们可以通过增加或减小两个向量之间的夹角来调整我们的两个向量的点积的结果。此外,通过旋转向量,我们对向量的范数完全没有影响,这个范数编码了我们 token 的语义信息。

因此,现在我们知道注意力集中在哪里,并且从另一个角度看到了为什么旋转可能是一个合理的「通道」,在其中编码我们的位置信息,让我们把它们放在一起。

旋转位置编码

RoForm 的论文中定义了旋转位置编码或 RoPE (苏剑林在他的博客中独立设计了它)。如果你直接跳到最终结果,这看起来像是巫术,通过在自注意力 (更具体地说是点积) 的背景下思考正弦编码,我们可以看到它是如何整合在一起的。

就像在 Sinusoidal Encoding 一样,我们把向量 (q 或 k,而不是预先投影 x) 分解成 2D 对 / 块。我们没有直接编码绝对位置,而是加入一个我们从频率缓慢递减的正弦函数中提取的矢量,我们切入 chase,通过将每对旋转矩阵相乘来编码相对位置。

设 q 或 k 是位置为 p 的输入向量。我们创建了一个块对角矩阵,其中 M_i 是该组件对所需旋转的对应旋转矩阵:

图片

与正弦编码非常相似,M_i 是简单的:

图片

图片

在实践中,我们不使用矩阵乘法来计算 RoPE,因为使用这样一个稀疏的矩阵会导致计算效率低下。相反,我们可以利用计算中的规则模式,将旋转直接应用于独立的元素对:

图片

就是这样!通过巧妙地将我们的旋转应用于点积之前的 q 和 k 的 2D 块,并从加法转换为乘法,我们可以在评估中获得很大的性能提升。

将 RoPE 扩展到 n 维

我们已经探讨了 1D 情况下的 RoPE,这一点,我希望你已经获得了一个直观的理解,公认的非直观组成部分的 transformer。最后,让我们探索如何将其扩展到更高的维度,例如图像。

第一直觉可能是直接使用图像中的

图片

坐标对。这可能看起来很直观,毕竟,我们之前几乎是任意地对组件进行配对。然而,这会是一个错误!

在 1D 情况下,我们通过从输入向量旋转一对值来编码相对位置 m-n。对于 2D 数据,我们需要编码水平和垂直的相对位置,比如 m-n 和 i-j 是独立的。RoPE 的优势在于它如何处理多个维度。我们没有尝试在一个旋转中编码所有位置信息,而是将同一维度内的组件配对并旋转它们,否则我们将混合使用 x 和 y 偏移量信息。通过独立处理每个维度,我们保持了空间的自然结构。这可以根据需要推广到任意多个维度!

位置编码的未来

RoPE 是位置编码的最终化身吗?DeepMind 最近的一篇论文(https://arxiv.org/pdf/2410.06205)深入分析了 RoPE,并强调了一些基本问题。

我预计未来会有一些突破,也许会从信号处理中获得灵感,比如小波或者分层实现。随着模型越来越多地被量化用于部署,我也希望在编码方案中看到一些创新,这些编码方案在低精度算术下仍然具有鲁棒性。

参考链接:https://fleetwood.dev/posts/you-could-have-designed-SOTA-positional-encoding

#LLM2CLIP

跨模态大升级!少量数据高效微调,LLM教会CLIP玩转复杂文本

在当今多模态领域,CLIP 模型凭借其卓越的视觉与文本对齐能力,推动了视觉基础模型的发展。CLIP 通过对大规模图文对的对比学习,将视觉与语言信号嵌入到同一特征空间中,受到了广泛应用。

然而,CLIP 的文本处理能力被广为诟病,难以充分理解长文本和复杂的知识表达。随着大语言模型的发展,新的可能性逐渐显现:LLM 可以引入更丰富的开放时间知识、更强的文本理解力,极大提升 CLIP 的多模态表示学习能力。

在此背景下,来自同济大学和微软的研究团队提出了 LLM2CLIP。这一创新方法将 LLM 作为 CLIP 的强力 「私教」,以少量数据的高效微调为 CLIP 注入开放世界知识,让它能真正构建一个的跨模态空间。在零样本检索任务上,CLIP 也达成了前所未有的性能提升。

  • 论文标题:LLM2CLIP: POWERFUL LANGUAGE MODEL UNLOCKS RICHER VISUAL REPRESENTATION
  • 论文链接:https://arxiv.org/pdf/2411.04997
  • 代码仓库:https://github.com/microsoft/LLM2CLIP
  • 模型下载:https://huggingface.co/collections/microsoft/llm2clip-672323a266173cfa40b32d4c

在实际应用中,LLM2CLIP 的效果得到了广泛认可,迅速吸引了社区的关注和支持。

HuggingFace 一周内的下载量就破了两万,GitHub 也突破了 200+ stars!

图片

值得注意的是, LLM2CLIP 可以让完全用英文训练的 CLIP 模型,在中文检索任务中超越中文 CLIP。

此外,LLM2CLIP 也能够在多模态大模型(如 LLaVA)的训练中显著提升复杂视觉推理的表现。

代码与模型均已公开,欢迎访问 https://aka.ms/llm2clip 了解详情和试用。

图片

LLM2CLIP 目前已被 NeurIPS 2024 Workshop: Self-Supervised Learning - Theory and Practice 接收。

研究背景

CLIP 的横空出世标志着视觉与语言领域的一次革命。不同于传统的视觉模型(如 ImageNet 预训练的 ResNet 和 ViT)依赖简单的分类标签,CLIP 基于图文对的对比学习,通过自然语言的描述获得了更丰富的视觉特征,更加符合人类对于视觉信号的定义。

这种监督信号不仅仅是一个标签,而是一个富有层次的信息集合,从而让 CLIP 拥有更加细腻的视觉理解能力,适应零样本分类、检测、分割等多种任务。可以说,CLIP 的成功奠基于自然语言的监督,是一种新时代的 「ImageNet 预训练」。

虽然 CLIP 在视觉表示学习中取得了成功,但其在处理长文本和复杂描述上存在明显限制。而大语言模型(LLM)例如 GPT-4 和 Llama,通过预训练掌握了丰富的开放世界知识,拥有更强的文本理解和生成能力。

将 LLM 的这些能力引入到 CLIP 中,可以大大拓宽 CLIP 的性能上限,增强其处理长文本、复杂知识的能力。借助 LLM 的知识扩展,CLIP 在图文对齐任务中的学习效率也得以提升。

图片

原始的 LLM 无法给 CLIP 带来有意义的监督

事实上,将 LLM 与 CLIP 结合看似简单粗暴,实际并非易事。直接将 LLM 集成到 CLIP 中会引发「灾难」,CLIP 无法产生有效的表示。

这是由于 LLM 的文本理解能力隐藏在内部,它的输出特征空间并不具备很好的特征可分性。

于是,该团队设计了一个图像 caption 到 caption 的检索实验,使用 COCO 数据集上同一张图像的两个不同 caption 互相作为正样本进行文本检索。

他们发现原生的 llama3 8B 甚至无法找到十分匹配的 caption,例如 plane 和 bat 的距离更近,但是离 airplane 的距离更远,这有点离谱了,因此它只取得了 18.4% 的召回率。

显然,这样的输出空间无法给 CLIP 的 vision encoder 一个有意义的监督,LLM 无法帮助 CLIP 的进行有意义的特征学习。

图片

图像描述对比微调是融合 LLM 与 CLIP 的秘诀

从上述观察,研究团队意识到必须对提升 LLM 输出空间对图像表述的可分性,才有可能取得突破。

为了让 LLM 能够让相似的 caption 接近,让不同图像的 caption 远离,他们设计了一个新的图像描述对比微调 ——Caption-Contrastive(CC)finetuning。

该团队对训练集中每张图像都标注了两个以上 caption,再采用同一个图像的 caption 作为正样本,不同图像的 caption 作为负样本来进行对比学习,来提升 LLM 对于不同画面的描述的区分度。

图片

实验证明,这个设计可以轻易的提升上述 caption2caption 检索的准确率,从上述 cases 也可以看出召回的例子开始变得有意义。

高效训练范式 LLM2CLIP

让 SOTA 更加 SOTA

LLM2CLIP 这一高效的训练范式具体是怎么生效的呢?

首先,要先使用少量数据对 LLM 进行微调,增强文本特征更具区分力,进而作为 CLIP 视觉编码器的强力 「教师」。这种设计让 LLM 中的文本理解力被有效提取,CLIP 在各种跨模态任务中获得显著性能提升。

实验结果表明,LLM2CLIP 甚至能在不增加大规模训练数据的情况下,将当前 SOTA 的 CLIP 性能提升超过 16%。

图片

英文训练,中文超越,CLIP 的语言能力再拓展

一个令人惊喜的发现是,LLM2CLIP 的开放世界知识不仅提升了 CLIP 在英文任务中的表现,还能赋予其多语言理解能力。

尽管 LLM2CLIP 仅在英文数据上进行了训练,但在中文图文检索任务上却超越了中文 CLIP 模型。这一突破让 CLIP 不仅在英文数据上达到领先水平,同时在跨语言任务中也展现了前所未有的优势。

图片

提升多模态大模型的复杂视觉推理性能

LLM2CLIP 的优势还不止于此。当该团队将 LLM2CLIP 应用于多模态大模型 LLaVA 的训练时,显著提升了 LLaVA 在复杂视觉推理任务中的表现。

LLaVA 的视觉编码器通过 LLM2CLIP 微调后的 CLIP 增强了对细节和语义的理解能力,使其在视觉问答、场景描述等任务中取得了全面的性能提升。

总之,该团队希望通过 LLM2CLIP 技术,推动大模型的能力反哺多模态社区,同时为基础模型的预训练方法带来新的突破。

LLM2CLIP 的目标是让现有的预训练基础模型更加强大,为多模态研究提供更高效的工具。

除了完整的训练代码,他们也逐步发布了经过 LLM2CLIP 微调的主流跨模态基础模型,期待这些模型能被应用到更多有价值的场景中,挖掘出更丰富的能力。


http://www.mrgr.cn/news/78455.html

相关文章:

  • 扫雷-完整源码(C语言实现)
  • redis中的bigkey及读取优化
  • 【计算机网络】计算机网络概述
  • jenkins 2.346.1最后一个支持java8的版本搭建
  • 【Petri网导论学习笔记】Petri网导论入门学习(十) —— 3.2 关联矩阵与状态方程
  • 在线音乐播放器 —— 测试报告
  • 性能监控系统Prometheus整合到Grafana教程详解搭建
  • 【Leetcode 每日一题】3250. 单调数组对的数目 I
  • Qt—QLabel 使用总结
  • 工作记录—DUYAO-JIEYAO系统进化与单倍型分析
  • 使用docker搭建hysteria2服务端
  • 阅文集团大数据面试题及参考答案
  • STL算法之基本算法<stl_algobase.h>
  • python的数据统计与处理
  • ChatGPT/AI辅助网络安全运营之-数据解压缩
  • 《气候变化研究进展》
  • 搭建私有云存储
  • AI界的信仰危机:单靠“规模化”智能增长的假设,正在面临挑战
  • 【C++】cin、cout基础编程题:完整解析与优化解法
  • 水体分割检测 包含YOLOV,COCO,VOC三种标记的数据集包含 857张图片
  • Android Glide批量加载Bitmap,拼接组装大Bitmap,更新单个AppCompatImageView,Kotlin(3)
  • SQL Server 中的游标:介绍、效率、使用场景及替代方法对比
  • 嵌入式C语言技巧15:深入浅出:多线程编程中锁的选择与优化策略
  • Linux(ubuntu)系统的一些基本操作和命令(持续更新)
  • java全栈day10--后端Web基础(基础知识)之续集
  • 全面了解 Cookies、Session 和 Token