Python:神经网络架构 (六十六)

神经网络架构

现在可以将这些构建基石组合到一起了,并构建出色的神经网络!(或者你愿意,也可以叫做多层级感知器。)

下面将演示如何将两个感知器组合成第三个更复杂的感知器。

现在我们来讲解一下如何创建这类非线性模型,方法很简单,我们可以把两个线性模型组合成一个非线性模型,简而言之,就是把两个模块叠加到一起,形成右侧的这个模型模型,如下图:

file

如何用数学方法实现这一点?

每个线性模型都占据了整个概率空间,也就是说,对于每个点,它都会给出一个是蓝点的概率,例如 这个点是在蓝色区域,它是蓝点的概率是 0.7,这个点在第二个概率空间里也是位于蓝色区域,它是蓝点的概率是 0.8,现在的问题是,如何将两者结合到一起?

把两个数字结合到一起最简单的方法是将二者相加,因此 0.8 + 0.7 = 1.5,但是 结果看起来不像是概率,因为它大于 1,概率必须在 0 到 1 之间 那该怎么办?如何将这个大于 1 的数转换成 0 到 1 之间的数?

我们之前遇到过这种情形 有一个很实用的工具,可以帮助我们将所有数转换为 0 到 1 之间的数,它就是 sigmoid 函数,我们将使用 sigmoid 函数,我们将 1.5 输入 sigmoid 函数,得到的值为 0.82,这也是该点在合并的概率空间中为蓝点的概率,于是我们得到了平面内的每个点的概率函数,这也是我们合并两个模型的过程,我们分别计算这两个模型所得到的概率,然后将它们相加并调用 sigmoid 函数。

file

如果对求和过程进行加权呢?

如果我们希望上面的模型,对最终概率的影响比下面的模型大 该怎么办?就像这样 结果模型看起来更像顶部的模型,我们可以添加权重,例如 可以说“我要用第一个模型的 7 倍加上第二个模型”,实际上 我可以随意添加权重,例如 可以说 “第一个模型的 7 倍加上第二个模型的 5 倍”,计算结果模型的方法是,将第一个模型得到的概率乘以 7,然后将第二个模型得到的概率乘以 5 也可以加上偏差,例如偏差是 -6,然后加到整个等式上,结果变成 7 乘以这个加上 5 乘以这个减去 6,结果是 2.9,然后输入到 s 函数中 得到的结果是 0.95,和之前的几乎一样 对吧?

file

之前 我们有一条直线,它是输入值乘以权重加上偏差的线性组合,现在的模型是两个之前的模型乘以权重,再加上某个偏差的线性组合,所以几乎是完全一样的,就像右侧的曲线模型,两个之前的线性模型的线性组合,甚至可以看成两个模型之间的一条曲线,这并不是巧合,这就是构建神经网络的核心,当然,我们也可以将其理解为,对现有的线性模型进行线性组合 得到更复杂的新模型,我们就是这样构建神经网络的。

多层级

并非所有神经网络都看起像上面的那样。可能会复杂的多!尤其是,我们可以执行以下操作:

  • 向输入、隐藏和输出层添加更多节点。
  • 添加更多层级。

我们将在下面看看这些变化的效果。
file

神经网络层级结构,可以分为 输入层,隐藏层,输出层。

多类别分类

现在我们详细讲解下如果神经网络需要对超过一个输出的数据进行建模,我们该如何操作。

file

为者常成,行者常至