跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

大模型入门教程:从人工智能到 Transformer 原理详解

大型语言模型(LLM)的入门知识,涵盖人工智能、机器学习、神经网络、深度学习等基础概念。重点解析了 Transformer 架构的核心组件,包括编码器、解码器、自注意力机制及 QKV 向量运算。文章还探讨了 ChatGPT 的特殊性,解释了指令调优和人类反馈强化学习(RLHF)的作用。内容强调了 LLM 的本质是概率预测而非真正的推理,指出了幻觉、偏见及缺乏规划能力等局限性,并提供了实用的学习路径建议,包括 Python 基础、框架使用及开源模型部署实践。

暗影行者发布于 2025/2/7更新于 2026/9/455 浏览
大模型入门教程:从人工智能到 Transformer 原理详解

1. 引言

本文旨在为没有计算机科学背景的人士提供关于 ChatGPT 及类似 AI 系统(GPT-3、GPT-4、Bing Chat、Bard 等)的工作原理的洞察。ChatGPT 是一种聊天机器人——一种基于大型语言模型构建的对话式 AI。这些肯定是些专业术语,我们将逐一解析。在此过程中,我们将讨论它们背后的核心概念。阅读本文不需要任何技术或数学背景。我们将大量使用隐喻来阐述这些概念。我们将讨论这些核心概念为何以这种方式工作,以及我们可以期待或不期待像 ChatGPT 这样的大型语言模型能做什么。

我们将要做什么呢?我们将会轻松地走过一些与大型语言模型和 ChatGPT 相关的术语,尽量避免使用行话。如果我必须使用专业术语,我会尽量用简单的语言解释。我们将从最基础的'什么是人工智能'开始,逐步深入。我会尽可能使用一些反复出现的比喻。我还会讨论这些技术的含义,包括我们应该期待它们做什么或不应该期待它们做什么。

2. 什么是人工智能?

但首先,让我们从一些你可能经常听到的基本术语开始。什么是人工智能?

• 人工智能:一个实体,如果人类做类似的事情,人们可能会合理地称之为智能的行为。

使用'智能'这个词来定义人工智能有点问题,但没有人能就'智能'的好定义达成一致。然而,我认为这种定义仍然相当合理。它基本上是说,如果我们观察到一些人造的东西,它做的事情既吸引人又有用,而且看起来有些非平凡,那么我们可能会称之为智能。例如,我们经常将'AI'这个术语归因于电脑游戏中的电脑控制角色。这些机器人中的大多数是简单的 if-then-else 代码(例如,'如果玩家在射程内则射击,否则移动到最近的大石头后面躲避')。但是,如果它们做得很好,能够让我们保持参与和娱乐,并且没有做任何明显愚蠢的事情,那么我们可能会认为它们比实际上更为复杂。

一旦我们开始理解某样东西是如何运作的,我们可能就不会那么感到惊讶了,而是期待背后有更复杂的机制。这一切都取决于你对幕后发生的事情了解多少。

关键点是人工智能不是魔法。正因为它不是魔法,所以它是可以被解释的。

3. 什么是机器学习?

另一个你经常会听到与人工智能联系在一起的术语是机器学习。

• 机器学习:通过接收数据、形成模型,然后执行模型来创造行为的一种方式。

有时,手动创建一大堆 if-then-else 语句来捕捉一些复杂的现象,比如语言,是非常困难的。在这种情况下,我们尝试找到大量数据并使用可以在数据中找到模式的算法来建模。

但什么是模型呢?模型是某种复杂现象的简化。例如,模型车只是真实汽车的一个更小、更简单的版本,它具有许多相同的特征,但并不意味着要完全替代原始物品。模型车可能看起来很真实,并且对某些目的而言是有用的,但我们不能驾驶它去商店。

就像我们可以制造一辆更小、更简单的汽车一样,我们也可以创建人类语言的更小、更简单的版本。我们使用术语大型语言模型,因为从使用它们所需的内存量的角度来看,这些模型确实是大型的。目前投入生产的最大型号模型,如 ChatGPT、GPT-3 和 GPT-4,其规模之大需要在数据中心服务器中运行的庞大超级计算机来创建和运行。

4. 什么是神经网络?

有许多方法可以从数据中学习模型。神经网络就是其中一种方式。这项技术大致基于人脑是由一个称为神经元的相互连接的脑细胞网络组成,这些脑细胞通过来回传递电信号,不知怎的让我们能够做所有我们所做的事情。神经网络的基本概念在 1940 年代被发明,而关于如何训练它们的基本概念则是在 1980 年代被发明的。神经网络非常低效,直到大约 2017 年,计算机硬件才足够好,能够大规模使用它们。

但我更喜欢用电路的比喻来思考神经网络,而不是大脑。你不需要成为一名电气工程师就能知道,电流会通过导线流动,我们有一种叫做电阻的东西,它使得电流更难通过电路的某些部分。

想象一下,你想制造一辆能够在高速公路上行驶的自动驾驶汽车。你已经在汽车的前面、后面和侧面装配了接近传感器。当有东西非常靠近时,接近传感器会报告 1.0 的值,当附近没有检测到任何东西时,会报告 0.0 的值。

你还对你的车进行了改装,以便机器人机制可以转动方向盘、踩下刹车和踩下油门。当油门接收到 1.0 的值时,它会使用最大加速度,而 0.0 意味着没有加速。同样,发送给刹车机制的 1.0 值意味着猛踩刹车,而 0.0 意味着不刹车。方向盘机制接收 -1.0 到 +1.0 的值,负值意味着向左转,正值意味着向右转,而 0.0 意味着保持直行。

你还记录了有关你如何驾驶的数据。当前方道路畅通时,你会加速。当前方有车时,你会减速。当左侧有车太靠近时,你会向右转并换道。当然,除非你右边也有车。这是一个涉及不同动作组合(向左转向、向右转向、加速或减速、刹车)的复杂过程,基于不同组合的传感器信息。

现在你需要将传感器与机器人机构连接起来。你怎么做呢?这不太清楚。所以你将每个传感器都连接到每个机器人执行器上。

神经网络作为连接传感器和执行器的电路。

当你开车上路时会发生什么呢?电流从所有传感器流向所有机器人执行器,汽车同时向左转向、向右转向、加速和刹车。这简直是一团糟。

