构建简单的AI .NET库:超越感知器

在本系列的前一篇文章中,创建了一个作为二元线性分类器的感知器。本文将继续讨论感知器,以创建更复杂的布局来解决更复杂的问题。

虽然拥有代码本身可能不是主要目标,但理解这些算法是至关重要的。希望这些内容对某人某天有所帮助。

更多感知器示例

如前所述,感知器是人工神经网络(ANN)中最简单的处理元素,但它仍然是一个强大的算法,尽管它非常有限。记住,它主要用作二元线性分类器。

那么,对于其他复杂的分类问题呢?对于二元但非线性的分类呢?将通过几个示例来看看如何开发更复杂的感知器布局。

为了确保在同一页面上,让验证一些定义:

  • 二元分类器:输出只有2个可能的答案、分类或组。然而,分类可以是线性的或非线性的。
  • 线性分类器:如果输入是线性分隔的,可以画一条直线来分隔两组。
  • 非线性分类器:如果分类不能通过一条直线实现:
  • 问题维度:输入矩阵(向量)可以被视为正在优化的问题的特征,对于文章3中的最后一个示例,有2个输入:一个是X,另一个是Y,它们是每个点的坐标。另一种看待输入的方式是考虑输入的数量作为问题的维度。所以4D问题意味着它有4个不同的特征(AI可以解决人类大脑无法可视化的更高维度的问题)。

为了更好地理解感知器及其局限性,将检查它在优化二元函数中的使用,如NOT、OR、AND和XOR。

这是一个一维问题。让这样设计感知器:

h(x) = W0 + W1 * X1 Y = StepFunction(h(x))

由于输出是0或1,步进激活函数是一个不错的选择。然后,根据NOT真值表,当X为0时,输出Y为1,所以h(x)应该大于等于0。

h(x) = W0 + W1 * X1 >= 0 当 X=0 W0 >= 0 对于 X=0 让选择 W0 = 1 h(x) = 1 + W1 * X1

现在,Y的第二个可能值是0,对于X=1:

h(x) < 0 对于 X=1 1 + W1 * X1 < 0 对于 X=1 1 + W1 < 0 对于 X=1 W1 < -1 所以让选择 W1 = -1.5

最后:

h(x) = 1 - 1.5 * X

这是一个二维问题,让绘制X1和X2。这些是可以线性分隔的组,因为可以画一条直线来分隔两组,如下所示:

同样,将为这个感知器使用步进激活函数:

h(x) = W0 + W1 * X1 + W2 * X2 Y = Step(h(x))

从真值表中,知道当X1=X2=0时,Y=0,这意味着:

h(x) < 0 对于 X1=X2=0 W0 < 0 对于 X1=X2=0 - 让选择 W0 为 -0.5 h(x) = -0.5 + W1 * X1 + W2 * X2

选择一条与X1在0.5处和X2在0.5处相交的线(其他线也可以作为分隔符):

从真值表中,当X1=1且X2=0时,Y=1,然后h(x) >= 0 对于 X1=1且X2=0 -0.5 + W1 * X1 + W2 * X2 >= 0 对于 X1=1且X2=0 -0.5 + W1 * 1 + W2 * 0 >= 0 对于 X1=1且X2=0 -0.5 + W1 >= 0 对于 X1=1且X2=0 W1 >= 0.5 对于 X1=1且X2=0 让选择 W1 = 1 h(x) = -0.5 + 1 * X1 + W2 * X2

同样,当X1=0且X2=1时,Y=1,然后h(x) >= 0 对于 X1=0且X2=1:

-0.5 + 1 * X1 + W2 * X2 >= 0 对于 X1=0且X2=1 -0.5 + W2 >= 0 对于 X1=0且X2=1 W2 >= 0.5 对于 X1=0且X2=1 让选择 W2 = 1

最后:

h(x) = -0.5 + X1 + X2

让确认真值表:

X1 X2 期望 h(x) = -0.5 + X1 + X2 Y
1 1 1 1.5 1
1 0 1 0.5 1
0 1 1 0.5 1
0 0 0 -0.5 0

同样,它是一个二维问题,感知器应该是:

通过遵循上述OR过程,可以得出W0、W1和W2的值:

一个可能的组合是:

h(x) = -1.5 + X1 + X2

为了验证真值表:

X1 X2 期望 h(x) = -1.5 + X1 + X2 Y
1 1 1 0.5 1
1 0 0 -0.5 0
0 1 0 -0.5 0
0 0 0 -1.5 0

所以,最终的感知器应该是:

这是一个问题,这个函数不能线性分隔;没有一条直线可以将两组分开。然后,感知器不能解决这个问题,这是感知器的主要和主要局限性(仅限二元线性分类)。

然而,感知器是一个强大的算法,可能以其他形式用于优化复杂问题。让回到XOR函数,试图更深入地理解这个函数。将使用维恩图来帮助理解。维恩图是不同逻辑操作的图形表示(有关维恩图的更多信息)。

OR门的维恩图应该是:

这里是AND的维恩图:

这里是XOR的维恩图:

从维恩图中,可以提取XOR门的含义,作为UNION(OR)排除INTERSECTION区域的结果,换句话说:

XOR A B = (A + B) - (A.B)

已经使用感知器实现了上述AND和OR函数,那么为什么不使用多个感知器来实现上述函数呢?一个可能的实现可能是:

已经实现了2D AND函数,可以使用相同的:

没有实现3D OR函数。为了做到这一点,让从简化XOR函数的真值表开始:

X1 X2 X1 AND X2 期望
1 1 1 0
1 0 0 1
0 1 0 1
0 0 0 0

所以,需要找到满足上述表格的OR函数感知器的权重h(x),其中:

h(x) = W0 + W1 * X1 + W2 * X2 + W3 * X3 (X3 = X1 AND X2)

激活函数也将是步进的。让从X1=0、X2=0和X1 AND X2=0的最后一个组合开始,然后Y=0:

h(x) = W0 + W1 * X1 + W2 * X2 + W3 * X3 < 0 对于 X1=0, X2=0 & X1 AND X2 = 0 W0 < 0 对于 X1=0, X2=0 & X1 AND X2 = 0 让选择 W0 = -1

对于X1=1、X2=0和X1 AND X2=0的组合,然后Y=1:

h(x) = -1 + W1 * X1 + W2 * X2 + W3 * X3 >= 0 对于 X1=1, X2=0 & X1 AND X2 = 0 -1 + W1 >= 0 对于 X1=1, X2=0 & X1 AND X2 = 0 W1 >= 1 让选择 W1 = 2

对于X1=0、X2=1和X1 AND X2=0的组合,然后Y=1:

h(x) = -1 + 2 * X1 + W2 * X2 + W3 * X3 >= 0 对于 X1=0, X2=1 & X1 AND X2 = 0 -1 + W2 >= 0 对于 X1=0, X2=1 & X1 AND X2 = 0 W2 >= 1 让选择 W2 = 2

对于X1=1、X2=1和X1 AND X2=1的组合,然后Y=0:

h(x) = -1 + 2 * X1 + 2 * X2 + W3 * X3 < 0 对于 X1=1, X2=1 & X1 AND X2 = 1 -1 + 2 + 2 + W3 < 0 对于 X1=1, X2=1 & X1 AND X2 = 1 3 + W3 < 0 对于 X1=1, X2=1 & X1 AND X2 = 1 W3 < -3 对于 X1=1, X2=1 & X1 AND X2 = 1 让选择 W3 = -4

最后:

h(x) = -1 + 2 * X1 + 2 * X2 - 4 * X3 (X3 = X1 AND X2)

最终的感知器网络应该是:

让尝试重新制定上述布局的图形表示。每个感知器都由其函数表示。

而不是有一个AND感知器,让添加一个感知器来生成X1,另一个来生成X2:

现在,让添加虚拟感知器来接收输入,然后将其传递到下一层感知器:

上面的显然是更好的表示,它被称为MLP(多层感知器网络)。这正是ANN(人工神经网络)的常见布局。

输入由与输入数量相等的感知器集合接收,这称为输入层。输出由感知器生成,每个输出一个感知器。这称为输出层。在输入层和输出层之间的中间处理感知器称为隐藏层。每个ANN可以只有一个输入层和一个输出层,但可以有一个或多个隐藏层。隐藏层的数量基于正在优化的问题的复杂性。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485