对这篇博文(【深度学习】神经网络中的权重初始化:Why and How)的讨论

对这篇博文(【深度学习】神经网络中的权重初始化:Why and How)的讨论

https://www.jianshu.com/p/03009cfdf733

  • 首先,博文作者是想要表达用高斯分布去随机初始化参数W,用的例子是输入层神经元个数1000,输出层神经元个数1,隐层神经元个数1000

  • 在看代码之前呢,我们来理一下疑问的焦点,博文的作者在博文中写了这么一些话

  • 作者说,“由于W是服从均值为0,方差为1的正态分布,X全为1,b全为0,所以Z为均值为0,方差为1000的正态分布”。

  • 群友A提问,“这个Z的方差为什么是1000?”

  • 群友B给出了数学上的证明,附图回复群友A

  • 这时,群友C敏锐地发现,“z=np.sum(x * w)+b”是一个确定的数,怎么会有均值和方差呢?

  • 于是,群友A与群友BC…等互不相让,大家都认为自己正确,各抒己见,热闹非凡,吃瓜群众围观划水。

  • 在经过激烈的讨论交流后,群友C贴出代码计算得到Z=16.xxxx,是一个标量,于是群友ABC都认为博文有问题

  • 但,群友B毕竟觉得自己的数学证明不应该有错,但print(Z)还真是一个标量,如何解释?

  • 于是群友B就向群友A索要了博文链接,细细地观摩起来。

  • 一段时间后,群友B写下了这篇文章

先说结论,群友C 正确,同时,群友B也正确,群友A看的博文也正确,皆大欢喜有木有!?

  • 先交代三点前提,敲黑板!。
  • 第一点:数学上,随机变量是随机量,它可以用一个大写字母来表示,如,随机变量的样本(实例)则用小写字母来表示
  • 第二点:代码上,变量一旦赋值后,就存储在某一地址中,地址中的内容是确定的,除非你去修改它。
  • 第三点:根据大数定律与中心极限定理,在计算机中,想要表达一个随机变量,就不是一个大写的X了,而是X的足够多(理论上为无穷大,实际可取较大的数)的实例,由于这些实例是独立同分布的,可以用这些实例的均值和方差估算X的均值和方差。

理解上面三点,就能理解为什么群友ABC都是正确的了,下面是博文中每一行代码的注释:

#以下是我对代码补充的注释,帮助理解上面写的话。
import numpy as np
import matplotlib.pyplot as plt
t = 20000 #博文作者用20000次来近似满足足够大的实验次数(不理解可以想象是抛硬币的次数,次数越多,越接近真实分布)
z_lst = np.empty(t) #开辟z_lst这么大的空间准备存储20000次Z的计算结果
x = np.ones(1000#初始化每一个x为1
b = 0 #初始化b为0
for i in range(t):#运行20000次计算Z的过程
    w = np.random.randn(1000)#每一次计算Z,都重新初始化W,保证20000次的W都是高斯的
    z = np.sum(x * w) + b #每一次都按这个公式计算Z,所以,每一次的Z都是标量(所以群友C没错)
    z_lst[i] = z #将每一次z的计算结果存到z_lst【i】中,构成z_lst,用来构成变量Z的20000次独立同分布采样

print('z 均值:',np.mean(z_lst))#求z_lst的均值,根据概率论知识,我们知道这个值接近随机变量Z的均值
print('z 方差:',np.var(z_lst)) #求z_lst的方差,根据概率论知识,我们知道这个值接近随机变量Z的方差(方差接近1000所以群友B没错)
plt.hist(z_lst, bins=100)
plt.show()#画出这20000次计算模拟得到的Z的分布,诺,高斯分布就长这样(群友A看的这篇博文也没错,但应把文字中的小z改写成大Z防止歧义)

所以,代码中的小 其实是随机变量大 的每一次的实例,当然是一个确定数,而随机变量大 ,则是由z_lst中20000个数来表征的,这20000个数相当于对 的20000次独立同分布采样,所以对其求均值和方差近似反应了随机变量 的均值和方差。

附证明Z的方差为1000的过程:

完结,撤~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值