当我们的一些传感器发送能量时,该能量会流向所有的执行器,汽车会同时加速、刹车和转向。 这样不行。所以我拿起我的电阻,开始将它们放置在电路的不同部位,这样可以让电能在某些传感器和某些机器人执行器之间更自由地流动。例如,我希望电能从前方接近传感器更自由地流向刹车,而不是方向盘。我还安装了一些被称为门的东西,它们会阻止电流的流动,直到积累足够的电量来触发开关(只有当前方接近传感器和后方接近传感器报告高数值时,才允许电流流动),或者只有在输入电力强度低时才向前发送电能(当前方接近传感器报告低值时,向加速器发送更多电力)。

但我应该把这些电阻和门放在哪里呢?我不知道。我开始随机地把它们放到各处。然后我再试一次。也许这次我的汽车驾驶得更好了,意味着有时它会在数据显示最好刹车的时候刹车,在数据显示最好转向的时候转向,等等。但它并没有做到所有事情都正确。并且有些事情它做得更糟(在数据显示最好刹车的时候却加速)。所以,我继续随机尝试不同的电阻和门的组合。最终,我会偶然发现一个运作得足够好的组合,我宣布成功。

在现实中,我们并不是添加或减少门(它们始终存在),而是修改门的设置,使其在来自下方的能量较少时也能激活,或者需要更多来自下方的能量才能激活,或许在来自下方的能量非常少时释放大量能量。机器学习的纯粹主义者可能会对这种描述有点反感。技术上,这是通过调整称为偏置的东西来完成的,这在这类图表中通常不会显示,但如果用电路的比喻来说,可以被认为是一根直接插入电源的线进入每个门,然后可以像所有其他线一样被修改。

我们来试驾一下!

随机尝试实在是太糟糕了。一种叫做反向传播的算法在猜测如何改变电路配置方面相当有效。除了知道它通过对电路进行微小的调整,使电路的行为更接近数据所建议的动作,并且通过成千上万次的调整,最终能够得到与数据相近似的结果之外,这个算法的细节并不重要。

我们将电阻器和门电路称为参数,因为实际上它们无处不在,而反向传播算法所做的就是声明每个电阻器的强度是强还是弱。因此,如果我们知道电路的布局和参数值,那么整个电路就可以在其他汽车中复制。

5. 什么是深度学习?

深度学习 是一个认识,我们可以在电路中放入其他东西,而不仅仅是电阻和门。例如,我们可以在电路中间放入一个进行加法和乘法计算的数学运算,然后再向前发送电流。深度学习仍然使用相同的基本增量技术来猜测参数。

6. 什么是语言模型?

当我们做汽车的例子时,我们试图让我们的神经网络执行与我们的数据一致的行为。我们在问,我们是否能创建一个电路,以与驾驶员在类似情况下操作汽车的机制相同的方式来操纵这些机制。我们可以以相同的方式对待语言。我们可以查看人类编写的文本,并想知道一个电路是否能产生一系列单词,这些单词看起来与人类倾向于产生的单词序列非常相似。现在,当我们看到单词时,我们的传感器会触发,我们的输出机制也是单词。

我们在尝试做什么?我们尝试创建一个电路,它能够根据一系列输入单词猜测一个输出单词。例如:

'从前有一个______'

看起来应该在空白处填入'时间',而不是'犰狳'。

我们倾向于用概率来谈论语言模型。数学上,我们将上面的例子写成:

P(时间 | 从前有一个)

如果你不熟悉这种符号表示,不用担心。这只是数学上的一种表达,意味着在给定一串单词'从前'、'有一个'的情况下,单词'时间'的概率(P)。我们期望一个好的语言模型能够产生比单词'犰狳'更高的'时间'单词概率。

我们可以将其概括为:

P(w_n | w_1, ..., w_{n-1})

这意味着计算序列中第 n 个单词的概率,给定它之前的所有单词(位置在 1 到 n-1 之间的单词)。

但让我们稍微退后一点来看。想象一下老式打字机,那种有打字臂的。

这张图片是由 DALL-E2 生成的。看看所有那些打字臂!

但不同的是,与其说每个字母有一个不同的打字臂,不如说我们对每个单词都有一个打字器。如果英语有 50,000 个单词,那么这将是一台非常大的打字机! 不要想象汽车的网络,而是想象一个类似的网络,不同之处在于我们的电路顶部有 50,000 个输出,每个都连接着一个打击臂,对应每一个词。相应地,我们将有 50,000 个传感器,每个传感器检测不同输入词的存在。因此,我们在一天结束时所做的就是选择一个获得最高电信号的打击臂,那就是填入空白处的词。 我们的情况是这样的:如果我想制作一个简单的电路,输入一个单词并输出一个单词,我需要制作一个电路,它拥有 50,000 个传感器(每个单词一个)和 50,000 个输出(每个击键臂一个)。我只需将每个传感器和每个击键臂连接起来,总共需要 50,000 x 50,000 = 25 亿根电线。

这是一个庞大的网络! 但情况会更糟。如果我想要做'从前有一个______'的例子,我需要感知每一个输入位置的词语。我将需要 50,000 x 3 = 150,000 个传感器。连接到 50,000 个敲击臂,这意味着我需要 150,000 x 50,000 = 75 亿根电线。截至 2023 年,大多数大型语言模型能够处理 4,000 个单词,最大的能处理 32,000 个单词。我的眼睛都模糊了。

我们需要一些技巧来应对这种情况。我们将分阶段进行。

6.1 编码器

我们要做的第一件事是将我们的电路分成两个电路,一个称为编码器,另一个称为解码器。其洞察力在于很多词汇的意思大致相同。考虑以下短语:

国王坐在了______上 女王坐在了______上 公主坐在了______上 摄政王坐在了______上

对于上述所有空白处的合理猜测可能是'王座'(或者可能是'厕所')。也就是说,我可能不需要在'国王'和'王座'之间,或者'女王'和'王座'之间等设置单独的连线。相反,如果我有某个大致意味着皇室的东西,并且每次我看到'国王'或'女王'时就使用这个中间事物代替,那将会很好。然后,我只需要担心哪些词大致意味着相同的事物,以及接下来怎么做(向'王座'发送大量能量)。

