Improved Computation for LM Training

摘要

本文提出的改进计算方法是利用Levenberg–Marquardt (LM) 算法优化神经网络学习过程。Quasi-Hessian矩阵和梯度向量直接计算, 没有Jacobian矩阵乘法和存储。解决了 LM 训练中的内存限制问题。考虑到quasi-Hessian矩阵的对称性, 只需要计算其上/下三角形阵列中的元素。因此, 训练速度显著提高, 这不仅是因为存储在内存中的阵列较小,而且在quasi-Hessian矩阵计算中减少了运算。改进的内存和时间效率尤其适用于大型模式培训。

背景

人工神经网络 (ANNs) 广泛应用于工业领域, 如非线性控制 [1], [5], 系统分析和诊断 [8], [14] 和数据分类 [10], [18]。自从1986年被发明以来,作为一阶算法, 误差反向传播 (EBP)(实际上就是BP网络) 算法 [17], [19] 是最受欢迎的方法在训练神经网络。然而, EBP 算法的低训练效率也很出名。使用动态学习率是提高 EBP 算法训练速度的常用方法 [6], [13]。另外, 动量 [16] 可以被引入加速它的收敛。但是, 即使有这些好的方法, EBP 算法 (包括改进版本) 在实际应用中仍然是网络和迭代昂贵。

使用二阶算法 [3]、[9]、[22] 等训练速度显著提高, 如牛顿算法和 Levenberg–Marquardt (LM) 算法 [12]。与 EBP 算法中的常量 (或人工调整的) 学习率相比, 二阶算法可以通过 Hessian matrix矩阵"自然地" 估计每个梯度方向上的学习速率。通过结合将 EBP 算法与牛顿算法, LM 算法是中小规模数据训练最有效算法之一。在 [7] 中实现了神经网络训练的 LM 算法, 但仅用于多层感知器 (MLP) 体系结构。

MATLAB 是常用的神经网络工具箱。LM 算法适用于任意连接的神经 (ACN) 网络 [20], [21]。这些 ACN 网络可以处理更复杂的问题, 神经元数量较少。LM 算法的实现需要计算Jacobian矩阵, 其大小与训练模式的数量成正比。

图1用 EBP 和 LM 算法给出了双螺旋问题 [2] 的训练结果。在这两种情况下, 均采用全连通级联 (FCC) 网络fully connectedcascade (FCC) networks;所需的总和平方误差为 0.01;EBP 算法的最大迭代次数为 1 000 000, LM 算法为1000。EBP 算法不仅需要更多的时间比 LM 算法 [图 1 (a)], 同时也需要使用更多的神经元。EBP 算法需要至少12个神经元, 二阶算法可以在更小的网络中解决它, 如七个神经元 [图 1 (b)]。

图2显示了双螺旋问题的训练结果, 在完全连接的级联网络中使用了16个神经元, 用于 EBP 算法和 LM 算法。人们可能会注意到, 在相同的拓扑结构下, LM 算法能够找到比使用 EBP 算法找到的更好的解决方案。

以上的比较结果说明了 LM 算法训练中小尺寸模式的显著优势。然而, 对于大量的模式, 如 parity-16 问题 (65 536 模式) 的问题, LM 算法将不得不使用过多的内存用于雅可比矩阵存储和乘法。

在改进 LM 算法的过程中, 不需要存储雅可比矩阵, 用向量运算代替雅可比矩阵乘法。因此,所提出的算法可用于基本不限数量的训练模式问题。此外, 建议的改进加快了训练过程。

在第二节中, 引入 LM 算法的计算基本原理来解决内存问题。第三节详细描述了quasi-Hessian矩阵和梯度向量的改进计算。第四部分说明了对一个简单问题的改进计算。第五部分给出了传统计算与改进计算的内存与训练时间比较的一些实验结果


 

基础知识

按照醉宿下降法和牛顿法,LM的权值更新规则为:

w是权值向量,I是单位矩阵,u是组合系数,Jacobian矩阵规模为P*M*N,e矩阵的规模为P*M*1:

P为训练样本数量, M为输出数量, N为权值数量,e为期望输出与实际输出的差值:

在之前做法中,首先计算并存储Jacobian矩阵,然后使用Jacobian矩阵通过公式1求新的权值向量,对中小规模的训练样本,这个训练过程可能工作的比较好,然而当样本数量过大时,存在内存限制。

例如, MNIST 手写数字数据库中的模式识别问题由 60 000 训练样本、784输入和10输出组成。仅使用最简单的10神经元(每个输出一个神经元)的神经网络, 整个雅可比矩阵存储的内存成本是近 35 GB。任何32位 Windows 操作系统都无法满足这种巨大的内存需求,因为单阵列存储有 3 GB 的限制。在这一点上, 用传统的计算, 人们可以得出结论, LM 算法不能用于有大量模式的问题。

改进的算法

在下面的算法中,使用误差平方和和评估训练过程:

的含义与上文相同

N*N的hessian矩阵为:

N是权值个数。

通过公式4和公式5,Hessian矩阵可以如下计算:

其中i、j为权值下标。

对于LM算法,公式6近似为:

通过比较公式2和公式7,quasi-Hessian矩阵Q可以近似认为是Hessian矩阵:

N行1列的梯度向量为:

将公式4代入到公式9中,可以得到梯度向量:

从公式2和公式10中,梯度向量和Jacobian矩阵之间的关系为:

结合公式公式8.11和1,LM算法的更新规则为:

你可能会发现,quasi-Hessian矩阵Q、梯度向量g的大小正比于权值的数目,但与训练样本大小和输出数量无关。

等式1和等式12使用权值进行更新。最大的差别在于在公式12中,quasi-Hessian矩阵Q、梯度向量g是直接计算的,没有必要像1中那样去计算并存储Jacobian矩阵。

矩阵运算回顾

有两种方法可以将两个矩阵的行和列相乘。如果第一个矩阵的行乘以第二个矩阵的列, 那么我们得到一个标量, 如图 3 (a) 所示。当第一个矩阵的列乘以第二个矩阵的行时, 结果是一个部分矩阵 [图 3 (b)] [11]。标量的数量是N*N, 而以后必须总结的部份矩阵q的数量是P*M。

当 乘以J使用图 3 (b) 中显示的例程时, 首先, 部分矩阵 (大小:N*N) 需要计算P*M次, 那么所有矩阵都必须一起求和。图 3(b) 的过程看起来很复杂, 因此几乎所有矩阵乘法都使用图 3 (a) 的例程, 在该过程中, 每次只计算和存储结果矩阵的一个元素。

即使是图 3 (b) 的计算似乎更复杂, 很少使用;经过详细分析, 可以得出结论, 数字乘法和加法的数量与图 3 (a) 中的数字完全相同, 但它们的执行顺序不同。

在特定的神经网络训练案例中, 当应用每个模式时, 只有一行 (N个元素) 的雅可比矩阵 (或 的一列) 被计算出来。因此, 如果使用图 3 (b) 中的方法, 那么 quasiHessian 矩阵的创建过程就可以更快地开始, 而无需计算和存储所有输入和输出的整个雅可比矩阵。

表1显示了两种方法占用的内存。

B改进的Quasi-Hessian矩阵计算

首先介绍下Quasi-Hessian矩阵的子矩阵 (矩阵大小为N*N)

使用7、13我们可以计算出N*N的Quasi-Hessian矩阵:

通过引入一个1*N的向量

可以表示成向量形式:

可能会注意到, 对于子矩阵的计算, 只有向量元素需要计算和存储。所有的 子矩阵可以分别计算(每个样本和输出), 并汇总在一起, 从而获得 quasi-Hessian 矩阵。考虑到所有样本和输出之间的独立性, 没有必要存储所有的quasi-Hessian submatrices。每个子矩阵在计算后都可以被归纳为一个临时矩阵。因此,使用14计算quasi-Hessian矩阵时, 只需要N个元素的内存, 而不是整个雅可比矩阵的元素 (表 I)。

从 (13), 你可能注意到所有的 submatrixes 是对称的。使用此属性, 仅需要计算这些submatrixes 的上 (或下) 三角形元素。因此, 在改进的quasi-Hessian矩阵计算中, 乘法运算在 (16) 和求和运算中 (14) 可以减少一半左右。

c 改进的梯度向量计算算法

梯度子向量 (大小为N*1)

通过公式10和公式17,梯度向量g可以通过下式计算:

使用15中定义的相同的 ,梯度子向量可以如下计算:

相似的,梯度子向量 可以分别对每个训练样本和输出进行求解,然后相加得到一个临时向量。因为在求quasi-Hessian我们已经计算得到了 ,因此我们只需要额外存储 。

使用改进的计算方法,不需要计算完全的Jacobian矩阵就可以计算quasi-Hessian矩阵Q和梯度向量g。在计算过程中,只有临时变量 (N的元素)需要存储。换句话说,Jacobian矩阵的内存占用降低了P*M。在第二部分提到的MINST问题中,Jacobian矩阵的存储空间占用率可以从35GB降低到30.7KB。

D.简化的 计算

在上述改进算法中计算quasi-Hessian矩阵Q和梯度向量g中关键是计算公式15中的向量 (每个样本*每个输出),这个向量是Jacobian矩阵的一行。 中的元素可以如下计算:

d是预期输出,o是实际输出, 是在第n个神经元处的加权输入。

是输入, 是相关权重,对应与第n个神经元。I是第n个神经元的输入个数。

将20和21插入到15中, 可以如下计算:

是第p个样本的第n个神经元的第i个输入。

使用公式20、21可以计算22中的 (前向计算),使用后向计算 。因为只有临时变量j_pm(N的元素)需要存储,Jacobian矩阵的内存占用降低了P*M。所有的矩阵运算转换为了向量运算。


 

