超参数调试,正则化和优化

参数调试技巧

神经网络涉及了许多不同的超参数,这些参数包括神经网络层数,学习率和adam优化算法参数等,一些系统性的参数调试技巧如下所示:

  • 网格取值
    在传统的机器学习领域,假设有两个超参数,称之为超参1,超参2,常见的做法是在网格中取样,假设是5×5的网格,可以尝试所有的25个点,然后选择哪种效果更好,当参数数量较少时,这种方法较为实用。


  • 随机取值
    在深度学习领域,常见的做法是对随机选择法,即选择同等数量的点,然后用这些随机取样的点试验超参数的效果,之所以这样做的原因是因为在深度学习领域,很难知道哪些参数对模型的影响更重要。例如学习率\alpha比参数\epsilon对模型的影响更大。随机取值比网格取值探究了更多的可能。

调试超参数时,另一个技巧就是遵循由粗到细的原则,如下图所示,假设一个二维参数中,可能效果最好的那个参数点,附近的其他点的效果也很好,可以放大这块区域,然后在这些区域尝试更多的取值。比较这些取值的效果。如下图所示:

为超参数选择合适的范围

在超参数的调试范围中,随机取值会提升参数选择的效率,但是随机取值并不是均匀分布的随机取值,通常会根据参数的分布选择合适的范围。

假设,需要选择的参数是神经网络的层数L,这些参数的分布可能是均匀的,比如2,3,4等,但是,随机均匀的分布对一些超参数的选择是不合理的。

以超参数学习率\alpha为例,假设参数的取值分布范围是(0.0001,1),如果是随机均匀分布,则90%的数据都会分布在(0.1,1)之间,参数的选择过程,可能会浪费大量的时间和资源。对于这种情况,一种有效的解决方案是采用对数坐标,在对数坐标上取值,这时候随机值的分布将会从(10^{-4},10^{0})变成(-4,0),在对数轴上实现了随机均匀的取值。用python的实现如下:

r  = -4*np.random.rand()  # 取值范围是(-4,0)
learning_rate = 10^r

另一个超参数是指数加权平均法中用到的参数\beta,一般认为该参数的取值范围是(0.9,0.999),对于这样的分布,由于公式\frac{1}{1-\beta}的存在,当\beta的取值接近1时,会对细微的变化及其敏感,如\beta \in (0.9,0.9005)之间时,可能影响不大,但是当取值从范围在(0.995,0.999)之间时,会对结果有显著的影响。一种有效的办法是将其转化为从(1-\beta)的分布,此时,随机取值分布将会变成(0.001,0.1),在通过对数坐标将其转化为(-3,-1)以便给得到随机均匀分布的取值。

归一化网络的激活函数

深度学习领域中,最重要的一个思想是归一化思想,之前的学习中,经常将数据集的输入特征X归一化,这样的能够使得神经网络对超参数的选择更加稳定,也能够使得超参数的调节范围更加庞大,工作效果也会更好。除了对输入特征X使用归一化之外,对神经网络的每一个隐藏层总的隐藏值z^{[l](i)}也可以使用归一化,具体的工作如下所示:

  • 求取每一层网络中隐藏值的均值:
    \mu = \frac{1}{m}\sum_{i=1}^{m} z^{(i)}

  • 求取方差
    \sigma^2 = \frac{1}{m} \sum_{i=1}^{m}(z^{(i)} - \mu)^2

  • 归一化
    z^{(i)}_{norm} = \frac{z^{(i)}-\mu}{\sqrt{(\sigma^2+\epsilon)}}
    其中,分母上加上\epsilon的原因是为了防止分母变为0,一般取\epsilon = 10^{-8}

实现以上过程之后,隐藏层的输入值其均值就会变为0,方差变为1,但是,也许,隐藏单元不同的分布才会有意义,可以通过\gamma参数和\beta参数加以调节,具体的实现公式如下所示:

\widetilde{z}^{(i)} = \gamma z_{norm}^{(i)} + \beta

