# 第 0 章 初始化

本书的目的:提出一套能够让我们从理论上分析实际深度神经网络的原理和方法。主要包含两点:

  • 在理论上为什么深度神经网络可以实现其目标?
  • 我们如何能够在实践中通过这些理论指导来实现目标?

0.1 有效理论

(1)问题的提出

虽然现代深度学习模型是由看似无数的基本计算组件构建的,但解释神经网络从低级组件如何计算得到函数值的的第一性原理微观描述还是易于理解的。这种微观描述是将输入通过多层组件转换为输出的一组指令,不过这些组件在训练过程中需要精细地调优,而一个系统需要掌握特定的调优知识才能产生有用的输出。

第一性原理(First principle):在哲学与逻辑学领域,指不能从任何其他命题或假设推导出来的基本命题或假设,不能被省略或删除,也不能被违反,最早由亚里士多德提出。在数学中,第一原理被称为公理或假设。在物理学和其他科学中,如果某项理论工作直接从已建立的科学水平开始,并且不做诸如经验建模和参数拟合等假设,则可以称其来自第一性原理。例如某个理论利用薛定谔方程在一些近似方法下求解了电子结构,而不是利用实验数据得到拟合参数,则可称其来自第一性原理。

不幸的是,调优的复杂性往往模糊了人们对第一性原理的宏观理解,即 “为什么深度神经网络能够计算一个特定函数而不是另一个?”。神经网络中大量的神经元在分别执行不同的任务,因此想在理论上理解这些模型看似没有任何希望,认为利用一小部分数学原理就能完成这项工作的想法看似也很愚蠢。

(2)研究思路

幸运的是,理论物理学拥有为含大量组件的复杂系统寻找简单 有效理论(effective theory) 的悠久传统。在为物理世界建模时,大量物理程序取得的成功表明:也许某些工具可能对从理论上理解深度神经网络有用

有效理论(effective theory):指一类用于描述一组特定观测结果的科学理论,此类理论所使用的机制与导致观测结果的实际原因之间可能不具有直接对应关系。这意味着,该理论对某种效应进行了建模,但却没有对导致该效应的实际原因进行充分建模。

首先简要回顾一下热力学和统计力学的成功,它们可以用 微观第一性原理 解释具有许多组分的复杂系统的宏观行为。

作为工业时代的科学成果,热力学产生于对蒸汽机的描述和创新。蒸汽机是一个由很多粒子组成的系统,是最初的黑匣子。来自于经验观察的热力学定律最早被用来解释蒸汽力学,为这些人工机器提供了高水平的宏观理解,并且使蒸汽动力的效率有了巨大提升,但该定律绝对不是最基本的。直到很久之后,麦克斯韦、玻尔兹曼和吉布斯才找到了实验得出的 有效描述第一性原理 之间的联系。他们用 统计力学(statistical mechanics) 解释了如何从 许多微观基本成分的确定性动力学 中统计得出 宏观热力学定律。从统计力学角度来看,热力学定律是一种突显现象,只会出现在大量微观粒子的集体统计行为中。事实上,正是从统计力学中得到的详细理论预测,最终导致了科学界普遍接受了 “物质实际上是由分子和原子组成” 的观点。统计力学的不懈应用还牵引了量子力学的发现,这是晶体管发明的先驱,为信息时代提供了动力。从长远来看,这也是让我们能够开始实现人工智能机器的起因。

值得注意的是,这些物理理论源于对理解人造工程物体(例如蒸汽机)的渴望。尽管存在潜在的错误理解,但物理学并没有区分自然现象和人工现象。它关注的是 “提供一套能够解释过去的经验观察并预测未来实验结果的统一原理”;理论计算的重点是将可测量(或可观测)结果,直接与定义理论的基本 常数参数 联系起来。这种观点还意味着模型的预测准确性与其数学易处理性之间的权衡,并且前者必须优于后者理论才能得到成功(从理论到物理现实的短线是必不可少的)。成功的理论可以提供对现象的全面理解,并推动技术的实质进步,就像统计物理起到了从蒸汽时代到信息时代的跨时代桥梁作用。

从蒸汽机的第一性原理得到如下启示:当一个理论问题由许多基础成分组合而成时,问题可以得到简化。不过,深度学习与上述蒸汽机示例之间有一个显著不同:深度学习的微观单元是人工设置的,我们已经理解了微观规律,真正的任务是要了解其在宏观尺度上会出现什么样的新型规律,而这些新规律来自于这些深度学习模型的统计特性。

