大模型基础

月伴飞鱼 2025-04-06 22:36:07
AI相关
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!

人工智能的定义和子领域

工智能按照技术实现的不同可被划分为多个子领域,各个子领域之间往往相互关联和影响。

它是一个广泛涉及计算机科学、数据分析、统计学、机器工程、语言学、神经科学、哲学和心理学等多个学科的领域。

机器学习:

机器学习可以分为监督学习、无监督学习与强化学习。

深度学习:

深度学习是机器学习的一个分支,主要使用神经网络模型(由多个隐藏层组成)对数据进行学习和表示。

生成式人工智能:

生成式人工智能又是深度学习中快速增长的子集,它们使用了大模型提供支持。

在大量原始、未标记的数据基础上对深度学习模型进行预训练,使得机器能够理解语言甚至图像,并能够根据需要自动生成内容。

机器学习

机器学习可以分为监督学习,无监督学习与强化学习,以教一个孩子区分不同的水果为例。

监督学习的工作模式为:

你拿着一个苹果和一个香蕉,告诉孩子:这是苹果,它的形状是圆的,颜色通常是红色或绿色。

这是香蕉,它的形状是长条形,颜色通常是黄色。

孩子会学习到特征与类别的对应关系,预测出新拿出的水果是苹果还是香蕉。

无监督学习的工作模式为:

你让孩子观察一堆水果,没有直接告诉他每一个水果的名称,而是鼓励他自己找出如何根据形状,颜色等属性将这些水果进行分组。

在机器学习中,监督学习需要我们明确地告诉机器(或者说孩子)数据的特征(形状与颜色)是什么。

  • 监督学习需要在机器进行学习时人为提供数据对象的类别(如苹果或香蕉)。

而无监督学习一般没有预设的类别标识,通过机器自动学习数据的分布并将相似的数据对象归为同类(如红色圆形是苹果)。

强化学习的工作模式为:

你不会直接教孩子苹果和香蕉的区别,而是每次展示一个水果让他进行判断。

如果他判断正确,就给他一个奖励(比如一块糖果)。

  • 如果判断错误,则不给奖励

通过反复尝试和反馈,孩子会通过这种奖励机制逐渐学习到如何更准确地判断苹果和香蕉。

这种学习过程中的关键在于孩子需要在探索新的判断方法和利用已有经验之间找到平衡,以最大化获得奖励的次数。

深度学习

深度学习算法试图模拟人类大脑的工作方式,其灵感来源于神经生物学。

它通过对大量数据的学习,自动提取出数据的高层次特征和模式,从而实现图像识别、语音识别、自然语言处理等任务。

按照架构的不同,神经网络可以分为:

  • 卷积神经网络(CNNS)、循环神经网络(RNNS)、Transformer网络等等。

同样是区分不同水果,这次你带着孩子去了超市,那里有各种不同的水果,你没有解释每种水果的特点。

只是给孩子指出了哪些是苹果哪些是香蕉,他通过观察和比较,慢慢学会了辨认各种水果。

在这个过程中,孩子的大脑(在这里比喻为深度学习模型)自动从复杂的视觉、嗅觉等信号中提取层次化的特征。

  • 比如圆形、条纹、颜色深浅、气味等,从而达到识别水果的目的。

大模型的泛化能力

泛化能力是指机器学习算法对新鲜样本的适应能力。

机器学习模型旨在根据以前未见过的新数据做出良好预测。

一个具有良好泛化能力的模型,不仅能够在训练数据上表现出色,还能够在面对的数据时保持较好的性能。

思维链(Chain of Thoughts,CoT)

思维链是一种标准的提示技术(Prompting Technique),能够显著提升 LLM 解决复杂问题的能力。

通过鼓励 LLM 逐步思考(Think Step By Step),它可以将复杂问题拆解成多个步骤,按照逻辑推理一步步解决。

  • 从而提高最终答案的准确性,这种方法通常用于数学推理、逻辑分析和文本推理任务。

自洽性

一种对抗 幻觉 的手段,就像我们做数学题,要多次验算一样。

同样 Prompt 跑多次(把 Temperature 设大,比如 0.9,或每次用不同的 Temperature)。

通过投票选出最终结果。

思维树(Tree of Thought, ToT)

思维树是对思维链(CoT)的进一步扩展。

在 CoT 中,LLM 采用线性推理方式,即按照固定顺序逐步推导答案。

