前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神经网络优化算法-mini-batch、Adam、momentum、随机梯度下降

神经网络优化算法-mini-batch、Adam、momentum、随机梯度下降

作者头像
lovelife110
发布2021-01-14 14:50:37
7950
发布2021-01-14 14:50:37
举报
文章被收录于专栏:爱生活爱编程爱生活爱编程

梯度下降

没有任何优化的梯度下降(GD,Gradient Descent)

W^{[l]} = W^{[l]} - \alpha \text{ } dW^{[l]} \tag{1}
W^{[l]} = W^{[l]} - \alpha \text{ } dW^{[l]} \tag{1}
b^{[l]} = b^{[l]} - \alpha \text{ } db^{[l]} \tag{2}
b^{[l]} = b^{[l]} - \alpha \text{ } db^{[l]} \tag{2}

Mini-batch

神经网络训练过程是对所有m个样本,称为batch,如果m很大,例如达到百万数量级,训练速度往往会很慢。

我们可以把m个训练样本分成若干个子集,称为mini-batches,这样每个子集包含的数据量就小了。这种梯度下降算法叫做Mini-batch Gradient Descent。

先将总的训练样本分成T个子集(mini-batches),然后对每个mini-batch进行神经网络训练,包括Forward Propagation,Compute Cost Function,Backward Propagation,循环至T个mini-batch都训练完毕。

左图随机梯度下降,右图Mini-batch

实现思路:

1. 把训练集打乱,但是X和Y依旧是一一对应的,之后,X的第i列是与Y中的第i个标签对应的样本。乱序步骤确保将样本被随机分成不同的小批次

代码语言:javascript
复制
    # 第一步:打乱顺序
    permutation = list(np.random.permutation(m))  # 它会返回一个长度为m的随机数组,且里面的数是0到m-1,例如[7, 2, 1, 4, 8, 6, 3, 0, 5]
    shuffled_X = X[:, permutation]  # 将每一列的数据按permutation的顺序来重新排列。
    shuffled_Y = Y[:, permutation].reshape((1, m))

2. 切分,我们把训练集打乱之后,我们就可以对它进行切分了。

代码语言:javascript
复制
    # 第二步,分割
    num_complete_minibatches = math.floor(m / mini_batch_size)  # 把你的训练集分割成多少份,请注意,如果值是99.99,那么返回值是99,剩下的0.99会被舍弃
    for k in range(0, num_complete_minibatches):
        # 截取列
        mini_batch_X = shuffled_X[:, k * mini_batch_size:(k + 1) * mini_batch_size]
        mini_batch_Y = shuffled_Y[:, k * mini_batch_size:(k + 1) * mini_batch_size]
        mini_batch = (mini_batch_X, mini_batch_Y)
        mini_batches.append(mini_batch)

    # 如果训练集的大小刚好是mini_batch_size的整数倍,那么这里已经处理完了
    # 如果训练集的大小不是mini_batch_size的整数倍,那么最后肯定会剩下一些,我们要把它处理了
    if m % mini_batch_size != 0:
        # 获取最后剩余的部分
        mini_batch_X = shuffled_X[:, mini_batch_size * num_complete_minibatches:]
        mini_batch_Y = shuffled_Y[:, mini_batch_size * num_complete_minibatches:]

        mini_batch = (mini_batch_X, mini_batch_Y)
        mini_batches.append(mini_batch)

随机梯度下降

随机梯度下降(SGD),与mini-batch不同的是其中每个小批量仅有1个样本

随机梯度下降每次下降速度很快,但是路线曲折,有较大的振荡,最终会在最小值附近来回波动,难以真正达到最小值处。而且在数值处理上就不能使用向量化的方法来提高运算速度。

左图随机梯度下降,右图梯度下降

momentum梯度下降

包含动量的梯度下降

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 梯度下降
  • Mini-batch
  • 随机梯度下降
  • momentum梯度下降
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档