吴恩达神经网络与深度学习——浅层神经网络
神经网络概述
神经网络表示
计算神经网络的输出
m个样本的向量化
for loop
向量化
X:(nx,m)竖向指标代表神经网络的不同节点,横向指标代表不同的训练样本
向量化实现的解释
激活函数
sigmoid
除非用在二元分类的输出层,不然绝对不用,因为thah函数在任何场合都适用
tanh函数
sigmoid类函数的缺点是z特别大或特别小时斜率为0,会拖慢梯度下降的速度,使学习速率下降。
ReLu函数
默认使用
在实践中使用ReLu函数,神经网络的学习速率块,因为ReLu类函数没有sigmoid类函数在斜率接近于0时拖慢学习速率的特征。
ReLu由于NN有足够多的隐藏单元,使z>0.
Leaky ReLu函数
神经网络的一个特点是:在建立神经网络时,经常会有许多不同的选择比如隐藏单元数,激活函数,初始化权重等。
为什么需要非线性激活函数
事实证明:要让NN能够计算出有趣的函数,必须使用非线性激活函数
两个线性函数的组合本身就是线性函数,不能计算出有趣的函数;唯一可以用线性激活函数的地方是输出层,例如预测房价;除了这种情况,会在隐藏层用线性激活函数的,可能除了与压缩有关的一些特殊情况。
激活函数的导数
sigmoid
tanh函数
ReLu函数
if z>0
if z<0
Leaky ReLu函数
if z>0
if z<0
神经网络的梯度下降
浅层神经网络
参数
w^[1](n^[1]*n^[0]),
b^[1](n^[1]*1),
w^[2](n^[2]*n^[1]),
b^[2]( n^[2] *1)
n_x=n^[0],n^[1],n^[2]=1
代价函数
梯度下降
repeat{
compute predict(yhat^[i],i=1,2,...,m)
dw^[1] = dJ/dw^[1] db^[1] = dJ/db^[1] ......
w^[1] = w^[1]-alpha*dw^[1]
b^[1] = w^[1]-alpha*db^[1]
......
}
正向传播
反向传播
dZ^[2] = A^[2]-Y
dW^[2] = (1/m)dZ^[2](A^[1])^T
db^[2] = (1/m)np.sum(dZ^[2],axis=1(竖直相加),keepdims = True(防止Python直接输出轶为1的数组))
aZ^[1] = (W^[1])^TdZ^[2]*(g^[1])'(Z^[1])##*逐元素相乘
dW^[1] = (1/m)dZ^[1](X)^T
db^[2] = (1/m)np.sum(dZ^[1],axis=1(竖直相加),keepdims = True(防止Python直接输出轶为1的数组))
直观理解反向传播
Logistic回归
浅层神经网络
矩阵运算维度一定要匹配
m个样本的梯度下降
随机初始化权重
NN中,若权重初始化为0,则无效
w1 = np.random.randn((2,2))*0.01
b1 = np.zeros((2,1))
w2 = np.random.randn((1,2))*0.01
b2 = np.zeros(1,1))