《机器学习算法的数学解析与Python实现》读书笔记:第10章 神经网络分类算法

目录

第10章 神经网络分类算法

10.1 用神经网络解决分类问题

10.1.1 神经元的“内心世界”

10.1.2 从神经元看分类问题

10.1.3 神经网络的“细胞”:人工神经元

10.1.4 构成网络的魔力

10.1.5 神经网络与深度学习

10.2 神经网络分类的算法原理

10.2.1 神经网络分类算法的基本思路

10.2.2 神经网络分类算法的数学解析

10.2.3 神经网络分类算法的具体步骤

10.3 在Python中使用神经网络分类算法

10.4 神经网络分类算法的使用场景


第10章 神经网络分类算法

10.1 用神经网络解决分类问题

神经网络算法有“三宝”,神经元、激活函数和反向传播机制。

最早被提出的是神经元,又称为M-P模型,它用数学模型模拟了生物神经元所包含的细胞体、树突、轴突和突触等生理特征。

接着最原始的神经网路算法感知机算法也提出来了,由于这时还没有激活函数,输出实际都是输入的线性组合结果,效果自然相当有限,非线性函数以“激活函数”的身份被加进神经网络算法,很快神经网络算法就达到了第一个发展高潮。

马文·闵斯基证明了单层的神经网络永不可能解决非线性问题,当时的人们也还不知道应该怎么训练多层神经网络,很多人甚至不相信多层神经网络也是能同样训练的。

反向传播算法有效解决了多层神经网络的误差传播问题,神经网络算法迎来了第二个发展高潮,今天的深度学习在多层神经网络中传递误差用的也还是反向传播算法。

大概是20世纪八九十年代,神经网络算法的“三件套”就已经悉数登场了,那么为什么直到最近才迎来深度学习的大爆发呢?其中有许多复杂的原因,既包括神经网络算法理论不清晰,而这期间又正好出现了支持向量机这款从理论到实践极具口碑的“梦想”算法,研究人员还需要十来年的时间才打磨出效果出色的卷积层、池化层等神经网络部件,但根本原因是因为性能。

很容易忽略的是,算法不仅是抽象的理论,设计上再无可挑剔的算法最终也需要依赖硬件运行,而硬件性能上的瓶颈也就成为算法的实际瓶颈。

神经网络算法具有良好的延展性,可以堆砌出非常复杂的结构,这一方面意味着神经网络算法十分“吃”硬件,另一方面也意味着简单地堆砌硬件也能取得算法效果的极大提升。

在计算机硬件资源匮乏的20世纪八九十年代,这个性追是使神经网络变得黯淡的重要原因,也是深度学习在计算机硬件“白菜化”的今天掀起神经网络第三个发展高潮的重要原因。

10.1.1 神经元的“内心世界”

神经网络算法无疑是一类仿生学算法,但要学习神经网络算法的思想,研究这款算法向生物学借鉴了什么机制,关键不在于神经细胞的每个部分都叫什么名字,我们更关心的是神经细胞和神经细胞构成了怎样的机制,这些机制又是怎样被用于解决我们想要解决的问题。

最早期感知机时代的神经元函数非常简单,就是一个线性函数,所以这样的神经元函数所产生的的输出只能是输入的线性组合,数据分布只要稍微复杂一点就不满足线性关系了,神经元函数就无法很好地拟合。

现在最常用的神经元函数虽然还称为函数,但实际上是由两部分组成,第一个部分仍然是线性函数,输入首先进入线性函数,计算产生结果后,再输入第二个部分。

第二个部分通常会选择一款非线性函数,称为激活函数(Activation Function,也常称为激励函数),对线性函数的输入结果进行非线性函数,然后将结果作为最终的输出。

10.1.2 从神经元看分类问题

激活函数最终产生的同样是二元输出,这也是神经网络可以用于分类的原因。

神经元利用“兴奋传递”机制完成判断,这个过程通常称为正向传播,神经网络是通过正向传播来完成输入数据到产生输出的过程。

10.1.3 神经网络的“细胞”:人工神经元

激活函数是神经网络的关键,这个函数也简单,总的来说就是条件判断,满足激活条件的输出“1”,不满足则输出“0”。激活条件很重要,因为神经元的核心工作机制就是根据刺激来决定是否激活,激活就继续往前传导刺激,否则刺激就在在此中断,不会对最终的输出产生影响。

激活函数选择的好坏将直接影响神经网络的效果。

10.1.4 构成网络的魔力

在神经网络中,层是非常重要的概念,深度学习中所谓的“深度”就是神经网络的层数很多、很深的意思。

数据依靠神经网络的激活机制一个接一个地往下传递的,接受同样输入的神经元很可能并非一个,我们把接受同样输入的神经元排成一列,从输入到输出的方向看,每一列就是一层。

在神经网络中,层通常由输入层、输出层和隐藏层组成:

直接接受输入数据的神经元是第一层,也成为输入层。

产生最终数据并输出到外部的是最后一层,也称为输出层。

其他神经元由于位于神经网络内部,既不直接接受输入,又不直接产生输出,所以统称为隐藏层。

没有或只有一层隐藏层的神经网络是最简单的神经网络,根据实际需要,实践中可能会使用非常多的隐藏层。神经网络的层数越多,模型的学习能力就越强,就越能拟合复杂的“神秘函数”。

神经网络的神奇之处就在于能把分散的信息进行汇总,从而提取更高层、更抽象的信息。网络中的任何一个节点单拎出来都是以偏概全,是真正意义上的盲人摸象,但这些局部信息通过网络汇合在了一起,反而形成全局信息,就能借此看到全貌。