0.2 理论的最小化

方法比发现更重要,因为正确的研究方法会带来新的、更有价值的发现。 — 列夫朗道

从本质上讲,神经网络是一个由许多被称为神经元的计算单元构建而成,用于计算某个函数的解。其中每个神经元本身就是一个简单函数,它考虑了传入信号的加权和,然后将该加权和与某个阈值作比较后,以一种特有方式激活。神经元被平行地组织成层,深度神经网络指由多个层依次组成的网络,该网络由激活阈值和神经元之间的加权连接参数化。目前最先进的神经网络可以有超过 10001000 亿个参数。

先简单地将神经网络视为参数化的函数

f(x;θ)(0.1)f(x; \theta) \tag{0.1}

为了使该函数有意义,问题的核心是求解高维度的参数向量 θ\theta。这可以被凝练为两步:

(1)首先从简单的 初始分布

p(θ)(0.2)p(\theta) \tag{0.2}

中随机采样得到参数向量 θ\theta 的初始值,很多应用场景中,虽然没有明确定义 p(θ)p(\theta),但实际上隐含着默认的 p(θ)p(\theta)

(2)然后,迭代地优化调整参数向量 θθ\theta \rightarrow \theta^\ast ,使得最终得到的 f(x;θ)f(x;\theta^\ast) 非常接近于目标函数 f(x)f(x) ,即

f(x;θ)f(x)(0.3) f(x;\theta^\ast) \approx f(x) \tag{0.3}

这被称为 函数近似(function approximation)。找到最优的 θ\theta^\ast 需要拟合形式为 (x,f(x))(x, f(x)) 的成对可观测 训练数据(training data)。不断调整参数的过程被称为 训练(training),而调整参数的特定过程或方法被称为学习算法(learning algorithm)

本书的目的,就是从理论上理解训练后得到的神经网络函数:

f(x;θ)(0.4)f(x;\theta^\ast) \tag{0.4}

或者说,我们希望根据训练得到的参数 θ\theta^\ast ,从神经网络的第一性原理 微观描述(microscopic description) 来理解或剖析该函数的 宏观行为(macroscopic behavior)。我们还想了解 式 0.3 中函数近似的工作原理,并评估 f(x;θ)f(x; \theta^\ast) 是如何使用训练数据 (x,f(x))(x,f(x)) 逼近 f(x)f(x) 的。考虑到参数 θ\theta 的高维度和 式 0.3 所需的调优程度,上述目的似乎看起来很幼稚,超出了现实理论方法的范围。

为便于理解,先从训练后的 f(x;θ)f(x;\theta^\ast) 关于参数 θ\theta 的泰勒展开式开始讨论(即假设该函数已知)。常规做法是在参数 θ\theta 的某个初始值处计算展开式中的 函数初值 和各种 导数值

f(x;θ)=f(x;θ)+(θθ)dfdθ+12(θθ)2d2fdθ2+(0.5)f\left(x ; \theta^{\star}\right)=f(x ; \theta)+\left(\theta^{\star}-\theta\right) \frac{d f}{d \theta}+\frac{1}{2}\left(\theta^{\star}-\theta\right)^{2} \frac{d^{2} f}{d \theta^{2}}+\ldots \tag{0.5}

泰勒展开式可以说明三个方面的问题:

问题 1: 精确近似问题

通常展开式中包含无数个项,如果按照原理计算精确值,需要计算所有项。特别是,当参数的目标值与初始值之差越大时,就需要计算越多的项来得到更好的近似。

f,dfdθ,d2fdθ2,d3fdθ3,d4fdθ4,(0.6)f, \quad \frac{d f}{d \theta}, \quad \frac{d^{2} f}{d \theta^{2}}, \quad \frac{d^{3} f}{d \theta^{3}}, \quad \frac{d^{4} f}{d \theta^{4}}, \ldots \tag{0.6}

问题 2: 随机性问题

参数的初值来自于 p(θ)p(\theta) 的随机样本,意味着不同的初始化会产生不同的函数估计,同时也意味着 式 0.6 中的每一项 f,dfdθ,d2fdθ2,f,\frac{df}{d\theta},\frac{d^2f}{d\theta^2},\ldots ,都是输入 xx 的一个随机函数。也就是说,神经网络的随机初始化引入了一个在神经网络函数及其导数上的概率分布,这可以反映为一个需要我们确定的、从 p(θ)p(\theta)p(f,dfdθ,d2fdθ2,)p\left( f,\frac{df}{d\theta},\frac{d^2f}{d\theta^2},\ldots\right) 的映射:

