65.9K
CodeProject 正在变化。 阅读更多。
Home

神经网络背后的数学:第一部分 - 罗森布拉特感知器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (33投票s)

2019年5月12日

CPOL

33分钟阅读

viewsIcon

64338

downloadIcon

632

一个亲自动手的指南,了解感知器的基本数学原理

目录

引言

许多文章介绍感知器时会展示定义它的基本数学公式,但并未提供太多关于其工作原理的解释。

当然,可以使用感知器而不真正理解其中涉及的基本数学,但难道不也是一件有趣的事情,看看你在学校学到的所有数学知识如何帮助你理解感知器,以及更广泛的神经网络吗?

本文的灵感也来源于一系列关于支持向量机的文章,解释了其中涉及的基本数学概念,并逐渐构建到更复杂的数学。因此,我写这篇文章以及配套代码的目的是:向您展示感知器中涉及的数学。如果时间允许,我将撰写关于卷积神经网络的文章。

当然,在解释数学时,问题在于:从哪里开始,在哪里停止解释?其中涉及一些相当基础的数学,例如,向量是什么?余弦是什么?等等。我将假设一些基本的数学知识,比如你对向量有一个概念,你知道几何学的基础等等。我的假设将是任意的,所以如果你觉得我在某些解释上太快了,请留言,我会尽量扩展该主题。

那么,让我们开始吧。

系列文章

  1. 神经网络背后的数学:第一部分 - 罗森布拉特感知器
  2. 神经网络背后的数学原理:第 2 部分 - ADALINE 感知器
  3. 神经网络背后的数学:第三部分 - 神经网络
  4. 神经网络背后的数学:第四部分 - 卷积神经网络

免责声明

本文关注的是感知器中涉及的数学,而不是用于说明这些数学概念的代码。虽然我无意写这样的文章,但永远不要说永远……

设定一些界限

感知器基本上会接收一些输入值,称为“特征”,并在以下公式中用值 \(x_1, x_2, ... x_n\) 表示,将其乘以一些称为“权重”的因子,用 \(w_1, w_2, ... w_n\) 表示,计算这些乘积的总和,并根据此总和的值输出另一个值 \(o\)

$o = f(w_1x_1 + w_2x_2 + ... + w_ix_i + ... + w_nx_n)$

感知器有几种类型,它们在总和如何产生输出方面有所不同,即上述公式中的函数 \(f()\)

在本文中,我们将基于 Rosenblatt 感知器。它是最早的感知器之一,如果不是第一个的话。在本文中,我将简单地使用“感知器”一词来指代 Rosenblatt 感知器。

我们将研究其中涉及的数学并讨论其局限性,从而为未来的文章奠定基础。

Rosenblatt 感知器的基本数学公式

$ f(x) = \begin{cases} 1 & \text{if } w_1x_1 + w_2x_2 + ... + w_ix_i + ... + w_nx_n > b\\ 0 & \text{otherwise} \end{cases} $

因此,感知器基本上做的是对输入值特征进行线性组合,将其与一个阈值 \(b\) 进行比较,如果超过阈值则返回 1,否则返回零

特征向量是描述我们要分类的对象的特征的集合。

换句话说,我们将对象分为两类:一组具有特征(以及特征向量)的对象,导致输出为 1,以及一组具有特征的对象,导致输出为 0。

如果您在互联网上搜索有关感知器的信息,您会发现替代定义,它们将公式定义为如下:

$ f(x) = \begin{cases} +1 & \text{if } w_1x_1 + w_2x_2 + ... + w_ix_i + ... + w_nx_n > b\\ -1 & \text{otherwise} \end{cases} $

我们将在后面看到这不会影响感知器的运作。

让我们深入研究一下

对输入值进行线性组合

还记得引言吗?在引言中,我们说感知器接收一些输入值 \([x_1, x_2, ..., x_i, ..., x_n]\)(也称为特征)、一些权重 \([w_1, w_2, ..., w_i, ..., w_n]\),将它们相乘,然后计算这些乘积的总和。

$w_1x_1 + w_2x_2 + ... + w_ix_i + ... + w_nx_n$

这是线性组合的定义:它是某些项乘以常数值的总和。在我们的例子中,项是特征,常数值是权重。

如果我们用变量 \(i\) 替换下标,那么我们可以将总和写成

$\sum_{i=1}^{n} w_ix_i$

这被称为Sigma 符号\(\sum\) 表示求和,下标 \(_{i=1}\) 和上标 \(^{n}\) 表示我们求和的范围,最后 \(w_ix_i\) 表示我们求和的“事物”。

此外,我们可以将所有 \(x_i\) 和所有 \(w_i\) 视为所谓的向量

$ \begin{aligned} \mathbf{x}&=[x_1, x_2, ..., x_i, ..., x_n]\\ \mathbf{w}&=[w_1, w_2, ..., w_i, ..., w_n] \end{aligned} $

在这里,\(n\) 表示向量的维度:它是向量中标量元素的数量。对于我们的讨论,它是用于描述我们要分类的对象的特征的数量。
在这种情况下,求和是所谓的向量点积

$\mathbf{w} \cdot \mathbf{x}$

