文章目录
0 概述
前几周,我们对单变量,多变量以及逻辑回归进行了学习。对于简单的非线性回归,还可以使用多项式回归进行解决,但是对于更加复杂的问题,特征变量更多的问题,维数更多的问题,如果自行定义假设函数然后求解,则计算规模会遇到几何级数的增长困境。
针对这样的情况,神经网络应运而生。
1. 课程大纲
本周课程大纲如下图所示:
2. 课程内容
2.1 为什么要提出神经网络
2.1.1 非线性回归的困境
现实世界往往是非线性的,前边我们讲到可以通过构造高级的特征项,用非线性的多项式回归进行拟合。
但是必须注意到,当特征量变位
n
n
n,二阶特征项的规模为
n
2
2
\frac{n^{2}}{2}
2n2,三阶特征项的规模为
O
(
n
3
)
O\left(n^{3}\right)
O(n3),随着特征量的规模变大,高阶项数呈几何级数上升。
而对于大多数机器学习问题,
n
n
n一般都比较大,因此需要提出一个新的方法来做非线性回归。
2.1.2 神经网络的生物学启示
脑科学研究表明,大脑的视觉层可以学会听声音,舌头可以用来完成视觉功能,我们并没有给大脑创造一种新的方法,而只是简单的将视觉信号或者声音信号传递给到神经系统,神经系统就能够自动学会这些技能。
因此,神经系统学家认为如果同一块脑组织可以处理光、声和触觉信号,那么就存在一种学习算法,可以同事处理视觉、听觉和触觉,而不需要为每一个信息处理编程,这就是神经网络提出的生物学启示。
生物学研究每一个神经元都可以被认为是一个神经核(处理单元),包含很多输入(树突)和一个输出(轴突),如下图所示,神经网络将会模仿此结构进行设计。
2.2 神经网络的模型表示
2.2.1 单个神经元的数学模型
上节中从生物学家角度上讲述了神经元的结构,模拟神经元,我们设计出如下图的数学模型:
x
0
x_{0}
x0是手动加的偏置,
x
1
,
x
2
,
x
3
x_{1}, x_{2}, x_{3}
x1,x2,x3可以将其看成输入神经树突,黄色的圆圈则可以看成中心处理器细胞核,
h
θ
(
x
)
h_\theta(x)
hθ(x) 则可看成输出神经轴突。因为这里是逻辑单元,所以我们的输出函数为:
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}
hθ(x)=1+e−θTx1 。一般把它称为一个由s 型函数(逻辑函数)作为激励的人工神经元。
激励函数的作用是非线性化,还有其他几种常用的:
阶跃函数,这是最简单直接的形式,也是人工神经网络定义时一般采用的。
逻辑函数,就是S型函数(Sigmoid函数),具有可无限微分的优势。
斜坡函数,RELU函数,最近比较火
高斯函数
2.2.2 神经网络的数学模型
将单个神经元,组成完整的神经网络如下图所示:
左边第一层 Layer1 被称为输入层。在输入层我们输入我们的特征项
x
1
,
x
2
,
x
3
x_{1},x_{2},x_{3}
x1,x2,x3 。
右边最后一层被称为输出层。输出函数为:
h
Θ
(
x
)
h_\Theta(x)
hΘ(x) 。
中间的所有层统称为隐藏层(还有多隐层的情况)。
2.2.3 神经网络模型的计算
如下图
其中隐藏层中的元素我们用
a
i
(
j
)
a_i^{(j)}
ai(j) 表示。上标 j 表示的是第几层(有时候我们并不只有简单一层),下标 i 表示第几个。
a
i
(
j
)
a_i^{(j)}
ai(j)就是第j层的第i个节点(神经元)的“激活值”。
注意:这里
j
j
j从2开始,因为输入层
[
x
0
x
1
x
2
x
3
]
\left[ \begin{array}{l}{x_{0}} \\ {x_{1}} \\ {x_{2}} \\ {x_{3}}\end{array}\right]
⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤,是第一层。
2.2.3.1 输入层到隐含层
a
1
(
2
)
=
g
(
Θ
10
(
1
)
x
0
+
Θ
11
(
1
)
x
1
+
Θ
12
(
1
)
x
2
+
Θ
13
(
1
)
x
3
)
a_{1}^{(2)}=g\left(\Theta_{10}^{(1)} x_{0}+\Theta_{11}^{(1)} x_{1}+\Theta_{12}^{(1)} x_{2}+\Theta_{13}^{(1)} x_{3}\right)
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\left(\Theta_{20}^{(1)} x_{0}+\Theta_{21}^{(1)} x_{1}+\Theta_{22}^{(1)} x_{2}+\Theta_{23}^{(1)} x_{3}\right)
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a
3
(
2
)
=
g
(
Θ
30
(
1
)
x
0
+
Θ
31
(
1
)
x
1
+
Θ
32
(
1
)
x
2
+
Θ
33
(
1
)
x
3
)
a_{3}^{(2)}=g\left(\Theta_{30}^{(1)} x_{0}+\Theta_{31}^{(1)} x_{1}+\Theta_{32}^{(1)} x_{2}+\Theta_{33}^{(1)} x_{3}\right)
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
其中, x 0 x_{0} x0为手动加入的偏置,通常为1; Θ ( j ) \Theta^{(j)} Θ(j)表示第 j j j层到第 j + 1 j+1 j+1层的权值矩阵; g ( x ) g(x) g(x) 是 sigmoid 激活函数,即 g ( x ) = 1 1 + e − x g(x) = \frac{1}{1+e^{-x}} g(x)=1+e−x1
2.2.3.2 隐含层到输出层
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_{1}^{(3)}=g\left(\Theta_{10}^{(2)} a_{0}^{(2)}+\Theta_{11}^{(2)} a_{1}^{(2)}+\Theta_{12}^{(2)} a_{2}^{(2)}+\Theta_{13}^{(2)} a_{3}^{(2)}\right)
hΘ(x)=a1(3)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
其中,
a
0
(
2
)
a_{0}^{(2)}
a0(2)为隐含层的偏置,通常为1;输出层为第三层,因此
a
1
(
3
)
a_{1}^{(3)}
a1(3)就等于
h
Θ
(
x
)
h_{\Theta}(x)
hΘ(x);
g
(
x
)
g(x)
g(x) 是 sigmoid 激活函数,即
g
(
x
)
=
1
1
+
e
−
x
g(x) = \frac{1}{1+e^{-x}}
g(x)=1+e−x1
由此可以得出,假如一个网络里面在第 j 层有 s j s_j sj 个单元,在第 j+1 层有 s j + 1 s_{j+1} sj+1 个单元,那么 Θ ( j ) \Theta^{(j)} Θ(j) 则控制着第 j 层到第 j+1 层的映射矩阵,矩阵的维度是: s j + 1 ∗ ( s j + 1 ) s_{j+1} * (s_j + 1) sj+1∗(sj+1) 。
2.2.3.3 多隐层神经网络
可以推导出,前向传播的通用公式,如下:
z
(
j
+
1
)
=
Θ
(
j
)
a
(
j
)
h
Θ
(
x
)
=
a
(
j
+
1
)
=
g
(
z
(
j
+
1
)
)
\begin{aligned} z^{(j+1)} &=\Theta^{(j)} a^{(j)} \\ h_{\Theta}(x) &=a^{(j+1)}=g\left(z^{(j+1)}\right) \end{aligned}
z(j+1)hΘ(x)=Θ(j)a(j)=a(j+1)=g(z(j+1))
其中,当
j
=
1
j = 1
j=1时,上述公式就是一个逻辑回归神经元;当
j
∈
[
1
,
2
]
j \in[1,2]
j∈[1,2],则其表示单隐层神经网络的计算;依次类推
神经网络正是这样解决比较复杂的函数,当层数很多的时候,我们有一个相对简单的输入量,通过加以权重和不同的运算送到第二层,而第三层在第二层作为输入的基础上再来进行一些更复杂的运算,每一层都可以看成是一种新的特征的构造,一层一层下去解决问题。
2.3 神经网络的应用
2.3.1 逻辑运算
以AND(与)为例,
我们可以假设:M
h
Θ
(
x
)
=
g
(
Θ
10
(
1
)
a
0
(
1
)
+
Θ
11
(
1
)
a
1
(
1
)
+
Θ
12
(
1
)
a
2
(
1
)
)
=
g
(
−
30
+
20
x
1
+
20
x
2
)
h_{\Theta}(x)=g\left(\Theta_{10}^{(1)} a_{0}^{(1)}+\Theta_{11}^{(1)} a_{1}^{(1)}+\Theta_{12}^{(1)} a_{2}^{(1)}\right)=g(-30+20x_1+20x_2)
hΘ(x)=g(Θ10(1)a0(1)+Θ11(1)a1(1)+Θ12(1)a2(1))=g(−30+20x1+20x2)
通过真值表分析:
其中,S型函数的曲线图:
2.3.2 多元分类
设计四个输出的神经网络即可。
3. 课后编程作业
我将课后编程作业的参考答案上传到了github上,包括了octave版本和python版本,大家可参考使用。
https://github.com/GH-SUSAN/Machine-Learning-MarkDown/tree/master/week4
4. 总结
本周通过探讨非线性回归的困境引入了神经网络,神经网络简单讲就是对大脑系统的模拟。
单个神经元,就是一个简单的逻辑回归(或者其他激活函数),神经网络是多神经元的组合。
通过增加隐含层,对特征进行非线性化和升维处理从而得到新的构造特征,从而解决复杂的非线性回归问题。