您应该还记得,在特征组合单元中,以下分类问题是非线性的:
图 1. 非线性分类问题。
“非线性”表示您无法形式形式的模型准确预测标签 \(b + w_1x_1 + w_2x_2\) 换句话说,“决策面”不是直线。之前,我们了解了对特征问题进行建模的一种特征组合。
现在,请考虑以下数据集:
图 2. 一种更难的非线性分类问题。
图 2 所示的数据集无法通过线性模型求解。
要了解神经网络如何帮助处理非线性问题,我们首先以图表的形式表示线性模型:
图 3. 作为图表显示的线性模型。
每个蓝色圆圈代表一个输入特征,绿色圆圈表示输入的加权总和。
如何更改此模型以提高其处理非线性问题的能力?
隐藏层
在以下图表表示的模型中,我们添加了一个表示中间值的“隐藏层”。隐藏层中的每个黄色节点都是蓝色输入节点值的加权和。输出是黄色节点的加权和。
图 4.两层模型的图表。
此模型是线性的吗?是的,其输出仍是其输入的线性组合。
在下图所示的模型中,我们添加了另一个加权权重隐藏层。
图 5. 三层模型的图表。
此模型仍是线性的吗?可以。当您将输出表示为输入函数并简化时,您只会得到另一个输入的加权和。这种求和不会有效地为图 2 中的非线性问题建模。
激活函数
为了对非线性问题进行建模,我们可以直接引入非线性规律。我们可以通过一个非线性函数来传递每个隐藏层节点。
在下图所示的模型中,隐藏层 1 中每个节点的值由非线性函数转换,然后传递到下一个层的加权和。这种非线性函数称为激活函数。
图 6. 包含激活函数的三层模型的图表。
现在,我们已经添加了激活函数,添加层的影响更大了。 通过在非线性上堆叠非线性,我们可以在输入与预测输出之间建立非常复杂的关系。简而言之,每一层实际上都是在原始输入的基础上学习更复杂的更高级别的函数。如果您想更直观地了解这一机制的工作原理,请参阅 Chris Olah 的精彩博文。
常见的激活函数
以下 S 型激活函数将加权和转换为 0 到 1 之间的值。
以下是图表:
图 7. S 型激活函数。
下面的修正线性单元激活函数(简称 ReLU)通常比 S 型函数等平滑函数效果更好,而且其计算也显著得多。
ReLU 的优势在于基于经验发现,可能由 ReLU 驱动,具有更实用的响应范围。S 型函数两侧的响应速度相对较快。
图 8. ReLU 激活函数。
事实上,任何数学函数都可以用作激活函数。假设 \(\sigma\) 表示我们的激活函数(Relu、S 型函数或其他函数)。因此,网络中的节点值由以下公式指定:
TensorFlow 为许多激活函数提供开箱即用型支持。您可以在 TensorFlow 的原始神经网络运算的封装容器列表中找到这些激活函数。即便如此,我们仍建议您先使用 ReLU。
总结
现在,我们的模型具备了人们通常所说的“神经网络”的所有标准组成部分:
- 一组节点,类似于神经元,按层组织。
- 一组权重,表示每个神经网络层与其下方的层之间的连接。下面的层可能是另一个神经网络层,也可能是其他类型的层。
- 一组偏差,每个节点一个偏差。
- 一个激活函数,用于转换层中每个节点的输出。 不同的层可以有不同的激活函数。
注意事项:神经网络不一定总是比特征组合更好,但神经网络确实提供了一种灵活的替代方案,在许多情况下都很合适。