机器学习公开课笔记(10):大规模机器学习
2016-01-26 16:12
253 查看
批梯度下降 (Batch Gradient Descent)
以线性回归为例,用梯度下降算法进行参数更新的公式为$$\theta_j=\theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$$可以看到每次参数更新一次,都需要将整个训练集扫描一遍,所以称为批梯度下降,这种更新方式对于参数集很大的集合(例如m=100,000,000)运行速度十分慢,为了加快算法运行速度,提出了随机梯度下降。随机梯度下降 (Stochastic Gradient Descent)
每次仅用一个example来更新参数$\theta$,仍以线性回归为例,随机梯度下降算法为1. 随机重排列整个训练集(shuffle)
2. 重复下列过程多次(数据集较大时可以重复1~10次)
for i = 1, ..., m {
$\theta_j=\theta_j-\alpha(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$
}
小批梯度下降 (Mini-Batch Gradient Descent)
介于批梯度下降和随机梯度下降之间,批梯度处理利用全部m个example进行参数更新;随机梯度下降只用1个example进行参数更新;而Mini梯度下降使用b(1<b<m)个example进行参数更新。仍以线性回归为例,加入我们有m=1000个example,我们可以用每b=10个example进行参数更新,例如:Repeat {
for i = 1, 11, 21, ..., 991 {
$\theta_j=\theta_j-\alpha\frac{1}{10}\sum\limits_{k=i}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)}$
}
}
算法收敛性
批梯度处理能够保证算法收敛到最小值(如果选择的学习速率$\alpha$合适的话),可以plot代价函数$J(\theta)$随迭代次数的曲线,如果曲线是总是下降的,则能够收敛,反之需要调整学习速率。随机梯度下降并不能保证算法收敛到最小值,最终结果可能是在最小值附近来回游走,为了观察其收敛特性,可以plot每100(1000)次迭代时100个example代价函数函数$\text{cost}(\theta,(x^{(i)}, y^{(i)}))$的平均值,如果是下降趋势,则可以收敛,否则可能需要调整增大或者减小平均的example数(将100改为1000或者10等),减小或者增大学习速率。
在线学习 (Online Learning)
之前的算法都是有一个固定的训练集来训练模型,当模型训练好后对未来的example进行分类、回归等。在线学习则不同,它对每个新来的example进行模型参数更新,因此不需要固定的训练集,参数更新的方式则是采用随机梯度下降。在线学习的优势是模型参数可以随用户的偏好自适应的进行调整,以logistic回归为例,在线学习方式如下:Repeat forever {
1. 获取当前example (x, y)
2. 使用(x,y)进行参数更新:$\theta_j=\theta_j-\alpha(h_\theta(x)-y)x_j$
}
MapReduce和数据并行化
这部分内容Andrew Ng讲得不多,可以认为仅仅讲了多个机器的求和问题,比如如何求解1+2+3+...+1000?Map过程:四个机器分别计算1+2+...+250,251+252+...+500, 501+502...+750,751+752+...+1000,然后Reduce过程:将四个机器求和的结果sum1,sum2,sum3,sum4汇总到一台机器上,计算sum1+sum2+sum3+sum4。相关文章推荐
- Maven/SBT常用的repositorie一览表
- 数据中心热点问题
- 基于盐+Sha算法的安全密码保护机制
- 第一章笔记
- Android内存优化杂谈
- Zoho Books: 小企业如何应对债务
- Project Wizard 最近打开项目记录
- spring整合redis客户端及缓存接口设计
- linux shell 数组建立及使用技巧
- C#委托
- Java方法之--System.arraycopy方法和Arrays.copyOf()
- Git命令(最常用10组)
- FMOD学习之-------进阶篇之----确定目标
- C# 堆和栈
- Hibernate的addEntity
- soupUI导出webservice服务端
- shared_ptr基于引用计数智能指针实现
- innodb_file_format innodb文件格式
- nurbs
- Java中使用Oracle的客户端 load data和sqlldr命令执行数据导入到数据库中