深度学习 (二)Back Propagation Network

发展史

       人们一直在探索想算法来模拟生物神经系统的组织机能,各个年代对于这一课题的研究也是几经沉浮、命运多舛,也正如此它的强大之处在算法中一直被追求,

生物神经元到感知器

       在生物神经系统中,神经元是组成神经系统的基本结构和单元,它是19世纪末意大利解剖学家用银染法发现了神经元,对于研究人类是如何处理各种复杂信号的机制一直备受科学家的关注,让我们先从最基本单元入手结构如下:

在这里插入图片描述

       神经元细胞一般由两个突起树突和轴突,它们在结构和功能上有所不同,树突短小分支多,树突是传入纤维,轴突是传出纤维,一个神经元有很多个树突,每个树突有自己的敏感度即化学物质,当一个神经元传入的信号足够多时,在轴突膜内外将产生电位差,外面正电里面负电,随着电位差加大超过设定的阈值时将产生神经冲动传递到下一个细胞,传递过程如下图:

在这里插入图片描述
       每个神经元通过突触上面的突触小体来传递给下一个神经元的树突,各个神经指令就这样在神经系统之间传递,有人试图从将这一过程抽象出来一个运算单元,如果成功将可以模拟出来和人一样的功能系统如情感分类、图片识别等等。
       大约过了半个世纪,20世纪40年代Mccullob 和 Pirts 提出来了第一个神经网络模型,其数学模型如下:

在这里插入图片描述
       上面的x1、 x2、 …… xn即神经元的树突,w即每个树突对应的敏感度,激活函数即轴突膜内外的电位,这个最简单的数学结构被称为perceptron感知器,有的书也叫作感知机,它只能够解决线性可分的问题,在1986年提出了第二代神经网络 多层感知器网络,它可以解决非线性不可分问题,为以后神经网络发展奠定了基础。

什么是BP网络?

       BP(Back Propagation)网络是1986年由Rumelhart和McCelland两位科学家提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用梯度下法,通过反向传播来不断调整网络的权值和阈值,使网络输出误差平方和最小。

数学

先来补充一下BP网络涉及的数学
高等数学上册 第二章 一元函数微分学
导数的定义
       导数(Derivative)是微积分中的重要基础概念。当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f’(x0)或df(x0)/dx。
导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。如果函数的自变量和取值都是实数的话,函数在某一点的导数就是该函数所代表的曲线在这一点上的切线斜率。导数的本质是通过极限的概念对函数进行局部的线性逼近。例如在运动学中,物体的位移对于时间的导数就是物体的瞬时速度。

       在理解数学概念时万不可只记公式,一定要理解各个概念,否则学了后不能扩展和应用,例如在经典的梯度求解过程中充分运用了导数的概念,导数表示的是函数线上任何一点的变化率既有方向又有大小,正表示逐渐增大,负表示逐渐减小。
       BP网络主要运算了导数的四则运算以及复合函数链式求导法则,如果不太理解的可以先看一下高数这一章。

先来研究一下sigmoid函数 ,如下
在这里插入图片描述

       sigmoid是由指数函数变化而来,除了指数函数还有其它一些函数也可以作为激活函数,但是激活函数需要可以求导,在进行反向传播时需要通过导数往前传递,求导过程可以自己网上搜索。

简单例子

初始化网络

       下面我们以一个二维特征的单个样本来模拟计算一下BP网络是如何正向传播和反向传播的,如下图表示初始网络,已经在图上标明了初始权重值、特征值、偏置项等数据,网络分为简单三层输入层、隐藏层、输出层。
在这里插入图片描述

第一层为input layer 输入层 i1 、i2表示输入样本的两个特征值,b1表示偏置项,第二层为hidden layer 节点为h1 权重为w1 w2、h2 权重为w3 w4 ,右边为输出层output layer 权重分别为w5 w6 w7 w8,输出为o1 0.01 、o2 0.99

第一步 确定网络各层以及节点数、初始化权重值
输入输出即我们的训练样本这些数据值是给出的,从训练数据中得到,权重初始值需要我们设置好,一般根据经验设置
第二步 向前计算各层输出值 计算出来总误差损失
第三部 基于损失误差最小目的,反向传播计算各层权重值并更新
网络确定好之后,重新计算网络的损失误差是多少,一直到误差小到可以接收的范围之内。

正向传播

       正向传播的是根据每层输入值、权重 计算出来输出结果,最终计算的是网络的总体误差。
在这里插入图片描述

反向传播

       反向传播目的是将网络的整体误差传播到每个权重值上,求每个权重值对总误差的影响程度,以便更新每个权重以便它们使实际输出误差更接近目标误差,从而最小化每个输出神经元和整个网络的误差。

       我们是想通过调整w1至w8 ,8个权重值的大小来使得总体误差最小,那么一般的思维即会想每个权重值要调整多少呢,不同的权重值即使调整相同大小对总体误差影响也是不一样的,因此每个权重值调整多少并不是凭感觉而是要量化,要知道改动多少对总体误差有多少影响,如果我们把权重看做自变量把总体误差看做因变量,那么在数学函数中恰有这样的指标表示一个自变量改动时对因变相影响多少,即变化率又称为导数,现在只要求出来每个权重值对于总体误差的导数既可以知道每个权重值改变时对误差的影响大小,从而做出改动。
       在求各层权重的导数时用到了复合函数的链式求导法则,神经网络从输入层要经过各层权重作用、各层加点的激活函数作用 逐层向后计算求得总体误差,如果用权重全部展示也会是比较复杂,逐层求导反而感觉简单了好多,下面就让我们来看一看如何逐层求导:
在这里插入图片描述

在这里插入图片描述

问题思考

  • 为什么是三层
  • hidden node 数如何确定?
  • 误差平方和累加求和与样本的关系
  • hidden layer 、output layer 为什么会选择sigmoid作为激活函数
    对于hidden layer 需要有激活函数,可以作为激活函数的有可导、连续函数,其它常用的激活函数如sigmoid、tanh、relu等。
    output layer是作为最后一层s激活函数单调递增正好把实数映射到了[0,1]之间,也正好值可以作为属于类别的概率,但是对于多分类会不合适,多分类可以将softmax作为激活函数

随笔思考

如何培养原创能力?
       对于在校学生搞研究的人提高原创力,感觉最关键的是有兴趣对自己研究的东西有自己的兴趣而不是研究那么容易赚钱,见效快的东西,其次就是有一个好的人生导师非常重要,如果导师指导的重利,那也不利于创作自己的原创力,即研究和探索未知领域的课题有浓厚的兴趣,而不是急功近利,近期没有利益就不去研究的心态,要有远期规划。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章