机器学习——MP神经元 McCulloch and Pitts neuron | 感知机网络 Perceptron network | 感知机算法 Perceptron Learning Algori

参考文章:
一看就懂的感知机算法PLA(基础概念)
感知机 PLA(Perceptron Learning Algorithm)(加深理解)

McCulloch and Pitts 神经元

基本原理如下图:
机器学习——MP神经元 McCulloch and Pitts neuron | 感知机网络 Perceptron network | 感知机算法 Perceptron Learning Algori
由McCulloch和Pitts于1943年发表,简单模拟了神经元的反应流程,包括:

  • 多个带有权重的输入wi×xiw_i×x_i,相当于「突触」
    • xix_i是输入值,表示外界的刺激。
    • wiw_i表示权重,表示刺激的不同强度。
  • 一个转换函数\sum,相当于「汇聚电信号的细胞膜」
    • x=inwixi\sum_{x=i}^nw_ix_i也就是对所有带权重的输入进行简单的求和,将多个值合并为1个值。
  • 一个阈值(threshold)θ\theta,也称**函数,决定了外界刺激要达到什么程度神经元才会被**
    • 当刺激大于阈值θ\theta时,神经被**;否则没有。

根据以上信息我们可以得到一个基本的神经元表示:
线h=x=inwixiy=g(h)  {1        if  hθ0        if  h<θ\begin{array}{l}线性求和:h=\sum_{x=i}^nw_ix_i\\\\阈值比较:y=g(h)\;\left\{\begin{array}{l}1\;\;\;\;if\;h\geq\theta\\0\;\;\;\;if\;h<\theta\end{array}\right.\end{array}

由线性相加和阈值比较两个过程组成,最后根据比较结果将样本划分为正负两类。

感知机网络 Perceptron network

感知机网络是由多个相互独立的MP神经元组成(对于每个神经元,只有输入值是相同的,其他都不同,包括输入值对应的各个权重wiw_i

  1. 因此权值变为wijw_{ij}ii表示输入的索引,jj表示神经元的索引
  2. 因为感知机有多个神经元,所以我们也将得到相同数量的输出,比如5个神经元输出集合y=(1,1,1,0,1)y=(1,1,1,0,1)
  3. 因为是监督学习,我们还有一个正确的结果集t=(1,1,1,1,0)t=(1,1,1,1,0),两者比较就能够发现出错的神经元(这里是y4,y5y_4,y_5出错)。
  4. 对于出错的神经元kk,我们需要改变它的权重wikw_{ik}(也就是算法学习的过程),先给出完整公式wij(new)=wij(old)η(yjkj)×xiw_{ij}(new)=w_{ij}(old)-\eta(y_j-k_j)×x_i
    1. 首先我们要找到要修改的权重:通过对比输出集yy和正确的结果集tt(步骤2&3),找到出错的神经元kk后,就能知道该神经元的所有权重wikw_{ik}都需要修改。
    2. 然后要判断该权重应该增大还是减小:通过「输出值」减去「正确值」yktky_k-t_k,将得到111或-1。当结果为11时,说明输出太大,wikw_{ik}要减小;反之wikw_{ik}要增大。此时wij(new)=wij(old)(yjkj)w_{ij}(new)=w_{ij}(old)-(y_j-k_j)
    3. 但我们还要决定权重每次变化的程度,于是引入一个新的系数η\eta,表示学习速率(learning rate)。于是公式变成wij(new)=wij(old)η(yjkj)w_{ij}(new)=w_{ij}(old)-\eta(y_j-k_j)
    4. 现在还有一个问题:并非所有的输入值都是正数。在步骤42中,我们希望通过使权值ww减小,进而使该神经元中的每个wxwx都减小。但假如输入中存在负数,那么当权值ww减小时,wxwx_负反而会增大。因此考虑了xx的符号后,得到最终公式wij(new)=wij(old)η(yjkj)×xiw_{ij}(new)=w_{ij}(old)-\eta(y_j-k_j)×x_i。这样还有一个好处就是,不同的权重wijw_{ij}的变化程度都与对应的输入xix_i有关。
  5. 学习速率η\eta是手动输入的,建议取值范围是<0.1,0.4>,太高会导致每当有错误的适合都进行太大的改变,导致感知机网络始终无法稳定下来;而数值太低,则会延长计算时间。
  6. 在感知机网络学习正确模型的过程中,除了考虑修改权重ww,我们还需要考虑修改阈值θ\theta。即,当所有输入都是0的时候,我们只能通过阈值的变化来改变分类结果
    1. 在最开始的神经元的表达式中,将「线性求和」和「阈值比较」合并,得到其中的公式部分y=x=inwixiθy=\sum_{x=i}^nw_ix_i-\theta
    2. 可将θ\theta视为w0w_0,而对应的x0x_0则被固定为1-1(实际上x0x_0可以是任何非0的值,但一旦确定就不能改变,-1可能是最常见的取值)。x0x_0也被称为偏移节点(bias node)或偏移输入。

感知机学习算法 Perceptron Learning Algorithm

  • 初始化所有权重wijw_{ij}为较小的随机数(包括正负)

  • 训练 Training

    • 进行T次迭代,或者直到所有输出都正确
      • 对于每一个输入向量(输入值)
        • 计算每一个神经元的输出值yjy_j
          y=g(x=0mwixi)  ={1,        if      x=0mwixi>00,        if      x=0mwixi0\begin{array}{l}y=g(\sum_{x=0}^mw_ix_i)\;=\left\{\begin{array}{l}1,\;\;\;\;if\;\;\;\sum_{x=0}^mw_ix_i>0\\0,\;\;\;\;if\;\;\;\sum_{x=0}^mw_ix_i\leq0\end{array}\right.\end{array}

        • 更新每一个错误的权重值w_{ij}$

          wij(new)=wij(old)η(yjkj)×xiw_{ij}(new)=w_{ij}(old)-\eta(y_j-k_j)×x_i