p(θ)p(f,dfdθ,d2fdθ2,)(0.7)p(\theta) \rightarrow p\left(f, \frac{d f}{d \theta}, \frac{d^{2} f}{d \theta^{2}}, \ldots\right) \tag{0.7}

式 0.7 右侧是一个由无数随机函数组成的联合概率分布,而且它们之间通常存在错综复杂的依赖关系。此时,即便我们仅考虑神经网络函数初值项(即第一项)的边缘分布 p(f)p(f),也断然没有理由相信它在解析上是易于处理的。

**问题 3: **

学得的参数 θ\theta^\ast 是一个复杂训练过程的结果。一般来说, θ\theta^\ast 并不唯一,并且依赖于有关的一切事务:

θ[θ](θ,f,dfdθ,d2fdθ2,; learning algorithm; training data )(0.8)\theta^{\star} \equiv\left[\theta^{\star}\right]\left(\theta, f, \frac{d f}{d \theta}, \frac{d^{2} f}{d \theta^{2}}, \ldots ; \text { learning algorithm; training data }\right) \tag{0.8}

在实践中,学习算法通常是 迭代(iterative) 的,会在许多步骤中累积变化,并且其动态也是非线性的。因此,训练所得参数 θ\theta^\ast 将以非常复杂的方式依赖于初始化时的所有量,例如:参数 θ\theta 的特定随机样本、神经网络函数初值项 f(x;θ)f(x; \theta) 、所有导数项 df/dθdf/d\thetad2f/dθ2d^2f/d\theta^2… 、学习算法的细节、训练数据 (x,f(x))(x,f(x)) 等。也就是说,确定 θ\theta^\ast 的解析表达式必须包含对所有这些因素的考虑,非常复杂。

如果我们能够解决上述三个问题,那么原理上就能够使用 式 0.5 的泰勒展开式来研究训练好的神经网络函数。具体来说,我们就是在寻找一个 f(x;θ)f(x;\theta^\ast) 上的、以学习算法和训练数据为条件的条件分布:

p(f)p(f(x;θ) learning algorithm; training data )(0.9)p\left(f^{\star}\right) \equiv p\left(f\left(x ; \theta^{\star}\right) \mid \text { learning algorithm; training data }\right) \tag{0.9}

这里的条件化应当是简洁的,即很容易为不同的 训练算法训练数据 评估该分布,而不必每次都去求解 问题 3 的某个版本。开发 式 0.9 的解析计算方法正是本书的主要目标。

当然,对于一般性的参数化函数 f(x;θ)f(x; \theta) 来说,解决上述三个问题是非常困难的。不过我们在这里并非要解决 一般性函数 的问题,而是只关注 深度神经网络函数。也就是说,对上述问题的任何解决方案都必须针对神经网络函数的特定结构。尽管如此,我们还是会尝试给出解决上述复杂问题的一些直觉讨论。

0.2.1 稀疏性原理

图 1 所示,设神经网络的 宽度(width)nn深度(depth)LL,这两个要素确定了神经网络的主要结构信息。因此,从宏观角度,人们首先会想到的问题就是:到底宽度更重要还是深度更重要?当参数数量相同的情况下,深度大好还是宽度大好呢?

图 1:一个简单的多层神经网络图,描述了输入 xx 如何通过一系列中间信号 s(1)s^{(1)}s(2)s^{(2)}s(3)s^{(3)} 转换为输出 f(x;θ)f(x ; θ) 。白色圆圈代表神经元,顶部的黑点代表网络输出。参数 θθ 是隐含的,它们表示不同有向箭头信号的重要性,以及每个神经元的触发阈值(偏置)。

(1)无限宽神经网络

我们可以先从一种极端情况开始探讨,即无限宽神经网络:

limnp(f)(0.10)\lim_{n\rightarrow \infty}p(f^\ast) \tag{0.10}

尽管这种神经网络物理上是不存在的,但由于其只有一个隐藏层,所以确实能够简化 p(f)p(f^\ast) 的表示,并且使上述三个问题都完全良性化

  • 对于问题 1 : 阶数大于等于 22 的所有高阶导数将消失,即只需要计算神经网络函数项和一阶导数项

f,dfdθ(0.11)f, \frac{d f}{d \theta} \tag{0.11}

  • 问题 2: 随机函数的联合分布也随之变简单,各随机函数的形式很简单,并且相互独立

