Long Luo's Life Notes

每一天都是奇迹

By Long Luo

挖坑

参考文献

By Long Luo

之前写过一篇介绍 CORDIC 算法 [1] 的文章,里面提到 CORDIC 算法的 不足 之处,CORDIC 算法的输入角度范围需要在 [99.88,99.88][−99.88^{\circ} , 99.88^{\circ}] ,那么我们不禁要问,如果输入角度 θ\large {\theta } 很大的话,怎么处理呢?

这个问题同样存在于 泰勒展开式(Taylor series) [2] 中,比如 sin(x)\large {\sin (x) }cos(x)\large {\cos (x) } 的泰勒展开式:

sin(x)=x13!x3+15!x517!x7+19!x9+o(x9)xR\sin(x) = x - \frac {1}{3!}x^3 + \frac {1}{5!}x^5 - \frac {1}{7!} x^7 + \frac {1}{9!} x^9 + o(x^9) \quad \forall x \subset \mathbb{R}

cos(x)=112!x2+14!x416!x6+18!x8+o(x8)xR\cos(x) = 1 - \frac {1}{2!}x^2 + \frac {1}{4!}x^4 - \frac {1}{6!} x^6 + \frac {1}{8!} x^8 + o(x^8) \quad \forall x \subset \mathbb{R}

虽然在整个实数集 R\large { \mathbb{R}} 都成立,但是在实际应用中因为展开项数限制和浮点数的精度限制, x\large {x} 的范围只有在接近 0\large {0} 的时候才有比较高的精度。

但是实际应用中,如果输入 x\large {x} 很大的话,比如 232,1010,1022\large {2^{32}, 10^{10}, 10^{22} \dots } 情况下怎么得到足够精确的值呢?

中学里我们知道三角函数是周期函数,对于比较大的值,我们可以使用下面的公式将值归约到一个比较小的范围内。

x=x2kπkZx' = x - 2k \pi \quad k \subset \mathbb{Z}

这就是我们今天要讲的 参数归约(Argument Reduction) 算法。

从小学计算题开始

参数归约 听起来就很唬人,什么是参数啊,什么归约啊,都是些高大上的名词,听起来云里雾里的!

为了不让大家产生厌倦和畏难心理,我们先从一道小学数学计算题开始:

不借助计算器,计算 66600×666000\large {66600 \times 666000} 的值!

对于这道题,大家可能会列出下列算术:

66600×666000=666×666×100000=4435560000066600 \times 666000 = 666 \times 666 \times 100000 = 44355600000

但其实呢,我们也可以使用下面的方法:

66600×666000=1112×4×9×105=444×999×105=444×(10001)×105=4443556×105\begin{aligned} 66600 \times 666000 &= 111^2 \times 4 \times 9 \times 10^5 \\&= 444 \times 999 \times 10^5 \\&= 444 \times (1000 - 1) \times 10^5 \\&= 4443556 \times 10^5 \end{aligned}

如果我说上面这 2\large {2} 种方法都用到了参数归约的思想,你可能会感到震惊,什么?这种小学计算题也用到了参数归约算法吗?

阅读全文 »

By Long Luo

(挖坑!)

参考文献

By Long Luo

挖坑!

参考文献

By Long Luo

待继续完善

引言:

在机器学习和优化算法的领域中,梯度下降法被广泛应用于解决各种问题,从训练神经网络到参数优化。这种强大的优化算法通过不断迭代更新参数,以最小化目标函数或最大化收益函数。本文将介绍梯度下降法的数学原理,探讨其在实际应用中的广泛应用以及其优点和不足之处。

数学原理:

梯度下降法的核心思想是通过计算目标函数的梯度,并沿着梯度的反方向迭代地更新参数,以逐步逼近最优解。具体而言,梯度下降法包括以下步骤:

hθ(x)=θ0+θ1x+θ2x2++θnxnh_{\theta} (x) = \theta_0 + \theta_1 x + \theta_2 x^2 + \dots + \theta_n x^n

J(θ)=12mi=1m(hθ(xi)yi)2J(\theta) = \frac{1}{2m} \sum_{i = 1}^{m} (h_{\theta} (x_i) - y_i)^2

θj=θjαmi=1m(hθ(xi)yi)xj\theta_j = \theta_j - \frac{\alpha}{m} \sum_{i = 1}^{m} (h_{\theta} (x_i) - y_i) \cdot x_j

随机初始化参数向量。
计算目标函数在当前参数向量处的梯度。
沿着梯度的反方向更新参数向量。

重复以上步骤,直到满足停止条件(如达到最大迭代次数或参数变化不显著)。

阅读全文 »
0%