前言
这一课主要讲述简单的超参搜索和batch normolize的使用方法及其作用,接着会介绍另外一种激活函数softmax。内容不多,如果笔者所言有错之初,还请各位读者海涵指正
一、超参搜索
1.1、搜索方式
超参搜索有网络所有和随机搜索
网格搜索是指在所有候选的参数选择中,通过循环遍历尝试每一种可能性,表现最好的参数就是最终的结果。
举个例子,加入中有两个超参数,每个超参数有 3 个待探索的值,对它们进行笛卡尔积后得到 9 个超参数组合,通过网格搜索使用每种组合来训练模型,并在验证集上挑选出最好的超参数。如图所示,这种方法往往根据不同种类列出表格,并在表格内循环遍历搜索,因此称为网格搜索。
网格搜索算法思路及实现方式都很简单,但经过笛卡尔积组合后会扩大搜索空间,并且在存在某种不重要的超参数的情况下,网格搜索会浪费大量的时间及空间做无用功,因此它只适用于超参数数量小的情况。
网络搜索简单来说就是排列组合所有可能的超参值,逐个逐个去试,找出最优的情况
随机搜索:随机选择超参的数值,对不同的数值训练出来的性能进行比较,选出优质的数值。一般我们会选粗略地找出一个区域是比较好的,然后在这个区域内详细的查找那个最优的超参值,也就是先粗选后精选
1.2、参数范围
参数的范围选择有几种方式:
- 线性尺度(网络):也就是比较普通的递增,这类参数比较均匀分布,比如隐藏单元数量,隐藏层数量等
- 对数尺度:如果超参的分布有数量级的差别,需要考虑使用对数来降低超参的范围,比如动量梯度下降的
值、学习率等
1.3、超参搜索思路
搜索超参的思路:
- 手动观察模型并调参,pandas方法
- 同时实验多个模型,对比不同的模型参数:caviar方法
二、batch归一化
batch归一化有利于我们学习出更好、更稳健的参数
2.1、步骤
- 计算平均值
- 计算方差
- Z值标准化
- 计算
其中
为超参,
相当于
,而
相当于
,
和
的维度也是
,也就是和对应层输出 Z 的维度一样
为什么我们要加入和
这2个参数呢?
如果我们将z直接归一化,那么z会在很小的区间范围内,比如[0, 1],这样的区间会使你使用sigmoid函数时,激活函数在线性区间,这样会降低模型的拟合程度,那么我们加入和
是为了能够更好的控制归一化后,也就是
的区间,即避免让数据聚堆。我们可以通过控制
和
来控制输入数据的分布,我们通过学习
和
后,可以将
控制在我们的学习效果最好的区间内
总结batch归一化的过程:
batch归一化通常和mini-batch一起使用
l在使用batch归一化后,参数 b 可以去掉,因为参数 b 可以被归纳进归一化参数中进行学习
加入batch归一化的训练步骤:
前向计算出
使用
计算
,在后向计算出
使用学习率更新参数
2.2 batch归一化理解:
训练集和测试集的X样本分布发生改变,但标签Y不变称为Covariate shift
在上图左边训练好模型,应用于上图右边的数据集,可能不会有很好的效果,因为发生了Covariate shift。对于这种情况,如果实际应用的样本与训练样本分布不同,即发生了covariate shift,则一般是要对模型重新进行训练的
视频中说:从第三层看来,输入数据发生了Covariate shift,这是为什么呢?
我们观察前面Covariate shift的定义,就知道是测试集和训练集的数据分布不同,但标签一样,说的抽象一点,就是数据X的分布不同,但映射到的输出Y是一样的,那么在第三层看来。假设我们在2轮迭代中输入了同一个,那么输入
都是一样。假设有参数
,这些参数在 2 轮迭代会变化,导致第三层的输入
在2轮的迭代中的数值不一样,但是我们的标签Y都是一样,所以发生了Covariate shift了
而batch normolize可以有效解决Covariate shift
为什么batch normolize可以优化Covariate shift呢?
- 第一层的输入数据通过BN,我们的数据集分布更加均匀,接着我们对每一层的输出进行BN,可以让每一层输入数据控制在一定的区间内,不会进行大幅度的"漂移"
- 这样做可以让对应层独立于其他层次的输入,降低前一层的影响,对应层的参数也就更加稳健,不会因Covariate shift而产生无法拟合的情况。
总结:batch归一化限制了 前面层的参数更新
影响 输入数据数值分布
的程度
拿上面黑猫和彩色猫的例子,通过BN,我们可以将图片的像素值控制在一个更加广泛的区间以内,而通过学习这个区间内的参数,让模型可以更加好的适应其他的数据。笔者感性的认识是我们假定有一种颜色x色(暂且理解为另一种颜色空间的表达),那么我们是将黑色跟彩色映射到这个x色上,然后听过学习这种颜色的像素值分布来改变参数。因为加入只学习黑色,那么像素值的区间会非常的小,因为黑色的像素值是0,如果我们能过将黑色像素值给扩展到更大的范围,那么我们对其他颜色的图片拟合程度就会更大一点。当然这是笔者的粗浅理解,如果有错误还请指正
BN的正则化效果:对于每一个mini-batch,BN只是计算该mini-batch的方差和均值,所以带有一定的噪声。在缩放z的过程中也会给隐藏单元带入一定的噪声,降低隐藏单元之间的依赖性,这样就带有轻微的正则化效果,防止过拟合
dropout可以通过增大mini-batch的大小来降低正则化效果
测试集是如何进行BN?
我们在进行测试的时候一次性进行多个数据的计算,比如我们的训练集有2048个数据,我们测试时是对每一个数据进行计算的。且对每一层我们都需要计算 和
,那么在计算测试集数据 的时候需要将每个数据的
和
进行一次平均,那么我们可以使用加权指数平均数来进行迭代,从而得到我们想要的平均数。
总结一下:在训练时, 和
都是在mini-batch上训练出来的,但在测试时,我们需要对每个样本进行逐一处理,这样对
和
的计算方式就和训练时不同,所以我们使用指数加权平均来计算测试集的
和
三、softmax
softmax是一种激活函数,可以将二分类模型推广到多分类模型
3.1、softmax计算方式
- 计算
- 计算临时变量 t
- 计算
其中 C 表示类的数量,视频中一共是有 4 个类,大写L代表的是最后一层的,、
、
的维度是一样的。
一般在网络的输出层我们会使用softmax激活函数,其输出的是某个类的概率
3.2、softmax后向传播
使用softmax后输出不再的一个,而是多个输出,那么此时我们需要使用另外一个损失函数,称之为交叉熵
因为对数logx的性质,当x小于1时是负数,再用上负号就变成了正数,当概率x越小的时候,损失越大。所以梯度下降需要减小损失就会把模型往概率搞的方向学习
在使用softmax后,我们需要对最后一层的 z 值导数进行求导,而这里我们直接给出公式,有需要的朋友可以在链接中找到推导方法,推导过程不难,各位读者可以一试
参考附录
吴恩达《优化深度神经网络》课程笔记:http://redstonewill.com/1101/
softmax函数以及相关求导过程:https://www.jianshu.com/p/ffa51250ba2e
batch归一化:https://blog.csdn.net/u010132497/article/details/79793059
Batch Normalization:https://www.cnblogs.com/cloud-ken/p/7751413.html