正则化

\[ \begin{align}\begin{aligned}\newcommand{\ba}{\boldsymbol{a}} \newcommand{\bb}{\boldsymbol{b}} \newcommand{\be}{\boldsymbol{e}} \newcommand{\bw}{\boldsymbol{w}} \newcommand{\bx}{\boldsymbol{x}} \newcommand{\by}{\boldsymbol{y}} \newcommand{\bz}{\boldsymbol{z}} \newcommand{\bd}{\boldsymbol{d}} \newcommand{\bv}{\boldsymbol{v}} \newcommand{\bs}{\boldsymbol{s}}\\\newcommand{\btheta}{\boldsymbol{\theta}} \newcommand{\bbeta}{\boldsymbol{\beta}} \newcommand{\bgamma}{\boldsymbol{\gamma}} \newcommand{\bsigma}{\boldsymbol{\sigma}} \newcommand{\md}{\mbox{d}} \newcommand{\bmu}{\boldsymbol{\mu}} \newcommand{\bone}{\boldsymbol{1}} \newcommand{\trans}{^{\rm\scriptsize T}} \newcommand{\var}{\mathrm{var}}\\\newcommand{\bA}{\boldsymbol{A}} \newcommand{\bB}{\boldsymbol{B}} \newcommand{\bC}{\boldsymbol{C}} \newcommand{\bD}{\boldsymbol{D}} \newcommand{\bI}{\boldsymbol{I}} \newcommand{\bM}{\boldsymbol{M}} \newcommand{\bW}{\boldsymbol{W}} \newcommand{\bX}{\boldsymbol{X}} \newcommand{\bY}{\boldsymbol{Y}} \newcommand{\bZ}{\boldsymbol{Z}} \newcommand{\cotp}{\textcolor{ #30D158FF }{TP}} \newcommand{\cotn}{\textcolor{#64D2FFFF}{TN}} \newcommand{\cofp}{\textcolor{#5E5CE6FF}{FP}} \newcommand{\cofn}{\textcolor{#BF5AF2FF}{FN}}\\\newcommand{\numcotp}{\textcolor{ #30D158FF }{50}} \newcommand{\numcotn}{\textcolor{#64D2FFFF}{30}} \newcommand{\numcofp}{\textcolor{#5E5CE6FF}{10}} \newcommand{\numcofn}{\textcolor{#BF5AF2FF}{10}}\end{aligned}\end{align} \]

正则化#

\(\hspace{1.5em}\) 正则化是神经网络模型较为常见的方法,该方法对降低模型复杂性,进而降低模型的方差具有较为显著的作用。在本节中,我们主要讨论如下几类经典的正则化方法。

  1. \(l_2\) 正则化

  2. Dropout

  3. 早停

\(l_2\) 正则化#

\(\hspace{1.5em}\) 我们已经在岭回归中简单讨论过了 \(l_2\) 正则化。其核心思想是通过在模型的损失函数中添加一个额外的惩罚项来防止模型过拟合,从而提升模型的泛化能力。这个惩罚项是模型所有权重参数的平方和与一个调节参数的乘积,该调节参数是一个非负的超参数,用于控制正则化的强度。在实际应用中,\(l_2\) 正则化能够有效地减小模型参数的幅度,使得模型更加平滑,降低了模型的复杂度,进而提高了模型在新数据上的表现能力。

\(\hspace{1.5em}\) 从数学的角度来看,\(l_2\) 正则化相当于为模型的参数施加了一个高斯先验分布,这有助于引导模型参数向更小的值收敛,避免了参数过大导致的过拟合问题。同时,\(l_2\) 正则化还具有提高数值计算稳定性的优点,使得模型在训练过程中更加稳健。

\(\hspace{1.5em}\) \(l_2\) 正则化的形式一般为

\[\mathcal{J}_2 = \frac{\lambda}{2n}\sum_{l=1}^L\lVert\bW^{[l]}\rVert_F^2,\]

其中,\(\lVert\bW\rVert_F=(\sum_i\sum_j w_{ij}^2)^{1/2}\) 为矩阵 \(\bW=(w_{ij})\) 的 Frobenius 范数。该范数衡量了矩阵与零矩阵的距离,类似于二维平面上点到原点的欧几里得距离。需要指出的是,我们只对权重项 \(\{\bW^{[l]}:l=1,\ldots,L\}\) 施加惩罚。对于后向传播,该损失对权重矩阵的导数为

\[\frac{\partial \mathcal{J}_2}{\partial \bW^{[l]}} = \frac{\lambda}{n}\bW^{[l]}。\]

\(l_1\) 正则化

\(\hspace{1.5em}\) \(l_1\) 正则化是指在损失函数的基础上,加上所有权重参数的绝对值之和(乘以一个调节参数),用于惩罚参数过大,促使模型更加稀疏化。\(l_1\) 正则化在机器学习和深度学习中有着广泛的应用,特别适用于那些需要特征选择的问题。例如,在文本分类、基因选择等场景中,\(l_1\) 正则化能够有效地剔除那些不重要的特征,提高模型的准确性和可解释性。\(l_1\) 正则化和 \(l_2\) 正则化都是常用的正则化方法,它们的主要区别在于惩罚项的不同。\(l_2\) 正则化是在损失函数的基础上加上所有权重参数平方的和(乘以一个调节参数),用于惩罚参数过大,使模型更加平滑。相比之下,\(l_1\) 正则化更容易产生稀疏解,而 \(l_2\) 正则化则保留了更多的参数,使其更加连续和稳定。在实际应用中,选择哪种正则化方法需要根据具体的问题与实验结果来决定。

\(\hspace{1.5em}\) \(l_1\) 正则化的形式一般为

\[\mathcal{J}_1 = \frac{\lambda}{n}\sum_{l=1}^L\lVert\bW^{[l]}\rVert_1,\]

其中,\(\lVert\bW\rVert_1=\sum_i\sum_j \lvert w_{ij}\rvert\) 为矩阵 \(\bW=(w_{ij})\)\(l_1\) 范数,即各个元素绝对值加和。对于后向传播,该损失对权重矩阵的导数为

\[\frac{\partial \mathcal{J}_1}{\partial \bW^{[l]}} = \frac{\lambda}{n}\mbox{sign}(\bW^{[l]}),\]

其中,\(\mbox{sign}(\bW^{[l]})\) 的矩阵规模与 \(\bW^{[l]}\) 相同,其每个元素为 \(\bW^{[l]}\) 中相应元素的符号。需要指出的是,\(l_1\) 范数并不是对 \(\bW^{[l]}\) 完全可导的。但不失一般性,我们可以将对应分量在0处的导数定义为1或者-1。

Dropout#

\(\hspace{1.5em}\) Dropout是一种在训练深度学习模型时常用的正则化技术,它的核心思想是在训练过程中随机地“丢弃”(即设置为0)神经网络每个隐藏层中的一部分神经元,以此来减轻模型对训练数据的过拟合现象。需要指出的是,输入输出层不进行Dropout操作。Dropout通过阻止(包括隐藏层在内的)特征过拟合来提高神经网络的泛化能力,因为它使得神经网络不能依赖于特定的一小部分神经元,而是必须学习更稳健的特征。

\(\hspace{1.5em}\) 具体来说,在训练阶段,对于第 \(l\) 层(\(l=1,\ldots,L-1\))的输出,Dropout会按照一个给定的概率 \(p^{[l]}\in(0,1)\) 随机地将一部分神经元的激活值设置为0,这意味着这些神经元在当前的前向传播和反向传播中都不会参与计算。但是它们的输出需要按照Dropout概率进行缩放,以补偿训练时丢失的激活值。而在测试阶段,则不会使用Dropout。

\(\hspace{1.5em}\) 下图展示了一个具有两个隐藏层的神经网络模型对应的Dropout结果,其中 \(\bx\) 为某特征向量。在该网络中,第一(隐藏)层具有 \(d^{[1]}=6\) 个神经元,第二(隐藏)层具有 \(d^{[2]}=4\) 个神经元,第三层为输出层,具有 \(d^{[3]}=1\) 个神经元。每层Dropout概率为 \(p^{[1]} = p^{[2]}=0.5\)。需要指出的是,不同隐藏层往往对应不同的Dropout概率,而这个概率值也是模型的超参数之一。

\(\hspace{1.5em}\) 在前向和后向传播中,我们通常利用掩码矩阵实现Dropout。正如我们在多层神经网络中所提及的,记 \(\bA^{[l]}\in\mathbb{R}^{n\times d^{[l]}}\) 为第 \(l\)(隐藏)层的激活结果,其中 \(n\) 为样本量,\(d^{[l]}\) 为该层神经元个数。需要指出的是,\(\bA^{[l]}\) 是第 \((l+1)\) 层的输入。我们已令 \(p^{[l]}\) 为第 \(l\) (隐藏)层的Dropout概率。我们首先生成一个规模与 \(\bA^{[l]}\) 相同的掩码矩阵 \(\bM^{[l]}\in\{0,1\}^{n\times d^{[l]}}\)。具体地讲,掩码矩阵 \(\bM^{[l]}\) 的每个元素均是成功概率为 \(1-p^{[l]}\) 的伯努利分布。记 \(m_{ij}^{[l]}\) 为掩码矩阵 \(\bM^{[l]}\) 的第 \(i\) 行、第 \(j\) 列元素;\(m_{ij}^{[l]}=0\) 说明对于第 \(i\) 个样本而言,其第 \(j\) 个神经元被Dropout,否则该神经元被保留。则Dropout过程的数学表达为

\[\bA^{[l]}\circ \bM^{[l]},\]

其中 "\(\circ\)"为两个矩阵的Hadamard乘积,即两个矩阵对应元素相乘。从以上的计算可见,尽管我们用的是Dropout(即丢弃),我们实际上并没有改变神经网络的结构,而是将被Dropout的神经元在所在层的输出通过掩码矩阵变成了0.

备注

\(\hspace{1.5em}\) 每个训练样本被Dropout的神经元可能不同。但对于神经网络的同一层而言,掩码矩阵的各个元素往往是独立同分布的。

\(\hspace{1.5em}\) 对于 \(\bA^{[l]}\) 中的每个元素而言,其具有 \(p^{[l]}\) 的概率被Dropout。为了弥补Dropout所带来的信息缺失,我们通常将Dropout之后的结果除以 \(1-p^{[l]}\) 作为该层的激活结果,即

()#\[\bA_d^{[l]} = \frac{\bA^{[l]}\circ \bM^{[l]}}{1-p^{[l]}}。\]

概率解释

\(\hspace{1.5em}\) 通过基本的概率运算,我们可知

\[E(\bA^{[l]}\circ \bM^{[l]}\mid \bA^{[l]}) = (1-p^{[l]})\bA^{[l]}。\]

因此,为了使输出信息不受Dropout所带来的影响,我们通常考虑()

\(\hspace{1.5em}\) 下面,我们深入讨论下Dropout对模型参数训练的影响。在多层神经网络中,我们已经讨论了多层神经网络的后向传播核心计算公式。当我们引入Dropout,并基于 \(\bA_d^{[l]}\) 进行前向传播时,其对应的后向传播公式为:

\[\begin{split}\begin{eqnarray} \mbox{d}\bZ_d^{[l]} &=& \mbox{d}\bA_d^{[l]}\circ {\sigma^{[l]}}'(\bZ_d^{[l]})\\ \mbox{d}\bW^{[l]} &=& \mbox{d}(\bZ_d^{[l]})\trans\bA_d^{[l]}\\ \mbox{d}\bb^{[l]} &=& \mbox{d}(\bZ_d^{[l]})\trans\bone\\ \mbox{d}\bA_d^{[l-1]} &=& \mbox{d}\bZ_d^{[l]}\bW^{[l]}。 \end{eqnarray}\end{split}\]

在上面的计算中,下角标"\(d\)"表示基于Dropout计算的结果。

回顾

\(\hspace{1.5em}\) 没有Dropout的全连接神经网络后向传播计算公式为:

\[\begin{split}\begin{eqnarray} \mbox{d}\bZ^{[l]} &=& \mbox{d}\bA^{[l]}\circ {\sigma^{[l]}}'(\bZ^{[l]})\\ \mbox{d}\bW^{[l]} &=& \mbox{d}(\bZ^{[l]})\trans\bA^{[l-1]}\\ \mbox{d}\bb^{[l]} &=& \mbox{d}(\bZ^{[l]})\trans\bone\\ \mbox{d}\bA^{[l-1]} &=& \mbox{d}\bZ^{[l]}\bW^{[l]}。 \end{eqnarray}\end{split}\]

早停#

\(\hspace{1.5em}\) 在深度学习模型的训练过程中,模型通常会随着训练的进行在训练集上的性能不断提高。然而,当模型对训练数据学习得过于充分时,可能会捕捉到训练数据中的噪声和特定特征,导致在验证集(或测试集)上的性能开始下降,即出现过拟合现象。早停技术通过监控模型在验证集上的性能,当发现性能不再提高或开始下降时,及时停止训练,从而避免过拟合。其核心思想是在模型训练过程中,当模型在验证集上的性能不再显著提高时,提前终止训练过程,以避免模型在训练集上过拟合,从而提高模型在未见过的数据上的泛化能力。