关于符号:我们将简单的标量(因此是简单的数字)写成小写字母,将向量写成粗体字母。因此,在上面,\(x\)\(w\) 是向量,而 \(x_i\)\(w_i\) 是标量:它们是代表向量分量的简单数字。

哦,等等!你说什么?‘向量’?

好吧,我可能太快引入向量而没有解释它们。

向量定义

为了使事情更直观(这可能有助于但并不总是好事),我将从二维向量的图形表示开始。

上面坐标空间 \(\mathbb{R}^2\) 中的点可以用从原点到该点的向量表示。

$\mathbf{a} = (a_1, a_2), \text{ in }\mathbb{R}^2$

我们可以进一步将其扩展到三维坐标空间并推广到 n 维空间。

$\mathbf{a} = (a_1, a_2, ..., a_n), \text{ in }\mathbb{R}^n$

在文本中(来自维基百科)

(欧几里得)向量是一个具有大小和方向的几何对象。

向量的模

向量的大小,也称为其范数,由其分量平方和的平方根定义,并写为 \(\lvert\lvert{\mathbf{a}}\lvert\lvert\)
在二维空间中,该定义来自勾股定理。

$\lvert\lvert{\mathbf{a}}\lvert\lvert = \sqrt{(a_1)^2 + (x_2)^2}$

扩展到 n 维空间,我们讨论欧几里得范数。

$\lvert\lvert{\mathbf{a}}\lvert\lvert = \sqrt{a_1^2 + a_2^2 + ... + a_i^2 + ... + a_n^2} = \sqrt{\sum_{i=1}^{n} a_i^2}$

自己试试

向量的方向

二维向量的方向由其与正水平轴的角度定义。

$\theta =\tan^{-1}(\frac{a_2}{a_1})$

这在二维空间中效果很好,但无法扩展到多个维度:例如,在三维空间中,我们在哪个平面上测量角度?这就是方向余弦的发明原因:它是一个新向量,它计算原始向量与每个轴的余弦。

$(\cos(\alpha_1), \cos(\alpha_2), ..., \cos(\alpha_i), ..., \cos(\alpha_n))$

我们从几何学中知道,角度的余弦定义为

$\cos(\alpha) = \frac{\text{adjacent}}{\text{hypothenuse}}$

因此,方向余弦的定义变为

$(\frac{a_1}{\lvert\lvert{\mathbf{a}}\lvert\lvert}, \frac{a_2}{\lvert\lvert{\mathbf{a}}\lvert\lvert}, ..., \frac{a_i}{\lvert\lvert{\mathbf{a}}\lvert\lvert}, ..., \frac{a_n}{\lvert\lvert{\mathbf{a}}\lvert\lvert})$

这个方向余弦是一个长度为 1 的向量 \(\mathbf{v}\),其方向与原始向量相同。可以从向量大小的定义中简单地得出这一点。

$ \begin{aligned} \lvert\lvert{\mathbf{v}}\lvert\lvert&=\sqrt{(\frac{a_1}{\lvert\lvert{\mathbf{a}}\lvert\lvert})^2 + (\frac{a_2}{\lvert\lvert{\mathbf{a}}\lvert\lvert})^2 + ... + (\frac{a_i}{\lvert\lvert{\mathbf{a}}\lvert\lvert})^2 + ... + (\frac{a_n}{\lvert\lvert{\mathbf{a}}\lvert\lvert})^2}\\ &=\sqrt{\frac{(a_1)^2+(a_2)^2+...+(a_i)^2+...+(a_n)^2}{\lvert\lvert{\mathbf{a}}\lvert\lvert^2}}\\ &=\frac{\sqrt{(a_1)^2+(a_2)^2+...+(a_i)^2+...+(a_n)^2}}{\lvert\lvert{\mathbf{a}}\lvert\lvert}\\ &=\frac{\lvert\lvert{\mathbf{a}}\lvert\lvert}{\lvert\lvert{\mathbf{a}}\lvert\lvert}\\ &=1\\ \end{aligned} $

这个长度为 1 的向量也称为*单位向量*。

自己试试
向量方向交互式

向量运算

两个向量的加法和减法

假设我们有两个向量

$\begin{aligned} \mathbf{a} &= (a_1, a_2, ..., a_n), \text{ in }\mathbb{R}^n\\ \mathbf{b} &= (b_1, b_2, ..., b_n), \text{ in }\mathbb{R}^n \end{aligned}$

两个向量的和是向量通过加法组合原始向量的对应分量得到的向量。

$\begin{aligned} \mathbf{c} &= \mathbf{a} + \mathbf{b}\\ &= (a_1 + b_1, a_2 + b_2, ..., a_n + b_n) \end{aligned}$

自己试试

两个向量的差是向量通过减法组合原始向量的对应分量得到的向量。

$\begin{aligned} \mathbf{c} &= \mathbf{a} - \mathbf{b}\\ &= (a_1 - b_1, a_2 - b_2, ..., a_n - b_n) \end{aligned}$

自己试试
向量减法交互式

标量乘法

假设我们有一个向量 \(\mathbf{a}\) 和一个标量 \(\lambda\)(一个数字)。

$\begin{aligned} \mathbf{a} &= (a_1, a_2, ..., a_n), \text{ in }\mathbb{R}^n\\ \lambda \end{aligned}$

一个向量乘以一个标量是向量通过将原始向量的每个分量乘以该标量得到的向量。

