上一篇文章里,我们把神经网络理解成一套可以从样本中学习规律的函数。
但这里马上会出现一个问题:如果神经网络每一层都只是做加权求和,那它真的能学到复杂规律吗?
答案是不够。
激活函数就是为了解决这个问题出现的。
先看没有激活函数会怎样
一个最简单的神经元大概会做这样的计算:
输出 = 输入1 * 权重1 + 输入2 * 权重2 + 偏置
这是一种线性计算。
如果第一层是线性的,第二层也是线性的,第三层还是线性的,那么把它们叠在一起,本质上仍然可以合并成一个大的线性计算。
也就是说,网络看起来变深了,但表达能力并没有真正变强。
这就像你连续做了很多次加减乘除里的线性变换,最后还是很难表达弯曲、分段、复杂边界这些关系。
激活函数做了什么
激活函数会放在神经元的加权求和之后。
它会把原本的线性结果再处理一下,让网络具备非线性能力。
可以粗略理解成:
输出 = 激活函数(加权求和结果)
这一步看起来很小,但意义很大。
因为现实世界里的很多规律都不是直线关系。图片分类、文本理解、语音识别、推荐系统,它们背后的边界往往都很复杂。
激活函数让神经网络有机会去拟合这些复杂关系。
ReLU 为什么常见
最常见的激活函数之一是 ReLU。
它的规则非常简单:
如果输入大于 0,就输出它自己
如果输入小于 0,就输出 0
也就是:
ReLU(x) = max(0, x)
它简单、计算快,而且在很多深度学习模型里效果很好。
刚入门时,可以先记住一个直觉:ReLU 像一个开关,小于 0 的信号被关掉,大于 0 的信号被保留。
Sigmoid 和 Tanh
除了 ReLU,还有两个经典激活函数:Sigmoid 和 Tanh。
Sigmoid 会把输入压到 0 到 1 之间,所以它经常出现在二分类模型的输出层里,用来表示概率。
Tanh 会把输入压到 -1 到 1 之间,它比 Sigmoid 多了负数区间,在一些早期神经网络里很常见。
不过在隐藏层里,现在更常用的通常还是 ReLU 及其变体。
激活函数该怎么选
入门阶段不用一开始就纠结所有激活函数。
可以先按这个规则记:
- 隐藏层:优先理解
ReLU - 二分类输出:常见
Sigmoid - 多分类输出:常见
Softmax
这不是全部情况,但足够支撑你读懂大多数入门代码。
小结
激活函数的核心作用,是给神经网络加入非线性。
没有激活函数,很多层线性计算叠起来,表达能力仍然有限;有了激活函数,网络才有机会学习弯曲的边界和复杂的规律。
所以它不是可有可无的小配件,而是神经网络能够变强的关键原因之一。