Artificial Intelligence
文章目录
人工神经网络
人工神经网络( Artificial Neural Network, ANN)是20世纪80年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象,构建某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界常将人工神经网络简称为神经网络(NN)。
神经网络是一种运算模型,由大量的节点(或称神经元)之间相互连接构成。每个节点代表一种特定的输出函数,称为激励函数或者**函数(activation function)。
每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。
**函数
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为**函数(又称激励函数)。
性质
- 可微性:计算梯度时必须要有此性质。
- 非线性:保证数据非线性可分。
- 单调性:保证凸函数。
- 输出值与输入值相差不会很大:保证神经网络训练和调参高效。
作用
能使得神经网络的每层输出结果变得非线性化
常用的**函数
- Sigmoid
Sigmoid 是常用的非线性的**函数,它的数学形式如下:
Sigmoid的几何图像如下:
特点:
它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.
缺点:
sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些缺点。
缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。
缺点2:其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。
- tanh
tanh函数解析式:
tanh函数及其导数的几何图像如下图:
tanh读作Hyperbolic Tangent,它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。
- Relu
Relu函数的解析式:
Relu函数及其导数的图像如下图所示:
ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient,如上图所示。ReLU虽然简单,但却是近几年的重要成果,有以下几大优点:
1) 解决了gradient vanishing问题 (在正区间)
2) 计算速度非常快,只需要判断输入是否大于0
3) 收敛速度远快于sigmoid和tanh
ReLU也有几个需要特别注意的问题:
1)ReLU的输出不是zero-centered
2)Dead ReLU Problem,指的是某些神经元可能永远不会被**,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生:
(1) 非常不幸的参数初始化,这种情况比较少见
(2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。
解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!
单层神经网络
x1,x2,…, xN:神经元的输入。这些可以从输入层实际观测或者是一个隐藏层的中间值(隐藏层即介于输入与输出之间的所有节点组成的一层。后面讲到多层神经网络是会再跟大家解释的)。
X0:偏置单元。这是常值添加到**函数的输入(类似数学里y=ax+b中使直线不过原点的常数b)。即截距项,通常有+1值。
w0,w1,w2,…,wN:对应每个输入的权重。甚至偏置单元也是有权重的。
a:神经元的输出。计算如下:
式子里的f是已知的**函数,f使神经网络(单层乃至多层)非常灵活并且具有能估计复杂的非线性关系的能力。在简单情况下可以是一个高斯函数、逻辑函数、双曲线函数或者甚至上是一个线性函数。利用神经网络可让其实现三个基本功能:与、或、非(AND, OR, NOT)。
这里引入一个例子:and功能实现如下
神经元输出:a = f( -1.5 + x1 + x2 )
多层神经网络
多层神经网络就相当于多个单层的叠加成多层的过程。
神经网络分为三种类型的层:
输入层:神经网络最左边的一层,通过这些神经元输入需要训练观察的样本,即初始输入数据的一层。
隐藏层:介于输入与输出之间的所有节点组成的一层。帮助神经网络学习数据间的复杂关系,即对数据进行处理的层。
输出层:由前两层得到神经网络最后一层,即最后结果输出的一层。
BP算法
BP算法是多层神经网络的训练一个核心的算法。目的是更新每个连接点的权重,从而减小预测值与真实值之间的差距。输入一条训练数据就会更新一次权重,反方向(从输出层=>隐藏层=>输入层)来以最小化误差来更新权重。
在训练神经网络之前,需要初始化权重和偏向,初始化是随机值, -1 到 1 之间或者-0.5到0.5之间,每个单元有一个偏向。
BP算法有2个过程,前向传播和反向传播,后者是关键。
BP算法基本思想
BP算法全称叫作误差反向传播(error Back Propagation,或者也叫作误差逆传播)算法。其算法基本思想为:在上述的前馈网络中,输入信号经输入层输入,通过隐层计算由输出层输出,输出值与标记值比较,若有误差,将误差反向由输出层向输入层传播,在这个过程中,利用梯度下降算法对神经元权值进行调整。
数学基础理论
BP算法中核心的数学工具就是微积分的链式求导法则。
举例
图中元素:
两个输入;
隐层: b1, w1, w2, w3, w4 (都有初始值)
输出层:b2, w5, w6, w7, w8(赋了初始值)
前向传播
则误差:
反向传播
参数更新:
求误差对w1的偏导 :
注意,w1对两个输出的误差都有影响
通过以上过程可以更新所有权重,就可以再次迭代更新了,直到满足条件。