数据分析与机器学习学习笔记--人工神经网络

1.引言

        铛铛铛,welcome to Neural Networks,经过这么长时间的“折磨”终于进入到神经网络模块。首先大致介绍一下何为神经网络,神经网络最初的名字叫做感知机,在当时并没有引起过多的反向,但是后来改名为神经网络后这个名称听起来就非常的高大上了哈哈,理所当然的引起了人们的注意,所以说明什么?一个好名字是多么重要(纯属瞎掰)。神经网络最早出现与1943年是一位心理学家和数理学家共同完成的一个模型当时称之为MP模型,之后在1960年神经网络得到进一步的发展知道今天成为一个十分强大的模型。或许你还不知道神经网络是个什么东东,那咱们就换一个通俗易懂的说法“人工智能”(当然这个比喻是十分不恰当的,在次仅仅作一个概念的认知)。可能我们印象中第一个人工智能是当年的“深蓝计算机”(说句实在话,深蓝是依靠计算能力突破式的发展才诞生的,当时使用的好像是什么MIN-MAX方法实现的并非今天所说的神经网络),在90年代末深蓝成功的击败了当时的国际象棋大师卡斯帕罗夫,当时就掀起一阵人工智能的热潮;知道最近我们都知道的alphago彻底的将这热锅上的炕头揭开了。引言就到此为止,如果真的要说他的历史那可太长了。。。。本篇文章介绍的是最简单的神经网络-人工神经网络(Artificial Neural Networks),各位老铁不要觉得名字有人工就以为这个神经网络是有人工计算的。。。。(手动滑稽 x 4)。话不多说接下来就是正文。

2.人工神经网络

        为什么我们要称之为神经网络呢?看下面两个图,我滴个乖乖简直是一模一样啊有没有(不要质疑我的眼神,当你看完分析后你会和我有一样的目光)。神经元是如何工作的呢?让我用所剩不多的高中生物解释一下:外部刺激通过神经末梢转化为电信号传递到神经元,由无数神经元构成了一个神经中枢,由神经中枢做出兴奋或抑制的判断最后由人体做出对应的行为。有没有发现什么,对你想的没有错,我们假设“兴奋=1”,“抑制=0”这不对应上了计算机的核心二进制了么(不要问我为什么是二进制,觉得生活过于美好的请去看《计算机组成原理》);其次,左图中的x1,x2,x3对应了我们的外部刺激,左图中间的圆圈对应了神经元,左图的output对应了反应,看到这里我就问你有没有一模一眼,厉害的不得鸟。以上所说的就是神经网络的整体工作流程了,什么到这里就结束了??那是不可能的,接下来我们就要介绍的是神经网络的具体工作流程了。

数据分析与机器学习学习笔记--人工神经网络数据分析与机器学习学习笔记--人工神经网络

        现在把左图的圈圈解剖,看看他的内部到底是什么。哎呦我去,这是个什么东东,下图就是我们的“神经元”了,整个人工神经网络分为以下几个层,输入层(input layer)、隐层(hidden layer)以及输出层(output layer)。首先就是输入层,此部分就是上部所说的x即我们输入的数据,中间的就是隐藏层,对应的就是神经元主要用来提取输入信息的特征并且计算经过整个隐层后得到结果,最后的就是我们的输出层了,输出经过隐层得到的结果用于分类使用。隐层是如何进行特征提取和计算的呢,这就离不开图中一个个的剪头了,这部分表示的是全连接,将输入数据的每一维与第一个隐层进行链接,接着第一个隐层有何第二个隐层链接依此类推可能拥有多个隐层。经过一个庞大的隐层后我们就完成了一次数据的计算并且得到最终的结果。那么中间是由什么进行计算呢?这就要引出BP的概念了,即前向传播与反向回馈,接着往下看。

数据分析与机器学习学习笔记--人工神经网络

        神经网络的前向传播详细展开的工作流程如下,假设输入的数据是x1、x2,我们生成对应的权重向量w1、w2,二者分别对应想乘同时添加的1与bias想乘,将上述3个结果想加就得到了隐层的计算结果z,在经过一个非线性的**函数(Activation Function)最终得到我们的输出a(如下方公式所示),让后将a再次作为输入数据传入到第二个隐层进行同样的步骤,知道达到输出层将结果输出为止。使用非线性的**函数目的在于将前部运算得到的线性函数转化为非线性(没有这一步骤生成的网络就是原始的感知机),可以拟合更加复杂的模型,将计算结果转为概率值为下一步的分类做铺垫,同时避免了剃度消失和梯度爆炸情况的发生。

数据分析与机器学习学习笔记--人工神经网络