$\begin{aligned} \mathbf{c} &= \lambda \mathbf{a}\\ &= (\lambda a_1, \lambda a_2, ..., \lambda a_n) \end{aligned}$

自己试试

点积

点积是取两个向量对应分量乘积之和得到的标量(实数)。

$\begin{aligned} \mathbf{c} &= \mathbf{a} \cdot \mathbf{b}\\ &= a_1 b_1 + a_2 b_2 + ... + a_n b_n\\ &= \sum_{i=1}^{n} a_ib_i \end{aligned}$$

几何上,这等于向量大小与它们之间夹角的余弦的乘积。

$\begin{aligned} \mathbf{c} &= \mathbf{a} \cdot \mathbf{b}\\ &= {\lvert\lvert{\mathbf{a}}\lvert\lvert}\text{ }{\lvert\lvert{\mathbf{b}}\lvert\lvert}\text{ }cos(\alpha)\\ \end{aligned}$

对此有几种证明,我将在此不再赘述。关于SVM的文章中有一个,而这篇关于点积的文章也包含一个非常容易理解的证明。

从最后一个定义,我们可以得出两个重要结论。

首先,如果两个向量的大小都不为零,则它们的点积为零,则这两个向量是垂直的。因为向量的大小不为零,所以点积只能在 \(cos(\alpha)\) 为零时为零。因此,当角度 \(\alpha\) 在向量之间为 90 或 -90 度时。因此,只有当两个向量垂直时。 (在下面的交互式示例中尝试一下!)

其次,如果其中一个向量的大小为 1,则点积等于第二个向量在该单位向量上的投影。(在下面的交互式示例中尝试一下!)这也可以很容易地看出。

$\begin{aligned} \text{if }{\lvert\lvert{a}\lvert\lvert} = 1\text{ then }\\ c &= a \cdot b\\ &= {\lvert\lvert{a}\lvert\lvert}\text{ }{\lvert\lvert{b}\lvert\lvert}\text{ }cos(\alpha)\\ &= {\lvert\lvert{b}\lvert\lvert}\text{ }cos(\alpha)\\ \end{aligned}$

自己试试

点积是可交换的

$\mathbf{a} \cdot \mathbf{b} = \mathbf{b} \cdot \mathbf{a}$

自己试试

点积是可分配的

$\mathbf{a} \cdot (\mathbf{b}+\mathbf{c}) = \mathbf{a} \cdot \mathbf{b} + \mathbf{a} \cdot \mathbf{c}$

自己试试

标量乘法属性

$(\lambda\mathbf{a}) \cdot \mathbf{b} = \mathbf{a} \cdot (\lambda\mathbf{b}) = \lambda(\mathbf{a} \cdot \mathbf{b})$

好了,现在您知道什么是向量了。让我们继续我们的旅程。

线性可分特征

那么,我们刚才说:特征向量和权重向量的点积等于点积。

感知器公式现在变成

$ f(x) = \begin{cases} 1 & \text{if } \mathbf{w} \cdot \mathbf{x} > b\\ 0 & \text{otherwise} \end{cases} $

还记得我们最初做了什么吗?我们对输入值 \([x_1, x_2, ..., x_i, ..., x_n]\) 进行了线性组合,得到了公式

$w_1x_1 + w_2x_2 + ... + w_ix_i + ... + w_nx_n > b$

你可能还记得你的数学课上的一个类似公式:超平面的方程。

$w_1x_1 + w_2x_2 + ... + w_ix_i + ... + w_nx_n = b$

或者,用点积符号表示

$\mathbf{w} \cdot \mathbf{x} = b$

所以,方程 \(\mathbf{w} \cdot \mathbf{x} > b\) 定义了超平面一侧的所有点,而 \(\mathbf{w} \cdot \mathbf{x} <= b\) 定义了超平面另一侧以及超平面本身上的所有点。这恰好是“线性可分”的定义。

因此,感知器允许我们将特征空间分成两个凸半空间。

超平面是什么?

让我们退后一步:这个超平面和凸半空间是什么东西?

一维的超平面:直线的方程

过原点的直线

不用管这个超平面的东西了。让我们回到二维空间,写下大多数人知道的直线方程。

$ax + by + c = 0$

让我们进一步简化,只考虑

$ax + by = 0$

现在,如果我们固定 \(a\)\(b\) 的值,并为各种 \(x\)\(y\) 解方程,然后绘制这些值,我们会发现结果点都在一条直线上。

如果我们考虑 \(a\)\(b\) 作为向量 \(\mathbf{l}\) 的分量,而 \(x\)\(y\) 作为向量 \(\mathbf{p}\) 的分量,那么上面就是点积。

$\begin{aligned} \mathbf{l} &= (a, b), \text{ in }\mathbb{R}^2\\ \mathbf{p} &= (x, y), \text{ in }\mathbb{R}^2\\ \end{aligned}$

那么

$\begin{aligned} ax + by &= 0\\ \mathbf{l} \cdot \mathbf{p} &= 0\\ \end{aligned}$

那么,为什么我们在二维中将点积设置为零似乎是过原点的直线呢?

