吴恩达机器学习笔记60-大规模机器学习(Large Scale Machine Learning)

1、随机梯度降低算法  算法

  以前了解的梯度降低是指批量梯度降低;若是咱们必定须要一个大规模的训练集,咱们能够尝试使用随机梯度降低法(SGD)来代替批量梯度降低法。网络

在随机梯度降低法中,咱们定义代价函数为一个单一训练实例的代价:函数

随机梯度降低算法为:首先对训练集随机“洗牌”,而后:学习

下面是随机梯度降低算法的过程以及和批量梯度降低算法的异同:优化

随机梯度降低算法是先只对第1个训练样本计算一小步的梯度降低,即这个过程包括调参过程,而后转向第2个训练样本,对第2个训练样本计算一小步的梯度降低,这个过程也包括调参,接着转向第3个训练样本.......网站

  批量梯度降低和随机梯度降低算法的收敛过程是不一样的,实际上,随机梯度降低是在某个靠近全局最小值的区域内徘徊,而不是真的逼近全局最小值并停留在那个点,不过其最终也会获得一个很接近全局最小值的参数。这对于绝大多数的实际应用的目的来讲,已经足够了。spa

  随机梯度降低算法收敛比较快。3d

 

2、随机梯度降低算法的收敛 blog

  在批量梯度降低中,咱们能够令代价函数𝐽为迭代次数的函数,绘制图表,根据图表来判断梯度降低是否收敛。可是,在大规模的训练集的状况下,这是不现实的,由于计算代价太大了。产品

  所以在批量梯度降低算法中,根据J的收敛判断,在随机梯度降低算法中,如果1000次迭代,咱们使用每次迭代的最后1000个样本的平均值为点做图,对于图形对应的分析以下:

图①中:

蓝色的曲线在A点,说明算法已经趋于收敛,因随机梯度降低算法不直接收敛于最小值,所以最后会来回震荡。

若减少学习速率α的值,则可能会出现红色的曲线,其收敛于B点,因α变小,因此收敛速度变慢,且由于α较小,最后震荡的幅度也比较小

图②中:
1000个训练样本获得了蓝色的曲线,若将样本数从1000增长到5000,则会出现红色的更加平滑的曲线。

图③中:

蓝色的直线一直很平坦,说明算法并无很好地学习。

若增大样本数量到5000,可能会出现红色曲线。若增大样本数量,仍然获得紫色曲线(即仍然是平坦的),则说明算法确实没有学习好,须要调整α或者改变特征等。

图④中:

若出现不降反增的状况,说明算法正在发散,须要减少α的值

总结:

  1. 之因此曲线是来回震荡的,是由于有噪音

  2. 若曲线看起来噪音很大,或是总是上下波动,则试试增大你要平均的样本数量

  3. 若发现代价值在上升,那就换一个小点的α值

  咱们知道,随机梯度降低算法最后不会收敛于某一个最优值,而是会在最优值边缘来回震荡,在大多数的随机梯度降低算法中,学习速率α通常是保持

不变的,若你确实想要随机梯度算法收敛于全局最优值,能够随时间的变化减少学习速率α的值,因此,一种典型的方法设置α的值是:

  在这个公式中,随着迭代次数的增长,α的值愈来愈小,所以每一步愈来愈小,直到最终收敛到全局最小值。可是调整const1和const2比较繁琐,若可以获得一个很好的结果,则算法在最小值处的震荡越来

越小。 

  通常状况下,咱们会直接给α一个常数,而不是给出const1和const2,由于肯定const1和const2这2个常数比较繁琐,并且在平时的实践应用中,结果

在最小值处震荡的状况咱们能接受,可以知足咱们的须要。

 

3、小批量梯度降低算法

 小批量梯度降低算法是介于批量梯度降低算法和随机梯度降低算法之间的一个算法。

  • 批量梯度降低算法:每次迭代中使用全部(m个)样本
  • 随机梯度降低算法:每次迭代中使用1个样本
  • 小批量梯度降低算法:每次迭代中使用b个样本(b在2~100之间)

