激活函数
常用的一些激活函数
Sigmoid 函数逻辑函数(二分类)
- 公式:
- 输出范围:0 到 1
- 特点:把输入值压缩到 0 和 1 之间,像一个概率值。如果输入很大,输出接近 1;如果输入很小,输出接近 0
- 用途:常用于二分类问题,比如判断一张图片是不是猫(输出接近 1 是猫,接近 0 不是猫)。也常用在神经网络的输出层
- 缺点:当输入值很大或很小时,梯度会变得很小(接近 0),导致“梯度消失”问题,模型学习变慢
ReLU (Rectified Linear Unit) 函数整流线性单元(常用)
- 公式:
- 输出范围:0 到正无穷
- 特点:如果输入小于 0,输出就是 0;如果输入大于 0,输出就是输入本身。简单粗暴
- 用途:非常常用,尤其是在深度学习中。因为它计算简单,训练速度快,能有效避免梯度消失问题。常用于隐藏层
- 缺点:当输入为负值时,输出始终为 0,可能导致部分神经元“死亡”(不再更新),无法学习
Leaky ReLU 函数
- 公式:
(其中 是一个很小的正数,比如 0.01) - 输出范围:负无穷到正无穷
- 特点:它是 ReLU 的改进版,对于负输入不会直接输出 0,而是输出一个很小的值(比如 0.01 x),避免神经元“死亡”
- 形象描述:图形和 ReLU 类似,但 x 小于 0 时不是水平线,而是一条斜率很小的斜线
- 用途:解决 ReLU 的“神经元死亡”问题,适合隐藏层
- 缺点:需要调参(选择合适的
值),计算比 ReLU 略复杂
如何选择
为隐藏层选择
一般来说,隐藏层通常推荐使用 ReLU,原因主要是 ReLU 的计算较快,而且 ReLU 只有一端是平的,这在计算梯度下降的时候有优势,速度更快
为输出层选择
通常取决于你要预测的标签 Y 的特点,比如说你要预测一个二分的模型,那么自然而然就会选择 Sigmoid;而如果要预测的数据中存在负的,就会选择线性激活函数;如果要预测中只有正的,那么就会选择使用 ReLU(线性整流单元)
在 Tensorflow 中使用
可以通过定义,在不同的层中使用不同的激活函数
python
model = tf.keras.Sequential([
tf.keras.layers.Dense(units=25, activation='relu') # 隐藏层 第一层
tf.keras.layers.Dense(units=10, activation='relu') # 隐藏层 第二层
tf.keras.layers.Dense(units=1, activation='sigmoid') # 输出层 第三层,使用二分类
])