乐趣区

关于javascript:5分钟带你通过Javascript了解人工智能的基本原理

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 很正当,这就是人工智能,带着从这里学到的常识,去开发人脸识别吧,呵呵🤪

都看到这里了,给个赞好不好???

退出移动版