Press "Enter" to skip to content

人工智能|神经网络中的激活函数

问题描述

 

激活函数是深度学习,也是人工神经网络中一个十分重要的学习内容,对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有非常重要的作用。那幺,激活函数的作用应该如何来理解呢?

 

首先,当我们不用激活函数时,网络中各层只会根据权重 w 和偏差 b 进行线性变换,就算有多层网络,也只是相当于多个线性方程的组合,依然只是相当于一个线性回归模型,解决复杂问题的能力有限。如果希望神经网络能够处理复杂任务,但线性变换无法执行这样的任务,使用激活函数就能对输入进行非线性变换,使其能够学习和执行更复杂的任务。下面,就一起来了解常用的激活函数吧。

 

解决方案

 

常用激活函数:

 

( 1 ) Sigmoid 函数

 

sigmoid函数可以将输入的整个实数范围内的任意值映射到[0,1] 范围内,当输入值较大时,会返回一个接近于 1 的值,当输入值较小时,则返回一个接近于 0 的值。在 tensorflow 中,用 tf.sigmoid(x) 直接调用这个函数使用。

 

Sigmoid函数的数学公式和函数图像如下:

 

 

 

优点:输出在映射区间 (0,1) 内单调连续,非常适合用作输出层,并且比较容易求导。

 

缺点:其解析式中含有幂运算,计算机求解时相对比较耗时,对于规模比较大的深度网络,会较大地增加训练时间。

 

( 2 ) Softmax 函数

 

softmax函数实际上是在sigmoid 函数上做一个推广,它可以将所有输出映射成概率的形式,即值在 [0,1] 范围且概率总和为 1 。 tensorflow 中可以用 tf.nn.softmax() 来调用。

 

Softmax函数的数学公式如下:

 

 

举例说明一下,假如输入变量为 [1.5,4.4,2.0] ,经过 softmax 函数激活后,输出为 [0.04802413, 0.87279755, 0.0791784 ],分别对应属于1 、 2 、 3 类的概率。 代码实现则为:

 

tf.nn.softmax(tf.constant([[1.5,4.4,2.0]])) 。

 

( 3 ) Tanh 函数

 

tanh 函数相似于 sigmoid 函数,但它能将值映射到 [-1,1] 的范围。于 sigmoid 函数相比,它的输出均值是 0 ,使得其收敛速度要比 sigmoid 快,减少迭代次数,但幂运算的问题依然存在。

 

Tanh 函数数学公式和函数图像如下:

 

 

 

( 4 ) Relu 函数

 

relu 函数,是目前被使用最为频繁得激活函数, relu 函数在 x < 0 时,输出始终为 0 。由于 x > 0 时, relu 函数的导数为 1 ,即保持输出为 x ,所以 relu 函数能够在 x > 0 时保持梯度不断衰减,从而缓解梯度消失的问题,还能加快收敛速度。

 

relu 函数数学公式和函数图像如下:

 

 

 

前向传播的实例,就需要借助这个函数,小编发布过这个实例的详解,其中包括代码演示,感兴趣的话可以去看看《 TensorFlow 前向传播实例》这篇文章。

 

结语

 

简单来说,激活函数的作用就是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。在神经网络中,隐藏层之间的输出大多需要通过激活函数来映射,在构建模型时,需要根据实际数据情况选择激活函数。 TensorFlow 中的激活函数不止这 4 种,本文只是介绍最常用的 4 个,当然,其他激活函数大多是这几个激活函数的扩展变换形式。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注