吴恩达深度学习笔记整理(一)
本文根据吴恩达深度学习课程内容,抽取重要知识点进行整理,目录如下
吴恩达深度学习
Course 1 神经网络和深度学习
Week 1 Introduction to deep learning
在这一周的课程中,首先构建了一个预测房子价格的简单神经网络,输入为房子的大小,经过一个单个的神经元,输出为房子的价格。
根据预测房屋价格的问题,可以继续扩展,房屋的其他属性如:卧室的数量,所在的位置等等都和最后的房屋价格有关
为什么要使用深度神经网络?
Week 2 Basics of Neural Network programming
n
x
n_x
nx 或者n:输入向量的维度
x
x
x:输入数据,维度为
(
n
x
,
1
)
(n_x,1)
(nx,1)
y
y
y:输出数据
(
x
(
i
)
,
y
(
i
)
)
(x^{(i)}, y^{(i)})
(x(i),y(i)):表示第i组数据
X
=
[
x
(
i
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
]
X = [x^{(i)},x^{(2)},...,x^{(m)}]
X=[x(i),x(2),...,x(m)]:表示所有训练数据集的输入值,放在一个
n
x
∗
m
n_x * m
nx∗m的矩阵中,m表示样本数目。
Y
=
[
y
(
i
)
,
y
(
2
)
,
.
.
.
,
y
(
m
)
]
Y = [y^{(i)},y^{(2)},...,y^{(m)}]
Y=[y(i),y(2),...,y(m)]:对应表示所有训练集的输出值
以最简单的Logistic Regression 为例
y
^
=
w
T
x
+
b
\hat{y} = w^Tx+b
y^=wTx+b
其中
w
w
w为权重,是一个
(
n
x
,
1
)
(n_x,1)
(nx,1)的向量
y
^
=
P
(
y
=
1
∣
x
)
0
≤
y
^
≤
1
\hat{y} = P(y=1|x) 0\le\hat{y}\le1
y^=P(y=1∣x)0≤y^≤1
但
w
T
x
+
b
w^Tx+b
wTx+b不一定在[0,1]之间,所以需要激活函数
最终Output:
y
^
=
σ
(
w
T
x
+
b
)
\hat{y} = \sigma(w^Tx+b)
y^=σ(wTx+b)
对于单个样本的损失函数
L
(
y
^
,
y
)
L(\hat{y},y)
L(y^,y)
在这里不用平方差来计算,使用对数函数
L
(
y
^
,
y
)
=
−
y
l
o
g
(
y
^
)
−
(
1
−
y
)
l
o
g
(
1
−
y
^
)
L(\hat{y},y) = -ylog(\hat{y})-(1-y)log(1-\hat{y})
L(y^,y)=−ylog(y^)−(1−y)log(1−y^)
对于整个算法代价函数
J
(
w
,
b
)
J(w,b)
J(w,b)
J ( w , b ) = 1 m ∑ i = 1 m L ( y ( i ) ^ , y ) J(w, b) = \frac{1}{m}\sum_{i=1}^mL(\hat{y^{(i)}},y) J(w,b)=m1∑i=1mL(y(i)^,y)
应用梯度下降法:
w
:
=
w
−
α
∂
J
(
w
,
b
)
∂
w
w:=w-\alpha\frac{\partial{J(w,b)}}{\partial{w}}
w:=w−α∂w∂J(w,b)
b : = b = α ∂ J ( w , b ) ∂ b b:=b=\alpha\frac{\partial{J(w,b)}}{\partial{b}} b:=b=α∂b∂J(w,b)
这里在简单介绍一下计算图
举例:
J
(
a
,
b
,
c
)
=
3
(
a
+
b
c
)
J(a, b, c) = 3(a+bc)
J(a,b,c)=3(a+bc)
令
u
=
b
c
u = bc
u=bc ,
v
=
a
+
u
v = a+u
v=a+u ,
J
=
3
v
J = 3v
J=3v
黑色为前向传播,红色为反向传播
Week 3 Shallow neutral networks
以下图所示的神经网络为例,
[
m
]
[m]
[m]表示第m层网络中相关结点的数目
三个常用的激活函数
-
sigmoid 函数
a = σ ( z ) = 1 1 + e − z a = \sigma{(z)} = \frac{1}{1+e^{-z}} a=σ(z)=1+e−z1
导数:
d ( g ( z ) d z = 1 1 + e − z ( 1 − 1 1 + e − z ) = g ( z ) ( 1 − g ( z ) ) \frac{d(g(z)}{dz} = \frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}}) = g(z)(1-g(z)) dzd(g(z)=1+e−z1(1−1+e−z1)=g(z)(1−g(z))
g ′ ( z ) = g ( z ) ( 1 − g ( z ) ) = a ( 1 − a ) g'(z) = g(z)(1-g(z)) = a(1-a) g′(z)=g(z)(1−g(z))=a(1−a)
在 z z z特别大或者特别小的情况下,导数的梯度会特别小,最后接近0,使梯度下降速度过小
-
tanh函数
a = t a n h ( z ) = e z − e − z e z + e − z a = tanh(z) = \frac{e^z-e^{-z}}{e^z+e^{-z}} a=tanh(z)=ez+e−zez−e−z
导数:
d g ( z ) d z = 1 − ( t a n h ( z ) ) 2 \frac{dg(z)}{dz} = 1 - (tanh(z))^2 dzdg(z)=1−(tanh(z))2
值域在-1到1之间,数据均值更接近0而不是0.5
-
Relu函数
a = m a x ( 0 , z ) a = max(0,z) a=max(0,z)
导数:
g ′ ( x ) = { 0 z < 0 1 z > 0 u n d e f i n e d z = 0 g'(x)=\left\{ \begin{array}{cl} 0 & & {z < 0}\\ 1 & & {z > 0}\\ undefined & & {z = 0}\\ \end{array} \right. g′(x)=⎩⎨⎧01undefinedz<0z>0z=0
z是正值的情况下,导数恒等于1,当z是负值的情况下,导数恒等于0
sigmoid 函数:除了是一个二分类问题基本不会用
tanh函数:几乎适合所有的场合
Relu函数:最常用的默认函数,不知道用什么函数就用它
Week 4 Deep neutral networks
输入的特征记作
x
x
x,但
x
x
x同样也是0层的激活函数后的结果
x
=
a
[
0
]
x = a^{[0]}
x=a[0]
最后一层激活函数后的结果
a
[
l
]
a{[l]}
a[l],也是这个神经网络所预测的输出结果
下面对矩阵的维数进行讨论:
w
w
w的维度:(下一层的维数,前一层的维数)
w
[
l
]
:
(
n
[
l
]
,
n
l
−
1
]
)
w^{[l]}:(n^{[l]},n^{l-1]})
w[l]:(n[l],nl−1])
b b b的维度:(下一层的维数,1) b [ l ] : ( n [ l ] , 1 ) b^{[l]}:(n^{[l]},1) b[l]:(n[l],1)
z [ l ] , a [ l ] : ( n [ l ] , 1 ) z^{[l]},a^{[l]} : (n^{[l]},1) z[l],a[l]:(n[l],1)
对多个样本向量化后得到 z [ l ] z^{[l]} z[l]的维度:
z [ l ] : ( n [ l ] , m ) z^{[l]} : (n^{[l]},m) z[l]:(n[l],m)
深层的网络隐藏单元数量相对较少,隐藏层数目比较多
下面是神经网络的计算过程:
一些超参
学习率(Learning Rate):
α
\alpha
α
梯度下降法循环的次数:iterations
隐藏层的数目:L
隐藏层的单元树木:
n
[
l
]
n^{[l]}
n[l]