1.从感知机到神经网络
在感知机一文中已经对感知机模型,学习算法都做了介绍,它有多个输入一个输出,多个输入经过线性变换通过一个激活函数得到输出。它可以很好地解决线性的二分类问题,但是却无法解决非线性的分类问题。比如简单的异或问题。
从图中我们可以看到对于异或问题,显然无法找到可以将正负样本分开的一条直线,那么感知机也就不可能学习出这样的模型。既然一个感知机无法解决非线性分类问题,那么多个感知机呢?。于是有多个感知机构成神经网络便产生了。
对于一个如图所示的神经网络,其中
x
1
,
x
2
,
x
3
x_{1},x_{2},x_{3}
x1,x2,x3是输入单元,我们将原始数据输入给他们。
a
1
,
a
2
,
a
3
a_{1},a_{2},a_{3}
a1,a2,a3是中间单元,他们负责将数据进行处理,然后传递给下一层,最后是输出单元。我们为每一层都加上一个偏置值后,神经网络变成:
该神经网络一共有三层,第一层称为输入层,最后一层称为输入层,中间的称为隐藏层。
对于一个神经网络来说,其隐藏层可以有多层,输出层也可以有多个输出。在感知机中,其激活函数为sign函数,但在神经网络中有多种激活函数,比如逻辑回归中的Sigmoid 函数,tanx函数,ReLU函数等。
2.前向传播
仍然以前面的神经网络为例,引入一些符号便于描述神经网络:
x
0
:
偏
置
,
x
0
=
1
x_{0}:偏置,x_{0}=1
x0:偏置,x0=1
θ
:
权
重
\theta:权重
θ:权重
a
i
(
j
)
:
代
表
第
j
成
第
i
各
激
活
单
元
a^{(j)}_{i}:代表第j成第i各激活单元
ai(j):代表第j成第i各激活单元
θ
(
j
)
:
代
表
第
j
层
到
第
j
+
1
层
的
权
重
矩
阵
\theta^{(j)}:代表第j层到第j+1层的权重矩阵
θ(j):代表第j层到第j+1层的权重矩阵
θ
v
,
u
(
j
)
:
第
j
成
的
第
u
各
到
第
j
+
1
层
的
第
v
个
单
元
的
权
重
。
\theta^{(j)}_{v,u}:第j成的第u各到第j+1层的第v个单元的权重。
θv,u(j):第j成的第u各到第j+1层的第v个单元的权重。$
如
果
第
j
层
有
m
个
单
元
,
第
j
加
一
层
有
n
个
单
元
,
那
么
θ
(
j
)
将
会
是
一
个
n
∗
(
m
+
1
)
的
矩
阵
如果第j层有m个单元,第j加一层有n个单元,那么\theta^{(j)}将会是一个n*(m+1)的矩阵
如果第j层有m个单元,第j加一层有n个单元,那么θ(j)将会是一个n∗(m+1)的矩阵
s
j
:
s_{j}:
sj:第j 层的激活单元数目,不包括偏置单元
对于输入层的所有激活单元应用激活函数,得到隐藏层激活单元
a 1 ( 2 ) = g ( θ 10 ( 1 ) x 0 + θ 11 ( 1 ) x 1 + θ 12 ( 1 ) x 2 + θ 13 ( 1 ) x 3 ) a^{(2)}_{1}=g(\theta^{(1)}_{10}x_{0}+\theta^{(1)}_{11}x_{1}+\theta^{(1)}_{12}x_{2}+\theta^{(1)}_{13}x_{3}) a1(2)=g(θ10(1)x0+θ11(1)x1+θ12(1)x2+θ13(1)x3)
a 2 ( 2 ) = g ( θ 20 ( 1 ) x 0 + θ 21 ( 1 ) x 1 + θ 22 ( 1 ) x 2 + θ 23 ( 1 ) x 3 ) a^{(2)}_{2}=g(\theta^{(1)}_{20}x_{0}+\theta^{(1)}_{21}x_{1}+\theta^{(1)}_{22}x_{2}+\theta^{(1)}_{23}x_{3}) a2(2)=g(θ20(1)x0+θ21(1)x1+θ22(1)x2+θ23(1)x3)
a 1 ( 2 ) = g ( θ 30 ( 1 ) x 0 + θ 31 ( 1 ) x 1 + θ 32 ( 1 ) x 2 + θ 33 ( 1 ) x 3 ) a^{(2)}_{1}=g(\theta^{(1)}_{30}x_{0}+\theta^{(1)}_{31}x_{1}+\theta^{(1)}_{32}x_{2}+\theta^{(1)}_{33}x_{3}) a1(2)=g(θ30(1)x0+θ31(1)x1+θ32(1)x2+θ33(1)x3)
输出层为:
h θ ( x ) = a 1 ( 3 ) = g ( θ 10 ( 2 ) a 0 ( 2 ) + θ 11 ( 2 ) a 1 ( 2 ) + θ 12 ( 2 ) a 2 ( 2 ) + θ 13 ( 2 ) a 3 ( 2 ) ) h\theta(x)=a^{(3)}_{1}=g(\theta^{(2)}_{10}a^{(2)}_{0}+\theta^{(2)}_{11}a^{(2)}_{1}+\theta^{(2)}_{12}a^{(2)}_{2}+\theta^{(2)}_{13}a^{(2)}_{3}) hθ(x)=a1(3)=g(θ10(2)a0(2)+θ11(2)a1(2)+θ12(2)a2(2)+θ13(2)a3(2))
该计算过程就被称为正向传播。最终的
h
θ
(
x
)
h_{\theta}(x)
hθ(x)的结果与逻辑回归类似,只不过输入变成了中间变量。
反向传播的向量化实现:
3.代价函数
根据跟类种类的不同可以将神经网络定义分为两种情况:二分类和多分类,
二分类:只有一个输出单元(K=1)
多分类问题:输出不止一个(K>1)
神经网络的代价函数公式:
h
θ
(
x
)
=
−
1
m
∑
i
=
1
m
∑
k
=
1
K
[
y
k
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
k
+
(
1
−
y
k
(
i
)
)
l
o
g
(
1
−
(
h
θ
(
x
(
i
)
)
)
k
)
]
+
λ
2
m
∑
l
=
1
L
−
1
∑
i
=
1
s
l
∑
j
=
1
s
l
+
1
(
θ
j
,
i
(
l
)
)
2
h{\theta}(x)=-\frac{1}{m}\sum_{i=1}^{m}\sum_{k=1}^{K}[y^{(i)}_{k}log(h_{\theta}(x^{(i)}))_{k}+(1-y^{(i)}_{k})log(1-(h_{\theta}(x^{(i)}))_{k})]+\frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_{l}}\sum_{j=1}^{s_{l+1}}(\theta^{(l)}_{j,i})^{2}
hθ(x)=−m1i=1∑mk=1∑K[yk(i)log(hθ(x(i)))k+(1−yk(i))log(1−(hθ(x(i)))k)]+2mλl=1∑L−1i=1∑slj=1∑sl+1(θj,i(l))2
L:神经网络的总层数
s l : s_{l}: sl:第i层激活单元的数量(不包括偏置单元)
h θ ( x ) k h_{\theta}(x)_{k} hθ(x)k为第k个分类的概率P
K:输出层的输出单元数量
y k i y^{i}_{k} yki:第i个训练样本的第k个分量
在代价函数中,左边的求K求和的部分实际上是为了解决多分类问题,每行特征都会给出K个预测。
右边的正则化项:每一层都有一个多维矩阵 θ ( l ) ∈ R s l + 1 ∗ ( s l + 1 ) \theta^{(l)}∈R^{s_{l+1}*(s_{l}+1)} θ(l)∈Rsl+1∗(sl+1)
,该项就是对每一层的多维矩阵 θ ( l ) \theta^{(l)} θ(l),依次平方后求和(除了偏置项的权重),在对所有样本数量求和。