当前位置: 首页 > 科技观察

深度学习中常用的8个激活函数

时间:2023-03-17 14:02:43 科技观察

激活函数又称转换函数,是设计神经网络的关键。激活函数很重要,因为它用于确定神经网络的输出。它将结果值映射为0到1或-1到1等(取决于函数)。激活函数还有一个名字,叫做Squashingfunction,在激活函数作用范围受限时使用。激活函数应用于神经网络的每个节点,并决定该神经元是否应该被“激发”/“激活”。为什么选择激活函数非常重要。在隐藏层和输出层中实现时,激活函数的选择至关重要。模型的准确性和损失在很大程度上取决于激活函数。此外,必须根据您对模型的期望来选择它们。例如,在二元分类问题中,sigmoid函数是一个最优选择。激活函数类型。大致可以分为两类:线性激活函数。非线性激活函数。为了展示方便,我们引入了如下库:importmathasmimportmatplotlib.pyplotaspltimportnumpyasnpimporttensorflowastffromtensorflowimportkerasfromtensorflow.kerasimportlayersSigmoidsigmoid激活函数也叫logistic函数。sigmoid函数在回归分类问题中非常流行。sigmoid函数给出的取值范围是0和1defsigmoid(x):return1/(1+m.exp(-x))values_of_sigmoid=[]values_of_x=[]foriinrange(-500,500,1):i=i*0.01values_of_x.append(i)values_of_sigmoid.append(sigmoid(i))plt.plot(values_of_x,values_of_sigmoid)plt.xlabel("valuesofx")plt.ylabel("valueofsigmoid")tanH这个函数很相似到sigmoid激活函数。此函数接受-1到1范围内的任何实数值作为输入和输出值。输入越大(越正),输出值越接近1.0,而输入越小(越负),输出越接近-1.0。Tanh激活函数计算如下。deftanh(x):返回(m.exp(x)-m.exp(-x))/(m.exp(x)+m.exp(-x))values_of_tanh=[]values_of_x=[]foriinrange(-500,500,1):i=i*0.001values_of_x.append(i)values_of_tanh.append(tanh(i))plt.plot(values_of_x,values_of_tanh)plt.xlabel("valuesofx")plt.ylabel("valueoftanh")SoftmaxSoftmax激活函数输出一个总和为1.0的值向量,可以解释为类别成员的概率。Softmax是argmax函数的“软”版本,它允许“赢者通吃”函数的似然输出。defsoftmax(x):e_x=np.exp(x-np.max(x))return_x/e_x.sum()values_of_x=[i*0.01foriinrange(-500,500)]plt.plot(scores,softmax(values_of_x))plt.xlabel("valuesofx")plt.ylabel("valueofsoftmax")RELU修正线性单元ReLU可能是隐藏层最常用的函数。它还可以有效地克服Sigmoid和Tanh等其他以前流行的激活函数的局限性。具体来说,它不太容易受到阻止深度模型训练的消失梯度下降问题的影响,尽管它可能会遇到其他问题,例如饱和单元。defReLU(x):returnmax(0,x)values_of_relu=[]values_of_x=[]foriinrange(-500,500,1):i=i*0.01values_of_x.append(i)values_of_relu.append(ReLU(i))plt.plot(values_of_x,values_of_relu)LeakyReLUReLU的问题:当ReLU被赋予负值时,它会立即变为零,这会降低模型从数据中正确拟合或训练的能力。这意味着ReLU激活函数的任何负输入都会立即将该值转换为图中的零,这反过来会通过不正确地映射负值来影响生成的图。为了克服这个问题,引入了LeakyReLU。defleaky_ReLU(x):returnmax(0.1*x,x)values_of_L_relu=[]values_of_x=[]foriinrange(-500,500,1):i=i*0.01values_of_x.append(i)values_of_L_relu.append(leaky_ReLU(i))plt.plot(values_of_x,values_of_L_relu)下面的函数都是RELU的变体。基本上,它们类似于Leaky,并在激活函数为负时优化ELU的返回。activation_elu=layers.Activation('elu')x=tf.linspace(-3.0,3.0,100)y=activation_elu(x)#oncecreated,alayeriscallablejustlikeafunctionplt.figure(dpi=100)plt.plot(x,y)plt。xlim(-3,3)plt.xlabel("输入")plt.ylabel("输出")plt.show()SELUactivation_selu=layers.Activation('selu')x=tf.linspace(-3.0,3.0,100)y=activation_selu(x)#oncecreated,alayeriscallablejustlikeafunctionplt.figure(dpi=100)plt.plot(x,y)plt.xlim(-3,3)plt.xlabel("输入")plt.ylabel("输出")plt.show()swishactivation_swish=layers.Activation('swish')x=tf.linspace(-3.0,3.0,100)y=activation_swish(x)#oncecreated,alayeriscallablejustlikeafunctionplt.figure(dpi=100)plt.plot(x,y)plt.xlim(-3,3)plt.xlabel("Input")plt.ylabel("Output")plt.show()总结隐藏层激活函数常用:一般循环神经网络使用Tanh或sigmoid激活函数,甚至两个Sigmoid激活用于连接Tanh激活用于输出。1.多层感知器(MLP):ReLU激活函数。2.卷积神经网络(CNN):ReLU激活函数。3.循环神经网络:Tanh和/或Sigmoid激活函数。如果你不确定使用哪个激活函数,你肯定可以尝试不同的组合并找到最合适的,但是从RELU的输出层激活函数开始:输出层激活函数必须根据你所遇到的问题类型来选择试图解决。例如,如果您有线性回归问题,那么线性激活函数会很有用。以下是您可能会遇到的一些常见问题以及要使用的激活函数。二元分类:一个节点,sigmoid激活。多类分类:每个类一个节点,softmax激活。多标签分类:每类一个节点,sigmoid激活。下面是一些常用的激活函数的公式和可视化,希望对大家有所帮助