limnp(f,dfdθ,d2fdθ2,)=p(f)p(dfdθ)(0.12)\lim _{n \rightarrow \infty} p\left(f, \frac{d f}{d \theta}, \frac{d^{2} f}{d \theta^{2}}, \cdots\right)=p(f) p\left(\frac{d f}{d \theta}\right) \tag{0.12}

  • 问题 3: 训练动态是线性的,且与学习算法的细节无关,让我们可以找到一个 θ\theta^\ast 的封闭形式解:

limnθ=[θ](θ,f,dfdθ; training data )(0.13)\lim _{n \rightarrow \infty} \theta^{\star}=\left[\theta^{\star}\right]\left(\theta, f, \frac{d f}{d \theta} ; \text { training data }\right) \tag{0.13}

因此,训练后的分布 式 0.10 是一个均值非零的简单高斯分布,我们可以很容易地分析这种网络所计算的函数。

上述简化是 稀疏性原理(principle of sparsity) 的结果。尽管看起来将神经网络扩展为无限数量的组件会变得更加复杂,但从任何特定神经元角度来看,无限数量信号的输入使得大数均衡法则模糊了信号中的许多细节,其结果就是:许多这样的无限宽神经网络的有效理论导致其描述的极度稀疏性(例如,采用 式 0.11 的截断形式)。

不幸的是,形式上的无限宽会导致很差的深度神经网络模型:首先,无限宽不可能是网络所拥有的物理性质,其次,由其训练后产生的分布 ( 式 0.10 ) ,在超过一层的神经网络中,会出现理论描述和实际观测不匹配的现象。不仅如此,无限宽神经网络也无法学习其输入的 表示(representation):对于任何输入 xx,其在隐藏层中的各种变换( s(1),s(2),s^{(1)}, s^{(2)},\ldots)将始终与初始化保持一致,这导致了一种随机表示的现象(即不同初始化对应不同表示),进而严重限制了此类网络所能学习的函数类型。经验表明, 非平凡的表示学习(non-trivial representation learning) 是多层神经网络的本质性质,因此,这种情况更进一步证明了严格无限宽理论与现实之间的脱节。

(2)有限宽神经网络

从理论角度来看,上述问题主要源于无限数量的输入信号使每个神经元的有用细节都被清洗掉了。尤其是,这种无限累积完全消除了神经元之间微妙的相关性,而这些相关性却是在 表示学习 的训练过程中希望被放大的。我们需要找到一种方法来恢复并研究现实中的有限宽神经网络中神经元之间的相互作用。

考虑到这一点,也许可以用某种方式来对无穷宽极限进行修正,这种修正在宽度 nn 变大时,会逐渐变小。为此实现这种修正,可以引入摄动理论(perturbation theory) 并使用 1/n1/n 扩展来研究深度学习,将逆层宽 ϵ1/n,ϵ1\epsilon ≡1/n, \epsilon \ll1 作为扩展参数。

摄动理论 使用一些特别的数学方法来对很多不具精确解的问题给出近似解。此类方法从相关的较简单问题的精确解开始入手,将原始问题分为 具有精确解的较简单部分不具精确解的扰动部分。摄动理论适用的问题通常具有以下性质:通过在较简单部分基础上加入一个微扰项的数学表示,来计算出整个问题的近似解。摄动理论给出的解通常会表达为一个幂级数,幂级数的第一个项是精确解,后面的项为修正。

换句话说,我们放宽严格的无限宽限制,用以下展开式来计算训练后的分布( 式 0.9 ):

p(f)p{0}(f)+p{1}(f)n+p{2}(f)n2+(0.14)p\left(f^{\star}\right) \equiv p^{\{0\}}\left(f^{\star}\right)+\frac{p^{\{1\}}\left(f^{\star}\right)}{n}+\frac{p^{\{2\}}\left(f^{\star}\right)}{n^{2}}+\ldots \tag{0.14}

其中, p{0}(f)limnp(f)p^{\{0\}}\left(f^{\star}\right) \equiv \lim _{n \rightarrow \infty} p\left(f^{\star}\right) 为之前讨论的无限宽极限, p{k}(f),k1p^{\{k\}}\left(f^{\star}\right), k \geq 1 为一系列对该极限进行修正的项。

在本书中,我们将重点计算第一阶修正,即将展开式截断为

p(f)p{0}(f)+p{1}(f)n+O(1n2)(0.15)p\left(f^{\star}\right) \equiv p^{\{0\}}\left(f^{\star}\right)+\frac{p^{\{1\}}\left(f^{\star}\right)}{n}+O\left(\frac{1}{n^{2}}\right) \tag{0.15}

