技术速递|生成式 AI 和 LLM 工作原理

发布于:2025-09-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

生成式 AI 是一种人工智能,能够创建原始内容,例如自然语言、图像、音频和代码。生成式 AI 的输出基于用户提供的输入。用户与生成式 AI 交互的一种常见方法是使用自然语言作为输入的聊天应用程序。OpenAI 开发的 ChatGPT 是一个常见的示例。使用自然语言作为输入的生成式 AI 应用由大语言模型(LLM)提供支持,以执行自然语言处理(NLP)。

生成式 AI 的工作原理

所有生成式 AI 都基于模型构建。这些模型以内容形式(如自然语言、图像、音频和代码)使用大量数据集进行训练。生成式 AI 模型使用训练数据中标识的模式来生成新的统计相似内容。

用户提供的输入由 AI 模型用于生成输出。输入首先分析为模型可以理解的数据形式。然后,该模型使用该数据从其训练中识别匹配模式,并将其组合在一起以生成最终输出。生成式 AI 模型旨在生成独特的内容,因此它们不会为相同的输入生成相同的输出。

支持自然语言作为输入或输出的生成式 AI 应用利用 LLM 执行此操作。LLM 用于执行 NLP,该 NLP 对输入文本进行分类并确定其情绪。生成式 AI 模型使用该分类和情绪分析来识别模式并生成输出。如果输出为文本,那么使用 LLM 即可生成。若是输出为音频或图像,则需要借助其他模型来提供用于生成该格式输出的数据和模式。

生成式 AI 的常见用途

生成式 AI 应用支持各种潜在用例及输出,以下部分将探讨这些用例和潜在输出。

自然语言生成

一些生成式 AI 应用可以生成自然语言输出,例如:

  • 为 LinkedIn 个人资料撰写专业的概述
  • 为网上店铺的商品撰写丰富的描述
  • 提供健康餐的创意

例如,基于用户输入“给我一份含胡椒粉的健康早餐的三个创意”,生成式 AI 应用可能会生成以下输出:

好的,这里有三种含胡椒粉的健康早餐:

  1. 甜椒炒鸡蛋:甜椒切碎,在锅里炒软。然后加入打散的鸡蛋,翻炒均匀。搭配全麦吐司食用,就是一份营养早餐。
  2. 胡椒牛油果吐司:一片烤全麦吐司,上面铺上切好的甜椒,捣碎的牛油果,撒上少许盐和胡椒粉。这种方法可以从牛油果中获取优质脂肪,并从甜椒中获取维生素 C。
  3. 胡椒早餐卷饼:将切成丁的甜椒、洋葱和鸡蛋在锅中一起翻炒。然后,将这些铺到全麦玉米饼上,并配上一些 salsa 酱或辣酱。卷起来就能享受满足又营养的早餐。

图像生成

一些生成式 AI 应用可以根据自然语言输入生成图像输出。根据应用程序及其模型,用户可以指定以下内容:

  • 图像中显示的人物或内容
  • 创作图像所采用的艺术风格
  • 生成相似图像的参考样本

图像生成可以为在线账户创建虚拟头像、为企业设计 logo 或为创作者提供艺术灵感例如,用户可能会输入请求:生成一副“大象吃汉堡”的图像。生成式 AI 应用可以生成以下输出:

音频生成

一些生成式 AI 应用能够根据自然语言输入生成音频输出。根据应用程序及其模型的不同,用户可以:

  • 从输入文本合成听起来自然的语音
  • 创作特定风格或包含特定乐器的音乐
  • 根据自然语言提供的设定条件修改输入的音频文件

音频生成技术可用于让数字语音助手提供语音响应、为音乐制作中的歌曲添加伴奏乐器,或根据参考录音还原用户的原始声音。

代码生成

一些生成式 AI 应用可以根据自然语言输入生成代码。根据应用程序及其模型的不同,用户可以生成以下代码:

  • 采用自己选择的编程语言
  • 符合特定的输入和输出结构
  • 按照参考文档使用特定技术

代码生成技术可以快速实现常见操作,例如数据排序或筛选,加快代码从一种语言转换到另一种语言的速度,或根据指定的参考文档回答有关某项技术的问题。例如,假设输入“显示如何使用 C# 编写一个井字棋游戏”,生成式 AI 应用可能会生成以下输出:

下面是有关如何用 C# 编写井字棋游戏的简单示例:

using System;

namespace TicTacToe
{
    class Program
    {
        static char[] board = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        static int player = 1; // Player 1 will start
        static int choice; // The number the player chooses
        static int flag = 0; // Set the flag value to 0

        // Check if the position is already marked or not
        private static int CheckPosition(char mark)
        {
            for (int i = 0; i < 9; i++)
            {
                if (board[i] == mark)
                {
                    return 1;
                }
            }
            return 0;
        }

        // The rest of the generated code has been omitted for brevity
        // ...
    }
}

这段代码用 C# 创建了一个简单的基于控制台的井字棋游戏。它使用一维数组来表示棋盘,并在每一步操作后检查是否有人获胜或出现平局。

LLM 的工作原理

在训练 LLM 时,首先会将训练文本拆分为 tokens。每个 token 标识都对应一个特定的文本值。它可以是不同的单词、单词的一部分,或是单词和标点符号的组合。每个 token 都会被分配一个 ID,这样文本就能以一系列 token ID 的形式来表示。

将文本拆分为 token 后,会为每个 token 分配一个上下文向量(称为 嵌入)。这些嵌入向量是多值数值数据,向量中的每个元素都代表该 token 的一项语义属性。token 向量的元素取决于这些 token 在使用中共同出现的频率。

训练的目标是根据前面的 token 预测序列中的下一个 token。会为现有序列中的每个 token 分配一个权重,这个权重代表该 token 对下一个 token 的相对影响。随后会进行计算,利用前面 token 的权重和嵌入向量来预测下一个向量值。接着,模型会根据预测出的向量,选择最后可能延续该序列的 token。

这个过程会对序列中的每个 token 重复进行,输出的序列会被递归地用作下一次迭代的输入。输出结果是逐个 token 生成的。这种策略类似于自动补全功能的工作原理 —— 建议内容基于已输入的内容生成,并会随着每一个新输入而更新。

在训练过程中,完整的 token 序列是已知的,但当前所考虑的 token 之后的所有 token 都会被忽略。下一个 token 向量的预测值会与实际值进行比较,并计算损失。然后会逐步调整权重,以减少损失并改进模型。

相关内容