感知机不能表示“异或”

今天翻看感知机相关内容时发现:感知机不能表示异或,为什么呢?

首先,我们分析一下什么是感知机,

所谓感知机就是:假设输入空间(即特征空间)是,输出空间是,输入

### 使用感知机神经网络实现XNOR(异或非)逻辑运算 为了理解如何使用多层感知机来实现 XNOR 逻辑门,先要认识到单层感知机无法处理线性不可分问题,比如 XOR 或者 XNOR 这样的复杂逻辑关系。然而,通过引入至少一层隐藏层,可以有效地解决这类问题。 #### 构建两层神经网络架构 构建一个简单的具有单一隐藏层的前馈神经网络用于模拟 XNOR 功能。该网络由输入层、隐含层以及输出层组成: - 输入层有两个节点 \(x_1\) 和 \(x_2\), 对应于二元布尔变量 A 和 B 的取值; - 隐藏层包含若干个激活函数单元,通常采用 Sigmoid 函数作为激活机制; - 输出层只有一个节点 y, 表示最终预测的结果; 这种结构能够捕捉到数据中的非线性模式并成功区分不同类别[^1]。 #### 初始化权重与偏置项 随机初始化连接各层之间的权值 w 及每层自身的阈值 b 。注意保持初始范围较小以免造成梯度消失现象影响收敛速度。 #### 训练过程概述 利用反向传播算法调整参数直至损失降到最低点,在此期间不断更新 Wij 和 bi 来最小化实际输出同目标标签间的差异。具体来说就是计算代价 J 并求导数 dJ/dW_ij ,进而按照一定比例减去这个变化量完成一次迭代优化操作。 ```python import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z)) class NeuralNetwork: def __init__(self): self.weights_hidden = np.random.randn(2, 2) * 0.01 self.bias_hidden = np.zeros((1, 2)) self.weight_output = np.random.randn(2, 1) * 0.01 self.bias_output = 0 def forward(self, inputs): hidden_layer_activation = sigmoid(np.dot(inputs, self.weights_hidden) + self.bias_hidden) output = sigmoid(np.dot(hidden_layer_activation, self.weight_output) + self.bias_output) return output nn = NeuralNetwork() inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) for i in range(len(inputs)): result = nn.forward([inputs[i]]) >= 0.5 print(f'Input {i}:', inputs[i], 'Output:', int(not bool(result))) ``` 上述代码展示了创建一个多层感知器类 `NeuralNetwork` 实现了正向传递方法 `forward()` , 它接收一对二进制位作为输入,并返回经过Sigmoid变换后的概率估计值。最后一步将这些连续数值转换成离散决策边界以匹配预期的行为——即当且仅当两个输入都相等时给出真值(true),从而实现了 XNOR 操作。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值