所以,我们要做的是这样的。我们将设置一个电路,它接收 50,000 个词感应器的输入,并将其映射到一组较小的输出上,比如说不是 50,000 而是 256。与其只能触发一个击打臂,不如说我们能够同时压下一堆击打臂。每一种可能的击打臂组合都能代表一个不同的概念(比如'皇室'或'装甲哺乳动物')。这 256 个输出将使我们能够表示 2^256 = 1.15 x 10^78 种概念。实际上,因为就像在车辆示例中我们可以半途踩下刹车一样,这 256 个输出并不仅仅是 1.0 或 0.0,而是可以是之间的任何数值,所以情况会更多。也许更好的比喻是,所有 256 个击打臂都按下去,但每个都以不同的力量按下。

好的… 所以之前,一个单词需要触发 50000 个传感器中的一个。现在,我们将一个激活的传感器和 49999 个关闭的传感器简化为 256 个数字。因此,'king'可能是 [0.1, 0.0, 0.9, …, 0.4],而'queen'可能是 [0.1, 0.1, 0.9, …, 0.4],它们几乎彼此相同。我将这些数字列表称为编码(也称为隐藏状态,出于历史原因,但我不想解释这个,所以我们将坚持使用编码)。我们称将我们的 50000 个传感器压缩成 256 个输出的电路为编码器。它看起来是这样的:

一个编码器网络将检测单个单词所需的 50,000 个传感器值压缩成一个由 256 个数字组成的编码(使用较浅和较深的蓝色来表示较高或较低的值)。

6.2 解码器

但是编码器并不能告诉我们下一个单词应该是什么。因此,我们将编码器与一个解码器网络配对。解码器是另一个电路,它接收组成编码的 256 个数字,并激活原始的 50,000 个触发臂,每个单词一个。然后,我们会选择电流输出最高的单词。这就是它的样子:

解码器网络,将编码中的 256 个值扩展成与每个可能的单词相关联的 50,000 个打击臂的激活值。一个单词激活最高值。

6.3 编码器和解码器一起使用

这里展示了编码器和解码器一起工作以形成一个大型神经网络:

一个编码器 - 解码器网络。它只是一个解码器放在编码器之上。 顺便说一句,单词输入到单词输出,只通过编码的过程仅需要(50,000 x 256)x 2 = 2560 万个参数。这看起来好多了。 这个例子是针对单词输入并产生单词输出的,所以如果我们想要读取 n 个单词,我们将会有 50,000 x n 个输入,以及 256 x n 个用于编码的。 但为什么这会起作用呢?通过强迫 50,000 个单词全部适应一小套数字,我们迫使网络做出妥协,并将可能触发相同输出单词猜测的单词归为一组。这很像文件压缩。当你压缩一个文本文档时,你会得到一个较小的、不再可读的文档。但是你可以解压该文档并恢复原始的可读文本。这可以做到,因为压缩程序用一种速记符号替换了特定的单词模式。然后当它解压时,它知道要为速记符号换回哪些文本。我们的编码器和解码器电路学会了一种配置电阻和门的方式,来压缩然后解压单词。

6.4 自监督

我们如何知道每个词的最佳编码是什么?换句话说,我们怎么知道'king'(国王)的编码应该与'queen'(女王)的编码相似,而不是与'armadillo'(犰狳)的编码相似呢?

作为一个思维实验,考虑一个编码器 - 解码器网络,它应该接收一个单词(50,000 个感应器)并产生与输入完全相同的单词作为输出。这么做似乎很愚蠢,但对于接下来将要讲述的内容而言,这非常有启发性。

一个经过训练的编码器 - 解码器网络,用于输出与输入相同的单词(它是之前相同的图像,但用颜色表示激活状态)。 我输入单词'king',一个传感器发送电信号通过编码器,并在中间的编码中部分激活了 256 个值。如果编码正确,那么解码器将向同一个单词'king'发送最高的电信号。听起来很简单对吧?但事情并非如此简单。我很可能看到带有单词'armadillo'的激活臂显示出最高的激活能量。假设'king'的激活臂得到了 0.051 的电信号,而'armadillo'的激活臂得到了 0.23 的电信号。实际上,我甚至不关心'armadillo'的值是多少。我只需查看'king'的输出能量,就知道它不是 1.0。1.0 与 0.051 之间的差异就是错误(也称为损失),我可以使用反向传播对解码器和编码器进行一些修改,以便下次我们遇到单词'king'时,创建一个略有不同的编码。 我们对所有单词都这样做。编码器将不得不妥协,因为 256 远小于 50,000。也就是说,有些单词将不得不使用中间相同的激活能量组合。因此,当有选择时,它会希望'国王'和'王后'的编码几乎相同,而'犰狳'的编码则完全不同。这将使解码器通过仅查看 256 个编码值就有更好的机会猜出单词。如果解码器看到 256 个特定值的组合,并猜测'国王'为 0.43,'王后'为 0.42,只要'国王'和'王后'获得最高的电信号,而其他 49,998 个触发臂得到的数字更小,我们就会认为这是可以接受的。换句话说,如果网络在国王和王后之间感到困惑,相比之下,如果网络在国王和犰狳之间感到困惑,我们可能会更能接受。 网络猜测所有的词。嗯,猜测未被掩码的词相当容易。我们只真正关心网络对被掩码词的猜测。也就是说,对于输出中的每个词,我们有 50,000 个打击臂。我们观察被掩码词的 50,000 个打击臂。

掩码一个序列。我开始厌倦了画很多连接线,所以我将只画红线来表示上面和下面之间有很多很多的连接。 我们可以在不同的位置移动掩码,并让网络在不同的位置猜测不同的词。 一种特殊类型的掩码语言模型只在末尾有掩码。这被称为生成模型,因为它猜测的掩码总是序列中的下一个词,这等同于生成下一个词,就好像下一个词不存在一样。像这样:

[MASK] > 女王 [MASK] > 女王坐着 [MASK] > 女王坐在 [MASK] 上 > 女王坐在 [MASK] 上

我们也称之为自回归模型。回归这个词听起来不那么好。但是回归仅仅意味着试图理解事物之间的关系,比如已输入的词和应输出的词之间的关系。自意味着'自身'。自回归模型是自我预测的。它预测一个词。然后这个词被用来预测下一个词,接着用来预测再下一个词,以此类推。对此有一些有趣的含义,我们稍后会再回来讨论。

7. 什么是变压器?

