前言
由于神经网路整体来说比较烧脑,所以准备使用2篇博客去写。以下仅是我看完吴恩达老师视频后的理解。
神经网络的概述
为什么要用神经网络,线性回归和logistic回归不香嘛?
线性回归或者logistic回归主要的问题在于我们有时候不得不去构造很复杂的多项式去拟合训练集的数据,当我们的次数越高,我们可以使用的组合就越多,这样就很难去求解最好的模型。
神经网络是什么
只是个人看法,神经网络看上去是一个比较庞大的logistic回归模型,他的每一层都是多个logistic回归,这样如果层数很高,那么每一层用于回归的属性会从第一层的样本属性到之后难以描述的属性。
(logistic回归可以参考另一篇博客:添加链接描述)
神经网络的组成
输入层:第一层,样本的矩阵
输出层:最后一层,判断结果的矩阵
隐藏层:除了输入层和输出层的其他层都是隐藏层。
神经网络中的基本参数
m:代表样本的总数
l : l代表层数,我比较喜欢从0开始。
L: 一共有L层
Θ ( l ) \Theta^{(l)} Θ(l):由于有很多层,每两个层之间都会有一个矩阵用于logistic回归。用 Θ ( l ) \Theta^{(l)} Θ(l)表示,代表第l到第l + 1之间的矩阵。
S l S_l Sl: 代表第l层有几个属性
a l a^{l} al:第l层的属性向量
z l z^{l} zl: Θ l − 1 \Theta^{l - 1} Θl−1 @ a l − 1 a^{l -1} al−1 (@为内积),可以看到 a l = s i g m o i d ( z l ) a^{l}=sigmoid(z^{l}) al=sigmoid(zl)
X:是所有样本的属性矩阵
y ( i ) y^{(i)} y(i): 第i个样本的真实值,是一个向量
x ( i ) x^{(i)} x(i):X中的第i行向量
K: 输出层有几个单元,即 y ( i ) y^{(i)} y(i)的维数
以上可以描述一个神经网络了。
神经网络的损失函数
J
(
Θ
)
=
−
1
m
∑
i
=
0
m
∑
k
=
0
K
y
k
(
i
)
l
o
g
(
s
i
g
m
o
i
d
(
x
(
i
)
)
)
+
(
1
−
y
k
(
i
)
)
l
o
g
(
1
−
s
i
g
m
o
i
d
(
x
(
i
)
)
)
+
1
m
∑
Θ
i
j
2
J(\Theta) = -\frac{1}{m}\sum_{i=0}^{m}\sum_{k=0}^{K} y^{(i)}_klog(sigmoid(x^{(i)})) + (1-y^{(i)}_k)log(1-sigmoid(x^{(i)})) + \frac{1}{m}\sum\Theta^2_{ij}
J(Θ)=−m1i=0∑mk=0∑Kyk(i)log(sigmoid(x(i)))+(1−yk(i))log(1−sigmoid(x(i)))+m1∑Θij2
这个式子很复杂,但是可以拆开来看,前一项是所有样本的所有输出的损失函数,这个损失函数和logistic的损失函数一致。最后面一个求和里面是所有中间 Θ ( i ) \Theta^{(i)} Θ(i)中所有元素的平方和,用来正则化。
同样这个函数的最小值求法使用梯度下降法:
可是遇到一个问题 δ J ( Θ ) δ Θ ( i ) \frac{\delta J(\Theta)}{\delta \Theta^{(i)}} δΘ(i)δJ(Θ)怎么求解呢?向前传播、反向传播即可。
向前传播:其实就是根据所有初始化的 Θ ( l ) \Theta^{(l)} Θ(l)去一层一层去求属性。一直到输出层
向后传播:这个主要去求
δ
l
\delta^{l}
δl,什么是
δ
l
\delta^l
δl?应该是第l层每个属性偏差,它是和
a
(
l
)
a^{(l)}
a(l)同阶的向量。下面描述他的求法:
δ
(
L
)
=
a
(
L
)
−
y
(
i
)
\delta^{(L)} = a^{(L)} - y^{(i)}
δ(L)=a(L)−y(i)(最后一层的偏差)
δ
(
l
)
=
(
Θ
(
l
)
)
T
δ
(
l
+
1
)
+
s
i
g
m
o
i
d
′
(
z
(
l
)
)
)
\delta^{(l)} = (\Theta^{(l)})^T\delta^{(l + 1)} + sigmoid^{'}(z^{(l)}))
δ(l)=(Θ(l))Tδ(l+1)+sigmoid′(z(l)))
对sigmoid函数求导,我们很容易得到,
s
i
g
m
o
i
d
′
(
z
(
l
)
)
=
a
(
l
)
(
1
−
a
(
l
)
)
sigmoid^{'}(z^{(l)}) = a^{(l)}(1-a^{(l)})
sigmoid′(z(l))=a(l)(1−a(l))。l的取值范围为[1, m -1],注意0,m是取不到的
好了,通过向前传播和向后传播我们已经求出了很多值,我们证明得到
当i != 0,
δ
J
(
Θ
)
δ
Θ
(
i
)
=
1
m
δ
(
l
+
1
)
(
a
(
l
)
)
T
+
λ
m
Θ
(
这
里
λ
我
除
了
m
,
为
了
和
l
o
g
i
s
t
i
c
回
归
对
应
,
而
吴
恩
达
老
师
没
有
)
\frac{\delta J(\Theta)}{\delta \Theta^{(i)}} =\frac{1}{m}\delta^{(l+1)}(a{(l)})^T +\frac{\lambda}{m}\Theta (这里\lambda我除了m,为了和logistic回归对应,而吴恩达老师没有)
δΘ(i)δJ(Θ)=m1δ(l+1)(a(l))T+mλΘ(这里λ我除了m,为了和logistic回归对应,而吴恩达老师没有)
当i = 0,这里没有正则的那一项是因为,正则化是从第二个
Θ
\Theta
Θ开始的
δ
J
(
Θ
)
δ
Θ
(
i
)
=
1
m
δ
(
l
+
1
)
(
a
(
l
)
)
T
\frac{\delta J(\Theta)}{\delta \Theta^{(i)}} =\frac{1}{m}\delta^{(l+1)}(a{(l)})^T
δΘ(i)δJ(Θ)=m1δ(l+1)(a(l))T
所以最后的更新迭代式为
当l!=0
Θ ( l ) = Θ ( l ) ( 1 − α ∗ λ m ) − α 1 m δ ( l + 1 ) ( a ( l ) ) T \Theta^{(l)} = \Theta^{(l)}(1-\frac{\alpha*\lambda}{m}) - \alpha\frac{1}{m}\delta^{(l+1)}(a{(l)})^T Θ(l)=Θ(l)(1−mα∗λ)−αm1δ(l+1)(a(l))T
当l=0
Θ
(
l
)
=
Θ
(
l
)
−
α
1
m
δ
(
l
+
1
)
(
a
(
l
)
)
T
\Theta^{(l)} = \Theta^{(l)} - \alpha\frac{1}{m}\delta^{(l+1)}(a{(l)})^T
Θ(l)=Θ(l)−αm1δ(l+1)(a(l))T