假如令\gamma = \sqrt{\sigma^2 + \epsilon},\beta = \mu,则有\widetilde{z}^{(i)} = z^{(i)}

在使用梯度下降算法或者其他优化算法时,可以更新参数\gamma和参数\beta

batch归一化的作用是不仅可以归一化输入特征X,同样适用于神经网络中的深度隐藏层。通过归一化更加有助于神经网络的学习,与输入特征归一化相比,隐藏层的归一化可以通过参数实现可控归一化,可以根据实际应用,确定隐藏层的均值和方差。

将batch归一化拟合进神经网络

实现了隐藏层的batch归一化之后,需要将其拟合进神经网络中,假设有一个神经网络的结构如下图所示:


实现这个过程可以分为以下步骤:

  • 归一化输入特征X并计算隐藏层的值z^{[1]} = w^{[1]}x +b
  • 归一化隐藏层中的z^{[1]},并根据激活函数a^{[1]} = g(z^{[1]})计算激活函数的输出。
  • 根据z^{[2]} =w^{[2]}a^{[1]} +b^{[2]}计算z^{[2]}并归一化z^{[2]}
  • 计算输出a^{[3]} = g(z^{[2]})

注意: 使用batch归一化之后,此时,神经网络的参数将会变成w^{[l]},b^{[l]}和归一化参数\gamma,\beta

mini-batches 中的归一化

在实践中,归一化通常和训练集的mini-batch一起使用。对于每一个隐藏层,其使用方式如下:

  • 使用mini-batch(X^{\{ i\}}),根据参数w^{[l]},b^{[l]}计算得到z^{[l]}.
  • 使用归一化减去均值,除以标准差,再用\beta^{[1]},\gamma^{[l]}经过重新缩放,得到\widetilde{z}^{[l]}.

注意:*每层的参数都是w^{[l]}和b^{[l]},还有\beta^{[l]}\gamma^{[l]},但是在归一化的过程中,无论b^{[l]}的值为多少,都是要被减去的,所以在归一化中,可以消除这个参数,或者将b^{[l]}设置为0.此参数的作用会由 \beta^{[l]} 代替,影响转移或者偏置的条件。

综上,使用归一化之后,梯度下降的更新过程的伪代码表示如下所示:

for t in  mini-batches:
  在 mini-batch{t}上应用前向传播
     在每一个隐藏层中应用归一化,将z转化为z_norm
  使用反向传播更新参数的值,更新公式如下所示:
  wl = wl - learning_rate*dwl
  beta_l = beta_l - learning_rate*dbeta_l
  gamma_l = gammal - learning_rate*dgamma_l

Batch归一化奏效的原因

关于batch归一化所起的作用由如下解释

  • 通过归一化输入特征值x,使其均值为0,方差为1,可以加速学习。
  • batch归一化有效的第二个原因是因为能够使权重比拟的网络更滞后或者能够使网络更深层的权重更能经受得住变化,具体解释如下:

当数据分布改变(Covariate shift),如果这些数据已经学习了xy的映射,x的分布发生了改变,此时需要重新训练学习算法。

对于一个深度神经网络而言,从隐藏层的角度而言,能够利用前层中取得的值和和获得的参数,能够使的输出值\hat{y}尽可能的接近真实值y.

以下图中的神经网络结构为例,这个网络通过学习,参数w^{[l]},b^{[l]}不断发生改变,隐藏值的输入a^{[2]}也会发生改变,就以第三层隐藏层的角度而言,通过一层层的学习,这些隐藏单元的值不断的发生改变,于是就有了”Covariate shift“的问题。

batch归一化的作用就在于能够确保隐藏层的值z^{[l]}发生改变时,其均值和方差不会发生变化,也就是限制了在前层的参数更新所引起的数值分布改变的影响。batch归一化减少了输入值改变的影响,当输入值发生改变时,能够迫使后层适应的程度减小了,也就是削弱了前层参数与后层参数作用之间的联系,使得网络每一层的学习更加独立,有助于加速整个网络的学习。

