神经网络中重要的概念(超参数、激活函数、损失函数、学习率等)
在深度学习过程中,涉及到很多基础的概念,往往需要花一些时间将这些重要的概念弄清楚,因此将这些概念一并总结一下,主要包括:超参数、激活函数、损失函数、学习率等。
目录
1.超参数
1.1超参数定义
在机器学习过程中,经常碰到一个叫超参数的参数(hyperparameter),这个超参数是什么含义,与参数是什么关系?
在机器学习中,超参数的定义如下: 在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
简单来说,超参数也是一个参数,是一个未知变量,但是它不同于在训练过程中的参数,它是可以对训练得到的参数有影响的参数,需要训练者人工输入,并作出调整,以便优化训练模型的效果。
1.2超参数的特点
(1)定义关于模型的更高层次的概念,如复杂性或学习能力。
(2)不能直接从标准模型培训过程中的数据中学习,需要预先定义。
(3)可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定。
1.3超参数的一些实例
- 聚类中类的个数
- 话题模型中话题的数量
- 模型的学习率
- 深层神经网络隐藏层数
- 树的数量或树的深度
- 矩阵分解中潜在因素的数量
- k均值聚类中的簇数
2.激活函数
2.1激活函数的定义
激活函数(Activation Function)是在神经网络中负责将神经元的输入映射到输出端的函数。激活函数将非线性特性引入到神经网络中。如下图所示,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。
图来源:https://blog.csdn.net/tyhj_sf/article/details/79932893图来源
2.2在神经网络中引入激活函数的意义
引入非线性函数作为激活函数之后,深层神经网络才有意义,可以逼近任意函数。
2.3激活函数的特点
激活函数通常具备下述特征:非线性、可微性、单调性、 f ( x ) ≈ x f(x)\approx x f(x)≈x、输出值有范围、计算简单、归一化。
2.4常用的激活函数(4种)
激活函数的种类较多,本文重点介绍常用的四种激活函数,分别是Sigmoid函数、tanh函数、ReLU函数、Leaky ReLU函数,总结这4个函数的特点及使用场景。
2.4.1Sigmoid函数
Sigmoid函数的表达式为:
f
(
x
)
=
1
1
+
e
−
x
f(x)=\tfrac{1}{1+_{e^{-x}}}
f(x)=1+e−x1,其函数取值范围为(0,1),可以在输出层表示概率值。Sigmoid函数的导数是非0的,计算起来也比较简单。Sigmoid函数的图像如下图所示:
Sigmoid函数的梯度下降十分明显,并且两头过于平坦,容易出现梯度消失的情况,输出的值域不对称。
2.4.2tanh函数
双曲正切函数(tanh函数)的函数表达式为:
f
(
x
)
=
e
x
+
e
−
x
e
x
−
e
−
x
f(x)=\tfrac{_{e^{x}}+_{e^{-x}}}{_{e^{x}}-_{e^{-x}}}
f(x)=ex−e−xex+e−x,函数的取值范围为[-1,1],解决了Sigmoid函数输出值域不对称的问题,对称中心在原点。其输出值域的两头依旧较平坦,梯度消失问题仍然存在,其图像如下所示:
2.4.3ReLU函数
ReLU函数是目前神经网络中使用最多的激活函数,ReLU函数的线性特点使得其收敛速度比Sigmoid函数和tanh函数都要快,并且不会出现梯度饱和的情况,计算效率更高。ReLU函数的表达式为:
f
(
x
)
=
m
a
x
(
0
,
x
)
f(x)=max(0,x)
f(x)=max(0,x),或者将其表达式写为:
f
(
x
)
=
{
0
x
<
=
0
x
x
>
0
f(x)=\left\{\begin{matrix} 0 & x<=0\\ x & x>0 \end{matrix}\right.
f(x)={0xx<=0x>0,图像如下所示:
ReLU函数的缺点是所有负值均被截断为结果0,从而导致特征丢失的情形。同时,ReLU函数要求学习率不能太高,如果学习率太大,会使网络中很多的神经元都失效,一般设置一个较小的学习率,为0.005。
2.4.4Leaky ReLU函数
为了解决ReLU函数中的负值被截断为0的问题,推出带泄露修正的线性单元Leaky ReLU函数,其函数表达式为:
f
(
x
)
=
{
a
x
x
<
=
0
x
x
>
0
f(x)=\left\{\begin{matrix} ax & x<=0\\ x & x>0 \end{matrix}\right.
f(x)={axxx<=0x>0。在ReLU函数中,当x<=0时,函数值为0,而Leaky ReLU函树是给出一个负数梯度值,其中a是一个较小的值,通常为0.01。该函数的图像如下所示:
3.损失函数
3.1损失函数的含义
损失函数(loss function)是用来评价模型对样本的拟合程度,当预测结果与实际值越接近,说明模型的拟合能力越强,对应的损失函数的结果就越小,当预测结果与实际值差距越大,损失函数的结果越大。损失函数比较大时,对应的梯度下降比较快。
3.2常用的损失函数
3.2.1softmax函数
softmax函数的好处是可以将分类问题的预测结果更加明显,不同类别之间的差距更大。针对4×1的向量
a
T
a^T
aT=[5,2,-1,3],softmax函数的计算过程如下:
a
=
[
5
2
−
1
3
]
a=\begin{bmatrix} 5\\ 2\\ -1\\ 3 \end{bmatrix}
a=⎣⎢⎢⎡52−13⎦⎥⎥⎤,
t
=
[
e
5
e
2
e
−
1
e
3
]
t=\begin{bmatrix} e^5\\ e^2\\ e^-1\\ e^3 \end{bmatrix}
t=⎣⎢⎢⎡e5e2e−1e3⎦⎥⎥⎤,t向量表示中间向量,对原始向量进行指数化处理,使其值映射到非负。
g
(
a
T
)
=
[
e
5
/
(
e
5
+
e
2
+
e
−
1
+
e
3
)
e
2
/
(
e
5
+
e
2
+
e
−
1
+
e
3
)
e
−
1
/
(
e
5
+
e
2
+
e
−
1
+
e
3
)
e
3
/
(
e
5
+
e
2
+
e
−
1
+
e
3
)
]
=
[
0.842
0.042
0.002
0.114
]
g(a^T)=\begin{bmatrix} e^5/(e^5+e^2+e^-1+e^3)\\ e^2/(e^5+e^2+e^-1+e^3)\\ e^-1/(e^5+e^2+e^-1+e^3)\\ e^3/(e^5+e^2+e^-1+e^3) \end{bmatrix}=\begin{bmatrix} 0.842\\ 0.042\\ 0.002\\ 0.114 \end{bmatrix}
g(aT)=⎣⎢⎢⎡e5/(e5+e2+e−1+e3)e2/(e5+e2+e−1+e3)e−1/(e5+e2+e−1+e3)e3/(e5+e2+e−1+e3)⎦⎥⎥⎤=⎣⎢⎢⎡0.8420.0420.0020.114⎦⎥⎥⎤。
通过softmax函数的计算,最终结果向量的和为1,同时保证结果向量中每一个元素均为非负值。
3.2.2交叉熵
关于交叉熵(Cross Entropy Loss)损失函数的数学原理可以参照简书中的详细描述,交叉熵原理。本文只是简单的说明交叉熵函数的基本内容,以及其使用场景。
针对单个样本,损失函数的计算公式为:
L
=
−
[
y
l
o
g
y
^
+
(
1
−
y
)
l
o
g
(
1
−
y
^
)
]
L=-[ylog\hat{y}+(1-y)log(1-\hat{y})]
L=−[ylogy^+(1−y)log(1−y^)],其中
y
y
y表示真实值,
y
^
\hat{y}
y^表示预测值。
针对N个样本,只需要将N个损失叠加起来就行了,损失函数的计算公式为:
L
=
−
1
N
∑
i
=
1
N
[
y
i
l
o
g
y
i
^
+
(
1
−
y
i
)
l
o
g
(
1
−
y
i
^
)
]
L=\frac{-1}{N}\sum_{i=1}^{N}[y_{i}log\hat{y_{i}}+(1-y_{i})log(1-\hat{y_{i}})]
L=N−1∑i=1N[yilogyi^+(1−yi)log(1−yi^)],其中
y
i
y_{i}
yi表示真实值,
y
i
^
\hat{y_{i}}
yi^表示预测值。
针对单个样本,当 y = 1 时:
L
=
−
l
o
g
y
^
L=-log\hat{y}
L=−logy^,绘制其函数图像如下:
从函数图像可知,当预测输出越接近真实样本标签 1,损失函数 值L 越小;预测输出越接近 0时,损失函数值L 越大。因此,函数的变化趋势完全符合实际需要的情况。
3.2.3均方差损失函数
均方损失函数(Mean Square Loss)的基本计算公式如下: M S E = 1 N ∑ i = 1 N ( y i − y i ^ ) 2 MSE=\frac{1}{N}\sum_{i=1}^{N}(y_{i}-\hat{y_{i}})^2 MSE=N1∑i=1N(yi−yi^)2。其中 y i y_{i} yi表示真实值, y i ^ \hat{y_{i}} yi^表示预测值。均方差损失函数主要用于回归问题,对具体的数值进行预测的模型中。
4.学习率
学习率(Learning rate)是深度学习中的一个超参数,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。
当学习率设置较小时,需要通过较多次的实验才能收敛,如下图所示:
当学习率设置较大时,梯度可能会在最小值附近来回震荡,甚至可能无法收敛,如下图所示:
调整学习率的方法包括:基于经验的手动调整、固定学习率、均匀分布降低策略、指数级衰减策略、多项式策略、AdaGrad动态调整、AdaDelta自动调整、动量法动态调整、随机梯度下降、Adam自动调整。
对于学习率的设置,刚开始更新的时候,学习率尽可能大,当参数快接近最优值的时候,学习率逐渐减小,保证参数最后能够达到极值点。同时希望蝶飞的次数足够少,这样不仅能加快训练的速度,还可以减少资源的消耗。
5.学习小结
针对机器学习中的部分重要概念,很多时候看过一遍之后,长时间不用,就很容易忘记,因此将部分重要概念进行总结,希望能帮助自己加深理解和记忆。同时,希望通过自我总结和实践,提高机器学习实战能力。