吴恩达【深度学习工程师】学习笔记(八)

吴恩达【深度学习工程师】专项课程包含以下五门课程:

1、神经网络和深度学习;
2、改善深层神经网络:超参数调试、正则化以及优化;
3、结构化机器学习项目;
4、卷积神经网络;
5、序列模型。

今天介绍《改善深层神经网络:超参数调试、正则化以及优化》系列第三讲:超参数调试、Batch正则化和程序框架。

主要内容:

1、超参数;

2、正则化网络;

3、Softmax回归;

4、程序框架Tensorflow。

1、超参数

超参数(Hyperparameters)包括:

  • :学习因子

  • :动量梯度下降因子

  • :Adam算法参数

  • #layers:神经网络层数

  • #hidden units:各隐藏层神经元个数

  • learning rate decay:学习因子下降参数

  • mini-batch size:批量训练样本包含的样本个数

一般来讲,超参数的重要性顺序如下:最重要的超参数是学习因子;其次是动量梯度下降因子、各隐藏层神经元个数#hidden units和批量训练样本包含的样本个数mini-batch size;然后是神经网络层数#layers和学习因子下降参数learning rate decay;最后是Adam算法的三个参数,可设置为0.9,0.999和

选择超参数的方法是使用随机选择。例如随机选择25个点作为待调试的超参数,在经过随机采样之后,我们可能得到某些区域模型的表现比较好。为了得到更好的参数,我们继续对选定的区域进行由粗到细的采样。如下图:

吴恩达【深度学习工程师】学习笔记(八)

对于某些超参数可以进行尺度均匀采样的。例如对于超参数#layers和#hidden units,都是正整数,是可以进行均匀随机采样的,即超参数每次变化的尺度都是一致的(如每次变化为1,犹如一个刻度尺一样,刻度是均匀的)。

对于另外一些超参数可能需要非均匀随机采样。例如超参数,待调范围是[0.0001, 1]。如果使用均匀随机采样,那么有90%的采样点分布在[0.1, 1]之间,只有10%分布在[0.0001, 0.1]之间。这在实际应用中是不太好的,因为最佳的值可能主要分布在[0.0001, 0.1]之间,而[0.1, 1]范围内值效果并不好。因此我们更关注的是区间[0.0001, 0.1],应该在这个区间内细分更多刻度。

通常的做法是将linear scale转换为log scale,将均匀尺度转化为非均匀尺度,然后再在log scale下进行均匀采样。这样,[0.0001, 0.001],[0.001, 0.01],[0.01, 0.1],[0.1, 1]各个区间内随机采样的超参数个数基本一致,也就扩大了之前[0.0001, 0.1]区间内采样值个数。

吴恩达【深度学习工程师】学习笔记(八)

除了之外,动量梯度因子也是一样,在超参数调试的时候也需要进行非均匀采样。一般的取值范围在[0.9, 0.999]之间,那么的取值范围就在[0.001, 0.1]之间。那么直接对在[0.001, 0.1]区间内进行log变换即可。

这里解释下为什么也需要向那样做非均匀采样。假设从0.9000变化为0.9005,那么基本没有变化。但假设从0.9990变化为0.9995,那么前后差别1000。越接近1,指数加权平均的个数越多,变化越大。所以对接近1的区间,应该采集得更密集一些。

2、正则化网络

在训练神经网络时,标准化输入可以提高训练的速度。方法是对训练数据集进行归一化的操作,即将原始数据减去其均值

后,再除以其方差。对于神经网络,又该如何对各隐藏层的输入进行标准化处理呢?

在神经网络中,第层隐藏层的输入就是第层隐藏层的输出。对进行标准化处理,从原理上来说可以提高的训练速度。这种对各隐藏层的标准化处理就是Batch Normalization。值得注意的是,实际应用中,一般是对进行标准化处理而不是

Batch Normalization(简称BN)对第层隐藏层的输入做如下标准化处理,忽略上标

其中,m是单个mini-batch包含样本个数,是为了防止分母为零,可取值。这样就使得该隐藏层的所有输入均值为0,方差为1。

大部分情况下并不希望所有的均值都为0,方差都为1。通常需要对进行进一步处理:

其中,是可学习参数,跟W、b一样通过梯度下降等算法求得。和的作用是让的均值和方差为任意值。

这样,通过BN,对隐藏层的各个进行标准化处理,得到,替代

ps:输入的标准化处理和隐藏层的标准化处理是有不同的。输入的标准化处理使所有输入的均值为0,方差为1。而隐藏层的标准化处理是使各隐藏层输入的均值和方差为任意值。

对于L层神经网络,经过BN的作用,整体流程如下:

吴恩达【深度学习工程师】学习笔记(八)

事实上,BN经常使用在mini-batch上。

在测试的时候,一个样本求其均值和方差是没有意义的,一般使用指数加权平均的方法来预测测试过程单个样本的

指数加权平均的做法很简单,对于第层隐藏层,考虑所有mini-batch在该隐藏层下的,然后用指数加权平均的方式来预测得到当前单个样本的。这样就实现了对测试过程单个样本的均值和方差估计。最后,再利用训练过程得到的值计算出各层的值。

3、 Softmax回归

对于多分类问题,用C表示种类个数,神经网络中输出层就有C个神经元,即。其中,每个神经元的输出依次对应属于该类的概率,即。为了处理多分类问题,我们一般使用Softmax回归模型。Softmax回归模型输出层的**函数如下所示:

输出层每个神经元的输出对应属于该类的概率,满足:

所有的,即,维度为(C, 1)。

softmax 分类的损失函数。例如:C=4,某个样本的输出为:

值来看,,概率最大,而真实样本属于第2类,因此该预测结果不好。我们定义softmax 分类的损失函数为:

然而,由于只有当时,,其它情况下,。所以,上式中的可以简化为:

要让更小,就应该让越大越好。

所有m个样本的代价函数为:

其预测输出向量的维度为(4, m)。

softmax 分类的反向传播过程仍然使用梯度下降算法,其推导过程与二元分类有一点点不一样。因为只有输出层的**函数不一样,我们先推导

对于所有m个训练样本:


4、程序框架Tensorflow

TensorFlow是谷歌开源的机器学习框架,其的最大优点就是采用数据流图来进行数值运算。图中的节点表示数学操作,图中的边则表示在节点间相互联系的张量。

它灵活的架构让你可以在多种平台上展开计算不用关注平台细节。