用逻辑门拆开神经元:从手设权重到隐藏层组合 | xkmchenmu Blog

用逻辑门拆开神经元:从手设权重到隐藏层组合

AND、OR与NOT可以由一个带Sigmoid的神经元和手工权重近似实现,它们让加权和、偏置与阈值变得可计算。继续处理XOR时,单一直线边界会失效,隐藏层为何必要、逻辑表达式怎样核对也随之显现。

理解神经网络不一定要从大规模图像数据开始。两个只能取零或一的输入、四行真值表和一个输出神经元,已经足以观察最基本的计算:先把输入乘以权重并加上偏置,再通过Sigmoid函数把任意实数压到零与一之间,最后按阈值转成类别。这里的参数可以手工设定,不需要训练,因此每一个结果都能当场验算。

x1 x2 AND OR XOR
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

真值表是整个实验的判据。参数看起来再漂亮,只要四种输入中有一行不符,就没有实现目标逻辑。它也能防止一个常见错误:把“两个输入相同”误写成异或。表达式“二者同时为真,或者二者同时为假”输出的是同或XNOR,而异或要求恰好有一个输入为真。先列真值表,再组合门,比凭符号名称想象结果可靠得多。

偏置移动边界,权重决定输入朝哪个方向推动

令z等于偏置加二十倍x1再加二十倍x2,输出为g(z)。若偏置取负三十,四组z依次为负三十、负十、负十和正十。Sigmoid在较大负数处接近零,在较大正数处接近一,以零点五作为阈值时,只有两个输入都为一才能归到正类,因此得到AND。这里并非Sigmoid精确输出零或一,而是连续值足够靠近两端后被阈值离散化。

把偏置改为负十,任意一个输入为一都会让z达到正十,只有零零组合仍为负十,于是得到OR。对于单输入NOT,可使用偏置十、输入权重负二十:输入零时z为十,输入一时z为负十,方向恰好翻转。三组参数揭示了各自角色:正权重支持某个输入出现,负权重抑制它,偏置决定需要积累多少支持才跨过边界。

“等于零点五”处要先约定分类规则

当z恰好等于零时,Sigmoid输出零点五。实现必须写清是大于零点五还是大于等于零点五才判为一,否则边界上的样本可能在不同代码中得到不同标签。手设的十和二十并非唯一答案,只要四个点位于正确一侧并留有足够间隔,许多参数都能完成同一门。把权重同时缩小,会让输出离零点五更近;分类可能仍正确,但“置信”表象发生变化。这也提醒我们,不应把一个Sigmoid数值未经校准就当作真实世界概率。

用逻辑门拆开神经元:从手设权重到隐藏层组合 - 逻辑门到隐藏层组合

XOR暴露了单个线性边界的极限

在二维平面上,AND的正类只有右上角一个点,一条直线可以把它与其余三点分开;OR的负类只有左下角,同样可分。XOR的两个正类位于对角位置,两个负类占据另一条对角线,不存在一条直线能同时完成分隔。单个神经元无论怎样调整偏置和权重,都只能改变一条直线的位置与方向,无法绕过这个几何事实。

隐藏层的意义不是给模型增加神秘性,而是让多个简单边界先生成中间特征,再由下一层组合成非线性区域。

一种可核对的组合是先计算x1与非x2,以及非x1与x2,再把两项做OR。另一种等价思路是先求OR和AND,然后保留“OR成立但AND不成立”的情况。隐藏层中的神经元分别近似这些中间门,输出层再完成组合。逐层输出都能与对应真值表比较,因此即使网络出现错误,也能定位是某个基础门、连接方向还是最终聚合出了问题。

  1. 为目标函数写出完整输入组合,不跳过边界情况。
  2. 先验证每个隐藏单元表示的中间逻辑。
  3. 检查输出层是否真的组合成目标,而非同或或其他函数。
  4. 同时查看连续输出与阈值后的标签,避免掩盖临界值。

手工电路展示表示能力,训练才负责寻找参数

上述例子直接给出权重,证明某种网络结构能够表示逻辑函数,却没有说明实际学习过程一定能找到这组参数。训练还需要损失函数、数据、初始化和优化方法。对四行真值表而言,可以重复呈现所有组合并用交叉熵衡量输出;反向传播计算每个参数对损失的影响,优化器再逐步调整权重。不同初始化可能走出不同数值,但只要分类边界和验证结果正确,就不必与手设参数完全一致。

这一区分有助于解释“结构、计算、学习”三件事。结构规定哪些单元相连;前向计算说明给定参数时输出怎样产生;学习规则则说明参数如何根据误差变化。把表示能力与可训练性混成一句“网络能拟合任何函数”,会遗漏数据覆盖、优化困难和泛化误差。逻辑门例子只覆盖有限输入点,不能自动证明网络对未见过的连续区域有合理行为。

多类别输出不是简单复制一个二分类神经元

若任务从猫狗二类扩展为猫、狗、车辆和房屋四类,输出层通常为每个类别保留一个分量。输入可以来自图像像素或经过提取的特征,隐藏层逐层变换,最终输出四个分数。互斥类别常把这些分数归一化后选择最大者,多标签任务则可能分别判断每个类别。输出单元数量取决于标签定义,而不是看到四类就机械认为任何任务都必须采用同一种激活和损失。

输入维度也不等于有效信息量。二十乘二十的灰度图确实可展开为四百个数,但像素排列、尺度、平移和训练样本分布都会影响结果。隐藏单元数量更多会提升表示空间,同时增加参数、计算和过拟合风险,不能用“输入节点的一点几倍”作为普遍定律。可靠做法是先建立小网络基线,再用独立验证集比较容量变化。

从四行真值表迁移出的调试顺序

一个小型逻辑网络最有价值的产物不是三组可背诵的权重,而是一套调试方法:把每层写成加权和与激活;用穷举输入验证边界;把复杂目标分解成可检验的中间表示;最后区分“存在一组参数”和“训练能找到参数”。这套顺序同样适用于更大的网络,只是穷举会被抽样测试、可视化和统计指标替代。

当输出异常时,先查数据和目标编码,再查矩阵形状、偏置广播与激活范围,之后才调整训练轮次。逻辑门让这些错误缩小到几行算式中:AND与OR说明一条边界能做什么,XOR说明它做不到什么,隐藏层则展示简单单元如何组合。理解了这三个层次,神经网络就不再只是“黑盒”,而是一组能够逐层提出假设并逐层验收的计算结构。

(0)
打赏 支付宝扫一扫 支付宝扫一扫

发表回复

登录后才能评论