2.4 如何初始化神经网络的权重
震撼人心的时刻到了,接下来讲解本节中实现多层次神经网络的最大难点:创建权重的值。
chapter2_Create_AI_Framework版本的NetworkConnection.py(v1)权重源代码如下:
第44~45行代码:设置区域最小值、区域最大值。
range_min=0
range_max=1
第47行代码:设置ε的值,ε根据特征数决定,这里只有2个特征x1、x2,因此特征数为2,经过计算得到ε的值等于1.014 611 872 354 576 5。
第49行代码:使用random方法获取一个取值范围在[0,1]的随机数。
0≤random.random()<1
因为rand = range_min + (range_max – range_min) * random.random()
所以
0≤rand<1
-1≤2*rand-1<1
第50行代码:因为rand = rand * (2 * init_epsilon) – init_epsilon=(2 * rand – 1) init_epsilon
所以随机数rand的取值范围为
-init_epsilon≤rand<init_epsilon
即
-ε≤and<ε
第52行代码:通过weight.set_value(rand)代码将随机数rand赋值给权重值。权重值初始化的随机取值范围为[-ε,ε),即[-1.0146118723545765,1.0146118723545765)。
盘古人工智能框架使用rand设置随机数,听上去是随机,其实并不随机,因为这将影响训练多少次及每次训练的难度。我们设置最小值是-ε,最大值是ε,权重值取值范围为[-ε,ε),对其进行处理使其更符合实际的情况,尽量可能使其随机。这也是TensorFlow、PyTorch内部实现的核心。