Hyperparameter tuning/Batch Normalization(超参数调试、Batch正则化及优化)---deeplearning.ai---笔记(18)

版权声明:博主是初学者,博文可能会有错误,望批评指正!转载请注明本博客地址,谢谢! https://blog.csdn.net/LieQueov/article/details/80143359

一、思维导图


二、重要的超参数

学习速率alpha>mini-batchsize/hidden units>layers/learning rate decay

Adam算法中的参数几乎不调试。调试的方法采取从粗糙到精细的方法,通过随机进行超参数的选择,观察这些超参数从而找到规律。估计超参数的大致范围,然后进行精细化调整。

在进行随机生成随机数的时,不采用线性生成的方式。比如:如果你要搜索0.0001到1的范围内的随机数,为了保证每个尺度下,拥有相对的搜索机会。比如从[0.0001,0.001],[0.001,0.01],[0.01,0.1]和[0.1,1]每个区间拥有相同的搜索机会,那么可以采取以下的随机数生成方式:

$$\begin{array}{l}r =  - 4*np.random.rand()\\a = {10^r}\end{array}$$

可以看出r的取值是在[-4,0]的范围内,那么的a的取值范围为[0.0001,1],因为再[-4,-3],[-3,-2],[-2,-1],[-1,0]的各个区间的取值概率是相同的,经过这样的计算就达到了我们的目的。

三、Batch归一化

对隐层进行归一化,归一化的目的就是使得均值和方差标准化,下式为使得均值为0,方差为1的归一化的公式:

$$\begin{array}{l}\mu  = \frac{1}{m}\sum\limits_i {{x^{(i)}}} \\x = x - \mu \\{\sigma ^2} = \frac{1}{m}\sum\limits_i {{x^{(i)2}}} \\x = x/{\sigma ^2}\end{array}$$

第三个公式中的平方为元素之间的乘积(也就是点积)。

进行隐层归一化的时,一般对Z进行归一化,而不是对A进行归一化。归一化的公式为:

$$\begin{array}{l}\mu  = \frac{1}{m}\sum\limits_i {{z^{(i)}}} \\{\sigma ^2} = \frac{1}{m}\sum\limits_i {({z^{(i)}} - } \mu {)^2}\\z_{norm}^{(i)} = \frac{{{z^{(i)}} - \mu }}{{\sqrt {{\sigma ^2} + \varepsilon } }}\\{\widetilde z^{(i)}} = \gamma z_{norm}^{(i)} + \beta \end{array}$$

gamma和bata为超参数,eplinson为很小值以防除数为0. batch归一化可以采用tensorflow的函数实现。

在进行Batch归一化时,每一层的z的计算为:$${z^{[l]}} = {w^{[l]}}{a^{[l - 1]}}$$,没有b的参与,因为就算b参数了,再归一化时,也会通过减去均值的方式减去。那么以归一化中的beta参数代替了b参数。

batch归一化有效的原因是将数据统一到了同一分布,使得神经网络能够更好的泛化。并且使得每一个隐层的参数相对独立,便于调参。


猜你喜欢

转载自blog.csdn.net/LieQueov/article/details/80143359