学习笔记-batch normalization

这是Deep learning 第二门课的第三周课程的学习笔记。

1. Hyperparameter tuning

针对深度学习,不推荐使用grid search来寻找最优的参数值。因为深度学习的计算量实在太大了,grid search方法太耗资源也太慢了。
对于深度学习的调参,吴老师的观点是:
-Try random values, do not use a grid;
-Coarse to fine
这里写图片描述

2. Batch normalization

在之前的学习中,我们了解到通过对输入特征的值进行标准化后有利于加速整个训练过程。那是否可以对隐藏层的节点也进行标准化呢?这样做会对训练过程有帮助吗?

怎样进行Batch normalization?
针对每个batch的每个隐藏层的每个节点,首先计算出该节点的 znorm ,然后用 z~=γznorm+β 来代替原来的 z 值。
γ β 均是需要调整的参数,当 γ=σ2+ε , β=μ 时, z~=z ,即相当于没有进行标准化。

这里写图片描述

Batch normalization所做的实际上是使每个节点的 z 值具有想要的固定的均值和方差(不仅仅限于0和1),我们可以通过调整 γ β 来实现。
这里写图片描述

这里写图片描述

Batch normalization 为什么会有效?

Batch Norm 限制了隐藏层每个节点的值的波动范围;它限制了由于前面几层节点由于参数的更新而使当前节点的输入值波动过大的问题;从而使每一层节点更加聚焦于本层的特征学习,减少受到前面层波动的影响。这样便能加速整个学习过程。

这里写图片描述

这里写图片描述

Batch Norm还有一个额外的效果,它增加了正则化过程。

这里写图片描述

由于每个隐藏层节点都受到的是当前mini-batch在该节点的有关均值和方差的缩放(每个mini-batch的缩放量不同),相当于对该节点的 z 值增加了背景噪音,效果类似于dropout,这使结果带有轻微的正则化效益。然而当mini-batch的值增大时,它所带来的正则化效益会相应减弱。

怎样利用Batch Norm训练的模型用于预测?
在模型训练时,我们进行Batch Norm操作用到了当前mini-batch在相应节点的 z 值的均值和方差,如果用该模型去预测一个样本,那怎样得到用于Batch Norm的均值和方差呢?
我们可以采用指数权重平均法(Exponential weight average)计算训练集所有mini-batch在该节点的 z 值的指数权重平均值作为该节点的均值,并获得方差,从而用该均值和方差用于新样本的标准化。

这里写图片描述

3. Multi-class classification

当需要建立一个多目标分类器时,我们就要用到Softmax Regression,与之前不同的是输出项有多个,对应多个分类目标。输出层的激活函数由Sigmoid变为Softmax。
这里写图片描述
即:
首先计算 z 值,然后计算 t=ez ;最后获得每个目标的激活值 ai=tini=0ti
输出层所有节点的激活值总和为1,每个激活值即为相应目标的预测概率。

理解 Softmax regression
Softmax regression实际上是将Logistic regression 泛化到适用于多目标分类任务。因此当目标类别为2时,应用Softmax的结果与Logistic 一致。
这里写图片描述

Softmax regression的损失函数
对于单个样本:

L(y^,y)=j=0nyjlogyj^

可以这样理解该损失函数:该损失函数能够使实际目标对应的节点的激活值最大化。
这里写图片描述

3. Tensorflow

利用Tensorflow运行程序一般都要经历如下步骤:
- 创建Tensors(变量);
- 创建Tensors之间的连接规则;
- 初始化所有建立的Tensors;
- 创建 Session;
- 运行Session。

Tensorflow里最重要的两个概念是Tensors和Operators,我们首先要建立Tensors,然后定义Operators将Tensors连接起来。
在Tensorlow里不用考虑自己去定义反向传播过程,因为整个框架会自动相应的反向传播规则。
这里写图片描述

:如无特殊说明,以上所有图片均截选自吴恩达在Coursera开设的神经网络系列课程的讲义。

猜你喜欢

转载自blog.csdn.net/maryyu8873/article/details/78633989