数据分析与机器学习学习笔记--人工神经网络

                         数据分析与机器学习学习笔记--人工神经网络 数据分析与机器学习学习笔记--人工神经网络

        或许到现在为止你还会困惑一个问题隐层到底有什么用?每个网络能够设定几个隐层?看下图,左图为1个隐层的情况下神经网络进行分类预测的结果,你会发现这时的形状还是线性分类;那么当隐层增多是什么情况呢?如中间图片所示,这是当隐层为3个的情况下神经网络对数据集的分类,对比一个隐层此时的分类效果要远好于第一个;继续增大隐层,当隐层增大到50个时神经网络的分类效果如右图所示,你回发现随着隐层个数的增多训练的神经网络对数据集的拟合越来越精确,在某些情况下甚至能达到100%,显然这不是一个好的模型,因此在搭建神经网络时对于隐层的个数要进行适当的把握,看到这里你对隐层的作用是否有一定的理解了。前向传播说完后就到了反向回馈。

                     数据分析与机器学习学习笔记--人工神经网络数据分析与机器学习学习笔记--人工神经网络数据分析与机器学习学习笔记--人工神经网络

        反向回馈是神经网络中至关重要的一环,神经网络通过反向学习的过程完成了对其权重矩阵的学习和更细,经过多次的BP进行使得我们搭建的模型能够很好的完成设定的目标。整个过程和前向传播正好相反,通过得出的值反向求导进行更新权重,在这里求导时需要进行大量的运算,不同于逻辑回归,神经网络存在多个隐层同时隐层之间又不是独立的,下层隐层的输入数据源自于上层隐层的计算结果(上文一说,当然此处排除第一个隐层,第一层的输入就是我们的原始数据)。我们设预测值与真实值之间的误差的均方作为代价函数E,最终就是要降低E的值,当我们得到一次结果后进行反向回馈,用E对权重w求导,由于中间还有一系列的变换此时就要用到链式求导法则,对w求导等于E对a求导再乘上a对z求导再乘上z对w求导,对每个权重矩阵都进行上述链式求导法则,将计算出的结果更新到原权重矩阵中,更新完毕后再接着进行下一次的前向传播,紧接着优势反向回馈,不断的进行下去直到代价函数E的值满足设定的阈值或者达到设定的迭代次数。

数据分析与机器学习学习笔记--人工神经网络

数据分析与机器学习学习笔记--人工神经网络

        说完前向传播和反向回馈最后在介绍一下**函数,目前常见的**函数有三种Sigmoid、Tanh以及ReLU。首先来看Sigmoid函数,sigmoid函数的公式和形式如下所示,该函数将输入的值转换为(0, 1)之间的概率值,目前该函数常用作神经网络的隐层**函数,在早期的神经网络中大量使用该函数,但是在使用过程中发现了Sigmoid容易造成梯度消失的显现,因此在后来的发展过程中逐步被ReLU函数取代。

数据分析与机器学习学习笔记--人工神经网络

数据分析与机器学习学习笔记--人工神经网络

        Tanh函数的出现时间和Sigmoid函数差不多但是具有比Sigmoid收敛速度快的特点,该函数也是在早期的神经网络中使用,对应的函数以及图像如下所示,相比于Sigmoig将值映射在(0, 1)之间,Tanh将输入值映射在(-1,1)的区间内,但是总体的函数形式和Sigmoid类似,因此Tanh函数同样存在着梯度消失的现象,目前该函数多应用在RNN中。

数据分析与机器学习学习笔记--人工神经网络

数据分析与机器学习学习笔记--人工神经网络

        最后到了ReLU函数,该函数相较于前面两者具有更快的收敛速度,同时有效的缓解了剃度消失的现象,同样的该函数也是作为神经网络中的隐层**函数,目前ReLU函数多用在CNN中,经过测试同一个网络使用ReLU作为**函数相较于Sigmoid**函数能够极大提高分类的准确率(对于一些简单的网络甚至能够提高20%的准确率)。最后在提一下,神经网络的输出层使用的是Softmax多分类**函数,将最后一个隐层输入的值映射为概率值,让后通过概率值划分类别。

数据分析与机器学习学习笔记--人工神经网络

数据分析与机器学习学习笔记--人工神经网络

3.总结 

        到此人工神经网络就已经全部介绍完了,通过本文你能够快速的对神经网络形成一个认知,对于神经网络总体来说大同小异万变不离其宗,对于其前向传播和反向回馈的理解是比较重要的,接下来会介绍卷积神经网络(CNN)和循环神经网络(RNN,有的也称之为递归神经网络),这篇就写到这里了,下周一不见不散。(今天上午选寝室选的我头皮发麻。。。。)