目录
1、归一化网络的激活函数(Normalizing activations in a
2、Batch归一化(Batch Normalization)
4、训练一个 Softmax 分类器(Training a Softmax classifier)
1、归一化网络的激活函数(Normalizing activations in a
- 规范化,方法如下,减去均值再除以标准偏差,为了使数值稳定, 通常将𝜀作为分母,以防𝜎 = 0的情况
- (任意一个隐藏层中的第i个样本)已把这些𝑧值标准化,化为含平均值 0 和标准单位方差,所以𝑧的每一个分量都含有平均值 0 和方差 1,但不想让隐藏单元总是含有平均值 0 和方差 1,也许隐藏单元有了不同的分布会有意义,所以所要做的就是计算,称之为𝑧̃(𝑖),𝑧̃(𝑖) = 𝛾𝑧norm(𝑖) +𝛽,这里𝛾和𝛽是你模型的学习参数,所以我们使用梯度下降或一些其它类似梯度下降的算法,比如 Momentum 或者 Nesterov,Adam,你会更新𝛾和𝛽,正如更新神经网络的权重一样
- 请注意𝛾和𝛽的作用是,你可以随意设置𝑧̃(𝑖)的平均值,事实上,如果𝛾 = √𝜎^2 + 𝜀,如果
- 𝜇,那么𝛾𝑧norm(𝑖) + 𝛽的作用在于,它会精确转化这个方程,如果这些成立(𝛾 = √𝜎^2 + 𝜀, 𝛽 =𝜇),那么
-
通过对 𝛾 和 𝛽 合理设定,规范化过程,即这四个等式,从根本来说,只是计算恒等函数, 通过赋予𝛾 和𝛽其它值,可以使你构造含其它平均值和方差的隐藏单元值
2、Batch归一化(Batch Normalization)
- 是一种常用的深度学习模型正则化技术,用于提高神经网络的训练速度和稳定性。它通过对每个mini-batch中的输入进行归一化,从而减少内部协变量偏移,使得网络的学习更加稳
- 上图中的神经网络,每个单元负责计算两件事。第一,它先计算𝑧,然后应用其到激活函数中再计算𝑎,每个圆圈代表着两步的计算过程。同样的,对于下一层而言,那就是𝑧1[2]和𝑎1
[2]等。所以如果没有应用 Batch 归一化,会把输入𝑋拟合到第一隐藏层,然后首先计算𝑧 [1],这是由𝑤[1]和𝑏 [1]两个参数控制的。接着,通常而言,会把𝑧 [1]拟合到激活函数以计算𝑎 [1]
-
但 Batch 归一化的做法是将𝑧 [1] 值进行 Batch 归一化,简称 BN,此过程将由𝛽 [1]和𝛾 [1]两参数控制,这一操作会给一个新 的规范化的𝑧 [1]值(𝑧̃ [1]),然后将其输入激活函数中得到𝑎[1],即𝑎 [1] = 𝑔 [1] (𝑧̃ [𝑙] )
-
在第一层进行了计算,此时 Batch 归一化发生在 𝑧 的计算和 𝑎 之间,接下来, 需要应用𝑎 [1] 值来计算 𝑧 [2] ,此过程是由 𝑤 [2] 和 𝑏 [2] 控制的。与在第一层所做的类似,会将𝑧 [2] 进行 Batch 归一化,现在简称 BN ,这是由下一层的 Batch 归一化参数所管制的, 即𝛽 [2] 和 𝛾 [2] ,现在你得到 𝑧̃ [2] ,再通过激活函数计算出 𝑎 [2] 等等
-
Batch 归一化是怎么操作的,计算均值和方差,减去均值,再除以方差,如果它们使用的是深度学习编程框架,通常你不必自己把 Batch 归一 化步骤应用于 Batch 归一化层。因此,探究框架,可写成一行代码,比如说,在 TensorFlow 架中,你可以用这个函数(tf.nn.batch_normalization )来实现 Batch 归一化
- 实践中,Batch 归一化通常和训练集的 mini-batch 一起使用。应用 Batch 归一化的方
式就是,用第一个 mini-batch ( 𝑋 {1} ),然后 计算𝑧 [1],应用参数 𝑤 [1] 和 𝑏 [1] ,使用这个 mini-batch ( 𝑋 {1} )。接着,继续第二个 mini-batch(𝑋 {2} ),接着 Batch 归一化会减去均值,除以标准差,由𝛽 [1]和𝛾 [1]重新缩放,这样就得到了𝑧̃[1]
-
让我们总结一下关于如何用 Batch 归一化来应用梯度下降法,假设你在使用 mini-batch梯度下降法,你运行 𝑡 = 1 到 batch 数量的 for 循环,你会在 mini-batch 𝑋 {𝑡} 上应用正向 prop , 每个隐藏层都应用正向 prop ,用 Batch 归一化代替 𝑧 [𝑙]为𝑧̃[𝑙]。接下来,它确保在这个 mini- batch 中, 𝑧 值有归一化的均值和方差,归一化均值和方差后是𝑧̃[𝑙],然后,你用反向 prop 计算𝑑𝑤 [𝑙] 和 𝑑𝑏 [𝑙] ,及所有 l 层所有的参数, 𝑑𝛽 [𝑙] 和 𝑑𝛾 [𝑙] 。尽管严格来说,因为你要去掉 𝑏 ,这 部分其实已经去掉了。最后,你更新这些参数:𝑤 [𝑙] = 𝑤 [𝑙] − αd𝑤 [𝑙] ,和以前一样, 𝛽 [𝑙] = 𝛽 [𝑙] − 𝛼𝑑𝛽 [𝑙] ,对于 𝛾 也是如此 𝛾 [𝑙] = 𝛾 [𝑙] − 𝛼𝑑𝛾 [𝑙] 。如果你已将梯度计算如下,你就可以使用梯度下降法了,这就是我写到这里的,但也适用于有 Momentum 、 RMSprop 、 Adam 的梯度下降法。与其使用梯度下降法更新 mini-batch , 你可以使用这些其它算法来更新,我们在之前几个星期中的视频中讨论过的,也可以应用其 它的一些优化算法来更新由 Batch 归一化添加到算法中的𝛽 和𝛾 参数。
- 具体实现步骤如下:
(1)、对于每个mini-batch的输入,计算其均值和方差
(2)、对每个输入进行归一化操作,即将每个输入减去均值,再除以方差
(3)、对归一化后的输入进行线性变换,通过缩放因子和位移因子进行调整。这两个参数可通过训练得到
(4)、将调整后的输入作为该mini-batch的输出
- Batch归一化的优点有:
(1)、加速收敛:通过对输入进行归一化,可以使得每个层的输入分布更加稳定,从而减少训练过程中的梯度爆炸或梯度消失的问题,加速模型的收敛速度
(2)、改善梯度传播:归一化可以使得每个层的输入都在相对较小的范围内,避免了梯度传播过程中的不稳定性
(3)、增加模型的泛化能力:Batch归一化具有一定的正则化效果,可以减少模型的过拟合
(4)、提高网络的表达能力:通过归一化操作,可以使得网络更加适应各种输入分布,提高网络表达能力
- 需要注意的是,Batch归一化在训练和预测阶段有所不同。在训练阶段,对于每个mini-batch进行归一化;在预测阶段,使用训练过程中得到的均值和方差对输入数据进行归一化
3、softmax回归
- Softmax 回归,在试图识别某一分类时做出预测,或者说是多种分类中的一个,不只是识别两个分类
-
𝑧 [𝑙] 这是最后一层的 𝑧 变量,记住这是大写𝐿 层,和往常一样,计算方法是 𝑧 [𝑙] = 𝑊 [𝑙] 𝑎 [𝐿−1] + 𝑏 [𝑙] ,算出了 𝑧 之后, 你需要应用 Softmax 激活函数,这个激活函数对于 Softmax 层而言有些不同,它的作用是这 样的。首先,我们要计算一个临时变量,我们把它叫做 t ,它等于 𝑒^ 𝑧 [𝑙] ,这适用于每个元素, 而这里的𝑧 [𝑙] ,在我们的例子中, 𝑧 [𝑙] 是 4×1 的,四维向量 𝑡 = 𝑒^ 𝑧 [𝑙] ,这是对所有元素求幂, 𝑡 也是一个 4×1 维向量,然后输出的 𝑎 [𝑙] ,基本上就是向量 𝑡 ,但是会归一化,使和为 1。因此
- 例如这里的第一个节点,它会输出𝑒5/176.3 =0.842,这样说来,对于这张图片,如果这是
你得到的 𝑧 值 ([ 5 − 2 1 3 ]列向量的转置),它是类 0 的概率就是 84.2%。下一个节点输出 𝑒^2 /176.3 = 0.042,也就是 4.2% 的几率。下一个是 𝑒^−1/176.3 = 0.002。最后一个是 𝑒^3/176.3 = 0.114,也就是 11.4%的概率属于类 3, 也就是小鸡组,对吧?这就是它属于类 0,类 1,类 2,类 3 的可能性
-
神经网络的输出𝑎 [𝑙],也就是𝑦^,是一个 4×1 维向量,这个 4×1 向量的元素就是我们算出 来的这四个数字( [ 0.842 0.042 0.002 0.114]列向量的转置),所以这种算法通过向量𝑧 [𝑙] 计算出总和为 1 的四个概率。
-
如果我们总结一下从𝑧 [𝑙] 到 𝑎 [𝑙] 的计算步骤,整个计算过程,从计算幂到得出临时变量𝑡,再归一化,我们可以将此概括为一个 Softmax 激活函数。设𝑎 [𝑙] = 𝑔 [𝑙] (𝑧 [𝑙] ),这一激活函数的与众不同之处在于,这个激活函数𝑔 需要输入一个 4×1维向量,然后输出一个 4×1 维向量。之前,我们的激活函数都是接受单行数值输入,例如 Sigmoid 和 ReLu 激活函数,输入一个实数,输出一个实数。 Softmax 激活函数的特殊之处在于,因为需要将所有可能的输出归一化,就需要输入一个向量,最后输出一个向量
- 在神经网络中,Softmax层或者Softmax激活函数具有以下作用:
(1)、多分类问题:Softmax层在多分类问题中起到了关键作用。它将神经网络输出的原始分数(也称为logits)转化为概率分布,使得每个类别的概率值都在0到1之间,并且所有类别的概率值之和为1。这样,可以根据概率最大的类别来进行预测
(2)、梯度稳定性:softmax函数具有平滑且可导的特性,使得在反向传播中计算梯度更为稳定。这是由于softmax的输出使用了指数函数,使得梯度变化相对较小,不会出现梯度爆炸的情况
(3)、增强模型泛化能力:Softmax函数在模型的输出中引入了一定的非线性,有助于提高模型的拟合能力和泛化能力。它可以将模型的输出映射到[0,1]之间的概率分布,使得模型更能够适应复杂的数据分布
4、训练一个 Softmax 分类器(Training a Softmax classifier)
-
有了这个,你就可以计算 𝑑𝑧 [𝑙] ,然后开始反向传播的过程,计算整个神经网络中所需要的所有导数
- 编程框架自动实现反向传播中的导数计算