在撰写本文时,我们经常听到 GPT-3、GPT-4 和 ChatGPT 等名词。GPT 是 OpenAI 公司开发的一种大型语言模型的特定品牌。GPT 代表生成式预训练变换器。让我们来详细解释一下:

• 生成性。 该模型能够为所提供的输入生成后续内容。也就是说,给定一些文本,模型会尝试猜测接下来的词汇。 • 预训练。 该模型在非常大的通用文本语料库上进行训练,旨在只训练一次就可以用于许多不同的任务,无需从头开始重新训练。关于预训练的更多信息… 模型是在一个非常大的通用文本语料库上训练的,这个语料库表面上覆盖了大量可想象的话题。这或多或少意味着'从互联网上抓取'的,而不是来自某些专门的文本仓库。通过在通用文本上训练,一个语言模型能够比例如只在非常特定类型的文本上训练的语言模型应对更广泛的输入,如医学文档。一个在通用语料上训练的语言模型理论上可以合理地回应可能出现在互联网上的任何文档中的内容。它在处理医学文本时可能表现尚可。一个仅在医学文档上训练的语言模型可能对与医学情境相关的输入反应非常好,但在回应其他输入,如闲聊或食谱时表现得相当糟糕。模型要么在很多方面足够优秀,以至于人们永远不需要训练自己的模型,要么人们可以做一些被称为 微调 的操作,这意味着取一个预训练的模型,并对其进行一些更新,以使其在特定任务(如医疗)上表现得更好。

现在来谈谈变压器…

• 变压器(Transformer)。一种特定类型的自监督编解码器深度学习模型,具有一些非常有趣的属性,使其在语言建模方面表现出色。 变压器是一种特定类型的深度学习模型,它以特定的方式转换编码,使得猜测被遮蔽词变得更加容易。它由 Vaswani 等人在 2017 年发表的一篇名为注意力就是全部你需要的的论文中提出。变压器的核心是经典的编码器 - 解码器网络。编码器执行非常标准的编码过程。如此平凡以至于你会感到震惊。但然后它又增加了一个叫做自注意力的东西。

7.1 自注意力

这是自注意力的概念:序列中的某些词与序列中的其他词相关。考虑这个句子:'外星人降落在地球上,因为它需要在一个行星上隐藏。'如果我们遮住第二个词,'外星人',并让神经网络猜这个词,由于有'降落'和'地球'这样的词,它猜的几率会更大。同样,如果我们遮住'它',并要求网络猜这个词,"外星人"这个词的存在可能会使它更倾向于选择'它'而不是'他'或'她'。

词与词之间通过功能、指代同一事物或相互解释其含义而相互关联。 我们说,一系列词汇因为捕捉到了某种关系而关注其他词汇。这种关系不一定是已知的。它可能是解决代词的关系,可能是动词与主语的关系,也可能是两个词汇与同一概念相关(如'地球'和'行星')。无论是什么,知道词汇之间存在某种关系对于预测是有用的。

下一节将深入讲解自注意力机制的数学原理,但其核心思想是,变换器学会了识别输入序列中哪些词汇是相关的,然后为输入序列中的每个位置创建一个新的编码,这个新编码是所有相关词汇的融合。

你可以将其想象为学会创造一个新词,这个新词是'alien'、'landed'和'earth'(aliandearth?)的混合体。这种方法之所以可行,是因为每个词都被编码为一个数字列表。如果 alien = [0.1, 0.2, 0.3, …, 0.4],landed = [0.5, 0.6, 0.7, …, 0.8],而 earth = [0.9, 1.0, 1.1, …, 1.2],那么第二个词位置可能就被编码为所有这些编码的总和,[1.5, 1.8, 2.1, …, 2.4],这本身并不对应任何已知词汇,但却捕捉到了所有这些词汇的片段。这样当解码器最终看到这个第二位置的新编码时,它就能获取到很多关于这个词在序列中如何被使用的信息,因而能更好地猜测任何掩码。(这个例子只是将编码加在一起,但实际过程会比这更复杂)。

7.2 自注意力是如何工作的?

自注意力是对传统编码器 - 解码器网络的重大改进,所以如果你想了解它是如何工作的,请继续阅读。否则,你可以跳过这一部分。简而言之:自注意力是一种被赋予花哨名称的数学运算,称为点积。

自注意力分为三个阶段进行。

(1) 我们像往常一样对输入序列中的每个单词进行编码。我们制作单词编码的四份拷贝。其中一份我们称为残差,并安全地保留起来。

(2) 我们对另外三个进行了第二轮编码(我们在对一个编码进行编码)。每个都经过不同的编码过程,因此它们都变得不同。我们称其中一个为查询(q),一个为键(k),一个为值(v)。

我希望你想一想哈希表(在 python 中也称为字典)。你在一个表中存储了大量信息。表中的每一行都有一个键,一些唯一的标识符,以及值,即存储在该行中的数据。要从哈希表中检索一些信息,你需要提供一个查询。如果查询与键匹配,你就提取值。

可能用于查询某位教授工作于哪所大学的哈希表。

自注意力(Self-attention)有点像一个模糊哈希表。你提供一个查询,它不是查找与键完全匹配的项,而是基于查询和键之间的相似度找到大致匹配的项。但如果匹配不是完美的怎么办?它返回值的一部分。嗯,这只有在查询、键和值全都是数值的情况下才有意义。而实际上它们确实都是数值的:

一个具有部分匹配的哈希表。 所以,这就是我们要做的。对于输入中的每个单词位置,我们将取其 q 编码和 k 编码并计算相似度。我们使用的是所谓的点积,也称为余弦相似度。这不重要。重点是每个单词是一个包含 256 个数字的列表(基于我们之前的例子),我们可以计算数字列表的相似度,并在一个矩阵中记录这个相似度。我们称这个矩阵为自注意力得分。如果我们有一个由三个单词组成的输入序列,我们的注意力得分可能看起来像这样:

每个单元格表示一个位置上编码的单词对另一个位置上编码的单词的关注程度。 网络将第一个词视为查询,并将其与第二个关键词进行匹配(我们可以说第一个词在'关注'第二个词)。如果第二个词是一个查询,它将与第三个关键词匹配。如果第三个词是一个查询,它将与第一个关键词匹配。实际上,我们不会有像这样的 0 和 1;我们会在 0 和 1 之间有部分匹配,每个查询(行)将部分地与几个关键词(列)匹配。 现在,继续使用检索的比喻,我们将这个矩阵与 v 编码相乘,发生了一些有趣的事情。假设我们的 v 编码看起来是这样的:

每一行都是序列中一个单词的编码。

也就是说,第一个单词被编码为一串数字 0.10…0.19,第二个单词被编码为一串数字 0.20…0.29,第三个单词被编码为一串数字 0.30…0.39。这些数字是为了说明问题而编造的,实际上永远不会这么整齐。

将注意力与值相乘。 第一个查询与第二个键匹配,因此检索到第二个编码词。第二个查询与第三个键匹配,因此检索到第三个编码词。第三个查询与第一个键匹配,因此检索到第一个编码词。我们实际上所做的就是交换了行!

在实际应用中,得分不会是完美的一或零,结果会是每种编码混合在一起的一点点(例如第一个词的 97% 加上第三个词的 1% 再加上第二个词的 2%)。但这说明了自注意力是一种混合和交换。在这个极端的版本中,第一个词被第二个词替换,以此类推。所以,可能'地球'这个词被'行星'这个词替换了。 我们如何知道我们正确编码了 q、k 和 v?如果整个网络猜测掩码最佳词语的能力提高了,那么我们就正确地编码了 q、k 和 v。如果没有,我们下次改变参数,以稍微不同的方式进行编码。

(3) 我们做的第三件事是将所有这些数学运算的结果加到残差上。还记得我们留置一旁的原始编码的第一份复制品吗?没错,我们将混合并交换后的版本加到那上面。现在,'earth'不仅仅是'earth'的一个编码,而是某种'earth'和'planet'的混合想象词……peath?ealanet?并不是真的像那样。无论如何,这就是将要发送给解码器的最终转换后的编码。我们大概可以同意,在每个位置上拥有一个实际上编码了两个或更多单词的假想词,对基于单个单词进行预测更有用。 然后你一次又一次地做这个过程(多个层次)。 我省略了很多关于编码器的最终编码如何进入解码器的细节(另一轮注意力机制,称为源注意力,在这里编码器对每个位置的编码被用作 q 和 k,以便应用于另一个不同版本的 v),但在这一点上,你应该对事情有了一个大概的了解。最终,解码器接收来自编码器的编码,向单词的击打臂发送能量,我们选择能量最强的单词。

8. 为什么大型语言模型如此强大?

那么,这一切意味着什么呢?包括 ChatGPT、GPT-4 在内的大型语言模型,实际上只做一件事:它们接收大量单词,并尝试猜测接下来应该出现什么单词。如果这被称为'推理'或'思考',那么它仅仅是一种非常专门化的形式。 但即便是这种专业形式似乎也非常强大,因为 ChatGPT 及类似工具能够做很多事情,并且看起来做得很好:写诗、回答有关科学和技术的问题、总结文件、起草电子邮件,甚至编写代码,仅举几例。为什么它们能够如此出色地工作呢? 秘密武器有两部分构成。第一部分我们已经谈过了:变换器学会以一种方式混合词语上下文,这让它在猜测下一个词时表现得非常出色。秘密武器的另一部分是系统的训练方式。大型语言模型是通过从互联网上抓取大量信息来训练的。这包括书籍、博客、新闻网站、维基百科文章、Reddit 讨论、社交媒体对话。在训练过程中,我们会从这些来源之一提供一段文本片段,并要求它猜测下一个词。记住:自我监督。如果它猜错了,我们就会稍微调整模型,直到它猜对为止。如果我们要思考 LLM 被训练去做的事情,那就是产生可能合理出现在互联网上的文本。 它不能记住整个互联网,所以它使用编码来做出妥协,并且可能会有一点错误,但希望不会错得太离谱。

不要低估互联网上文本在话题上的多样性是多么重要。大型语言模型(LLMs)见识过无数话题的数十亿次对话。因此,它们能够产生看似与你对话的文字。它们见过几乎所有想得到的主题上的数十亿首诗歌和歌词,所以它们能创作出类似诗歌的文本。它们见过数十亿次作业及其解答,因此即使作业略有不同,它们也能做出合理的猜测。它们见过数十亿个标准化测试问题及其答案。我们真的认为今年的 SAT 考试题与去年的有太大不同吗?它们见过人们谈论他们的假期计划,因此能够猜出看起来像是假期计划的词语。它们见过数十亿示例的代码完成各种事情。计算机程序员的许多工作就是把用于做非常典型且众所周知的事情的代码片段组装成更大的代码块。因此,LLMs 能为你编写那些小而常见的代码片段。它们在 stackoverflow.com 上见过数十亿个错误代码及其更正的示例。是的,所以它们能接收你的错误代码并提出修正建议。它们见过数十亿人在推特上说他们触摸了热炉子并烧伤了手指,所以 LLMs 知道一些常识。它读过许多科学论文,因此即使对你来说不是众所周知,它也能猜出众所周知的科学事实。它们见过数十亿个人总结、将文本改写成要点、描述如何使文本更加语法正确、简洁或有说服力的示例。

这里有一点需要明确:当你要求 ChatGPT 或其他大型语言模型做一些聪明的事情——并且它做到了——很有可能是因为你让它做了一些它已经看过数十亿例子的事情。即使你提出了一些真正独特的事情,比如'告诉我闪电侠吃了六个墨西哥卷饼后会做什么'(这算不算独特,我甚至不知道),它见过关于闪电侠的粉丝小说,也见过人们讨论吃太多墨西哥卷饼的情况,并且——由于自注意力机制——能够混合匹配零碎信息来组装出一个听起来合理的回应。 在与大型语言模型交互时,我们的第一直觉不应该是'哇,这些东西一定非常聪明、非常有创造力或非常理解事物'。我们的第一直觉应该是'我可能让它做的事情,它之前已经见过一些零碎的部分'。这可能意味着即使它没有'非常努力地思考'或'进行一些非常复杂的推理',它仍然非常有用。 我们不必使用拟人化来理解它是如何提供给我们响应的。 关于这一主题的最后一点说明:因为大型语言模型的工作方式以及它们的训练方法,它们倾向于提供某种中等水平的回答。在请求一个关于闪电侠戈登的故事之后,我说模型倾向于给出平均水平的回答,这听起来可能非常奇怪。但在故事或诗歌的背景下,这些回应可以被认为是很多人(在互联网上写作的人)在不得不妥协的情况下会想出的东西。这不会是糟糕的。对于一个独自坐着试图想出某事的人来说,它可能相当好。但你的故事和诗歌可能也只是平均水平(但它们对你来说很特别)。

