2026/5/21 14:39:52
网站建设
项目流程
莱阳网站建设公司,建设网站需要哪些语言,幕墙配件在那个网站做推广好,服务商的定义是什么意思从与门到异或#xff1a;用神经网络重演逻辑的诞生你有没有想过#xff0c;一台能写诗、作画、下围棋的深度学习模型#xff0c;它的“思维”起点可能只是几个简单的开关#xff1f;在数字世界的最底层#xff0c;所有复杂的运算都源于与门#xff08;AND#xff09;、或…从与门到异或用神经网络重演逻辑的诞生你有没有想过一台能写诗、作画、下围棋的深度学习模型它的“思维”起点可能只是几个简单的开关在数字世界的最底层所有复杂的运算都源于与门AND、或门OR和非门NOT。这些看似原始的逻辑单元构成了现代计算机的基石。而今天我们要讲的是一个更有趣的事实神经网络不仅能模拟这些逻辑门还能通过自我学习“重新发明”它们。这不仅是一个教学演示更是理解神经网络如何从数据中自动提取规则的关键入口——尤其是那个著名的难题为什么单个神经元搞不定异或XOR但加一层隐藏层就迎刃而解感知机当神经元学会做判断我们先回到1957年Frank Rosenblatt提出的感知机Perceptron这是最早的“人工神经元”模型之一。它的工作方式非常直观接收一组输入 $x_1, x_2, …, x_n$每个输入乘以对应的权重 $w_i$加上偏置项 $b$最后经过一个阶跃函数输出0或1。数学表达式如下$$y f\left(\sum_{i1}^{n} w_i x_i b\right)$$其中激活函数 $f$ 是单位阶跃函数比如$$f(z) \begin{cases}1, z \geq 0 \0, z 0\end{cases}$$听起来是不是很像线性分类器没错感知机本质上就是在找一条直线在二维空间把两类样本分开。AND 和 OR线性可分的好学生来看两个最简单的逻辑门$x_1$$x_2$ANDOR0000010110011111我们可以轻松为 AND 找到一条分界线。例如设定权重 $w_11, w_21$偏置 $b-1.5$那么只有当 $x_1x_21$ 时加权和才大于等于0。同样地OR 也能用类似的参数实现。✅ 小结AND 和 OR 是线性可分的所以单层感知机完全 hold 住。XOR 的挑战为何单层神经元束手无策再看异或门$x_1$$x_2$XOR000011101110问题来了你能画出一条直线把 (0,1) 和 (1,0) 归为一类同时把 (0,0) 和 (1,1) 分出去吗试一试就知道——不行。XOR 在二维平面上是典型的非线性可分问题。这意味着什么 单层感知机无论怎么调权重和偏置都无法正确分类 XOR 数据。这就是 Minsky 和 Papert 在《Perceptrons》一书中指出的核心局限也直接导致了第一次 AI 寒冬的到来。但转机也随之而来如果我们不再局限于“单层”而是引入中间层呢多层感知机破局让神经网络自己发现“逻辑组合”答案正是多层感知机MLP。只要加入至少一个隐藏层并配合非线性激活函数XOR 不再是难题。它是怎么做到的关键在于MLP 不是直接去拟合 XOR而是先构造新的特征把非线性问题变成线性可分的问题。我们可以这样拆解 XOR$$\text{XOR}(x_1, x_2) (x_1 \land \neg x_2) \lor (\neg x_1 \land x_2)$$换句话说第一个隐藏神经元检测 “$x_1$ 为真且 $x_2$ 为假”第二个隐藏神经元检测 “$x_1$ 为假且 $x_2$ 为真”输出层将这两个条件“或”起来。这就像是在网络内部构建了一个小型的逻辑电路网络结构设计2-2-1 架构足够了吗当然可以。我们搭建一个简单的 MLP输入层2 个节点对应 $x_1, x_2$隐藏层2 个节点用于提取中间逻辑特征输出层1 个节点输出最终结果使用 Sigmoid 激活函数因为它连续可导适合梯度下降优化。动手实现从零训练一个会算 XOR 的神经网络下面是一段纯 NumPy 实现的代码不依赖任何框架帮助你看清每一步发生了什么。import numpy as np # Sigmoid 激活函数带数值保护 def sigmoid(x): # clip 防止 exp(-x) 溢出 return 1 / (1 np.exp(-np.clip(x, -250, 250))) def sigmoid_derivative(x): return x * (1 - x) # XOR 数据集 X np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) y np.array([[0], [1], [1], [0]]) # 标签 # 超参数设置 input_size 2 hidden_size 2 output_size 1 learning_rate 1.0 epochs 10000 # 权重初始化小随机数打破对称性 np.random.seed(42) W1 np.random.randn(input_size, hidden_size) * 0.5 b1 np.zeros((1, hidden_size)) W2 np.random.randn(hidden_size, output_size) * 0.5 b2 np.zeros((1, output_size)) # 训练循环 for epoch in range(epochs): # 前向传播 z1 X.dot(W1) b1 a1 sigmoid(z1) # 隐藏层输出 z2 a1.dot(W2) b2 a2 sigmoid(z2) # 最终输出 # 损失计算均方误差 loss np.mean((y - a2)**2) # 反向传播 m X.shape[0] dz2 (a2 - y) * sigmoid_derivative(a2) # 输出层误差 dW2 a1.T.dot(dz2) / m db2 np.sum(dz2, axis0, keepdimsTrue) / m da1 dz2.dot(W2.T) dz1 da1 * sigmoid_derivative(a1) # 隐藏层误差 dW1 X.T.dot(dz1) / m db1 np.sum(dz1, axis0, keepdimsTrue) / m # 参数更新 W2 - learning_rate * dW2 b2 - learning_rate * db2 W1 - learning_rate * dW1 b1 - learning_rate * db1 if epoch % 2000 0: print(fEpoch {epoch}, Loss: {loss:.6f}) # 测试最终预测 print(\nFinal Predictions:) for i in range(len(X)): pred a2[i][0] print(fInput: {X[i]} → Output: {pred:.4f} (Expected: {y[i][0]}))运行结果示例Epoch 0, Loss: 0.488771 Epoch 2000, Loss: 0.005847 Epoch 4000, Loss: 0.001321 Epoch 6000, Loss: 0.000612 Epoch 8000, Loss: 0.000378 Final Predictions: Input: [0 0] → Output: 0.0121 (Expected: 0) Input: [0 1] → Output: 0.9873 (Expected: 1) Input: [1 0] → Output: 0.9873 (Expected: 1) Input: [1 1] → Output: 0.0119 (Expected: 0)✅ 成功网络已经学会了 XOR。关键机制解析到底发生了什么让我们深入看看这个简单网络背后的运作逻辑。1. 隐藏层做了什么打印一下隐藏层的输出a1print(Hidden layer outputs:) for i in range(len(X)): print(fInput {X[i]} → Neuron1: {a1[i][0]:.4f}, Neuron2: {a1[i][1]:.4f})假设你看到的结果类似Input [0 0] → N1: 0.12, N2: 0.13 Input [0 1] → N1: 0.89, N2: 0.11 Input [1 0] → N1: 0.10, N2: 0.88 Input [1 1] → N1: 0.11, N2: 0.12你会发现第一个神经元大致响应(¬x₁ ∧ x₂)第二个神经元大致响应(x₁ ∧ ¬x₂)这正是我们在前面设想的逻辑分解2. 激活函数的作用Sigmoid 把线性输出压缩到 (0,1) 区间相当于一种“软布尔值”。随着训练进行它的输出越来越接近 0 或 1形成清晰的决策边界。如果换成 ReLU虽然训练更快但在这种小数据任务中可能不如 Sigmoid 稳定。3. 权重初始化很重要初始值太大会导致饱和Sigmoid 输出接近 0 或 1梯度消失太小则信号传递弱。这里用*0.5是经验性选择。坑点与秘籍新手常踩的五个雷忘记 clip 导致 nan- Sigmoid 中exp(-x)在大负数时会溢出。- 解决方案使用np.clip(x, -250, 250)控制输入范围。学习率设太高- 可能导致损失震荡甚至发散。- 这里设为 1.0 是因为数据极小且标准化实际项目建议从 0.01 开始尝试。权重初始化对称- 如果所有权重相同隐藏层神经元会同步更新失去多样性。- 解决方法随机初始化如np.random.randn。没有归一化输入- 虽然本例输入已经是 0/1但在真实场景中输入应尽量归一化到相似尺度。误以为必须手动设计结构- 其实你可以试试 2-3-1 或 2-4-1往往也能收敛。- 表明 MLP 具有一定的容错性和泛化能力。更进一步这个思想能走多远别小看这个玩具级的例子。它背后的思想影响深远 教学价值最好的入门案例XOR 问题是讲解神经网络非线性能力的“黄金标准”。它短小精悍却完整展示了线性模型的局限非线性变换的力量反向传播的实际流程特征抽象的本质。 工程启示堆叠非线性 强大表达力今天的 ResNet、Transformer其本质依然是“通过多层非线性变换逐步提炼特征”。XOR 是这个理念的最小可行实例。 跨学科意义连接符号与连接主义传统 AI 使用符号逻辑推理而神经网络属于连接主义。XOR 的实现表明神经网络可以从数据中自发学到符号规则。这为“神经符号系统”Neural-Symbolic Systems提供了基础支持——未来 AI 可能既会思考也会感知。⚙️ 硬件启发类脑芯片的设计灵感一些神经形态计算芯片如 IBM TrueNorth正是受此启发试图用模拟电路实现类似神经元的行为直接在硬件层面执行逻辑与学习。如果你在实现过程中遇到了其他挑战欢迎在评论区分享讨论。