注册

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

感知机是什么?


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


简述原始的定义可以概括为:


一个像人脑一样通过多方面的学习认知的计算机,这个系统不是依靠通过事先编程的确定规则,而是依靠概率统计的方法,通过分析大量数据得到的统计结果来确保程序的可靠性。以这种方式运作的系统被称为"感知机系统"


简单举例来讲,一个关于判断一张图片是不是猫的Perceptron猫系统,就是通过分析训练有关于猫的大量的图片数据,从而可以在输入一张新的图片时,Perceptron猫系统程序会告知你这张图片是不是一个猫(输出分成两类: 是猫 1 或不是猫 0)


现代简化版本概念


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


如下图所示


image.png


其表示的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,即下图所示


image.png


那么对应的权重值 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迈出了第一步,也是最重要的一步,欢迎点赞收藏


作者:道可到
来源:juejin.cn/post/7219298341462392889

0 个评论

要回复文章请先登录注册