感知器![实时观看人工智能学习过程!👀]
由 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。
这代表实际模型中的电压表:
模型如何学习。
所以这个感知器模型遵循一些简单的规则。
它总是从输入一个形状开始,在这个例子中,就是我们的“好”形状,所有旋钮/权重都设置为 0。
请记住,任何勾选的方框都会输出 +10 伏电压,任何未勾选的方框都会输出 -10 伏电压。
因此,如果我们画一个带有 4 个复选框的形状,我们将从这 4 个复选框获得 +40 伏电压,但也会从其他所有复选框获得 -450 伏电压(请记住,实际电路板是 7x7 的,因此总共有 49 个开/关输入)。
由于没有任何加权/调整,我们得到的输出电压为负值。
关键就在于此,因为我们需要根据该输出结果应用相应的规则:
- 如果正确的输出电压应该是正的(形状良好),而我们得到的是负电压,那么我们就把所有“开启”的电池都调高,把所有其他电池都调低。
- 如果正确的输出电压应该是正的,并且我们得到了正的输出电压——我们什么也不做。
- 如果正确的输出电压应该是负值(形状不好),而我们得到的是正电压,那么我们就把所有“开启”的电池都调低,把所有其他电池都调高。
- 如果正确的输出电压应该是负的,并且我们得到了负电压输出——我们什么也不做。
在我们的模型中,我们以 3 为单位进行倍增。因此,经过一次训练后,我们会得到如下输出:
为什么输入的数据只有 25 个方框,却需要 49 个方框?
这就是奇迹发生的地方。
你看,如果我们的形状与输出网格的大小相同,我们可以说我们只是(实际上)把这个形状存储在了内存中。实际上,模型并没有学习到任何东西。
接下来,我们将图形向右移动一个方格,并按照相同的步骤进行操作。
这一次(由于我们之前的步骤),模型将输出不同的电压,因为现在我们的一些关闭开关乘以了一个负数,从而产生了正电压输出,而我们的一些开启开关则转移到了一个负乘数上,从而变成了负电压。
所以这次我们根据输出电压遵循同样的规则。
最后,当我们尝试了所有 9 个“好”形状的位置并调整了每个位置的旋钮后,我们再输入 9 个“坏”形状的位置。
经过训练,模型已经学会了如何识别形状。它可能在一次学习后并不总是能正确识别,但经过多次学习后最终会正确识别(当然,几乎总是如此,有一些形状组合永远不会“确定”正确的刻度图案)。
好了,说了这么多,现在我们可以开始玩了!
演示
考虑到以上所有因素,演示如下。
在玩耍之前,请阅读以下说明。
正确使用该模型对于轻松理解正在发生的事情至关重要!
指示
通过点击复选框,在“好”框中输入一个形状,在“坏”框中输入另一个不同的形状。
一旦你掌握了形状,就可以开始训练了!
点击第一个按钮“开始训练”。
你会看到系统将正确的形状放在左上角“旋钮和配重”框中,并立即根据规则调整电压。
然后它会将形状移动到正确的位置,并遵循相同的规则(注意观察电压表的移动,以便查看电压是正还是负,以及电压变化如何改变形状的行为)。
它将对 3 列和 3 行的组合重复此操作,以便对所有可能输入形状的位置进行训练。
然后它会将形状切换为“坏”形状,并遵循相同的规则(记住,这次我们想要一个负输出)。
训练完成后,您将看到一条提示信息:
测试模型!
现在您有两个选择:
选项 1:单击“选择左上角位置进行测试”框中的 9 个方框之一。您将看到一个模态框,询问您要测试哪个形状(“A”表示“好”,“B”表示“坏”)。
你会收到一条包含感知器预测结果的警报。
然后,您将在“选择左上位置进行测试”框中看到渲染的形状,以及每个旋钮/开关组合产生的电压输出。
点击更多方框,选择“A”或“B”来测试好形状和坏形状,看看模型猜测正确或错误的频率如何!
这是了解模型如何工作的最佳方法,所以请重复几次并检查输出结果。
选项 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













