用泰勒公式推导梯度下降原理

本文深入解析泰勒公式,探讨其在数学和物理领域的应用。泰勒公式能够利用函数的各阶导数构建高次多项式,近似描述函数在某点附近的取值,特别适用于变量为一维或多维的情形。此外,文章还阐述了泰勒公式与梯度下降法之间的联系,展示如何通过泰勒展开找到函数的最小值。

什么是泰勒公式

百度百科中的解释

泰勒公式,应用于数学、物理领域,是一个用函数在某点的信息描述其附近取值的公式。如果函数足够平滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的邻域中的值。

说白了,泰勒公式就是:可以使用函数在某点的各阶导数组成高次多项式去逼近一个函数。
泰勒公式表示为:
h(x)=∑k=0∞h(k)(x0)k!(x−x0)k \mathrm{h}(\mathrm{x})=\sum_{k=0}^{\infty} \frac{\mathrm{h}^{(k)}\left(x_{0}\right)}{k !}\left(x-x_{0}\right)^{k} h(x)=k=0k!h(k)(x0)(xx0)k将泰勒公式展开:
h(x)=∑k=0∞h(k)(x0)k!(x−x0)k=h(x0)+h′(x0)(x−x0)+h′′(x0)2!(x−x0)2+… \begin{aligned} \mathrm{h}(\mathrm{x}) &=\sum_{k=0}^{\infty} \frac{\mathrm{h}^{(k)}\left(x_{0}\right)}{k !}\left(x-x_{0}\right)^{k} \\ &=h\left(x_{0}\right)+h^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)+\frac{h^{\prime \prime}\left(x_{0}\right)}{2 !}\left(x-x_{0}\right)^{2}+\ldots \end{aligned} h(x)=k=0k!h(k)(x0)(xx0)k=h(x0)+h(x0)(xx0)+2!h(x0)(xx0)2+同时,如果xxx 很接近 x0x_0x0,也就是逼近的范围足够小的话,上面的公式可以只取前两项:
h(x)≈h(x0)+h′(x0)(x−x0) h(x) \approx h\left(x_{0}\right)+h^{\prime}\left(x_{0}\right)\left(x-x_{0}\right) h(x)h(x0)+h(x0)(xx0)上面的公式是变量为一维的时候得出的,对于多维变量,只不过将求导改为分别求偏导即可。


泰勒公式和梯度下降的关系

想象一下在多维空间中有下面的图像(它的函数L(θ)L(\boldsymbol \theta)L(θ)自变量为θ1\theta_1θ1θ2\theta_2θ2),从红色到紫色表示海拔越来越低,那么任取空间中一个点θ0\theta_0θ0 后,每次移动一步,如何才能更快的到达谷底。
在这里插入图片描述
为了方便用公式推导出最速下降的关系,可以设定每次在极小的范围内移动一步,因此就可以将L(θ)L(\boldsymbol \theta)L(θ) 用泰勒展开来逼近。将走这一小步到达的点记为(a,b)\left(a,b\right)(a,b),则有泰勒展开如下:
在这里插入图片描述
上面的式子即被简化成了:
L(θ)≈s+u(θ1−a)+v(θ2−b) \begin{array}{l}{\mathrm{L}(\theta)}{\approx s+u\left(\theta_{1}-a\right)+v\left(\theta_{2}-b\right)}\end{array} L(θ)s+u(θ1a)+v(θ2b)因为sss 是一个定值,只与输入有关,因此不去看它,只考虑u(θ1−a)+v(θ2−b)u\left(\theta_{1}-a\right)+v\left(\theta_{2}-b\right)u(θ1a)+v(θ2b).

uuuvvv 合在一起作为一个向量∇wf(x)\nabla_{w}f(x)wf(x)(这其实就是对所有变量分别求偏导的集合),将(θ1−a)\left(\theta_{1}-a\right)(θ1a)(θ2−b)\left(\theta_{2}-b\right)(θ2b)作为另外一个向量u\boldsymbol uu(距离尽可能小,可以视为单位向量),想让L(θ)L(\boldsymbol \theta)L(θ)最小,也即让两个向量的点积最小,也就是:
min⁡u⊤∇xf(x)=min⁡∥u∥2∥∇xf(x)∥2cos⁡θ\min\boldsymbol{u}^{\top} \nabla_{\boldsymbol{x}} f(\boldsymbol{x}) \\ = \min \|\boldsymbol{u}\|_{2}\left\|\nabla_{\boldsymbol{x}} f(\boldsymbol{x})\right\|_{2} \cos \thetaminuxf(x)=minu2xf(x)2cosθ想让上面的式子取最小值,很显然要令两个向量方向相反,也就是:下降的方向与梯度方向相反。
在这里插入图片描述

梯度下降法是一种最优化算法的常见求解方法,通过沿着负梯度方向移动,逐步逼近函数的极小值,其数学推导基于泰勒展开,保证了每次迭代函数值的下降[^3][^4]。 ### 梯度下降法的推导 假设目标是最小化一个函数 \( J(\theta) \),其中 \( \theta \) 是参数向量。函数 \( J(\theta) \) 在点 \( \theta \) 处的泰勒展开式(一阶近似)为: \[ J(\theta + \Delta\theta) \approx J(\theta) + \nabla J(\theta)^T \Delta\theta \] 其中 \( \nabla J(\theta) \) 是 \( J(\theta) \) 关于 \( \theta \) 的梯度。 为了让 \( J(\theta + \Delta\theta) < J(\theta) \),即让函数值下降,需要选择合适的 \( \Delta\theta \)。由于向量点积 \( \nabla J(\theta)^T \Delta\theta \) 与 \( \Delta\theta \) 的方向有关,当 \( \Delta\theta = - \alpha \nabla J(\theta) \) 时(\( \alpha \) 是学习率,且 \( \alpha > 0 \)),能保证函数值下降。 所以参数 \( \theta \) 的更新公式为: \[ \theta := \theta - \alpha \nabla J(\theta) \] ### 手写代码实现 #### Python 实现批量梯度下降(BGD) ```python import numpy as np def batch_gradient_descent(X, y, theta, alpha, num_iters): m = len(y) for iter in range(num_iters): error = np.dot(X, theta) - y theta = theta - (alpha / m) * np.dot(X.T, error) return theta # 示例数据 X = np.array([[1, 1], [1, 2], [1, 3], [1, 4]]) y = np.array([2, 4, 6, 8]) theta = np.zeros((2, 1)) alpha = 0.01 num_iters = 1000 theta = batch_gradient_descent(X, y, theta, alpha, num_iters) print("最终参数 theta:", theta) ``` #### Python 实现随机梯度下降(SGD) ```python import numpy as np def stochastic_gradient_descent(X, y, theta, alpha, num_iters): m = len(y) for iter in range(num_iters): for i in range(m): random_index = np.random.randint(m) xi = X[random_index:random_index+1] yi = y[random_index:random_index+1] error = np.dot(xi, theta) - yi theta = theta - alpha * np.dot(xi.T, error) return theta # 示例数据 X = np.array([[1, 1], [1, 2], [1, 3], [1, 4]]) y = np.array([2, 4, 6, 8]) theta = np.zeros((2, 1)) alpha = 0.01 num_iters = 1000 theta = stochastic_gradient_descent(X, y, theta, alpha, num_iters) print("最终参数 theta:", theta) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值