假设b取10,则小批量梯度降低算法以下:

使用小批量梯度降低算法,在处理了前10个样本以后,就能够开始优化参数θ,所以不须要扫描整个训练集,所以小批量梯度降低算法比批量梯度降低算法

小批量梯度降低算法在有好的向量化实现时,比随机梯度降低算法好,在这种状况下,10个样本求和可使用一种更向量化的方法实现,容许部分并行计算10个样本的和。

 

4、在线学习机制

实例1:

  假设有一个在线包裹系统,用户将包裹从A地运往B地,网站会给出一个价格,用户可能会接受此价格(y=1)或者不接受(y=0)。 

特征x用于存储用户的属性、出发地、目的地和网站给出的价格,咱们但愿去学习P(y=1|x;θ)去优化价格,咱们可使用Logistic回归或者神经网络来学 

习,先来考虑logistic回归。 

  假设你有一个连续运行的网站,则在线学习的流程以下:

  算法之因此没有使用,是由于在线学习机制将某同样本完以后,就丢弃这个样本。所以若你有不少连续的数据流,在线学习机制将会很是有效,而若你只有少许数据,则选择其余的算法而不选择在线学习。

在线学习算法能够对正在变化的用户偏好进行调适,特别地,随着时间的变化,大的经济环境发生变化,用户们可能会对价格变得很是敏感,而后愿意

支付更高的价格,又或者,有一批新的类型的用户涌入网站,在线学习算法能够根据变化着的用户偏好进行调适,并且从某种程度上能够跟进变化着的用户群体所愿意支付的价格。

  在线学习系统可以产生这种做用的缘由是随着时间的变化,参数θ不断变化和更新,会逐渐调适到最新的用户群体所应该体现出来的参数。

实例2: 

  产品搜索:经过用户搜索的关键词推荐用户最有可能点击的10部手机。 

x用于存储手机的的特征、用户搜索匹配这部手机名称的词数、用户搜索匹配这部手机描述的词数等。 若用户点击这部手机, y=1;不然,y=0。 

学习P(y=1|x; θ)。

实例3:

  学习应该展现给用户什么特别地优惠信息、选择用户感兴趣的新闻文章......

  在线学习机制与随机梯度降低算法很是类似,只是在线学习不是使用一个固定的数据集,而是从一个样本中学习以后丢弃这个样本,若是你有一个连续 的数据流,那么这个算法很是值得考虑。 

  在线学习的优势:若你有一个变化的用户群,又或者你正在预测变化的事情,在线学习能够慢慢调适到好的假设以便适应用户的最新行为。

 5、Map Reduce and Data Parallelism(映射约减和数据并行)

  若是咱们用批量梯度降低算法来求解大规模数据集的最优解,咱们须要对整个训练集进行循环,计算偏导数和代价,再求和,计算代价很是大。若是咱们可以将咱们的数据集分配给很少台计算机,让每一台计算机处理数据集的一个子集,而后咱们将计所的结果汇总在求和。这样的方法叫作映射简化。

  上述例子是将数据分散到4台机器上,这样运行效率理论上会增长4倍,可是实际上由于网络延迟等一些其余的缘由,效率增长不到4倍。

上面的状况是利用若干台机器,将数据的计算分散到各台机器上,实际上,咱们也能够在一台计算机上实现Map Reduce,即利用现代计算机的多核系

统,将训练样本分红几份,每个核处理其中一部分,也能实现并行的效果,并且由于数据始终仍是在一台机器上运行的,所以不存在网络延迟的影

响。

  不少高级的线性代数函数库已经可以利用多核CPU 的多个核心来并行地处理矩阵运算,这也是算法的向量化实现如此重要的缘故(比调用循环快)。

相关文章
相关标签/搜索