1.激活函数
1.1 Sigmoid函数
Sigmoid
是常用的非线性的激活函数,表达式如下:
- 特性:它能够把输入的连续实值变换为和之间的输出,特别的,如果是非常大的负数,那么输出就是;如果是非常大的正数,输出就是.
- 缺点:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。
1.2 tanh函数
tanh
函数也是非线性函数,其函数解析式为:
tanh
读作Hyperbolic Tangent
,它解决了Sigmoid
函数的不是zero-centered
输出问题,然而,梯度消失(gradient vanishing
)的问题和幂运算的问题仍然存在。
1.3 Relu函数
Relu
函数实际上就是个取最大值函数,其函数解析式如下所示:
-
Relu
是目前最常用的激活函数,一般搭建人工神经网络时推荐优先尝试 -
Relu
并非全区间可导,但我们可以取sub-gradient
- 解决了
gradient vanishing
问题 (在正区间) - 计算速度非常快,只需要判断输入是否大于
- 收敛速度远快于
Sigmoid
和tanh
-
ReLU
的输出不是zero-centered
-
Dead ReLU Problem
,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2)learning rate
太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate
设置太大或使用adagrad
等自动调节learning rate
的算法。
1.4 Leaky ReLU函数(PReLU)
函数表达式:
人们为了解决Dead ReLU Problem
,提出了将ReLU的前半段设为而非,通常。另外一种直观的想法是基于参数的方法,即,其中
可由方向传播算法学出来。理论上来讲,Leaky ReLU
有ReLU
的所有优点,外加不会有Dead ReLU
问题,但是在实际操作当中,并没有完全证明Leaky ReLU
总是好于ReLU
。
1.5 ELU(Exponential Linear Units) 函数
函数表达式:
ELU
不会有Dead ReLU
问题 输出的均值接近,zero-centered
。但计算量偏大,在目前的实际应用中并未被证明总是好于ReLU
。
1.6 UnitStep 阶跃函数
函数表达式:
传统的阶跃函数,不连续,因此难以进行数学分析。常用其它连续可导函数代替。
2.感知机模型(神经元模型)
设输入空间(特征空间)为,输出空间为
输入为实例的特征向量,输出为实例的类别
由输入空间到输出空间的如下函数称为感知机:
其中和为模型参数,称为权值,称为偏置。是符号函数。
假设我们目前的任务是通过感知机对具有维特征的向量进行分类。我们可以将该感知机的模型视作一个神经元模型。维向量()对应的是神经元的个输入。
我们对这个输入分别乘其对应的权值后求和,经过激活函数后得到分类结果。
但是我们注意到,当神经网络的输入向量为时,会产生激活失败误分类的情况,为了避免这种情况,我们对其加偏置项后再进入激活函数,也就是感知机模型中的。
我们首先对输入向量乘对应的权值加偏置项后得到,将其经过激活函数后与标签进行比对,并根据是否与标签相等来更新参数的值:
其中为步长,又称学习率。以上过程对所有训练数据执行一次后,可以得到一轮训练后的和。
显然,由于权值参数对应于维特征向量,因此的维度一定与输入向量的特征维数有关。
此处给出基于Python
实现的感知机模型。
分类效果示例如上所示。