发布于 2026-01-06 4 阅读
0

感知器![实时观看人工智能学习过程!👀] 由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

感知器![实时观看人工智能学习过程!👀]

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

我读过很多关于机器学习(ML)模型工作原理的文章。它们解释的都是同一件事,而且方式也几乎相同。

但我还没有找到最纯粹的机器学习形式。

机器学习如此简单,我甚至能直观地理解它的工作原理。举个例子,我可以看到一个模型从一无所知理解某些东西,并且能够完全跟随它的运行过程!

我的意思是,我(大概)理解了所有的权重、偏差等等。我成功地用原生JS构建了一个神经网络(NN)(甚至用CSS构建了一个神经网络🤯!),但我仍然无法理解它实际是什么样子。

然后我读到了关于“感知器”(PARA 项目)的文章,这是 20 世纪 50 年代末和 60 年代初最早的机器学习实验之一(是的,我们从事机器学习已经很久了,实际上从 20 世纪 40 年代就开始了!)

这正是我想要的,因为这是一个使用模拟系统工作的机器学习模型,所以必须更简单一些。

正是基于这种简单性,我终于构建出了我想要的东西——一个简单的模型,我们可以实时看到它学习的过程,更重要的是,可以了解它在学习过程中发生了什么

如果您比较心急,可以直接跳到演示部分,但我建议您先了解一下它的工作原理和学习规则,因为这对于理解您所看到的内容非常重要!

向 Welch Labs 致敬!

Welch Labs制作了一段关于感知器的精彩讲解视频,这启发我写了这篇文章。文中的一些截图来自他们搭建的实体感知器机器!

一个可以观察其学习过程的感知器模型!

模型界面截图,显示了两个输入区域,分别用于输入理想形状和不良形状;网格代表每个输入的旋钮和权重;网格显示了最终结果。

这是我搭建的(或者应该说是在很多提示和指导下搭建的 03-mini——顺便说一句,03-mini 生成的代码很糟糕,但作为原型工具来说它令人印象深刻!不过,即便如此,搭建这个例子也花了大约 4 个小时!)。

让我来解释一下你在截图中看到的内容,然后你就可以亲自体验一下演示版了!

输入网格

界面显示两个输入区域,分别用于输入好形状和坏形状。

所以最上面的两个框是我们的输入项。

它们是两个 5x5 的盒子,你可以在里面拨动“开关”。

勾选的复选框表示正电压,未勾选的复选框表示负电压。

为了使我们的模型能够展示学习效果,我们需要一个“好”的形状和一个“坏”的形状。

这是我们对输入开关网格的代码表示,就像这个例子中,你需要每次手动拨动开关来获得“好”或“坏”的形状:

一堆开关,分别处于向上或向下位置,连接到面包板上,并配有指示灯,指示灯的亮灭取决于开关是向上还是向下。

刻度盘/砝码

一个网格,表示每个输入的刻度盘和砝码

输入网格下方是旋钮/配重。

在现实世界的模拟版本中,它们是物理旋钮,可以将输入电压乘以旋钮上显示的数值。

在我们的示例中,每个方框中都用数字表示,显示为正数或负数。

您还会注意到屏幕截图中单元格有颜色(阳性为绿色,阴性为红色),以便于视觉区分(对于非色盲人士而言)。

最后你会注意到每个方框中都有一个“+”或“-”,再次表明它们是增强还是减弱了输入信号。

这就是我们实际的神经网络。这些就是你可能在现代神经网络中听说过的“权重/偏差”。

如果一个网格方格是正数/绿色,那就相当于向上拨动旋钮;如果一个网格方格是负数/红色,那就相当于向下拨动旋钮。

它们代表了一组如下所示的表盘:
拨盘网格

每个感知器的输出电压可视化器

一个显示结果的网格

这只是为了帮助我们理解模型中发生的事情,它是输入乘以一个“刻度盘”后的输出。

为了进一步解释,我们假设第一个拨盘设置为“+18”。

那么,假设我们给感知器输入一个正电压(所有输入要么是 +10 伏,要么是 -10 伏,如果它们开启的话)。

这意味着这个旋钮会输出+180伏电压。

现在假设我们将开关(第一个复选框)切换到“关闭”状态。现在我们将得到-180V的输出电压。

需要注意的是,如果这个“拨盘”是负数(比如设置为“-12”),那么情况就相反。

如果开关处于“开”的状态,则输出电压为-120V(+10伏乘以-12),如果开关处于“关”的状态,则输出电压为+120V。

该模型的工作原理是将所有电压相加。

哦,还有最后一点需要说明,如果旋钮的读数是“0”,那么我们就输出它接收到的电压。

电压输出表

方框显示

电压输出表是我们的最终输出。

这是将每个开关(我们的复选框,+10V 或 -10V)的输入电压乘以每个相应的增益开关,然后将所有结果相加的结果。

在我们的感知器中,正值代表“好”,负值代表“坏”。电压的大小并不重要,重要的是它是高于0还是低于0。

这代表实际模型中的电压表:

一款指针式模拟电压表,指针范围从-100V到+100V。

模型如何学习。

所以这个感知器模型遵循一些简单的规则。

它总是从输入一个形状开始,在这个例子中,就是我们的“好”形状,所有旋钮/权重都设置为 0。

请记住,任何勾选的方框都会输出 +10 伏电压,任何未勾选的方框都会输出 -10 伏电压。

因此,如果我们画一个带有 4 个复选框的形状,我们将从这 4 个复选框获得 +40 伏电压,但也会从其他所有复选框获得 -450 伏电压(请记住,实际电路板是 7x7 的,因此总共有 49 个开/关输入)。

由于没有任何加权/调整,我们得到的输出电压为负值

关键就在于此,因为我们需要根据该输出结果应用相应的规则:

  • 如果正确的输出电压应该是正的(形状良好),而我们得到的是负电压,那么我们就把所有“开启”的电池都调高,把所有其他电池都调低。
  • 如果正确的输出电压应该是正的,并且我们得到了正的输出电压——我们什么也不做
  • 如果正确的输出电压应该是负值(形状不好),而我们得到的是正电压,那么我们就把所有“开启”的电池都调低,把所有其他电池都调高。
  • 如果正确的输出电压应该是负的,并且我们得到了负电压输出——我们什么也不做

在我们的模型中,我们以 3 为单位进行倍增。因此,经过一次训练后,我们会得到如下输出:

49 个方格,其中 5 个深绿色方格表示每个方格电压为 +3,其余方格红色方格表示每个方格电压为 -3;下一个网格显示所有方格电压均为 +30 伏,总输出电压为 600 伏。

为什么输入的数据只有 25 个方框,却需要 49 个方框?

这就是奇迹发生的地方。

你看,如果我们的形状与输出网格的大小相同,我们可以说我们只是(实际上)把这个形状存储在了内存中。实际上,模型并没有学习到任何东西。

接下来,我们将图形向右移动一个方格,并按照相同的步骤进行操作。

这一次(由于我们之前的步骤),模型将输出不同的电压,因为现在我们的一些关闭开关乘以了一个负数,从而产生了正电压输出,而我们的一些开启开关则转移到了一个负乘数上,从而变成了负电压。

所以这次我们根据输出电压遵循同样的规则。

最后,当我们尝试了所有 9 个“好”形状的位置并调整了每个位置的旋钮后,我们再输入 9 个“坏”形状的位置。

经过训练,模型已经学会了如何识别形状。它可能在一次学习后并不总是能正确识别,但经过多次学习后最终会正确识别(当然,几乎总是如此,有一些形状组合永远不会“确定”正确的刻度图案)。

好了,说了这么多,现在我们可以开始玩了!

演示

考虑到以上所有因素,演示如下。

在玩耍之前,请阅读以下说明。

正确使用该模型对于轻松理解正在发生的事情至关重要!

指示

通过点击复选框,在“好”框中输入一个形状,在“坏”框中输入另一个不同的形状。

一旦你掌握了形状,就可以开始训练了!

5 个按钮:开始训练、取消训练、重置拨盘、全部测试、自我训练和测试

点击第一个按钮“开始训练”。

你会看到系统将正确的形状放在左上角“旋钮和配重”框中,并立即根据规则调整电压。

然后它会将形状移动到正确的位置,并遵循相同的规则(注意观察电压表的移动,以便查看电压是正还是负,以及电压变化如何改变形状的行为)。

它将对 3 列和 3 行的组合重复此操作,以便对所有可能输入形状的位置进行训练。

然后它会将形状切换为“坏”形状,并遵循相同的规则(记住,这次我们想要一个负输出)。

训练完成后,您将看到一条提示信息:

提示框:训练完成!现在您可以手动测试形状了。

测试模型!

现在您有两个选择:
选项 1:单击“选择左上角位置进行测试”框中的 9 个方框之一。您将看到一个模态框,询问您要测试哪个形状(“A”表示“好”,“B”表示“坏”)。

你会收到一条包含感知器预测结果的警报。

警报:

然后,您将在“选择左上位置进行测试”框中看到渲染的形状,以及每个旋钮/开关组合产生的电压输出。

点击更多方框,选择“A”或“B”来测试好形状和坏形状,看看模型猜测正确或错误的频率如何!

这是了解模型如何工作的最佳方法,所以请重复几次并检查输出结果


选项 2:让系统测试直到发现故障!
如果您只想查看模型当前的运行状况,请点击“全部测试”。

它将遍历两种形状的所有形状位置,如果猜错(例如,对正确的形状输出负电压),则会停止并报错,并告知您失败的位置。

警告:形状 A 的第 1 行、第 2 列输出错误。您应该重新训练并重试。

或者,如果你运气好的话,它可能会完成所有检查,你会收到一条成功消息!

警报:已完成全部培训并通过

如果通过测试,无论你将其放置在哪个有效位置,它都能正确识别形状(好/A 或坏/B)。

它失败了

不出所料,你只完成了一次训练!

现在你可以再次点击“开始训练”,但这故意设置了较慢的速度

为了加快速度,您可以点击“自我训练和测试”。

这段代码以10 倍速运行所有训练姿势,然后进行测试,直到某个形状测试失败为止,重复此过程 50 次,或者直到通过所有测试为止!

一旦你理解了原理,并且在慢速版本中玩了足够多的游戏,点击这个按钮,观察每个方块的电压是如何变化的,以及它是如何逐渐通过测试,直到(希望如此)最终通过的!

如果没通过,请尝试不同的形状,或者再次按下“自我训练和测试”按钮,再运行 50 个循环!

然后,一旦所有测试都通过,就尝试点击“选择左上角位置进行测试”方框中的几个方框,并尝试“A”或“B”形状。

请特别注意每个电池盒中的电压和旋钮设置。注意哪些电池电压最高,哪些电池电压最低等等。

我觉得非常有趣的是,理解事情的来龙去脉竟然如此“容易”!

Codepen 演示



使用 CodePen 底部的按钮 将视图设置为 0.5x,以便更轻松地使用。

尝试新形状

如果您想尝试新的形状,或者只是想再次从头开始学习,只需按下“重置拨盘”,所有拨盘都将恢复为 0。

结束了。

我知道这说了不少字,但我希望它能帮助你理解模型是如何以最简单的形式进行学习的。

我发现这比矩阵乘法、图表更容易理解,虽然这不是现代 LLMS / ML 模型的工作原理,但这是理解其原理的好方法。

如果你觉得有用/帮助你更好地理解了,请在评论区告诉我!

文章来源:https://dev.to/grahamthedev/the-perceptron-visually-see-an-ai-learn-2fd9