吴恩达:深度学习的实用层面调试

超参数调试

一般而言,我们分为几个主要的步骤进行超参数的调试

1.选择合适的范围和尺度

例如对于神经网络层数L,可以取值为2-6,对于学习率衰减系数$\alpha$,取值为0.9-0.9999。

确定了范围后,选定合适的尺度,例如L,可以在2-6之间均匀取值,2/3/4/5/6,而$\alpha$不适合均匀取值,应该在$1-\alpha$的对数范围内取值,0.9-0.99/0.99-0.999/0.999-0.9999.

2.确定优先调试的超参数

例如有以下超参数:

  • $\alpha$学习率:0
  • $\beta$滑动平均系数:1
  • $\beta_1,\beta_2,\epsilon$等Adam算法系数
  • 神经网络层数:2
  • 神经网络节点数:1
  • 学习率衰减系数:2
  • mini-batch大小:1

可以按照后面写的数字从小到大重要性递减进行调试

3.确认多种参数之间的组合方式

例如我们有两种参数同时进行调试,尽量不要均匀取值,因为你不知道哪个参数比较重要,采取随机取值,可以在任意一个参数上取得更多的测试效果。

4.选择正确的实验方法

  • 如果有大量计算资源,优先同时实验多种超参数,多个机器一起跑
  • 如果计算资源优先,可以在一个模型训练期间不断改变超参数,观察训练效果。

两者中优先使用第一种

批归一化

概念

所谓的批归一化即指的是在每一层神经网络的输出在作为下层的输入之前,要被归一化,这样,神经网络的步骤变成:
$$
算出该层的输出z^1,z^2……z^m\\
\mu = \frac 1m \sum_i{z^i}\\
\sigma=\frac 1m\sum_i{(z^i-\mu)^2}\\
z^i_{normal}=\frac {z^i-\mu}{\sqrt{\sigma^2+\epsilon}}\\
$$
其中,$\epsilon$是为了防止出现数值溢出等现象。

归一化的步骤会使得$z=wa+b$中的b取任何值都失效,所以在之后还要进行:
$$
z_{after}^i=\gamma z_{normal}^i+\beta
$$
所以在批归一化算法中共有三种更新的参数:
$$
w,\gamma,\beta需要更新,b被舍弃
$$

优点

批归一化的好处很多,主要有这几点:

  • 提高训练速度:你可以选择比较大的初始学习率,让你的训练速度飙涨。以前还需要慢慢调整学习率,甚至在网络训练到一半的时候,还需要想着学习率进一步调小的比例选择多少比较合适,现在我们可以采用初始很大的学习率,然后学习率的衰减速度也很大,因为这个算法收敛很快。当然这个算法即使你选择了较小的学习率,也比以前的收敛速度快,因为它具有快速训练收敛的特性;
  • 提高了泛化能力,降低了神经元之间的依赖:你再也不用去理会过拟合中drop out、L2正则项参数的选择问题,采用BN算法后,因为此项操作就类似于dropout,你可以移除这两项了参数,或者可以选择更小的L2正则约束参数了,因为BN具有提高网络泛化能力的特性;

缘由

为什么批归一化有这些优点呢?可以从两方面解释:

  • 限制范围:相当于将参数的范围限制到了【0,1】之间,使得参数比较稳定,在做迁移学习的时候可以快速适应新的样本。
  • 添加噪声:在每一层的输出之后进行归一化,相当于添加了一些噪声,提高了模型的鲁棒性,类似于dropout

使用

在训练过程中,只需要添加一个归一化层即可

在测试过程中,因为一个一个样本进行测试,无法计算$\mu和\sigma$,那么可以使用指数滑动平均法进行处理对两个参数即可

Softmax函数

多分类神经网络最后的输出是一个向量,例如$[4,23,1.2,-4]$,可以即为$[y_1,y_2,y_3……y_n]$,有两种方法判别最终类别:

  • hardmax:即取$y_i$中最大的为1,其余为0,化为[0,0,1,0,0….]
  • softmax:$y_i$中越大的有越大概率取到,并且概率总和为1,公式为:

$$
P_{y_i}=\frac {e^{y_i}}{\sum_i{e^{y_i}}}
$$

这样做还有一个好处:


本文结束啦感谢您的阅读
生活不易,求打赏
0%