而在 ToT 中,LLM 在每个推理步骤中可以生成多个可能的推理分支,形成类似状结构的探索路径。

为了优化推理结果,ToT 采用启发式搜索算法,例如:

  • 广度优先搜索(BFS):探索多个可能的推理路径,确保找到最优解。
  • 深度优先搜索(DFS):深入探索某条推理路径,适用于复杂但目标明确的问题。
  • 蒙特卡洛树搜索(MCTS):用于决策优化,广泛应用于 AI 博弈任务(如 AlphaGo)。

大模型训练

大模型的训练整体上分为三个阶段:

预训练(Pre-training)

SFT(Supervised Fine-Tuning,监督微调)

RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)

预训练

预训练的过程类似于从婴儿成长为中学生的阶段。

在这个阶段我们会学习各种各样的知识,我们的语言习惯、知识体系等重要部分都会形成。

对于大语言模型来说,在这个阶段,它会通过大规模语料学习语言的统计模式和共现关系,并间接获取大量的常识性知识。

然而,预训练模型的主要目标是通过预测下一个词或填充缺失的词,来学习文本的结构和分布规律,而不是理解人类的意图。

例如,如果我们向一个仅经过预训练的模型提问:埃菲尔铁塔在哪个国家?

  • 它可能会生成一个类似语料中出现过的高概率文本,而不一定严格按照提问作答。

因此,我们需要进一步训练模型,使其能够更好地遵循人类指令进行回答,这个步骤就是 SFT(监督微调)。

预训练(Pre-training)的主要目的是让模型学习语言的通用规律和结构。

SFT(Supervised Fine-Tuning,监督微调)

SFT(Supervised Fine-Tuning,监督微调)的过程类似于一个学生在掌握基础知识后,进一步接受系统的考试训练。

  • 使其不仅能够学习知识,还能按照标准答案回答问题。

在这个阶段,我们会学习如何更符合考试要求进行作答,而不仅仅是掌握知识本身。

对于大语言模型来说,SFT 主要是通过 带有人工标注的高质量数据 来优化模型。

  • 使其学会 按照人类的指令进行回答,而不是仅仅根据语料生成高概率的文本。

例如,在预训练阶段,模型可能会根据概率补全文本,但经过 SFT 之后,它更倾向于直接回答问题。

在监督微调完成后,模型通常能按照人类意图回答问题。

例如,当我们问 SFT 过的模型 埃菲尔铁塔在哪个国家? 时,它大概率会直接回答 法国。

  • 而不会像预训练阶段那样倾向于生成一个类似的句子(如东方明珠在哪个城市?)。

这意味着模型已经具备了基本的指令跟随能力,可以进行更符合人类预期的对话。

  • 然而,SFT 主要解决的是指令跟随问题,而不是价值对齐问题。

经过 SFT 的模型虽然能按照指令回答,但仍然可能输出 不符合人类价值观的内容。

  • 比如涉黄、涉政、涉暴或种族歧视性言论。

这时候,我们需要进一步通过 RLHF(基于人类反馈的强化学习) 来优化模型。

  • 使其不仅能正确回答问题,还能符合人类的伦理和价值观。

SFT 的主要作用是 让预训练模型更好地遵循人类指令,使其适应特定任务,提高回答的准确性,并优化模型的输出风格。

虽然 SFT 可以在一定程度上减少有害内容,但它 并不能完全解决安全性和价值对齐问题

因此通常需要结合 RLHF(基于人类反馈的强化学习) 进行进一步优化。

RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)

RLHF 的过程类似于一个大学生步入职场的阶段。

在这个阶段,我们不仅仅是完成工作,还会不断根据 领导、客户和同事的反馈 来优化自己的工作方法。

  • 以便在职场上获得更好的评价和机会。

对于大模型来说,RLHF 也是一个基于反馈不断优化的过程。

在这一阶段,模型会针对同一个问题生成多个回答,而人类标注者会对这些回答进行评分。

  • 然后模型会使用强化学习算法(如 PPO,近端策略优化)来调整自身策略,以最大化未来的奖励

这使得模型不仅能回答问题,还能更加符合 人类的价值观和偏好,减少潜在的偏见和有害内容。

RLHF 通过引入人类反馈作为奖励信号,结合强化学习算法,能够显著提升模型的性能,使其更加符合人类的期望和价值观。