还记得我们在讨论点积时得出的结论吗?如果两个大小不为零的向量的点积为零,那么这两个向量必须是垂直的。因此,如果我们固定向量 \(\mathbf{l}\) 的坐标,从而固定 \(a\)\(b\) 的值,那么上面的方程将解析为所有垂直于向量 \(\mathbf{l}\) 的向量,这等于穿过原点且垂直于向量 \(\mathbf{l}\) 的直线上所有点。

因此,向量 \(\mathbf{l}\) 确定了直线的方向:该向量垂直于直线的方向。

自己试试

距离原点一定距离的直线

上面,我们简化了方程,得到了过原点的直线方程。让我们再次考虑完整的方程。

$ax + by + c = 0$

稍微重新排列一下

$ax + by = -c$

并将 \(-c\) 替换为 \(d\)

$ax + by = d$

在这里,我们也可以考虑将其替换为向量的点积。

$\begin{aligned} \mathbf{l} &= (a, b), \text{ in }\mathbb{R}^2\\ \mathbf{p} &= (x, y), \text{ in }\mathbb{R}^2\\ \end{aligned}$

那么

$\begin{aligned} ax + by &= d\\ \mathbf{l} \cdot \mathbf{p} &= d\\ &= {\lvert\lvert{\mathbf{l}}\lvert\lvert}\text{ }{\lvert\lvert{\mathbf{p}}\lvert\lvert}\text{ }cos(\alpha) \end{aligned}$

我们可以通过将方程除以 \(\mathbf{l}\) 的长度来“归一化”此方程,从而得到 \(\mathbf{l}\) 方向上的单位向量 \(\mathbf{u}\) 与向量 \(\mathbf{p}\) 的点积。

$\begin{aligned} \frac{\mathbf{l} \cdot \mathbf{p}}{\lvert\lvert{\mathbf{l}}\lvert\lvert} &= \frac{d}{\lvert\lvert{\mathbf{l}}\lvert\lvert}\\ \mathbf{u} \cdot \mathbf{p} &= \frac{d}{\lvert\lvert{\mathbf{l}}\lvert\lvert}\\ &= {\lvert\lvert{\mathbf{u}}\lvert\lvert}\text{ }{\lvert\lvert{\mathbf{p}}\lvert\lvert}\text{ }cos(\alpha)\\ &= {\lvert\lvert{\mathbf{p}}\lvert\lvert}\text{ }cos(\alpha) \end{aligned}$

正如在讨论点积时所看到的,这等于向量 \(\mathbf{p}\)\(\mathbf{l}\) 方向上的单位向量上的投影大小。因此,上面的方程给出了所有在 \(\mathbf{l}\) 方向上的单位向量上的投影等于 \(d/{\lvert\lvert{\mathbf{l}}\lvert\lvert}\) 的向量。
这等于所有到直线上点的向量,该直线垂直于 \(\mathbf{l}\),并且距离原点 \(d/{\lvert\lvert{\mathbf{l}}\lvert\lvert}\)

自己试试

扩展到三维空间:平面的方程

$ax + by + cz= 0$

再次,通过向量。
如果我们考虑 \(a\)\(b\)\(c\) 作为向量 \(\mathbf{m}\) 的分量,而 \(x\)\(y\)\(z\) 作为向量 \(\mathbf{p}\) 的分量,那么上面就是点积。

$\begin{aligned} \mathbf{m} &= (a, b, c), \text{ in }\mathbb{R}^3\\ \mathbf{p} &= (x, y, z), \text{ in }\mathbb{R}^3\\ \end{aligned}$

那么

$\begin{aligned} ax + by + cz &= 0\\ \mathbf{m} \cdot \mathbf{p} &= 0\\ \end{aligned}$

同样,如果两个大小不为零的向量的点积为零,那么这两个向量必须是垂直的。因此,如果我们固定向量 \(\mathbf{m}\) 的坐标,从而固定 \(a\)\(b\)\(c\) 的值,那么上面的方程将解析为所有垂直于向量 \(\mathbf{m}\) 的向量,这等于穿过原点且垂直于向量 \(\mathbf{m}\) 的平面内的所有点。

可以对方程进行类似的思考。

$ax + by + cz= d$

在这里,我们也可以考虑将其替换为向量的点积。

$\begin{aligned} \mathbf{m} &= (a, b, c), \text{ in }\mathbb{R}^3\\ \mathbf{p} &= (x, y, z), \text{ in }\mathbb{R}^3\\ \end{aligned}$
$\begin{aligned} ax + by + cz &= d\\ \mathbf{m} \cdot \mathbf{p} &= d\\ &= {\lvert\lvert{\mathbf{m}}\lvert\lvert}\text{ }{\lvert\lvert{\mathbf{p}}\lvert\lvert}\text{ }cos(\alpha) \end{aligned}$

通过将 \(\mathbf{m}\) 的长度除以 \(\mathbf{m}\) 来进行归一化,其中 \(\mathbf{u}\)\(\mathbf{m}\) 方向上的单位向量。

$\begin{aligned} \frac{\mathbf{m} \cdot \mathbf{p}}{\lvert\lvert{\mathbf{m}}\lvert\lvert} &= \frac{d}{\lvert\lvert{\mathbf{m}}\lvert\lvert}\\ \mathbf{u} \cdot \mathbf{p} &= \frac{d}{\lvert\lvert{\mathbf{m}}\lvert\lvert}\\ &= {\lvert\lvert{\mathbf{u}}\lvert\lvert}\text{ }{\lvert\lvert{\mathbf{p}}\lvert\lvert}\text{ }cos(\alpha)\\ &= {\lvert\lvert{\mathbf{p}}\lvert\lvert}\text{ }cos(\alpha) \end{aligned}$