实现

为了更好的说明quasi-Hessian矩阵Q、梯度向量g的计算过程,我们使用parity-2问题来进行说明。

parity-2问题又称为异或问题,样本如图4所示。

网络的拓扑结构如图5所示

如图5所示,权重值被初始化为向量 ,quasi-Hessian 矩阵Q、梯度向量g都被初始化为0.

对于第一个样本(-1,-1),前向计算如下所示。

8)然后进行后向计算,得到

9)使用公式5、7,使用链式法则可以得到

在这个例子中,使用公式(22),计算向量

使用公式16、公式19,子矩阵 和子向量 可以如下进行计算:

可能注意到, 只有子矩阵 的上三角形元素被计算, 因为所有子矩阵是对称的。这可以节省几乎一半的计算。最后一步是将子矩阵和子向量添加到quasi-Hessian 矩阵Q、梯度向量g中。

以上分析仅进行了第一个样本。对于其他模式, 计算过程几乎相同。在整个过程中, 没有Jacobian矩阵计算;只有激活函数的导数和输出才需要计算。所有的临时参数都存储在与样本和输出的数量没有关系的向量中。通常, 对于P个样本和M个输出的问题, 改进的计算可以组织为图6所示的伪代码。

因为在传统算法和改进算法中,都对quasi-Hessian矩阵和梯度向量进行了求解,基本的做法是一致的,因此不影响精度。(传统算法,公式8、11,改进算法14和18)。


 

实验结果

我们设计几组实验来对新的算法进行测试,我们主要计算存储空间占用和时间。

A.       存储空间占用

三个问题, 每个都有大量的样本,来测试传统计算和改进计算的存储器成本的。LM 算法的训练, 测试结果显示在表二和三中。

为了更精确地进行比较, 在比较中没有考虑程序代码和输入文件的内存开销。从表二和 III 的测试结果中, 很明显, 在改进的计算中, 训练的存储成本大大降低。

在 MNIST 问题 [4] 中, 有 60 000 训练样本, 其中每一个都是一个数字 (从0到 9) 由灰色 28*28 像素组成的图像。另外, 还有另外 10 000 样本用于测试训练结果。经过训练的网络,我们所有数字的测试错误率是7.68%。在此结果中, 对于压缩、拉伸和移动的数字, 经过训练的神经网络可以正确地对它们进行分类 [见图 7 (a)];对于严重旋转或扭曲的图像, 很难识别它们 [见图 7 (b)]。

B.时间开销

使用Parity-N问题来对传统的LM算法和改进的LM算法的时间开销进行测试。用于测试的结构都是完全连接的级联网络。对于每个问题, 初始权重和训练参数是相同的。

从表四中可以发现, 改进后的计算不仅可以处理更大的问题, 而且计算速度比传统方法要快得多, 尤其是对于大样本的训练。样本数量越大, 改进计算的时间就越高。

显然, 简化的quasi-Hessian矩阵计算是提高计算速度的一个原因。对于更大的问题, 获得的显著计算量很可能是由于在向量中寻址元素的方法比较简单, 而在大矩阵中的寻址元素更容易。实验结果表明, 改进后的计算比传统的 LM 算法训练效率要高得多, 不仅对内存需求有很大的影响, 而且训练时间也很短。


 

结论

本文引入改进的计算方法, 提高 LM 算法的训练效率。所提出的方法不需要存储和相乘大的雅可比矩阵。因此, 对Hessian矩阵和梯度向量计算的内存需求大大减小。减少内存的额外好处也大大减少了计算时间。在计算的基础上, 利用其对称性, 进一步简化了Hessian矩阵的计算过程。因此, 改进算法的训练速度比传统计算快得多。

在所提出的计算过程中, 当应用训练模式时, 可以在飞行时计算Hessian矩阵。此外, 所提出的方法对于需要动态改变训练样本数量的应用具有特殊的优越性。没有必要重复的整个乘法, 只需要从quasi-Hessian矩阵加上或者减去的新的子矩阵。在修改或删除样本时, 可以修改quasi-Hessian矩阵。

二阶算法有很多优点, 但它们在每个迭代解中都需要大量的不确定数等于权重数的线性方程组。由于在一阶算法的情况下, 计算时间只与问题大小成正比, 一阶算法 (理论上) 对大神经网络更有用。但是, 从第一节的双螺旋例子可以看出, 除非使用过多的神经元 (图 1), 否则一阶算法 (EBP 算法) 无法解决某些问题。但是, 由于神经元数量过多, 网络失去了泛化能力, 因此, 经过训练的网络对新模式的反应不会很好, 因为它们不是用来训练的。可以得出这样的结论: 一阶算法和二阶算法都有其不足之处, 而二阶算法的超大型网络的训练问题仍未解决。本文提出的方法至少解决了利用二阶算法训练神经网络的问题, 其训练样本基本不限。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值