在吴恩达深度学习视频以及大树先生的博客提炼笔记基础上添加个人理解,原大树先生博客可查看该链接地址大树先生的博客- ZJ
CSDN:http://blog.csdn.net/junjun_zhao/article/details/79228850
4.1 Deep Neural Network (深层神经网络 )
神经网络层数表示:只算 隐含层 和 输出层,不算 输入层。
符号约定:
L = 4 (# layers)
n[l] n [ l ] = # units in layer l l
hidden layer : 隐含层
output layer : n[4]=n[L]=1 n [ 4 ] = n [ L ] = 1 输出层
input layer: n[0]=nx=3 n [ 0 ] = n x = 3 输入层
a[l] a [ l ] =activations in layer l l 激活函数层
W[l]= W [ l ] = weights for Z[l] Z [ l ]
b[l] b [ l ] is used to compute z[l] z [ l ]
x=a[0] x = a [ 0 ] 输入特征 x x 也是第 0 层 激活函数
预测输出也是激活函数第 l l 层
4.2 Forward and Backward Propagation (前向和反向传播)
构成深度神经网络的基本模块:每一层都有前向传播的步骤,以及一个相对的反向传播步骤。
前向传播 Forward Propogation for layer :
Input:a[l−1] I n p u t : a [ l − 1 ] // a 符号代表激活函数层 ,当 l l = 1 时,则 为特征 x x
对比看:( z=wTx+b z = w T x + b )
z[l]=w[l]a[l−1]+b[l] z [ l ] = w [ l ] a [ l − 1 ] + b [ l ]
对比看:( a=σ(z) a = σ ( z ) )
a[l]=g[l](z[l]) a [ l ] = g [ l ] ( z [ l ] )
Vectorized 将以上向量化:
Z[l]=W[l]A[l−1]+b[l] Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ]
A[l]=g[l](Z[l]) A [ l ] = g [ l ] ( Z [ l ] )
a[0] a [ 0 ] :是对于一个训练样本的输入特征。
A[0] A [ 0 ] :是针对一整个训练集的话输入特征。
反向传播(Backward propagation)
Input:da[l] I n p u t : d a [ l ]
Output:da[l−1],dW[l],db[l] O u t p u t : d a [ l − 1 ] , d W [ l ] , d b [ l ]
公式:
dz[l]=da[l]∗g[l]′(z[l])dW[l]=dz[l]⋅a[l−1]db[l]=dz[l]da[l−1]=W[l]T⋅dz[l] d z [ l ] = d a [ l ] ∗ g [ l ] ′ ( z [ l ] ) d W [ l ] = d z [ l ] ⋅ a [ l − 1 ] d b [ l ] = d z [ l ] d a [ l − 1 ] = W [ l ] T ⋅ d z [ l ]
da[l−1]代入dz[l] d a [ l − 1 ] 代 入 d z [ l ] ,有:
- 向量化:
上面这部分可以结合 Coursera | Andrew Ng (01-week-3-3.9)—神经网络的梯度下降法 以及 Coursera | Andrew Ng (01-week-3-3.10)—直观理解反向传播 回忆一下 中间省略的求导过程。
大致提一下:
a=σ(z)=11+e−z a = σ ( z ) = 1 1 + e − z
σ(z)′=a(1−a) σ ( z ) ′ = a ( 1 − a )
又因为 da=−ya+(1−y)1−a d a = − y a + ( 1 − y ) 1 − a
且 dz=dLda⋅dadz=da⋅g(z)′ d z = d L d a ⋅ d a d z = d a ⋅ g ( z ) ′
剩下的再根据上面两个链接去推导就可以了。
反向传播辅助理解:已知输入 da[l] d a [ l ] , 最终要求得的是 da[l−1] d a [ l − 1 ] ,但是中间需要先求出 dz[l] d z [ l ] ,然后才可以得出 dw[l] d w [ l ] , db[l] d b [ l ] ,最终求得 da[l−1] d a [ l − 1 ]
4.3 Forward propagation in a deep neural network 深层网络中的前向传播
x=a[0] x = a [ 0 ]
基本规律:
向量化:
X=A[0] X = A [ 0 ]
基本规律:
4.4 Getting your matrix dimensions right (核对矩阵的维数)
Summary:
z[l]=g[l](a[l]) z [ l ] = g [ l ] ( a [ l ] ) z z 和 的维度应该相等
向量化:
其中 b[1]:(n[1],1) b [ 1 ] : ( n [ 1 ] , 1 ) 经 Python broadcasting → (n[1],m) ( n [ 1 ] , m )
4.5 Why deep representations? 为什么使用深层表示
为什么使用深层表示
人脸识别和语音识别:
对于人脸识别,神经网络的第一层从原始图片中提取人脸的轮廓和边缘,每个神经元学习到不同边缘的信息;网络的第二层将第一层学得的边缘信息组合起来,形成人脸的一些局部的特征,例如眼睛、嘴巴等;后面的几层逐步将上一层的特征组合起来,形成人脸的模样。随着神经网络层数的增加,特征也从原来的边缘逐步扩展为人脸的整体,由整体到局部,由简单到复杂。层数越多,那么模型学习的效果也就越精确。
对于语音识别,第一层神经网络可以学习到语言发音的一些音调,后面更深层次的网络可以检测到基本的音素,再到单词信息,逐渐加深可以学到短语、句子。
所以从上面的两个例子可以看出随着神经网络的深度加深,模型能学习到更加复杂的问题,功能也更加强大。
电路逻辑计算:
假定计算异或逻辑输出:
对于该运算,若果使用深度神经网络,每层将前一层的相邻的两单元进行异或,最后到一个输出,此时整个网络的层数为一个树形的形状,网络的深度为 O(log2(n)) O ( l o g 2 ( n ) ) ,共使用的神经元的个数为:
即输入个数为 n,输出个数为 n-1。
但是如果不适用深层网络,仅仅使用单隐层的网络(如右图所示),需要的神经元个数为 2n−1 2 n − 1 个 。同样的问题,但是深层网络要比浅层网络所需要的神经元个数要少得多。
4.6 Building blocks of deep neural networks 搭建深层神经网络块
w[l]:=w[l]−α⋅dw[l]b[l]:=b[l]−α⋅db[l] w [ l ] := w [ l ] − α ⋅ d w [ l ] b [ l ] := b [ l ] − α ⋅ d b [ l ]
4.7 Parameters vs Hyperparameters (参数 VS 超参数)
参数:
参数即是我们在过程中想要模型学习到的信息, W[l],b[l] W [ l ] , b [ l ] 。
超参数:
超参数即为控制参数的输出值的一些网络信息,也就是超参数的改变会导致最终得到的参数 W[l],b[l] W [ l ] , b [ l ] 的改变。
举例:
学习速率: α α
迭代次数:
隐藏层的层数: L L
每一层的神经元个数:
激活函数 g(z) g ( z ) 的选择
参考文献:
[1]. 大树先生.吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-4)– 浅层神经网络
PS: 欢迎扫码关注公众号:「SelfImprovementLab」!专注「深度学习」,「机器学习」,「人工智能」。以及 「早起」,「阅读」,「运动」,「英语 」「其他」不定期建群 打卡互助活动。