优化算法 (Optimization algorithms)

课程来自CS230    
优化算法,这能让你的神经网络运行得更快。机器学习的应用是一个高度依赖经验的过程,伴随着大量迭代的过程,你需要训练诸多模型,才能找到合适的那一个,所以,优化算法能够帮助你快速训练模型。

Mini-batch

深度学习可以在大数据领域发挥出最大的效果,我们可以利用一个巨大的数据集来训练神经网络,但在这个体量的数据集上,迭代训练的速度将会很慢。所以首先来谈谈 mini-batch 梯度下降法。

        之前的课程课程提到过,python的广播机制能让向量化有效地对所有𝑚个样本进行计算,允许你处理整个训练集,而无需某个明确的公式。当 我们要把训练样本放大巨大的矩阵 𝑋 当中去, 𝑋 = [𝑥^ (1) 𝑥^ (2) 𝑥^ (3) … … 𝑥^ (𝑚) ] 𝑌也是如此, 𝑌 = [𝑦^ (1) 𝑦^ (2) 𝑦^ (3) … … 𝑦^ (𝑚) ]
        
        所以𝑋 的维数是 (𝑛 𝑥 , 𝑚) 𝑌 的维数是 (1, 𝑚) ,向量化能够让你相对较快地处理所有 𝑚 个样本。如果𝑚 很大的话,处理速度仍然缓慢。比如说,如果 𝑚 500 万或 5000 万或者更大的一个数,在对整个训练集执行梯度下降法时,必须处理整个训练集,然后才能进行一步梯度下降法,然后你需要再重新处理 500 万个训练样本,才能进行下一步梯度下降法。所以如果你在处理完整个 500 万个样本的训练集之前,先让梯度下降法处理一部分,你的算法速度会更快。
     
        你可以把训练集分割为小一点的子集训练,这些子集被取名为 mini-batch ,假设每一个子集中只有 1000 个样本,那么把其中的 𝑥^ (1) 𝑥^ (1000) 取出来,将其称为第一个子训练集,也叫做 mini-batch ,然后你再取出接下来的 1000 个样本,从 𝑥^ (1001) 𝑥^ (2000) ,然后再取 1000个样本,以此类推。
        把𝑥 (1) 𝑥 (1000) 称为 𝑋^ {1} 𝑥^ (1001) 𝑥^ (2000) 称为 𝑋^ {2} ,如果 你的训练样本一共有 500 万个,每个 mini-batch 都有 1000 个样本,也就是说,你有 5000 mini-batch.  对 𝑌 也要进行相同处理,你也要相应地拆分 𝑌 的训练集,所以这是𝑌^{1},然后从𝑦^(1001)到𝑦^(2000),这个叫𝑌^{2},一直到𝑌^{5000}。 mini-batch 的数量  𝑡  组成了  𝑋^ {𝑡}  和  𝑌^ {𝑡} ,这就是 1000 个训练样本,包含相应的输入输出对。
            
𝑋 {𝑡} 𝑌 {𝑡} 的维数:如果 𝑋^ {1} 是一个有 1000 个样本的训练集,或者说是 1000 个样本的 𝑥 值,所以维数应该是(𝑛 𝑥 , 1000) 𝑋^ {2} 的维数应该是 (𝑛 𝑥 , 1000) ,以此类推。因此所有的子集维数都是(𝑛 𝑥 , 1000) ,而这些( 𝑌^ {𝑡} )的维数都是 (1,1000)

mini-batch 的梯度下降法

每次同时处理的单个的 mini-batch 𝑋^ {𝑡} 𝑌^ {𝑡} ,而不是同时处理全部的  𝑋  和  𝑌  训练集。 还是使用前面500万训练样本数据集的例子在训练集上运行 mini-batch 梯度下降法,
运行 for t=1, ……, 5000,因为我们有 5000 个各有 1000 个样本的组,在 for 循环里 就是对𝑋^ {𝑡} 𝑌^ {𝑡} 执行一步梯度下降法。假设你有一个拥有 1000 个样本的训练集, 之前的学习中已经很熟悉一次性处理完的方法,现在就是用之前向量化的方法去处理 1000 个样本。
        首先对输入也就是 𝑋 {𝑡} ,执行前向传播,然后执行 𝑧^ [1] = 𝑊^ [1] 𝑋 + 𝑏^ [1],这个公式是之前batch前向传播的公式,是处理整个训练集,代码如下:
parameters["W" + str(l+1)] = parameters["W" + str(l+1)] - learning_rate * grads['dW' + str(l+1)]
parameters["b" + str(l+1)] = parameters["b" + str(l+1)] - learning_rate * grads['db' + str(l+1)]
这里需要处理第一个 mini-batch,所以在处理 mini-batch 时 𝑋 改成 𝑋{𝑡},即𝑧^[1] = 𝑊^[1]𝑋^{𝑡} + 𝑏^[1],然后一直到𝐴^[𝐿] = 𝑔^[𝐿](𝑍^[𝐿]),这就是得到的预测值。这个向量化的执行命令,一次性处理 1000 个而不是 500 万个样本。
        
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 近端策略优化算法(proximal policy optimization algorithms)是一种用于强化学习的算法,它通过优化策略来最大化累积奖励。该算法的特点是使用了一个近端约束,使得每次更新策略时只会对其进行微调,从而保证了算法的稳定性和收敛性。近端策略优化算法在许多强化学习任务中都表现出了很好的效果,成为了当前最流行的强化学习算法之一。 ### 回答2: 近端策略优化算法是一种新兴的强化学习算法。它具有高效的策略优化和稳定的收敛性。近端策略优化算法在深度学习、自然语言处理、机器视觉、机器人学和其他应用领域都得到了广泛的应用。 近端策略优化算法的核心思想是对策略函数进行优化,以便最大化预期奖励。该算法使用指数加权平均方法来维护与策略函数相关的价值函数和状态值函数。在每个时间步中,它会使用当前策略函数执行一个或多个轨迹,然后使用这些轨迹更新策略函数的参数。 相比于其他优化策略的强化学习算法,近端策略优化算法有以下几个优点: 1. 收敛速度快——该算法具有高效的优化算法和稳定的训练过程,可以在较短的时间内收敛到最优解。 2. 收敛性强——该算法能够在训练过程中处理大的批量数据,并且可以快速地找到全局最优解。 3. 易于实现和调整——该算法的实现过程需要较少的超参数,使其易于实现和调整。 4. 可扩展性强——该算法可以扩展到复杂的问题和大规模数据集合。 总结: 近端策略优化算法是一种高效、稳定、易于实现的强化学习算法。它能够快速地处理大规模数据集合,并找到全局最优解。该算法在深度学习、自然语言处理、机器视觉、机器人学等领域中得到了广泛的应用。 ### 回答3: Proximal Policy Optimization (PPO)算法是一种强化学习中的模型优化算法。它的主要目标是发现学习最优策略的方法,并将其应用到机器人控制、游戏玩法、交通规划和服务机器人等任务中。 PPO算法的核心思想是使用一个剪切函数来限制策略更新的幅度,以确保算法的收敛性和稳定性。与传统的Policy Gradient算法不同,PPO算法对不同样本的更新幅度进行了限制,避免了策略更新过于激进或保守的情况,从而使算法更加可靠。 PPO算法的目标函数由两部分组成:第一部分是优化目标,即最大化期望奖励,第二部分是剪切函数。在PPO算法中,剪切函数被定义为两个策略之间的距离,它用于限制策略更新的幅度,以确保策略优化的稳定性。该函数使用了一个参数 $\epsilon$ 来控制策略更新的幅度,当距离超过阈值时,算法就会停止更新策略。 PPO算法的主要优点在于它的稳定性和可靠性。与其他优化算法相比,PPO算法采用了一种有限的剪切函数,从而避免了策略更新过于激进或保守的情况,而这种情况往往会导致算法崩溃或无法收敛。此外,PPO算法还具有高效性和可扩展性,可以应用于大规模深度学习中。 总之,PPO算法是一种强化学习中比较先进的算法,应用范围广泛,而且具有稳定性和可靠性,是未来智能机器人、自动驾驶等领域的重要研究方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值