第 7 章 基于梯度的学习
在上一章中,我们将贝叶斯推断做为一种学习算法进行了讨论,它自然源于对神经网络初始化时的研究。我们从使用参数(权重和偏差)描述神经网络架构开始,通过积分这些参数,找到 作为层和输入样本函数的
预激活 z ( ℓ ) ( x ) z^{(\ell)}(x) z ( ℓ ) ( x ) 上的分布,其中包括输出分布 p ( z ( L ) ( x ) ) p(z^{(L)}(x)) p ( z ( L ) ( x )) 。这可以被解释为此类模型集成上的先验分布,然后我们解释了贝叶斯规则逻辑如何将先验演化为以观测数据为条件的后验分布。尽管贝叶斯推断在理论上很优雅和简洁,但随着条件数据样本数量的增加,其实现变得难以计算。
退一步想,这个设置方式实际上有点奇怪:我们通过对参数的积分计算得出输出的分布,对实际网络本身似乎并不感兴趣。由于贝叶斯推断只关心模型的输出分布,因此推断的起点实际上可以是任何模型集成,因为贝叶斯推断最初不是专门为神经网络量身定制的。那么,为什么要经历从神经网络模型开始的所有麻烦呢?
深度神经网络令人兴奋,因为它们工作效果非常好。在实践中,此类网络经过明确训练后,可以用于执行有用的任务。最常见的是,通过基于梯度的优化过程(例如梯度下降( gradient descent) )来迭代更新模型参数来进行学习。
特别是,通过优化某些辅助的损失函数(直接将网络输出 f ( x ; θ ) ≡ z ( L ) ( x ) f(x; θ) ≡ z^{(L)}(x) f ( x ; θ ) ≡ z ( L ) ( x ) 与某些期望结果进行比较), 基于梯度的学习算法可以高效地处理海量训练数据或标签。该优化过程仅产生一个确定的神经网络模型,即从初始化分布中采样一组网络参数样本、为感兴趣的任务训练并产生一个确定的神经网络,而不是产生完整的神经网络集成。事实上,基于梯度的学习方法的数据效率和可扩展性优势,掩盖了其因缺乏集成而无法表达预测信心的缺陷。
由于梯度下降涉及对模型参数进行显式更新,因此第一步是返回其被积分前的位置。在监督学习中,模型参数调整量
正比于 函数逼近误差
与 梯度
之积。这种分解激发了对 神经正切核 (neural tangent kernel, NTK) 的研究。简而言之,神经正切核是一种哈密顿量,每当使用梯度下降来优化辅助损失(可被视为对函数近似的某种评分)时,它都会控制可观测量的训练动态 。正如我们在 第 10 章
、 第 11 章
和 第 ∞ 章
中详述的那样,了解给定神经网络架构的 神经正切核
,能够有效地描述该模型的基于梯度的学习算法。
在本章中,我们在 第 7.1 节
中简要介绍监督学习,然后在 第 7.2 节
中讨论梯度下降,非常笼统地关注了神经正切核如何在监督学习中出现。在下一章中,我们将利用在 第 4 章
中使用的层到层 表征群流
技术,将神经正切核纳入深度学习的有效理论。
7.2 梯度下降与函数逼近
7.2.1 梯度下降
7.2.2 张量梯度下降
在此变体中,我们可以通过将修改 式 7.8
来定义更通用的学习算法族:
θ μ ( t + 1 ) = θ μ ( t ) − η ∑ ν λ μ ν d L A d θ ν ∣ θ = θ ( t ) \theta_{\mu}(t+1)=\theta_{\mu}(t)-\left.\eta \sum_{\nu} \lambda_{\mu \nu} \frac{d \mathcal{L}_{\mathcal{A}}}{d \theta_{\nu}}\right|_{\theta=\theta(t)}
θ μ ( t + 1 ) = θ μ ( t ) − η ν ∑ λ μν d θ ν d L A θ = θ ( t )
其中张量 λ μ ν \lambda_{\mu \nu} λ μν 是参数空间上的 学习率张量(learning-rate tensor) , 式 7.8
中的原始梯度下降更新是张量 λ μ ν = δ μ ν \lambda_{\mu \nu}=\delta_{\mu \nu} λ μν = δ μν 时的一个特例。在原始梯度下降 式 7.8
中,有一个全局学习率 η \eta η ,在张量梯度下降 式 7.11
中,我们可以自由地通过张量 λ μ ν \lambda_{\mu\nu} λ μν 来分别指定第 μ \mu μ 个参数 θ μ \theta_\mu θ μ 根据第 ν \nu ν -th 个梯度分量 d L A / d θ ν d \mathcal{L}_{\mathcal{A}} / d \theta_{\nu} d L A / d θ ν 更新的方式。使用 式 7.11
中的广义更新来重复 式 7.9
中的泰勒展开式,我们发现
Δ L A = − η ∑ μ , ν λ μ ν d L A d θ μ d L A d θ ν + O ( η 2 ) , \Delta \mathcal{L}_{\mathcal{A}}=-\eta \sum_{\mu, \nu} \lambda_{\mu \nu} \frac{d \mathcal{L}_{\mathcal{A}}}{d \theta_{\mu}} \frac{d \mathcal{L}_{\mathcal{A}}}{d \theta_{\nu}}+O\left(\eta^{2}\right),
Δ L A = − η μ , ν ∑ λ μν d θ μ d L A d θ ν d L A + O ( η 2 ) ,
表明对于足够小的学习率,训练损失几乎肯定会再次减少,只要学习率张量 λ μ ν \lambda_{\mu \nu} λ μν 是一个半正定矩阵。
7.2.3 神经正切核
到目前为止,我们所说的有关梯度下降的内容都适用于任何函数的优化。但在函数逼近的背景下,通常还存在一个额外的结构:优化目标是模型输出的函数 。为了利用这种结构,通过链式法则,损失的梯度可以表示为
d L A d θ μ = ∑ i = 1 n out ∑ α ~ ∈ A ∂ L A ∂ z i ; α ~ d z i ; α ~ d θ μ , \frac{d \mathcal{L}_{\mathcal{A}}}{d \theta_{\mu}}=\sum_{i=1}^{n_{\text {out }}} \sum_{\tilde{\alpha} \in \mathcal{A}} \frac{\partial \mathcal{L}_{\mathcal{A}}}{\partial z_{i ; \tilde{\alpha}}} \frac{d z_{i ; \tilde{\alpha}}}{d \theta_{\mu}},
d θ μ d L A = i = 1 ∑ n out α ~ ∈ A ∑ ∂ z i ; α ~ ∂ L A d θ μ d z i ; α ~ ,
这意味着更新后损失的变化( 式 7.12
)可以分解为:
Δ L A = − η ∑ i 1 , i 2 = 1 n out ∑ α ~ 1 , α ~ 2 ∈ A [ ∂ L A ∂ z i 1 ; α ~ 1 ∂ L A ∂ z i 2 ; α ~ 2 ] [ ∑ μ , ν λ μ ν d z i 1 ; α ~ 1 d θ μ d z i 2 ; α ~ 2 d θ ν ] + O ( η 2 ) . \Delta \mathcal{L}_{\mathcal{A}}=-\eta \sum_{i_{1}, i_{2}=1}^{n_{\text {out }}} \sum_{\tilde{\alpha}_{1}, \tilde{\alpha}_{2} \in \mathcal{A}}\left[\frac{\partial \mathcal{L}_{\mathcal{A}}}{\partial z_{i_{1} ; \tilde{\alpha}_{1}}} \frac{\partial \mathcal{L}_{\mathcal{A}}}{\partial z_{i_{2} ; \tilde{\alpha}_{2}}}\right]\left[\sum_{\mu, \nu} \lambda_{\mu \nu} \frac{d z_{i_{1} ; \tilde{\alpha}_{1}}}{d \theta_{\mu}} \frac{d z_{i_{2} ; \tilde{\alpha}_{2}}}{d \theta_{\nu}}\right]+O\left(\eta^{2}\right) .
Δ L A = − η i 1 , i 2 = 1 ∑ n out α ~ 1 , α ~ 2 ∈ A ∑ [ ∂ z i 1 ; α ~ 1 ∂ L A ∂ z i 2 ; α ~ 2 ∂ L A ] [ μ , ν ∑ λ μν d θ μ d z i 1 ; α ~ 1 d θ ν d z i 2 ; α ~ 2 ] + O ( η 2 ) .
第一个方括号中的量是 函数逼近误差
的量度。以 MSE 损失
为例 ( 式 7.2
),可以看到损失相对于模型输出的梯度正好是预测误差
∂ L A ∂ z i ; α ~ = z i ( x α ~ ; θ ) − y i ; α ~ \frac{\partial \mathcal{L}_{\mathcal{A}}}{\partial z_{i ; \tilde{\alpha}}}=z_{i}\left(x_{\tilde{\alpha}} ; \theta\right)-y_{i ; \tilde{\alpha}}
∂ z i ; α ~ ∂ L A = z i ( x α ~ ; θ ) − y i ; α ~
更一般地,对于其他损失函数,设损失的梯度(或称之为误差因子 )为
ϵ i ; α ~ ≡ ∂ L A ∂ z i ; α ~ , \epsilon_{i ; \tilde{\alpha}} \equiv \frac{\partial \mathcal{L}_{\mathcal{A}}}{\partial z_{i ; \tilde{\alpha}}},
ϵ i ; α ~ ≡ ∂ z i ; α ~ ∂ L A ,
则当模型的输出接近于样本标签时,该误差因子应当很小。或更进一步,误差因子越大, 式 7.13
的更新越大, 式 7.14
的损失变化也越大。
第二个方括号中的量称为 神经正切核(neural tangent kerne, NTK)
H i 1 i 2 ; α ~ 1 α ~ 2 ≡ ∑ μ , ν λ μ ν d z i 1 ; α ~ 1 d θ μ d z i 2 ; α ~ 2 d θ ν . H_{i_{1} i_{2} ; \tilde{\alpha}_{1} \tilde{\alpha}_{2}} \equiv \sum_{\mu, \nu} \lambda_{\mu \nu} \frac{d z_{i_{1} ; \tilde{\alpha}_{1}}}{d \theta_{\mu}} \frac{d z_{i_{2} ; \tilde{\alpha}_{2}}}{d \theta_{\nu}} .
H i 1 i 2 ; α ~ 1 α ~ 2 ≡ μ , ν ∑ λ μν d θ μ d z i 1 ; α ~ 1 d θ ν d z i 2 ; α ~ 2 .
从 式 7.17
可以清楚地看出,神经正切核独立于损失函数 。
重要的是,神经正切核才是函数逼近动力学的主要驱动力。就这一点而言,它控制着一组比训练损失更普遍的可观测量的演变。
考虑任何依赖于模型输出的可观测量
O ( θ ) ≡ O ( z ( x δ 1 ; θ ) , … , z ( x δ M ; θ ) ) , \mathcal{O}(\theta) \equiv \mathcal{O}\left(z\left(x_{\delta_{1}} ; \theta\right), \ldots, z\left(x_{\delta_{M}} ; \theta\right)\right),
O ( θ ) ≡ O ( z ( x δ 1 ; θ ) , … , z ( x δ M ; θ ) ) ,
其中 x δ 1 , … , x δ M ∈ D x_{\delta_{1}}, \ldots, x_{\delta_{M}} \in \mathcal{D} x δ 1 , … , x δ M ∈ D , D \mathcal{D} D 为某些数据集。
举个例子,如果 D \mathcal{D} D 是测试集 B \mathcal{B} B 而 O \mathcal{O} O 是损失函数,那么这个可观测量就是测试损失 L B \mathcal{L}_ {\mathcal{B}} L B 。除了测试损失之外,人们可能想要观察输出 O = z i ( x ) \mathcal{O}=z_{i}(x) O = z i ( x ) 的特定分量的变化,或者对于给定的输入 x x x 想跟踪输出的不同分量之间的相关性 O = z i ( x ) z j ( x ) \mathcal{O}=z_{i}(x) z_{j}(x) O = z i ( x ) z j ( x ) 。对于任何这样的可观测量 式 7.18
,它在更新后的变化由如下表达式给出
O ( θ ( t + 1 ) ) − O ( θ ( t ) ) = − η ∑ i 1 , i 2 = 1 n out ∑ α ~ ∈ A ∑ δ ∈ D [ ∂ L A ∂ z i 1 ; α ~ ∂ O ∂ z i 2 ; δ ] H i 1 i 2 ; α ~ δ + O ( η 2 ) \mathcal{O}(\theta(t+1))-\mathcal{O}(\theta(t))=-\eta \sum_{i_{1}, i_{2}=1}^{n_{\text {out }}} \sum_{\tilde{\alpha} \in \mathcal{A}} \sum_{\delta \in \mathcal{D}}\left[\frac{\partial \mathcal{L}_{\mathcal{A}}}{\partial z_{i_{1} ; \tilde{\alpha}}} \frac{\partial \mathcal{O}}{\partial z_{i_{2} ; \delta}}\right] H_{i_{1} i_{2} ; \tilde{\alpha} \delta}+O\left(\eta^{2}\right)
O ( θ ( t + 1 )) − O ( θ ( t )) = − η i 1 , i 2 = 1 ∑ n out α ~ ∈ A ∑ δ ∈ D ∑ [ ∂ z i 1 ; α ~ ∂ L A ∂ z i 2 ; δ ∂ O ] H i 1 i 2 ; α ~ δ + O ( η 2 )
正如我们所看到的,方括号包含 函数逼近误差
以及关于可观测量如何依赖于模型输出的细节。相比之下,神经正切核包含了与特定模型有关的所有动态信息,它仅取决于模型架构和参数。
对于任何函数逼近器,神经正切核通常都是可定义的。这意味着它的名字掩盖了其真正的普遍性。除了反对名称中的 “神经” 部分外,还可以反对 “核” 部分。特别是,神经正切核更类似于 哈密顿量
而不是核,因为它产生了可观测量的演化。我们将在 第 ∞.2 .2 节
中充分证明这一说法的合理性。
我们可以通过将特定样本的输出的特定(向量形式的)分量视为可观测的,即 O = z i ( x δ ) \mathcal{O}=z_{i}\left(x_{\delta}\right) O = z i ( x δ ) 。在这种情况下,式 7.19
中 O \mathcal{O} O 的导数是向量索引和样本索引上的克罗内克 δ 函数,演化可以简化为
z i ( x δ ; θ ( t + 1 ) ) − z i ( x δ ; θ ( t ) ) = − η ∑ j = 1 n out ∑ α ~ ∈ A H i j ; δ α ~ ϵ j ; α ~ + O ( η 2 ) z_{i}\left(x_{\delta} ; \theta(t+1)\right)-z_{i}\left(x_{\delta} ; \theta(t)\right)=-\eta \sum_{j=1}^{n_{\text {out }}} \sum_{\tilde{\alpha} \in \mathcal{A}} H_{i j ; \delta \tilde{\alpha}} \epsilon_{j ; \tilde{\alpha}}+O\left(\eta^{2}\right)
z i ( x δ ; θ ( t + 1 ) ) − z i ( x δ ; θ ( t ) ) = − η j = 1 ∑ n out α ~ ∈ A ∑ H ij ; δ α ~ ϵ j ; α ~ + O ( η 2 )
克罗内克 δ 函数的自变量(输入值)一般是两个整数,如果两者相等,则其输出值为 1 1 1 ,否则为 0 0 0 。
此等式显示了模型输出在训练更新后的变化。重要的是,我们看到了一个样本的 误差因子
影响另外一个样本更新的基本方式:样本 x α ~ x_{\tilde \alpha} x α ~ 在第 j j j 个模型输出分量上的误差因子 ϵ j ; α ~ \epsilon _{j;\tilde\alpha} ϵ j ; α ~ ( 式 7.16
)影响另外一个样本 x δ x_δ x δ 的第 i i i 个模型输出分量的的更新行为,受神经正切核组件 H i j ; δ α ~ H_{ij;δ\tilde α} H ij ; δ α ~ 调节。这就是使函数逼近成为可能的原因,一种通过观测其他样本 x α ~ x_{\tilde α} x α ~ 来了解样本 x δ x_δ x δ 的能力。我们看到: 样本索引中神经正切核的非对角线分量决定了模型的泛化行为 ,而向量索引中的非对角线分量允许一个特征影响另一个特征的训练 。我们将在 第 10 章
更深入地讨论前一个性质,在 第 ∞ 章
讨论后一个性质。
最后,与 式 7.14
的训练损失情况不同,对于一般可观测量,式 7.19
中方括号内的项不一定是正数。对于足够小的学习率,训练损失 L A \mathcal{L_A} L A 总是会减小,但指定的可观测量可能不会。特别的,没有任何东西可以保证测试损失会减少,而且甚至可能会增加。