9. 我应该注意什么?

一些非常微妙的含义源于变压器(Transformers)的工作方式及其训练方法。以下是技术细节的直接影响。

  1. 数据来源的复杂性:大型语言模型是在互联网上进行训练的。这意味着它们也接触到了人性中的黑暗面。大型语言模型接受了种族主义的咆哮、性别歧视的抨击、各种针对各类人群的侮辱、对他人进行刻板印象假设、阴谋论、政治错误信息等的训练。这意味着语言模型生成的词语可能会重复这些语言。
  2. 无核心信念:大型语言模型没有'核心信念'。它们是猜词者;它们试图预测如果相同的句子出现在互联网上,下一个词会是什么。因此,人们可以要求大型语言模型写出赞成某事的句子,或者写出反对同一事物的句子,语言模型都会两种方式都予以配合。这并不表明它相信一方或另一方,或改变其信念,或一方比另一方更正确。如果训练数据中某件事与另一件事相比有更多的例子,那么大型语言模型倾向于更一致地响应其训练数据中更频繁出现的内容,因为它在互联网上出现得更频繁。记住:模型致力于模仿最常见的响应。
  3. 缺乏真实性感知:大型语言模型对真实、正确或错误没有任何感知。有些我们认为是事实的东西,比如地球是圆的。一个 LLM 往往会这样说。但如果上下文正确,它也会说相反的话,因为互联网上确实有关于地球是平的的文本。不能保证 LLM 会提供真相。可能倾向于猜测我们认同为真的词,但这是我们对 LLM'了解'真实、正确或错误所能做的最接近的声明。
  4. 幻觉与错误:大型语言模型会犯错误。训练数据中可能有很多不一致的材料。自我关注可能不会在我们提出问题时关注到我们希望它关注的所有事物。作为一个猜词者,它可能会做出不幸的猜测。有时候训练数据看到某个词的次数多得多,以至于即使对于输入来说没有意义,它也更喜欢那个词。上述情况导致一种被称为'幻觉'的现象,即猜测的词不是来自输入也不是'正确'的。LLM 倾向于猜小数字而不是大数字,因为小数字更常见。所以 LLM 在数学上不是很擅长。LLM 对数字'42'有偏好,因为人类因为一本特定的著名书籍而偏好它。LLM 更偏爱常见的名字,所以可能会编造作者的名字。
  5. 错误累积:大型语言模型是自回归的。因此,当它们做出我们可能认为不佳的猜测时,这些猜测的词就会被添加到它们自己的输入中,以便进行下一个词的猜测。也就是说:错误会累积。即使错误的几率只有 1%,自我关注也可以关注到这个错误选择并加倍下注这个错误。即使只犯了一个错误,之后的一切也可能与这个错误有关。然后,语言模型可能会在此基础上再犯其他错误。变压器没有'改变主意'或重试或自我纠正的方式。它们随波逐流。
  6. 验证的重要性:应该始终验证大型语言模型的输出。如果你让它做一些你自己无法有效验证的事情,那么你应该考虑你是否愿意承担因错误而采取行动的后果。对于低风险任务,如写一个短故事,那可能没关系。对于高风险任务,如尝试获取信息以决定投资哪些股票,那些错误可能导致你做出非常昂贵的决定。
  7. 提示工程:自我关注意味着你在输入提示中提供的信息越多,响应就会越专业,因为它会将更多的词语混合进其猜测中。响应的质量与输入提示的质量成正比。更好的提示产生更好的结果。尝试几种不同的提示,看看哪种最适合你。不要假设语言模型'理解'你正在尝试做什么,并会在第一次就尽力而为。
  8. 无记忆性:你实际上并不是在与大型语言模型'进行对话'。大型语言模型不会'记住'交流中发生的事情。你的输入进去,响应就出来。LLM 什么也不记得。你的初始输入、响应以及你对响应的反应进去。因此,如果看起来它在记住内容,那是因为对话记录变成了全新的输入。这是前端的一个编程技巧,使大型语言模型看起来像是在进行对话。因为这个技巧,它可能会保持主题,但不能保证它不会与早期的响应相矛盾。此外,可以输入到大型语言模型中的字数有限(目前 ChatGPT 允许大约 4000 个词,GPT-4 允许大约 32000 个词)。输入大小可以相当大,所以对话通常会看起来一段时间内保持连贯。最终,累积的日志将变得太大,对话的开始将被删除,系统将'忘记'早期的事物。
  9. 无规划能力:大型语言模型不进行问题解决或规划。但你可以要求它们创建计划和解决问题。我在这里要细分一下。问题解决和规划是 AI 研究社区某些团体保留的术语,意味着非常具体的东西。特别是,它们意味着有一个目标——你希望在未来实现的事物——并通过在可能使人更接近该目标的替代方案之间做出选择来努力实现该目标。大型语言模型没有目标。它们有一个目标,那就是选择在给定输入序列中最有可能出现在训练数据中的词。它们是在进行模式匹配。规划特别通常涉及到所谓的向前看。当人类进行规划时,他们会想象自己行动的结果,并针对目标分析那个未来。如果看起来它使人更接近目标,那就是一个好举动。如果不是,我们可能会尝试想象另一个行动的结果。其中还有很多内容,但关键点是大型语言模型没有目标,也不进行向前看。变压器是向后看的。自我关注只能应用于已经出现的输入词。现在,大型语言模型可以生成看起来像计划的输出,因为它们在训练数据中看到了很多计划。它们知道计划看起来像什么,它们知道计划中应该包含哪些关于它们所见话题的内容。它将对该计划做出一个好猜测。计划可能会忽略关于世界的特定细节,倾向于最通用的计划。大型语言模型当然没有'思考过替代方案'或尝试一件事情然后回溯并尝试另一件事情。在变压器内部没有任何机制可以指出会进行这种来回考虑未来的事情。在请求计划时始终验证输出。

10. 什么让 ChatGPT 如此特别?

'我听说是 RLHF 让 ChatGPT 变得非常聪明。'

'ChatGPT 使用了强化学习,这就是它如此聪明的原因。'

嗯……有那么回事。

