机器学习(二):线性模型与非线性模型(激活函数,归一化)
激活函数激活函数的作用是在神经网络模型中加入非线性映射,克服了线性模型表达能力不足的缺点。线性模型一元线性模型如y = wx+b,x为自变量,y为因变量。在二分类问题中,可以看作区域被模型所表示的直线分为了两个区域多元线性模型如y = w1x1+w2x2+w3x3+b在二分类问题中,可以看作三条直线两两相交,分成内区域与外区域对于简单的线性可分数据,线性模型可以完成的很好。但是对于非线性可分数据,
线性模型
一元线性模型如y = wx+b,x为自变量,y为因变量。
在二分类问题中,可以看作区域被模型所表示的直线分为了两个区域
多元线性模型如y = w1x1+w2x2+w3x3+b
在二分类问题中,可以看作三条直线两两相交,分成内区域与外区域
对于简单的线性可分数据,线性模型可以完成的很好。但是对于非线性可分数据,往往效果不好,而生活中非线性可分的任务占绝大多数。例如下图,要用多条直线进行分类。
非线性模型
虽然可以用多个线性神经单元所构造的模型来进行稍微复杂点的分类,但是模型表现能力仍然有限,例如随着数据分布越来越不规则,线性模型并不能简单的多加几条直线解决问题。若模型能引入非线性因素,则可解决这一问题
若能经过训练得到如下图红色的非线性模型,问题就可以迎刃而解了,虽然理论上任何曲线可以由无数条直线近似而成,但是资源消耗太大。线性模型中,无数条直线意味着需要无数个神经单元相拼接。然而,在非线性模型中,我们可以用少数的神经单元+非线性映射,经过训练就可以达到这个效果。
激活函数
激活函数的作用是在神经网络模型中加入非线性映射,克服了线性模型表达能力不足的缺点。下图中,绿色部分就是加入了激活函数。本质上就是对前一结点的线性输出( Y1 )作为激活函数( F(x) )的输入,进行非线性的映射[ F(Y1) ],从而是模型具有非线性能力。
常见激活函数
1. Sigmoid 函数
sigmoid函数数学公式如下。可以看出,x的取值可以从负无穷到正无穷,而S(x)的取值为0 ~ 1,可以理解为sigmoid函数把输入压缩到了0 ~ 1之间。
该激活函数的缺点明显,当输入数值过大,区分度不够。例如输入x为100和1000,对应的输出S(100)与S(1000)几乎相等,趋于饱和状态,无法体现出差异。此外还会出现梯度消失的问题。误差反向传播过程可以看作是逐级求导+修正的过程。如果对S(x)进行求导,可以通过下图函数曲线发现,当输入x过大时,其求导(曲线斜率)接近于0,会发生提出消失。
2. Tanh 函数
tanh函数可以看作是sigmoid函数的修改版,公式也可以看作tanh(x) = 2sigmoid(2x)-1。值域变为了-1 ~ +1之间,缺点与sigmoid函数一样。
3. ReLU函数
ReLU函数克服了sigmoid和tanh函数的缺点,其数学公式与曲线图如下图。从图中可以看出,输入大于零的保留,输入小于零的丢弃,这和人类的神经元对信号的反应十分相似。对于正向信号(可以理解为有用的信号或者正确信号),我们会更加关注它;然而对于负向信号(可以理解为无用的信号或者错误信号),我们不希望它对我们的决策产生影响,因此丢弃它或者减弱它的影响。
由于当输入x大于0时,输出就为x,因此不用担心像sigmoid中由输入都太大而导致的差异性降低,可以通俗的看作正确的刺激信号越大,得到的输出信号也应该越大。
由于ReLU函数正区间中斜率一直为1,不会出现梯度消失情况,也不会出现像指数函数那样的梯度爆炸情况。
归一化
归一化是将一个数据集合压缩到同一区间中(0 ~ 1,-1 ~ +1)
为什么要归一化
- 输入数据的单位不一样,有些数据的范围可能特别大,导致的结果是神经网络收敛慢、训练时间长。
- 数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小。
- 由于神经网络输出层的激活函数的值域是有限制的,因此需要将网络训练的目标数据映射到激活函数的值域。例如神经网络的输出层若采用S形激活
函数,由于S形函数的值域限制在(0,1),也就是说神经网络的输出只能限制在(0,1),所以训练数据的输出就要归一化到[0,1]区间。 - S形激活函数在(0,1)区间以外区域很平缓,区分度太小。
归一化算法
更多推荐
所有评论(0)