吴恩达机器学习——第9章 神经网络学习

1、概述

1.1 目的

神经网络是用来解决海量特性下,一般机器学习方法无法胜任的问题。

假如某批数据有100个特征,为了很好的适应训练集,评估函数可能需要采用二次项、三次项、n次项,如下所示:
$ h θ ( X ) = x 1 2 + x 1 x 2 + x 1 x 3 + . . . . . . + x 1 x n + x 2 2 + x 2 x 3 + x 2 x 4 + x 2 x 5 + . . . . h_θ(X)=x_1^2+x1*x_2+x_1*x_3+......+x_1*x_n+x_2^2+x_2*x_3+x_2*x_4+x_2*x_5+....
评估函数的特征空间急剧变大,大于等于 n 2 2 \frac{n^2}{2} 。这种情况下,再使用线性回归的方式,计算量就无法忍受了。

再比如图片识别的例子。每张图片都是由像素构成的,图像识别其实就是对像素特征的学习过程。由于一张图片的像素数是非常大的,尤其是现在的高清图片,像素数都是海量的,特征空间就显得尤为巨大。

而神经网络就是为解决这类问题而生的。

2、来源

神经网络的灵感来自于人脑,人脑是世界上最神奇的计算机,无论是听觉、视觉还是触觉、嗅觉,都能非常快速精准的计算出结果。

那是不是人类的大脑需要对于不同的输入例如听觉、视觉,要使用不同的部位进行处理呢?

科学家做了很多实验,他们把动物的眼睛的神经接入到大脑的“听觉皮层(专门用来处理听觉的部位)”,结果发现动物可以正常看东西;
把动物的眼睛的神经接入到大脑的“触觉皮层(专门用来处理触觉的部位)”,结果发现动物仍然可以正常看东西;

这说明大脑的各个位置虽然各司其职,但本质上他们都是一样的,都可以处理不同的输入源。

人们从中得到启发,想通过一套算法模型实现对不同输入数据的处理,这就是神经网络。

3、模型

单个神经元可以表示为:
在这里插入图片描述
多个神经元组成神经网络,表示为:
在这里插入图片描述
上图省略了 x 0 x_0 特征,因为该特征的值是固定的:1。
神经网络的术语:

  • 分层:每一列代表一层,最左边的是输入层,最右边的是输出层,中间的叫隐藏层。
  • 激活函数:非线性函数g(z),该函数就是逻辑回归中使用的函数: g ( z ) = 1 1 + e z g(z)=\frac{1}{1+e^{-z}}
  • 激活值:每一层的输出,称为激活值。
  • α i ( j ) α_i^{(j)} :表示第j层,第i个神经元的激活项。
  • θ ( j ) θ^{(j)} :之前的参数,在这里可以称之为权重矩阵, θ ( j ) θ^{(j)} 表示从第j层到第j+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(θ_{10}^{(1)} * x_0 + θ_{11}^{(1)} * x_1 + θ_{12}^{(1)} * x_2 + θ_{13}^{(1)} * x_3)

a 2 ( 2 ) = g ( θ 20 ( 1 ) x 0 + θ 21 ( 1 ) x 1 + θ 22 ( 1 ) x 2 + θ 23 ( 1 ) x 3 ) a_2^{(2)}=g(θ_{20}^{(1)} * x_0 + θ_{21}^{(1)} * x_1 + θ_{22}^{(1)} * x_2 + θ_{23}^{(1)} * x_3)

a 3 ( 2 ) = g ( θ 30 ( 1 ) x 0 + θ 31 ( 1 ) x 1 + θ 32 ( 1 ) x 2 + θ 33 ( 1 ) x 3 ) a_3^{(2)}=g(θ_{30}^{(1)} * x_0 + θ_{31}^{(1)} * x_1 + θ_{32}^{(1)} * x_2 + θ_{33}^{(1)} * x_3)

因为 a i ( 2 ) a_i^{(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_θ(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)})

3.1 向量化表示

下面做个假设,假设
z 1 ( 2 ) = θ 10 ( 1 ) x 0 + θ 11 ( 1 ) x 1 + θ 12 ( 1 ) x 2 + θ 13 ( 1 ) x 3 z^{(2)}_1=θ_{10}^{(1)} * x_0 + θ_{11}^{(1)} * x_1 + θ_{12}^{(1)} * x_2 + θ_{13}^{(1)} * x_3
z 2 ( 2 ) = θ 20 ( 1 ) x 0 + θ 21 ( 1 ) x 1 + θ 22 ( 1 ) x 2 + θ 23 ( 1 ) x 3 z^{(2)}_2=θ_{20}^{(1)} * x_0 + θ_{21}^{(1)} * x_1 + θ_{22}^{(1)} * x_2 + θ_{23}^{(1)} * x_3
z 3 ( 2 ) = θ 30 ( 1 ) x 0 + θ 31 ( 1 ) x 1 + θ 32 ( 1 ) x 2 + θ 33 ( 1 ) x 3 z^{(2)}_3=θ_{30}^{(1)} * x_0 + θ_{31}^{(1)} * x_1 + θ_{32}^{(1)} * x_2 + θ_{33}^{(1)} * x_3