截至撰写本文时,有一个叫做 RLHF,或者通过人类反馈的强化学习的东西,引起了大量兴趣。在特别训练 ChatGPT(以及越来越多的其他大型语言模型)时,做了一些事情。这些事情并不完全是新鲜事物,但是当 ChatGPT 发布时,这些方法被广泛引入并取得了巨大效果。 ChatGPT 是基于 Transformer 的大型语言模型。ChatGPT 因其在对输入提示作出回应方面的出色能力以及拒绝回答可能被视为有害或带有偏见的某些话题的问题而赢得了声誉。它并没有做出与上述描述有特别不同的事情。事实上,它相当普通。但有一个不同之处:它的训练方式。ChatGPT 的训练方式很常规——爬取互联网的大量内容,获取文本片段并让系统预测下一个词。这导致了一个基础模型,已经是一个非常强大的词预测器(相当于 GPT-3)。但之后还有两个额外的训练步骤。指令调优和通过人类反馈的强化学习。

10.1 指令调整

对于大型语言模型来说,有一个特别的问题:它们只是想接收一串输入的词序列并生成接下来的内容。大多数时候,这正是我们所期望的。但并非总是如此。考虑以下输入提示:

'写一篇关于亚历山大·汉密尔顿的论文。'

你认为应该得到什么样的回应。你可能会认为应该是类似'亚历山大·汉密尔顿于 1757 年出生于尼维斯岛。他是一位政治家、律师、陆军上校,以及美国第一任财政部长…'这样的回答。但实际上,你可能会得到的是:

'你的论文应该至少五页,双行间距,并至少包含两个引用。'

刚刚发生了什么?好吧,语言模型可能看到了很多以'写一篇关于……的论文'开头的学生作业示例,并包含了详细说明长度和格式的文字。当然,当你写下'写一篇论文……'时,你认为自己是在向语言模型写指令,就好像它是一个能理解意图的人一样。语言模型不理解你的意图,也没有自己的意图;它们只是将输入与它们在训练数据中看到的模式进行匹配。

为了解决这个问题,人们可以做一些被称为指令调整的操作。这个想法相当简单。如果你得到了错误的回应,写下正确的回应应该是什么,并将原始输入和新的、更正后的输出作为训练数据通过神经网络。有了足够多的更正后输出的示例,系统将学会改变它的电路,以便偏好新的答案。

不需要做太复杂的事情。只需让很多人与大型语言模型互动,让它执行很多任务,并在它表现不正确时记录下更正。然后,收集所有它犯错的例子以及新的、正确的输出,并进行更多的训练。 这使得大型语言模型表现得好像它理解输入提示的意图,并且表现得好像它在遵循指令。它没有做任何事情,除了尝试猜测下一个单词。但现在,新的训练数据让它猜测的单词似乎对输入更加响应。

10.2 来自人类反馈的强化学习

训练的下一步是来自人类反馈的强化学习。我认为这需要一点解释。 强化学习 是一种人工智能技术,传统上用于某些机器人研究以及虚拟游戏代理(想象能够玩棋类、围棋或星际争霸的 AI 系统)。强化学习 特别擅长在获得所谓的奖励时弄清楚接下来要做什么。奖励只是一个数字,表示它做得有多好(做得很好 +100;做得很差 -100)。在现实世界和游戏中,奖励通常很少给出。在游戏中,你可能需要做很多步骤才能得到任何分数。也许你只在游戏最后才能得到分数。在现实世界中,没有足够多的人告诉你你做得好(你确实做得好)。除非你是一只狗(它们都是好孩子)。你真正需要知道的唯一事情是,强化学习系统试图预测它们将获得多少未来奖励,然后选择最有可能获得更多未来奖励的行动。这与人们可能使用狗零食来教导自己的狗表现好的方式不是完全不同。

好的,把那些都放到一边,考虑以下提示:

Mark 是专家吗?

假设语言模型的输出是:

Mark 在人工智能、图形学和人机交互领域有许多出版物。

这个回答只是部分正确。我并没有在图形学领域发表过。我真的很想给这个回答一个差评,或者 -1 分。但只有一部分是错误的:图形学这个词。如果我告诉系统整句话都是错的,那么语言模型可能会学到所有这些词都应该避免。嗯,其实许多词是合理的。 这就是强化学习发挥作用的地方。强化学习通过尝试不同的选择并观察哪些选择获得最多的奖励来工作。假设我让它对原始提示生成三种不同的回应。

Mark 在人工智能、图形学和人机交互方面有许多出版物。 Mark 在人工智能、安全的自然语言处理系统和人机交互方面有工作经验。 Mark 研究过人工智能、游戏 AI 和图形学。

我可以给第一个选项一个差评(-1),给第二个选项一个好评(+1),再给第三个选项一个差评(-1)。就像玩游戏一样,一个强化学习算法可以回顾并找出导致 -1 的共同因素是'图形'这个词。现在,系统可以专注于这个词,并调整神经网络电路,以避免在那个特定的输入提示中使用该词。

我们将再次组织一批人与大型语言模型进行交互。这次我们将给予人们三个(或更多)可能的回应。我们可以通过让大型语言模型对一个提示语进行多次回应,并在选择打击臂时引入一点随机性(你没忘记这些,对吧?)来实现这一点。我们有时可能会选择第二高或第三高激活的打击臂,而不是选择最高激活的打击臂。这样就产生了不同的文本回应,我们让人们挑选他们最喜欢的回应,第二喜欢的回应,依此类推。现在我们有了替代方案,也有了数据。现在我们可以使用强化学习来调整神经网络的电路。

实际上,我们使用这些点赞和点踩的反馈来训练第二个神经网络,以预测人们会给出点赞还是点踩。如果这个神经网络在预测人们的偏好方面足够好,那么我们可以使用这第二个神经网络来猜测语言模型的响应可能会获得点赞还是点踩,并使用这一信息来训练语言模型。 强化学习将文本生成视为一场游戏,其中每个动作是一个词。在一个序列结束时,语言模型会被告知它赢得了一些分数或失去了一些分数。语言模型并没有像前一节讨论的那样确切地进行预测,但在某种意义上,它已经被训练为预测哪些词会得到赞同。大型语言模型仍然没有一个明确的目标,但它有一个隐含的目标是'获得赞同'(或者我们也可以说它有'满足一般人'这一隐含目标),并且已经学会将某些回应与特定提示相关联以获得赞同。这具有很多规划的特质,但没有明确的预测机制。更像是它记住了在许多情况下倾向于有效的获取奖励的策略。

