大语言模型的计算能力


LLM 的几个核心数学问题


  1. N-GRAM 的计算能力问题
  2. 过参数化模型的统计学习问题
  3. 非凸的数值优化问题
  4. 对深度神经网络的数学理解
  5. Transformer 算子的含义
  6. fine-tuning 的数学含义

N-GRAM 的计算能力


  • 大语言模型的基本范式:
  • 假设 $w_1, w_2,\dots, w_{N}$ 是一个单词序列。我们可以按如下公式计算单词序列的概率:

$$ p(w_{1},w_{2},\dots,w_{N})=\prod^N_{i=1}p(w_{i}|w_{1},w_{2},\dots,w_{i}) $$

  • 该模型是一个 $N-1$ 阶的马尔可夫链,称为 N-GRAM 模型。
  • 该模型的计算能力是有限的,因为它的是个有穷自动机。

  • 非确定型有穷自动机(NFA) 是一个 5 元数组 $Q,\Sigma,\delta,q_0,F$,其中
    • $Q$ 是一个有穷集合,称为状态集
    • $\Sigma$ 是一个有穷集合,称为字母表
    • $\delta:Q\times\Sigma_\varepsilon\rightarrow \mathcal{P}(Q)$ 是转移函数
    • $q_0\in Q$ 是起始状态
    • $F \subseteq Q$ 是接受状态集

大模型是有穷自动机的证明过程


  • 令 $q_0 =\varepsilon$ 为初始状态,大语言模型的预测函数记为

$$ \phi:{s_0s_1s_2…s_{n-1}}\rightarrow s_n,s_i \in \Sigma $$

  • 取 $\delta$ 为:

$$ \begin{equation} \delta(q,\sigma) = \left \{ \begin{array}{ll} q \circ\sigma & \sigma \neq \varepsilon\\ q \circ\phi(q) & \sigma = \varepsilon \end{array} \right. \end{equation} $$

  • 也就是将 $Q$ 设置为已经拥有的上文,持续输入或预测下一个字符。

  • Bhattamishra et al. 2020 中也有类似的实验,实验中基于 Transformer 的大语言模型甚至只能识别弱化的正则语言。
    • 大模型无法判别一个 ${[0|1]^*}$ 序列中是否有奇数个 $1$。
    • 给定 $n$ 大模型无法生成 $(aa)^n$。
  • Zhou et al. 2023 中还尝试论述了基于 Transformer 的大语言模型也无法实现加法运算之类的复杂运算。
  • 以及,有穷自动机无法判定 $\{0^n\#1^n\}$ 形式的序列;也无法进行基础的四则运算(无法处理括号的闭合和乘法的优先顺序)。

大模型计算能力是有限的


  • 大模型不具备推理能力,这件事与模型的规模无关。
  • 大模型是通过语言概率分布的泛化来模拟出推理能力的假象。
    • 例如:大模型不会数数。他只是把看到过的数数类型的答案都记住了,然后用类比的方式去回答新的问题;如果答案在记忆中,就会回答正确。
    • 更大的模型可以记住更多的答案,但是这并不是我们想要的答案。
  • 我们需要新的范式来解决 AGI 问题。

Agent + LLM 可以成为完备图灵机


  • Agent 的基本范式是一个 While 程序。
  • 例如下面几种常见的 Agent:
    1. ReAct 获得反思推理能力
    2. BabyAGI 基础的计划任务 Agent
    3. Reflexion 长期记忆和短期记忆(短期记忆就符合上述流程)
    4. AutoGPT 第一个全能 Agent

  • 代码示例:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@dataclass
class ReAct(ABC):
    thought: Optional[str] = None
    action: Optional[str] = None

    def __post_init__(self):
        self.obs = self.run() # 获取执行 Action 的结果

act = ReAct()
acts = []
while not act.done:
    acts.append(act)
    prompt = get_prompt(acts)
    act: ReAct = ReAct.parse(llm.call(prompt)) # 调用大模型

编程语言 WHILE 语义 (Semnatik)


  • 一个 while 程序 $P$ ,通过传递 $k$ 个参数,返回一个结果, 即 $f:\mathbb{N}^k\rightarrow\mathbb{N}$
  • 其他未定义的参数可以在程序里被调用,但是必须设定为 $0$
  • WHILE 程序的结果在结束结束后通过 $x_0$ 传达
  • 对于一个 WHILE 程序,有三种运行模式:
    • 变量赋值: $x_i=x_j+c,c\in{0,1,−1}$
    • $P_1$;$P_2$ ( $P_1$,$P_2$ 是两个任意程序程序),先运行 $P_1$ ,再运行 $P_2$
    • WHILE $x_i \neq 0$ DO $P$ END 意思是, $P$ 程序将一直被运行,直到 $x_i$ 等于 0


  • 实现图灵完备的方法不是唯一的。例如,Schuurmans 2023 就证明了,当可以使用外部存储时,大模型是图灵完备的。
  • 但是,这并不意味着 Agent + LLM 就是 AGI,毕竟我们现在的电脑本身就是图灵完备的,但是我们并不认为电脑就是 AGI。
  • 我们需要的是一个可以自适应的 Agent,而不是一个固定的 Agent。也就是可以通过学习来改变自己的行为,而不是通过人工的方式来改变自己的行为。

以整数加法为例


我们希望 Agent 学会整数加法。但学会的方式不是我们给了它加法的程序让它执行,而是通过加法的真值,“推导”出加法的程序。模拟人做加法的方式,我们尝试让机器训练出加法程序


  • 已知
    • 十以内的加减法(这部分的结果是背下来的);
    • 用字符串来保存十进制的数字;
    • 有额外的存储可以利用(保存进位时的信息);
  • 目标:
    • 懂得如何利用已知的十以内的加减法的结果,进行多位的加减法运算;
    • 计算时需要从后向前计算;
    • 需要保留进位的信息;
    • 确保计算结果一定是准确的;

  • 这应该是一个强化学习的过程——只有计算正确时,才会获得奖励。其中,尝试探索的动作空间是:
    • 如何利用十以内的加减
    • 通过怎样的计算顺序
    • 如何利用额外的存储
  • 最终以此来生成一个完整的加法运算流程。

使用 RL 训练 Agent


Agent 的 While 循环模式恰好符合 Bellman 方程的形式。


通过强化学习训练 Agent,直观上,状态空间和奖励都不难定义,难的是究竟如何定义 Action 空间。


  • 例如十以内的加减法为什么可以成为加法的 Action?
  • 进一步,当我们尝试训练乘法时,九九乘法表一定在我们的 Action 空间中,那如何凭空让机器找到这个“九九乘法表”呢?
  • 甚至计算乘法时,加法也需要在 Action 空间中。这意味着,强化学习能学会内容是有序的,而且 Action 空间的生成也是依赖之前的训练结果的。
  • 这个结果并不意外,《技术的本质》一书中就提到过人类技术的发展是渐进的,而不是突变的。

牛顿无法简单的通过阅读代数和几何来发明微积分。问题是,要生成全新的想法,还缺什么?

有可能达成 AGI 的新范式应当需要 Agent + LLM 的联合训练,而不是各自的单独训练。


Thanks