吴恩达深度学习——深层神经网络
来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习所用。
符号约定
对于该深层网络,有四层,包含三个隐藏层和一个输出层。
隐藏层中,第一层有五个单元、第二层有五个单元,第三层有三个单元。标记 l l l表示层数, l = 4 l=4 l=4。标记 n [ l ] n^{[l]} n[l]表示第几层, n [ 1 ] n^{[1]} n[1]是第一层,有5个节点; n [ 3 ] n^{[3]} n[3]是第三层,有3个节点。 n [ 4 ] n^{[4]} n[4]是输出层,只有一个节点。把输入层也叫 n [ 0 ] n^{[0]} n[0]有三个输入特征, n [ 0 ] = n x = 3 n^{[0]} = n_x=3 n[0]=nx=3。 a [ l ] a^{[l]} a[l]表示第 l l l层中的激活函数,表示为 a [ l ] = g [ l ] ( z [ l ] ) a^{[l]}=g^{[l]}(z^{[l]}) a[l]=g[l](z[l])。
计算矩阵的维度
对于该神经网络,有四个隐藏层和一个输出层。如何计算
W
\mathbf{W}
W与
b
\mathbf{b}
b应该开辟多大(维度)?
输入特征是x1,x2,是一个(2,1)的向量。对于第一个隐藏层,从神经网络中看到,输出了(3,1)的向量,由
z
[
1
]
=
W
[
1
]
x
+
b
[
1
]
\mathbf{z}^{[1]}=\mathbf{W}^{[1]}\mathbf{x}+\mathbf{b}^{[1]}
z[1]=W[1]x+b[1]代入向量维度,根据矩阵乘法
和矩阵加法
,有(3,1)=(3,2)(2,1)+(3,1)刚好匹配维度。
层次 | 表达式 | 计算 |
---|---|---|
n [ 1 ] n^{[1]} n[1] | z [ 1 ] = W [ 1 ] x + b [ 1 ] \mathbf{z}^{[1]}=\mathbf{W}^{[1]}\mathbf{x}+\mathbf{b}^{[1]} z[1]=W[1]x+b[1] a [ 1 ] = g ( z [ 1 ] ) \mathbf{a}^{[1]}=g(\mathbf{z}^{[1]}) a[1]=g(z[1]) | ( 3 , 1 ) = ( 3 , 2 ) ( 2 , 1 ) + ( 3 , 1 ) (3,1)=(3,2)(2,1)+(3,1) (3,1)=(3,2)(2,1)+(3,1) |
n [ 2 ] n^{[2]} n[2] | z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] \mathbf{z}^{[2]}=\mathbf{W}^{[2]}\mathbf{a}^{[1]}+\mathbf{b}^{[2]} z[2]=W[2]a[1]+b[2] . . . ... ... | ( 5 , 1 ) = ( 5 , 3 ) ( 3 , 1 ) + ( 5 , 1 ) (5,1)=(5,3)(3,1)+(5,1) (5,1)=(5,3)(3,1)+(5,1) |
n [ 3 ] n^{[3]} n[3] | z [ 3 ] = W [ 3 ] a [ 2 ] + b [ 3 ] \mathbf{z}^{[3]}=\mathbf{W}^{[3]}\mathbf{a}^{[2]}+\mathbf{b}^{[3]} z[3]=W[3]a[2]+b[3] . . . ... ... | ( 4 , 1 ) = ( 4 , 5 ) ( 5 , 1 ) + ( 4 , 1 ) (4,1)=(4,5)(5,1)+(4,1) (4,1)=(4,5)(5,1)+(4,1) |
n [ 4 ] n^{[4]} n[4] | z [ 4 ] = W [ 4 ] a [ 3 ] + b [ 4 ] \mathbf{z}^{[4]}=\mathbf{W}^{[4]}\mathbf{a}^{[3]}+\mathbf{b}^{[4]} z[4]=W[4]a[3]+b[4] . . . ... ... | ( 2 , 1 ) = ( 2 , 4 ) ( 4 , 1 ) + ( 2 , 1 ) (2,1)=(2,4)(4,1)+(2,1) (2,1)=(2,4)(4,1)+(2,1) |
n [ 5 ] n^{[5]} n[5] | z [ 5 ] = W [ 5 ] a [ 4 ] + b [ 5 ] \mathbf{z}^{[5]}=\mathbf{W}^{[5]}\mathbf{a}^{[4]}+\mathbf{b}^{[5]} z[5]=W[5]a[4]+b[5] . . . ... ... | ( 1 , 1 ) = ( 1 , 2 ) ( 2 , 1 ) + ( 1 , 1 ) (1,1)=(1,2)(2,1)+(1,1) (1,1)=(1,2)(2,1)+(1,1) |
W [ l ] : ( 本层神经元数量 , 上一层神经元数量 ) \mathbf{W}^{[l]}:(本层神经元数量, 上一层神经元数量) W[l]:(本层神经元数量,上一层神经元数量)
为什么使用深层表示
对于一张图片,想建立一个人脸识别系统。当输入一张脸部的照片,隐藏层第一层寻找脸部特征的边缘的方向,然后将边缘层的像素放在一起组成面部的不同部分,最后在将这些放在一起,识别或探测不同的人脸。
搭建神经网络块
参数和超参数
回顾这些公式
z
=
w
x
+
b
z=wx+b
z=wx+b
a
=
σ
(
z
)
a=\sigma(z)
a=σ(z)
J
=
−
1
n
∑
n
i
=
1
[
y
i
l
o
g
(
y
^
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
y
^
i
)
]
J=−\frac{1}{n}\sum_{n}^{i=1} [y_ilog(\hat{y}_i)+(1−y_i)log(1−\hat{y}_i)]
J=−n1n∑i=1[yilog(y^i)+(1−yi)log(1−y^i)]
有参数
w
w
w、
b
b
b。
在编程的时候,也会引入一些其他的参数,比如学习率
α
\alpha
α,迭代的次数、隐藏层层数、选用什么激活函数的问题…与
w
w
w和
b
b
b不同,这些参数需要自己去设置,被称为超参数
,能够控制
w
w
w和
b
b
b。对于这些参数的设置是一个很经验的东西。