:1.神经网络概论
2.神经网络的表示
一个两层的神经网络:
输入层(一般不被包括):一系列特征向量
隐藏层:无法看到值
输出层:一个节点,负责输出预测值
,即[当前层的节点数,上一层传递的激活值]
3.向量化
:代表第i层的第m个样本
:j*m维的向量,横向m代表样本,纵向j代表节点,
4.激活函数
一般只用着二分分类的输出层,范围是[0,1]
在隐藏层中使用Tanh函数要好得多。(由于函数的零均值),范围是[-1,1]
图像:
修正线性单元ReLU(z)=max(0,z)
默认的选择
图像:
leaky_ReLU(z)=max(0.01z,z)
0.01可以当成参数
图像:
需要激活函数:如果不要激活函数,就相当与只是将输入线性组合再输出
5.激活函数的导数
Sigmoid激活函数的导数:
g’(z) = g(z) * (1 - g(z))
Tanh激活函数的导数:
g’(z) = 1 - np.tanh(z)^2 = 1 - g(z)^2
RELU激活函数的导数:
g’(z) = { 0 if z<0
1 if z>=0 }
泄漏RELU激活函数的导数:
g’(z) = { 0.01 if z<0
1 if z>=0 }
6.神经网络的梯度下降算法
7.随机初始化
如果我们在NN中用零来初始化权重,它将不起作用,每个单元相当与在做相同的操作
我们用一个小的随机数初始化W:
W1 = np.random.randn((2,2)) * 0.01 #0.01 to make it small enough
b1 = np.zeros((2,1)) # its ok to have b as zero, it won’t get us to the symmetry problem.
我们需要小的值,因为在sigmoid中,例如,如果数字很大,斜率很小,学习会很慢。
对于1个隐藏的神经元,0.01是可以的,但是如果神经网络很深,这个数字可以改变,但它总是一个很小的数字
8.实践