引言
这段时间花了不少精力在了解人工神经网络(ANN),对其设计思想和基本算法有了一定的了解,把相关知识整理如下,一方面梳理思路,增强理解,另一方面也希望对想了解ANN的人有点帮助。
1 时代大背景
首先,我们了解以下人工神经网络的发展历史。
1943年,神经科学家和控制论专家Warren McCulloch和逻辑学家Walter Pitts基于数学和阈值逻辑算法创造了一种神经网络计算模型;
1957年,心理学家Frank Rosenblatt创造了模式识别算法感知机,用简单的加减算法实现了两层的计算机学习网络;
1974年,Paul Werbos在博士论文中提出了用误差反向传导来训练人工神经网络有效解决了异或回路问题,使得训练多层神经网络称为可能;
1985年,Rumelhart和McClelland提出了BP网络误差反向传播学习算法;
1998年,以Yann Lecun为首的研究人员实现了一个七层的卷积神经网络LeNet-5识别手写数字;
2006年,以Geoffrey Hinton为代表的加拿大高等研究院附属机构的研究人员开始将人工神经网络/联结主义重新包装为深度学习并进行推广;
2009-2012年,瑞士人工智能实验室IDSIA发展了递归神经网络和深前馈神经网络;
2012年,Geoffrey Hinton组的研究人员在ImageNet2012上夺冠,他们的图像分类效果远远超过了第二名,深度学习热潮由此开始一直持续到现在;
备注:ImageNet 是一个计算机视觉系统识别项目, 是目前世界上图像识别最大的数据库。
由此可知,对神经网络的研究是由来已久,50年代就有了感知机模型,是一种两层神经网络,90年代开始出现卷积神经网络,但是直到最近,随着互联网和大数据时代的到来,深度学习及神经网络的研究和应用得到广泛的关注,越来越多的公司企业在投入这项事业。
数据爆炸
我们正身处数据爆炸的时代漩涡。互联网公司每天的业务日志、系统日志都是PB级的。医院里的病例数据,每天的交通数据,运营商里的通信数据,智能手机用户的位置数据,甚至城市里无处不在的监控数据。
但是,数据并不等于信息!
没有整理、清洗、分析处理、展示的数据,是没有价值的,是无用的。因此,如何将数据转化为信息,进而转化为知识,成为我们这个时代最迫切的需求之一。
在数据中获取信息的技术便是数据挖掘——Data Mining!
越来越多的公司,从不同的维度,不同的切入点,进行数据挖掘技术的研究,推进了不同技术的发展。SPSS、SAS是比较传统的数据挖掘工具,主要是从传统统计学领域进行数据的整理和分析。Pentaho是个很好用的开源BI框架,能方便构建自己的商业决策系统。还有OLAP,OLTP技术。在存储领域,分布式、并行处理数据库,在近些年也如火如荼的发展,为大数据存储和计算提供底层保障。还有数据仓库技术。
而机器学习,则是从计算机模拟人类行为的角度,去推进数据挖掘技术的发展。机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。除了数据挖掘,还应用于计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别、战略游戏和机器人运用等。
机器学习算法
机器学习的算法,主要可分为以下三类:
信息论:计算数据中属性的信息量,以信息增量作为决策依据;决策树算法为代表,如ID3,IBLE算法;(信息量是概率倒数的对数)
集合论:聚类分析,相似度,距离算法;
仿生物技术:把生物体的运转过程转换成数学模型,再用数学模型去解决现实世界的非生物问题,如神经网络、遗传算法!
总结
这就我们所处的时代背景——数据爆炸,怎么样去从数据里获得信息呢?就需要进行数据挖掘!数据挖掘的需求催生了不同领域的技术进步,如统计工具,决策系统,数据存储,机器学习算法等!
而神经网络则是机器学习领域的重要算法之一。
2 人工神经网络
人工神经网络(Artificial Neural Networks)是一种模仿生物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点(神经元)之间相互连接的权重,从而达到处理信息的目的。
生物,或者说人类,真的是被设计的无比精妙,有时候,会怀疑进化论的真实性,人类太复杂了,从猴子变成人,只用了几百万年?真的不可思议。
神经元结构
一个神经元可以通过轴突作用于成千上万的神经元,也可以通过树突从成千上万的神经元接受信息。
上级神经元的轴突在有电信号传导时释放出化学递质,作用于下一级神经元的树突,树突受到递质作用后产生出电信号,从而实现了神经元间的信息传递。
化学递质可以使下一级神经元兴奋或抑制。
人工神经网络的重要概念:
1 权值矩阵:相当于神经网络的记忆!在训练的过程中,动态调整和适应。
如巴普洛夫狗与铃声的实验,神经记忆是可以训练的。我们都应该有过这样的经历,某段时间心情不好,失恋了,一周或者一个月的时间,一直在听某几首歌。过了很久,或许几年后,当再听到那首歌的时候,竟能唤醒自己当时的记忆和感受。
神经网络,是非线性的,“因”与“果”非直接相关。猫可爱,所以爱猫,这是直接因果;但爱屋及乌,因为爱一个姑娘,也爱上了她的猫,就是间接相关了。神经网络非常善于处理这样隐晦的关系。
《扁鹊见蔡桓公》中“君之疾在腠理,汤熨之所及也;在肌肤,针石之所及也;在肠胃,火齐之所及也;在骨髓,司命之所属,无奈何也。今在骨髓,臣是以无请也”
扁鹊的大脑里有一套面向医理的神经网络,他可以预见生死!现代医学,基本上是直来直去,拍个片,头痛医头脚痛医脚。问题是,不是所有的病都有症有状。
可以这么说,每个老中医都是自带一套神经网络在行医,很玄乎,但是能治病,当然也容易浑水摸鱼。
人工神经网络,真的就是很玄乎,能改变你认知世界和处理问题的方式!
2 激励函数:
-- 非线性:
-- 可微性:能使用梯度下降法求极值!
-- 单调性:凸函数,严格凸函数最多有一个最小值!
-- f(x) x
-- 输出范围:输出值控制在有限区间,
1
2
3
4
5
6
激励函数很重要,无论是对建立神经网络的模型,还是理解神经网络。首先要了解,它有以下几个影响:
1 如何能更好的求解目标函数的极值!——高等数学中求解函数极值的知识!可微,单调!
2 如何提升训练效率,让梯度的优化方法更稳定;
3 权值的初始值,不影响训练结果!
BP神经网络的结构
BP神经网络,利用输出后的误差来估计输出层的直接前导层的误差,在用这个误差估计更前一层的误差,最终获得所有各层的误差估计。
与感知机不同,这是一个多层(>=3)的全连接(FC:Fully-Connected)网络。所谓的全连接,是指所有神经元节点,都与其上一层或下一层的所有节点都有连接!
BP算法的详细推导过程,可参考:http://www.sohu.com/a/148526237_697750
目标函数,又称为损失函数,用于衡量权值矩阵的误差。当目标函数取极小值时,对应的权值矩阵最为理想,因此通过梯度下降法求多元目标函数极小值。
得到重要结论:每个权重的梯度都等于与其相连的前一层节点的输出乘以与其相连的后一层的反向传播的输出。
求得权重的梯度后,就可以对权重矩阵进行修正,然后进行下一次的训练!
TensorFlow 演示BP神经网络 :http://playground.tensorflow.org/
通过该演示,可以直观的感受到神经网络的魔力了!
概念
1 epoch:所有数据样本完整的训练一次;
2 batch:一次训练使用的样本数,batch_size * times = epoch_size,batch_size 会影响到模型的优化程度和速度,正确选择batch_size 让程序在内存效率和内存容量之间达到最佳平衡。
3 learning rate:学习率,梯度乘以学习率就是权值的修正值,学习率太小的话会训练的慢,太大的或就不平滑;
注意观察权值的变化,也就是连接线的粗细变化。很有意思,改变训练模型,会发现不同的输入元素的重要性也发生了变化。
很像中医,不同的医生开了不同的方子,却可以治同样的病。随着神经网络研究的深入,或许未来某一天,人类可以发明一个机器神医。人出生后,会通过穿戴设备或芯片,收集所有的状态信息,温度、血液中各成分浓度、情绪、饮食等等等等。以这样一个全量信息,去训练机器医生,怎么样?
听人家说,老中医带徒弟,跟医学院完全不同,就是手把手教,来了个孕妇,自己号完脉,再教徒弟号,记住了啊,这就是喜脉。
卷积与傅里叶变换
理解卷积之前,需要搞明白几个概念: 时域,频域,傅里叶变换,卷积定理。
大学时,学习工程数学、泛函分析、数字信息,学的糊里糊涂,只为了应付考试,也不知道有什么用,这段时间学习ANN,才感觉到数学基础不够用了。
频域:横坐标频率,纵坐标振幅!!!!
时域:横坐标时间,纵坐标投影!!!!
傅里叶变换:时域与频域变换,将原来难以处理的时域信号转换成了易于分析的频域信号(信号的频谱),可以利用一些工具对这些频域信号进行处理、加工.最后还可以利用傅立叶反变换将这些频域信号转换成时域信号.
卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,也就是说,在一个域中的卷积相当于另一个域中的乘积,例如时域中的卷积就对应与频域中的乘积!
想有更多了解请参考: http://daily.zhihu.com/story/3935067
时域和频域是一个很有意思的概念,时域是线性的,随着时间这条线波动,而频域是静态。比如音乐,我们听到的声音是线性的,我们可以理解和感受音乐,而乐谱是静态的,它描述了音乐的一切,从开始到结束。
去年有部电影叫《降临》,里面的外星人就是非线性思维,他们能预测未来,仿佛可以看到生命的频谱。女主角在研究外星人的语言时,也渐渐获得了这种能力。在她们看来,生命不再是一次探索,不再简简单单为了荣华富贵,而是像一首音乐,一首歌,明知道乐谱中描述了一切,还是安静的欣赏,而不是去改变。
女主角,明知道女儿出生后会夭折,也仍然选择按照预见的命运走完一生。不同的思维方式,决定了不同的行为方式!
卷积,也有一种魔力,就是可以让我们在时域中做卷积运算,来达到变换频域的效果。
卷积核与图像滤波
我们所看到的图像,均为空间域内的表现形式,我们无法辨识出图像的频域形式。要进行频域内的滤波器处理,首先就需要进行傅里叶变换,然后直接进行滤波处理,最后再用反傅里叶变换倒回到空间域内。
图像是一个二维的离散信号,对图像卷积,就是求卷积核作用在图像后得到的图像对于卷积核的累加响应!
人看到一张图像,能瞬间获取图像的信息,但是计算机却不能,计算机看到的图像是一个由像素点组成的数字矩阵!如何从巨量的像素矩阵数据中提取信息呢?怎样让计算机理解图像的内容,识别图像呢?
对图像进行卷积,就是为了提取图像特征!
先看看卷积的效果吧:
对两个人像进行卷积:
卷积神经网络的结构示意图:
经典的神经网络模型:
Lenet,1986年
Alexnet,2012年
GoogleNet,2014年
VGG,2014年
Deep Residual Learning,2015年
机器学习开源框架:
Caffe
Microsoft Cognitive Toolkit
MXNet
Scikit-learn
Spark Mllib
TensorFlow
Theano
Keras
DeepLearning4j
3 Keras 介绍与实例:
Keras是一个高层神经网络库,Keras由纯Python编写而成并基Tensorflow或Theano;