本笔记系列参照吴恩达深度学习课程的视频和课件,并在学习和做练习过程中从CSDN博主何宽分享的文章中得到了帮助,再此表示感谢。
本周主要学习的内容有:神经网络概览、神经网络表示、计算神经网络的输出、多个例子中的向量化、向量化实现的解释、激活函数、为什么需要非线性激活函数、激活函数的导数、神经网络的梯度下降法、直观理解反向传播、随机初始化
一、本周学习内容要点:
多神经元网络模型结构,如图1所示
图
1
图1
图1
前向传播,四个方程:
Z
[
1
]
=
W
[
1
]
X
+
b
[
1
]
(1)
Z^{[1]}=W^{[1]}X+b^{[1]}\tag1
Z[1]=W[1]X+b[1](1)
A
[
1
]
=
σ
(
Z
[
1
]
)
(2)
A^{[1]}= \sigma(Z^{[1]}) \tag2
A[1]=σ(Z[1])(2)
Z
[
2
]
=
W
[
2
]
A
[
1
]
+
b
[
2
]
(3)
Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]}\tag3
Z[2]=W[2]A[1]+b[2](3)
A
[
2
]
=
σ
(
Z
[
2
]
)
(4)
A^{[2]}=\sigma(Z^{[2]})\tag4
A[2]=σ(Z[2])(4)
后向传播,六个方程,如图2所示
图
2
图2
图2
二、本周学习内容的主要疑难点:神经网络的输出向量化实现和单个神经元的输出向量化实现之间的不同
-
先回顾单个神经元模型的m个样本输出的向量化实现:
单个神经元模型
图 3 图3 图3
其中激活函数为sigmoid函数,因此对于m个样本的单个神经元的输出向量化表示如图4中红色框框表示:
图 4 图4 图4
对于m个样本的单个神经元模型的输出向量化表示为:
Z = W T X + b (5) Z=W^TX+b\tag5 Z=WTX+b(5)
A = σ ( Z ) (6) A=\sigma(Z)\tag6 A=σ(Z)(6) -
我们再看看多个神经元模型m个样本的输出向量化实现:
多个神经元模型如图5所示
图 5 图5 图5
对于m个样本的多个神经元模型的输出的向量化表示为:上文(1)(2)(3)(4)公式所示
对比(5)(6)和(1)(2)(3)(4)公式,不难发现W和X的乘积有些变化,单个神经元模型需要将权重参数矩阵W转置后再与特征向量X相乘,而多个神经元模型却直接将权重参数矩阵W与特征向量X相乘
其实,多个神经元模型的权重参数矩阵W是把每个节点参数W向量转置堆叠形成的,如图6所示
图
6
图6
图6
从图6可以看出第1隐藏层的权重参数矩阵
W
[
1
]
W^{[1]}
W[1]是由该层每个神经元节点权重参数向量
w
1
[
1
]
w_1^{[1]}
w1[1] 、
w
2
[
1
]
w_2^{[1]}
w2[1]、
w
3
[
1
]
w_3^{[1]}
w3[1] 、
w
4
[
1
]
w_4^{[1]}
w4[1]转置堆叠而成,即
W
[
1
]
W^{[1]}
W[1]=[[
w
1
[
1
]
T
w_1^{[1]T}
w1[1]T],[
w
2
[
1
]
T
w_2^{[1]T}
w2[1]T],[
w
3
[
1
]
T
w_3^{[1]T}
w3[1]T],[
w
4
[
1
]
T
w_4^{[1]T}
w4[1]T]],所以在做本周吴恩达深度学习课程练习的时候,要特别注意权重参数矩阵
W
[
1
]
W^{[1]}
W[1]的行(R)等于该层神经元的个数,而它的列(C)等于输入特征向量的行数。
三、在做练习写代码的过程中,可以记住下面的思维逻辑线:
- 1.Package 导入模块
- 2.Dataset 导入数据
- 3.*Simple Logistic Regression 简单的逻辑回归,为了与后面的神经网络做个对比 *
- 4.Neural Network Model神经网络模型(本次练习的主菜)
1)layer_size(X, Y) --> n_x, n_h, n_y 输入数据返回神经网络每层的节点个数
2)initial_parameters(n_x, n_h, n_y) --> parameters(是一个字典,包括了W1,W2,b1,b2)
3)forward_propagation(X, parameters) --> A2, cache (cache是一个字典,包含A1,A2,Z1,Z2)
4)compute_cost(A2, Y, parameters) --> cost
5)backward_propagation(parameters, cache, X, Y) --> gradient (是一个字典,包含了dW1,dW2,db1,db2)
6)update_parameters(parameters, grads, learning_rate = 1.2) --> parameters(是一个字典,包括了W1,W2,b1,b2,这些参数是更新过一次的)
7)nn_model(X, Y, n_h, num_iterations = 10000, print_cost=False) --> parameters(是一个字典,包括了W1,W2,b1,b2,这些参数是更新到最后的结果)