Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

吴恩达深度学习课最新补充教程:交互式demo助你轻松理解神经网络初始化

初始化对深度神经网络收敛有重要影响。优秀的初始化模式可以加速训练,但是需要小心操作以避免常见的陷阱。deeplearning.ai 最新上线了 AI Notes 栏目,以长文的形式作为《深度学习专项课程》的补充。其具备交互式的 demo,有助于读者轻松掌握深度学习基础概念。AI Notes 的第一篇教程就是「初始化神经网络」。

这篇教程共包括四部分:有效初始化的重要性、梯度爆炸或消失问题、什么是恰当的初始化,以及 Xavier 初始化的数学证明。

1. 有效初始化的重要性

要想构建一个机器学习算法,通常你需要定义一个架构(如 Logistic 回归、支持向量机神经网络),然后训练它学习参数。以下是训练神经网络的常见过程:

  1. 初始化参数

  2. 选择优化算法

  3. 重复以下步骤:

  4. 将输入向前传播

  5. 计算成本函数

  6. 使用反向传播传递成本对参数的梯度

  7. 根据优化算法,基于梯度更新每个参数

之后,给出一个新的数据点,你就可以使用该模型预测其类别了。

初始化步骤对模型的最终性能至关重要,它需要正确的方法。下面给出了一个交互式 demo,你可以尝试使用不同的方法初始化网络,观察不同的初始化对网络学习的影响。

在此 demo 中,可以任意选择输入数据集、选择初始化方法,并实时查看训练效果。

你注意到当初始化方法为 zero 时,梯度和权重的变化吗?

用零初始化所有权重,会使得神经元在训练过程中学习同样的特征。

事实上,任意常数初始化方法性能都不好。例如一个具备两个隐藏单元的神经网络,假设我们将所有偏置初始化为 0,将所有权重初始化为常量 α。如果我们在网络中前向传播输入 (x_1,x_2),则两个隐藏单元的输出均为 relu(α x_1+α x_2)。因此,两个神经元在训练过程中的演化是对称的,也就阻止了不同的神经元学习不同的特征。

当使用太小或太大的值初始化权重时,成本函数曲线有什么变化呢?

尽管打破了对称性,但使用太小或太大的值初始化权重会分别导致学习缓慢或发散。

因此,选择恰当的初始化值对于高效训练而言是必要的。

2. 梯度爆炸或消失问题

考虑以下这个 9 层神经网络

在优化的每一次迭代中,我们观察到随着梯度从输出层向输入层传递,反向传播的梯度要么太大要么太小。这一结果是合理的,大家不妨考虑以下例子。

假设所有激活函数都是线性(恒等函数),那么输出激活如下:

其中,L=10,W^[L] 及其它 W 是 2×2 的矩阵,层 [1] 到 [L-1] 都只有两个神经元。如果我们假设 W^[1] 到 W^[L-1] 都等于 W,则输出预测为(其中 W^L-1 是矩阵 W 的 L-1 次方,W^[L] 表示第 L 个矩阵)。

那么当初始化值过小、过大或合适时,结果会如何呢?

案例 1:过大初始化值导致梯度爆炸

考虑当每个权重的初始化值都比恒等矩阵略大的情况。

上式可以简化为,a^[l] 的值随着 l 呈指数倍增长。当这些激活值被用于反向传播时,就会导致梯度爆炸问题。即,成本对参数的梯度过大,导致成本值在其极小值周围振荡。

案例 2:过小初始化值导致梯度消失

类似地,考虑每个权重的初始化值略小于恒等矩阵的情况。

上式可简化为,激活值 a^[l] 随着 l 呈指数倍下降。当这些激活被用于反向传播时,会导致梯度消失问题。成本关于参数的梯度过小,导致成本在到达极小值之前已经收敛

总之,用不合适的值进行权重初始化会导致神经网络训练发散或速度缓慢。虽然我们用简单的对称权重矩阵说明梯度爆炸和梯度消失问题,但这一观察也适用于任意过大或过小的初始化值。

3. 如何找到合适的初始化值

为了阻止梯度爆炸或消失,我们需要坚持以下规则:

  • 激活值的均值应为零。

  • 每一层激活值的方差应该保持一致。