正如在讨论点积时所看到的,这等于向量 \(\mathbf{p}\)\(\mathbf{m}\) 方向上的单位向量上的投影大小。因此,上面的方程给出了所有在 \(\mathbf{m}\) 方向上的单位向量上的投影等于 \(d/\lvert\lvert{\mathbf{m}}\lvert\lvert\) 的向量。
这等于所有到平面上的点的向量,该平面垂直于 \(\mathbf{m}\),并且距离原点 \(d/\lvert\lvert{\mathbf{m}}\lvert\lvert\)

扩展到 n 维空间:超平面的方程

在三维空间中,我们将平面方程定义为

$ax + by + cz= d$

如果我们使用我们习惯于讨论感知器规则的符号,我们可以写

$w_1x_1 + w_2x_2 + w_3x_3= b$

这可能有点令人困惑,但最后一个方程中的 \(b\) 与第一个方程中的 \(b\) 无关。

如果我们将它扩展到多维空间,我们会得到

$\begin{aligned} w_1x_1 + w_2x_2 + w_ix_i + ... + w_nx_n &= b\\ &= \sum_{i=1}^{n} w_ix_i \end{aligned}$

在多维空间中,我们谈论超平面:就像平面是三维空间中的直线一样,超平面是多维空间中的平面。

线性可分是什么?

好的,让我们回到感知器的定义。

$ f(x) = \begin{cases} 1 & \text{if } \mathbf{w} \cdot \mathbf{x} > b\\ 0 & \text{otherwise} \end{cases} $

因此,如果我们点积特征向量 \(\mathbf{x}\) 和权重向量 \(\mathbf{w}\) 大于 \(b\),我们就输出 1,\(\text{否则}\) 为零。但否则是什么意思?
嗯,否则

$\mathbf{w} \cdot \mathbf{x} <= b$

啊,等于或小于 \(b\)。我们知道等于的部分,那是我们上面的超平面。

$\mathbf{w} \cdot \mathbf{x} = b$

那么剩下的就是小于的部分。

$\mathbf{w} \cdot \mathbf{x} < b$

恰好不等式方程定义了两个所谓的半空间:超平面上方的一个半空间,以及超平面下方的一个半空间。

线性可分与半空间

让我们再次以超平面方程为例。

$\begin{aligned} w_1x_1 + w_2x_2 + w_ix_i + ... + w_nx_n &= b\\ \sum_{i=1}^{n} w_ix_i &= b\\ \mathbf{w} \cdot \mathbf{x} &= b \end{aligned}$

这个超平面将 \(\mathbb{R}^n\) 空间分成两个凸点集,因此称为半空间。

一个半空间由方程表示。

$\mathbf{w} \cdot \mathbf{x} > b$

另一个由

$\mathbf{w} \cdot \mathbf{x} < b$

让我们分析第一个方程。首先,将其转换为向量表示。

$\begin{aligned} \mathbf{w} \cdot \mathbf{x} &> b\\ {\lvert\lvert{\mathbf{w}}\lvert\lvert}\text{ }{\lvert\lvert{\mathbf{x}}\lvert\lvert}\text{ }cos(\alpha) &> b \end{aligned}$

归一化

${\lvert\lvert{\mathbf{x}}\lvert\lvert}\text{ }cos(\alpha) > \frac{b}{\lvert\lvert{\mathbf{w}}\lvert\lvert}$

因此,几何解释是所有到点的向量的集合,这些向量在权重向量 \(\mathbf{w}\) 方向上的单位向量上的投影大于某个常数值 \(\frac{b}{\lvert\lvert{\mathbf{w}}\lvert\lvert}\)

对于方程 \(\mathbf{w} \cdot \mathbf{x} < b\),可以进行类似的推理:它产生所有到点的向量的集合,这些向量在权重向量 \(w\) 方向上的单位向量上的投影小于某个常数值 \(\frac{b}{\lvert\lvert{\mathbf{w}}\lvert\lvert}\)

我们可以将这两个集合想象成位于超平面一侧或另一侧的所有点。

这些半空间也是凸的。

凸集的定义如下(来自维基百科):

在欧几里得空间中,凸区域是指对于该区域内的任意两个点,连接这两点的直线段上的所有点也都位于该区域内的区域。

在数学上,这可以用更严谨的方式描述为:

如果对于 \(\mathbf{S}\) 中的集合 \(\mathbf{C}\) 中的所有点 \(A\)\(B\),以及区间 \((0, 1)\) 中的所有 \(\lambda\),点 \((1 − {\lambda})A + {\lambda}B\) 也属于 \(C\),则称 \(\mathbf{C}\) 是凸的。

方程 \((1 − {\lambda})A + {\lambda}B\) 实际上是点 \(A\)\(B\) 之间的线段的方程。我们可以从以下几点看出:

让我们定义多维空间中的两个点。

