感知器算法是在监督式学习,这是一个机器学习任务,有优势训练有素的带安全标签的数据。这与无监督学习,它是在未标记的数据上训练的。具体来说,感知器算法关注的是二元分类数据,是一个类或另一个类的成员的对象。此外,它还允许在线学习,这意味着它一次处理一个训练数据集中的元素(这对大型数据集很有用)。
此外,感知器算法是一种线性分类器,它通过使用变量的线性组合对数据点进行分类。如上图所示,线性分类器使用直线 如。 ,或 要对数据点进行分类——线一侧的任何对象都是一个类的一部分,线另一侧的任何对象都是另一个类的一部分。在本例中,一个成功的线性分类器可以使用 或 区分这两个阶级,而 会是一个可怜的决定边界.
感知器特性的一个有趣的结果是它无法学习异或函数!正如我们上面看到的,OR和and函数是线性可分的,这意味着存在一条线可以将一个类的所有数据点与另一个类的所有数据点分开。然而,XOR函数不是线性可分的,因此感知器算法(线性分类器)无法成功学习这个概念。这就是为什么感知器算法本身不用于复杂的机器学习任务的主要原因,而是可以处理线性不可分割分类的神经网络的构建块。
感知器是一种用于产生二进制分类器的算法。也就是说,算法接受二进制分类输入数据,以及它们的类成员,并输出一条线,试图将一个类的数据从另一个类的数据中分离出来:该线一侧的数据点属于一个类,另一侧的数据点属于另一个类。
特别地,给定一个输入 变量 ,直线是这些变量的线性组合: ,在那里 而且 是常数。注意,这也可以写成 ,在那里 是点积两者之间的向量 而且 .
感知器算法返回的值 而且 这样,在线的一边的数据点是一个类,在另一边的数据点是另一个类。的数值 而且 二进制分类器以以下方式使用:If ,分类器返回1;否则,它返回0。注意,1表示一个类的成员关系,0表示另一个类的成员关系。使用AND运算符可以更清楚地看到这一点,为了方便起见,下面复制了它。
那么 而且 代表什么? 的权值 变量。简单地说,变量的权重决定了直线相对于该变量的陡峭程度。每个变量都需要一个权重;否则,这条直线相对于该变量将是平坦的,这可能会阻止这条直线成功地对数据进行分类。此外, 代表了偏见的数据。本质上,这防止了直线依赖于起源 点(0,0) -偏差将线向上或向下移动,以更好地对数据进行分类。
感知器算法通过随时间改变权重和偏差来学习分离数据,其中时间表示为算法运行的次数。因此, 表示权重在时间上的值 而且 表示时间偏差的值 .
此外, 代表了学习速率,即算法对变化的响应速度。这个值有界 . 不能为0,因为这意味着没有学习发生。如果 是一个较大的值,算法的倾向性有多大振荡围绕解决方案,如后面所述。
为了更好地阐明这些概念,下面详细介绍感知器算法的形式步骤。在下面, 表示输入的正确输出值 ;一节课 如果 是那个阶级的成员吗 否则。
举例如下:
假设我们试图学习以下输入类对的AND操作符 而且 让我们用学习率 然后运行这个算法直到我们把四个点都正确分类。
W (0) = [0,0], b(0) = 0
1 W (0) = [0,0], b(0) = 0 Y = [0,0,0,0] W (1) = [0.5, 0.5], b(1) = 0.5 2 W (1) = [0.5, 0.5], b(1) = 0.5 Y = [1,1,1,1] W (2) = [0,0];(2) = 1 3. W (2) = [0,0], b(2) = -1 Y = [0,0,0,0] W (3) = [0.5, 0.5], b(3) = -0.5 4 W (3) = [0.5, 0.5], b(3) = -0.5 Y = [0,0,0,1] 成功!
在前面的例子中,感知器算法终止很快就能得到正确的值。出现这种情况的一个原因是由于精心选择的学习率( ).与一个较小的 ,算法需要更多的迭代才能完成,而较大的 可能会导致算法永远振荡。
感知器算法的实现如下(Python):
12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|