一.概述
在第四周的课程中,主要对神经网络的表达(Neural Networks:Representation)进行了介绍。神经网络想必大家已经耳熟能详,该方法旨在解决具备大量复杂特征、运用寻常逻辑回归(Logistic Regression)方法处理时笨重繁琐的一类分类问题。
(关于Machine learning by Pro.Andrew Ng 的更多资源请关注图中微信公众号——针知与拙见 获取 )
- 在第四周的学习中主要应当掌握以下几个主要概念
- 神经网络的起源 —Neurons and the Brain
- 神经网络的模型表达 (Neurons and the Brain)
· 输入层(Input Layer)
· 隐藏层(Hidden Layers)
· 输出层(Output Layer)
· 偏倚单位(Bias unit) - 神经网络的函数表达形式 (Model Representation I)
- 神经网络的向量表达形式 (Model Representation II)
- (应用神经网络实现)多类分类 (Multiclass Classification)
二.神经网络的起源(The origin of Neural Network)
1.非线性假设(Non-linear Hypotheses)
使用线性回归来处理具有许多复杂特征的数据集是非常费时费力的。比如,当我们要处理具有x1,x2,x3三个features、且函数假设中包含所有二次项的问题时,我们的函数假设中实际上包括 x1x2 x 1 x 2 , x21 x 1 2 , x1x3 x 1 x 3 , x23 x 3 2 , x2x3 x 2 x 3 , x22 x 2 2 六个特征而当我们具有100个features的时候,我们实际上要处理的二次项特征多达5050个。所以我们能够明显的看出,随着我们的feature数目的增加,二次或者更高次数特征的数量增加的速度非常之快,所以在这样的情况下,我们再运用传统的逻辑回归(logistic regression)会非常的繁琐。
正因如此,当我们有具有许多特征的且假设包含特征多次项的时候,我们可以采用神经网络的方法处理问题。
2.神经元和大脑(Neurons and the Brain)
神经网络产生的原因:因为我们知道人类的大脑具有强大学习能力,所以人们想要尝试设计出能够模仿大脑的算法。神经网络算法在二十世纪八九十年代逐渐被广泛应用,但受限于硬件计算能力等多种因素,在90年代的后期应用逐渐减少。而近些年由于计算机的计算能力逐渐提高、计算机的运行速度变快使得其可以支撑大规模的神经网络计算。
由于人类的大脑具有非常丰富的功能,而如果把大脑具备的成百上千个不同的功能用不同的算法来实现是不现实的。所以当人们想要通过模仿人类大脑来构筑神经网络算法时,首先假设大脑处理不同问题的方法是一致的。而人们也通过合理的证据证明了这一点。
当研究人员将视觉信号传递到处理听觉信号的大脑皮层区域,他们发现原本处理听觉信号的大脑皮层也可以用以处理视觉信号。
三.神经网络的模型表达——函数形式
在构建神经网络模型之前,我们首先要学习人脑中神经元的组成架构。人脑中每一个神经元都由树突(Dendrite)、核(Nucleus)和轴突(Axon)组成,其中树突、轴突分别承担输入和输出的功能,实现微弱的电流(电信号)在神经元之间的传递。而核(Nucleus)则承担信号处理的工作。
了解过人脑中的神经元工作原理后,我们再从中抽象出合理的神经网络模型。我们可以想见,神经网络模型实际上应该是由一个又一个神经元组成的,每一个神经元都是一个学习模型,每一个神经元均可实现输入、处理、输出三个功能,通过链接一个又一个的神经元可以实现多层次的神经网络架构。
神经网络模型是由多个逻辑单元按照不同的层次组织成的网络结构,每一层的输出均为下一层的输入。上图为最基本的三层神经网络模型,最左侧第一层为输入层(Input layer),中间的为隐藏层(Hidden layer),最右侧为输出层(Output layer),其中第一层的x0和第二层的a0均为偏倚单位(bias unit),值恒等于1。
模型中的 a(j)i a i ( j ) 表示第j层的第i个单元, θ(j) θ ( j ) 表示从第j层映射到第j+1层时的参数矩阵。以上图神经网络模型为例, θ(1) θ ( 1 ) 表示从第1层到第2层的参数矩阵,其中 θ(j) θ ( j ) 的维度为第j+1层单元的数目*(第j层的数目+1),“+1”的原因在于额外添加的偏倚单位(Bias unit)。
举例说明:如果第一层有2个输入节点,第二层有4个激活节点。那么 θ(1) θ ( 1 ) 的维度则为4 X 3。因为 sj+1=3 s j + 1 = 3 、 sj+1=4 s j + 1 = 4 。
在神经网络中,我们使用与分类时相同的逻辑函数(Logistic Function)——sigmoid函数,只不过在神经网络中,我们有时将其称为sigmoid激活函数,参数 θ θ 有时也称为权重。
如果我们的输入层有x1、x2、x3、x4四个输入,隐藏层有a1、a2、a3三个激活单元,则有:
a(2)1=g(θ(1)10x0+θ(1)11x1+θ(1)12x2+θ(1)13x3) a 1 ( 2 ) = g ( θ 10 ( 1 ) x 0 + θ 11 ( 1 ) x 1 + θ 12 ( 1 ) x 2 + θ 13 ( 1 ) x 3 )
a(2)2=g(θ(1)20x0+θ(1)21x1+θ(1)22x2+θ(1)23x3) a 2 ( 2 ) = g ( θ 20 ( 1 ) x 0 + θ 21 ( 1 ) x 1 + θ 22 ( 1 ) x 2 + θ 23 ( 1 ) x 3 )
a(2)3=g(θ(1)30x0+θ(1)31x1+θ(1)32x2+θ(1)33x3) a 3 ( 2 ) = g ( θ 30 ( 1 ) x 0 + θ 31 ( 1 ) x 1 + θ 32 ( 1 ) x 2 + θ 33 ( 1 ) x 3 )
hθ(x)=a(3)1=g(θ(2)10a(2)0+θ(2)11a(2)1+θ(2)13a(2)0) h θ ( x ) = a 1 ( 3 ) = g ( θ 10 ( 2 ) a 0 ( 2 ) + θ 11 ( 2 ) a 1 ( 2 ) + θ 13 ( 2 ) a 0 ( 2 ) )
四.神经网络的模型表达——向量形式
为了得到更为简化的神经网络表达形式,我们对上述方程向量化,并定义一个新的参数 z(j)k z k ( j ) 。它包含了我们g函数中的所有变量和参数。在之前的例子中,如果我们用z替换,那么形式将变换为:
a(2)1=g(z(2)1)
a
1
(
2
)
=
g
(
z
1
(
2
)
)
a(2)2=g(z(2)2)
a
2
(
2
)
=
g
(
z
2
(
2
)
)
a(2)3=g(z(2)3)
a
3
(
2
)
=
g
(
z
3
(
2
)
)
其中
z(2)k=θ(1)k,0x0+θ(1)k,1x1+θ(1)k,0x2+...θ(1)k,nxn
z
k
(
2
)
=
θ
k
,
0
(
1
)
x
0
+
θ
k
,
1
(
1
)
x
1
+
θ
k
,
0
(
1
)
x
2
+
.
.
.
θ
k
,
n
(
1
)
x
n
x x 和的向量形式为:
我们令
x=a(1)
x
=
a
(
1
)
,那么我们可以将变量z的表达形式写为:
z(j)=θ(j−1)a(j−1)
z
(
j
)
=
θ
(
j
−
1
)
a
(
j
−
1
)
其中,
θ(j−1)
θ
(
j
−
1
)
是
sj
s
j
*
(n+1)
(
n
+
1
)
为向量,
sj
s
j
是激活单元的数目,n为x的个数。
现在我们就可以根据上述方法,得到一个向量,表示第j层的激活单元:
a(i)=g(z(j))
a
(
i
)
=
g
(
z
(
j
)
)
sigmoid函数可以逐个的计算我们向量
z(j)
z
(
j
)
中的元素。而后我们可以在sigmoid函数计算完成之后在第j层添加一个偏倚单位(Bias unit)
a(i)0
a
0
(
i
)
,其值恒等于1。
为了计算最终的假设,需要计算另一个z向量:
z(j+1)=θ(j)a(j)
z
(
j
+
1
)
=
θ
(
j
)
a
(
j
)
而最后一个
θ(j)
θ
(
j
)
矩阵只有一行,所以我们的结果是一个单一的数字。
最后再将 z(j+1) z ( j + 1 ) 的值带入sigmoid函数做计算即可得到 hθ(x) h θ ( x ) 的值:
hθ(x)=a(j+1)=g(z(j+1)) h θ ( x ) = a ( j + 1 ) = g ( z ( j + 1 ) )
需要注意的是,在最后一步的计算中(j层到j + 1层),我们执行的操作与逻辑回归中完全相同。
而不同的是,在神经网络中添加的所有的中间层使得我们能够更简单自如的生成复杂的非线性假设。
五.神经网络的简单应用
1.逻辑运算符and的实现
神经网络应用的一个简单的例子就是逻辑与”and”的实现,逻辑与的定义非常简单,只有x1和x2同时为真(同时为1)时,假设才为真(输出值为1),否则为假(输出值为0)。
其在神经网络中的实现形式大致为:
需要注意的是,偏倚单位(Bias unit)x0的值始终为1。
为了实现逻辑与,我们可以采用如下形式的 θ(1) θ ( 1 ) 向量。
θ(1)=[−251020] θ ( 1 ) = [ − 25 10 20 ]
这就使得只有当x1、x2的数值均为1时才有输出为1。换句话说:
hθ(x)=g(−25+10x1+20x2) h θ ( x ) = g ( − 25 + 10 x 1 + 20 x 2 )
x1=0
x
1
=
0
and
x2=0
x
2
=
0
then
g(−25)≈0
g
(
−
25
)
≈
0
x1=0
x
1
=
0
and
x2=1
x
2
=
1
then
g(−5)≈0
g
(
−
5
)
≈
0
x1=1
x
1
=
1
and
x2=0
x
2
=
0
then
g(−15)≈0
g
(
−
15
)
≈
0
x1=1
x
1
=
1
and
x2=1
x
2
=
1
then
g(5)≈1
g
(
5
)
≈
1
除此之外,神经网络也可用于模拟所有其他的逻辑门。
文中部分内容和图片取自Pro.Andrew Ng 于cousera上发布的Machine learning 公开课的Week 4 Lecture Notes。其他内容均由个人整理撰写,如需要更多机器学习的学习资源欢迎关注微信公众号:针知与拙见并在后台留言。
[1]https://www.coursera.org/learn/machine-learning/
[2] 微信公众号——针知与拙见