目录
1. 什么是Tensorflow.js?
-
TensorFlow.js是机器学习(Machine Learning)TensorFlow框架的JavaScript版本;
-
通过TensorFlow.js,可以让浏览器也进行机器学习;
-
Tensorflow.js
的应用场景有:你猜我画,淘宝美妆,图片识别,语音识别等等;
再不赶紧学,就追不上时代的步伐了啊!!!
2. 什么是机器学习?
- 机器学习是对能通过经验自动改进的计算机算法的研究
- 机器学习是用数据或以往的经验,以此优化计算机程序的性能标准
举例:线性回归
根据图中这些圆点的位置(x,y),用一条线近似表示;
比如,青少年的身高体重比例,来判断你是正常/肥胖/偏瘦
举例:逻辑回归
下图有蓝色的点和黄色的点,我们通过它们的位置,画出一条线,将它们大致分开;
后面给出一个新的点,我们就可以大致判断它是蓝色的点还是黄色的点;
举例:图片分类
我们准备大量不同类型的图片,让机器去学习它们的特征;
然后给机器一张图片,它就可以根据图片的特征来判断它最有可能是什么类型的图片;
举例:语音识别
给机器各种声音数据和它们的标签,让机器去学习它们的特征;
例如:苹果的语音助手Siri
3. 为什么要用机器学习?
- 有些棘手的问题只能用机器学习,无法通过传统的编程方法来解决
- 获取数据比编写规则更加容易
- GPU等计算能力的显著提升(机器学习会消耗大量的计算)
4. 机器学习如何运作?
- 神经网络算法(能解决大部分问题)
- 决策树,支持向量机,贝叶斯分类器,强化学习等等
5. 什么是神经网络?
这里的神经网络,肯定不是指脑袋里的神经网络,而是人工神经网络
人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型。
神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激活函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(weight),神经网络就是通过这种方式来模拟人类的记忆。
举例:相亲
上图所示:
- 形象对于‘学历/家境/五官/身材’有相应的权重值;
- ‘学历/家境/五官/身材’ X 相应的权重值 = 形象值
- ‘形象/品质/有趣/财富’ X 相应的权重值 = 满意度
当然,神经网络不可能会是这么简单的;它还要处理很多问题;
- 每个人的眼光高低不同,小白给小红打10分,小绿却给小红打1分;(偏置)
- 有些人认为,学历只要在本科及以上,就没什么差别了,都可以;(非线性变化)
- 有些人认为,形象得分越高越好;有些人认为形象太好了,可能把时间都花在了形象上,学习的时间就少了,内涵就会差一点或者是安全感变低了,因此形象太高反而减分;(激活函数做一些非线性变化)
大致流程如下:
神经元会让上一层的输入乘上各自的权重,然后相加,再加上偏置,得出来的值经过激活函数算一遍,然后得到输出;
总结:
- 每个神经元里存储着若干权重(weight),偏置(bias),和一个激活函数(activation)
- 输入乘上权重加上偏置,经过激活函数得到输出
- 激活函数用于添加一些非线性变化
- 神经网络通常包括一个输入层,若干隐藏层,一个输出层
- 输入层通常不用于计算神经网络的层数
6. 什么是神经网络的训练?
- 给大量的输入和输出,算出神经网络里所有神经元的权重和偏置;然后给定新的输入,即可以算出新的输出;
- 在机器学习里,输入输出被称为特征和标签,大量输入输出被称为训练集;
7. 如何训练神经网络?
- 初始化:随机生成一些权重和偏置;
- 计算损失:给定特征,计算出标签,得到它与真实标签相差多少;
- 优化:微调权重和偏置,使损失变小;
- 不断重复2,3;使损失变为最小;
前向传播与反向传播:
- 前向传播:将训练数据的特征送入网络,得到标签;
- 反向传播:计算损失并优化 (微积分里的链式法则)
简单的理解:为什么要先调整最后一层的参数,因为如果你要调整倒数第二层的参数,你就需要知道倒数第一层的参数往哪个方向才是正确的;例如:调整了最后一层的参数,才能大概知道小明是喜欢有钱的还是形象好的,知道了最后一层的方向,才能调整倒数第二层的参数;
如何计算损失?
- 使用损失函数(均方误差,对数损失,交叉熵等等)
如何优化?
- 使用优化器 (随机梯度下降,Adam等等)
so,不要慌,调用第三方库使用就行了,大佬们已经把工具写出来了~