JavaScript之机器学习1:Tensorflow.js

目录

  • 1. 什么是Tensorflow.js?
  • 2. 什么是机器学习?
  • 3. 为什么要用机器学习?
  • 4. 机器学习如何运作?
  • 5. 什么是神经网络?
  • 6. 什么是神经网络的训练?
  • 7. 如何训练神经网络?

1. 什么是Tensorflow.js?

  • TensorFlow.js是机器学习(Machine Learning)TensorFlow框架的JavaScript版本;

  • 通过TensorFlow.js,可以让浏览器也进行机器学习;

  • Tensorflow.js的应用场景有:你猜我画,淘宝美妆,图片识别,语音识别等等;

JavaScript之机器学习1:Tensorflow.js_第1张图片再不赶紧学,就追不上时代的步伐了啊!!!

2. 什么是机器学习?

  • 机器学习是对能通过经验自动改进的计算机算法的研究
  • 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准

举例:线性回归

根据图中这些圆点的位置(x,y),用一条线近似表示;
比如,青少年的身高体重比例,来判断你是正常/肥胖/偏瘦
JavaScript之机器学习1:Tensorflow.js_第2张图片

举例:逻辑回归

下图有蓝色的点和黄色的点,我们通过它们的位置,画出一条线,将它们大致分开;
后面给出一个新的点,我们就可以大致判断它是蓝色的点还是黄色的点;
JavaScript之机器学习1:Tensorflow.js_第3张图片

举例:图片分类

我们准备大量不同类型的图片,让机器去学习它们的特征;
然后给机器一张图片,它就可以根据图片的特征来判断它最有可能是什么类型的图片;
JavaScript之机器学习1:Tensorflow.js_第4张图片

举例:语音识别

给机器各种声音数据和它们的标签,让机器去学习它们的特征;
例如:苹果的语音助手Siri

3. 为什么要用机器学习?

  • 有些棘手的问题只能用机器学习,无法通过传统的编程方法来解决
  • 获取数据比编写规则更加容易
  • GPU等计算能力的显著提升(机器学习会消耗大量的计算)

4. 机器学习如何运作?

  • 神经网络算法(能解决大部分问题)
  • 决策树,支持向量机,贝叶斯分类器,强化学习等等

5. 什么是神经网络?

JavaScript之机器学习1:Tensorflow.js_第5张图片
这里的神经网络,肯定不是指脑袋里的神经网络,而是人工神经网络

人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型。

神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激活函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(weight),神经网络就是通过这种方式来模拟人类的记忆。

举例:相亲
JavaScript之机器学习1:Tensorflow.js_第6张图片
上图所示:

  • 形象对于‘学历/家境/五官/身材’有相应的权重值;
  • ‘学历/家境/五官/身材’ X 相应的权重值 = 形象值
  • ‘形象/品质/有趣/财富’ X 相应的权重值 = 满意度

当然,神经网络不可能会是这么简单的;它还要处理很多问题;

  • 每个人的眼光高低不同,小白给小红打10分,小绿却给小红打1分;(偏置)
  • 有些人认为,学历只要在本科及以上,就没什么差别了,都可以;(非线性变化)
  • 有些人认为,形象得分越高越好;有些人认为形象太好了,可能把时间都花在了形象上,学习的时间就少了,内涵就会差一点或者是安全感变低了,因此形象太高反而减分;(激活函数做一些非线性变化)

大致流程如下:
神经元会让上一层的输入乘上各自的权重,然后相加,再加上偏置,得出来的值经过激活函数算一遍,然后得到输出;

总结:

  • 每个神经元里存储着若干权重(weight),偏置(bias),和一个激活函数(activation)
  • 输入乘上权重加上偏置,经过激活函数得到输出
  • 激活函数用于添加一些非线性变化
  • 神经网络通常包括一个输入层,若干隐藏层,一个输出层
  • 输入层通常不用于计算神经网络的层数

6. 什么是神经网络的训练?

  1. 给大量的输入和输出,算出神经网络里所有神经元的权重和偏置;然后给定新的输入,即可以算出新的输出;
  2. 在机器学习里,输入输出被称为特征和标签,大量输入输出被称为训练集;

7. 如何训练神经网络?

  1. 初始化:随机生成一些权重和偏置;
  2. 计算损失:给定特征,计算出标签,得到它与真实标签相差多少;
  3. 优化:微调权重和偏置,使损失变小;
  4. 不断重复2,3;使损失变为最小;

前向传播与反向传播:

  • 前向传播:将训练数据的特征送入网络,得到标签;
  • 反向传播:计算损失并优化 (微积分里的链式法则)
    简单的理解:为什么要先调整最后一层的参数,因为如果你要调整倒数第二层的参数,你就需要知道倒数第一层的参数往哪个方向才是正确的;例如:调整了最后一层的参数,才能大概知道小明是喜欢有钱的还是形象好的,知道了最后一层的方向,才能调整倒数第二层的参数;

如何计算损失?

  • 使用损失函数(均方误差,对数损失,交叉熵等等)

如何优化?

  • 使用优化器 (随机梯度下降,Adam等等)

so,不要慌,调用第三方库使用就行了,大佬们已经把工具写出来了~
JavaScript之机器学习1:Tensorflow.js_第7张图片

你可能感兴趣的:(JavaScript)