随机梯度下降算法

    BP神经网络是神经网络的基础,其中可用随机梯度下降算法来加快更新权值和偏置,但是随机梯度下降算法总是忘记,下面来好好复习一下:

    ⼈们已经研究出很多梯度下降的变化形式,包括⼀些更接近真实模拟球体物理运动的变化形 式。这些模拟球体的变化形式有很多优点,但是也有⼀个主要的缺点:它最终必需去计算代价函数C的 ⼆阶偏导,这代价可是⾮常⼤的。为了理解为什么这种做法代价⾼,假设我们想求所有的⼆阶偏导

    如果我们有上百万的变量vj,那我们必须要计算数万亿(即百万次的平⽅) 级别的⼆阶偏导4!这会造成很⼤的计算代价。不过也有⼀些避免这类问题的技巧,寻找梯度下 降算法的替代品也是个很活跃的研究领域。但在这里我们将主要⽤梯度下降算法(包括变化形式)使神经⽹络学习。

    我们怎么在神经⽹络中⽤梯度下降算法去学习呢?其思想就是利⽤梯度下降算法去寻找能使得⽅程

(6)

的代价取得最⼩值的权重wk和偏置bl。为了清楚这是如何⼯作的,我们将⽤权重和 偏置代替变量vj。也就是说,现在“位置”变量有两个分量组成:wk和bl,⽽梯度向量∇C则 有相应的分量∂C/∂wk和∂C/∂bl。⽤这些分量来写梯度下降的更新规则,我们得到:


通过重复应⽤这⼀更新规则我们就能“让球体滚下⼭”,并且有望能找到代价函数的最⼩值。 换句话说,这是⼀个能让神经⽹络学习的规则。 

    应⽤梯度下降规则有很多挑战。我们将在下⼀章深⼊讨论。但是现在只提及⼀个问题。为了理解问题是什么,我们先回顾(6)中的⼆次代价。注意这个代价函数有着这样的形式

,它是遍及每个训练样本代价 的平均值。在实践中,为了计算梯度∇C,我们需要为每个训练输⼊x单独地计算梯度值∇Cx,然后求平均值,。不幸的是,当训练输⼊的数量过⼤时会花费很⻓时间,这样会使学习变得相当缓慢。 

    有种叫做随机梯度下降的算法能够加速学习。其思想就是通过随机选取⼩量训练输⼊样本来计算∇Cx,进⽽估算梯度∇C。通过计算少量样本的平均值我们可以快速得到⼀个对于实际梯 度∇C的很好的估算,这有助于加速梯度下降,进⽽加速学习过程。 更准确地说,随机梯度下降通过随机选取⼩量的m个训练输⼊来⼯作。我们将这些随机的训练输⼊标记为X1,X2,...,Xm,并把它们称为⼀个⼩批量数据(mini-batch)。假设样本数量 m⾜够⼤,我们期望∇CXj 的平均值⼤致相等于整个∇Cx的平均值,即:


这⾥的第⼆个求和符号是在整个训练数据上进⾏的。交换两边我们得到


证实了我们可以通过仅仅计算随机选取的⼩批量数据的梯度来估算整体的梯度。 

    为了将其明确地和神经⽹络的学习联系起来,假设wk和bl表⽰我们神经⽹络中权重和偏置。 随即梯度下降通过随机地选取并训练输⼊的⼩批量数据来⼯作:

(20)(21)

其中两个求和符号是在当前⼩批量数据中的所有训练样本Xj上进⾏的。然后我们再挑选另⼀随机选定的⼩批量数据去训练。直到我们⽤完了所有的训练输⼊,这被称为完成了⼀个训练迭代期(epoch)。然后我们就会开始⼀个新的训练迭代期。 

    另外值得提⼀下,对于改变代价函数⼤⼩的参数,和⽤于计算权重和偏置的⼩批量数据的更新规则,会有不同的约定。在⽅程(6)中,我们通过因⼦ 1/n来改变整个代价函数的⼤⼩。⼈们有时候忽略1/n,直接取单个训练样本的代价总和,⽽不是取平均值。这对我们不能提前知道训练数据数量的情况下特别有效。例如,这可能发⽣在有更多的训练数据是实时产⽣的情况下。同样,⼩批量数据的更新规则(20)和(21)有时也会舍弃前⾯的 1/m。从概念上这会有⼀点区别,因 为它等价于改变了学习速率η的⼤⼩。但在对不同⼯作进⾏详细对⽐时,需要对它警惕。 我们可以把随机梯度下降想象成⼀次⺠意调查:在⼀个⼩批量数据上采样⽐对⼀个完整数据集进⾏梯度下降分析要容易得多,正如进⾏⼀次⺠意调查⽐举⾏⼀次全⺠选举要更容易。例如,如果我们有⼀个规模为n = 60,000的训练集,就像MNIST,并选取⼩批量数据⼤⼩为m = 10, 这意味着在估算梯度过程中加速了6,000倍!当然,这个估算并不是完美的——存在统计波动 ——但是没必要完美:我们实际关⼼的是在某个⽅向上移动来减少C,⽽这意味着我们不需要梯度的精确计算。在实践中,随机梯度下降是在神经⽹络的学习中被⼴泛使⽤、⼗分有效的技术, 它也是⼤多数学习技术的基础。


参考::http://neuralnetworksanddeeplearning.com/。 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
随机梯度下降(Stochastic Gradient Descent,SGD)是一种常用的优化算法,用于求解机器学习模型的参数。它是梯度下降算法的一种变体,通过随机选择一个样本来估计整体的梯度,并根据该估计更新模型参数。 在Matlab中,可以使用以下步骤实现随机梯度下降算法: 1. 初始化模型参数:根据具体问题,初始化模型的参数向量。 2. 设置学习率和迭代次数:选择合适的学习率(learning rate)和迭代次数(epochs)。 3. 随机选择样本:从训练数据中随机选择一个样本。 4. 计算梯度:根据选择的样本计算损失函数对模型参数的梯度。 5. 更新参数:使用计算得到的梯度和学习率更新模型参数。 6. 重复步骤3-5,直到达到指定的迭代次数或收敛条件。 以下是一个简单的示例代码,演示了如何在Matlab中实现随机梯度下降算法: ```matlab % 训练数据 X = ...; % 特征矩阵 y = ...; % 标签向量 % 初始化模型参数 theta = zeros(size(X, 2), 1); % 设置学习率和迭代次数 learning_rate = 0.01; epochs = 100; % 随机梯度下降算法 for epoch = 1:epochs % 随机选择样本 idx = randi(size(X, 1)); x = X(idx, :); label = y(idx); % 计算梯度 gradient = (x * theta - label) * x'; % 更新参数 theta = theta - learning_rate * gradient; end ``` 这是一个简单的随机梯度下降算法的示例,实际应用中可能需要根据具体问题进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值