深度学习中Xavier初始化

“Xavier”初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文《Understanding the difficulty of training deep feedforward neural networks》。

文章主要的目标就是使得每一层输出的方差应该尽量相等。下面进行推导:每一层的权重应该满足哪种条件才能实现这个目标。

和方差相关的定理

假设有随机变量x和w,它们都服从均值为0,方差为σ的分布,且独立同分布,那么:

  • wx就会服从均值为0,方差为σσ的分布
  • wx+wx就会服从均值为0,方差为2σσ的分布

文章实验用的激活函数是tanh激活函数,函数形状如下左图,右图是其导数的函数形状。

从上图可以看出,当x处于0附近时,其导数/斜率接近与1,可以近似将其看成一个线性函数,即f(x)=x。

假设输入数据的均值为o,方差为\(\delta_x\),如果第一层是卷基层,卷基层共n个参数,\(n=C*k_h*k_w\),于是有:

\[z_j= \sum_{i}^{n}{w_i*x_i}\]

其中,忽略偏置b

假设x和w是独立同分布,则\(Var(z)=n*\delta_x*\delta_w\),为了更好地表达,将层号放在变量上标处:
\[\delta_x^2=n^1*\delta_x^1*\delta_w^1\]

全连接和卷积层都可以看做是n个参数的线性变换,进而有:\(\delta_x^3=n^2*\delta_x^2*\delta_w^2\),如果k层的网络,有:
\[\delta_x^k=n^{k-1}*\delta_x^{k-1}*\delta_w^{k-1}
=n^{k-1}*n^{k-2}*\delta_x^{k-2}*\delta_w^{k-2}*\delta_w^{k-1}
=\delta_x^1*\prod_{i=1}^{k-1}{(n^i*\delta_w^i)}\]

从上式中可以看出,后面的连乘是很危险的,如果\(n^i*\delta_w^i\)总是大于1,最后的方差为越来越大;如果乘机小于1,最后的方差就越来越小。所以我们回头再看第一个公式:
\[\delta_x^2=n^1*\delta_x^1*\delta_w^1\]
如果满足\(\delta_x^2=\delta_x^1\),即保证输出方差和输出方差一直便可以避免上述问题,得到:
\[\delta_w^1=\frac{1}{n^1}\]

对于任意一层i,应该满足:
\[\delta_w^i=\frac{1}{n^i}\]
\(n^i\)是w参数的输入层。

反向传播的情况

假设第k层的梯度为\(\frac{\partial{Loss}}{\partial{x_j^k}}\),对于第k-1层,有:
\[\frac{\partial{Loss}}{\partial{x_j^{k-1}}} = \sum_{i=1}^{n}{\frac{\partial{Loss}}{\partial{x_i^k}}*w_j^{ki}}\]

这里的参数n表示的是输出端的数目。

