Andrew Ng's deeplearning Course2Week3 Hyperparameter tuning, Batch Normalization and Frameworks

来源:互联网 发布:python 遗传算法 编辑:程序博客网 时间:2024/06/05 18:57

一、超参数调试

1.超参数的选择次序


超参数的重要程度:1.α 2.β、hidden units、mini-batch size 3.layers、learning rate decay 4.β1、β2、ε(通常设为0.9,0.999,10^-8)

2.超参数的选取(随机取值,精确搜索)


假设我们的超参数1为学习率α,超参数2为ε,明显α的重要程度要大于ε,如果像上图左边的那样均匀选取,那可能只有25个中只有5个合适的结果,但是如果随机选取,那么可能就会有25个不同的结果。


在上图中,我们可能会发现某几个点效果比较不错,那么我们可以在这几个点附近精确搜索。

3.为超参数的选择合适的范围


在上面我们说过了随机取值,但那个随机取值并不是在一段范围随机均匀取值,就拿学习率α举例,它的范围可能如上图所示,在0.0001~1之间,但0.0001~0.001可能会相对后面的比较重要,如果均匀取值,那可能占比就没那么大。我们需要选择合适的标尺:如对数标尺。分为0.0001~0.001~0.01~0.1~1。所以α=10^r,r∈[-4,0]

4.建议和技巧

(1)不同研究领域可能会相通,去其他研究领域寻找灵感

(2)每隔几个月重新测试或评估超参数

(3)性能不够时,一次照顾一个模型,类似于熊猫和人只照顾一个baby

         性能足够时,同时运行多钟模型,类似于鱼一下子产几万个卵


二、batch归一化


正如之前在逻辑回归时讲到的归一化输入特征将会加快梯度下降的过程。类似的,batch归一化将每一个隐层归一化,这里有争议的是归一化a[L]还是Z[L],Andrew Ng推荐的是Z[L]。

1.batch归一化的实现


2.如何将batch归一化应用到神经网络


如上图所示,就是在每层隐藏层的计算Z[L]和a[L]中加入计算batch归一化。

3.batch归一化通常与mini-batch一起使用


步骤与之前类似,需要注意的是,在这里的Z[L]计算公式中,可以去除b[L],因为最终都会差不多抵消掉,影响比较小。

4.总结:在梯度下降中的实现


5.测试时的batch归一化


在训练时,我们的μ和σ²是在一个mini-batch中对这个mini-batch中的所有样本进行计算所得,而在测试时,我们需要对每一个样本逐一处理,而一个样本的均值和方差并没有什么意义,因此我们通过将所有的mini-batch 的x{1},x{2},x{3}……指数加权平均来获取相应mini-batch的μ和σ²。

三、多种分类

1.Softmax regression


在如上图所示,我们要识别的不是像之前识别的是否是猫的二元分类时,我们就可以使用Softmax回归。

2.Softmax回归的实现

如下图:


如上图所示,假设是一个三元的分类,那么输入是一个(4,1)维的向量,激活函数有3步,1:t = e^(z[L]) 2:计算tj从1-n求和  3:a[L] = t / 第二步计算的结果

最后得出一个(4,1)的结果,每一行代表的就是一个概率(如0代表都不是的概率,1代表是猫的概率,2代表是狗的概率,3代表是鸡的概率)

3.softmax的损失函数


损失函数如上图红框左边所示,为什么要用这个形式呢。因为此例中,y1=y3=y4=0,最后损失函数就化简成-logy2帽。我们想要损失函数最小,那么就要使y2帽最大,在此例中,也就是使得为猫的概率最大化,符合我们的期待。这是单个样本的损失函数。整个样本集的损失函数形式如上图红框所示。

4.softmax的反向传播

如下图所示:


四、深度学习框架


有如上图所示的框架,我们选择开源的深度学习框架时需要注意3点:

1.易于编程

2.运行速度

3.是否真的会一直开源(因为有些公司发布时开源,后面的某个阶段就不开源了)


阅读全文
0 0
原创粉丝点击