斯坦福大学机器学习第八课“神经网络的表示(Neural Networks: Representation)”学习笔记,本次课程主要包括7部分:
1) Non-linear hypotheses (非线性hypotheses)
2) Neurons and the brain (神经元和大脑)
3) Model representation I (模型表示一)
4) Model representation II (模型表示二)
5) Examples and intuitions I (例子和直观解释一)
6) Examples and intuitions II (例子和直观解释二)
7) Multi-class classification (多类分类问题)
以下是每一部分的详细解读。
1) Non-linear hypotheses (非线性hypotheses)
非线性分类器:
我们之前谈过线性回归,逻辑回归,当我们遇到一些比较复杂的分类问题时,是否还有其他选择?例如,对于多项式回归:
可以得到如下的非线性分类器:
假设这是一个房价预测问题,不过这一次不再是预测房价(回归问题),而是预测未来6个月是否能售出(分类问题)。如果有100个独立特征,例如:
那么,当我们任取两个特征作为组合特征时,大约可以得到5000个特征(O(n2));当我们任取3个特征作为组合特征时,大约可以得到170000(O(n3))个特征.
这样的问题还有很多,例如在计算机视觉的汽车检测问题中,对于一副汽车图片来说,你可以轻易的辨别出这是一辆汽车,但是在计算机或者相机“眼里”,这只是一堆像素的数字矩阵而已:
所以,对于汽车检测问题,我们需要一堆汽车图片:
和一堆非汽车图片作为训练集:
训练一个用于汽车检测的分类器,对于一个测试图片,判断是否是汽车:
一种方法是从每辆汽车是取两个像素点作为样本的特征,然后通过学习算法来训练分类器:
那么这些正负例(汽车 or 非汽车)训练样本可以用图形表示如下:
假设每幅图片有50 * 50 = 2500个像素,那么每个样本有2500个像素点可以选择,如果是是二次项组合特征,大约有3百万个特征组合:
对于这样的有着大量特征的分类问题,除了逻辑回归,是否还有其他的学习算法?接下来,我们将引入神经网络(Neural Networks),一种试图模拟人类大脑的学习算法,这个算法,对于复杂的假设空间和复杂的非线性问题有很好的学习能力。
2) Neurons and the brain (神经元和大脑)
神经网络:
- 起源于尝试让机器模仿大脑的算法;
- 在80年代和90年代早期非常流行,慢慢在90年代后期衰落;
- 最近得益于计算机硬件能力,又开始流行起来:对于很多应用,神经网络算法是一种“时髦”的技术;
大脑很神奇,可以让我们去听,去看,去触,也可以做数学题,做微积分,做很多神奇的事情,要模仿大脑,似乎需要我们写很多程序来做不同的事情?但是恰恰与此相反,做这些事情仅仅需要一个学习算法。下面是两个例子,是神经科学家做的非常酷的两个实验,这些实验可以说明我们仅需一种学习算法就可以模拟很多事情。
听觉皮层实验:
上图是大脑的一部分,红色的部分是听觉皮层,用来处理耳朵收集的声音信号并让大脑理解。神经科学家做了一个实验,切断耳朵和听觉皮层的联系,并且连接眼睛和听觉皮层,这样从眼睛采集的信号不再传送到视神经而是听觉皮层,这样做得最终结果是听觉皮层将会学习“看"。
体感皮层实验:
上图的红色区域是体感皮层,主要身体的触觉,与听觉皮层实验相似,如果我们做相似的实验,那么体感皮层也将学会”看“。
上述两个实验统称为神经重布线实验(neuro-rewiring experiments), 这些实验给我们的感觉就是同样的一块儿脑组织既可以处理视觉,也可以处理听觉,还可以处理触觉,也许就存在一种学习算法来处理视觉信号,听觉信号和触觉信号。如果我们能近似模拟或实现大脑的这种学习算法,我们就能获得绝大部分大脑可以完成的功能,因为大脑可以自己去处理不同类型的数据。以下是一些模拟大脑传感器的例子:
包括:用舌头去“看”;回声定位或者声纳定位;触觉皮带-方向感(向小鸟一样感知方向);给青蛙植入第三只眼。
这些都是很酷的例子,也许人类的AI之梦并不遥远了!
3) Model representation I (模型表示一)
大脑中的神经元:
神经网络的目标就是模拟大脑中的神经元或网络,因此在介绍hypotheses的表示之前,先让我们来看一看大脑中神经元:
注:关于这一块儿,由于不太熟悉,即使听Andrew Ng 老师的课也有很多糊涂的地方,于是Google了一下神经网络,发现了一个非常不错的介绍神经网络的材料《神经网络入门(连载)》,以下转载自该连载中对于大脑中的神经元的描述,我觉得非常清楚:
在人的生命的最初9个月内,这些细胞以每分钟25,000个的惊人速度被创建出来。神经细胞和人身上任何其他类型细胞十分不同,每个神经细胞都长着一根像 电线一样的称为轴突(axon)的东西,它的长度有时伸展到几厘米[译注],用来将信号传递给其他的神经细胞。神经细胞的结构如图1 所示。它由一个细胞体(soma)、一些树突(dendrite) 、和一根可以很长的轴突组成。神经细胞体是一颗星状球形物,里面有一个核(nucleus)。树突由细胞体向各个方向长出,本身可有分支,是用来接收信号 的。轴突也有许多的分支。轴突通过分支的末梢(terminal)和其他神经细胞的树突相接触,形成所谓的突触(Synapse,图中未画出),一个神经 细胞通过轴突和突触把产生的信号送到其他的神经细胞。
每个神经细胞通过它的树突和大约10,000个其他的神经细胞相连。这就使得你的头脑中所有神经细胞之间连接总计可能有l,000,000,000,000,000个。这比100兆个现代电话交换机的连线数目还多。所以毫不奇怪为什么我们有时会产生头疼毛病!
神经细胞利用电-化学过程交换信号。输入信号来自另一些神经细胞。这些神经细胞的轴突末梢(也就是终端)和本神经细胞的树突相遇形成突触 (synapse),信号就从树突上的突触进入本细胞。信号在大脑中实际怎样传输是一个相当复杂的过程,但就我们而言,重要的是把它看成和现代的计算机一 样,利用一系列的0和1来进行操作。就是说,大脑的神经细胞也只有两种状态:兴奋(fire)和不兴奋(即抑制)。发射信号的强度不变,变化的仅仅是频 率。神经细胞利用一种我们还不知道的方法,把所有从树突上突触进来的信号进行相加,如果全部信号的总和超过某个阀值,就会激发神经细胞进入兴奋 (fire)状态,这时就会有一个电信号通过轴突发送出去给其他神经细胞。如果信号总和没有达到阀值,神经细胞就不会兴奋起来。这样的解释有点过分简单 化,但已能满足我们的目的。
注意对于我们的这幅图来说,比较关键的是树突(dendrite)是输入(input wires),轴突(axon)是输出(output wires).
现在我们模拟大脑中的神经元结构建立一个简单的模型-Logistic unit:
其中x1,x2,x3称为输入(来自与其他神经元的输入信号), x0称为偏置单元(bias unit), θ称为权重或参数, hθ(x)称为激活函数(activation function), 这里的激活函数用了sigmoid(logistic) function:
将多个神经元组织在一起,我们就有了神经网络,例如如下的三层结构的神经网络:
第一层称为输入层,第二层是隐藏层,第三层是输出层,注意输入层和隐藏层都存在一个偏置(bias unit). 其中:
aji = j层第i个单元的激活函数
Θ(j) = 从第j层映射到第j+1层的控制函数的权重矩阵
对于上图,我们有如下的公式表示:
如果神经网络在第j层有sj个单元,在第j+1层有sj+1个单元,那么权重矩阵Θ(j)的纬度是sj+1×(sj+1)
4) Model representation II (模型表示二)
前馈网络:向量化实现
上一节我们讲到的神经网络称为前馈网络,也称前向网络,这种网络只在训练过程会有反馈信号,而在分类过程中数据只能向前传送,直到到达输出层,层间没有向后的反馈信号,因此被称为前馈网络。感知机( perceptron)与BP神经网络就属于前馈网络。我们已经给出了这个神经网络的模型表示,但是不够简洁,下面我们来向量化这个模型(具体的过程推荐看视频,以下仅给出总结):
其他的网络结构:
除了上述的前馈网络外,神经网络还有其他的一些网络结构,譬如:
其中第一层仍是输入层,最后一层第四层数输出层,中间两层是隐藏层。
5) Examples and intuitions I (例子和直观解释一)
本节和下一节的例子均是“逻辑代数”中的逻辑函数,因此有必要在这里交代一点逻辑代数的背景,以下文字摘录自清华大学出版社的《电子技术基础》6.2节,电子书链接来自Google book,同时会在例子的介绍中引用该书中的一些基本定义:
逻辑代数是描述客观事物逻辑关系的数学方法,它首先是由英国数学家乔治*布尔提出,因此也称为布尔代数,而后克劳德*香农将逻辑代数应用到继电器开关电路的设计中,所以又称为开关代数。和普通代数一样,在逻辑代数中用字母表示变量与函数,但变量与函数的取值只有0和1两种可能。这里的0和1已不再表示数量的大小,只代表两种不同的逻辑状态。我们把这种二值变量称为逻辑变量,简称为变量,这种二值函数称为逻辑函数,简称为函数。
非线性分类器例子-异或(XOR)/同或(XNOR)
我们的目标是利用神经网络实现一个逻辑代数中的同或运算,因此首先介绍一下同或运算和异或运算:
同或逻辑和异或逻辑是只有两个逻辑变量的逻辑函数。如果当两个逻辑变量A和B相同时,逻辑函数F等于1,否则F等于0,这种逻辑关系称为同或。反之,如果当两个逻辑变量A和B相异时,逻辑函数F等于1,否则F等于0,这种逻辑关系称为异或。
下图是一个同或预算的示例,其中x1,x2是二值变量(0, 1):
可以将其对应到一个非线性分类器,如下图所示:
同或逻辑和异或逻辑互补:
同或运算和异或运算是逻辑代数中的复合运算,因此下面我们先介绍三种最基本的逻辑运算(与逻辑运算、或逻辑运算、非逻辑运算),同时分别介绍其对应的神经网络实现,最后将这几种基本的逻辑运算组合,形成最终的同或逻辑运算的神经网络。
与(AND)逻辑运算示例:
相信大家对于与(AND)运算很熟悉,其基本的表达式如下:
我们可以用一个简单的神经网络(一个神经元)表示与逻辑运算:
其中激活函数hΘ(x)可以用如下公式表示:
这里的激活函数是sigmoid(logistic) function,其图形表示如下:
对于g(z)来说,当z>=4.0时,g(z)约等于1;当z<=-4.0时,g(z)约等于-1. 对于上述激活函数,将二值(0, 1)变量x1,x2代入,我们得到如下的对应表:
可以看出,这里的神经网络激活函数hΘ(x)近似等于与逻辑运算。
或(OR)逻辑运算示例:
同理,我们也给出一个简单的神经网络模型来模拟或(OR)逻辑运算:
将二值(0, 1)变量x1,x2代入,得到如下的或逻辑运算对应表:
6) Examples and intuitions II (例子和直观解释二)
继续上一节的例子,我们介绍第三个基本的逻辑运算:非(NOT)逻辑运算
用一个简单的神经网络模型来模拟非(NOT)逻辑运算:
得到的对应表如下:
非逻辑运算仅针对一个输入值,我们来表示一个略微复杂的逻辑表达式:
这个表达式等于1的前提是”当且仅当x1=x2=0".
可以用神经网络模拟如下:
好了,有了上述三个基本逻辑运算的基础和相关的神经网络模型表示,我们可以将其组合为一个略微复杂的”同或(XNOR)逻辑运算的神经网络“:
对于这个神经网络,这里稍作一点解释,同或运算的表达式如下:
上图中第二层隐藏网络a1和a2分别代表了A And B和Not A And Not B,a1和a2又做了一次或逻辑运算就得到了同或逻辑运算。该神经网络对应的输出与同或运算的真值表相同:
第6节的手写数字识别(分类)的演示请读者自行观看视频,此处略。
7) Multi-class classification (多类分类问题)
在逻辑回归的笔记中,我们谈到了多类分类问题,而神经网络同样可以应用于多类分类问题,只不过在表达上略有区别。首先来看一个机器视觉中分类的例子:
对于一个输入图片,需要识别其属于行人、轿车、摩托车或者卡车中的一个类型,这是一个多类分类的问题。用神经网络表示如下:
其中输出hΘ(x)是一个4维向量,如下表示:
当向量的某个元素为1,其他为0时,代表分类结果为某个为1元素所对应的类别。这与之前逻辑回归中的多类分类表示不同,在逻辑回归中,输出y属于类似于{1, 2, 3,4}中的某个值,而非一个向量。因此,如果要训练一个多类分类问题的神经网络模型,训练集是这样的:
特别注意y(i)是一个向量。
本章到此结束,下一讲将会将神经网络的学习问题。转载请注明出处"我爱公开课”,谢谢。
参考资料:
http://en.wikipedia.org/wiki/Neural_network
http://en.wikipedia.org/wiki/Artificial_neural_network
神经网络编程入门
神经网络入门连载
http://library.thinkquest.org/29483/neural_index.shtml
http://home.agh.edu.pl/~vlsi/AI/xor_t/en/main.htm
http://en.wikipedia.org/wiki/NOR_logic
http://en.wikipedia.org/wiki/Logic_gate
清华大学出版社的《电子技术基础》,google book
来源:http://52opencourse.com/139/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%AC%E5%85%AB%E8%AF%BE-%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E7%9A%84%E8%A1%A8%E7%A4%BA-neural-networks-representation