在这两个假设下,反向传播的梯度信号就不会在任意层中被过小或过大的值相乘,从而在不出现梯度爆炸或消失等问题。

具体来说,想象一个层 l,其前向传播是:

我们需要遵循下式:

确保零均值,保持每一层的输入方差值不变,从而确保不会出现梯度爆炸和消失问题。该方法适用于前向传播和反向传播。推荐使用 Xavier 初始化方法(或其变体),对于每一个层 l:

也就是说,层 l 的所有权重是从正态分布中随机选取的,该分布的均值 μ=0,方差 ,其中 n^[l-1] 是层 l-1 中的神经元数量。偏置被初始化为 0。

下面的交互式图展示了 Xavier 初始化对每一层激活的影响,下图展示的是一个五层的全连接神经网络

在此交互式图中,你可以加载 MNIST 数据集,选择初始化方法,执行训练并观察不同初始化方法的效果。

Xavier 初始化的数学证明

Xavier 初始化保持每一层的方差不变。我们假设每一层的激活值是围绕 0 的正态分布。有时理解数学证明有助于掌握概念,但没有数学也可以理解基础理念。

我们使用第 3 部分介绍的层 l,假设其激活函数为 tanh。其前向传播如下所示:

我们目标是推导出 Var(a^[l-1]) 和 Var(a^[l]) 之间的关系。然后我们将理解如何初始化权重,使得 Var(a^[l-1]) = Var(a^[l])。

假设我们使用合适的值初始化网络,且输入是经过归一化的。在训练的早期,我们处于 tanh 的线性模式。值足够小,使 tanh(z^[l]) ≈ z^[l],这意味着:

此外,,其中。出于简洁性考虑,我们假设 b^[l] = 0。因此,逐元素查看前面的公式 Var(a^[l-1]) = Var(a^[l]) 可以得到:

一个常见的数学 trick 是在方差之外求和。为此,我们必须遵循以下三个假设:

  1. 权重独立,且同分布;

  2. 输入独立,且同分布;

  3. 权重和输入互相独立。

从而得到:

另一个常见的数学 trick 是将积的方差转化为方差的积,公式如下:

使用该公式,以及,得到:

快完成了!第一个假设引出 ,第二个假设引出 ,因为权重是使用零均值进行初始化的,输入是经过归一化的。从而得到:

第一个假设表明:

第二个假设引出:

它们都具备同样的思想:

组合起来,得到:

完成了!如果我们想要各个层的方差保持一致,我们需要。这证明了 Xavier 初始化的方差选择。

注意,在之前的步骤里,我们没有选择特定层 l。因此,我们证明了该公式适用于所有层。假设 L 是输出层。在每一层使用该公式,则我们可以将输出层的方差推导至输入层的方差:

根据我们的权重初始化方式,输出和输入层方差之间的关系将会变化巨大。注意以下三种情况:

因此,为了避免前向传播信号的消失或爆炸,我们必须通过初始化,使 n^[l−1]Var(W^[l])=1。

通过以上证明,我们研究了在前向传播过程中计算的激活值。同样的结果也适用于反向传播梯度。同理,为了避免梯度爆炸或消失,我们必须通过初始化,使 n^[l]Var(W^[l])=1。

结论

在实践中,机器学习工程师使用 Xavier 初始化时,要么将权重初始化为。后一个分布的方差项是的均值。

以上是 Xavier 初始化的理论证明。Xavier 初始化使用的是 tanh 激活函数。此外还有大量初始化方法。如果你使用 ReLU 激活函数,那么常用的初始化方法是 He 初始化。He 初始化的理论证明要更复杂一些,但它遵循同样的思维过程。

原文链接:http://www.deeplearning.ai/ai-notes/initialization/

入门吴恩达深度学习课程
5
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

支持向量机技术

在机器学习中,支持向量机是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

梯度消失问题技术

梯度消失指的是随着网络深度增加,参数的梯度范数指数式减小的现象。梯度很小,意味着参数的变化很缓慢,从而使得学习过程停滞,直到梯度变得足够大,而这通常需要指数量级的时间。这种思想至少可以追溯到 Bengio 等人 1994 年的论文:「Learning long-term dependencies with gradient descent is difficult」,目前似乎仍然是人们对深度神经网络的训练困难的偏好解释。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

推荐文章
暂无评论
暂无评论~