• 感知器是一种最简单的神经网络。

  • 它是一个利用单个神经元来完成二分类问题的一个模型并且它也是后续建造更大的网络的基础。

  • 在本教程中,你会探索如何利用python从零开始实现一个感知器。

  • 看完本教程,你应该会了解:

    • 怎么训练感知器的权重
    • 怎么利用感知器进行预测
    • 如何把感知器应用到真实的数据问题当中
  • 让我们开始吧。

概述

  • 本部分主要阐述了感知器的原理和一些实例。

感知器算法

  • 感知器受到了单个神经细胞(也就是神经元)的信息传递的启发。
  • 神经元通过它的树突接受信号,树突会把电信号传到细胞体。
  • 同样的,在感知器当中输入信号是训练数据的样本,然后我们对这些样本进行加权并组合成一个线性公式,这个公式称作activation。
    
    activation = sum(weight_i * x_i) + bias
    
    
  • 然后这个activation就会被一个转化函数转化成一个输出值或者预测值,常见的转化函数是step 转化函数。
    
    prediction = 1.0 if activation >= 0.0 else 0.0
    
    
  • 以上,感知器就是一个二类分类器的分类算法,而它们二类中间是可以用一条直线(或者超平面)分开的。
  • 感知器是和线性回归与逻辑回归做预测是非常相似的。(譬如,输入的权值求和。)
  • 感知器的权值就可以通过随机梯度下降估算的。

随机梯度下降

  • 随机梯度下降是一个通过代价函数的梯度来最小化函数的过程。
  • 梯度的形式是求给定一个点的导数,导数是这个点移动的方向,譬如,向最小值不断接近。
  • 这个优化算法的做法是:每次我们让模型训练一个训练实例。这个模型对这个训练实例进行预测,然后计算训练的误差并更新模型的权重,这样是为了在下次预测时减少误差。
  • 随机梯度下降算法就可以估算到模型的权重集合,然后这个权重是可以对训练数据达到最小的误差的。
  • 对于感知器,每次迭代权重的更新是通过以下这个式子的:
    
    w = w + learning_rate * (expected - predicted) * x
    
    
  • w是要优化的权重,learning_rate就是每次更新的步长(学习率)。(expected-predicted)就是模型根据权重在训练数据上的预测误差,x就是输入。

教程

  • 这个教程分为2个部分
    • 做预测
    • 训练神经网络的权重

      做预测

  • 第一步就是创建一个能够进行预测的函数。
  • 以下就是预测函数的定义predict:第一个权重通常是偏置数值,它是独立的。
    
    def predict(row, weights):
      activation = weights[0]
      for i in range(len(row)-1):
          activation += weights[i + 1] * row[i]
      return 1.0 if activation >= 0.0 else 0.0
    
    
  • 我们可以设计一个小的数据来测试我们的预测函数
    
    X1            X2            Y

2.7810836 2.550537003 0
1.465489372 2.362125076 0
3.396561688 4.400293529 0
1.38807019 1.850220317 0
3.06407232 3.005305973 0
7.627531214 2.759262235 1
5.332441248 2.088626775 1
6.922596716 1.77106367 1
8.675418651 -0.242068655 1
7.673756466 3.508563011 1

+