2026-01-01 异或门与感知机

与门(AND Gate)

逻辑规则:全 1 出 1,有 0 出 0

输入 A 输入 B 输出 Y = A · B
0 0 0
0 1 0
1 0 0
1 1 1
import numpy as np
def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    return 1

print(AND(0, 0)) # 0
print(AND(1, 0)) # 0
print(AND(0, 1)) # 0
print(AND(1, 1)) # 1

与非门(NAND Gate)

逻辑规则:全 1 出 0,有 0 出 1(与门的取反)

输入 A 输入 B 输出 Y = \overline{A · B}
0 0 1
0 1 1
1 0 1
1 1 0
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    return 1

print(NAND(0, 0)) # 1
print(NAND(1, 0)) # 1
print(NAND(0, 1)) # 1
print(NAND(1, 1)) # 0

或门(OR Gate)

逻辑规则:有 1 出 1,全 0 出 0

输入 A 输入 B 输出 Y = A + B
0 0 0
0 1 1
1 0 1
1 1 1
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    return 1

print(OR(0, 0)) # 0
print(OR(1, 0)) # 1
print(OR(0, 1)) # 1
print(OR(1, 1)) # 1

异或门(XOR Gate)

逻辑规则:相同出 0,相异出 1

输入 A 输入 B 输出 Y = A \oplus B
0 0 0
0 1 1
1 0 1
1 1 0
def XOR(x, y):
    s1 = NAND(x, y)
    s2 = OR(x, y)
    y = AND(s1, s2)
    return y

print(XOR(0, 0)) # 0
print(XOR(1, 0)) # 1
print(XOR(0, 1)) # 1
print(XOR(1, 1)) # 0

感知机(perceptron)

  • 感知机只能表示由一条直线分割的空间(线性空间)
  • 单层感知机不能实现异或门
  • 2层感知机可以实现异或门
  • XOR(x, y) = AND(NAND(x, y), OR(x, y))
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容