人工智能–梯度下降法(2)

人工智能之梯度下降法(2)

前言:人工智能机器学习有关算法内容,请参见公众号“科技优化生活”之前相关文章。人工智能之机器学习主要有三大类:1)分类;2)回归;3)聚类。今天我们重点探讨一下梯度下降法GD^_^。

通过前一篇介绍,我们知道机器学习优化算法中,使用较多的是基于梯度下降GD的优化算法,但是一般梯度下降法会存在:靠近极小值时收敛速度减慢,“之字形”地下降等缺点。

针对一般梯度下降法的缺点,出现了不同的梯度下降法的变形或变种,即:批量梯度下降法BGD、小批量梯度下降法MBGD、随机梯度下降法SGD。其主要区别是不同的变形在训练数据的选择上。

今天我们主要介绍一下批量梯度下降法BGD。

批量梯度下降法概念:

批量梯度下降法BGD(Batch Gradient Descent) 是梯度下降法最原始的形式。该方法针对的是整个数据集,通过对所有样本的计算来求解梯度的方向。每次迭代使用所有的样本,每次迭代都需要把所有样本都送入,这样的好处是每次迭代都顾及了全部的样本,做的是全局最优化

批量梯度下降法基本思想:

批量梯度下降法BGD基本思路是在更新每一参数时都使用所有的样本来进行更新,其数学形式如下:

1)代价函数Cost Function简化形式:

2)对代价函数Cost Function求偏导:

3)由于是最小化风险函数,所以按照每个参数θ的梯度负方向来更新每个θ:

具体的伪代码形式为:

repeat{

(for every j=0, ... , n)

}

其中,m是训练样本的数量。

从上面公式可以注意到,批量梯度下降法BGD得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果样本数目m很大,那么采用该方法的迭代速度会很慢。

迭代过程:

从迭代的次数上来看,BGD迭代的次数相对较少。其迭代的收敛曲线示意图可以表示如下:

上图是每次迭代后的等高线图,每个不同颜色的线表示代价函数不同的值。运用批量梯度下降会快速收敛到圆心,即唯一的一个全局最小值

算法Python代码实现:

下面的Python代码实现了批量梯度下降法:

************************************

1. importnumpy as np

2. importrandom

3. defgradient_descent(alpha, x, y, ep=0.0001, max_iter=10000):

4. converged = False

5. iter = 0

6. m = x.shape[0] # number of samples

7.

8. # initial theta

11.

12. # total error, J(theta)

13. J = sum([(t0 + t1*x[i] - y[i])**2 for i inrange(m)])

14.

15. # Iterate Loop

16. while not converged:

17. # for each training sample, compute thegradient (d/d_theta j(theta))

18. grad0 = 1.0/m * sum([(t0 + t1*x[i] -y[i]) for i in range(m)])

19. grad1 = 1.0/m * sum([(t0 + t1*x[i] -y[i])*x[i] for i in range(m)])

20. # update the theta_temp

21. temp0 = t0 - alpha * grad0

22. temp1 = t1 - alpha * grad1

23.

24. #update theta

25. t0 = temp0

26. t1 = temp1

27.

28. # mean squared error

29. e = sum( [ (t0 + t1*x[i] - y[i])**2 fori in range(m)] )

30.

31. if abs(J-e)

32. print 'Converged, iterations: ',iter, '!!!'

33. converged = True

34.

35. J = e # update error

36. iter += 1 # update iter

37.

38. if iter == max_iter:

39. print 'Max interactionsexceeded!'

40. converged = True

41.

42. return t0,t1

************************************

批量梯度下降法优点:

1)能获得全局最优解;

2)易于并行实现。

批量梯度下降法缺点:

1)当样本数目很多时,训练过程会很慢;

2)很难处理不能载入内存的数据集;

3)不可避免地需要大量的读取操作,磁盘输入/输出是瓶颈。

结语:

批量梯度下降法BGD是梯度下降法最原始的形式,常用于机器学习和人工智能算法求解中。BGD最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。

后记:

由于批量梯度下降法BGD处理大规模样时效率低下,于是又出现了其他变种方法,请听下回分解。

(未完待续)

------以往文章推荐-----

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180610G1JDSA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券