Skip to content

Latest commit

 

History

History
92 lines (53 loc) · 4.79 KB

File metadata and controls

92 lines (53 loc) · 4.79 KB

神经网络简介: 感知器

1957 年,康奈尔航空实验室的弗兰克-罗森布拉特(Frank Rosenblatt)首次尝试实现与现代神经网络类似的功能。这是一种名为 "Mark-1 "的硬件实现,旨在识别三角形、正方形和圆形等原始几何图形。

Frank Rosenblatt The Mark 1 Perceptron

Images from Wikipedia

输入图像由 20x20 光电池阵列表示,因此神经网络有 400 个输入和一个二进制输出。一个简单的网络包含一个神经元,也称为阈值逻辑单元。神经网络的权重就像电位器,在训练阶段需要手动调整。

✅ 电位器是一种允许用户调节电路电阻的装置。

《纽约时报》当时对感知器进行了报道: *[海军]希望这种电子计算机的雏形能够行走、说话、看东西、写字、自我复制并意识到自己的存在。

感知器模型

假设我们的模型有 N 个特征,那么输入向量就是一个大小为 N 的向量。感知器是一个二元分类模型,即它可以区分输入数据的两个类别。我们假定,对于每个输入向量 x,感知器的输出都是+1或-1,具体取决于类别。输出的计算公式为

y(x) = f(wTx)

其中,f 是阶跃激活函数

训练感知器

要训练感知器,我们需要找到一个权重向量 w,它能正确地对大部分数值进行分类,即产生最小的误差。这个误差由感知器准则定义,其方式如下:

E(w) = -∑wTxiti

也就是:

  • 对导致错误分类的训练数据点 i 求和
  • xi s 为输入数据,ti 根据负相关或者正相关相应的的"-1 "或 "+1"。

这个标准被视为权重 w 的函数,我们需要将其最小化。通常情况下,我们会使用一种名为梯度下降的方法,即从一些初始权重开始计算 w(0), 然后每一步都根据公式更新权重:

w(t+1) = w(t) - η∇E(w)

η 即所谓的学习率, 并且 ∇E(w) 表示 E 的梯度。 计算梯度后,我们得出

w(t+1) = w(t) + ∑ηxiti

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

结论

在这一课中,你了解了二元分类模型感知器,以及如何使用权重向量来训练感知器。

🚀 挑战

如果你想建立自己的感知器,请尝试 this lab on Microsoft Learn 基于 Azure ML designer.

复习与自学

要了解我们如何使用感知器解决玩具问题和现实问题,并继续学习--请访问 Perceptron 笔记本。

这里还有一篇有趣的关于感知器的文章

在本课中,我们为二进制分类任务实现了一个感知器,并用它对两个手写数字进行了分类。在本实验中,我们要求你完全解决数字分类问题,即确定哪个数字最有可能与给定图像相对应。