关于激活函数
ReLU 激活函数
ReLU(Rectified Linear Unit,整流线性单元)是一种非常常用的激活函数。它的特点是:
-
如果输入 z 小于 0,输出是 0。
-
如果输入 z 大于等于 0,输出就是 z 本身。
用公式表示就是:
ReLU 的好处是计算简单,只需要判断输入是否大于 0,然后取最大值。
Sigmoid 激活函数
Sigmoid(乙状结肠)激活函数也很常用,它的输出范围在 0 到 1 之间,公式是:
Sigmoid 函数的输出是一个平滑的曲线,当 z 很大时,输出接近 1;当 z 很小时,输出接近 0。
线性激活函数
线性激活函数就是 g(z)=z,也就是直接输出输入值。如果在神经网络中使用线性激活函数,那么整个网络的输出仍然是输入的线性函数。
这三个可能是迄今为止神经网络中最常用的激活函数,分别是乙状结肠激活函数(中间),
relu激活函数(最右侧),线性激活函数(最左侧)。
在考虑输出层的激活函数时,往往是一个相对自然的选择,需要看具体目标是什么。
选择激活函数的场景
二进制分类问题
如果你在处理一个二进制分类问题(比如判断图片中是否有猫,结果是 0 或 1),那么在输出层使用 Sigmoid 激活函数是最自然的选择。因为 Sigmoid 的输出范围是 0 到 1,可以解释为概率。
回归问题
如果你在解决一个回归问题(比如预测明天的股票价格),那么在输出层使用线性激活函数是合适的。因为线性激活函数可以输出任何实数值,包括正数和负数。
预测非负值
如果你需要预测的值是非负的(比如房价,不可能是负数),那么 ReLU 激活函数是一个不错的选择,因为 ReLU 的输出是非负的。
relu是迄今为止许多人训练神经网络的最常见的选择
ReLU 和 Sigmoid 的比较
计算效率
ReLU 的计算速度比 Sigmoid 快。ReLU 的计算只需要判断输入是否大于 0,然后取最大值。而 Sigmoid 需要计算指数和逆运算,计算量更大,效率稍低。
梯度消失问题
-
ReLU:ReLU 函数在 z≥0 时梯度为 1,在 z<0 时梯度为 0。这意味着在 z≥0 的区域,梯度不会消失,训练速度更快。
-
Sigmoid:Sigmoid 函数在两端(z 很大或很小时)梯度接近 0,容易导致梯度消失问题。这使得训练速度变慢,尤其是在深层网络中。
使用relu激活函数可以使你的神经网络学习得更快一点
为什么需要激活函数?
总之,激活函数就像是给模型加上了“魔法”,让它能够更好地学习和理解复杂的数据!
-
激活函数可以引入非线性因素。以常见的 Sigmoid 激活函数为例,它的数学表达式是 f(x)=1+e−x1。这个函数的输出范围是(0,1),并且具有非线性的 S 形曲线。当神经网络的神经元使用 Sigmoid 激活函数后,即使是简单的多层神经网络结构,也能够学习复杂的非线性关系。例如,在图像识别任务中,图像的像素值和目标类别之间的关系是高度非线性的。通过在神经网络中使用激活函数,网络可以对这些复杂的非线性关系进行建模,从而能够准确地识别图像中的物体。
-
简单来说,激活函数在机器学习中的作用主要有两个:
-
让模型变得“聪明”
-
激活函数可以让模型处理更复杂的问题。如果没有激活函数,模型就像一个简单的加法器,只能解决直线相关的问题。但有了激活函数,模型就能处理曲线、形状等复杂的关系,比如识别图片里的猫和狗。 -
控制输出范围
-
激活函数可以限制神经元的输出,防止数值变得太大或太小。比如,Sigmoid函数把输出限制在0到1之间,这样可以让模型更稳定,避免计算时出现错误。 -
激活函数类型
-
总结
-
ReLU:计算简单,训练速度快,适合隐藏层。
-
Sigmoid:输出范围在 0 到 1,适合二进制分类问题的输出层。
-
线性激活函数:适合回归问题的输出层。
-
避免线性激活函数在隐藏层:因为多层线性函数仍然是线性函数,无法学习复杂的模式。