在前面的几篇文章中,我们已经理解了:

CODE
神经网络的基本结构
神经网络如何进行预测
如何使用TensorFlow训练一个模型

但还有一个问题一直没有深入解释:神经网络中的激活函数(Activation Function)到底有什么用? 

如果你刚开始学习神经网络,可能会觉得激活函数只是一个很小的细节,比如: 

CODE
Dense(16, activation="relu")

但事实上,激活函数是神经网络能够学习复杂规律的关键。如果没有它,神经网络几乎什么也学不到。

这一篇,我们就来理解三个问题:

1、激活函数是什么

2、常见的激活函数有哪些 

3、为什么神经网络必须使用它

从一个现实问题开始

假设你在做一个短视频平台,希望预测一个视频是否会成为热门内容。

平台可以收集一些特征:

CODE
视频时长
发布者粉丝数
发布后的互动率
评论增长速度

如果用最简单的模型,可能是: 

CODE
热度 = a × 粉丝数 + b × 评论数 + c × 互动率 + d

这其实就是线性模型,但现实世界往往不是线性的。 比如:

CODE
粉丝从 1万 → 2万 影响很明显
粉丝从 100万 → 101万 影响几乎没有

也就是说:世界并不是直线关系,而是复杂的非线性关系。而神经网络之所以强大,就是因为它可以表达这种非线性关系。 

而让这一切成为可能的,就是激活函数。

什么是激活函数?

在神经网络中,每个神经元都会先做一步计算:z = w·x + b,这一步只是线性计算。

接下来会经过一个函数:

CODE
a = g(z)

这个函数 g(z) 就叫:激活函数(Activation Function)。流程其实是:

CODE
输入
 ↓
线性计算 (w·x + b)
 ↓
激活函数
 ↓
输出

示意图 如下图所示:

换句话说,激活函数决定了神经元如何“响应”输入信号。

最常见的三种激活函数

在现代神经网络中,最常见的激活函数主要有三种:

  • Sigmoid

  • ReLU

  • Linear

Sigmoid:最早的激活函数

Sigmoid函数长这样:

它有两个特点:

1、输出范围在0到1

2、曲线像一个S形

因此它非常适合概率预测。比如:用户是否会购买,邮件是否是垃圾邮件,视频是否会成为爆款等,所以在二分类问题的输出层,Sigmoid仍然非常常见。

ReLU:现代神经网络的默认选择

现在深度学习中使用最多的激活函数是:ReLU(Rectified Linear Unit),公式其实非常简单:

CODE
ReLU(z) = max(0, z)

也就是说:

CODE
z < 0  →  输出 0
z ≥ 0  →  输出 z

图像如下图所示:

ReLU的特点是:

  • 计算非常简单

  • 训练速度更快

  • 在深层网络中表现更好

因此现在的经验法则是:隐藏层默认使用 ReLU。

Linear:有时等于“没有激活函数”

第三种是:线性激活函数,Linear activation。公式非常简单:

CODE
g(z) = z

这意味着:

CODE
输出 = w·x + b

也就是没有任何变化。所以很多人也会说:Linear activation ≈ 没有激活函数。

如何选择激活函数?

实际工作中,一般有一个简单规则:

输出层:

任务类型
激活函数
二分类
Sigmoid
回归(正负值)
Linear
回归(非负)
ReLU

隐藏层:

几乎所有情况下直接用ReLU,这是目前深度学习的默认配置。

为什么神经网络必须使用激活函数?

现在来看一个非常关键的问题:如果所有层都使用Linear activation会发生什么? 假设神经网络是: 

CODE
输入
 ↓
隐藏层
 ↓
输出层

如果每一层都是: y = wx + b ,那么多层叠加之后其实变成: y = W x + b ,也就是说:整个神经网络等价于一个线性模型。 

换句话说,深度神经网络 = 线性回归,那就完全失去了意义。 

所以激活函数的作用就是引入“非线性”。只有这样,神经网络才能学习复杂关系。

ReLU为什么特别重要?

ReLU有一个非常有意思的特性,当输入为负时,输出直接变成0。

这意味着神经网络可以自动关闭某些神经元。

多个ReLU神经元组合起来,可以形成分段线性函数,这样就可以逼近非常复杂的函数。 

这就是深度学习能够拟合复杂关系的重要原因。


很多时候,我们看到神经网络的复杂结构,会误以为它的能力来自“层数”或者“参数数量”。但真正让神经网络拥有表达能力的,其实是一个看起来很小的设计:非线性激活函数。

正是因为有了这些简单的函数,神经网络才能把一个复杂问题拆解成许多小的局部规律,再逐步组合成对现实世界的理解。

附录:本文涉及的专有名词中英文对照(标红为最核心)

中文术语
英文术语
简要说明
激活函数
Activation Function
神经网络中用于引入非线性的函数
Sigmoid函数
Sigmoid Function
输出范围在0到1之间的S形函数
ReLU函数
Rectified Linear Unit (ReLU)
常见激活函数,公式为 max(0,z)
线性激活函数
Linear Activation Function
输出等于输入的激活函数 g(z)=z
神经元激活值
Activation Value
神经元经过激活函数后的输出
分段线性函数
Piecewise Linear Function
ReLU网络可以形成的函数形态
二分类问题
Binary Classification
只有两个类别的预测任务
回归问题
Regression Problem
预测连续数值的机器学习任务