机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)...

OUTLINE:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第1张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第2张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第3张图片

这个点的导数为负,如果每次加上这个导数会向左走,是梯度上升。要梯度下降,则加负号,前面乘以一个系数,控制每次移动的步长

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第4张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第5张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第6张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第7张图片

9fd40c03a59967eb0f7ef09651b41375.png

有可能找到的是:局部最优解

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第8张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第9张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第10张图片

implementation:找到这个二次函数的最低点。(梯度下降法)

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第11张图片

首先:loss function是啥?

很明显,就是这个二次函数,我们要让这个loss function 达到0,就说明我们找到了最小值点。

于是,每次求出迭代的点的导数值,乘以-1,表示梯度下降,然后乘以eta(学习率)

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第12张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第13张图片

不妨来研究一下learning rate (eta)对梯度下降法的影响

eta=η()

这是eta=0.1的时候

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第14张图片

我盲猜eta=0.5,结果非常的amazing

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第15张图片

直接给我找到了最低点,哈哈

我猜想 eta>0.5的时候,很可能无法收敛。

结果任然amazing

经过左右横跳,最终还是收敛。

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第16张图片

这时候eta=1.就无法收敛了。

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第17张图片

eta>1时,loss function 直接发散。

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第18张图片

当eta很小时,迭代很多次才达到结果。

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第19张图片

线性回归中的梯度下降法:

虽然线性回归中有解析解,但是这样的解计算很复杂,为了优化loss function,我们同样可以使用梯度下降法。

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第20张图片

此时梯度是:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第21张图片

3986c4525dd4bd77a79ffbb9b9fb4611.png

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第22张图片

Loss function:

b5a93d9969bc47d200ea8a2dddb61e94.png

x是已经确定的,需要确定的就是θn

梯度是:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第23张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第24张图片

此时这个梯度每个分量都与m有关,这是一个很大的数字,我们不希望梯度与m有关,

这会导致运算量很大,

因此,不妨除以一个m:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第25张图片

这样,我们会发现,我们优化的loss function 是:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第26张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第27张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第28张图片

差别就是是否除以2,并无影响。

下面来编程实现一下线性回归中的梯度下降法吧~

随机生成一些数据:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第29张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第30张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第31张图片

05-Vectorize-Gradient-Descent

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第32张图片

使用梯度下降法前进行数据归一化

当我们使用梯度下降法的时候,不同特征的单位不同,因此得到的梯度下降的方向也会受到一些数据偏大或者偏小的数字的影响,导致数据溢出,或者无法收敛到极小值。

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第33张图片

此时,最好将数据归一化,这样得到的梯度就很均匀,能够更快的梯度下降。

注意:当我们用正规方程求解时,不需要归一化!

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第34张图片

梯度下降法的优势:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第35张图片

随机梯度下降:

如何理解随机梯度下降(stochastic gradient descent,SGD)?​www.zhihu.com

这真的是一个很大的问题,我很难从我浅显的视角给出一个很准确的答案,

我的理解是:

我们选取的损失函数是各个样本损失的和再求平均,这样的方法显然很好

代表了总体性质,类似平均数。

但是这样的计算复杂度是:O(N)

随机梯度下降的思想就是随机选取一个样本,用他来代替整体的下降趋势。

那么计算开销就从

下降到

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第36张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第37张图片

以上是搜索的过程,也许搜索的方向不是最佳的,甚至方向错误,

但是,根据实验数据显示,这样的方式能够优化到最终结果。

SGD对学习率要求很高。

因为优化的过程十分随机,如果我们的学习率一成不变,意味着可能我们到了

最佳位置但是又跳出去了。

因此,我们需要学习率随着迭代次数而逐步减少

则有:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第38张图片

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第39张图片

打造钢铁的时候,火的温度随着时间而减小。

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第40张图片

下面编程实现:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第41张图片

而梯度下降法耗时:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第42张图片

SCI-kit-LEARN 中的SGD:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第43张图片

关于梯度的调试:

我们求出的梯度公式真正是对的吗?

如何验证?

其实很简单,我们的求法是依据多元函数求导公式

但是,我们忽略了导数的定义。

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第44张图片

求个极限,割线斜率=切线斜率

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第45张图片

因此,对于梯度来说,就有

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第46张图片
def dJ_debug(theta, X_b, y, epsilon=0.01):
    res = np.empty(len(theta))
    for i in range(len(theta)):
        theta_1 = theta.copy()
        theta_1[i] += epsilon
        theta_2 = theta.copy()
        theta_2[i] -= epsilon
        res[i] = (J(theta_1, X_b, y) - J(theta_2, X_b, y)) / (2 * epsilon)
    return res

总结:

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第47张图片

随机:

提高运算速度。

对于large_scale data 很重要。

能跳出局部最优解

对于很多不确定的问题,本身就没有一个确定的答案。

梯度上升法:

我们知道导数,或者梯度是代表函数值上升的方向

因此我们梯度下降的时候要减去。

机器学习实战 梯度上升 数学推导_机器学习实战 原理/代码:Gradient-Descent(梯度下降)..._第48张图片

梯度下降法不是一个机器学习算法

是一个基于搜索的最优化算法

能够最小化一个loss function maximize utility function~

你可能感兴趣的:(机器学习实战,梯度上升,数学推导)