如果每层的方差服从均值为o,方差为某值的分布,有:
\[Var(\frac{\partial{Loss}}{\partial{x_j^{k-1}}})=
n^k*Var(\frac{\partial{Loss}}{\partial{x_i^k}})*\delta_w^k\]
对于k层的网络,可以推导得到:
\[Var(\frac{\partial{Loss}}{\partial{x_j^{1}}}
=Var(\frac{\partial{Loss}}{\partial{x_i^k}})* \prod_{2}^{k}{(n^i*\delta_w^i)}
\]
上式的连乘同样危险,所以我们取\(Var(\frac{\partial{Loss}}{\partial{x_j^{k-1}}}) = Var(\frac{\partial{Loss}}{\partial{x_i^k}})\)
故:
\[\delta_w^k = \frac{1}{n^k}\]
这里的n表示输出的维度

为了均衡考虑,我们设置方差应该满足
\[\delta_w^k=\frac{2}{n^k+n^{k+1}}\]

实际应用

论文提出使用均匀分布进行初始化,我们设定权重要初始化的范围是[-a,a]。而均匀分布的方差为:

\[Var(uniform)=\frac{(a-(-a))^2}{12}=\frac{a^2}{3}=\delta_w^k\]

所以:
\[a=\sqrt{\frac{6}{n^k+n^{k+1}}}\]
这就是xavier初始化方法,即把参数初始化成下面范围内的均匀分布:
\[[-\sqrt{\frac{6}{n^k+n^{k+1}}}, \sqrt{\frac{6}{n^k+n^{k+1}}}]\]

原文地址:https://www.cnblogs.com/houkai/p/10160682.html

时间: 2024-10-31 16:29:18

深度学习中Xavier初始化的相关文章

浅谈深度学习中潜藏的稀疏表达

浅谈深度学习中潜藏的稀疏表达 “王杨卢骆当时体,轻薄为文哂未休. 尔曹身与名俱灭,不废江河万古流.” — 唐 杜甫<戏为六绝句>(其二) [不要为我为啥放这首在开头,千人千面千理解吧] 深度学习:概述和一孔之见 深度学习(DL),或说深度神经网络(DNN), 作为传统机器学习中神经网络(NN).感知机(perceptron)模型的扩展延伸,正掀起铺天盖地的热潮.DNN火箭般的研究速度,在短短数年内带来了能“读懂”照片内容的图像识别系统,能和人对话到毫无PS痕迹的语音助手,能击败围棋世界冠军.引

深度学习中得数学,高效计算基础与线性分类器

深度学习说到底就是要调节网络中得权重,使网络的分类结果更接近于训练值.这个重复迭代的过程又是一个线性回归的问题.在这种可能会用到高数,线性代数,概率论中的知识. 一.数学基础提一提. 1.高数中得知识. 高数中最重要的就是微积分了,那在深度学习中出现最多的一个概念就是梯度.什么是梯度呢?要说导数,学过高数的肯定都知道.其实梯度就是当把标量x变成向量X时,对X求导就是梯度.那为什么要用梯度呢?因为梯度等于0在凸函数中往往代表着一个极小值点.我们要求得就是损失函数的极小值,这正是我们需要的.梯度是指

深度学习中的Data Augmentation方法(转)基于keras

在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augmentation 2. Regularization. 数据量比较小会导致模型过拟合, 使得训练误差很小而测试误差特别大. 通过在Loss Function 后面加上正则项可以抑制过拟合的产生. 缺点是引入了一个需要手动调整的hyper-parameter. 详见 https://www.wikiwand.c

深度学习中 --- 解决过拟合问题(dropout, batchnormalization)

过拟合,在Tom M.Mitchell的<Machine Learning>中是如何定义的:给定一个假设空间H,一个假设h属于H,如果存在其他的假设h’属于H,使得在训练样例上h的错误率比h’小,但在整个实例分布上h’比h的错误率小,那么就说假设h过度拟合训练数据. 也就是说,某一假设过度的拟合了训练数据,对于和训练数据的分布稍有不同的数据,错误率就会加大.这一般会出现在训练数据集比较小的情况. 深度学习中避免过拟合的方法: Dropout      2012年ImageNet比赛的获胜模型A

资深程序员带你玩转深度学习中的正则化技术(附Python代码)!

目录 1. 什么是正则化? 2. 正则化如何减少过拟合? 3. 深度学习中的各种正则化技术: L2和L1正则化 Dropout 数据增强(Data augmentation) 提前停止(Early stopping) 4. 案例:在MNIST数据集上使用Keras的案例研究 1. 什么是正则化? 在深入该主题之前,先来看看这几幅图: 之前见过这幅图吗?从左到右看,我们的模型从训练集的噪音数据中学习了过多的细节,最终导致模型在未知数据上的性能不好. 换句话说,从左向右,模型的复杂度在增加以至于训练

卷积在深度学习中的作用(转自http://timdettmers.com/2015/03/26/convolution-deep-learning/)

卷积可能是现在深入学习中最重要的概念.卷积网络和卷积网络将深度学习推向了几乎所有机器学习任务的最前沿.但是,卷积如此强大呢?它是如何工作的?在这篇博客文章中,我将解释卷积并将其与其他概念联系起来,以帮助您彻底理解卷积. 已经有一些关于深度学习卷积的博客文章,但我发现他们都对不必要的数学细节高度混淆,这些细节没有以任何有意义的方式进一步理解.这篇博客文章也会有很多数学细节,但我会从概念的角度来看待他们,在这里我用每个人都应该能够理解的图像表示底层数学.这篇博文的第一部分是针对任何想要了解深度学习中

关于深度学习中的batch_size

5.4.1 关于深度学习中的batch_size batch_size可以理解为批处理参数,它的极限值为训练集样本总数,当数据量比较少时,可以将batch_size值设置为全数据集(Full batch cearning). 实际上,在深度学习中所涉及到的数据都是比较多的,一般都采用小批量数据处理原则. 小批量训练网络的优点: 相对海量的的数据集和内存容量,小批量处理需要更少的内存就可以训练网络. 通常小批量训练网络速度更快,例如我们将一个大样本分成11小样本(每个样本100个数据),采用小批量

深度学习中的数据增强技术(二)

上篇文章介绍了深度学习中数据增强技术的应用,及部分TensorFlow实现代码.废话不说了,这篇接着介绍: TensorFlow实现图片数据增强 注:类似的方法放在了代码中注释的部分,实际调试时可以分别打开运行 ③图像色彩调整 import matplotlib.pyplot as plt import tensorflow as tf # 读取图片 image_data = tf.gfile.FastGFile("data/dog3.jpg", 'br').read() # 4中调整

干货 | 深入理解深度学习中的激活函数

理解深度学习中的激活函数 在这个文章中,我们将会了解几种不同的激活函数,同时也会了解到哪个激活函数优于其他的激活函数,以及各个激活函数的优缺点. 1. 什么是激活函数? 生物神经网络是人工神经网络的起源.然而,人工神经网络(ANNs)的工作机制与大脑的工作机制并不是十分的相似.不过在我们了解为什么把激活函数应用在人工神经网络中之前,了解一下激活函数与生物神经网络的关联依然是十分有用的. 一个典型神经元的物理结构由细胞体.向其他神经元发送信息的轴突以及从其他神经元接受信号或信息的树突组成. ? 图