1、概述
1.1 目的
神经网络是用来解决海量特性下,一般机器学习方法无法胜任的问题。
假如某批数据有100个特征,为了很好的适应训练集,评估函数可能需要采用二次项、三次项、n次项,如下所示:
$
hθ(X)=x12+x1∗x2+x1∗x3+......+x1∗xn+x22+x2∗x3+x2∗x4+x2∗x5+....
评估函数的特征空间急剧变大,大于等于
2n2。这种情况下,再使用线性回归的方式,计算量就无法忍受了。
再比如图片识别的例子。每张图片都是由像素构成的,图像识别其实就是对像素特征的学习过程。由于一张图片的像素数是非常大的,尤其是现在的高清图片,像素数都是海量的,特征空间就显得尤为巨大。
而神经网络就是为解决这类问题而生的。
2、来源
神经网络的灵感来自于人脑,人脑是世界上最神奇的计算机,无论是听觉、视觉还是触觉、嗅觉,都能非常快速精准的计算出结果。
那是不是人类的大脑需要对于不同的输入例如听觉、视觉,要使用不同的部位进行处理呢?
科学家做了很多实验,他们把动物的眼睛的神经接入到大脑的“听觉皮层(专门用来处理听觉的部位)”,结果发现动物可以正常看东西;
把动物的眼睛的神经接入到大脑的“触觉皮层(专门用来处理触觉的部位)”,结果发现动物仍然可以正常看东西;
这说明大脑的各个位置虽然各司其职,但本质上他们都是一样的,都可以处理不同的输入源。
人们从中得到启发,想通过一套算法模型实现对不同输入数据的处理,这就是神经网络。
3、模型
单个神经元可以表示为:
多个神经元组成神经网络,表示为:
上图省略了
x0特征,因为该特征的值是固定的:1。
神经网络的术语:
- 分层:每一列代表一层,最左边的是输入层,最右边的是输出层,中间的叫隐藏层。
- 激活函数:非线性函数g(z),该函数就是逻辑回归中使用的函数:
g(z)=1+e−z1
- 激活值:每一层的输出,称为激活值。
-
αi(j):表示第j层,第i个神经元的激活项。
-
θ(j):之前的参数,在这里可以称之为权重矩阵,
θ(j)表示从第j层到第j+1层的权重矩阵。
神经网络的数学表达式为:
第二层的表达式为:
a1(2)=g(θ10(1)∗x0+θ11(1)∗x1+θ12(1)∗x2+θ13(1)∗x3)
a2(2)=g(θ20(1)∗x0+θ21(1)∗x1+θ22(1)∗x2+θ23(1)∗x3)
a3(2)=g(θ30(1)∗x0+θ31(1)∗x1+θ32(1)∗x2+θ33(1)∗x3)
因为
ai(2)是输出层的输入,所以输出层的表达式为:
hθ(x)=a1(3)=g(θ10(2)∗a0(2)+θ11(2)∗∗a1(2)+θ12(2)∗∗a2(2)+θ13(2)∗∗a3(2))
3.1 向量化表示
下面做个假设,假设
z1(2)=θ10(1)∗x0+θ11(1)∗x1+θ12(1)∗x2+θ13(1)∗x3
z2(2)=θ20(1)∗x0+θ21(1)∗x1+θ22(1)∗x2+θ23(1)∗x3
z3(2)=θ30(1)∗x0+θ31(1)∗x1+θ32(1)∗x2+θ33(1)∗x3
X=⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤
z(2)=⎣⎢⎡z1(2)z2(2)z3(2)⎦⎥⎤=θ(1)∗X
则上述的表达式简化为:
a1(2)=g(z1(2))
a2(2)=g(z2(2))
a3(2)=g(z3(2))
hθ(x)=a(3)=g(z(3))
3.2 前向传播
我们观察神经网络的计算过程,第一层的数据经过激活函数处理后的激活值,作为第二层的输入;第二层的数据经过激活函数处理后的激活值,作为第三层的输入;以此类推。
如果了解过map-reduce算法的话,可以看出这两种算法有异曲同工之妙;学过编程的同学,会不会觉得这个算法与递归很类似。
神经网络的这种层层计算的方式,称之为前向传播。
4 示例
假设y的取值范围是(0,1),特征有两个(
x1,x2)。
4.1 实现and判断
and关系的判断逻辑如下:
x1 |
x2 |
y |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
则评估函数为:
hθ(x)=g(−30+20x1+20x2)
对应的图形为:
得出的结论是:
- 当z>4.6时,
g(z)≈1
- 当z<-4.6时,
g(z)≈0
把X值代入到g(z)中,计算结果如下:
x1 |
x2 |
y |
0 |
0 |
g(−30)≈0 |
0 |
1 |
g(−10)≈0 |
1 |
0 |
g(−10)≈0 |
1 |
1 |
g(10)≈1 |
正好与and的计算结果保持一致。
4.2 实现or判断
or关系的判断逻辑如下:
x1 |
x2 |
y |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
只要是
θ=[−10,20,20]即可实现or的效果,不再赘述。
4.3 实现not判断
not关系的判断逻辑如下:
x1 |
x2 |
y |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
只要是
θ=[10,−20,−20]即可实现
(not x1) and (not x2)的效果,不再赘述。
4.4 实现XNOR判断
XNOR关系的判断逻辑如下:
x1 |
x2 |
y |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
上面3种逻辑运算,都是通过一层神经网络完成的,XNOR比较复杂,它的表达式是
(x1 and x2) or (x1‘ and x2‘)
其中
x1‘代表的是
not x1的意思。
用神经网络图形来表示XNOR计算为:
分析一下上面的图形:
- 第一层红色的线代表的是and运算,计算结果是
a1(2)。
- 第一层蓝色的线代表的是not运算,计算结果是
a2(2)。
- 第二层绿色的线代表的是or运算,计算结果是
hθ(x)=a1(3)。
代入X值后,计算结果如下,与XNOR是一致的:
x1 |
x2 |
a1(2) |
a2(2) |
y |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |