在本系列的前一篇文章中,创建了一个作为二元线性分类器的感知器。本文将继续讨论感知器,以创建更复杂的布局来解决更复杂的问题。
虽然拥有代码本身可能不是主要目标,但理解这些算法是至关重要的。希望这些内容对某人某天有所帮助。
如前所述,感知器是人工神经网络(ANN)中最简单的处理元素,但它仍然是一个强大的算法,尽管它非常有限。记住,它主要用作二元线性分类器。
那么,对于其他复杂的分类问题呢?对于二元但非线性的分类呢?将通过几个示例来看看如何开发更复杂的感知器布局。
为了确保在同一页面上,让验证一些定义:
为了更好地理解感知器及其局限性,将检查它在优化二元函数中的使用,如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可以只有一个输入层和一个输出层,但可以有一个或多个隐藏层。隐藏层的数量基于正在优化的问题的复杂性。