感知机是什么?

由几代科学家思想精华积累,终究由Frank Rosenblatt发扬光大的一个计算机体系的概念。

简述原始的定义能够归纳为:

一个像人脑相同通过多方面的学习认知的计算机,这个体系不是依托通过事前编程的确定规矩,而是依托概率计算的方法,通过剖析很多数据得到的计算成果来确保程序的可靠性。以这种方式运作的体系被称为”感知机体系”

简单举例来讲,一个关于判断一张图片是不是猫的Perceptron猫体系,就是通过剖析练习有关于猫的很多的图片数据,从而能够在输入一张新的图片时,Perceptron猫体系程序会奉告你这张图片是不是一个猫(输出分红两类: 是猫 1 或不是猫 0)

现代简化版本概念

Perceptron算法的中心思想是运用一个线性函数,将输入数据映射到一个输出值,然后运用一个阈值函数将该输出值转换为 1 或 0。在学习过程中,Perceptron会主动调整其权重和阈值中心过程,以便正确分类输入数据。

如下图所示

创造一个自己的chatgpt:感知机系统(Perceptron)基础01

其表明的Perceptron体系意义能够理解为:

x1输入值对应的权重为w1

x2输入值对应的权重为w2

当 x1 * w1 + x2 * w2 小于等于阈值(threshold)时Perceptron体系输出 0

当 x1 * w1 + x2 * w2 大于阈值(threshold)时Perceptron体系输出 1

结合具体的与门体系比如阐明,与门体系是一个如下描述的体系

与门体系的的输入只能是0或1,输出是0,1,有两个输入值即 x1 ,x2,假如两个输入都是1,则输出为1,否则都输出0,即下图所示

创造一个自己的chatgpt:感知机系统(Perceptron)基础01

那么对应的权重值 w1, w2,阈值z能够是 (1,1,1)或其他任意满意以上体系规则的值

这是通过人类大脑思考得到的权重以及阈值,怎么通过程序去实现主动找到准确的阈值和权重值呢?

首要,咱们将运用JavaScript编写一个Perceptron类,该类将具有以下方法:

  • constructor:用于随机初始化权重和阈值
  • train:用于练习Perceptron,调整其权重和阈值以得到正确的输出值
  • guess:用于预测输入数据的类别
class Perceptron {
  constructor(numInputs) {
    this.weights = new Array(numInputs);
    for (let i = 0; i < numInputs; i++) {
      // 随机初始化 x1 x2权重值
      this.weights[i] = Math.random() * 2 - 1;
    }
    // 随机初始化阈值 z
    this.threshold = Math.random() * 2 - 1;
  }
  train(inputs, target) {
    let guess = this.guess(inputs);
    let error = target - guess;
    for (let i = 0; i < this.weights.length; i++) {
      // 纠正权重值
      this.weights[i] += error * inputs[i];
    }
    // 纠正阈值
    this.threshold += error;
  }
  guess(inputs) {
    let sum = 0;
    for (let i = 0; i < this.weights.length; i++) {
      sum += inputs[i] * this.weights[i];
    }
    return sum > this.threshold ? 1 : 0;
  }
}

假如咱们不练习,直接揣度

let andPerceptron = new Perceptron(2);
andPerceptron.train([1, 1]); // 回来0 不是咱们想要的成果

通过10000次练习,很容易主动揣度出正确的权重值以及阈值

let andPerceptron = new Perceptron(2);
// 练习AND门
for (let i = 0; i < 10000; i++) {
  // 四种状况正确的数据揣度
  andPerceptron.train([0, 0], 0);
  andPerceptron.train([0, 1], 0);
  andPerceptron.train([1, 0], 0);
  andPerceptron.train([1, 1], 1);
}
// 测试AND门
console.log(andPerceptron.guess([0, 0])); // 0
console.log(andPerceptron.guess([0, 1])); // 0
console.log(andPerceptron.guess([1, 0])); // 0
console.log(andPerceptron.guess([1, 1])); // 1

距离创造自己的chatgat迈出了第一步,也是最重要的一步,欢迎点赞收藏