浅层神经网络:
一、浅层神经网络的表示
本文中的浅层神经网络指的是 two layer nn 即 one input layer + one hidden layer + one output layer。通常计算神经网络的层数不包括 input layer 。
notation:
上标 [l]:代表第l层,Input layer 为[0]
下标i:表示第i个unit,也可以看做第i行
二、神经网络的计算
每个unit都需要进行z和a的计算:
各参数矩阵的维度:
W[1]: (4,3), b[1]: (4,1)
W[2]: (1,4), b[2]: (1,1)
即:W[I]:(nl,n(l-1)), b[l]:(nl,1), nl表示第l层的unit的个数
注意:这里的 W[l] 表示的是已经对列堆起来的 W[l] 的转置
三、前向传播的向量化实现
single example的向量化:
multiple example的向量化:
X:(nx,m),m个example,每个用一列表示
上标(i):代表第i个example,从1开始
multiple example的向量化的理解:
主要就是弄清楚矩阵相乘的过程,就是重复进行single example的计算,然后把它们的结果列堆叠成矩阵。A/Z矩阵的每一行表示同一个unit的不同example的结果,每一列表示同一个example的不同unit的结果。
四、激活函数(activation function)
四种activation function:sigmoid; tanh; ReLU; Leaky ReLU
特点及如何选择:
sigmoid:求导=a(1-a),当|z|比较大的时候,梯度会很小,梯度下降慢。二分类的output layer 一般使用sigmoid
tanh:求导=1-a^2,当|z|比较大的时候,梯度会很小,梯度下降慢。正常比sigmoid好,因为取值为(-1,1)起到归一化的作用均值为0。
ReLU:当z>0时,梯度始终为1,梯度下降块。z<0时,梯度为0,实际使用中影响不大。最常用,首选。
Leaky ReLU:相比ReLU修正了z<0时,梯度为0的缺点。
正常选ReLU。如果不知道该选那个,可以一个一个试,在交叉验证集中评估,找出结果最好的那一个。
为什么要使用激活函数:
如果不使用激活函数或者使用线性激活函数。两个线性函数的组合仍然是线性函数,隐藏神经单元就不起作用了。有时候output layer不使用激活函数,如房价的预测。
五、神经网络的梯度下降
计算公式:左边为single example,右边为multiple example
六、随机初始化
如果在初始时,W,b都设置一样,那么WX+b都一样,通过梯度下降去进行计算dw,得到梯度大小也相等,不管进行多少次迭代,每个隐藏层单元仍然是对称的。无论设置多少个隐藏单元,其最终的影响都是相同的,那么设置多个隐藏神经元只是重复计算,没有作用。
随机初始化代码:
W[1] = np.random.rand((4,3))* 0.01
b[1] = np.zero((4,1))
W的值乘以0.01(不是固定的)是为了使W初始化为较小的值,这是因为如果使用sigmoid或者tanh作为激活函数时,W小则Z=WX+b也比较小,处在激活函数0的附近梯度较大,算法的更新速度比较快。如果W太大,得到的梯度较小,更新会变慢。ReLU和Leaky ReLU作为激活函数时,因为在大于0的时候,梯度均为1,所以可以不用乘0.01。