原文链接:Introduction to Neural Networks: Perceptron
上一章:二、知识表示(Knowledge Representation)和专家系统
更多章节:人工智能入门课程
目录
课前练习
首批尝试实现类似现代化的神经网络之一的,是康奈尔航空实验室的弗兰克·罗森布拉特(Frank Rosenblatt)于1957年完成的。它是一个被称作“Mark-1”的硬件实现的,旨在识别原始几何图形,比如说三角形、正方形、圆形。
| |
图片摘自 Wikipedia
输入图片由20*20的光电管阵列表示,所以神经网络有400个输入以及1个二进制位的输出。一个简单的网络包含一个神经元,也被称作为阈值逻辑单元。神经网络的权重就像电位器一样,在训练期间需要手动调整。
✅ 电位器是一种允许用户调节电路电阻的设备。
纽约时报当时报道感知器:【海军】期望这个萌芽期的计算机可以行走,说话,观看,书写,自我复制并意识到它自己的存在。
感知器模型
假设我们的模型有N个特征,在这种情况下,输入向量是一个大小为N的向量。感知器是一个二元分类模型,用它可以区分两种类型的输入数据。我们假设感知器对每一个输入向量X的输出都会是+1或者-1,输出结果取决于类别。输出结果将使用如下公式计算得到:
其中f是阶跃激活函数
训练感知器
通过训练感知器,我们需要找到一个权重向量w,使得最多的分类是正确的,也即结果最少错误。错误由感知器准则按如下方式定义:
其中:
- 对那些分类结果是错误的训练数据点i上进行求和
- 是数据点i上的输入数据,同时取值是-1或者+1,分别对应(结果)负例和正例。
该标准被视为权重w的函数,我们需要将其最小化。通常使用一种叫做梯度下降的方法,我们从初始化权重为开始,然后每一步根据如下公式更新权重:
= - η∇E(w)
在这里η被称作学习率,∇E(w)表示E的梯度。在计算梯度之后,我们会得到:
= + ∑η
Python中,算法如下所示:
def train(positive_examples, negative_examples, num_iterations = 100, eta = 1):
weights = [0,0,0] # Initialize weights (almost randomly :)
for i in range(num_iterations):
pos = random.choice(positive_examples)
neg = random.choice(negative_examples)
z = np.dot(pos, weights) # compute perceptron output
if z < 0: # positive example classified as negative
weights = weights + eta*weights.shape
z = np.dot(neg, weights)
if z >= 0: # negative example classified as positive
weights = weights - eta*weights.shape
return weights
结尾
在这个课程中,你学习了感知器(一种二元分类模型),以及如何使用权重向量训练它。
挑战
如果你想构建你自己的感知器,请尝试Microsoft Learn上的这个实验,它使用了Azure ML designer。
课后练习
复习与自学
了解我们能够如何使用感知器来解决一个玩具问题以及真实生活中的问题。并继续前往感知器笔记本学习。
这里还有一篇关于感知器的有趣的文章
作业
在这节课中,我们实现了一个感知器用于二元分类任务,并将它用于区分两个手写的数字。在这个实验里面,你被要求完整的解决数字分类问题,即确定给定图像最可能对应哪个数字。
上一章:二、知识表示(Knowledge Representation)和专家系统
更多章节:人工智能入门课程