在上一个练习中,您已经看到 隐藏层并不足以表示非线性。 对线性运算执行的线性运算仍然是线性运算。
如何配置神经网络来学习 值之间的非线性关系?我们需要通过某种方式 将数学运算转化为模型。
如果您觉得这听起来有点熟悉,这是因为 非线性数学运算应用于线性模型的输出 在逻辑回归 模块中,我们调整了一个线性回归模型, 设置为 1(表示概率),具体方法是将模型的输出 S 型函数。
我们可以将同样的原理应用到我们的神经网络中。我们来回顾一下 (但这次是在练习 2 之前, 输出每个节点的值,我们首先应用 S 型函数:
可以点击 >| 按钮,逐步完成每个节点的计算 (位于播放按钮的右侧)。查看已执行的数学运算 在图表下方的计算面板中计算每个节点的值。 请注意,每个节点的输出现在都是线性 前一层节点的组合,其输出值 都压缩在 0 到 1 之间。
在此例中,S 型函数充当 激活函数 对神经网络来说,是神经元输出值的非线性转换 在将值作为输入传递到下一个 是神经网络的一层。
现在,我们已经添加了激活函数,添加层将产生更大的影响。 利用非线性函数堆叠非线性函数,我们可以 输入与预测输出之间的关系,简而言之,每一层 通过对原始数据进行有效学习, 输入。如果您想更直观地了解其工作原理, 请参阅 Chris Olah 的精彩博文。
常用激活函数
三种通常用作激活函数的数学函数是 S 型函数、双曲正切函数和 ReLU 函数。
S 型函数(如上文所述)对输入执行以下转换 $x$,生成 0 到 1 之间的输出值:
\[F(x)=\frac{1} {1+e^{-x}}\]
此函数图示如下:
![图 4. S 型函数的曲线图:一条 S 形曲线,
当 x 接近于负值时,渐近地靠近 x 轴
无穷大,当 x 接近无穷大时为 1。](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/sigmoid.png?authuser=8&hl=ro)
正切函数是“双曲正切”的缩写,用于将输入 $x$ 转换为 生成介于 -1 到 1 之间的输出值:
\[F(x)=tanh(x)\]
此函数图示如下:
![图 5. 正切函数曲线图:
S 型曲线的 S 形曲线更陡。
当 x 接近负无穷大时,接近 -1;当 x 接近于 1 时,
无穷大。](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/tanh.png?authuser=8&hl=ro)
修正线性单元激活函数(或 ReLU, short)使用以下算法转换输出:
- 如果输入值 $x$ 小于 0,则返回 0。
- 如果输入值 $x$ 大于或等于 0,则返回输入值。
可以使用 max() 函数以数学方式表示 ReLU:
此函数图示如下:
![图 6. ReLU 函数的图形:一条水平线
沿 x 轴从负无穷大变为一条对角线
从 0 到无穷大,斜率为 1 (y=x) 向上和向右移动。](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/relu.png?authuser=8&hl=ro)
相较于平滑函数,ReLU 作为激活函数的效果通常要好一点 这类函数类似于 S 型函数或正切函数,因为它不太容易受到 梯度消失问题 神经网络训练期间生成的输出结果。ReLU 也比以往更加容易 比这些函数更复杂。
其他激活函数
实际上,任何数学函数都可以充当激活函数。 假设 \(\sigma\) 表示我们的激活函数。 网络中节点的值由下列公式给出 公式:
Keras 对许多容器的开箱即用型支持 激活函数。 尽管如此,我们仍然建议从 ReLU 开始。
摘要
以下视频将回顾您目前为止学到的所有知识 如何构建神经网络:
现在,我们的模型包含人们通常会 它们指的是神经网络:
- 一组节点,类似于神经元,并且按层组织。
- 一组权重,用于表示每个神经网络之间的连接 层及其下面的层。下面的层可能是 另一个神经网络层或其他类型的层。
- 一组偏差,每个节点一个偏差。
- 一种激活函数,用于对层中每个节点的输出进行转换。 不同的层可能具有不同的激活函数。
警告:神经网络并不一定总比 特征组合,但神经网络确实提供了一种灵活的替代方案, 在很多情况下效果都非常好