无论是前段时间的阿尔法完胜柯洁,还是谷歌、苹果公开它的无人驾驶计划,无不说明一个事实:一场人工智能(AI)的革命已经开始!作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?这篇文章带你来一起见识一下神经网络与深度学习的主流框架。
- 1 从生物神经网络模型衍生出人工神经网络模型?
- 2 BP神经网络?
- 3 卷积神经网络?
- 4 深度学习的主流框架有哪些?各有什么特性?
1 从生物神经网络模型衍生出人工神经网络模型
1.1 人脑视觉机理
故事还是从人脑视觉机理聊起,1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家) 和TorstenWiesel,以及 Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”:可视皮层是分级的:
我们看看他们做了什么。1958 年,DavidHubel 和Torsten Wiesel 在 JohnHopkins University,研究瞳孔区域与大脑皮层神经元的对应关系。他们在猫的后脑头骨上,开了一个3 毫米的小洞,向洞里插入电极,测量神经元的活跃程度。然后,他们在小猫的眼前,展现各种形状、各种亮度的物体。并且,在展现每一件物体时,还改变物体放置的位置和角度。他们期望通过这个办法,让小猫瞳孔感受不同类型、不同强弱的刺激。之所以做这个试验,目的是去证明一个猜测。位于后脑皮层的不同视觉神经元,与瞳孔所受刺激之间,存在某种对应关系。一旦瞳孔受到某一种刺激,后脑皮层的某一部分神经元就会活跃。经历了很多天反复的枯燥的试验,同时牺牲了若干只可怜的小猫,David Hubel 和Torsten Wiesel 发现了一种被称为“方向选择性细胞(Orientation Selective Cell)”的神经元细胞。当瞳孔发现了眼前的物体的边缘,而且这个边缘指向某个方向时,这种神经元细胞就会活跃。
这个发现激发了人们对于神经系统的进一步思考。神经-中枢-大脑的工作过程,或许是一个不断迭代、不断抽象的过程。
这里的关键词有两个,一个是抽象,一个是迭代。从原始信号,做低级抽象,逐渐向高级抽象迭代。人类的逻辑思维,经常使用高度抽象的概念。
例如,从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。
总的来说,人的视觉系统的信息处理是分级的。从低级的V1区提取边缘特征,再到V2区的形状或者目标的部分等,再到更高层,整个目标、目标的行为等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表示越来越抽象,越来越能表现语义或者意图。而抽象层面越高,存在的可能猜测就越少,就越利于分类。例如,单词集合和句子的对应是多对一的,句子和语义的对应又是多对一的,语义和意图的对应还是多对一的,这是个层级体系。
1.2 感知器
上个故事主要研究了瞳孔区域与大脑皮层神经元的对应关系,众所周知生物神经元包括细胞体、树突、轴突、突触和细胞膜电位,生物神经元有兴奋与抑制以及学习与遗忘功能。从生物神经元衍生出来人工神经网络(Artificial Neural Network)的基本单元的神经元模型,神经元也叫做感知器。感知器算法在上个世纪50-70年代很流行,也成功解决了很多问题。并且,感知器算法也是非常简单的。
感知器的定义
下图是一个感知器:
可以看到,一个感知器有如下组成部分:
输入权值 一个感知器可以接收多个输入
(x1,x2,...,xn|xi∈M)
(
x
1
,
x
2
,
.
.
.
,
x
n
|
x
i
∈
M
)
,每个输入上有一个权值
wi∈M
w
i
∈
M
,此外还有一个偏置项
b∈M
b
∈
M
,就是上图中的
w0
w
0
。
激活函数 感知器的激活函数可以有很多选择,常用的有阈值函数、分段线性函数、sigmoid函数和双曲正切函数,比如我们可以选择下面这个阶跃函数(阈值函数)来作为激活函数:
输出 感知器的输出由下面这个公式来计算
y=f(w∗x+b) y = f ( w ∗ x + b ) 公式(1)
如果看完上面的公式一下子就晕了,不要紧,我们用一个简单的例子来帮助理解。
例子:用感知器实现and函数
我们设计一个感知器,让它来实现and运算。程序员都知道,and是一个二元函数(带有两个参数 x1 x 1 和 x2 x 2 ),下面是它的真值表:
x1 x 1 | x2 x 2 | y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
4 深度学习的主流框架与特性
(1)Caffe
Caffe的全称Convolutional Architecture for Fast Feature Embedding,它是一款开源高效的深度学习框架,核心语言是C++,支持命令行、Python和MATLAB接口,既可以在CPU上运行也可以在GPU上运行。作者是毕业于UC Berkeley在Facebook工作的贾杨清博士。Caffe以四维数组blobs方式存储和传递数据,利用层之间计算结果传递每层的输入和输出。其网络是一个有向无环层图,Caffe通过快速、标准的随机梯度下降算法训练一个模型(Model)。
主要特性:
• Caffe可以应用在视觉、语音识别、机器人、神经科学和天文学领域。
• Caffe提供了一个完整的工具包,用来训练、测试、微调和部署模型。
• Caffe具有模块化、表示和实现分离、测试覆盖全面、接口丰富和预训练参考模型等特点。
(2)TensorFlow
TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统,对DistBelief进行了改进,小到智能手机,大到数千台数据中心服务器各种设备都可运行。完全开源,任何人都可以用,TensorFlow的特定如下:
• 高度的灵活性。只要能够将计算表示为一个数据流图,就可以使用TensorFlow。
• 较强的可移植性。TensorFlow可以在CPU和GPU运行,也可以将模型在云端服务器或Docker容器里运行。
• 自动求微分。TensorFlow具有自动求微分能力,只需要定义预测模型的结构,将结构和目标函数结合,并添加数据,TensorFlow就能自动计算相关的微分导数。
• 多语言支持。TensorFlow支持C++、Python、Go、Java、Lua和JavaScript等语言。
Reference:
[1] 乐毅,王斌.深度学习-Caffe之经典模型详解与实战 [M].北京:电子工业出版社,2016.
http://blog.csdn.net/zouxy09/article/details/8775518
https://www.zybuluo.com/hanbingtao/note/433855
https://www.zybuluo.com/mdeditor?url=https://www.zybuluo.com/static/editor/md-help.markdown#2-%E6%A0%87%E7%AD%BE%E5%88%86%E7%B1%BB