尽管 RLHF 在实施过程中可能面临一些挑战,例如 依赖大量人工标注、难以平衡不同价值观以及强化学习的稳定性问题。

  • 但它仍然是当前提升 AI 交互质量和价值观对齐的关键技术之一。

大模型工作流程

分词化(Tokenization)与词表映射

分词化(Tokenization)是自然语言处理(NLP)中的重要概念,它是将段落和句子分割成更小的分词(token)的过程。

举一个实际的例子,以下是一个英文句子:

I want to study ACA.

为了让机器理解这个句子,对字符串执行分词化,将其分解为独立的单元。

使用分词化,我们会得到这样的结果。

['I', 'want', to', study”, 'ACA', '.']

将一个句子分解成更小的、独立的部分可以帮助计算机理解句子的各个部分,以及它们在上下文中的作用。

  • 这对于进行大量上下文的分析尤其重要。

分词化有不同的粒度分类:

词粒度(Word-Level Tokenization)分词化:

  • 如上文中例子所示,适用于大多数西方语言,如英语、法语。

字符粒度(Character-Level)分词化:

  • 是中文最直接的分词方法,它是以单个汉字为单位进行分词化。

子词粒度(Subword-Level)分词化:

  • 它将单词分解成更小的单位,比如词根、词缀等。

  • 这种方法对于处理新词(比如专有名词、网络用语等)特别有效。

  • 因为即使是新词,它的组成部分(子词)很可能已经存在于词表中了。

不管是哪种分词方法,得到的每一个结果我们都称之为token。

每一个token都会通过预先设置好的词表,映射为一个tokenid。

  • 这是token的身份证,一句话最终会被表示为一个元素为tokenid的列表,供计算机进行下一步处理。

在线Token展示网站:GPT tokenizer playground

文本生成

大语言模型的工作概括来说是根据给定的文本预测下一个token。

对我们来说,看似像在对大模型提问,但实际上是给了大模型一串提示文本(prompt),让它可以对后续的文本进行推理。

  • 大模型的推理过程不是一步到位的。

当大模型进行推理时,它会基于现有的token,根据概率最大原则预测出下一个最有可能的token。

然后将该预测的token加入到输入序列中,并将更新后的输入序列继续输入大模型预测下一个token,这个过程叫做自回归

直到输出特殊token(如<EOS>end of sentence,专门用来控制推理何时结束)或输出长度达到阈值。

4dec65c88965c46c46dd797bc39ec9ef.jpeg

文本生成常见特殊符号表:

符号 代表名称(全称) 作用
<BOS> Beginning of Sequence 序列开始符号,用于指示文本序列的起始。某些模型(如 GPT)可能不使用此符号,而是隐式地假设开头。
<EOS> End of Sequence 序列结束符号,用于指示文本序列的结尾,模型在遇到该符号时可能会停止生成。
<PAD> Padding Token 填充符号,用于对齐不同长度的输入,使它们具有相同的长度(特别是在批量处理时)。
<UNK> Unknown Token 未知词符号,用于替代词汇表中未包含的单词或子词。
<SEP> Separator Token 分隔符,用于区分不同的段落、句子或对话轮次(如 BERT 在 NSP 任务中使用)。
<CLS> Classification Token 分类符号,BERT 等模型用于文本分类任务,通常位于序列的开头,最终的隐藏状态可用于分类任务。
<MASK> Mask Token 掩码符号,在 BERT 训练中用于“掩盖”部分单词,让模型预测原始单词。
<EOT> End of Turn 对话轮次结束符,用于多轮对话,指示当前对话轮次的结束。
<EOD> End of Document 文档结束符,用于区分不同的文档,特别是在多文档处理任务中。
<S> Start Token 起始符号,类似于 <BOS>,但在某些模型(如 T5)中使用。
</s> End Token 结束符号,在某些 Transformer 模型(如 T5、BART)中用于标记输入或输出的结束。
<USER> User Token 用户标识符,用于区分用户输入,常用于对话模型。
<ASSISTANT> Assistant Token 助手标识符,用于区分 AI 生成的回答,常用于 AI 对话模型(如 ChatGPT)。
<SYSTEM> System Token 系统指令符,用于提供特定的系统指令或控制 AI 行为(如 OpenAI API 的 system prompt)。

不同的 LLM(大语言模型) 可能会使用不同的特殊符号。

大模型参数

在大模型推理过程中,常常能看到以下参数:

{
  "top_k": 10,
  "temperature": 0.95,
  "num_beams": 1,
  "top_p": 0.8,
  "repetition_penalty": 1.5,
  "max_tokens": 30000,
  "message": [
    {
      "content": "你好!",
      "role": "user"
    }
  ]
}

我们熟悉的大多数语言模型都是通过重复生成Token序列(Sequence)中的下一个Token来运作的。

每次模型想要生成另一个Token时,会重新阅读整个Token序列并预测接下来应该出现的Token

这种策略被称为自回归生成

在自然语言任务中,我们通常使用一个预训练的大模型来根据给定的输入文本生成输出文本(比如一个答案或一个结尾)。

为了生成输出文本,需要让模型逐个预测每个 Token ,直到达到一个终止条件(如一个标点符号或一个最大长度)。

在每一步,模型会给出一个概率分布,表示它对下一个单词的预测。

例如,如果输入的文本是我最喜欢的,那么模型可能会给出下面的概率分布。

f656472cfffdc1e8e2d1689dff81cc47.jpeg

如何从这个概率分布中选择下一个单词呢?

贪心解码:

  • 直接选择概率最高的单词,这种方法简单高效,但是可能会导致生成的文本过于单调和重复。

随机采样:

  • 按照概率分布随机选择一个单词,这种方法可以增加生成的多样性,但是可能会导致生成的文本不连贯和无意义。

Beam Search:

  • 维护一个大小为 K 的候选序列集合,每一步从每个候选序列的概率分布中选择概率最高的 K 个单词。
  • 然后保留总概率最高的 K 个候选序列,这种方法可以平衡生成的质量和多样性,但是可能会导致生成的文本过于保守和不自然。

Top-K采样

Top-K 采样是对前面贪心策略的优化,它从排名前 K 的 Token 中进行抽样,允许其他分数或概率较高的 Token 也有机会被选中。

在很多情况下,这种抽样带来的随机性有助于提高生成质量。

Top-P采样

Top-K 有一个缺陷,那就是K 值取多少是最优的?非常难确定。

  • 于是出现了动态设置 Token 候选列表大小策略——即核采样

在每一步,只从累积概率超过某个阈值 P 的最小单词集合中进行随机采样,而不考虑其他低概率的单词。

  • 它只关注概率分布的核心部分,而忽略了尾部部分。

例如,如果 P=0.9,那么我们只从累积概率达到 0.9 的最小单词集合中选择一个单词,而不考虑其他累积概率小于 0.9 的单词。

这样可以避免采样到一些不合适或不相关的单词,同时也可以保留一些有趣或有创意的单词。

Top-P 值通常设置为比较高的值(如0.75),目的是限制低概率 Token 的长尾。

我们可以同时使用 Top-K 和 Top-P,如果 K 和 P 同时启用,则 P 在 K 之后起作用。

Temperature采样

Temperature这个参数可以告诉机器如何在质量和多样性之间进行权衡。

较低的 Temperature 意味着更高的质量,而较高的 Temperature 意味着更高的多样性。

当 Temperature 设置为零时,模型总是会选择具有最高可能性分数的Token,从而导致模型生成的回复缺乏多样性。

  • 但却能确保总是选择模型评估出的最高质量的Token来生成回复。

在较低的温度下,我们的模型更具确定性,而在较高的温度下,则不那么确定。

频率惩罚(Frequency Penalty)

让Token每次在文本中出现都受到惩罚。

这可以阻止重复使用相同的Token/单词/短语,同时也会使模型讨论的主题更加多样化,更频繁地更换主题。

存在惩罚(Presence Penalty)

一种固定的惩罚,如果一个Token已经在文本中出现过,就会受到惩罚。

这会导致模型引入更多新的Token/单词/短语,从而使其讨论的主题更加多样化。

  • 话题变化更加频繁,而不会明显抑制常用词的重复。

就像 Temperature 一样,频率惩罚和存在惩罚会引导我们远离最佳的可能回复,朝着更有创意的方向前进。

Seed(种子)

用于初始化随机数生成器的数值。

目的:确保在相同的种子值下,模型的随机行为是可重复的。

通过设置相同的种子值,可以在不同的运行中得到相同的结果,方便进行实验和调试,不同的种子值会导致不同的随机结果。

与其他参数相互独立,但在进行实验和比较时,可以通过固定种子值来排除随机因素的影响。

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!