深度学习的初始化主要有以下方法:
1.高斯分布:
在tensorflow中代码如下所示:
w = tf.Variable(tf.random_normal(shape, stddev=0.01))
w = tf.Variable(np.random.randn())
看上去都是随机生成符合正态分布的值,但是实际上tf.random_normal(shape, stddev=0.01)
是从正态分布中返回符合你输入的shape和均值与方差的值。
tf.random_normal(
shape,
mean=0.0,
stddev=1.0,
dtype=tf.float32,
seed=None,
name=None
)
shape: A 1-D integer Tensor or Python array.输出tensor的shape
mean: A 0-D Tensor or Python value of type dtype. 正态分布的均值
stddev: A 0-D Tensor or Python value of type dtype. 正态分布的方差
dtype: The type of the output.
而numpy.random.randn(d0, d1, ..., dn)
返回参数中要求的shape的样本,具有标准正态分布。
如果想得到任意的正态分布,而不仅仅是标准正态,可以如下写法
N(μ, σ2):
σ * np.random.randn(…) + μ
这种初始化方式的弊端在CS231n这门课中讨论如下:
高斯初始化,给权重较小的值。这种更新方式在小网络中很常见,然而当网络deep的时候,会出现梯度弥散的情况 :