神经网络weight参数怎么初始化
来源:互联网 发布:鬼武者 知乎 编辑:程序博客网 时间:2024/06/16 09:46
转载自:原文
神经网络,或者深度学习算法的参数初始化是一个很重要的方面,传统的初始化方法从高斯分布中随机初始化参数。甚至直接全初始化为1或者0。这样的方法暴力直接,但是往往效果一般。本篇文章的叙述来源于一个国外的讨论帖子[1],下面就自己的理解阐述一下。
首先我们来思考一下,为什么在神经网络算法(为了简化问题,我们以最基本的DNN来思考)中,参数的选择很重要呢?以sigmoid函数(logistic neurons)为例,当x的绝对值变大时,函数值越来越平滑,趋于饱和,这个时候函数的倒数趋于0,例如,在x=2时,函数的导数约为1/10,而在x=10时,函数的导数已经变成约为1/22000,也就是说,激活函数的输入是10的时候比2的时候神经网络的学习速率要慢2200倍!
为了让神经网络学习得快一些,我们希望激活函数sigmoid的导数较大。从数值上,大约让sigmoid的输入在[-4,4]之间即可,见上图。当然,也不一定要那么精确。我们知道,一个神经元j的输入是由前一层神经元的输出的加权和,
一种比较简单、有效的方法是:权重参数初始化从区间均匀随机取值。
为了说明这样取值的合理性,先简单回顾一下几点基本知识:
1.符合均匀分布U(a,b)的随机变量数学期望和方差分别是——数学期望:E(X)=(a+b)/2,方差:D(X)=(b-a)²/12
2.如果随机变量X,Y是相互独立的,那么Var(X+Y) = Var(X)+Var(Y),如果X,Y是相互独立的且均值为0,那么Var(X*Y) = Var(X)*Var(Y)
因此,如果我们限制神经元的输入信号(
也就是说,随机的d个输入信号加权和,其中权重来自于
更一般的形式可以写为:
另外一种较新的初始值方法
根据Glorot & Bengio (2010) [4], initialize the weights uniformly within the interval [−b,b], where
其他场景的初始值方法[2]
in the case of RBMs, a zero-mean Gaussian with a small standard deviation around 0.1 or 0.01 works well (Hinton, 2010) to initialize the weights.
Orthogonal random matrix initialization, i.e. W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W) then use u as your initialization matrix.
参考资料
[1] http://stats.stackexchange.com/questions/47590/what-are-good-initial-weights-in-a-neural-network
[2] Bengio, Yoshua. “Practical recommendations for gradient-based training of deep architectures.” Neural Networks: Tricks of the Trade. Springer Berlin Heidelberg, 2012. 437-478.
[3] LeCun, Y., Bottou, L., Orr, G. B., and Muller, K. (1998a). Efficient backprop. In Neural Networks, Tricks of the Trade.
[4] Glorot, Xavier, and Yoshua Bengio. “Understanding the difficulty of training deep feedforward neural networks.” International conference on artificial intelligence and statistics. 2010.
- 神经网络weight参数怎么初始化
- 神经网络weight参数怎么初始化
- 神经网络weight参数怎么初始化
- 神经网络weight参数怎么初始化
- 深度学习方法(六):神经网络weight参数怎么初始化
- 深度学习方法(六):神经网络weight参数怎么初始化
- 神经网络模型中的权重参数初始化问题
- teamviewer正在初始化显示参数怎么解决
- [深度学习论文笔记][Weight Initialization] 参数初始化部分论文导读
- 神经网络八:权重初始化
- 神经网络权重初始化问题
- 神经网络权重初始化问题
- 神经网络权重初始化
- 深度学习源码剖析:使用双线性插值方式初始化神经网络的可训练参数
- 在神经网络中weight decay、momentum、batch normalization各自意义
- 初始化参数
- 参数初始化
- 神经网络优化(初始化权重)
- Android基础系列之Activity
- ACM刷题之Codeforces ————String Game
- Boost库的timer类讲解
- 剑指offer面试题
- 220. Contains Duplicate III
- 神经网络weight参数怎么初始化
- JAVASE--03--继承
- 数据库中表和视图的区别和联系
- 彻底弄懂JS的事件冒泡和事件捕获
- Unityeditor 事件(2)
- Django模板实现树状数据渲染
- boost 编写finger服务
- Java中的final关键字
- 图像处理算法(三)---图像常用操作