人工智能之梯度下降法(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处理大规模样时效率低下,于是又出现了其他变种方法,请听下回分解。
(未完待续)
------以往文章推荐-----
领取专属 10元无门槛券
私享最新 技术干货