关于 RLHF 是否让 ChatGPT 变得更聪明的大问题……它使 ChatGPT 更有可能产生我们希望看到的那种回应。它看起来更聪明是因为它的输出似乎传达了一种感觉,即它理解我们输入的意图,并且有自己回应的意图。这是一种错觉,因为它仍然只是在编码和解码单词。但话又说回来,这正是我们开始这篇文章的地方。

指令调整和 RLHF 也使得使用 ChatGPT 能够抵制某些类型的滥用,例如生成种族主义、性别歧视或政治敏感内容。虽然这仍然可以被做到,并且无论如何,旧版本的 GPT-3 一直都能做到这一点。然而,作为一个免费的面向公众的服务,ChatGPT 对某些类型滥用的阻力传达了一种安全感。它也能抵制将观点当作事实来提供,这也消除了一种潜在的对用户的伤害。

使用强化学习来修改预训练的语言模型并不是什么新鲜事,至少可以追溯到 2016 年,并已被用于使大型语言模型更加安全。基于强化学习的大型语言模型调整大多使用第二个模型来提供奖励,ChatGPT 也是采用这种方式。ChatGPT 值得注意的是,它使用强化学习调整系统的规模,以及大规模的人类反馈收集工作。

11. 如何开始学习大模型

了解了理论之后,许多读者可能想知道如何在实践中应用这些知识。以下是一些建议的学习路径和资源方向,帮助你从零开始掌握大模型技术。

11.1 基础准备

  1. 编程语言:Python 是大模型领域的事实标准。确保熟练掌握 Python 基础语法、数据结构(列表、字典)以及面向对象编程。
  2. 数学基础:虽然不需要成为数学家,但了解线性代数(矩阵运算)、概率论和微积分的基础概念有助于理解模型背后的原理。
  3. 深度学习框架:熟悉 PyTorch 或 TensorFlow。PyTorch 目前在研究和工业界更为流行,社区支持良好。

11.2 实践项目

理论学习需要结合代码实践。建议从以下项目入手:

  1. 环境搭建:安装 Anaconda,配置 CUDA 环境,学习如何使用 Jupyter Notebook 进行交互式开发。
  2. 调用 API:注册主流大模型服务商(如 OpenAI、Azure、国内各大云厂商),学习如何通过 API 调用大模型,理解 Prompt Engineering(提示工程)的基本技巧。
  3. 本地部署:尝试使用 Hugging Face Transformers 库加载开源模型(如 Llama、ChatGLM 等),在本地运行推理。这有助于理解显存占用、量化等技术概念。
  4. 微调体验:选择一个小型数据集,使用 LoRA 等高效微调技术对开源模型进行微调,体验模型适应特定任务的过程。

11.3 持续学习

大模型技术发展迅速,建议关注以下资源:

  • 论文阅读:定期浏览 arXiv.org 上的 CS.CL(Computation and Language)板块,关注 Transformer 架构的演进论文。
  • 开源社区:积极参与 GitHub 上的开源项目,阅读源码,贡献代码。
  • 技术博客:关注高质量的技术博客和公众号,了解最新的应用案例和最佳实践。

12. 结论

当我手绘神经网络时,它看起来像鲸鱼的须。无论如何,我希望我能够过滤掉围绕大型语言模型的一些炒作。

大型语言模型代表了人工智能领域的一次重大飞跃。通过理解其背后的基本原理,如神经网络、Transformer 架构、自注意力机制以及训练策略(如 RLHF),我们可以更理性地使用这些工具。它们不是魔法,而是基于统计规律和海量数据的复杂系统。作为开发者或用户,了解其局限性(如幻觉、偏见、无真实理解)与欣赏其能力同样重要。随着技术的不断成熟,大模型将在更多领域发挥重要作用,而扎实的基础知识和持续的实践将是驾驭这一变革的关键。

目录

  1. 1. 引言
  2. 2. 什么是人工智能?
  3. 3. 什么是机器学习?
  4. 4. 什么是神经网络?
  5. 5. 什么是深度学习?
  6. 6. 什么是语言模型?
  7. 6.1 编码器
  8. 6.2 解码器
  9. 6.3 编码器和解码器一起使用
  10. 6.4 自监督
  11. 7. 什么是变压器?
  12. 7.1 自注意力
  13. 7.2 自注意力是如何工作的?
  14. 8. 为什么大型语言模型如此强大?
  15. 9. 我应该注意什么?
  16. 10. 什么让 ChatGPT 如此特别?
  17. 10.1 指令调整
  18. 10.2 来自人类反馈的强化学习
  19. 11. 如何开始学习大模型
  20. 11.1 基础准备
  21. 11.2 实践项目
  22. 11.3 持续学习
  23. 12. 结论

更多推荐文章

查看全部
  • Docker 部署 OpenClaw 并集成智谱 AI
  • Android 大厂面试真题与核心知识点解析
  • WebODM 免费开源无人机影像处理全流程指南
  • xAI Grok 4.2 模型核心功能与特性解析
  • AAAI2025 PC-BEV:多坐标系融合策略实现点云分割加速与精度提升
  • 2026 年 10 款降低 AIGC 检测率工具推荐
  • OOTDiffusion AI 虚拟试衣技术使用指南
  • ToDesk ToClaw AI 实现科技新闻日报自动化实战
  • STM32F103RC TFT-LCD 电子相册开发:图片解码算法详解
  • GLM-4.6V-Flash-WEB API 额度管理与本地部署指南
  • C++ 语法基础:STL、位运算与常用库函数
  • 操作系统智能助手 OS Copilot 新功能测评
  • 解决 Git 下载慢的问题:国内外镜像地址与安装教程
  • Rock 5B+ 部署 MAVSDK 控制无人机及 WSL 仿真环境搭建
  • GESP-C++ 三级考试重点与编程题模板汇总
  • 前端开发三年职业成长回顾:从传统软件到互联网实战
  • 阿里 Z-Image-Turbo 文生图镜像部署与性能实测
  • PyTorch 实战:基于文本引导的图像生成与 Stable Diffusion 实践
  • Llama-Factory 打造大模型定制化流水线
  • 本地离线部署 Whisper 模型进行语音转写

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online