- 双曲正切函数(Tanh)
双曲正切函数是深度学习中使用的另一种激活函数,并且在深度学习应用程序中具有某些变体。被称为tanh函数的双曲正切函数是一个更平滑的零中心函数,范围在-1到1之间,因此tanh函数的输出由下式给出:
与sigmoid函数相比,tanh函数更好,因为它为多层神经网络提供了更好的训练性能。但是,tanh函数也无法解决S形函数所遭受的消失梯度问题。该函数提供的主要优点是,它可以产生零中心输出,从而有助于反向传播过程。tanh函数的一个特性是,仅当输入值为0时,即x为零时,它才能达到1的梯度。这使得tanh函数在计算过程中产生一些死亡的神经元。死神经元是激活权重很少被归因于零梯度的结果的情况。
tanh函数的这种局限性促使人们进一步研究激活函数从而解决这个问题,最终诞生了整流线性单元(ReLU)激活函数。tanh函数主要用于自然语言处理和语音识别任务的递归神经网络中。
- 整流线性单元(ReLU)功能
整流线性单元(ReLU)激活函数由Nair和Hinton在2010提出,从那时起,它一直是深度学习应用程序中使用最广泛的激活函数,具有迄今为止最先进的结果。ReLU是一种快速学习的激活函数,已被证明是最成功且使用最广泛的函数。与Sigmoid和tanh激活函数相比,它在深度学习中具有更好的性能和通用性。ReLU表示几乎是线性的函数,因此保留了线性模型的属性,这些属性使它们易于使用梯度下降法进行优化。ReLU激活功能对每个输入元素执行阈值操作,其中小于零的值设置为零,因此ReLU的计算公式为:
此函数可对输入值进行校正,使其小于零,从而将其强制为零,并消除了在早期激活函数类型中观察到的梯度消失问题。
ReLU函数已在深层神经网络的隐藏单元中与另一个激活函数一起使用,在网络的输出层中是对象分类和语音识别应用程序中的典型示例。在计算中使用Relu的主要优点在于,由于它们不计算指数和除法,因此它们保证了更快的计算速度,从而提高了总体计算速度。ReLU的另一个特性是,当它压缩介于0到最大值之间的值时,会在隐藏的单位中引入稀疏性。
然而,尽管已经采用了dropout技术来减少ReLU的过拟合效应,并且网络改善了深层神经网络的性能,但ReLU的局限性仍然在于与S型函数相比它容易过拟合。
ReLu的另一个问题是,某些梯度在训练过程中可能会很脆弱,甚至会消失。它可能导致权重停止更新,从而使其永远不会再在任何数据点上激活。简而言之,ReLu可能导致神经元死亡。
为了解决这个问题,引入了另一种名为Leaky ReLu的修改来解决死亡的神经元问题。它引入了一个小偏置以使更新保持活动状态。
- Softmax函数
Softmax函数是计算中使用的另一种激活函数。它用于根据实数向量计算概率分布。Softmax函数产生的输出范围是0到1之间的值,且概率之和等于1。
Softmax函数的计算公式如下:
Softmax函数用于多分类模型中,在该模型中,它返回每个类的概率,而目标类的概率最高。Softmax函数主要出现在使用它们的深度学习架构的几乎所有输出层中。Sigmoid和Softmax激活函数之间的主要区别在于,Sigmoid用于二分类,而Softmax用于多分类任务。
理论上足够了对吗?我认为现在是时候检查不同的激活函数并比较它们的性能,然后选择对我们更合适的函数。因此,让我们从选择一个数据集开始。
作为该领域的新手,您可能遇到过MNIST这个词。它是一个Digit Recognizer数据集,非常适合入门。
https://www.kaggle.com/c/digit-recognizer/data
数据文件train.csv和test.csv包含从零到九的手绘数字的灰度图像。
每个图像的高度为28像素,宽度为28像素,总计784像素。每个像素都有一个与之关联的像素值,表示该像素的亮度或暗度,数字越高表示像素越暗。此像素值是0到255之间的整数(含)。
训练数据集(train.csv)有785列。第一列称为“标签”,是用户绘制的数字。其余列包含关联图像的像素值。
训练集中的每个像素列都有一个类似pixelx的名称,其中x是0到783之间(包括0和783)的整数。
测试数据集(test.csv)与训练集相同,除了它不包含“标签”列。
在开始编写代码之前,我建议您使用Google Collaboratory,因为它既快速又易于使用。
imports
# This Python 3 environment comes with many helpful analytics libraries installed, here's several helpful packages to load in import pandas as pd import numpy as np import keras import matplotlib.pyplot as plt from keras.utils import to_categorical from keras.models import Sequential, load_model from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.layers.normalization import BatchNormalization from keras.layers.advanced_activations import LeakyReLU from sklearn.model_selection import train_test_split