$\begin{aligned} A &= (a_1, a_2, ..., a_i, ..., a_n), \text{ in }\mathbb{R}^n\\ B &= (b_1, b_2, ..., b_i, ..., b_n), \text{ in }\mathbb{R}^n\\ \end{aligned}$

那么,从点 \(A\) 到点 \(B\) 的线段可以定义为:

$r = \vec{OA} + \lambda \vec{AB}$

其中 \(\vec{OA}\) 是从原点 \(O\) 到点 \(A\) 的向量,而 \(\vec{AB}\) 是从点 \(A\) 到点 \(B\) 的向量。 \(\lambda\) 在区间 (0, 1) 中。
这只是向量 \(\mathbf{a}\) 加上从点 \(A\) 到点 \(B\) 的向量的一部分。

自己试试

我们知道,从上面关于向量数学的部分,从 \(A\)\(B\) 的向量等于 \(\mathbf{b}-\mathbf{a}\),因此我们可以写成:

$\begin{aligned} r &= \vec{OA} + \lambda \vec{AB}\\ &= \mathbf{a} + {\lambda}(\mathbf{b}-\mathbf{a}) \\ &= \mathbf{a} + {\lambda}\mathbf{b}-{\lambda}\mathbf{a} \\ &= (1-{\lambda})\mathbf{a} + {\lambda}\mathbf{b} \\ \end{aligned}$

现在我们可以证明半空间由超平面分隔,它们是凸的。

让我们考虑上半平面。对于该半空间中的任意两个向量 \(\mathbf{x}\)\(\mathbf{y}\),我们有:

$\begin{aligned} \mathbf{w} \cdot \mathbf{x} > d\\ \mathbf{w} \cdot \mathbf{y} > d \end{aligned}$

如果半空间是凸的,那么方程产生的每个点

$(1-{\lambda})\mathbf{x} + {\lambda}\mathbf{y}$

必须属于半空间,这等于说,端点 \(X\)\(Y\) 之间的线段上的每个点都必须属于半空间。代入半空间方程得到:

$\mathbf{w} \cdot ((1-{\lambda})\mathbf{x} + {\lambda}\mathbf{y}) > d$

然后,根据点积的分配律和标量乘法属性,我们可以重新排列得到:

$\begin{aligned} \mathbf{w} \cdot (1-{\lambda})\mathbf{x} + \mathbf{w}\cdot {\lambda}\mathbf{y} &> d\\ \mathbf{w} \cdot (1-{\lambda})\mathbf{x} + \mathbf{w} \cdot {\lambda}\mathbf{y} - d &> 0\\ \mathbf{w} \cdot (1-{\lambda})\mathbf{x} + \mathbf{w} \cdot {\lambda}\mathbf{y} &> d\\ \end{aligned}$

由于我们现在知道 \(0 < {\lambda} < 1\)\(\mathbf{w} \cdot \mathbf{x} > d\)\(\mathbf{w} \cdot \mathbf{y} > d\),因此上面的不等式也必须成立。因此,我们证明了半空间确实是凸的。

自己试试

如我刚才所说:线性可分……

因此,回到我们对感知器的公式。

$ f(x) = \begin{cases} 1 & \text{if } \mathbf{w} \cdot \mathbf{x} > b\\ 0 & \text{otherwise} \end{cases} $

我们现在可以看到这个公式如何将我们的特征空间分成两个半空间。注意这里的一词:它不仅仅是将特征空间分成两个子空间,而是分成两个凸子空间。

这意味着我们不能将特征点分成非凸类。在二维空间中,我们不能像这样分离特征。

如果您已经阅读过关于感知器的信息,您可能已经读到过它无法解决 XOR 问题:它无法根据 XOR 函数分离输入。这正是由于上述原因:结果不是凸的,因此不是线性可分的。

如果您在互联网上搜索 Rosenblatt 感知器的公式,您也会发现其中一些不再包含 \(b\) 因子。它去哪儿了?对加法分量的某些重新排列使其进入点积。

$\begin{aligned} \mathbf{w} \cdot \mathbf{x} &> b\\ w_1x_1 + w_2x_2 + w_ix_i + ... + w_nx_n &> b\\ w_1x_1 + w_2x_2 + w_ix_i + ... + w_nx_n - b &> 0\\ w_1x_1 + w_2x_2 + w_ix_i + ... + w_nx_n + (-b)1 &> 0\\ \end{aligned}$

