吴恩达机器学习——第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+.... hθ(X)=x12+x1x2+x1x3+......+x1xn+x22+x2x3+x2x4+x2x5+....
评估函数的特征空间急剧变大,大于等于 n 2 2 \frac{n^2}{2} 2n2。这种情况下,再使用线性回归的方式,计算量就无法忍受了。

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

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

2、来源

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

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

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

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

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

3、模型

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

  • 分层:每一列代表一层,最左边的是输入层,最右边的是输出层,中间的叫隐藏层。
  • 激活函数:非线性函数g(z),该函数就是逻辑回归中使用的函数: g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1
  • 激活值:每一层的输出,称为激活值。
  • α i ( j ) α_i^{(j)} αi(j):表示第j层,第i个神经元的激活项。
  • θ ( j ) θ^{(j)} θ(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) 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(θ_{20}^{(1)} * x_0 + θ_{21}^{(1)} * x_1 + θ_{22}^{(1)} * x_2 + θ_{23}^{(1)} * x_3) 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(θ_{30}^{(1)} * x_0 + θ_{31}^{(1)} * x_1 + θ_{32}^{(1)} * x_2 + θ_{33}^{(1)} * x_3) a3(2)=g(θ30(1)x0+θ31(1)x1+θ32(1)x2+θ33(1)x3)

因为 a i ( 2 ) a_i^{(2)} ai(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)}) hθ(x)=a1(3)=g(θ10(2)a0(2)+θ11(2)a1(2)+θ12(2)a2(2)+θ13(2)a3(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 z1(2)=θ10(1)x0+θ11(1)x1+θ12(1)x2+θ13(1)x3
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 z2(2)=θ20(1)x0+θ21(1)x1+θ22(1)x2+θ23(1)x3
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 z3(2)=θ30(1)x0+θ31(1)x1+θ32(1)x2+θ33(1)x3

X = [ x 0 x 1 x 2 x 3 ] X=\left[\begin{matrix}x_0\\x_1\\x_2\\x_3\end{matrix}\right] X=x0x1x2x3
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 z(2)=z1(2)z2(2)z3(2)=θ(1)X
则上述的表达式简化为:
a 1 ( 2 ) = g ( z 1 ( 2 ) ) a_1^{(2)}=g(z_1^{(2)}) a1(2)=g(z1(2))

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

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

h θ ( x ) = a ( 3 ) = g ( z ( 3 ) ) 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 x1,x2)。

4.1 实现and判断

and关系的判断逻辑如下:

x 1 x_1 x1 x 2 x_2 x2y
000
010
100
111

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

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

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

x 1 x_1 x1 x 2 x_2 x2y
00 g ( − 30 ) ≈ 0 g(-30)\approx0 g(30)0
01 g ( − 10 ) ≈ 0 g(-10)\approx0 g(10)0
10 g ( − 10 ) ≈ 0 g(-10)\approx0 g(10)0
11 g ( 10 ) ≈ 1 g(10)\approx1 g(10)1

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

4.2 实现or判断

or关系的判断逻辑如下:

x 1 x_1 x1 x 2 x_2 x2y
000
011
101
111

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

4.3 实现not判断

not关系的判断逻辑如下:

x 1 x_1 x1 x 2 x_2 x2y
001
010
100
110

只要是 θ = [ 10 , − 20 , − 20 ] θ=[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) (not x1) and (not x2)的效果,不再赘述。

4.4 实现XNOR判断

XNOR关系的判断逻辑如下:

x 1 x_1 x1 x 2 x_2 x2y
001
010
100
111

上面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) (x1 and x2) or (x1 and x2)
其中 x 1 ‘ x^`_1 x1代表的是 n o t   x 1 not \ x_1 not x1的意思。

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

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

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

x 1 x_1 x1 x 2 x_2 x2 a 1 ( 2 ) a_1^{(2)} a1(2) a 2 ( 2 ) a_2^{(2)} a2(2)y
00011
01000
10000
11101
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值