【机器学习】人工神经网络RNN

单层感知器

1958年,美国心理学家罗森布拉特(F.Roseblatt)提出了一种具有单层计算单元的神经网络,称为感知器(Perceptron)。想要理解感知器的工作原理,首先就要从生物的神经元开始说起。下图就是一个典型的神经元结构。


神经元

神经元分为树突、突触、细胞体和轴突。在接受环境信息后,树突将环境信息转化为电信号传输给细胞体,当这个信号达到一定阈值时,细胞体激活,对这个信号产生反应,产生电脉冲信号,再借由轴突通过突触传递到其他的神经元。

感知器模拟的就是这种生物神经元行为。在感知器的数学模型中,权重模仿的是突触、偏执模仿的是阈值、激活函数模仿的是细胞体。通过对权值的训练,可以使感知器对一组输入实现目标0或1的输出。

单层感知器是指只有一层处理单元的感知器,是最简单的人工神经网络。如图所示


单层感知器

感知器首先


对每一个输入分量xi(i=1,2,...,n)通过一个权值wi,进行加权求和,得到阈值函数的输入。偏执因子,也就是误差b的输入,使网络增加一个可调参数,为使网络输出达到期望的目标矢量提供了方便。此后,在激活函数的作用下,对输入进行“分类”,达到输出0/1向量的效果。

模型的数学表达:给定一个n维的输入 x = (x1,x2,...,xn),令

其中,w是n维的权重向量,b是偏执。w和b是未知的,一般可以通过算法从数据集中学习得到。

几何解释

单层感知机实际上就是线性分类问题,目的是找到可以分离两类不同样本的“超平面”。


F.Roseblatt已经证明,如果两类模式是线性可分的(指存在一个超平面将它们分开),则算法一定收敛。从中可以清楚看出:由直线WP十b=0将由输人矢量p1和p2组成的平面分为两个区域,此线与权重矢量W正交可根据偏差b进行左右平移。直线上部的输人矢量使阈值函数的输入大于0,所以使感知器神经元的输出为1。直线下部的输入矢量使感知器神经元的输出为0。分割线可以按照所选的权值和偏差上下左右移动到期望划分输入平面的地方。

自学习算法

(神经网络的要点在于求解权向量)那么,权向量是如何求解的呢?

Perceptron学习规则

《人工神经网络理论、设计及引用》p33


  • dj - 期望输出
  • oj - 实际输出
  • Wj - 权值向量
  • f - 激活函数
  • yita - 学习率

感知器学习算法

lambda表示学习率,是从每一次迭代中学习的效率,用于调整学习速度。太大会影响训练的稳定性,太小则会使训练的收敛速度变慢。

收敛条件

在上述算法中,我们需要为模型的迭代停止设定一些条件。

  • 误差小于某个预先设定的较小值
  • 两次迭代之前的权值变化已经很小
  • 设定最大迭代次数

许多学者已经证明,如果输入的样本线性可分,那么无论初始权向量如何取值,经过有限次迭代后,总能取得一个稳定的权向量,这个权向量可以确定一个超平面将两类样本正确的分开。

同时,模型的解不是唯一的,输入不同的初值,经过同样的迭代算法之后,可能得到不同的超平面,但是这些超平面都可以满足误差为零的条件,正确分类样本。注意,单层感知器只对线性可分问题收敛。

单层感知器的局限性

  • 无泛化能力:只能针对线性可分问题
  • 结构过于简单:激活函数只能是符号函数
  • 如果存在离群点,则需要花费较多的训练时间

线性神经网络

线性神经网络与单层感知器结构类似,也分为输入、激活函数和输出。但是,单层感知器的传输函数只能是符号函数,而线性神经网络在此基础上还支持purelin传输函数(也就是y=x的线性函数)。因此,线性感知器支持模拟输出,也就是连续值的输出。因此,除了充当分类器之外,线性感知器还可以实现回归拟合的效果。

此外,线性神经网络还可以解决由于存在多分类而导致的线性不可分的问题,也可以引入非线性成分来解决部分非线性问题。

线性神经网络的学习规则与单层感知器的不同,使用的是LMS学习规则,是Delta学习规则的特殊情况(激活函数使用purelin)。这种算法我们在【xx.x】节将展开解释。

Delta学习规则

Delta学习规则实际上是一种利用梯度下降法的一般性的学习规则。对于梯度下降法,我们在【xx.x】节将展开叙述。

