【新智元导读】 训练神经网络的算法有成千上万个,最常用的有哪些,哪一个又最好?作者在本文中介绍了常见的五个算法,并从内存和速度上对它们进行对比。最后,他最推荐莱文贝格-马夸特算法。 用于神经网络中执行学习过程的程序被称为训练算法。训练算法有很多,各具不同的特征和性能。 问题界定 神经网络中的学习问题是以损失函数f的最小化界定的。这个函数一般由一个误差项和一个正则项组成。误差项评估神经网络如何拟合数据集,正则项用于通过控制神经网络的有效复杂性来防止过拟合。 损失函数取决于神经网络中的自适应参数(偏差和突触权值)。我们可以简便地把它们组合成单个n维权值向量w。下图表示损失函数f(w)
如上图所示,点w*是该损失函数的最小值。在任何点A,我们可以计算损失函数的一阶和二阶导数。一阶导数用梯度向量组成,可以写成: ?if(w) = df/dwi(i = 1,...,n) 类似地,损失函数的二阶导数可以用Hessian矩阵,写成: Hi,jf(w) = d2f/dwi·dwj(i,j = 1,...,n) 许多连续和可微函数的最小化问题已经有许多研究。这些问题的常规方法可直接适用于训练神经网络。 一维优化方法 虽然损失函数取决于许多参数,一维优化方法在这里非常重要。实际上,一维优化方法经常用于神经网络的训练过程。 许多训练算法先计算训练方向d,然后计算使该方向上的损失最小的训练速率η,写作f(n)。下图描述了一维损失函数:
点η1和η2定义包含f(n)的最小值η*的间隔。这里,一维优化方法搜索给定的一维函数的最小值。广泛使用的算法有黄金分割法和布伦特法。 多维优化方法 神经网络的学习问题被界定为搜索使损失函数f得到最小值的参数向量w*。如果神经网络的损失函数已经取得最小值,则梯度是零向量。 一般来说,损失函数是参数的非线性函数。因此,不可能找到最小值的封闭训练算法。反之,我们考虑通过在一系列步骤组成的参数空间中搜寻最小值。每一步中,损失会随着神经网络参数的调整而减少。 这样,我们从一些参数向量(通常随机选择)着手训练神经网络。然后,我们会生成一系列参数,使得损失函数在算法的每次迭代中减小损失值。两次迭代间的损失值变化称为损失减量。当满足特定条件或到达停止标准使,训练算法停止。 接下来将介绍训练神经网络的五种最重要的算法。
1. 梯度下降法(Gradient descent) 梯度下降法,又称最速下降法,是最简单的训练算法。它需要来自梯度向量的信息,因此它是一阶方法。 设f(wi) = fi,?f(wi) = gi。该方法从点w0开始,在训练方向di = -gi上从wi移动到wi+1,直到满足停止标准。因此,梯度下降法按照以下公式迭代: wi+1= wi- di·ηi, i=0,1,... 参数η是训练速率。该值可以设置为固定值,或者在沿训练方向的每一步一维优化中找到。训练速率的最佳值通常可通过每个连续步骤的线性最小化得到。然而,仍然有许多软件工具只使用固定值的训练速率。 下图描绘了梯度下降法的训练过程。可以看到,参数向量通过两个步骤提升:首先,计算梯度下降训练方向; 然后,找到合适的训练速率。
梯度下降训练算法的严重缺点是需要对具有长而窄的山谷结构的函数进行许多次迭代。实际上,下坡梯度是损失函数下降最快的方向,但不一定能产生最快的收敛性。下图说明了这个问题。 (责任编辑:本港台直播) |