除此之外,由于mini-batch的作用,归一化过程所求得的方差和均值只是当前样本大小的,与整体样本相比,会存在一些噪音,会带来轻微的正则化的效果,迫使后部单元不过分依赖任何一个隐藏单元,类似于dropout。对此,当dropout和mini-batch一起使用是,较大的mini-batch可以减少正则化的效果。

测试时的 batch归一化

batch归一化会将数据以mini-batch的形式逐一处理,但是,在测试时,可能需要对每一个样本逐一处理,此时归一化中的均值\mu和方差\sigma^2对于单个样本没有意义,此时需要单独估算\mu\sigma^2.

可以采用指数加权平均的方法估计\mu\sigma^2,这个指数加权平均的过程涵盖了所有的mini-batch,具体的实现方式如下所示:

  • 计算神经网络每一个隐藏层中每一个mini-batch的均值\mu^{\{ t\}[l]}和方差\sigma^{2\{ t\}[l]}.

  • 利用指数加权平均的方法计算每一个隐藏层中的均值和方差。

softmax回归

之前学习的逻辑回归都是进行二元分类的,这种分类标准的输出是0和1,但是,当需要多元分类时,可以使用softmax激活函数来实现,具体如下所示:

在实现多元分类时,用C表示需要类别数,假设有4个类别,则可以用[0,1,2,3]表示,表示在输入X的情况下,分别输出[0,1,2,3,4]这四种类别的概率,并且,这四种类别的概率相加应该等于1.

就以神经网络而言,隐藏值的计算方法如下公式(1)所示:
z^{[l]} = w^{[l]}a^{[l-1]} + b^{[l]} \tag{1}

在计算softmax激活函数之前,需要计算一个临时变量,具体如公式(2)所示,其中z^{[l]}是4×1的,所以临时变量t也是4×1的向量。
t = e^{z^{[l]}} \tag{2}

根据以上求得的临时变量,计算输出a^{[l]},如下公式(3)所示:
a^{[l]} = \frac{t}{\sum_{i=1}^C t_i} \tag{3}

对于a^{[l]}这个向量具体的某个值的计算,如下公式(4)所示:
a_i^{[l]} = \frac{t_i}{\sum_{i=1}^C t_i} \tag{4}

以一个实际例子为例,假设向量z^{[l]} = \left[ \begin{matrix} 5 \\ 2 \\-1 \\3\end{matrix}\right],根据公式(1)计算,得到t = \left[ \begin{matrix} e^5 \\ e^2 \\e^{-1} \\e^3\end{matrix}\right] = \left[ \begin{matrix} 148.1 \\ 7.4 \\0.4 \\20.1\end{matrix}\right] .

在根据公式(3)计算可以得到每个节点输出概率的向量,如下所示:
a^{[l]} = \left[ \begin{matrix} 148.1/(148.1+7.4+0.4+20.1) \\ 7.4 /(148.1+7.4+0.4+20.1)\\0.4/(148.1+7.4+0.4+20.1) \\20.1 /(148.1+7.4+0.4+20.1)\end{matrix}\right] = \left[ \begin{matrix} 0.842 \\ 0.042 \\0.002 \\0.114\end{matrix}\right]

通过以上计算,得到了每一个类别的概率。

训练一个softmax分类器

将softmax分类器运用到神经网络输出层时,损失函数一般如公式(5)所示。
L(y,\hat{y}) = -\sum_{j=1}^Cy_jlog\hat{y_j} \tag{5}

就以上述示例而言,输出y的向量将会是[1,0,0,0]^T,我们希望损失函数尽可能小,此时y_2 = y_3 = y_4 = 0,损失函数的输出将会退化为L(y,\hat{y}) = =-log\hat{y_1}\tag{6}

损失函数尽可能小,则希望输出\hat{y_1}的概率最大。

当采用向量化实现是,此时输出Y的维数就会变成(C,m),并且softmax函数反向传播的关键表达式是dz^{[l]} = \hat{y} - y

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352