1、神经网络基础
1.1 从二分类问题定义神经网络
符号说明:
- 训练数据: ( x , y ) = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , ⋯   , ( x ( m ) , y ( m ) ) } (x, y) = \{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\cdots,(x^{(m)},y^{(m)})\} (x,y)={(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))},训练样本包含m个;
- 其中 x ∈ R n x x\in R^{n_{x}} x∈Rnx,表示样本 x x x包含 n x n_x nx个特征;
-
y
∈
{
0
,
1
}
y\in\{0,1\}
y∈{0,1},目标值属于0、1类;
输入神经网络时样本数据的形状:
注:这里定义X的形状与机器学习中定义的不一样,机器学习中行是样本,列是特征;而神经网络定义的行是特征,列是样本。
1.2 Logistic Regression
神经网络中,Sigmoid函数是其中一种激活函数:
S
i
g
m
o
i
d
(
z
)
=
1
1
+
e
−
z
Sigmoid(z)=\dfrac{1}{1+e^{-z}}
Sigmoid(z)=1+e−z1
常用于神经网络最后一层的激活函数进行分类:
y
^
=
S
i
g
m
o
i
d
(
w
T
x
+
b
)
=
σ
(
w
T
x
+
b
)
\hat y = Sigmoid(w^{T}x+b)=\sigma(w^{T}x+b)
y^=Sigmoid(wTx+b)=σ(wTx+b)
注:Sigmoid函数有个很重要的性质,一阶导数可以用自身表示:
   \;
σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) \sigma'(z)=\sigma(z)(1-\sigma(z)) σ′(z)=σ(z)(1−σ(z))
- 这里可以解释
梯度消失
的问题,当 z = 0 z=0 z=0时,导数最大,但是导数最大为 σ ′ ( 0 ) = σ ( 0 ) ( 1 − σ ( 0 ) ) = 0.5 ( 1 − 0.5 ) = 0.25 \sigma'(0)=\sigma(0)(1-\sigma(0))=0.5(1-0.5)=0.25 σ′(0)=σ(0)(1−σ(0))=0.5(1−0.5)=0.25,这里导数仅为原函数值的0.25倍。- 参数梯度下降公式的不断更新, σ ′ ( z ) σ′(z) σ′(z)会变得越来越小,每次迭代参数更新的步伐越来越小,最终接近于0,产生梯度消失的现象。
1.3 损失函数
(1)Loss function
一般经验来说,使用平方损失(squared error)来衡量Loss Function:
L
(
y
^
,
y
)
=
1
2
(
y
^
−
y
)
2
L(\hat y, y)=\dfrac{1}{2}(\hat y-y)^{2}
L(y^,y)=21(y^−y)2
但是,对于logistic regression 来说,一般不适用平方损失来作为Loss Function,这是因为上面的平方损失函数一般是非凸函数(non-convex),其在使用梯度下降算法的时候,容易得到局部最优解,而不是全局最优解。因此要选择凸函数。
逻辑回归的Loss Function:
L
(
y
^
,
y
)
=
−
(
y
log
y
^
+
(
1
−
y
)
log
(
1
−
y
^
)
)
L(\hat y, y)=-(y\log\hat y+(1-y)\log(1-\hat y))
L(y^,y)=−(ylogy^+(1−y)log(1−y^))
- 当 y = 1 y=1 y=1时, L ( y ^ , y ) = − l o g y ^ L(\hat y,y)=−log\hat y L(y^,y)=−logy^。如果 y ^ \hat y y^越接近1, L ( y ^ , y ) ≈ 0 L(\hat y, y) \approx 0 L(y^,y)≈0,表示预测效果越好;如果 y ^ \hat y y^越接近0, L ( y ^ , y ) ≈ + ∞ L(\hat y, y) \approx +\infty L(y^,y)≈+∞,表示预测效果越差;
- 当 y = 0 y=0 y=0时, L ( y ^ , y ) = − l o g ( 1 − y ^ ) L(\hat y,y)=−log(1-\hat y) L(y^,y)=−log(1−y^)。如果 y ^ \hat y y^越接近0, L ( y ^ , y ) ≈ 0 L(\hat y, y) \approx 0 L(y^,y)≈0,表示预测效果越好;如果 y ^ \hat y y^越接近1, L ( y ^ , y ) ≈ + ∞ L(\hat y, y) \approx +\infty L(y^,y)≈+∞,表示预测效果越差;
- 我们的目标是最小化样本点Loss Function,损失函数是针对单个样本点的。
(2)Cost function
全部训练数据集的Loss function总和的平均值即为训练集的代价函数(Cost function)。
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
L
(
y
^
(
i
)
,
y
(
i
)
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
log
y
^
(
i
)
+
(
1
−
y
(
i
)
)
log
(
1
−
y
^
(
i
)
)
]
J(w,b)=\dfrac{1}{m}\sum_{i=1}^{m}L(\hat y^{(i)}, y^{(i)})=-\dfrac{1}{m}\sum_{i=1}^{m}\left[y^{(i)}\log\hat y^{(i)}+(1-y^{(i)})\log(1-\hat y^{(i)})\right]
J(w,b)=m1i=1∑mL(y^(i),y(i))=−m1i=1∑m[y(i)logy^(i)+(1−y(i))log(1−y^(i))]
- Cost function是待求系数w和b的函数;
- 我们的目标就是迭代计算出最佳的w和b的值,最小化Cost function,让其尽可能地接近于0。
1.4 梯度下降法
用梯度下降法(Gradient Descent)算法来最小化Cost function,以计算出合适的w和b的值。
每次迭代更新的修正表达式:
w
:
=
w
−
α
∂
J
(
w
,
b
)
∂
w
w:=w-\alpha\dfrac{\partial J(w,b)}{\partial w}
w:=w−α∂w∂J(w,b)
b
:
=
b
−
α
∂
J
(
w
,
b
)
∂
b
b:=b-\alpha\dfrac{\partial J(w,b)}{\partial b}
b:=b−α∂b∂J(w,b)
在程序代码中,我们通常使用dw来表示
∂
J
(
w
,
b
)
∂
w
\dfrac{\partial J(w,b)}{\partial w}
∂w∂J(w,b),用db来表示
∂
J
(
w
,
b
)
∂
b
\dfrac{\partial J(w,b)}{\partial b}
∂b∂J(w,b)。
1.5 逻辑回归中的梯度下降法
对单个样本而言,逻辑回归Loss function表达式:
z
=
w
T
x
+
b
y
^
=
a
=
σ
(
z
)
L
(
a
,
y
)
=
−
(
y
log
(
a
)
+
(
1
−
y
)
log
(
1
−
a
)
)
z= w^{T}x+b\\\hat y=a=\sigma(z)\\L(a, y)=-(y\log (a)+(1-y)\log(1-a))
z=wTx+by^=a=σ(z)L(a,y)=−(ylog(a)+(1−y)log(1−a))
反向传播过程:
对da、dz求导:
d
a
=
∂
L
∂
a
=
−
y
a
+
1
−
y
1
−
a
d
z
=
∂
L
∂
z
=
∂
L
∂
a
⋅
∂
a
∂
z
=
(
−
y
a
+
1
−
y
1
−
a
)
⋅
a
(
1
−
a
)
=
a
−
y
da = \dfrac{\partial L}{\partial a}=-\dfrac{y}{a}+\dfrac{1-y}{1-a}\\dz = \dfrac{\partial L}{\partial z}=\dfrac{\partial L}{\partial a}\cdot\dfrac{\partial a}{\partial z}=(-\dfrac{y}{a}+\dfrac{1-y}{1-a})\cdot a(1-a)=a-y
da=∂a∂L=−ay+1−a1−ydz=∂z∂L=∂a∂L⋅∂z∂a=(−ay+1−a1−y)⋅a(1−a)=a−y
对
w
1
、
w
2
w_1、w_2
w1、w2和b进行求导:
d
b
=
∂
L
∂
b
=
∂
L
∂
z
⋅
∂
z
∂
b
=
1
⋅
d
z
=
a
−
y
db = \dfrac{\partial L}{\partial b }=\dfrac{\partial L}{\partial z}\cdot\dfrac{\partial z}{\partial b }=1\cdot dz=a-y
db=∂b∂L=∂z∂L⋅∂b∂z=1⋅dz=a−y
梯度下降法:
w
1
:
=
w
1
−
α
d
w
1
w_{1}:=w_{1}-\alpha dw_{1}
w1:=w1−αdw1
w
2
:
=
w
2
−
α
d
w
2
w_{2}:=w_{2}-\alpha dw_{2}
w2:=w2−αdw2
b
:
=
b
−
α
d
b
b:=b-\alpha db
b:=b−αdb
1.6 m个样本的梯度下降
(1)单个样本表示:
对m个样本来说,其Cost function表达式如下:
z
(
i
)
=
w
T
x
(
i
)
+
b
y
^
(
i
)
=
a
(
i
)
=
σ
(
z
(
i
)
)
J
(
w
,
b
)
=
1
m
∑
i
=
1
m
L
(
y
^
(
i
)
,
y
(
i
)
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
log
y
^
(
i
)
+
(
1
−
y
(
i
)
)
log
(
1
−
y
^
(
i
)
)
]
z^{(i)}= w^{T}x^{(i)}+b\\\hat y^{(i)}=a^{(i)}=\sigma(z^{(i)})\\J(w,b)=\dfrac{1}{m}\sum_{i=1}^{m}L(\hat y^{(i)}, y^{(i)})=-\dfrac{1}{m}\sum_{i=1}^{m}\left[y^{(i)}\log\hat y^{(i)}+(1-y^{(i)})\log(1-\hat y^{(i)})\right]
z(i)=wTx(i)+by^(i)=a(i)=σ(z(i))J(w,b)=m1i=1∑mL(y^(i),y(i))=−m1i=1∑m[y(i)logy^(i)+(1−y(i))log(1−y^(i))]
Cost function 关于w和b的偏导数可以写成所有样本点偏导数和的平均形式:
d
w
1
=
1
m
∑
i
=
1
m
x
1
(
i
)
(
a
(
i
)
−
y
(
i
)
)
dw_{1} =\dfrac{1}{m}\sum_{i=1}^{m}x_{1}^{(i)}(a^{(i)}-y^{(i)})
dw1=m1i=1∑mx1(i)(a(i)−y(i))
d
b
=
1
m
∑
i
=
1
m
(
a
(
i
)
−
y
(
i
)
)
db = \dfrac{1}{m}\sum_{i=1}^{m}(a^{(i)}-y^{(i)})
db=m1i=1∑m(a(i)−y(i))
(2)向量化表示:避免在程序中使用for循环,提高计算的速度。
- 输入矩阵X: ( n x , m ) (n_x, m) (nx,m)
- 权重矩阵w: ( n x , 1 ) (n_x, 1) (nx,1)
- 偏置b:常数
- 输出矩阵Y: ( 1 , m ) (1,m) (1,m)
所有m个样本的线性输出Z可以用矩阵表示:
Z
=
w
T
X
+
b
Z = w^{T}X+b
Z=wTX+b
逻辑回归梯度下降输出向量化:
dZ对于m个样本,维度为(1,m),表示为:
d
Z
=
A
−
Y
dZ = A - Y
dZ=A−Y
dw可表示为:
d
w
=
1
m
X
⋅
d
Z
T
dw = \dfrac{1}{m}X\cdot dZ^{T}
dw=m1X⋅dZT
db可以表示为:
d
b
=
1
m
∑
i
=
1
m
d
z
(
i
)
db = \dfrac{1}{m}\sum_{i=1}^{m}dz^{(i)}
db=m1i=1∑mdz(i)
2、浅层神经网络
2.1 神经网络表示
单隐层神经网络示意图:
由图中可以看出,层与层之间参数矩阵的规格大小:
- 输入层和隐藏层之间
- w[1]−>(4,3):前面的4是隐层神经元的个数,后面的3是输入层神经元的个数;
- b[1]−>(4,1):和隐藏层的神经元个数相同;
- 隐藏层和输出层之间
- w[1]−>(1,4):前面的1是输出层神经元的个数,后面的4是隐层神经元的个数;
- b[1]−>(1,1):和输出层的神经元个数相同;
由上面我们可以总结出,在神经网络中,我们以相邻两层为观测对象,前面一层作为输入,后面一层作为输出,两层之间的w参数矩阵大小为 ( n o u t , n i n ) (n_{out},n_{in}) (nout,nin),b参数矩阵大小为 ( n o u t , 1 ) (n_{out},1) (nout,1),这里是作为 z = w X + b z=wX+b z=wX+b的线性关系来说明的,在神经网络中, w [ i ] = w T w^{[i]}=w^T w[i]=wT。
注:在逻辑回归中,一般我们都会用 ( n i n , n o u t ) (n_{in},n_{out}) (nin,nout)来表示参数大小,计算使用的公式为: z = w T X + b z=w^TX+b z=wTX+b,要注意这两者的区别。
单个结点示意图:
除输入层之外每层的计算输出示意图:
由图中可以看出,每个结点都对应这两个部分的运算,z运算和a运算。
使用向量化
去计算神经网络的输出:
关于向量化的解释:
2.2 神经网络的前向传播和后向传播:
前向传播和后向传播过程:
反向传播时梯度下降法的参数:
- 参数: W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] W^{[1]},b^{[1]},W^{[2]},b^{[2]} W[1],b[1],W[2],b[2];
- 输入层特征向量个数: n x = n [ 0 ] n_x=n^{[0]} nx=n[0];
- 隐藏层神经元个数: n [ 1 ] n^{[1]} n[1];
- 输出层神经元个数: n [ 2 ] = 1 n^{[2]}=1 n[2]=1;
- W [ 1 ] W^{[1]} W[1]的维度为 ( n [ 1 ] , n [ 0 ] ) (n^{[1]},n^{[0]}) (n[1],n[0]), b [ 1 ] b^{[1]} b[1]的维度为 ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1);
- W [ 2 ] W^{[2]} W[2]的维度为 ( n [ 2 ] , n [ 1 ] ) (n^{[2]},n^{[1]}) (n[2],n[1]), b [ 2 ] b^{[2]} b[2]的维度为 ( n [ 2 ] , 1 ) (n^{[2]},1) (n[2],1);
下面为神经网络反向梯度下降公式(左)和其代码向量化(右):
2.3 神经网络的激活函数
几种常用的激活函数
g
(
x
)
g(x)
g(x):
- sigmoid:
g
(
z
)
=
1
1
+
e
−
z
g(z) = \dfrac{1}{1+e^{-z}}
g(z)=1+e−z1
- 导数: g ′ ( z ) = a ( 1 − a ) g'(z) = a(1-a) g′(z)=a(1−a)
- tanh:
g
(
z
)
=
e
z
−
e
−
z
e
z
+
e
−
z
g(z)=\dfrac{e^{z}-e^{-z}}{e^{z}+e^{-z}}
g(z)=ez+e−zez−e−z
- 导数: g ′ ( z ) = 1 − a 2 g'(z)=1-a^{2} g′(z)=1−a2
- ReLU(修正线性单元):
g
(
z
)
=
m
a
x
(
0
,
z
)
g(z)=max(0,z)
g(z)=max(0,z)
- 导数:
g ′ ( z ) = { 0 , if z < 0 1 , if z > 0 u n d e f i n e ( 任 意 取 值 ) , if z = 0 g'(z) = \begin{cases} 0, & \text{if z < 0} \\ 1, & \text{if z > 0} \\ undefine(任意取值), & \text{if z = 0} \end{cases} g′(z)=⎩⎪⎨⎪⎧0,1,undefine(任意取值),if z < 0if z > 0if z = 0
- 导数:
- Leaky ReLU:
g
(
z
)
=
m
a
x
(
0.01
z
,
z
)
g(z)=max(0.01z,z)
g(z)=max(0.01z,z)
- 导数:
g ′ ( z ) = { 0.01 , if z < 0 1 , if z > 0 u n d e f i n e ( 任 意 取 值 ) , if z = 0 g'(z) = \begin{cases} 0.01, & \text{if z < 0} \\ 1, & \text{if z > 0} \\ undefine(任意取值), & \text{if z = 0} \end{cases} g′(z)=⎩⎪⎨⎪⎧0.01,1,undefine(任意取值),if z < 0if z > 0if z = 0
- 导数:
激活函数的选择:
(1)sigmoid函数和tanh函数比较:
- 隐藏层:tanh函数的表现要好于sigmoid函数,因为tanh取值范围为[−1,+1],输出分布在0值的附近,均值为0,从隐藏层到输出层数据起到了
归一化
(均值为0)的效果。 - 输出层:对于二分类任务的输出取值为{0,1},故一般会选择sigmoid函数。
(2)然而sigmoid和tanh函数在当|z|很大的时候,梯度会很小,在依据梯度的算法中,更新在后期会变得很慢。在实际应用中,要使|z|尽可能的落在0值附近。
(3)ReLU弥补了前两者的缺陷,当z>0时,梯度始终为1,从而提高神经网络基于梯度算法的运算速度。然而当z<0时,梯度一直为0,但是实际的运用中,该缺陷的影响不是很大。
(4)Leaky ReLU保证在z<0的时候,梯度仍然不为0。
在选择激活函数的时候,如果在不知道该选什么的时候就选择ReLU,当然也没有固定答案,要依据实际问题在交叉验证集合中进行验证分析。
2.4 随机初始化的重要性
如果在初始时,两个隐藏神经元的参数设置为相同的大小,那么两个隐藏神经元对输出单元的影响也是相同的,通过反向梯度下降去进行计算的时候,会得到同样的梯度大小,所以在经过多次迭代后,两个隐藏层单位仍然是对称的。无论设置多少个隐藏单元,其最终的影响都是相同的,那么多个隐藏神经元就没有了意义。
在初始化的时候,W参数要进行随机初始化,b则不存在对称性的问题它可以设置为0。
以2个输入,2个隐藏神经元为例:
W = np.random.rand((2,2))* 0.01
b = np.zero((2,1))
这里我们将W的值乘以0.01是为了尽可能使得权重W初始化为较小的值,这是因为如果使用sigmoid函数或者tanh函数作为激活函数时,W比较小,则 Z = W X + b Z=WX+b Z=WX+b所得的值也比较小,处在0的附近,0点区域的附近梯度较大,能够大大提高算法的更新速度。而如果W设置的太大的话,得到的梯度较小,训练过程因此会变得很慢。
ReLU和Leaky ReLU作为激活函数时,不存在这种问题,因为在大于0的时候,梯度均为1。
3、深层神经网络
3.1 深层神经网络的表示
DNN结构示意图如图所示:
对于第
l
l
l层神经网络,单个样本其各个参数的矩阵维度为:
- W [ l ] : ( n [ l ] , n [ l − 1 ] ) W^{[l]}: (n^{[l]},n^{[l-1]}) W[l]:(n[l],n[l−1])
- b [ l ] : ( n [ l ] , 1 ) b^{[l]}: (n^{[l]},1) b[l]:(n[l],1)
- d W [ l ] : ( n [ l ] , n [ l − 1 ] ) dW^{[l]}: (n^{[l]},n^{[l-1]}) dW[l]:(n[l],n[l−1])
- d b [ l ] : ( n [ l ] , 1 ) db^{[l]}: (n^{[l]},1) db[l]:(n[l],1)
- Z [ l ] : ( n [ l ] , 1 ) Z^{[l]}: (n^{[l]},1) Z[l]:(n[l],1)
- A [ l ] A^{[l]} A[l] = Z [ l ] : ( n [ l ] , 1 ) Z^{[l]}: (n^{[l]},1) Z[l]:(n[l],1)
3.2 为什么使用深层网络
人脸识别和语音识别:
对于人脸识别,神经网络的第一层从原始图片中提取人脸的轮廓和边缘,每个神经元学习到不同边缘的信息;网络的第二层将第一层学得的边缘信息组合起来,形成人脸的一些局部的特征,例如眼睛、嘴巴等;后面的几层逐步将上一层的特征组合起来,形成人脸的模样。随着神经网络层数的增加,特征也从原来的边缘逐步扩展为人脸的整体,由整体到局部,由简单到复杂。层数越多,那么模型学习的效果也就越精确。
对于语音识别,第一层神经网络可以学习到语言发音的一些音调,后面更深层次的网络可以检测到基本的音素,再到单词信息,逐渐加深可以学到短语、句子。
所以从上面的两个例子可以看出随着神经网络的深度加深,模型能学习到更加复杂的问题,功能也更加强大。
注:较早的前几层能学习一些低层次的简单特征(自动特征工程),后几层能把简单的特征结合起来去探测更加复杂的东西。(从简单到复杂)
3.3 前向和反向传播
(1)首先给定DNN的一些参数:
- L L L:DNN的总层数;
- n [ l ] n^{[l]} n[l]:表示第 l l l层的包含的单元个数;
- a [ l ] a^{[l]} a[l]:表示第 l l l层激活函数的输出;
- W [ l ] W^{[l]} W[l]:表示第 l l l层的权重;
- 输入 x x x记为 a [ 0 ] a^{[0]} a[0],输出 y ^ \hat y y^记为 a [ L ] a^{[L]} a[L]。
(2)前向和反向传播的过程
(3)前向和反向传播的公式
前向传播 Forward propagation
Input:
a
[
l
−
1
]
a^{[l−1]}
a[l−1]
Output:
a
[
l
]
a^{[l]}
a[l],
c
a
c
h
e
(
z
[
l
]
)
cache(z^{[l]})
cache(z[l])
- 公式:
z [ l ] = W [ l ] ⋅ a [ l − 1 ] + b [ l ] a [ l ] = g [ l ] ( z [ l ] ) z^{[l]}= W^{[l]}\cdot a^{[l-1]}+b^{[l]}\\ a^{[l]}=g^{[l]}(z^{[l]}) z[l]=W[l]⋅a[l−1]+b[l]a[l]=g[l](z[l]) - 向量化:
Z [ l ] = W [ l ] ⋅ A [ l − 1 ] + b [ l ] A [ l ] = g [ l ] ( Z [ l ] ) Z^{[l]}=W^{[l]}\cdot A^{[l-1]}+b^{[l]}\\A^{[l]}=g^{[l]}(Z^{[l]}) Z[l]=W[l]⋅A[l−1]+b[l]A[l]=g[l](Z[l])
反向传播 Backward propagation
Input:
d
a
[
l
]
da^{[l]}
da[l]
Output:
d
a
[
l
−
1
]
da^{[l−1]}
da[l−1],
d
W
[
l
]
dW^{[l]}
dW[l],
d
b
[
l
]
db^{[l]}
db[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 ] dz^{[l]}=da^{[l]} * g^{[l]}{'}(z^{[l]})\\dW^{[l]}=dz^{[l]}\cdot a^{[l-1]}\\db^{[l]}=dz^{[l]}\\da^{[l-1]}=W^{[l]}{^T}\cdot dz^{[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 a [ l − 1 ] da^{[l−1]} da[l−1]代入 d z [ l ] dz^{[l]} dz[l],有:
d z [ l ] = W [ l + 1 ] T ⋅ d z [ l + 1 ] ∗ g [ l ] ′ ( z [ l ] ) dz^{[l]}=W^{[l+1]}{^T}\cdot dz^{[l+1]}* g^{[l]}{'}(z^{[l]}) dz[l]=W[l+1]T⋅dz[l+1]∗g[l]′(z[l]) - 向量化程序:
d Z [ l ] = d A [ l ] ∗ g [ l ] ′ ( Z [ l ] ) d W [ l ] = 1 m d Z [ l ] ⋅ A [ l − 1 ] d b [ l ] = 1 m n p . s u m ( d Z [ l ] , a x i s = 1 , k e e p d i m s = T r u e ) d A [ l − 1 ] = W [ l ] T ⋅ d Z [ l ] dZ^{[l]}=dA^{[l]} * g^{[l]}{'}(Z^{[l]})\\dW^{[l]}=\dfrac{1}{m}dZ^{[l]}\cdot A^{[l-1]}\\db^{[l]}=\dfrac{1}{m}np.sum(dZ^{[l]},axis=1,keepdims = True)\\dA^{[l-1]}=W^{[l]}{^T}\cdot dZ^{[l]} dZ[l]=dA[l]∗g[l]′(Z[l])dW[l]=m1dZ[l]⋅A[l−1]db[l]=m1np.sum(dZ[l],axis=1,keepdims=True)dA[l−1]=W[l]T⋅dZ[l]
3.4 参数和超参数
参数:
参数即是我们在过程中想要模型学习到的信息,
W
[
l
]
W^{[l]}
W[l],
b
[
l
]
b^{[l]}
b[l]。
超参数:
超参数即为控制参数的输出值的一些网络信息,也就是超参数的改变会导致最终得到的参数
W
[
l
]
W^{[l]}
W[l],
b
[
l
]
b^{[l]}
b[l]的改变。
举例:
学习速率:
α
\alpha
α
迭代次数:
N
N
N
隐藏层的层数:
L
L
L
每一层的神经元个数:
n
[
1
]
,
n
[
2
]
,
⋯
n^{[1]}, n^{[2]}, ⋯
n[1],n[2],⋯
激活函数
g
(
z
)
g(z)
g(z)的选择