Machine Learning|吴恩达 (10)-大规模机器学习,随机梯度下降,映射化简
确定你的模型是高偏差还是高方差
假设你有1亿条数据,训练起来非常耗时耗资源。那么你可以先抽取1000条或10000条数据进行训练,检测你的模型。
画出如上误差曲线,用以确认你的模型是高偏差还是高方差的状况。如果是高方差的状况(如上左图),增加样本对提升正确率有帮助。如果是高偏差状况(如上右图),还是先考虑增加样本特征,否则增加样本数量对提升正确率的意义不大。
金句一条:
“It’s not who has the best algorithm that wins.
It’s who has the most data.”
随机梯度下降(Stochastic gradient descent)
假设你有3亿的样本数据,你是无法一次载入所有数据并进行整体样本的梯度计算的。那么你可以一次计算一个样本的梯度,并更新一个参数,再调入下一个样本,并更新…..
虽然梯度下降的曲线可能更曲折,但这个方法也总能找到最优值。
内层循环:对3亿个样本依次进行梯度计算并更新参数。
外层循环:对整体3亿个样本,运行几个轮回(epoch)
注意点:必须提前shuffle样本数据。
Mini-batch gradient descent
将大规模的样本集,先shuffle,然后分割为一个个小的batch。
对batch中的样本集体计算梯度,并更新参数,再载入下一个batch。
【这也是目前我的神经网络应用中,最常用的方式。】
在线学习
利用网站等在线平台的数据流训练模型,例如学习用户点击网站内容的偏好,并据此给他推荐内容。
用完后,样本数据无需保存。
每次更新1到几个样本。
应用比较广阔:给用户上特别的广告;推荐用户新闻内容;产品推荐等。
Map-reduce(映射化简)-分布式计算梯度
假如我们有一个超大的样本集,我们希望多台计算机同时计算以提升训练的速度。
我们将样本分为4个子训练集,分别在4台计算机上训练,分别获得4个梯度下降的汇总值。然后在一台电脑上combine合并这些梯度下降值。
假设是400个样本,平分到4台电脑。汇总公式:
就ok了。其实就是Cost是求和形式的学习算法,梯度值都是可以分段累加的。同一台机器上顺序分段累加就是mini-batch gradient descent,多台机器并行计算后再合并累加就是map-reduce。