超参数(Hyperparameters)| 下

戳上方蓝字【阿力阿哩哩的炼丹日常】关注我~

前面我们介绍了:

一文掌握CNN卷积神经网络

超参数(Hyperparameters)|  上

04

4.4.4 常见的激励函数

在谈及常见的激励函数前,我们得先知道激励函数是干什么用的。如图 4.3所示,神经元的输出值会经历一个f函数,我们将这个函数叫做激励函数(activation function)。加入激励函数的目的也非常纯粹,就是为了让神经网络模型能够逼近非线性函数。倘若我们去掉激励函数,神经元就只有线性函数y=wx+b,这样的神经网络就只能逼近线性函数了。假如在不加激励函数的前提下,我们要训练一个分类模型,倘若数据是非线性可分的,那么模型的准确率会相当低,因为我们的模型训练不出一个非线性函数去拟合我们的数据。图 4.26就是数据线性不可分与线性可分的对比图。

图 4.26 线性可分与线性不可分

1. Sigmoid与tanh激励函数

如图 4.27所示,sigmoid函数可以将神经元的输出值压缩到(0, 1)之间,是早期常用的激励函数之一。但是随着算力的提升,人们开始搭建多层神网络模型,sigmoid的缺点也就暴露出来了。我们知道每一个神经元的输出值是经过激励函数之后,传递给下一个神经元的,也就是说,层与层之间的神经元是连乘的关系,倘若我们在多层神经网络层使用sigmoid函数,它将每一层的神经元输出值压缩至(0, 1),那么连乘的结果就会越来越小,直至为0,也就是我们常说的梯度消失。

与之有类似缺点的激励函数还有tanh函数,如图 4.28所示,因此现在经常将sigmoid和tanh用在层数较少的神经网络模型中,或者放在回归模型输出层中用作回归的激励函数,亦或者放在分类模型输出层中用作计算概率的激励函数。

图 4.27 Sigmoid函数

 

图 4.28 tanh函数

2. Linear激励函数

线性激活函数,即不对神经元的输出值进行处理,直接输出。通常用在回归模型的输出层中。

3. Softmax激励函数

Softmax示意图如图 4.29所示,通常用在分类模型的输出层中。原理如下:

图 4.29 Softmax层示意图

softmax层的每一个节点的激励函数

上面的公式,我们可以理解为每个节点输出一个概率,所有节点的概率加和等于1,这也是CNN选择softmax层进行分类的原因所在,可以将一张待分类的图片放进模型,softmax输出的概率中,最大概率所对应的标签便是这张待分类图的标签。

这时候,笔者给大家举个例子就明白啦。现在我们的softmax层有3个神经元,也就是说我们可以训练一个分三类的分类器,现在假设我们有一组带标签的训练样本,他们的标签可以如此标记,对应节点标记1,其他标记0。其实就是onehot编码,如图 4.16所示。

训练的时候将训练样本图片放入输入层,标签向量放入输出层,最终训练出一个模型。

此时,笔者将一张待分类的图片放入我们的模型中,如果最后softmax层输出的结果是式(4.38)。

这时,大家就明白了上诉公式的含义了,0.85对应着最大概率,说明这张图片是猫,所有概率加起来等于1,这样是不是好理解很多啦。

4. Relu激励函数

上面提到sigmoid和tanh激励函数容易导致多层神经网络模型在训练过程中出现梯度消失的现象。为此,如图 4.30所示,有人提出了Relu激励函数来弥补它们的不足之处,因此Relu函数及其变种(leaky relu 、pre relu等)经常放在多层神经网络的中间层。

且Relu函数的计算速度比sigmoid和tanh快。从下图可知,relu函数只需要判断神经元的输出值是否小于0,然后输出相应的值即可,因此整体网络的收敛速度会比较快。

图 4.30 Relu激励函数

05

4.4.5 常见的损失函数

同样地, 在谈及损失函数之前,我们先复习下整个神经网络的训练过程。它是基于梯度下降的方法去不断缩小预测值与真实值之间差值的过程。而这个差值就是损失(loss),计算这个损失的函数就是损失函数(loss function)了。且损失函数是和神经网络输出层的激励函数相配套的。接下来笔者将根据我们训练的任务来讲解常见的损失函数。

1. 回归任务

损失函数(loss function):mse

输出层配套激励函数:linear, sigmoid, tanh

输出层神经元个数:1个

均方误差mse如公式(4.39)所示:

其中,f是模型预测值,y_i是实际值,通过计算两者的均方误差来衡量模型的有效性。

2. 二分类任务

(1)损失函数:binary_crossentropy

输出层配套激励函数:softmax

输出层神经元个数:2个

(2)损失函数:binary_crossentropy

输出层配套激励函数:sigmoid or tanh

输出层神经元个数:1个

这个损失函数(二分类交叉熵)要求训练样本标签必须为独热编码(one hot encode),拟合损失的过程在上文有写,这里就不赘述了。

3. 多分类任务

(1)损失函数:categorical_crossentropy

输出层配套激励函数:softmax

输出层神经元个数:几分类便对应几个神经元

这个损失函数(多分类交叉熵)要求训练样本标签(label)必须为独热编码(one hot encode),拟合损失的过程在上文有写,这里就不赘述了。

(2)损失函数:sparse_categorical_crossentropy

输出层配套激励函数:softmax

输出层神经元个数:几分类便对应几个神经元

这个损失函数与(多分类交叉熵)相同,不过要求训练样本标签(label)必须为数字编码,如图 4.31所示。

图 4.31 数字编码

06

4.4.6 其他超参数

epoch:训练模型的迭代次数。我们主要看损失是否收敛在一个稳定值,若收敛则当前设置的epoch为最佳。

BatchSize:我们用来更新梯度的批数据大小。一般来说,Batch Size设置的不能太大也不能太小,一般为几十或者几百。笔者的调参经验是看GPU占用率。我们在命令行输入gpustat查看GPU占用率,如图 4.32所示。Batch Size越大,GPU占用率也就越高,一般占满整个GPU卡训练模型为最佳。业界传闻使用2的幂次可以发挥更佳的性能,笔者并没有尝试过,大家可以去尝试一下。

图 4.32 GPU占用率

07

4.4.7 超参数设置小结

好了,到这里,笔者已经将深度学习的超参数的知识点讲解完了。大家在掌握了整体的超参数设置的知识体系后,就可以构建神经网络模型时添加适当的超参数,让整个模型的训练更加的高效,从而得到更加准确的结果。

当然啦,大家也可以创造属于自己的激励函数或者损失函数,要是能设计出比常用的还要优秀的函数,这就是轰动AI领域的大事了。

如果需要,大家可以去keras或者TensorFlow官网查看更多的参数含义与用途,不过笔者在这建议大家在需要的时候去翻阅一下即可,因为不可能把所有函数都记住的。 

下一期,我们将介绍

自编码器

敬请期待~

关注我的微信公众号~不定期更新相关专业知识~

内容 |阿力阿哩哩 

编辑 | 阿璃 

点个“在看”,作者高产似那啥~

 

发布了76 篇原创文章 · 获赞 5 · 访问量 6234

猜你喜欢

转载自blog.csdn.net/Chile_Wang/article/details/104164326
今日推荐