共计 1692 个字符,预计需要花费 5 分钟才能阅读完成。
Javascript 是我的“母语”,用它来学习人工智能,记得更可靠。
学习人工智能门槛高不高?我入门花了 2 个月工夫,学习了 python、微积分,才大略弄懂了深度学习的基本原理,的确让人头大,不过当初回过头想想,其实基本原理是没这么难的。
通过我的消化之后,表达出来的人工智能的流程就是: 有一些数据,假如这些数据遵循某种法则,然而这个法则里的具体参数是未知的,让电脑屡次猜想这些参数的值,并从中找到误差最小的那组参数,就能够对新的数据进行预测 。
比方有一组身高 x、年龄 y 的数据:
arr = [{x: 10, y: 131}, | |
{x: 11, y: 135}, | |
{x: 12, y: 139}, | |
{x: 13, y: 145}, | |
] |
年龄越大,身高越高呗,所以假如身高和年龄遵循的法则是:
y = kx + b
k 和 b 是多少,电脑是个学渣,看了公式和数据一脸懵逼,那就瞎猜一下吧。
k = 10 | |
b = 15 | |
则 | |
10*10 + 15 = 115 | |
10*11 + 15 = 125 | |
10*12 + 15 = 135 | |
10*13 + 15 = 145 |
看这个瞎猜和理论的值差异是多少,咱们中学学过一个评估的形式,叫做方差,这里用相似的形式来评估:
let y0Arr = [131, 135, 139, 145] | |
let y1Arr = [115, 125, 135, 145] | |
let diff = 0 | |
y0Arr.forEach((y0, index) => {let y1 = y1Arr[index] | |
diff += Math.pow(y1 - y0, 2) // (y1 - y0)² | |
}) | |
diff = diff / y0Arr.length | |
// diff = 93 |
diff 评估进去是 93,是大了还是小了,电脑学渣也不太分明,所以电脑须要进行更多的猜想,从所有猜想中取 diff 最小时的 k 和 b,当成最终值。
用代码残缺得实现就是:
model = {xArr: [10, 11, 12, 13], | |
y0Arr: [131, 135, 139, 145], | |
k: 10, // 参数 1 | |
b: 15, // 参数 2 | |
// 损失函数:评估误差用的 | |
getDiff (k, b) {let y1Arr = this.xArr.map(x => this.getY(x, k, b)) | |
let diff = 0 | |
this.y0Arr.forEach((y0, index) => {let y1 = y1Arr[index] | |
diff += Math.pow(y1 - y0, 2) // (y1 - y0)² | |
}) | |
diff = diff / this.y0Arr.length | |
return diff | |
}, | |
// 法则的公式 | |
getY(x, k, b) {return k * x + b}, | |
// 训练:让电脑瞎猜,理论开发中不是像以下代码这样猜的,然而尽管伎俩不同,原理却是一样的 | |
learn () { | |
// 让 k 和 b 别离取 1 到 100 | |
let kArr = Array.from(Array(100), (v,i) => i + 1) | |
let bArr = Array.from(Array(100), (v,i) => i + 1) | |
let diffs = [] | |
kArr.forEach(k => { | |
bArr.forEach(b => { | |
diffs.push({diff: this.getDiff(k, b), // 统统计算一遍,算出 diff | |
k: k, | |
b: b | |
}) | |
}) | |
}) | |
let result = {diff: Infinity} | |
diffs.forEach(d => {if (d.diff < result.diff) {result = d // 找出最小的 diff} | |
}) | |
console.log(result.diff) | |
this.k = result.k | |
this.b = result.b | |
} | |
} | |
model.learn() | |
console.log(model.k, model.b) | |
console.log(model.y0Arr) | |
console.log(model.xArr.map(x => model.getY(x, model.k, model.b))) |
最初,求得
k = 5 | |
b = 80 | |
y0Arr = [131, 135, 139, 145] | |
y1Arr = [130, 135, 140, 145] |
来试试预测个 14 岁的身高
y = kx + b | |
y = 5 * 14 + 80 | |
y = 150 |
150cm 很正当,这就是人工智能,带着从这里学到的常识,去开发人脸识别吧,呵呵🤪
都看到这里了,给个赞好不好???
正文完
发表至: javascript
2022-05-14