《人工神经网络理论、设计及引用》p33


  • netj=WjTX
  • 规则在与最小化误差平方和E,在这里使用了梯度下降法
  • ▽E表示误差的负梯度方向
  • 当△Wj趋于0时,可以停止迭代

LMS学习规则

《人工神经网络理论、设计及引用》p35


算法步骤:


学习率的选择?

在线性神经网络中,学习率的选择是模型的一个重要问题。学习率是从每一次迭代中学习的效率,用于调整学习速度。太大会影响训练的稳定性,太小则会使训练的收敛速度变慢。


梯度下降学习算法

可以想象一个“下山”的场景。一个人在一个山顶上,想要到达山的最低点,也就是山谷的位置。但是他现在无法知道自己在什么位置,因此无法确定下山的路径。这时候,这个人只能根据自己周边的已知信息,规划下山的方法。怎么下山最快呢?以现在所处的位置为基准,他可以找到山坡最陡的方向,向着这个方向迈一步,到达一个新的位置之后,再重复以上的方法,直到发现已经没有下坡路了为止。这就是“梯度下降”的原理。


梯度是一个向量。对于一元函数y=f(x)的情况,梯度就是f(x)关于x的导数,向着x方向。同理,对于多元函数,梯度就是向着各个自变量方向的偏导数。


从几何意义讲,梯度矩阵代表了函数增加最快的方向,因此,沿着与之相反的方向就可以更快找到最小值。如图,在二维的情况下,沿着x1,x2...就可以快速找到函数的最小值


梯度下降法的问题

  • 目标函数必须可微
  • 对于非凸函数,会需要经过太多次迭代才能得到结果
  • 学习率难以选择
  • 容易陷入局部最优

人工神经网络拓扑结构

拓扑结构:描述点和结点如何连接


  • 层次型网络(BP神经网络):输出层-隐藏层-输出层,同一层结点之间无联系,只与下一层结点之间有联系。这种从下往上的结构叫做前馈神经网络(BP就是一种多层前馈神经网络)
  • 层内有互联的层次型网络结构:同一层之间的节点可能相互联系
  • 输出层到输入层有连接的层次性网络:在输出层有一个“反馈”作用到输入层
  • 全互联型网络:所有结点都相互连接(hopfield神经网络)

三层感知器模型

从之前的分析可以看出,单层感知器只能解决线性可分问题,但是大多数问题都是线性不可分的。那么如何解决这类问题呢?一种有效的解决办法就是,在输入层和输出层之间添加一个“隐藏层”,将单层感知器变为多层感知器。

我们称这种含有一个隐层的感知器作单隐层感知器,又称三层感知器。“三层”分为输入层、隐层和输出层。一个三层感知器的拓扑结构如下图所示:


在三层感知器中,输入向量为X=(x1,x2,...,xn)T,x0是偏执值;输入值在进行加权求和之后进入隐藏层,隐藏层输出向量为Y=(y1,y2,...,ym)T;输出层的输出向量为O=(o1....,ol)T。有两个权值矩阵,分别为V和W。V(n×m)表示从X到Y的连接上的权,W(m×l)表示从Y到O的连接上的权。三层感知器的数学模型如下:


BP学习算法(误差逆传播算法)

误差逆传播算法

BP(Error Back Propagation),是一种基于误差逆传播算法的层次型网络。

BP神经网络就是一个”万能的模型+误差修正函数“,每次根据训练得到的结果与预想结果进行误差分析,进而修改权值和阈值,一步一步得到能输出和预想结果一致的模型。举一个例子:比如某厂商生产一种产品,投放到市场之后得到了消费者的反馈,根据消费者的反馈,厂商对产品进一步升级,优化,从而生产出让消费者更满意的产品。这就是BP神经网络的核心。
逆传播的核心思想就是计算输出层和期望值之间的误差,将这个误差反馈到模型中再作为一个输入的参数来调整权值,从而使误差变小,也就是一种“在错误中学习”的精神。

现在模型知道了上一步计算时的误差,那么现在的问题是,该如何调整权值呢?误差逆传播算法使用的是梯度下降法的原理,每一步都往函数梯度最大的逆方向前进,慢慢找到代价函数的最小值,从而得到最终的权值参数。

BP学习算法推导

经过推导:


算法过程


参考

https://www.tensorflow.org/tutorials/keras/basic_classification
https://tensorflow.google.cn/guide/keras
https://blog.csdn.net/u011608180/article/details/86492718
https://blog.csdn.net/zzZ_CMing/article/details/79182103

你可能感兴趣的:(【机器学习】人工神经网络RNN)