这种相互作用理论在形式上仍然保持了简洁性,仍然能够让前述三个问题易于处理:

对于问题 1 : 在 1/n1/n 阶时,阶数大于等于 44 的所有高阶导数(d{k}f/dθk,k4d^{\{k\}} f / d \theta^{k} , k \geq 4)将被截断,我们只需要跟踪神经网络函数项初值项和一到三阶导数项

f,dfdθ,d2fdθ2,d3fdθ3(0.16)f, \quad \frac{d f}{d \theta}, \quad \frac{d^{2} f}{d \theta^{2}}, \quad \frac{d^{3} f}{d \theta^{3}} \tag{0.16}

因此,稀疏性原理仍然会限制对偶有效理论描述,尽管不像无限宽度极限那样广泛。

对于问题 2:在 1/n1/n 阶时,联合分布也相应地包含上述项对应的随机函数,利用扰动原理可以计算其所有细节。

p(f,dfdθ,d2fdθ2,d3fdθ3)(0.17)p\left(f, \frac{d f}{d \theta}, \frac{d^{2} f}{d \theta^{2}}, \frac{d^{3} f}{d \theta^{3}}\right) \tag{0.17}

对于问题 3:我们可以使用动态的摄动理论来处理非线性的训练动态,并找到 θ\theta^\ast 的封闭形式解析解:

θ=[θ](θ,f,dfdθ,d2fdθ2d3fdθ3; learning algorithm; training data )(0.18)\theta^{\star}=\left[\theta^{\star}\right]\left(\theta, f, \frac{d f}{d \theta}, \frac{d^{2} f}{d \theta^{2}} \frac{d^{3} f}{d \theta^{3}} ; \text { learning algorithm; training data }\right) \tag{0.18}

特别是,这将使依赖于学习算法细节的解变得透明和明显。

作为结果,我们对 1/n1/n 阶的已训练分布的描述( 式 0.15 )是一个近高斯分布(nearly-Gaussian distribution)

除了在解析上易于处理之外,这种 1/n1/n 阶的截断描述方式,将满足我们计算和理解已训练神经网络函数分布 p(f)p(f^\ast) 的目标。由于其结合了神经元之间的相互作用,因此这种描述方式依赖于学习算法细节,并且包含 非平凡的表示学习 。定性的说,这种 1/n1/n 阶的有效理论比无限宽描述更接近于现实神经网络,将其作为理解深度学习的理论最小模型更加有用。

那从定量的角度如何呢?实际上我们可以通过计算展开式 ( 式 0.14 ) 中的高阶项得到更精细的描述,那么是否应该包括这些项呢?虽然本书中形式上使得计算 1/n1/n 阶展开式中的这些额外项完全系统化,但先进的修正方法实际上往往来自于对截断误差的深入了解。特别是,与宽度 nn 相比较的正确尺度,应当是深度 LL。也就是说,式 0.14 中各项的相对大小由深度与宽度之比控制。

rL/n(0.19)r \equiv L/n \tag{0.19}

这让我们可以通过以下方式重新理解 “无限宽度”与 “有限宽度” 以及 “浅” 与 “深” 的理解:

  • 在严格的极限 r0r → 0 情况下,神经元之间的交互作用被关闭:无限宽极限 ( 式 0.10 ) 实际上仅仅是一个表面上的描述。此类网络并不深,因为其相对深度为零:L/n=0L/n = 0

  • 0<r10 < r \ll1 的情况下,神经元之间存在 非平凡的交互作用:在 1/n1/n 阶截断的有限宽有效理论描述 ( 式 0.15) ,可以准确计算已训练神经网络的输出。此类网络是 有效深(effectively deep) 的。

  • r1r \gg 1 的情况下,神经元之间是强耦合的:神经网络会出现混乱表现,不同的实例之间的巨大扰动导致无法获得有效描述。此类网络是 过深(overly deep) 的。因此,大多数实际使用的神经网络具有比较小的深度与宽度比,我们在 1/n1/n 阶处截断的描述形式 ( 式 0.15 ) 也提供了很好的定量对应。

更准确地说,存在一个最佳比 rr^\ast,它能够划分有效区域 rrr ≤r^\ast 和无效区域 r>rr > r^\ast

由此可见,要真正描述多层神经网络的特性(即理解深度学习),我们需要研究 “大型但宽度有限” 的神经网络。通过这种方式,我们才能够得到对现实深度神经网络的宏观有效理论描述。