本文首先浅析梯度下降的原理,然后通过线性回归、BP神经网络和TensorFlow深度学习网络三个场景分析梯度下降的应用,让“AI调包左侍郎”知道一句代码背后的波涛汹涌。
一、什么是梯度下降?
梯度下降法,GradientDescent,是一种最优化算法,是求解无约束优化问题最简单和最古老的方法之一,也是求解机器学习算法中模型参数的最常用方法之一。梯度下降要解决的问题就是,给定函数,如何求得,即给定了初始化的,不断改变,直到达到一个全局最小值,或者局部最小值。
梯度下降法的直观解释就是如下图,人在大山的某处(初始位置),如何寻找最快的下山路径?那么从初始位置起,求解当前位置的梯度,也就是当前最陡峭的位置向下根据步长走一步,然后继续求解当前位置梯度,这样一步步走下去直至山脚。但是梯度下降法也有一个缺点,即可能会产生局部最优,而不是全局最优,比如下图右侧的那条下山路径。
根据上面的形象例子,有两个直观的概念:
1 梯度。各个参数的偏导数以向量的形式写出来,就是梯度。其几何意义,就是函数变化增加最快的地方。沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,更加容易找到函数的最小值。如下图所示就是对不断求偏导的过程,红色的线就是当前位置的梯度,也就是斜率,也就是变化最快的方向。
2 步长。步长决定了在梯度下降迭代的过程中,每一步沿梯度方向前进的长度。步长也叫做学习率。形象点说,步长(学习率)就是在当前所在位置沿着最陡峭最易下山的位置走的那一步的长度。步长通常是一个0~1之间的数字,既不能太大,也不能太小,因为如果太大会有震荡(如下图)而无法收敛,如果太小则收敛太慢,这也就是机器学习中需要不断调参的地方。
在前述概念的基础上,梯度下降的算法就按如下方法同步更新迭代即可:
二、梯度下降应用在线形回归中
首先把梯度回归应用在线形回归求解中。大家知道,在线形回归中,不管是二元线形回归还是多元线形回归,假设函数(hypothesis function即模型)为线性组合,而损失函数(lossfunction)为二次代价函数。这里普及一个基本概念,模型拟合好坏的效果,通常是通过损失函数来衡量的,二次代价函数为最常见的损失函数,表示各个实际值与预测值之间差值的平方的平均值,当然那个1/2是为了求导时约去平方而存在的。即:
应用梯度下降法中梯度的原理,对求偏导数如下。求偏导的方法没有还回数学老师吧,根据链式法则,平方2和1/2约掉了,然后
,当对求偏导时为1,当对求偏导时为x。
应用梯度下降法中同步更新的原理,根据步长或者学习率不断更新参数
,直至收敛就完成了线形回归的模型求解。
虽然梯度下降法能够求解线形回归参数,不过在机器学习库Sklearn里调用LinearRegression.fit(x_data, y_data)时,使用的却是标准方程法,来对线形回归的loss函数求解。
三、梯度下降应用在BP神经网络中
接下来看梯度下降在神经网络方向传播中的求解。在典型的神经网络求解中,通常权值矩阵是随机初始化的,然后利用梯度下降法,最小化预测值与真实值之间的误差,通过反向传播的方式不断更新权值。说白了也就是调包左侍郎在调用多层感知器时背后发生的事情,例如下面代码设置了分别是100个神经元、50个神经元的2个隐藏层,整个神经网络的最大迭代次数为500次。
mlp =MLPClassifier(hidden_layer_sizes=(100,50) ,max_iter=500)
mlp.fit(x_train,y_train)
那么这里max_iter的迭代过程,就是使用梯度下降法进行反向传播不断更新权值,训练网络的过程,也叫做Delta学习法则。这里损失(代价)函数依然是二次代价函数:
根据梯度下降法则计算权值更新的梯度,其中为最终输出层的学习信号,为第l层的学习信号,如下式所示。
最后,如果神经网络的激活函数是sigmoid函数,那么可根据
代入后进一步展开。
四、梯度下降应用在深度学习网络中
最后再看下梯度下降在TensorFlow深度学习网络的求解。跟神经网络类似,深度学习网络也是先随机化权值矩阵,然后使用梯度下降法,不断迭代,最小化代价函数,更新神经网络权值矩阵。例如W = tf.Variable(tf.zeros([784,10])) 就使用tensorflow初始化了一个784*10的全零权值矩阵,然后基于此不断梯度迭代。跟神经网络不太相同的是,深度学习网络通常会选用交叉熵作为损失(代价)函数,来有效克服二次代价函数训练“慢启动”的问题。如下面调包左侍郎的TensorFlow代码:
train_step= tf.train.GradientDescentOptimizer(0.2).minimize(loss)
就是使用了交叉熵cross_entropy作为损失函数,然后使用梯度下降法SDG进行权值的迭代优化,其中学习率步长为0.2. 当然TensorFlow里除了梯度下降法外,还有很多其他的优化器,比如最常用的Adam优化器等。交叉熵函数对参数W求导如下式所示:
领取专属 10元无门槛券
私享最新 技术干货