通过神经网络的结构,还可以起到灵活组合不同的输入来提高预测结果的准确性的效果。在上面的这个例子中,虽然输入层有三个输入维度,但实际有用的只有两个,神经元就可以在学习过程中通过调节线性函数中的相应权值,增加有价值的输入的权值,降低没有价值的输入的权值,使得预测更为准确。

一般来说,神经元的个数和层数越多,神经网络的这种抽象组合能力就越强,“神秘函数”的表达式再复杂,只要神经网络中的神经元个数和层数足够多,能够覆盖可能的组合空间,就能通过这种简单的方法准确拟合。

10.1.5 神经网络与深度学习

深度学习就是由神经网络发展而来的,所谓的“深度”,其实是“用了多层的神经网络”的意思。

10.2 神经网络分类的算法原理

10.2.1 神经网络分类算法的基本思路

前面我们分别介绍了神经网络的两个基本构件,分别是包含非线性激活函数的神经元,以及由神经元组成的网络。前者是微观结构、后者是宏观结构。

为了训练,神经网络引入了正向传播和反向传播机制。正向传播扮演的是传播输入的功能。输入层的神经元首先接收输入,通过激励函数产生输出,这是第一步。输入层的输出则作为隐藏层的输入,再通过激励函数产生输出,这是第二步。输入就这样一层一层传递下去,这个过程有点像击鼓传花,一直到输出层产生输出,正向传播就完成了。

偏差的传递也类似,但因为方向相反,所以称之为反向传播:首先通过输出层获取偏差,同样要计算一个值往后传递,但这时就不是通过激励函数了,而是要获知每个输入方向所贡献的偏差值。

输出层把偏差反向传播到隐藏层,让里层的神经元得到了偏差,就能把训练继续下去。同样,隐藏层的神经元得到偏差后,不但自己调整权值,而且照葫芦画瓢,继续往后传播偏差。同样一层接一层地往后传播,一直到输入层。整个神经网络就完成了一轮权值更新。

后向传播权值更新的方法与Logistic回归一样,同样是使用梯度下降。

10.2.2 神经网络分类算法的数学解析

神经网络算法中有两个重要部分涉及数学,一是激活函数,二是传递机制。传递机制又分为正向传播和反向传播,正向传播就是不断进行代数求值的过程,反向传播是神经网络算法的特色,整套机制依赖数学的微分机理。

1.激活函数

Tanh函数正式名称为双曲正切函数。

ReLu正式名称为线性整流函数。

2.反向传播

机器学习中所谓的“学习”其实有两个过程,一是通过模型进行预测,二是通过预测值与实际值求偏差。让偏差不断缩小,就是机器学习的学习过程。把这里的f(x)看作模型,通过x值求得的y值其实就是预测值,我们需要将偏差回传,就需要沿着表达式将偏差反推回去。

神经网络算法的反向传播独特之处在于方向,神经网络中一个神经元的输入可能来源于多个神经元的输出,反向传播算法用偏导来计算各个输入神经元的损失偏差。

神经网络的一大特点就是隐藏层神经元和输出层神经元的输入,都是来自于其他神经元的输出,如果神经元A是隐藏层,输入依靠其他神经元的输出,也可以用同样办法求出该神经元的损失值。

通过链式法则可以不断反向求出神经网络中任一神经元的损失值,从而让每一个神经元都能根据损失值完成调整,这个过程就是神经网络中偏差的反向传播,也是神经网络的“学习”过程。

10.2.3 神经网络分类算法的具体步骤

神经网络分类算法是一种有监督的分类算法,输入同样为样本特征值向量,以及对应的类标签,输出则为具有分类功能的模型,能够根据输入的特征值预测分类结果。使用神经网络分类算法,具体需要五步:

1)初始化神经网络中所有神经元激励函数的权值;

2)输入层接受输入,通过正向传播产生输出;

3)根据输出的预测值,结合实际值计算偏差;

4)输出层接受偏差,通过反向传播机制让所有神经元更新权值;

5)第2-4步是神经网络模型一次完整的训练过程,重复进行训练过程直到偏差最小。

10.3 在Python中使用神经网络分类算法

神经网络算法在Scikit-Learn库中被称为多层感知机算法,缩写为MLP。

10.4 神经网络分类算法的使用场景

起源与仿生学的神经网络算法最大的优点就在于其网络结构。其网络结构有着非常良好的延展性,将任意一个神经元单拎出来表现都平淡无奇,但通过网络结构组织起来之后,神经网络就能对复杂的“上帝函数”表现出难以置信的拟合效果,而且这些效果的提升往往不需要对算法进行额外改变,只需要简单地对参数进行调节就可以实现。

神经网络算法拟合能力强,应用领域很广,在文本分类等领域都有应用,其衍生出来的深度学习算法更是当前最为热门的机器学习算法分支,在图像处理、语音识别和自然语言处理等多个领域都有非常突出的表现。

可解释性差是神经网络算法乃至于其下衍生出来的“网红”分支深度学习算法的共同毛病,对于神经网络算法究竟是怎么完成学习的,外部无从得知,也难以了解,所以也被称为“黑盒算法”。通过调节神经网络算法的各种参数能够使得分类效果明显提升,但这种提升缺乏配套的理论解释,往往需要依靠经验,因此也被人批评为机器学习领域的“炼金术”。

此外,神经网络算法采用的梯度下降等优化算法,在部分情况下可能陷入局部最优解的情况,导致预测精度下降。

算法使用案例

当前市面上所能接触到的所谓人工智能产品,绝大部分使用的都是神经网络算法,如手机经常用到的各种人脸识别技术,如刷脸解锁、美颜修图以及照片中的人物识别,全都是基于神经网络分类算法(准确来说,是神经网络算法下的深度学习分支)实现。

你可能感兴趣的:(#,神经网络,机器学习,python)