YB菜菜的机器学习自学之路(三)——简单了解梯度下降

YB菜菜的机器学习自学之路(三)——简单了解梯度下降

  • 前提说明
  • 代价函数求解
    • 1. 公式法求解
    • 2. 梯度下降+罗森布拉特感知器
      • 2.1 批量梯度下降
      • 2.1 随机梯度下降
      • 2.3 mini-批量梯度下降
      • 2.4 计算结果:

前提说明

从求解简单的一元二次代价函数,复习罗森布拉特感知器模型,并简单了解平面梯度下降.
从(二)中,可知,代价函数为: e = ( y − w x ) 2 = x 2 w 2 − 2 x y w + y 2 ( 1 ) e=(y-wx)^{2}=x^{2}w^{2}-2xyw+y^{2} (1) e=(ywx)2=x2w22xyw+y2(1)

代价函数求解

从代价函数可以看出,这是一个简单的开口向上的一元二次函数,其中 w w w为自变量, e e e为因变量,如图1所示。求解这个函数最低点处的 w w w值,即为最佳参数。
YB菜菜的机器学习自学之路(三)——简单了解梯度下降_第1张图片
图1

1. 公式法求解

从前面我们知道代价函数的完整公式为:

e = 1 m [ ( x 1 2 + x 2 2 + . . . + x i 2 ) w 2 − 2 ( x 1 ∗ y 1 + x 2 ∗ y 2 + . . . + x i ∗ y i ) w + ( y 1 2 + y 2 2 + . . . + y i 2 ) ] ( 2 ) e=\frac{1}{m}[(x_{1}^{2}+x_{2}^{2}+...+x_{i}^{2})w^{2}-2(x_{1}*y_{1}+x_{2}*y_{2}+...+x_{i}*y_{i})w+ (y_{1}^{2}+y_{2}^{2}+...+y_{i}^{2})] (2) e=m1[(x12+x22+...+xi2)w22(x1y1+x2y2+...+xiyi)w+(y12+y22+...+yi2)](2)

又因为是开口向上的一元二次函数,因此,可以通过顶点公式直接求: w = − b 2 a ( 3 ) w=-\frac{b}{2a} (3) w=2ab(3)
但是这种方法存在问题:
(1)不是所有函数都有很简单的计算公式
(2)当样本数据多的时候(以公式(2)为例),在使用公式时,需要计算多个乘法运算,这计算量是巨大的。

2. 梯度下降+罗森布拉特感知器

我们知道,代价函数是一个开口向上的抛物线,那么如果w值在顶点左侧,则斜率k为负值,如果在右侧则斜率k为正值。当达到最低点时,则斜率k为0;那么我们通过计算斜率k来调整w的值,这种方式称为梯度下降
根据罗森布拉特感知器可以知道:如果误差偏大大于0我们就降低参数值,如果误差小于0我们就增加参数值。
w = w + α ∗ e ∗ x = w + α ∗ ( y − w x ) ∗ x = w − α ( x 2 w − x y ) ( 4 ) w=w+\alpha *e*x =w+\alpha *(y-wx)*x =w-\alpha(x^{2}w-xy) (4) w=w+αex=w+α(ywx)x=wα(x2wxy)(4)
因此:
假设我们给定一个初始的 w w w值,如果 w w w在左侧,斜率 k k k为负值,那么我们就增加一点 w w w,
如果 w w w在右侧,则斜率 k k k为正值,我们就减少一点 w w w。则调整公式为(5):
w = w − α k = w − α ( 2 ∗ x 2 w − 2 x y ) = w − 2 ∗ α ( x 2 w − x y ) ( 5 ) w=w-\alpha k=w-\alpha(2*x^{2}w-2xy)=w-2*\alpha(x^{2}w-xy) (5) w=wαk=wα(2x2w2xy)=w2α(x2wxy)(5)
通过对比公式(4)(5)可以发现,
罗森布拉特感知模型中的调整方式的本质核心就是梯度下降
注:这里公式(5)多了一个2倍,本质上并无区别。只是影响调整参数的快慢。

2.1 批量梯度下降

从公式(2)可以看出,该代价函数是利用所有观测量得到的,对该函数进行梯度下降方法寻找w,我们称为批量梯度下降

w_batch =0.1
for _ in range(100):
    for _ in range(100):
        # e=(y-wx)**2=x^2*w^2-2yxw+y^2
        # k = 2*x^2w-2yx
        alpha_batch=0.1
        # a=sum(x^2)
        # b=-2(sum(xy))
        a=2*np.sum(xs*xs)*w_batch
        b=2*np.sum(ys*xs)
        kk = (a+(-1*b))/100
        w_batch = w_batch - alpha_batch * kk
        print(w_batch)
y_batch_pre = w_batch * xs
plt.scatter(xs, ys)
plt.plot(xs, y_batch_pre)
plt.show()

这种方法的优点是,可以找到全局最优解。
但是缺点是数据量特别多,计算复杂度搞。

2.1 随机梯度下降

我们知道,任意一组观测参数 ( x i , y i ) (x_{i},y_{i}) xiyi都可以得到一个开口向上的误差代价函数 e i e_{i} ei:
e i = x i 2 w 2 + x i y i w + y i 2 ( 6 ) e_{i}=x^{2}_{i}w^{2}+x_{i}y_{i}w+y^{2}_{i} (6) ei=xi2w2+xiyiw+yi2(6)
如果说批量梯度下降是将所有抛物线融合成一条然后寻找顶点,那么随机梯度下降就是通过寻找每一个观测值下抛物线的最顶点,实现最终最优点获得。

w_random = 0.1
for _ in range(1000):
    for i in range(100):
        x = xs[i]
        y = ys[i]
        # e=(y-wx)**2=x^2*w^2-2yxw+y^2
        # k = 2*x^2w-2yx
        alpha_random = 0.1
        k = 2*(x**2)*w_random+(-2*y*x)
        w_random = w_random-alpha_random*k

相比批量梯度算法,随机梯度下降方法计算量更少。
但是其缺点也很明显,由于观测量带来的代价函数偏差,会使得寻找最优值的过程振荡,同时可能会陷入局部最优解。

2.3 mini-批量梯度下降

mini-批量梯度:折中的随机和批量,即在整体样本中,抽取一部分观测量进行梯度下降,避免了批量的复杂计算量,也避免陷入局部最优值。

2.4 计算结果:

YB菜菜的机器学习自学之路(三)——简单了解梯度下降_第2张图片
图2
在相同的迭代次数下,不同的结果。可以看到,利用罗森布拉特感知的这种方法(随机和mini)也可以得到与公式法相同的结果。

你可能感兴趣的:(深度学习,人工智能)