pdf做电子书下载网站,seo研究中心怎么了,企业小程序怎么注册,创建免费网页文章目录 损失函数交叉熵损失多类别分类任务概述真实标签的独热编码交叉熵损失函数 L p 范式 \mathcal{L}_{p}\text{ 范式} Lp 范式均方误差平均绝对误差 优化梯度下降和误差的反向传播 简介 本文介绍了神经网络中的损失函数及其优化方法。损失函数用于衡量模型预测值与真实值… 文章目录 损失函数交叉熵损失多类别分类任务概述真实标签的独热编码交叉熵损失函数 L p 范式 \mathcal{L}_{p}\text{ 范式} Lp 范式均方误差平均绝对误差 优化梯度下降和误差的反向传播 简介 本文介绍了神经网络中的损失函数及其优化方法。损失函数用于衡量模型预测值与真实值之间的差异其中交叉熵损失函数在分类问题中尤为重要。文章详细解释了交叉熵的概念并通过二分类任务示例阐述了如何使用sigmoid函数和交叉熵损失函数进行模型训练。在多类别分类任务中softmax函数与交叉熵损失函数的结合提供了一个强大的训练框架。此外文章还介绍了均方误差、平均绝对误差等其他损失函数以及梯度下降和反向传播算法在神经网络优化中的应用。最后讨论了激活函数的选择对模型训练效果的影响。
损失函数
神经网络的参数是自动学习的那么它是如何自动学习的呢
这需要损失函数Loss Function来引导。
损失函数通常被定义为一种计算误差的量化方式也就是计算网络输出的预测值和目标值之间的损失值或者代价大小
损失值被用来作为优化神经网络参数的目标我们优化的参数包括权重和偏差。
交叉熵损失
首先介绍KLKullback-Leibler散度 起作用是衡量两个分布 P ( x ) P(x) P(x)和 Q ( x ) Q(x) Q(x) 的相似度 D K L ( P ∥ Q ) E x ∼ P [ log P ( x ) Q ( x ) ] E x ∼ P [ log P ( x ) − log Q ( x ) ] D_{\mathrm{KL}}(P\|Q)\mathbb{E}_{x\sim P}\bigg[\log\frac{P(x)}{Q(x)}\bigg]\mathbb{E}_{x\sim P}[\log P(x)-\log Q(x)] DKL(P∥Q)Ex∼P[logQ(x)P(x)]Ex∼P[logP(x)−logQ(x)] KL散度是一个非负的指标并且只有P和Q两个分布一样时才取值0。当我们讨论KL散度 D K L ( P ∥ Q ) D_{\mathrm{KL}}(P\|Q) DKL(P∥Q)时我们假设分布P是已知的并且固定的。这意味着P是一个确定性的概率分布它的概率密度函数或概率质量函数是固定的不随时间或样本的变化而变化。 因此KL散度中的第一部分 E x ∼ P [ log P ( x ) ] \mathbb{E}_{x\sim P}[\log P(x)] Ex∼P[logP(x)]实际上是分布P的熵 H ( P ) H(P) H(P)。熵是分布P的一个性质它衡量了P的不确定性或信息量。由于P是固定的它的熵也是一个固定的数值不依赖于我们选择的另一个分布Q。
因为KL散度的第一个项和Q没有关系我们引入交叉熵的概念并把公式的第一项移除。
以下是交叉熵的定义 H ( P , Q ) − E x ∼ P log Q ( x ) H(P,Q)-\mathbb{E}_{x\sim P}\log Q(x) H(P,Q)−Ex∼PlogQ(x)
当我们说通过Q来最小化交叉熵我们实际上是在尝试找到一个Q使得 − E x ∼ P [ log Q ( x ) ] -\mathbb{E}_{x\sim P}[\log Q(x)] −Ex∼P[logQ(x)]尽可能小。由于KL散度的第一部分即P的熵是一个常数不依赖于Q所以当我们最小化交叉熵时我们实际上是在最小化KL散度的第二部分。
因此最小化交叉熵的效果等同于最小化KL散度因为交叉熵是KL散度中唯一依赖于Q的部分。当交叉熵最小时KL散度的第二部分也最小而第一部分是固定的所以整个KL散度也就最小了。
总结来说最小化交叉熵H(P,Q)就是在最小化KL散度 D K L ( P ∥ Q ) D_{\mathrm{KL}}(P\|Q) DKL(P∥Q)中与Q有关的部分而KL散度的另一部分P的熵是固定的所以最小化交叉熵就等同于最小化KL散度。
在多类别分类任务中深度神经网络通过softmax函数输出的是不同类别概率的分布而不是直接输出一个样本属于的类别。softmax和交叉熵的结合为多类别分类任务提供了一个强大的框架其中softmax提供了一种将网络输出转换为概率分布的方法而交叉熵则提供了一个衡量这些概率分布与真实分布之间差异的度量从而可以有效地训练网络。
例子
在二分类任务中如何使用sigmoid函数和交叉熵损失函数来进行模型训练和损失计算。 二分类任务在二分类任务中每个数据样本 x i x_i xi都有一个对应的标签 y i y_i yi这个标签是0或1。例如如果我们是在做垃圾邮件分类标签1可能代表垃圾邮件而标签0代表非垃圾邮件。 在二分类问题中每个样本 x i x_i xi 都有一个对应的真实标签 y i y_i yi这个标签通常是二进制的即 y i ∈ { 0 , 1 } y_i \in \{0, 1\} yi∈{0,1}。为了将这个标签转化为概率分布我们可以使用 one-hot 编码 如果 y i 1 y_i 1 yi1则真实标签对应的概率分布是 [ 0 , 1 ] [0, 1] [0,1]表示样本属于类别 1 的概率是 1属于类别 0 的概率是 0。如果 y i 0 y_i 0 yi0则真实标签对应的概率分布是 [ 1 , 0 ] [1, 0] [1,0]表示样本属于类别 0 的概率是 1属于类别 1 的概率是 0。 模型预测模型的任务是预测每个样本属于类别1的概率记为 y ^ i , 1 \hat{y}_{i,1} y^i,1。由于在二分类问题中样本只属于两个类别中的一个所以样本属于类别0的概率就是 1 − y ^ i , 1 1 - \hat{y}_{i,1} 1−y^i,1记为 y ^ i , 2 \hat{y}_{i,2} y^i,2。 使用sigmoid函数在二分类神经网络中最后一层通常使用sigmoid激活函数它的输出是一个介于0和1之间的值可以解释为样本属于类别1的概率。sigmoid函数定义为 sigmoid ( x ) 1 1 e − x \text{sigmoid}(x) \frac{1}{1 e^{-x}} sigmoid(x)1e−x1 其中 x x x是神经网络的原始输出logit。在这个例子中我们可以令 y ^ i sigmoid ( x i ) \hat{y}_i \text{sigmoid}(x_i) y^isigmoid(xi)。 交叉熵损失现在我们有了真实标签的概率分布 [ y i , 1 − y i ] [y_i, 1 - y_i] [yi,1−yi] 和模型预测的概率分布 [ y ^ i , 1 − y ^ i ] [\hat{y}_i, 1 - \hat{y}_i] [y^i,1−y^i]我们可以计算交叉熵损失 对于每个样本 i i i交叉熵损失是 L i − ( y i log ( y ^ i ) ( 1 − y i ) log ( 1 − y ^ i ) ) L_i - \left( y_i \log(\hat{y}_i) (1 - y_i) \log(1 - \hat{y}_i) \right) Li−(yilog(y^i)(1−yi)log(1−y^i)) 交叉熵损失函数用于衡量模型预测的概率分布与真实标签之间的差异。在二分类任务中交叉熵损失函数可以写为 L − 1 N ∑ i 1 N ( y i log ( y ^ i ) ( 1 − y i ) log ( 1 − y ^ i ) ) L -\frac{1}{N} \sum_{i1}^{N} \left( y_i \log(\hat{y}_i) (1 - y_i) \log(1 - \hat{y}_i) \right) L−N1i1∑N(yilog(y^i)(1−yi)log(1−y^i)) 其中 N N N是总数据样本的大小。 损失函数的解释在损失函数的表达式中对于每个样本 i i i y i y_i yi是真实标签 y ^ i \hat{y}_i y^i是模型预测的概率。由于 y i y_i yi是0或1所以在 y i log ( y ^ i ) y_i \log(\hat{y}_i) yilog(y^i)和 ( 1 − y i ) log ( 1 − y ^ i ) (1 - y_i) \log(1 - \hat{y}_i) (1−yi)log(1−y^i)中只有一个项会为非零值。具体来说 如果 y i 1 y_i 1 yi1那么 1 − y i 0 1 - y_i 0 1−yi0所以只有 y i log ( y ^ i ) y_i \log(\hat{y}_i) yilog(y^i)这一项会被计算。如果 y i 0 y_i 0 yi0那么 y i 0 y_i 0 yi0所以只有 ( 1 − y i ) log ( 1 − y ^ i ) (1 - y_i) \log(1 - \hat{y}_i) (1−yi)log(1−y^i)这一项会被计算。 最优情况如果对于所有的样本 i i i模型预测 y ^ i \hat{y}_i y^i都完全等于真实标签 y i y_i yi那么交叉熵损失 L L L将会是0。这是因为当预测概率等于真实标签时相应的对数项将会是0因为 log ( 1 ) 0 \log(1) 0 log(1)0从而整个损失函数的值为0。 总结来说这个例子说明了在二分类任务中如何使用sigmoid函数来输出一个样本属于类别1的概率以及如何使用交叉熵损失函数来衡量模型预测与真实标签之间的差异并通过最小化这个损失来训练模型。
在多类别分类任务中理解交叉熵损失函数的关键在于认识到每个样本都有一个确切的类别并且模型需要预测每个类别的概率。
多类别分类任务概述
样本和类别在多类别分类任务中每个样本 x i x_i xi 被分到 M M M 个类别中的一个其中 M ≥ 3 M \geq 3 M≥3。模型预测模型需要预测每个样本属于每个类别的概率记为 y ^ i , 1 , y ^ i , 2 , … , y ^ i , M \hat{y}_{i,1}, \hat{y}_{i,2}, \ldots, \hat{y}_{i,M} y^i,1,y^i,2,…,y^i,M。这些预测概率必须满足条件 ∑ j 1 M y ^ i , j 1 \sum_{j1}^{M} \hat{y}_{i,j} 1 ∑j1My^i,j1即每个样本的概率总和为 1。
真实标签的独热编码
类别标签每个样本的目标类别 c i c_i ci 是一个整数取值范围是 [ 1 , M ] [1, M] [1,M]。独热编码类别标签 c i c_i ci 可以被转换成一个独热编码向量 y i [ y i , 1 , y i , 2 , … , y i , M ] y_i [y_{i,1}, y_{i,2}, \ldots, y_{i,M}] yi[yi,1,yi,2,…,yi,M]其中只有 y i , c i 1 y_{i,c_i} 1 yi,ci1表示样本属于第 c i c_i ci 个类别其余元素都是 0。
交叉熵损失函数 交叉熵损失多类别分类的交叉熵损失函数可以写成以下形式 L − 1 N ∑ i 1 N ∑ j 1 M y i , j log y ^ i , j L -\frac{1}{N} \sum_{i1}^{N} \sum_{j1}^{M} y_{i,j} \log \hat{y}_{i,j} L−N1i1∑Nj1∑Myi,jlogy^i,j 其中 N N N 是样本总数。 简化损失函数由于独热编码中只有一个元素为 1即 y i , c i 1 y_{i,c_i} 1 yi,ci1其他元素都是 0所以上述损失函数可以进一步简化。对于每个样本 i i i只有 y i , c i log y ^ i , c i y_{i,c_i} \log \hat{y}_{i,c_i} yi,cilogy^i,ci 这一项是非零的因此损失函数可以简化为 L − 1 N ∑ i 1 N log y ^ i , c i L -\frac{1}{N} \sum_{i1}^{N} \log \hat{y}_{i,c_i} L−N1i1∑Nlogy^i,ci 这里 log y ^ i , c i \log \hat{y}_{i,c_i} logy^i,ci 是模型预测样本 i i i 属于其真实类别 c i c_i ci 的概率的对数。
由于独热编码的特性我们只需要关注每个样本的真实类别对应的预测概率这就是为什么最终的损失函数只涉及每个样本的真实类别 c i c_i ci 的预测概率 y ^ i , c i \hat{y}_{i,c_i} y^i,ci。 L p 范式 \mathcal{L}_{p}\text{ 范式} Lp 范式
向量 x \boldsymbol{x} x的 p p p-范式用来测量其数值幅度大小如果一个向量的值更大它的 p p p-范式也会有一个更大的值。p是一个大于或等于1的值 p p p-范式定义如下 ∥ x ∥ p ( ∑ i 1 N ∣ x i ∣ p ) 1 / p i . e . , ∥ x ∥ p p ∑ i 1 N ∣ x i ∣ p \begin{aligned}\|\boldsymbol{x}\|_p\left(\sum_{i1}^N|x_i|^p\right)^{1/p}\\\mathrm{i.e.,~}\|\boldsymbol{x}\|_p^p\sum_{i1}^N|x_i|^p\end{aligned} ∥x∥pi.e., ∥x∥pp(i1∑N∣xi∣p)1/pi1∑N∣xi∣p p p p-范式在深度学习中往往用来测量两个向量的差别大小写作 L p 范式 \mathcal{L}_{p}\text{ 范式} Lp 范式 L p ∥ y − y ^ ∥ p p ∑ i 1 N ∣ y i − y ^ i ∣ p \mathcal{L}_p\|\boldsymbol{y}-\hat{\boldsymbol{y}}\|_p^p\sum_{i1}^N|y_i-\hat{y}_i|^p Lp∥y−y^∥ppi1∑N∣yi−y^i∣p y \boldsymbol{y} y 是目标值向量 y ^ \hat{\boldsymbol{y}} y^ 是预测值向量
均方误差
均方误差Mean Squared ErrorMSE是 L 2 范式 \mathcal{L}_{2}\text{ 范式} L2 范式的平均值。
MSE在网络输出时连续值的回归问题中使用。例如两个不同的图像在像素上的区别可以用MSE来测量 L 1 N ∥ y − y ^ ∥ 2 2 1 N ∑ i 1 N ( y i − y ^ i ) 2 \mathcal{L}\frac1N\|\boldsymbol{y}-\hat{\boldsymbol{y}}\|_2^2\frac1N\sum_{i1}^N(y_i-\hat{y}_i)^2 LN1∥y−y^∥22N1i1∑N(yi−y^i)2
平均绝对误差
类似于MSE平均绝对误差Mean Absolute ErrorMAE 也可用来做回归任务。
定义为 L 1 范式 \mathcal{L}_{1}\text{ 范式} L1 范式 的平均。 L 1 N ∑ i 1 N ∣ y i − y ^ i ∣ \mathcal{L}\frac1N\sum_{i1}^N|y_i-\hat{y}_i| LN1i1∑N∣yi−y^i∣ MAE和MSE都可用来衡量 y i y_i yi和 y ^ i \hat{y}_i y^i 的误差用以优化网络模型。
均方误差提供了更好的数学性质 均方误差是观测值与真实值之差的平方的平均值。由于平方操作是连续和可导的因此在实现梯度下降算法时均方误差的梯度偏导数可以很容易地计算出来。这一点对于优化算法来说非常重要因为梯度下降算法需要通过计算损失函数的梯度来更新模型参数。 平均绝对误差中当yi ˆyi时绝对值项无法求导 平均绝对误差是观测值与真实值之差的绝对值的平均值。绝对值函数在值为零的地方不可导这意味着当预测值ˆyi正好等于真实值yi时MAE的导数为零或不定义。这会给优化过程带来困难因为梯度下降依赖于损失函数的梯度来调整参数。 当yi和ˆyi的绝对差大于1时均方误差相对平均绝对误差来说误差值更大 这句话解释了均方误差和平均绝对误差在数值上的一个重要差异。当预测值与真实值的差距较大时平方操作会放大这种差异。因此如果(yi−ˆyi)的绝对值大于1那么(yi−ˆyi)²将会比|yi−ˆyi|大。 显然地当(yi−ˆyi)1时(yi−ˆyi)² |yi−ˆyi| 这是一个数学上的事实说明了为什么均方误差对于较大的预测误差给予更高的惩罚。对于任何大于1的实数aa²总是大于a。 综合以上几点我们可以得出以下理解
均方误差在数学上更易于处理特别是在使用梯度下降算法进行模型训练时。平均绝对误差在预测值恰好等于真实值时存在导数不可求的问题这可能会对优化过程产生不利影响。均方误差对较大的预测误差给予更高的权重这可能导致模型在处理异常值或大误差时更为敏感。 在实际应用中选择哪种损失函数取决于具体问题的需求以及我们对模型误差的容忍度。均方误差在回归问题中更为常见尤其是在解决连续值预测问题时而平均绝对误差则可能在某些情况下更为稳健。
优化
梯度下降和误差的反向传播
如果有了神经网络和损失函数那么训练神经网络的意义就是学习它的 θ \boldsymbol{\theta} θ使损失值 L \mathcal{L} L最小化。最暴力的方法是寻找一组 θ \boldsymbol{\theta} θ 使 ▽ θ L 0 \bigtriangledown_{\boldsymbol{\theta}}\mathcal{L}0 ▽θL0 找到损失值的最小值但这种方法很难实现因为深度神经网络的参数很多、非常复杂。所以一般采用 梯度下降Gradient Descent 它是通过逐步优化来一步一步找更好的参数来降低损失值的。
梯度下降的学习过程是从一组随机指定的参数开始参数通过 ∂ L ∂ θ \frac{\partial\mathcal{L}}{\partial\boldsymbol{\theta}} ∂θ∂L 被逐步优化。优化过程为 θ : θ − α ∂ L ∂ θ \boldsymbol{\theta}:\boldsymbol{\theta}-\alpha\frac{\partial\mathcal{L}}{\partial\boldsymbol{\theta}} θ:θ−α∂θ∂L α \alpha α 为学习率用以控制步长幅度。关键就是计算$\frac{\partial\mathcal{L}}{\partial\boldsymbol{\theta}} $ 。 反向传播back-propagation 是一种计算神经网络偏导数 ∂ L ∂ θ \frac{\partial\mathcal{L}}{\partial\boldsymbol{\theta}} ∂θ∂L 的方法
反向传播算法Back-Propagation是一种用于计算神经网络参数梯度的高效方法旨在优化网络的损失函数。该算法通过引入中间变量 δ l \delta_l δl即损失函数 L L L 对网络层输出 z l z_l zl 的偏导数 δ l ∂ L ∂ z l \delta_l \frac{\partial L}{\partial z_l} δl∂zl∂L来简化梯度计算的过程。 在网络结构中各层以序号 l l l 标识其中 l ∈ { 1 , 2 , … , L } l \in \{1, 2, \ldots, L\} l∈{1,2,…,L} L L L 代表输出层的序号。对于每个网络层定义输出 z l z_l zl、中间变量 δ l ∂ L ∂ z l \delta_l \frac{\partial L}{\partial z_l} δl∂zl∂L 以及激活输出 a l f ( z l ) a_l f(z_l) alf(zl)其中 f f f 表示激活函数。 以下是反向传播算法的详细步骤
输出层梯度计算 对于输出层 L L L首先计算中间变量 δ L \delta_L δL δ L ∂ L ∂ a L ⋅ ∂ a L ∂ z L ( a L − y ) ⊙ f ′ ( z L ) ( a L − y ) ⊙ a L ( 1 − a L ) \delta_L \frac{\partial L}{\partial a_L} \cdot \frac{\partial a_L}{\partial z_L} (a_L - y) \odot f(z_L) (a_L - y) \odot a_L(1 - a_L) δL∂aL∂L⋅∂zL∂aL(aL−y)⊙f′(zL)(aL−y)⊙aL(1−aL) 其中 ⊙ \odot ⊙ 表示元素逐乘。 隐藏层梯度传播 对于隐藏层 l L − 1 , L − 2 , … , 1 l L-1, L-2, \ldots, 1 lL−1,L−2,…,1利用链式法则和前一层传播回来的 δ \delta δ 值计算当前层的 δ l \delta_l δl δ l ∂ L ∂ z l ( ∂ z l 1 ∂ a l ) T δ l 1 ⊙ f ′ ( z l ) ( W l 1 ) T δ l 1 ⊙ a l ( 1 − a l ) \delta_l \frac{\partial L}{\partial z_l} \left(\frac{\partial z_{l1}}{\partial a_l}\right)^T \delta_{l1} \odot f(z_l) (W_{l1})^T \delta_{l1} \odot a_l(1 - a_l) δl∂zl∂L(∂al∂zl1)Tδl1⊙f′(zl)(Wl1)Tδl1⊙al(1−al) 参数梯度计算 在获得每层的 δ l \delta_l δl 后计算损失函数对权重 ∂ L ∂ W l \frac{\partial L}{\partial W_l} ∂Wl∂L 和偏置 ∂ L ∂ b l \frac{\partial L}{\partial b_l} ∂bl∂L 的偏导数 ∂ L ∂ W l δ l ⋅ ( a l − 1 ) T , ∂ L ∂ b l δ l \frac{\partial L}{\partial W_l} \delta_l \cdot (a_{l-1})^T, \quad \frac{\partial L}{\partial b_l} \delta_l ∂Wl∂Lδl⋅(al−1)T,∂bl∂Lδl 参数更新 使用梯度下降法更新网络参数。权重和偏置的更新公式分别为 W l : W l − α ∂ L ∂ W l , b l : b l − α ∂ L ∂ b l W_l : W_l - \alpha \frac{\partial L}{\partial W_l}, \quad b_l : b_l - \alpha \frac{\partial L}{\partial b_l} Wl:Wl−α∂Wl∂L,bl:bl−α∂bl∂L 其中 α \alpha α 是学习率。 局部最小值问题 在实际应用中梯度下降可能不会收敛到全局最小值而是局部最小值。然而由于深度神经网络强大的表示能力这些局部最小值通常足够接近全局最小值从而使得损失函数的值降至可接受的水平。
在深度学习中激活函数的选择对模型的训练效果有着重要的影响。以下是关于sigmoid激活函数和ReLU激活函数的一些讨论
Sigmoid激活函数的问题 当使用sigmoid激活函数时其导数为 ∂ a l ∂ z l a l ( 1 − a l ) \frac{\partial a_l}{\partial z_l} a_l(1 - a_l) ∂zl∂alal(1−al)。当 a l a_l al 接近于0或1时 ∂ a l ∂ z l \frac{\partial a_l}{\partial z_l} ∂zl∂al 会变得非常小。这导致在深层网络中反向传播时中间变量 δ l \delta_l δl 也会变得非常小从而出现梯度消失Vanishing Gradient问题。梯度消失问题会使靠近输入层的网络参数难以更新导致模型难以训练。数学上这可以表示为 ∂ a l ∂ z l a l ( 1 − a l ) 当 a l ≈ 0 或 a l ≈ 1 , ∂ a l ∂ z l 非常小 \frac{\partial a_l}{\partial z_l} a_l(1 - a_l) \quad \text{当} \quad a_l \approx 0 \quad \text{或} \quad a_l \approx 1, \quad \frac{\partial a_l}{\partial z_l} \quad \text{非常小} ∂zl∂alal(1−al)当al≈0或al≈1,∂zl∂al非常小 ReLU激活函数的优势 相比之下ReLU激活函数的导数 ∂ a l ∂ z l \frac{\partial a_l}{\partial z_l} ∂zl∂al 在 a l 0 a_l 0 al0 时恒为1从而避免了梯度消失问题。这也是当前深度学习模型在隐藏层中普遍使用ReLU而不是sigmoid的原因。数学上ReLU的导数可以表示为 ∂ a l ∂ z l { 1 if a l 0 0 otherwise \frac{\partial a_l}{\partial z_l} \begin{cases} 1 \text{if } a_l 0 \\ 0 \text{otherwise} \end{cases} ∂zl∂al{10if al0otherwise 随机梯度下降法SGD 在梯度下降中如果数据集的大小 N N N 很大计算损失函数 L L L 的开销可能会很高。以均方误差为例损失函数可以展开为 L 1 2 ∥ y − a L ∥ 2 1 2 ∑ i 1 N ( y i − a L , i ) 2 L \frac{1}{2} \left\| y - a_L \right\|^2 \frac{1}{2} \sum_{i1}^{N} \left( y_i - a_{L,i} \right)^2 L21∥y−aL∥221∑i1N(yi−aL,i)2实践中数据集往往很大这使得梯度下降因为需要计算整个数据集上的 L L L 而变得低效。为了解决这个问题随机梯度下降SGD被提出它只使用少量的数据样本来近似计算损失函数的梯度。SGD的计算可以表示为 ∇ θ L ≈ ∇ θ L ^ ( B ) 1 ∣ B ∣ ∑ i ∈ B ∇ θ L i ( θ ) \nabla_{\theta} L \approx \nabla_{\theta} \hat{L}(B) \frac{1}{|B|} \sum_{i \in B} \nabla_{\theta} L_i(\theta) ∇θL≈∇θL^(B)∣B∣1∑i∈B∇θLi(θ) 其中 B B B 是从数据集中随机抽取的一个小批量样本 ∣ B ∣ |B| ∣B∣ 是批量大小 L i L_i Li 是单个样本的损失函数。