X = [ x 0 x 1 x 2 x 3 ] X=\left[\begin{matrix}x_0\\x_1\\x_2\\x_3\end{matrix}\right]
z ( 2 ) = [ z 1 ( 2 ) z 2 ( 2 ) z 3 ( 2 ) ] = θ ( 1 ) X z^{(2)}=\left[\begin{matrix}z_1^{(2)}\\z_2^{(2)}\\z_3^{(2)}\end{matrix}\right]=θ^{(1)}*X
则上述的表达式简化为:
a 1 ( 2 ) = g ( z 1 ( 2 ) ) a_1^{(2)}=g(z_1^{(2)})

a 2 ( 2 ) = g ( z 2 ( 2 ) ) a_2^{(2)}=g(z_2^{(2)})

a 3 ( 2 ) = g ( z 3 ( 2 ) ) a_3^{(2)}=g(z_3^{(2)})

h θ ( x ) = a ( 3 ) = g ( z ( 3 ) ) h_θ(x)=a^{(3)}=g(z^{(3)})

3.2 前向传播

我们观察神经网络的计算过程,第一层的数据经过激活函数处理后的激活值,作为第二层的输入;第二层的数据经过激活函数处理后的激活值,作为第三层的输入;以此类推。

如果了解过map-reduce算法的话,可以看出这两种算法有异曲同工之妙;学过编程的同学,会不会觉得这个算法与递归很类似。

神经网络的这种层层计算的方式,称之为前向传播。

4 示例

假设y的取值范围是(0,1),特征有两个( x 1 , x 2 x_1,x_2 )。

4.1 实现and判断

and关系的判断逻辑如下:

x 1 x_1 x 2 x_2 y
0 0 0
0 1 0
1 0 0
1 1 1

在这里插入图片描述
则评估函数为: h θ ( x ) = g ( 30 + 20 x 1 + 20 x 2 ) h_θ(x)=g(-30+20x_1+20x_2)
对应的图形为:
在这里插入图片描述
得出的结论是:

  • 当z>4.6时, g ( z ) 1 g(z)\approx1
  • 当z<-4.6时, g ( z ) 0 g(z)\approx0

把X值代入到g(z)中,计算结果如下:

x 1 x_1 x 2 x_2 y
0 0 g ( 30 ) 0 g(-30)\approx0
0 1 g ( 10 ) 0 g(-10)\approx0
1 0 g ( 10 ) 0 g(-10)\approx0
1 1 g ( 10 ) 1 g(10)\approx1

正好与and的计算结果保持一致。

4.2 实现or判断

or关系的判断逻辑如下:

x 1 x_1 x 2 x_2 y
0 0 0
0 1 1
1 0 1
1 1 1

只要是 θ = [ 10 , 20 , 20 ] θ=[-10, 20, 20] 即可实现or的效果,不再赘述。

4.3 实现not判断

not关系的判断逻辑如下:

x 1 x_1 x 2 x_2 y
0 0 1
0 1 0
1 0 0
1 1 0

只要是 θ = [ 10 , 20 , 20 ] θ=[10, -20, -20] 即可实现 ( n o t   x 1 )   a n d   ( n o t   x 2 ) (not \ x_1) \ and\ (not \ x_2) 的效果,不再赘述。

4.4 实现XNOR判断

XNOR关系的判断逻辑如下:

x 1 x_1 x 2 x_2 y
0 0 1
0 1 0
1 0 0
1 1 1

上面3种逻辑运算,都是通过一层神经网络完成的,XNOR比较复杂,它的表达式是
( x 1   a n d   x 2 )   o r   ( x 1   a n d   x 2 ) (x_1 \ and \ x_2) \ or \ (x^`_1 \ and \ x^`_2)
其中 x 1 x^`_1 代表的是 n o t   x 1 not \ x_1 的意思。

用神经网络图形来表示XNOR计算为:
在这里插入图片描述
分析一下上面的图形:

  • 第一层红色的线代表的是and运算,计算结果是 a 1 ( 2 ) a_1^{(2)}
  • 第一层蓝色的线代表的是not运算,计算结果是 a 2 ( 2 ) a_2^{(2)}
  • 第二层绿色的线代表的是or运算,计算结果是 h θ ( x ) = a 1 ( 3 ) h_θ(x)=a_1^{(3)}

代入X值后,计算结果如下,与XNOR是一致的:

x 1 x_1 x 2 x_2 a 1 ( 2 ) a_1^{(2)} a 2 ( 2 ) a_2^{(2)} y
0 0 0 1 1
0 1 0 0 0
1 0 0 0 0
1 1 1 0 1
发布了48 篇原创文章 · 获赞 34 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/u013252773/article/details/100368114