无论是机器学习(ML)还是深度学习(ML)中,梯度下降法都是一种十分优秀有用的算法,可以用它来优化模型,最小化模型的损失函数。在这片文章中我将介绍这种优化算法,包括他的概念原理、具体实例以及python代码演示。
一、概念
梯度下降法(Gradient Descent)是一种用于求解函数最小值的迭代优化算法,广泛应用于机器学习和深度学习中以优化模型参数。其基本思想是通过沿负梯度方向不断调整输入变量,逐步逼近目标函数的局部最小值点。
简单来说就是,我们当我们想要寻找一个小球从山顶到山底最短的一条路径,我们可以先让这个小球自由滑落,此时滑落时这个滑落的方向就是目前最陡的山路,当小球滑落一段时间后,我们让小球暂停,然后再让其自由滑落,沿当前最陡的山路,我们不断重复这些步骤,最后小球会滑落到山脚,并且它滑落的路径会是所有路径中最短的路径。(参考书籍《ディープラーニングの数学》)
二、原理
在上述的概念中,我们现在要寻找的就是小球滑落时的最陡峭的方向,我们可以利用如下的公式来寻找这个方向,即:
接着,让小球滑落的这个动作就是:
让实际所求的值从点向点
移动。
而该向量称为函数
在点
处的梯度。
那么,我们思考,为什么上述的公式会求得最陡峭的方向呢?
首先,有函数的值的变化
为:
根据近似公式,得到:
如果我们将之写为向量的格式,即可得到:
那么,已知向量在满足如下的公式时取得内积
最小值:
那么,就有取得最小值。
此外,在式子中,无法通过某个公式直接求得,而是需要通过许多的尝试才能得到最优的结果,而它也被称为学习率。
三、实例
假设有函数,且
,
为微小的值,当x从α变到
,y从β变到
时,求使这个函数减小到最快的向量
。
解:先求的偏导数:
且,于是有:
四、代码演示
将上述的过程用代码演示,并且假设其中的函数为:
那么,对应的python代码如下:
def f(x):
return x ** 2
def df(x):
"""函数f(x) = x^2的导数"""
return 2 * x
# 梯度下降函数
def gradient_descent(starting_point, learning_rate, num_iterations):
x = starting_point
for i in range(num_iterations):
gradient = df(x)
x -= learning_rate * gradient
if i % 10 == 0:
print(f"Iteration {i}: x = {x}, f(x) = {f(x)}, Gradient = {gradient}")
return x
此上