吴恩达深度学习 —— 2.4 梯度下降
在上一节中学习了逻辑回归模型,也知道了损失函数,损失函数是衡量单一训练样例的效果,还知道了成本函数,成本函数用于衡量参数w和b的效果,在全部训练集上来衡量,下面我们讨论如何使用梯度下降法来训练或学习训练集上的参数w和b。
回归一下,以下图中是熟悉的逻辑回归算法,第二行是成本函数,成本函数J是参数w和b的函数,它被定义为平均值,即的损失函数之和,损失函数可以衡量你的算法的效果,每一个训练样例都输出,把它与实际的真值标签进行比较,等号右边展开完整的公式,成本函数衡量了参数w和b在训练集上的效果。
要学习到合适的参数w和b,很自然地就想到,我们想找到使得成本函数尽可能小的w和b,下面来看看梯度下降法,看下图,这个图中的横轴表示空间参数w和b,实践中,w可以是更高维度的,为了方便绘图,我们让w是一个实数,b也是一个实数,成本函数是在水平轴w和b上的曲面,曲面的高度表示了在某一点的值。
我们所想要做的就是找到这样的w和b,使其对应的成本函数J值是最小值。可以看到,成本函数J是一个凸函数,这个成本函数是凸函数的这个性质是逻辑回归算法使用这个特定成本函数J的重要原因之一。
为了找到更好的参数值,我们要做的就是,用某初始值初始化w和b。对于逻辑回顾而言,几乎是任何的初始化方法都有效,通常用0来进行初始化,但是对于逻辑回归,我们通常不这样做,但因为函数是凸的,无论在哪里初始化,都应该到达同一点,或者大致相同的点。
梯度下降法所做的就是,从初始点开始,朝最陡的下坡方向走一步,在梯度下降一步后或许在那里停下,因为它正试图沿着最快下降的方法往下走,或者说,尽可能快地往下走,这是梯度下降的一次迭代,这张图片阐述了梯度下降法,我们多写一点细节。
为了更好地说明,让我们来看一些函数,你希望得到最小化,函数可能看起来像这样,为了方便画,先忽略b,仅仅是用一维曲线来代替多维曲线,梯度下降法是这样做的,我们将重复执行以下的更新操作,我们更新w的值,使用表示更新w,w的更新公式为在算法收敛之前,会重复这样去做,要说明的是,公式中的两点,公式中的表示学习率,学习率可以控制每一次迭代或者梯度下降法中的步长,我们之后会讨论如何选择学习率,其次在这里的这个数是导数,这就是对参数w的更新或者变化量。当我们开始编写代码来实现梯度下降,我们会使用代码中变量名的约定,表示导数。
现在我们确保梯度下降法更新是有用的。如图所示,w在横坐标上的某一点,对应的成本函数J(w)在曲线上有对应位置的一点。记住导数的定义,是导数在这个点的斜率,而导数的斜率是高除于宽,在这个点相切于J(w)的一个小三角形,在图中位置的导数是正的,新的w值等于w自身,减去学习率乘于导数。导数是正的,从w中减去这个乘积,接着向左边走一步,通过梯度下降,让算法渐渐地减小这个参数w。
另一个例子,如图所示,w的位置在左边,这个点处的斜率将会是负的,用梯度下降法去更新,w将会减去乘上一个负数。慢慢地,使得参数w增加,不断用梯度下降法来迭代,w会变得越来越大。无论你初始化的位置,是在左边还是右边,梯度下降法会朝着全局最小值方向移动。
当前J(w)的梯度下降法只有参数w,在逻辑回归中,成本函数是一个含有w和b的函数。在这种情况下,梯度下降的内循环就是参数w和参数b的更新公式。
当函数J有两个以上的变量,不使用小写字母d而使用花哨的符号,这个符号称为偏导数符号。如果J只有一个变量,就用小写字母d。唯一的区别是,是用偏导数符号还是小写字母d取决于你的函数J是否含有两个以上的变量。变量超过两个就用偏导数符号,如果函数只有一个变量,就用小写字母d,这是在微积分里一个有趣的符号规则。