2017-09-06豪森家具神经网络参数随机初始化已经过时了-AI前线

神经网络参数随机初始化已经过时了-AI前线
作者 | Aditya Ananthram译者 | Debra编辑 | EmilyAI 前线导读:近年来,夏铭浩神经网络几乎成为所有机器学习相关问题的“万能解药”,仅因为神经网络能够综合复杂的非线性,几乎总是可以神奇地给出之前不可能达到的精度豪森家具。更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)背景
在数据科学领域,神经网络被视为一个充满秘密与未知的黑盒子。这是因为当我们从一个密集层转向另一个密集层时,它们会使用给定数据的特征形成越来越复杂的特征。研究人员已经尝试过研究这些复杂的特征生成过程,但迄今为止还没有进展黄颖芝,神经网络迄今仍然是黑盒子。
这也是为什么深度学习如此之“深”的原因之一。

然而,一些研究人员却反对在其他重要领域,如自动驾驶和无人机领域使用神经网络技术茫然弟,因为他们认为,不同于支持向量机或随机森林的决策框架,深层神经网络所做出的决定并不可靠。比如说,一辆自动驾驶汽车在去杂货店的路上突然跳下悬崖,如果是支持向量机控制着车辆的行动,那么出错的原因可以被轻易地修改变动;另一方面,由于神经网络框架非常复杂,没有人能够真正预测汽车为何跳下悬崖,以及为什么会采取这一决定至尊囚徒。
但是,所有人都说,如今没有任何其他的数据学习方法可以与神经网络能达到的准确性相媲美。神经网络成就了今天图像识别技术的水平,复杂的卷积网络正在变得越来越精确,识别物体的能力甚至与人类有的一拼。为什么要初始化权重?

在神经网络中,每两个层之间存在着权重。这些权重的线性转换和前一层中的值将通过非线性激活函数生成下一层的值。这个过程在前向传播期间在层与层之间发生,并且通过反向传播,可以找出这些权重的最佳值妖行大唐,从而在给定输入的情况下产生精确的输出。
到目前为止,机器学习工程师一直使用随机初始化权重作为此过程的起点贺宏娟。直到现在,在找到深度神经网络成本函数最小值方面发挥重要的作用的初始值,我们还不得而知。
在创建了神经网络后,通常需要对权重和偏置进行初始化,大部分的实现都是采取 Gaussian distribution 来生成随机初始值。我们可以通过改变权重 w 的分布,使隐藏层的输入尽量接近于 0。因此,我们需要进行权重初始化。若干权重初始化方法及其优点和弊端
让我们看看三种方法来初始化层之间的权重,然后再开始向前传播卧春原文,向后传播以找到最佳权重。
1:零初始化
2:随机初始化
3:He-et-al 初始化零初始化
15000 次迭代后:0.7
精确度: 0.5
在训练完毕后,虽然不知道网络中每个权重的最终值应该是多少,但如果数据经过了恰当的归一化的话,就可以假设所有权重数值中大约一半为正数,一半为负数风间雅。
但是这个想法听起来合理,但实际上却并不可行有钱先生。我们把这些权重的初始值都设为 0,因为如果网络中的每个神经元都计算出同样的输出,然后它们就会在反向传播中计算出同样的梯度,从而进行同样的参数更新。简单来说,零初始化没有任何好处,因为这样神经元之间就失去了不对称性的源头,不会打破对称性。如果我们将所有权重设置为零,那么所有层的所有神经元执行相同的计算颜红君 ,给出相同的输出,因此整个深度网络就没用了。如果权重为零,则整个深层网络的复杂度将与单个神经元的复杂度相同,并且预测不会比随机性强多少。
w=np.zeros((layer_size[l],layer_size[l-1]))
随机初始化
15000 次迭代后:0.38
精确度: 0.83
这种方法可以在打破对称性的过程中使用,准确性更高。用这种方法,权重初始化非常接近零林彪日记,但却是随机的。这有助于打破对称性,并且每个神经元不再执行相同的计算。
将权重初始化为很小的数字是一个普遍的打破网络对称性的解决办法,然而,并不是数字越小就会表现的越好。比如,如果一个神经网络层的权重非常小,那么在反向传播算法就会计算出很小的梯度 (因为梯度 gradient 是与权重成正比的)。在网络不断的反向传播过程中将极大地减少“梯度信号”,并可能成为深层网络的一个需要注意的问题。
W = np.random.randn(layer_size[1],layer_size[L-1])*0.01imageHe-et-al 初始化
15000 次迭代后:0.07
精确度: 0.96
以上两种方法均存在一个问题,即随着输入数据量的增长,随机初始化的神经元的输出数据的分布中的方差也在增大。我们可以除以输入数据量的平方根来调整其数值范围,这样神经元输出的方差就归一化到 1 了,即将神经元的权重向量初始化为:w = np.random.randn(n) / sqrt(n)。其中 n 是输入数据的数量阿信蛋蛋妹。这样就保证了网络中所有神经元起始时有近似同样的输出分布。实践经验证明,这样做可以更快地收敛。



这种方法因 He 等人于 2015 年提交的论文(Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification,与 Xavier 初始化相似,其因子乘以 2。)而名声大噪。文中给出了一种针对 ReLU 神经元的特殊初始化,并给出结论:网络中神经元的方差应该是 2.0/n,代码为 w = np.random.randn(n) * sqrt(2.0/n)。
用这种方法,权重被初始化,同时会牢记前一层的大小,这有助于更快、更有效地获得成本函数的全局最小值。权重仍然是随机的吴雪妍,但不同的是它的范围取决于前一层神经元的大小。这样,初始化的过程得到控制,因此梯度下降更快更有效,是神经网络算法使用 ReLU 神经元时的当前最佳推荐。
W = np.random.randn(layer_size[1],layer_size[L-1])* np.sqrt(2/ layer_size[L-1])
原文链接:
https://towardsdatascience.com/random-initialization-for-neural-networks-a-thing-of-the-past-bfcdd806bf9e
http://cs231n.github.io/neural-networks-2/
AI前线紧跟前沿的AI技术社群
想看更多这类文章, 请给我们点个赞吧!