提示:所有图片都截取自周志华的《机器学习》
转眼又又是打卡截点,还剩三小时了,金戈铁马,浴血奋战。冲。
第五章,神经网络。这个词太熟了,这年头机器学习、深度学习、神经网络可以说是家喻户晓了,但这三者分别是什么,有什么区别,相信大家并不能立马给出答案。OK,那就逐个击破,今天来看看神经网络到底是个啥东西。
同样的,学习任何概念之前,问问这个东西是什么?有什么作用?如何起作用的?
那神经网络是什么呢?
先不看书,按自己的理解,就是一种类似神经元之间相互连接的网络,我们知道人类之所以拥有伟大的智慧,是因为大脑,而大脑的智慧又来源于数以亿计的神经元之间相互连接和交流。也就是说,机器学习中神经网络肯定是为了某种智能化的功能(比如智能学习啊,智能判断啊,智能预测啊等人脑具备的一部分功能)而造的。具体如何实现这种智能,应当和这种网络的结构有关,带着猜测继续看书吧。
书里面采用了这样一段对神经网络进行定义的句子:神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟真实的生物神经系统对真实世界物体所作出的交互反应。
关键的地方就两个,一、神经网络由简单的单元组成(这种单元具有适应性,啥是适应性我也不懂);二、神经网络能够像生物神经系统一样对外界作出交互反应(也就是具有智能化的功能)。
我们知道生物神经系统中的最小单元是神经元,神经元与神经元之间会有信息的传递。那么机器学习的神经网络也应当是这种类型,有最小的神经元模型,神经元与神经元之间通过某种规则进行数据的交流。
ok,那现在先来看看组成这一切的最小砖块——神经元。
观察一个神经元应该从哪些角度来看呢?
根据书中给出的第一个最经典的并且沿用至今的M-P神经元模型
我们应该知道,要看的是这个神经元如何处理来自其他神经元的信息,如何将处理完的信息传递下去,说白了,就是看它怎么对数据进行加工的。
小小的一个细胞就像一个工厂,物质流进流出,变换形态,组合、分解、重装···神经元(注意这里提到的神经元都是机器学习中神经网络的神经元,并非生物神经元)也一样,也是一个小小的工厂,数据流进来,根绝权值汇总、减掉阈值、非线性变换···
那有了神经元,神经网络还会远吗?
不远了,只要将上面这种神经元按照一定的层次结构连接起来,就得到了神经网络。
啊,这么简单?就得到神经网络了?这种网络能实现什么功能?能和生物神经网络一样优秀吗?相信大多数人都会有这样的疑问。
哈哈,这本书估计料到了大家的反应,所以自己交待了。
书的意思是这样的:这种神经元按照一定层次结构连接起来的神经网络,先不管是不是真的能和生物神经网络一样,只需将它看做包含了许多参数的数学模型,这个数学模型是很多函数(下面这种)相互代入得到的。要知道,这种网络最后有没有用,能实现什么功能,最后还是要看数学证明的。(数学yyds)
现在神经元知道了,如何搭建神经网络也知道了,按照常理,我们有了最小单元,有了最小单元相互作用的规则,是不是就会出现一些经典的由这些最小的unit组合而成的东西?
比如说社会吧,有人(一群人)、有自然资源,经过演变必然就会出现社会制度,典型的不就有资本主义、社会主义吗?
同理,在神经元、神经网络这些概念提出之后,一定也会有经典的算法完善的一些神经网络。书里面就介绍了感知机与多层网络。
感知机一听,能感知的机器?这名字给人的感觉不像是个抽象的网络模型,更像是个智能的硬件机器。广义上,机器就是能实现某种功能的东西,而不一定要是机械组成的,所有能实现特定功能的软件都可以被称为机器。所以感知机是一种神经网络也不要大惊小怪。
行,那这个感知机是怎么样一个结构?长什么样?能实现什么功能?
啊,一个简单的感知机就长这样,尽管很简单,我们还是要抓住它不变的特征:感知机只有两层神经元。输入层和输出层,注意,只有输出层才是前面提到的M-P神经元,输入层就是无保留传递输入数据的作用。
那这个传说的感知机不就是这样一种函数吗?
是这样,所以它能完成什么功能?
根据数学证明,这种感知机模型能够处理线性可分的问题。
那它怎么处理的呢?
函数都有了,肯定是求参数,那如何求参数呢?
这就触及到机器学习和深度学习的老窝了——求参数!(说白了,求参数就是一个不断学习的过程,这也是为什么深度学习机器学习里有学习两个字)
参数有哪些?权重w和阈值θ。
为了形式统一,便于计算,我们发现那个函数表达式里只有θ和其他参数不一样,那可以将它看做是一个输入为-1的“哑结点”所对应的连接权重w(n+1)
这样求参数就可以统一为求权重了。
那怎么求?(编辑公式费时麻烦,直接放原文了。大致意思就是每次迈一步不断地调整,迈的步子是根据当前的输出与预期值之间的差决定的。)
目前为止,感知机的功能知道了,如何实现功能(如何求参数)也知道了。那感知机功能有限啊(不能处理非线性问题),所以肯定会出现新的升级。于是就有了多层网络(可以处理非线性问题),常见的就是下面这种,也叫多层前馈神经网络(也就是经常看见的名词——多层感知机)。无论什么网络要抓住它不变的东西,这样才百变不惊。这种多层前馈神经网络有两个特点:一是有多层,除了输入层输出层,还有中间的隐藏层(隐藏层和输出层的神经元能够进行加工,是功能性神经元。);二是每层神经元之间全连接,同层和跨层之间的神经元不存在连接。
多层感知机要实现它的功能也是需要学习的,需要根据输入数据调整神经元之间连接的权重以及每个功能神经元的阈值。
那它能照搬单层感知机那套学习方法吗?
肯定不能,人家都功能升级了,学习算法只会更复杂。没错,训练多层感知机就是BP,著名的BackPropagation。
看到这里,我有疑问,BP只能训练多层感知机吗?能训练其他类型的网络吗?答案是可以的。但要注意一下,我们经常说的BP网络,不是指所有的用BP算法训练的网络,而是专指用BP算法训练的多层前馈神经网络。
BP终于来了,那它究竟如何工作呢?
和感知机的学习规则差不多,都是对参数进行调整。细说来是这样的:BP也叫误差逆传播,那是什么东西的误差?如何传播呢?一般来说,BP算法的目标是最小化训练集D上的累积误差,这里以标准BP算法来进行介绍,标准BP每次仅针对一个训练样例的误差来更新连接权重和阈值。
标准BP的思路是这样的:
先将某个样本的x输入到神经网络,根据随机初始化的参数计算出yk,继而得到yk和y的差值,这个差值就是误差,根据误差可以计算出输出层和隐藏层待求参数的梯度。得到梯度之后乘以学习率就是△w了,也就可以得到权重的更新值。就这么对参数进行不断更新,直到参数收敛(收敛我猜就是△w接近于0了,输出值和预期值很接近了,误差也接近0)
ok,现在已经了从M-P神经元模型开始,走过了感知机、多层前馈神经网络以及BP算法。