一、激活函数简介
激活函数(Activation Function)是神经网络中的关键组件,用于对神经元的输入进行非线性变换,使网络能够学习和表示复杂的数据关系。常见的激活函数包括 Sigmoid、ReLU、Tanh 等,它们决定了神经元是否被激活以及如何传递信号。
通俗理解
如果把神经网络比作人脑的神经元,激活函数就像是一个“开关+信号放大器”,决定哪些信息重要(激活)并传递下去,哪些信息不重要(抑制)可以忽略。没有激活函数,神经网络就像一条直线,无法学习复杂模式,比如识别猫狗、理解语言等。
例子
这张图片展示了一个需求预测(Demand Prediction)的神经网络示例,主要分为两部分:
输入特征:列举了影响需求预测的因素,如价格(price)、运输成本(shipping cost)、市场营销(marketing)、材料(material)、支付能力(affordability)、认知度(awareness)和感知质量(perceived quality)。
激活函数:
Sigmoid:公式为 g(z)=1 / (1+e−z),输出范围在 0 到 1 之间,适合概率预测。
ReLU:公式为 g(z)=max(0,z),当输入 z 小于 0 时输出 0,否则输出 z,常用于隐藏层。
图中还展示了神经元 a2[1] 的计算方式,即通过权重、输入和偏置的线性组合后,应用激活函数 gg 得到输出。
二、常见的激活函数
无激活函数(线性激活):
公式为 a2[1]=g(w2[1]⋅x+b2[1]),其中 g(z)=z,即输出等于输入,不引入非线性。
Sigmoid:
公式为 g(z)=1 / (1+e−z),输出范围在 0 到 1 之间,适用于概率输出。
ReLU(Rectified Linear Unit):
公式为 g(z)=max(0,z),保留正值输入,负值输出为 0,常用于隐藏层。
图片中还提到了 Softmax(未展开),通常用于多分类问题的输出层。
三、激活函数的选择策略
1. 输出层(Output Layer)
二分类问题(Binary Classification)
使用 Sigmoid 激活函数,输出范围在 0 到 1 之间,表示概率(如 y=0 或 1)。
示例数据:
回归问题(Regression)
线性激活函数:直接输出任意实数(如 y=± 值),适用于连续值预测。
示例数据:
ReLU:输出非负值(如 y≥0),适用于仅预测正值的场景(如价格、电压)。
示例数据:
2. 隐藏层(Hidden Layer)
这张图片讨论了隐藏层(Hidden Layer)激活函数的选择,重点对比了 Sigmoid 和 ReLU 的特性:
Sigmoid
公式:g(z)=1 / (1+e−z),输出范围在 0 到 1 之间。
缺点:当输入 z 的绝对值较大时,函数曲线平坦(梯度接近 0),导致梯度消失((∂/ ∂w)f(W,B)≈0),学习速度慢。
ReLU
公式:g(z)=max(0,z),在 z>0 时梯度恒为 1,学习更快。
优点:非平坦区域的梯度稳定,避免了梯度消失问题,是隐藏层的常用选择。
图中通过函数曲线图直观对比了二者的平坦性,并指出 ReLU 更适合隐藏层。
3. 总结
输出层激活函数选择:
二分类问题(binary_classification):使用'sigmoid'
回归问题(regression):
输出y可正可负:使用'linear'
输出y≥0:使用'relu'
隐藏层建议:
推荐使用'ReLU'激活函数
Keras代码示例:
python
model = Sequential([ Dense(units=25, activation='relu'), # 第1隐藏层 Dense(units=15, activation='relu'), # 第2隐藏层 Dense(units=1, activation='sigmoid') # 输出层 ])
展示了如何为不同层配置不同的激活函数。
四、为什么要选择激活函数
没有激活函数的情况:
网络只是输入特征的线性组合(f(x) = w·x + b)
本质上等同于线性回归模型
无法学习复杂非线性关系
使用激活函数的优势:
通过g(z)引入非线性变换
使网络能够学习输入特征(x)之间的复杂交互关系
可以建模更复杂的现实问题(如示例中的"top seller"预测)
这张图片通过数学推导展示了没有激活函数的神经网络本质上等同于线性回归:
线性网络结构:
第一层计算:a[1]=w1[1]x+b1[1]
第二层计算:a[2]=w1[2]a[1]+b1[2]
数学推导:
将两层计算合并:
a[2]=w1[2](w1[1]x+b1[1])+b1[2]展开后得到:
a[2]=(w1[2]w1[1])x+w1[2]b1[1]+b1[2]最终简化为:
a[2]=wx+b 形式
结论:
无论多少层线性变换,最终都可以简化为单层线性模型
等同于线性回归 f(x)=wx+b
强调了引入非线性激活函数的必要性
这张图片通过示例说明了激活函数选择对网络性质的影响,并给出了关键建议:
线性激活函数问题:
当隐藏层使用线性激活(g(z)=z)时
即使输出层用sigmoid,整个模型等价于:
纯线性网络 → 线性回归
输出层sigmoid → 退化为逻辑回归
隐藏层的线性特性无法实现真正的"深度"学习
核心建议:
不要在隐藏层使用线性激活函数
推荐使用ReLU等非线性激活函数
这样才能发挥多层网络的优势,学习复杂特征
图片通过数学表达式展示了线性激活导致网络退化的过程,强调了非线性激活对深度学习的重要性。