CivArchive
    ← All articles
    Published May 4, 2024by arcgua

    深度学习笔记 4

    52 views0 reactions1 comments on CivitAI0 collected
    tool guide

    感知器的定义 :

    感知器就好像人的感受器,但是必须大于一定的数值信号才会进行传播,感知器的传播信号只有0和1,信号乘以一定的权重才会向着下一个神经元进行传递。

    感知器模型的数学表示相对直观,它主要由以下几个部分组成:

    1. 输入向量:𝑥=[𝑥1,𝑥2,…,𝑥𝑛]x=[x1​,x2​,…,xn​],这是感知器的输入数据,𝑥1,𝑥2,…,𝑥𝑛x1​,x2​,…,xn​ 是输入特征。

    2. 权重向量:𝑤=[𝑤1,𝑤2,…,𝑤𝑛]w=[w1​,w2​,…,wn​],其中每个 𝑤𝑖wi​ 表示对应输入 𝑥𝑖xi​ 的权重。

    3. 偏置项:𝑏b,一个常数,用于调整输出阈值。

    4. 线性组合:感知器模型首先计算输入向量和权重向量的点积,再加上偏置项。这部分的数学表达式为:

      𝑧=𝑤⋅𝑥+𝑏=∑𝑖=1𝑛𝑤𝑖𝑥𝑖+𝑏z=wx+b=i=1∑nwixi​+b

    感知器的权重表示其重要程度或者可以说是对于下一神经元的影响程度。

    简单逻辑电路

    与门(AND gate):输出仅在所有输入都为1时为1。

    或门(OR gate):输出在至少一个输入为1时为1。

    非门(NOT gate):单输入,输出与输入相反。

    异或门(XOR gate):输出在输入不同时为1。

    与非门(NAND gate):与门的输出取反。

    或非门(NOR gate):或门的输出取反。

    同或门(XNOR gate):异或门的输出取反。

    其中与门、与非门、或门都是可以用线性可分的简单逻辑门

    ### 1. 与门(AND Gate)

    真值表

    | A | B | Y = A AND B |

    |---|---|-------------|

    | 0 | 0 | 0 |

    | 0 | 1 | 0 |

    | 1 | 0 | 0 |

    | 1 | 1 | 1 |

    数学表达式

    - \( Y = A \times B \)

    这是因为AND操作要求所有输入都为1,输出才为1。使用数学乘法可以很好地模拟这种情况。

    ### 2. 或门(OR Gate)

    真值表

    | A | B | Y = A OR B |

    |---|---|------------|

    | 0 | 0 | 0 |

    | 0 | 1 | 1 |

    | 1 | 0 | 1 |

    | 1 | 1 | 1 |

    数学表达式

    - \( Y = \max(A, B) \)

    - 或者可以用逻辑加法:\( Y = A + B - A \times B \)

    这些表达式捕捉到了只要有一个输入为1,输出就为1的OR逻辑。

    ### 3. 异或门(XOR Gate)

    真值表

    | A | B | Y = A XOR B |

    |---|---|--------------|

    | 0 | 0 | 0 |

    | 0 | 1 | 1 |

    | 1 | 0 | 1 |

    | 1 | 1 | 0 |

    数学表达式

    - \( Y = (A + B) \mod 2 \)

    - 或者 \( Y = A \oplus B = (A \land \neg B) \lor (\neg A \land B) \)

    线性可分的逻辑门在设计和分析时更直接简单,它们可以通过线性分类器或单层感知器网络实现。然而,对于非线性可分的逻辑门,如XOR,需要更复杂的多层网络或非线性模型来实现。这也是早期神经网络研究中遇到的一个重要问题,即单层感知器不能解决非线性问题,从而推动了多层网络和反向传播算法的发展。

    与门的代码实现

    def AND(x1,x2)

    x = np.array([0,1])

    w = np.array([0.5,0.5])

    b=-0.7

    tmp = np.sum(w*x) +b

    if tmp <=0

    return 0

    else 1

    与非门的代码实现

    def DAND(x1,x2)

    x = np.array([0,1])

    w = np.array([-0.5,-0.5])

    b=0.7

    tmp = np.sum(w*x) +b

    if tmp <=0

    return 0

    else 1

    或门的代码实现

    def OR (x1,x2)

    x = np.array([0,1])

    w = np.array([1,1])

    b=-0.7

    tmp = np.sum(w*x) +b

    if tmp <=0

    return 0

    else 1

    单层感知器的局限性

    1. 线性可分问题:感知器只能解决线性可分问题,即只有当输入可以通过一条直线或超平面完全分隔时,感知器才能正确分类。对于非线性可分问题,如异或门(XOR)等,感知器无法准确分类。

    2. 单层结构:感知器是单层神经网络,只包含输入层和输出层。这意味着它无法学习复杂的非线性关系,因为它缺乏隐藏层来捕获和表示这些关系。

    3. 局部最优解:在使用简单的学习规则(如感知器学习规则)时,感知器可能会陷入局部最优解,尤其是对于复杂的问题,其学习速度较慢且容易受到初始权重值的影响。

    4. 对数据敏感:感知器对数据的缩放和偏移非常敏感。如果数据没有经过适当的预处理,可能会导致性能下降。

    5. 不适用于连续值输入:感知器通常用于处理二进制输入(0和1),而不适用于连续值输入。

    6. 不适用于处理序列数据:感知器不具备记忆功能,无法处理序列数据,例如自然语言文本或时间序列数据。

    7. 硬阈值激活函数:感知器通常使用硬阈值激活函数,这意味着输出是离散的,而不是连续的,这在某些应用中可能不理想。

    多层感知器

    异或门的代码实现

    def XOR(x1,x2)

    s1 = NAND (x1,x2)

    s2 = OR(x1,x2)

    y = AND(s1,s2)

    return y

    代码资料和学习资料来源 深度学习入门