2. 深度学习——初始化方法
机器学习面试题汇总与解析——初始化方法
本章讲解知识点
-
- 什么是初始化方法
-
- 为什么需要合理的参数初始化
-
- 详细讲解初始化方法
- 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。
- 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。
- 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
- 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
- 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。
-
关于机器学习算法书籍,我强烈推荐一本《百面机器学习算法工程师带你面试》,这个就很类似面经,还有讲解,写得比较好。
-
关于深度学习算法书籍,我强烈推荐一本《解析神经网络——深度学习实践手册》,简称 CNN book,通俗易懂。
1. 什么是初始化方法
1.1 什么是网络参数初始化
深度学习中的初始化方法是指在训练神经网络时,对模型的参数进行初始赋值的方法。合适的初始化方法可以加速模型的收敛速度,提高模型的性能。
神经网络在训练时,前向传播和反向传播都涉及到每个神经元的权重更新 ,也就是我们说的网络参数了,当然这些参数需要一个初始值。方法有很多,全 0 初始、随机初始等等,每个方法都有优缺点。
1.2 常用的深度学习初始化方法
-
随机初始化:最常用的初始化方法之一是随机初始化。它通过从某个分布(如均匀分布或高斯分布)中随机选择初始值来初始化参数。随机初始化可以破坏对称性,使得不同的神经元学习到不同的特征。
-
零初始化:另一种常见的初始化方法是将所有参数初始化为零。然而,零初始化的问题是每个参数的更新将是相同的,导致网络对称性和梯度消失问题。
-
Xavier 初始化:Xavier 初始化是一种常用的初始化方法,特别适用于具有线性激活函数的网络。它根据输入和输出维度来调整参数的初始化范围,以确保梯度的传播保持合适的范围,避免梯度消失或梯度爆炸问题。
-
He 初始化:He 初始化是一种针对具有 ReLU 激活函数的网络的初始化方法。它与 Xavier 初始化类似,但根据激活函数的性质进行了调整,以确保合适的梯度传播范围。
2. 为什么需要合理的参数初始化
理想的网络参数初始化使得模型训练事半功倍,相反,糟糕的初始化可能导致网络梯度消失和梯度爆炸。举个例子,如网络使用 sigmoid 函数作为非线性激活函数,若参数初始化的值过大,前向运算时经过 sigmoid 函数后的输出结果几乎全为 0 或1,而反向传播时梯度全部为 0,这就导致梯度消失了。再如 ReLU,如果初始化不合理,前向运算的结果可能全部为负,发生“死区”现象。
再简单说,就是参数又不能过大,又不能过小。比如在前向传播过程中输出为 ,因为 很小,所以输出很小,同时反向传播过程中梯度的变化也很小,那么参数的改变也很小,在不断的正向传播乘很小的数,反向传播又几乎不变的情况下,最后 会越来越小,趋近于 0,出现梯度消失。反之同理。
从激活函数方面来看,若激活函数的导数绝对值都小于1,那么导致梯度消失;若激活函数的导数绝对值都大于1,那么导致梯度爆炸。这也是为啥Relu激活函数表现好的原因,人家梯度刚好是1。
最理想化的参数初始化
通过我们上面的叙述,当然最理想化的参数初始化就是,经过多层网络后,信号不被过分放大或过分减弱。那么如何保证?数学化的方法就是使每层网络的输入和输出的方差一致。然后我们还要尽量保证每层网络参数分布均值为 0、方差不变,为什么呢?因为这如同归一化,归一化的好处是有助于提高网络的稳定性和收敛速度,防止梯度爆炸或梯度消失;另一个原因也是为了计算方便。
3. 详细讲解初始化方法
3.1. 全0初始化
就是将所有权重置 0。当然是不能这样的,神经网络通过梯度更新参数,参数都是 0,梯度也就是 0,神经网络就停止学习了。
3.2. 随机初始化
将参数随机化,不过随机参数服从高斯分布或均匀分布,假设网络输入神经元个数为 ,输出神经元个数为 ,则服从高斯分布的参数随机初始化为:
其中高斯分布均值为 0,方差为 1。0.001 为控制因子,这样使得参数期望尽量接近 0。
3.3. Xavier 初始化
权重参数随机初始化会带来一个问题,即网络输出数据分布的方差会随着输入神经元个数改变,为解决这一问题,会在初始化的同时加上对方差大小的规划化。
随机初始化没有控制方差,所以对于深层网络而言,随机初始化方法依然可能失效。我们上面已经说了,理想的参数初始化还得控制方差,对 进行一个规范化:
其中, 为 或 ,这便是“Xavier初始化”,维持了输入输出数据分布方差一致性。注意这里是正态分布。如果是均匀分布,则参数的随机取值范围为 [ , ]。
核心思想:正向传播时,激活值的方差保持不变;反向传播时,关于状态值的梯度的方差保持不变。
这里我们来具体分析一下“Xavier初始化”如何做到了输入输出数据分布方差的一致性。假设 为未经非线性变换的该层网络的输出结果, 为该层参数, 为该层输入数据,则有:
对于理想情况下处于稳定状态的神经网络参数和输入数据均值应为 0,则 ,所以上面的式子简化为:
我们希望输入输出数据分布方差的一致,即 ,那么令 ,则 。也就是规范化后的 的方差为原来的 ,那么规范化后的 为 或 ,我们更多会采用 ,因为实际当中输入与输出的个数往往不相等,于是为了均衡考量。从上面推导我们可以知道,“Xavier初始化”需要配合 BN 层,而且针对线性激活函数才有用。
3.4. He 初始化
He 初始化由何凯明提出,为了解决 “Xavier 初始化” 的缺点。对于非线性激活函数 ReLU,“Xavier 初始化” 方法失效。He 初始化基本思想是,当使用 ReLU 做为激活函数时,Xavier 的效果不好,原因在于,当 ReLU 的输入小于 0 时,其输出为 0,相当于该神经元被关闭了,影响了输出的分布模式。
因此 He 初始化,在
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
- 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 - 本专栏适合于算法、机器学习求职的学生或人士。 - 本专栏特点: - 本专栏囊括了深度学习、机器学习、NLP、特征工程等一系列知识点的讲解,并且最后总结出了高频面试考点(附有答案)共301道,知识点讲解全面,事半功倍,为大家春秋招助力。不仅如此,教程还讲解了简历制作、笔试面试准备、面试技巧等内容。