Machine Learning 学习笔记(七)———神经网络(Neural Networks)
说在前面
- 前面我们已经讨论过了线性回归和逻辑回归,下面我们将讨论神经网络的机器学习方法,下面我们将介绍为什么要引入神经网络,和引入神经网络的必要性,这一篇我们就初步的了解一下神经网络的基本内容,后面再讨论求解方法。
1.非线性假设
-
下面来举例说明一下为什么要引入神经网络,前面我们已经讲到了逻辑回归的分类问题,如下图所示,我们要找到一个非线性的边界决策线,那么这个假设函数就不再是一次的线性的表达式了,他就应该是一个高次的多项式:
h ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 x 2 + θ 5 x 1 3 x 2 + ⋅ ⋅ ⋅ ) h(x)=g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1x_2+\theta_4x_1^2x_2+\theta_5x_1^3x_2+···) h(x)=g(θ0+θ1x1+θ2x2+θ3x1x2+θ4x12x2+θ5x13x2+⋅⋅⋅)
-
这样可以拟合出来一条曲线将其分隔开,但是这只是考虑了两种特征变量,多项式的项数还不是很多,但实际问题中,比如说房价问题,它不仅与房子面积有关,还与房子楼层,房间数,年龄等等都有关系,那么这时的特征变量就很多了,表达式中的多项式可能就有他们很多变量的高次相乘的情况,这样一来我们要计算的就复杂得多了,另一方面,特征变量越多越容易出现过拟合情况,所以这时用之前的方法就有点复杂。
-
再举一个识别汽车图片的例子:
我们人可以很清楚得识别一辆汽车,但是计算机识别缺很复杂,比如汽车的手把这一个小方块,在计算机眼中,他就是一张像素表,每一个数字代表该像素的灰度值,下面要使计算机能够识别图片是其汽车而不是其他物品:
这里我们仅选取两个位置的像素表来判断该图片是否是一辆汽车:
这时候的分类问题可能就如下图所示,这就又是一个非线性的逻辑回归问题,这里我们讨论的特征是像素,对于每一个像素来说,他都是一个矩阵,加入我们上面选取的是50*50个像素,这样一共有2500个像素,也就是说我们输入一个x就有2500个分量,如果我们只考虑两个特征的乘积项x1*x2,那么特征就有大约三百万个,这还只是考虑了相乘项,还没有考虑高次项,这个计算量是相当大的,这么多的特征还很容易发生过拟合,这里也说明了之前的算法在这里不合适,需要引进新的学习算法解决这一问题。
2.神经元与大脑
-
前面已经说明了要找一个新的学习算法,就是我们要引入的神经网络,这个是在80年代就已经有的东西,到如今再次拿来重新用,因为当时的计算机运算速度还不行,无法进行实际的运用,现在的计算机计算能力提升了,所以继续用于神经网络。
-
神经网络,就是说我们想让计算机像大脑一样进行思考计算,在我们的大脑皮层上有听觉皮层,视觉皮层,触觉皮层等等,如果我们想让机器拥有和我们一样的感官,我们是不是要写不同的算法分别来实现不同的功能了?答案肯定是不,这样问题还是会复杂化,在实验中我们发现,如果断掉耳朵和听觉皮层间的神经,我们让眼睛和听觉皮层相连,这样我们就让听觉皮层学会了看,是不是很不可思议,下面还有一些不可思议的实例,比如让舌头学会看,或者更神奇的,我们给青蛙第三只眼睛,那只眼睛也会学会看等等。
-
那么既然要模拟大脑的工作,我们就来先看一下大脑的最小组成单元——神经元的构造:
-
对于Dendrite(树突)我们称为输入线,他是用来接受其他神经元发送的信号的;对于Axon(轴突)我们称为输出线,它是用来传递信号给其他神经元的;那么我们是怎样感受到外界并做出相应的反应的了?其实感知并做出相应的反应不过是树突对我们接收到的信息给我们的神经元核心进行分析然后给轴突进行输出到相应的器官上做出反应。所以这个问题的简化就是有输入,处理中心,输出,我们对此也给出了神经网络的模型,如下图所示。
-
这个模型中,x1、x2、x3是输入,h(x)是输出,中间是处理单元,在这个问题中我们有时会给输入多加一个x0,我们称为bias unit(偏置单元),我们通常设置为1,这样输入就是:
x = [ x 0 x 1 x 2 x 3 ] x=\begin{bmatrix} x0\\x1 \\ x2 \\ x3 \end{bmatrix} x=⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤
参数就是:
θ = [ θ 0 θ 1 θ 2 θ 3 ] \theta =\begin{bmatrix} \theta 0\\ \theta 1 \\ \theta 2 \\ \theta 3 \end{bmatrix} θ=⎣⎢⎢⎡θ0θ1θ2θ3⎦⎥⎥⎤
在这里我们把参数称为weights(权重),这里的h(x),
h ( x ) = 1 1 + e − θ ⊤ x h(x)=\frac{1}{1+e^{-\theta ^{\top }x}} h(x)=1+e−θ⊤x1
还是我们前面给大家介绍的逻辑函数。 -
下面我们来看一个具体的神经网络结构:
-
如果我们把第二层遮住,这样我们就会得到和前面一样的模型,在这里我们同样把第一层称为输入层,第三层称为输出层,只是这里比较特殊的是多了一个第二层,在这里我们称第二层为隐藏层,同样我们在除了输出层外的其他层加一个偏置单元。在这个问题中xi依然是输入,h(x)为输出,而这里的a_i ^j则是第j层第i个单元的activation,下面我们来表示出
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 3 ( 2 ) = g ( Θ 30 ( 1 ) x 0 + Θ 31 ( 1 ) x 1 + Θ 32 ( 1 ) x 2 + Θ 33 ( 1 ) x 3 ) 而 我 们 的 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 ) ) 在 这 里 我 们 有 Θ ( 1 ) = [ Θ 10 ( 1 ) Θ 11 ( 1 ) Θ 12 ( 1 ) Θ 13 ( 1 ) Θ 20 ( 1 ) Θ 21 ( 1 ) Θ 22 ( 1 ) Θ 23 ( 1 ) Θ 30 ( 1 ) Θ 31 ( 1 ) Θ 32 ( 1 ) Θ 33 ( 1 ) ] , 称 为 权 值 控 制 函 数 矩 阵 的 映 射 , 大 小 是 第 j + 1 层 的 层 数 ∗ ( 第 j 层 的 层 数 + 1 ) , 如 果 我 们 把 第 j 层 的 层 数 用 s j 来 表 示 , 则 Θ ( j ) 的 大 小 为 s j + 1 × ( s j + 1 ) , 如 果 我 们 对 a 1 ( 2 ) 表 达 式 中 的 输 入 参 数 Θ 10 ( 1 ) x 0 + Θ 11 ( 1 ) x 1 + Θ 12 ( 1 ) x 2 + Θ 13 ( 1 ) x 3 用 z 1 ( 2 ) 来 代 替 , 这 样 a 1 ( 2 ) = g ( z 1 ( 2 ) ) 同 样 地 , 后 面 也 可 以 这 样 表 示 , 这 样 表 达 式 就 成 了 x = [ x 0 x 1 x 2 x 3 ] 我 们 对 x 用 a ( 1 ) 表 示 , z ( 2 ) = [ z 1 ( 2 ) z 2 ( 2 ) z 3 ( 2 ) ] , z ( 2 ) = Θ ( 1 ) a ( 1 ) , a ( 2 ) = g ( z ( 2 ) ) , 我 们 加 上 a 0 ( 2 ) = 1 , 则 z ( 3 ) = Θ ( 2 ) a ( 2 ) , h Θ ( x ) = a ( 3 ) = g ( z ( 3 ) ) , 这 个 时 候 表 达 式 就 比 较 简 单 了 。 a_{1}^{(2)}=g(\Theta _{10}^{(1)}x_{0}+\Theta _{11}^{(1)}x_{1}+\Theta _{12}^{(1)}x_{2}+\Theta _{13}^{(1)}x_{3})\\a_{2}^{(2)}=g(\Theta _{20}^{(1)}x_{0}+\Theta _{21}^{(1)}x_{1}+\Theta _{22}^{(1)}x_{2}+\Theta _{23}^{(1)}x_{3})\\a_{3}^{(2)}=g(\Theta _{30}^{(1)}x_{0}+\Theta _{31}^{(1)}x_{1}+\Theta _{32}^{(1)}x_{2}+\Theta _{33}^{(1)}x_{3})\\而我们的h_{\Theta }(x)=a_{1}^{(3)}=g(\Theta _{10}^{(2)}a_{0}^{(2)}+\Theta _{11}^{(2)}a_{1}^{(2)}+\Theta _{12}^{(2)}a_{2}^{(2)}+\Theta _{13}^{(2)}a_{3}^{(2)})\\ 在这里我们有\Theta ^{(1)}=\begin{bmatrix} \Theta _{10}^{(1)} & \Theta _{11}^{(1)} & \Theta _{12}^{(1)} &\Theta _{13}^{(1)} \\ \Theta _{20}^{(1)} &\Theta _{21}^{(1)} & \Theta _{22}^{(1)} & \Theta _{23}^{(1)}\\ \Theta _{30}^{(1)}&\Theta _{31}^{(1)} & \Theta _{32}^{(1)} & \Theta _{33}^{(1)} \end{bmatrix},\\称为权值控制函数矩阵的映射,大小是第j+1层的层数*(第j层的层数+1),如果我们把第j层的层数用s_{j}来表示,\\则\Theta ^{(j)}的大小为s_{j+1}\times (s_{j}+1),\\如果我们对a_{1}^{(2)}表达式中的输入参数\Theta _{10}^{(1)}x_{0}+\Theta _{11}^{(1)}x_{1}+\Theta _{12}^{(1)}x_{2}+\Theta _{13}^{(1)}x_{3}用z_{1}^{(2)}来代替,这样a_{1}^{(2)}=g(z_{1}^{(2)})\\同样地,后面也可以这样表示,这样表达式就成了x=\begin{bmatrix} x0\\x1 \\ x2 \\ x3 \end{bmatrix}\\我们对x用a^{(1)}表示,z^{(2)}=\begin{bmatrix} z_{1}^{(2)}\\ z_{2}^{(2)} \\ z_{3}^{(2)} \end{bmatrix},z^{(2)}=\Theta ^{(1)}a^{(1)},a^{(2)}=g(z^{(2)}),\\我们加上a_{0}^{(2)}=1,则z^{(3)}=\Theta ^{(2)}a^{(2)},h_{\Theta }(x)=a^{(3)}=g(z^{(3)}),这个时候表达式就比较简单了。 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)而我们的hΘ(x)=a1(3)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))在这里我们有Θ(1)=⎣⎢⎡Θ10(1)Θ20(1)Θ30(1)Θ11(1)Θ21(1)Θ31(1)Θ12(1)Θ22(1)Θ32(1)Θ13(1)Θ23(1)Θ33(1)⎦⎥⎤,称为权值控制函数矩阵的映射,大小是第j+1层的层数∗(第j层的层数+1),如果我们把第j层的层数用sj来表示,则Θ(j)的大小为sj+1×(sj+1),如果我们对a1(2)表达式中的输入参数Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3用z1(2)来代替,这样a1(2)=g(z1(2))同样地,后面也可以这样表示,这样表达式就成了x=⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤我们对x用a(1)表示,z(2)=⎣⎢⎡z1(2)z2(2)z3(2)⎦⎥⎤,z(2)=Θ(1)a(1),a(2)=g(z(2)),我们加上a0(2)=1,则z(3)=Θ(2)a(2),hΘ(x)=a(3)=g(z(3)),这个时候表达式就比较简单了。
- 以上就是神经网络的模型解释,并将每一个进行向量化,方便后面的求解计算,那么为什么使用这种模型就可以大大简化计算呢?原因是如果我们盖住中间的隐藏层,只有输入和输出层,给出输入就可以得到输出,中间的隐藏层是他自己完成的,是一个自我学习的过程。下面的模型是一个含有两个隐藏层的例子,这也意味着我们可以求更复杂的问题:
3.例子与直觉理解
-
以上的分析比较抽象,都是仅仅给出了模型结构,下面通过几个例子详细的分析一下神经网络的原理。
-
非线性的分类问题(XOR异或、XNOR异或非),如下图所示,关于两个输入x1、x2(他们的取值都只有0和1),这是一个异或非的问题,对于这个问题,很明显是一个非线性的,那么该如何构造神经网络来对此进行解决了?
-
AND
在这里x1,x2{0,1},y=x1 AND x2,在这里我们构造出神经网络模型如图所示,我们还相应地给出了每个输入对应的权重(参数),分别是-30、20、20,则
h θ ( x ) = g ( − 30 + 20 x 1 + 20 x 2 ) h_\theta(x)=g(-30+20x_1+20x_2) hθ(x)=g(−30+20x1+20x2)
而这个g(z)函数,我们在前面时已经给大家做过介绍,在这里我们同样用它,而当z=4.6时,g(z)=0.99接近于1,当z=-4.6时,g(z)=0.01接近于0,所以对于这个表达式,我们可以列出真值表.
x1 | x2 | h(x) |
---|---|---|
0 | 0 | g(-30)=0 |
0 | 1 | g(-10)=0 |
1 | 0 | g(-10)=0 |
1 | 1 | g(10)=1 |
我们根据这个真值表可以看出,只有当x1和x2都为1时,最后结果才为1,即h(x) = x1 AND x2.
-
OR
在这里我们要实现或的功能,我们同样给出神经网络的模型如图所示。只是这里的权重(参数)有所改变,为-10、20、20,则
h Θ ( x ) = g ( − 10 + 20 x 1 + 20 x 2 ) h_{\Theta }(x)=g(-10+20x_{1}+20x_{2}) hΘ(x)=g(−10+20x1+20x2)
同样我们给大家列出真值表如下
x1 | x2 | h(x) |
---|---|---|
0 | 0 | g(-10)=0 |
0 | 1 | g(10)=1 |
1 | 0 | g(10)=1 |
1 | 1 | g(30)=1 |
很明显这是一个OR运算,即h(x) = x1 OR x2.
-
NOT
取反运算。模型如图所示,输入只有一个,再加上一个偏置单元,我们给的权重是10、-20,则 h(x) = g(10 - 20 x1),他的真值表如下:
x1 | h(x) |
---|---|
0 | g(10)=1 |
1 | g(-10)=0 |
- 有了上面的AND、OR、NOT,下面我们回到刚开始的问题,构建XNOR(异或非),大家首先要明白
x 1 X N O R x 2 = ( x 1 ‾ A N D x 2 ‾ ) O R ( x 1 A N D x 2 ) x1 \quad XNOR \quad x2 = (\overline{x1}\quad AND \quad \overline{x2})OR(x1\quad AND \quad x2) x1XNORx2=(x1ANDx2)OR(x1ANDx2)
下面我们就有x1 AND x2,(NOTx1) AND( NOTx2)、x1 OR x2.
所以现在我们就可以用以上三种来构造出更复杂的神经网络XNOR了:
同样地,我们列出真值表如下:
x1 | x2 | a1(2) | a2(2) | h(x) |
---|---|---|---|---|
0 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 1 |
4.多元分类
-
在我们的实际生活中,很多分类的问题不止只有两类,比如前面给大家介绍的怎样在几张照片中找出小车,那如果现在我们把问题更加复杂化,我们需要对最后的结果进行分类,哪些是小车,哪些是行人,哪些是摩托车等等,这个时候输出的结果就不能只用单一的0或1表示了,如图所示的分类问题。
这个时候,神经网络大概是这样的,如图所示,输出的结果就不止一个了这个时候结果就不能只用一个分量来表示了。
在 这 里 我 们 用 h Θ ( x ) ≈ [ 1 0 0 0 ] 来 表 示 结 果 是 行 人 , h Θ ( x ) ≈ [ 0 1 0 0 ] 来 表 示 结 果 是 小 车 等 等 。 这 个 时 候 我 们 的 训 练 集 还 是 ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) , 不 过 y 就 不 是 在 属 于 1 , 2 , 3 , 4 了 , 而 是 我 们 这 里 的 [ 1 0 0 0 ] 、 [ 0 1 0 0 ] 、 [ 0 0 1 0 ] 、 [ 0 0 0 1 ] , 他 们 分 别 代 表 上 面 的 四 种 结 果 。 在这里我们用h_{\Theta }(x)\approx \begin{bmatrix} 1\\ 0 \\ 0 \\ 0 \end{bmatrix}来表示结果是行人,\\h_{\Theta }(x)\approx \begin{bmatrix} 0\\ 1 \\ 0 \\ 0 \end{bmatrix}来表示结果是小车等等。\\这个时候我们的训练集还是(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)}),\\不过y就不是在属于1,2,3,4了,而是我们这里的\begin{bmatrix} 1\\0 \\ 0 \\ 0 \end{bmatrix}、\begin{bmatrix} 0\\1 \\ 0 \\ 0 \end{bmatrix}、\begin{bmatrix} 0\\0 \\ 1 \\ 0 \end{bmatrix}、\begin{bmatrix} 0\\0 \\ 0 \\ 1 \end{bmatrix},\\他们分别代表上面的四种结果。 在这里我们用hΘ(x)≈⎣⎢⎢⎡1000⎦⎥⎥⎤来表示结果是行人,hΘ(x)≈⎣⎢⎢⎡0100⎦⎥⎥⎤来表示结果是小车等等。这个时候我们的训练集还是(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m)),不过y就不是在属于1,2,3,4了,而是我们这里的⎣⎢⎢⎡1000⎦⎥⎥⎤、⎣⎢⎢⎡0100⎦⎥⎥⎤、⎣⎢⎢⎡0010⎦⎥⎥⎤、⎣⎢⎢⎡0001⎦⎥⎥⎤,他们分别代表上面的四种结果。
结尾
- 以上就是神经网络的基本内容,后面一篇将讨论神经网络的具体参数求解算法,如果有哪些叙述不对的地方,希望大家能够指出,谢谢。