【深度学习_TensorFlow】激活函数

写在前面

上篇文章我们了解到感知机使用的阶跃函数和符号函数,它们都是非连续,导数为0的函数:

建议回顾上篇文章,本篇文章将介绍神经网络中的常见激活函数,这些函数都是平滑可导的,适合于梯度下降算法。


写在中间

激活函数是做什么的?


激活函数(Activation Function)是神经网络中的一个重要组成部分,主要用于将神经元的输入信息进行非线性变换,从而引入非线性特性。

为什么要使用激活函数?


如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是线性组合,这种情况就是最原始的感知机。将来归纳出的方程就如图a所示,要实现图b的效果就只能将线性模型嵌套非线性函数转换为非线性函数。

我们把这个非线性函数称为激活函数(Activation Function),用𝜎表示:

o = σ ( W x + b ) o=\sigma{(Wx + b)} o=σ(Wx+b)

这里的𝜎代表了某个具体的非线性激活函数,如 Sigmoid 函数、ReLU 函数

表达能力


模型的表达能力偏弱,就可以通过堆叠多次变换来增加其表达能力

把第一层神经元的输出值 h 1 h_1 h1作为第二层神经元模型的输入,把第二层神经元的输出 h 2 h_2 h2作为第三层神经元的输入,最后一层神经元的输出作为模型的输出,使用ReLU激活函数举例

h 1 = R e L U ( W x 1 + b 1 ) h_1=ReLU(Wx_1 + b_1) h1=ReLU(Wx1+b1)
h 2 = R e L U ( W 2 h 1 + b 2 ) h_2 = ReLU(W_2h_1 + b_2) h2=ReLU(W2h1+b2)
o = W 3 h 2 + b 3 o = W_3h_2 + b_3 o=W3h2+b3


激活函数介绍

一、Sigmoid

( 1 )简单介绍

此函数的定义如下

S i g m o i d ( x ) ≜ 1 1 + e − x \mathrm{Sigmoid}(x)\triangleq\frac1{1+\mathrm{e}^{-x}} Sigmoid(x)≜1+e−x1

在深度学习中的优点如下:

  • 它的值域为(0, 1),能够把𝑥 ∈ 𝑅的输入"压缩"到𝑥 ∈ (0,1)区间,和概率的分布范围0,1契合,可以通过 Sigmoid 函数将输出转译为概率输出

  • Sigmoid 函数连续可导,可以直接利用梯度下降算法优化网络参数


( 2 )简单实现

如何在TensorFlow中使用这个函数呢,其实一行代码就可以搞定了

Python 复制代码
tf.nn.sigmoid(x) # 通过 Sigmoid 函数

二、ReLU

( 1 )简单介绍

在 ReLU激活函数提出之前,Sigmoid 函数通常是神经网络的激活函数首选。但是 Sigmoid 函数在输入值较大或较小时容易出现梯度值接近于 0 的现象,网络参数长时间得不到更新,导致训练不收敛或停滞不动的现象发生。

此函数的定义如下:

ReLU ⁡ ( x ) ≜ max ⁡ ( 0 , x ) \operatorname{ReLU}(x)\triangleq\max(0,x) ReLU(x)≜max(0,x)

可以看到,ReLU 对小于 0 的值全部抑制为 0;对于正数则直接输出


( 2 )函数实现

函数的调用同样简单

Python 复制代码
tf.nn.relu(x)

三、LeakyReLU

( 1 )简单介绍

ReLU 函数在𝑥 < 0时导数值恒为 0,也可能会造成梯度弥散现象,为了克服这个问题,LeakyReLU 函数被提出,此函数的定义为:

LeakyReLU ≜ { x x ≥ 0 p x x < 0 \text{LeakyReLU}\triangleq\left\{\begin{matrix}x&x\geq0\\px&x<0\end{matrix}\right. LeakyReLU≜{xpxx≥0x<0

其中𝑝为用户自行设置的某较小数值的超参数,如 0.02 等。当𝑝 = 0时,LeayReLU 函数退化为ReLU 函数;当𝑝 ≠ 0时,𝑥 < 0处能够获得较小的导数值𝑝,从而避免出现梯度弥散现象。

( 2 )函数实现

Python 复制代码
tf.nn.leaky_relu(x, alpha=0.02) 

四、Tanh

( 1 )简单介绍

Tanh 函数能够将𝑥 ∈ 𝑅的输入"压缩"到(−1,1)区间,其函数的定义为

tanh ⁡ ( x ) = ( e x − e − x ) ( e x + e − x ) = 2 ⋅ s i g m o i d ( 2 x ) − 1 \begin{aligned}\tanh(x)&=\frac{(\mathrm{e}^x-\mathrm{e}^{-x})}{(\mathrm{e}^x+\mathrm{e}^{-x})}=2\cdot\mathrm{sigmoid}(2x)-1\end{aligned} tanh(x)=(ex+e−x)(ex−e−x)=2⋅sigmoid(2x)−1


( 2 )代码实现

Python 复制代码
tf.nn.tanh(x) 

激活函数输出范围

了解了上面的函数之后,不知你是否有这样的疑问,这么多种函数,在进行网络构建的时候究竟如何选择?

其实这其中还是有些门道的,主要根据数据的范围和构建网络的目的来选择,具体情况还要结合实际问题试验:

例如:

  • 输出区间为0, 1,在网络模型主要进行二分类(猫狗识别分类)、图片生成(像素归一化),就可以使用类似Sigmoid()一类的函数。

  • 输出区间为0, 1,且所有数据的概率和为1,网络模型主要进行多分类问题(mnist手写数字识别),就可以使用类似Softmax()一类的函数。

  • 输出区间为-1, 1,就可以使用Tanh() 函数。

  • 输出区间在某个段内,网络模型进行年龄预测、股票走势的预测,更倾向于回归问题,ReLU函数可能效果较好。


写在最后

👍🏻点赞,你的认可是我创作的动力!

⭐收藏,你的青睐是我努力的方向!

✏️评论,你的意见是我进步的财富!

相关推荐
Easy_API6 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
GlobalInfo6 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
紧跟先前的步伐6 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
释厄6237 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
老金带你玩AI8 小时前
集万家所长,一键复制的Agent.md!
人工智能
ZhuoAIStage8 小时前
舞台工艺多专业审图提速:用 AI 智能体编排 A+B+C+G 四段读图流水线
人工智能·自动化·工作流编排·舞台工艺·审图智能体
小奶包他干奶奶8 小时前
AI学习——1、机器学习概念
人工智能·机器学习
展讯快报8 小时前
悬浮提词器免费App评估报告:说得AI的免费策略与可用性分析
人工智能
Yuzhiyuxia8 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
2601_965448878 小时前
AI视频制作:做系列历史人物视频音色不搭,AI 音色克隆的方法实测
人工智能·音视频