现在,我们可以定义 \(b' = -b\)

$w_1x_1 + w_2x_2 + w_ix_i + ... + w_nx_n + (b')1 > 0$

最后,我们可以通过定义 \(x_0 = 1\) 和将 \(b'\) 放入权重向量中来定义 \(w_0 = b'\),从而将因子 1 放入特征向量中。这使我们可以写成:

$w_0x_0 + w_1x_1 + w_2x_2 + w_ix_i + ... + w_nx_n > 0$

并且通过将 \(w_0\)\(x_0\) 放入向量中。

$ \begin{aligned} \mathbf{x'}&=[x_0, x_1, x_2, ..., x_i, ..., x_n]\\ \mathbf{w'}&=[w_0, w_1, w_2, ..., w_i, ..., w_n] \end{aligned} $

我们现在可以写。

$ f(x) = \begin{cases} 1 & \text{if } \mathbf{w'} \cdot \mathbf{x'} > 0\\ 0 & \text{otherwise} \end{cases} $

因此,我们得到一个函数,它通过将特征与权重相乘来将我们的特征分为两类,如果结果为正,则将其标记为“1”,否则标记为“0”。

在本文的后续部分,我将省略向量的重音符号,只写 \(\mathbf{w}\)\(\mathbf{x}\),它们包含 \(w_0\)\(x_0\)

自己试试

这种否则标记为“0”是 Heaviside 阶跃函数的定义。

Heaviside 阶跃函数

Heaviside 阶跃函数也称为单位阶跃函数,其定义为:

$ H(n) = \begin{cases} 1 \text{, } n >= 0\\ 0 \text{, } n < 0\\ \end{cases} $

如果您在互联网上搜索 Heaviside 阶跃函数的定义,您可能会发现替代定义,它们与上述定义不同,在于如何定义函数在 \(x=0\) 时的结果。

Heaviside 阶跃函数是不连续的。如果函数 \(f(x)\) 是连续的,则 \(x\) 的微小变化会导致函数结果的微小变化。Heaviside 阶跃函数显然不是这种情况:当 \(x\) 为 0 并移动到负侧时,函数结果突然从 1 变为 0。

我不会详细讨论这个函数不连续的问题,因为它与我们当前的讨论无关。在下一篇文章中,当我们讨论 ADALINE 感知器时,我将回到这个问题。

学习权重

我们已经详细介绍了感知器如何使用权重向量将特征分类为两个线性可分类。但最大的问题是:如果我们有一些已知分类结果的特征样本,我们如何找到权重,以便我们也能对未知特征向量的值进行分类?或者,我们如何找到分离特征的超平面?

这就是感知器学习规则的应用。

感知器学习规则

首先,我们将误差 \(e\) 定义为对于输入向量 \(\mathbf{x}\) 和权重向量 \(\mathbf{w}\),期望输出 \(d\) 和有效输出 \(o\) 之间的差值。

$e = d-o$

然后我们可以将学习规则写成:

$\mathbf{w}_{i+1} = \mathbf{w}_{i} + e\mathbf{x}$

其中 \(\mathbf{w}_{i+1}\) 是新的权重向量,\(\mathbf{w}_{i}\) 是当前的权重向量,\(e\) 是当前误差。我们将权重向量初始化为一些随机值,因此 \(\mathbf{w}_0\) 具有一些随机值。您会发现学习规则有类似的定义,其中也使用了学习率因子。正如我们稍后证明学习规则的收敛性时将展示的那样,该因子实际上并非必需。因此,我们将其省略。

为什么这会起作用?首先,让我们分析误差函数。

$e = d-o$

如前所述,在这个公式中,\(d\)\(o\) 分别是感知器的期望输出和有效输出。我们从感知器的定义中知道,它的输出可以取两个值:1 或 0。因此,误差函数可以取以下值:

预测 期望 (d) 有效 (o) e
正确 1 1 0
正确 0 0 0
错误 0 1 -1
错误 1 0 1

从上面的表格可以看出:

  1. 只有当感知器做出的预测错误时,我们才会更改权重向量 \(\mathbf{w}\),因为如果预测正确,误差为零。
  2. 如果我们错误地预测某个特征位于超平面之上,则误差为 -1,我们将特征向量从权重向量中减去。
  3. 如果我们错误地预测某个特征位于超平面之下,则误差为 1,我们将特征向量加到权重向量中。

让我们看看几何上的含义。以下讨论提供了一个关于学习算法作用的直观感受,但绝不是数学严谨的讨论。我们先忽略向量的阈值因子:也就是说,我们忽略 \(w_0\)\(x_0\)

因此,我们剩下决定分离超平面方向的因子。现在让我们绘制一些示例并看看会发生什么。

情况 1:期望结果为 0,但预测为 1

误差 \(e\) 为 -1,因此我们需要从当前权重向量中减去新的特征向量以获得新的权重向量。

$\mathbf{w}_{i+1} = \mathbf{w}_{i} - \mathbf{x}$

请记住,权重向量实际上垂直于超平面。将错误分类的向量从权重向量中减去的结果是分离超平面朝着错误分类点的方向旋转。换句话说,我们旋转分离超平面,以便我们新学习的点更接近它所属的半空间。

情况 2:期望结果为 1,但预测为 0

误差 \(e\) 为 1,因此我们需要将新的特征向量加到当前权重向量中以获得新的权重向量。

$\mathbf{w}_{i+1} = \mathbf{w}_{i} - \mathbf{x}$

将向量加到权重向量的结果是分离超平面朝着错误分类点的方向旋转。换句话说,我们旋转分离超平面,以便我们新学习的点更接近它所属的半空间。

自己试试

学习规则的收敛性

以上提供了学习规则为何有效的直观感受,但并非数学证明。可以从数学上证明,如果给定的样本是线性可分的,则感知器规则将在有限步内收敛到解。

请再次阅读这句话。首先,我们谈论有限步数,但我们事先不知道这个数字是多少。其次,这仅在给定的样本是线性可分的情况下才成立。因此,如果它们不是线性可分的,我们可以继续学习,并且不知道何时停止!

我在这里不会重复证明,因为它只是重复了一些您可以在网上找到的信息。其次,Rosenblatt 感知器存在一些问题,使其仅具有历史意义。如果您有兴趣,请参阅参考部分,其中有一些非常易于理解的收敛证明。当然,如果有人想在这里看到它,请随时发表评论。

总结

Rosenblatt 感知器的基本公式

基本公式通过将特征加权到两个单独的类别来对特征进行分类。
我们已经看到,这样做的方式是将特征向量 \(\mathbf{x}\) 和权重向量 \(\mathbf{w}\) 的点积与某个固定值 \(b\) 进行比较。如果点积大于此固定值,则将其归入一个类别,分配标签 1,否则将其归入另一个类别,分配标签 0。

$ f(x) = \begin{cases} 1 & \text{if } (\mathbf{w} \cdot \mathbf{x} - b) > 0\\ 0 & \text{otherwise} \end{cases} $

Rosenblatt 感知器的行为

因为感知器的公式基本上是一个超平面,所以我们只能将事物分类到两个线性可分的类别中。第一个类别包含超平面上方的物体,第二个类别包含超平面下方的物体。

形式化一些内容:几个定义

我们在这里涵盖了很多内容,但没有使用很多关于感知器、神经网络和机器学习的通用术语。数学本身已经有足够的术语了,我不想再用更多的定义来打扰您了。

但是,一旦我们开始深入研究,我们将开始发现我们工作方式中的一些模式/结构。届时,拥有一些允许我们定义此模式步骤的定义将很有趣。

因此,这里有一些定义。

前馈单层神经网络

我们现在拥有的是一个前馈单层神经网络

神经网络

神经网络是由相互连接的节点组成的。因此,某些节点的输出作为其他节点的输入:我们有一个节点网络。该网络中的节点模拟我们大脑中神经元的工作方式,因此我们称之为神经网络。在本文中,我们的神经网络有一个节点:感知器。

单层

在神经网络中,我们可以通过使用感知器的输出来作为其他感知器的输入来定义多个层。如果我们为此绘制图表,我们可以将感知器视为组织在层中,其中一层输出来作为下一层的输入。


在本文中,我们还有一个单层

前馈

这种层的堆叠以及前一层输出作为下一层输入的结构导致了前馈网络。没有从上层到下层的反馈。没有循环。对于我们的单层感知器,也没有循环,因此我们有一个前馈网络。

积分函数

我们使用权重向量w和特征向量x进行的计算称为积分函数。在 Rosenblatt 感知器中,积分函数是点积。

偏置

我们用来比较积分函数结果的偏移量 b 称为偏置

激活函数(传递函数)

我们从感知器获得的输出,基于积分函数的计算,由激活函数决定。Rosenblatt 感知器的激活函数是 Heaviside 阶跃函数。

监督学习

监督学习是一种学习类型,其中我们将样本输入到我们的算法中,并告诉它我们期望的结果。通过这样做,神经网络学会了如何对示例进行分类。在提供了足够多的样本后,我们期望能够提供新的数据,它将自动正确分类。

与之相反的是无监督学习,其中我们提供一些样本但没有期望的结果。然后,算法能够根据样本的某些共同属性来正确分类这些示例。

还有其他类型的学习,如强化学习,我们在这里不涉及。

在线学习

Rosenblatt 感知器的学习算法是在线学习算法的一个例子:每次给定新样本时,都会更新权重向量。

与之相反的是批处理学习,其中我们仅在将所有样本输入学习算法后才更新权重向量。这在这里可能有点抽象,但我们将在以后的文章中对此进行澄清。

Rosenblatt 感知器有什么问题?

Rosenblatt 感知器的主要问题是其学习算法。虽然它有效,但仅适用于线性可分数据。如果我们要分类的数据不是线性可分的,那么我们不知道何时停止学习,也不知道找到的超平面是否最小化了错误分类的数据。

另外,假设我们有一些线性可分的数据。有几条线可以分离这些数据。

我们希望找到最适合样本的超平面。也就是说,我们希望找到一条类似的线。

 

当然,存在数学工具可以让我们找到这个超平面。它们基本上都定义了一种误差函数,然后试图最小化该误差。误差函数通常定义为期望输出和有效输出的函数,就像我们上面做的那样。最小化是通过计算该误差函数的导数来完成的。而这正是 Rosenblatt 感知器的问题所在。由于输出由 Heaviside 阶跃函数定义,而该函数不连续,因此没有导数,所以我们无法获得数学上严格的学习方法。

如果上面的内容进展有点快,请不要惊慌。在下一篇关于 ADALINE 感知器的文章中,我们将深入探讨误差函数和导数。

参考文献

JavaScript 库在“亲自动手”页面中使用

对于 SVG 插图,我使用了著名的D3.js库。
对于数据绑定,使用了Knockout.js
使用MathJax显示数学公式。

向量数学

写这篇文章的灵感和向量数学的良好介绍

关于向量和向量数学基础的一些维基百科文章

关于点积也等于向量长度与向量夹角余弦乘积的一个易于理解的证明。

超平面与线性可分

关于超平面方程的两个 Math StackExchange 问答。

凸集

感知器

感知器学习

学习算法的收敛性

历史

  • 2019年5月12日:版本 1.0:初始发布
  • 2019年5月22日:版本 1.1:为“亲自动手”链接添加了源代码
© . All rights reserved.