![TensorFlow知识图谱实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/115/44510115/b_44510115.jpg)
3.2.2 道士下山的故事——梯度下降算法
在介绍随机梯度下降算法之前,给大家讲一个道士下山的故事,如图3.7所示。
![](https://epubservercos.yuewen.com/281CEB/23721624209516806/epubprivate/OEBPS/Images/Figure-P74_4844.jpg?sign=1739224556-o4mt6I7UCKqHnyfHkjF5Yhv1dU15XMHu-0-91bc8393d1086021d62d03e3e4771efa)
图3.7 模拟随机梯度下降算法的演示图θ1
这是一个模拟随机梯度下降算法的演示图。为了便于理解,我们将其比喻成道士想要出去游玩的一座山。
设想道士有一天和道友一起到一座不太熟悉的山上去玩,在兴趣盎然中很快登上了山顶。但是天有不测,下起了雨。如果这时需要道士和其同来的道友用最快的速度下山,那么怎么办呢?
如果想以最快的速度下山,最快的办法就是顺着坡度最陡峭的地方走下去。由于不熟悉路,道士在下山的过程中,每走过一段路程就需要停下来观望,从而选择最陡峭的下山路。这样一路走下来的话,就可以在最短时间内走到底。
图3.7中的路上可以近似的表示为:
① → ② → ③ → ④ → ⑤ → ⑥ → ⑦
每个数字代表每次停顿的地点,这样只需要在每个停顿的地点选择最陡峭的下山路即可。
这就是道士下山的故事,随机梯度下降算法和这个类似。如果想要使用最迅捷的下山方法,最简单的办法就是,在下降一个梯度的阶层后寻找一个当前获得的最大坡度继续下降。这就是随机梯度算法的原理。
从上面的例子可以看到,随机梯度下降算法就是不停地寻找某个节点中下降幅度最大的那个趋势进行迭代计算,直到将数据收缩到符合要求的范围为止。通过数学公式表达的方式计算,公式如下:
![](https://epubservercos.yuewen.com/281CEB/23721624209516806/epubprivate/OEBPS/Images/Figure-P75_8398.jpg?sign=1739224556-9a1Ha5gXDMmtN3vjC9yfkM7bjlRI8GU2-0-71faa33c67e8c657d73fea28ac377eac)
在上一节讲最小二乘法的时候,我们通过最小二乘法说明了直接求解最优化变量的方法,也介绍了在求解过程中的前提条件是要求计算值与实际值的偏差的平方最小。
但是在随机梯度下降算法中,对于系数需要通过不停地求解出当前位置下最优化的数据。使用数学方式表达,就是不停地对系数θ求偏导数,即:
![](https://epubservercos.yuewen.com/281CEB/23721624209516806/epubprivate/OEBPS/Images/Figure-P75_8399.jpg?sign=1739224556-NEEOx1qa9kvbgePW8QjFLaYpWDmZNYeF-0-1388cfdf92d958e8ca9450371673fed3)
公式中的θ会向着梯度下降的最快方向减少,从而推断出θ的最优解。
因此,随机梯度下降算法最终被归结为:通过迭代计算特征值求出最合适的值。θ求解的公式如下:
![](https://epubservercos.yuewen.com/281CEB/23721624209516806/epubprivate/OEBPS/Images/Figure-P75_8340.jpg?sign=1739224556-Lw4EvTUKrLzrzumh1KULvDyolIVuDDDF-0-1e902addc03a04440cf3efa5275d80d4)
公式中α是下降系数,用通俗的话表示就是用来计算每次下降的幅度大小。系数越大,每次计算的差值较大;系数越小,差值越小,但是计算时间也相对延长。
随机梯度下降算法的迭代过程如图3.8所示。
![](https://epubservercos.yuewen.com/281CEB/23721624209516806/epubprivate/OEBPS/Images/Figure-P76_4885.jpg?sign=1739224556-sSZwPoP7lAOLUWUDjXxXspXHhs08pYmt-0-f6f54c84b9c8d48e4df305a61428d74c)
图3.8 随机梯度下降算法过程
从图3.8中可以看到,实现随机梯度下降算法的关键是拟合算法的实现。本例的拟合算法实现较为简单,通过不停地修正数据值来达到数据的最优值。
随机梯度下降算法在神经网络,特别是机器学习中应用较广,由于其天生的缺陷,噪声较多,使得在计算过程中并不是都向着整体最优解的方向优化,往往可能只是一个局部最优解。因此,为了克服这些困难,最好的办法就是增大数据量,在不停地使用数据进行迭代处理的时候能够确保整体的方向是全局最优解,或者最优结果在全局最优解附近。
【程序3-2】
![](https://epubservercos.yuewen.com/281CEB/23721624209516806/epubprivate/OEBPS/Images/Figure-P76_8402.jpg?sign=1739224556-KhBXMdMzOfaXDB0FqbXIF9to2FJ7EmkW-0-29afb409ad31d9ebfeaf44f59a00f88e)
![](https://epubservercos.yuewen.com/281CEB/23721624209516806/epubprivate/OEBPS/Images/Figure-P77_4890.jpg?sign=1739224556-QNy9Cb5OCAPvowECaiwBcmzpAbNJ1mkp-0-1b9efe7830c037898717f9a9371a6092)
最终结果打印如下:
![](https://epubservercos.yuewen.com/281CEB/23721624209516806/epubprivate/OEBPS/Images/Figure-P77_4913.jpg?sign=1739224556-1HyIEuyHPFxC2FwxFVMkq6qsuuoP1mks-0-d47ec742fd28ab12d9687b25e0aebfc2)
从结果上看,迭代24次即可获得最优解。