《深度学习之图像识别:核心技术与案例实战》 ——2.2 网络优化参数
2.2 网络优化参数
在介绍了深度学习框架之后,我们就可以选择适合的框架并上手训练自己的网络了。深层网络架构的学习要求有大量数据,对计算能力的要求很高。卷积网络有那么多的参数,我们应该如何选择这些参数,又该如何优化它们呢?大量的连接权值需要通过梯度下降或其变化形式进行迭代调整,有些架构可能因为强大的表征力而产生测试数据过拟合等现象。卷积神经网络的核心问题不仅是在训练数据上有良好的表现,同时也要求能在未知的输入上有理想的泛化效果。如何解决这些问题也是我们需要关注的重点。
本节将介绍卷积神经网络中的激活函数、权重初始化方法、常用优化方法和正则化方法。
2.2.1 常用激活函数
深度学习是基于人工神经网络的结构,信号经过非线性的激活函数,传递到下一层神经元,经过该层神经元的激活处理后继续往下传递,如此循环往复,直到输出层。正是由于这些非线性函数的反复叠加,才使得神经网络有足够的非线性拟合,选择不同的激活函数将影响整个深度神经网络的效果。下面简单介绍几种常用的激活函数。
1.Sigmoid函数
Sigmoid函数表达式为:
(2.1)
Sigmoid函数示意如图2.1所示。
图2.1 Sigmiod函数示意图
Sigmoid函数是传统的神经网络和深度学习领域开始时使用频率最高的激活函数,是便于求导的平滑函数,但是容易出现梯度消失问题(gradient vanishing)。函数输出并不是zero-centered,即Sigmoid函数的输出值恒大于0,这会导致模型训练的收敛速度变慢,并且所使用的幂运算相对来讲比较耗时。
2.tanh函数
tanh函数表达式为:
(2.2)
tanh函数示意图如图2.2所示。
图2.2 tanh函数示意图
tanh函数解决了zero-centered的输出问题,但梯度消失的问题和幂运算的问题仍然存在。
3.ReLU函数
ReLU函数表达式为:
(2.3)
ReLU函数示意图如图2.3所示。
图2.3 ReLU函数示意图
ReLU函数本质上是一个取最大值函数,非全区间可导,但是在计算过程中可以取sub- gradient。
ReLU在正区间内解决了梯度消失问题,只需要判断输入是否大于0,所以计算速度非常快,收敛速度远远快于Sigmoid和tanh函数。但ReLU函数的输出同样不是zero-centered,并且存在Dead ReLU Problem,即某些神经元可能永远不会参与计算,导致其相应的参数无法被更新。有两个主要原因可能会导致这种情况产生:参数初始化及学习速率太高,从而导致在训练过程中参数更新过大,使网络进入这种情况。解决方法是可以采用Xavier初始化方法,以及避免将学习速率设置太大或使用Adagrad等自动调节学习率的算法。
4.Leaky ReLU函数
Leaky ReLU函数表达式为:
(2.4)
Leaky ReLU函数示意图如图2.4所示。
Leaky ReLU函数的提出是为了解决Dead ReLUProblem,将ReLU的前半段设为0.01x而非0。理论上来讲,Leaky ReLU函数有ReLU函数的所有优点,外加不会有Dead ReLU问题,但是在实际操作中并没有完全证明Leaky ReLU函数总是好于ReLU函数。
图2.4 Leaky ReLU函数示意图
5.指数线性单元ELU函数
ELU函数表达式为:
(2.5)
指数线性单元(Exponential Linear Unit)激活函数由Djork等人提出,被证实有较高的噪声鲁棒性,同时能够使得神经元的平均激活均值趋近为0,对噪声更具有鲁棒性。由于需要计算指数,计算量较大。
6.SELU函数
SELU函数表达式为:
(2.6)
自归一化神经网络(Self-Normalizing Neural Networks)中提出只需要把激活函数换成SELU就能使得输入在经过一定层数之后变成固定的分布。SELU是给ELU乘上系数λ,即SELU(x)= λ·ELU(x)。
7.Softmax函数
Softmax函数可视为Sigmoid函数的泛化形式,其本质就是将一个K维的任意实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。一般用于多分类神经网络输出。
Softmax函数表达式为:
(2.7)
前面我们说过,大脑神经元的状态仅处于抑制或者兴奋两种状态,不需要(-∞,+∞)这么大的范围来描述它,所以需要用激活函数来简化问题,同时这也是一种非线性变换,可以增强网络的表达能力。现在常用的ReLU激活函数,就是研究者经过大量探索后比较通用的激活函数。
- 点赞
- 收藏
- 关注作者
评论(0)