《吴恩达深度学习》01神经网络和深度学习(第3周浅层神经网络)
分类:
文章
•
2024-08-22 09:35:22
01. 神经网络和深度学习
第三周 浅层神经网络
3.1 神经网络概览
-
z[i]表示第i层
3.2 神经网络表示
- 神经网络的各部分名称

输入层,隐藏层,输出层
- 在计算神经网络层数时,仅计算隐藏层和输出层,不计算输入层。
3.3 计算神经网络的输出
- 隐藏层某个节点示意图

z1[1]=w1[1]Tx+b1[1]
a1[1]=σ(z1[1])
- 向量化计算
z[1]=w[1]Tx+b[1]
a[1]=σ(z[1])
3.4 多个例子中的向量化
-
a[i](j)表示第i层第j个样本
- 令X=[x(1),x(2),⋯,x(m)],则向量化的计算公式为:
z[1]=w[1]X+b[1]
A[1]=σ(z[1])
z[2]=w[2]A[1]+b[2]
A[2]=σ(z[2])
3.5 向量化实现的解释
-
Z[1]=w[1]X的示意图
- 非向量化代码和向量化代码对比总结
3.6 **函数
- **函数g(z[i])
(1) tanh(z)=ez+e−zez−e−z几乎总是比sigmoid函数好(除了输出层)

缺点:当z很大或很小时,tanh和sigmoid斜率会很小,导致梯度下降法不好使
(2) ReLu函数max(0,z)

缺点:当z为负数时,导数为0 → 带有泄露的ReLu
- 总结对比
3.7 为什么需要非线性**函数
- 如果是线性**函数(或称为恒等**函数),则输出值为输入值的线性组合。
- 只有在压缩的相关应用中会在隐藏层使用线性**函数。
3.8 **函数的导数
- sigmoid函数
dzdg(z)=g(z)(1−g(z))
优势:如果已经计算出了函数值,即可快速得到导数值
- tanh函数
dzdg(z)=1−(g(z))2
优势:如果已经计算出了函数值,即可快速得到导数值
- ReLU函数
dzdg(z)=0,z<0
dzdg(z)=1,z≥0(z=0处自行定义)
- 带有泄露的ReLU函数(max(0.01z,z))
dzdg(z)=0.01,z<0
dzdg(z)=1,z≥0(z=0处自行定义)
3.9 神经网络的梯度下降法
- 正向传播
z[1]=w[1]X+b[1]
A[1]=g[1](z[1])
$z^{[2]} = $
- 反向传播
dz[2]=A[2]−Y
dw[2]=m1dz[2]A[1]T
db[2]=m1np.sum(dz[2],axis=1,keepdims=True) (最后一项为保证输出维度为(n,1),如果没有最后一项,则输出为(n,))
dz[1]=w[2]Tdz[2]∗g[1]′(z[1])
dw[1]=m1dz[1]XT
db[1]=m1np.sum(dz[1],axis=1,keepdims=True)
3.11 随机初始化
- 若零初始化,则意味着节点完全相同,且对输出单元影响完全一样,则更新后,隐藏单元仍然相同,这样的隐藏单元没有意义。
- 通常意义下的初始化:
w[1]=np.random.randn((2,2))∗0.01
b[1]=np.zeros((2,1))
- 常数需要设置较小,因为若是sigmoid或tanh函数,则太大的时候会梯度小,收敛慢。