神经网络的权重初始化
四个神经元可能有4个输入特征,从x_1到x_4,经过a=g(z)处理,最终得到y我们用x表示。
z=w_1 x_1+w_2 x_2+⋯+w_n x_n,b=0,暂时忽略b,
目的:为了预防z值过大或过小,你可以看到n越大,你希望w_i越小,因为z是w_i x_i的和,如果你把很多此类项相加,希望每项值更小
方法:设置w_i=1/n,n表示神经元的输入特征数量,实际上,你要做的就是设置某层权重矩阵
【我用的是n([l-1]),因为本例中,逻辑回归的特征是不变的。但一般情况下l层上的每个神经元都有n([l-1])个输入。】
对于其他激活函数:
tanh:1:是√(1/n^([l-1]) ),被称为Xavier初始化。
2:Yoshua Bengio和他的同事还提出另一种方法,你可能在一些论文中看到过,它们使用的是公式√(2/(n([l-1])+n[l] ))。
Relu激活函数,也就是最常用的激活函数,这个公式np.sqrt(2/n^([l-1]) ),
Mini-batch 梯度下降
当训练巨量数据集时,我们要把训练样本放大巨大的矩阵X当中去,X=[x^((1) ) x^((2) ) x^((3) )……x^((m) ) ]。
Y也是如此,Y=[y^((1) ) y^((2) ) y^((3) )……y^((m) ) ]。
所以X的维数是(n_x,m),Y的维数是(1,m),向量化能够让你相对较快地处理所有m个样本。
如果m很大的话,处理速度仍然缓慢。比如说,如果m是500万或5000万或者更大的一个数,在对整个训练集执行梯度下降法时,你要做的是,你必须处理整个训练集,然后才能进行一步梯度下降法,然后你需要再重新处理500万个训练样本,才能进行下一步梯度下降法。
改进:你可以把训练集分割为小一点的子集训练,这些子集被取名为mini-batch,假设每一个子集中只有1000个样本,那么把其中的x((1))到x((1000))取出来,将其称为第一个子训练集,也叫做mini-batch,然后你再取出接下来的1000个样本,从x((1001))到x((2000)),然后再取1000个样本,以此类推。
实现过程:
1:x((1))到x((1000))称为X({1}),x((1001))到x((2000))称为X({2}),如果你的训练样本一共有500万个,每个mini-batch都有1000个样本ÿ