1.人工智能、机器学习和深度学习的区别与联系
人工智能(Artificial Intelligence)
人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。“人工智能”是“一门技术科学”,它研究与开发的对象是“理论、技术及应用系统”,研究的目的是为了“模拟、延伸和扩展人的智能”。我们现在看到的貌似很高端的技术,如图像识别、NLP,其实依然没有脱离这个范围,就是“模拟人在看图方面的智能”和“模拟人在听话方面的智能”,本质上和“模拟人在计算方面的智能”没啥两样,虽然难度有高低,但目的是一样的——模拟、延伸和扩展人的智能。另外,人工智能在50年代就提出了。
机器学习
随着人对计算机科学的期望越来越高,要求它解决的问题越来越复杂,已经远远不能满足人们的诉求了。于是有人提出了一个新的思路——能否不为难码农,让机器自己去学习呢?
机器学习就是用算法解析数据,不断学习,对世界中发生的事做出判断和预测的一项技术。研究人员不会亲手编写软件、确定特殊指令集、然后让程序完成特殊任务;相反,研究人员会用大量数据和算法“训练”机器,让机器学会如何执行任务。这里有三个重要的信息:1、“机器学习”是“模拟、延伸和扩展人的智能”的一条路径,所以是人工智能的一个子集;2、“机器学习”是要基于大量数据的,也就是说它的“智能”是用大量数据喂出来的;3、正是因为要处理海量数据,所以大数据技术尤为重要;“机器学习”只是大数据技术上的一个应用。常用的10大机器学习算法有:决策树、随机森林、逻辑回归、SVM、朴素贝叶斯、K最近邻算法、K均值算法、Adaboost算法、神经网络、马尔科夫。
深度学习
相较而言,深度学习是一个比较新的概念,严格地说是2006年提出的。深度学习是用于建立、模拟人脑进行分析学习的神经网络,并模仿人脑的机制来解释数据的一种机器学习技术。它的基本特点,是试图模仿大脑的神经元之间传递,处理信息的模式。最显著的应用是计算机视觉和自然语言处理(NLP)领域。显然,“深度学习”是与机器学习中的“神经网络”是强相关,“神经网络”也是其主要的算法和手段;或者我们可以将“深度学习”称之为“改良版的神经网络”算法。深度学习又分为卷积神经网络(Convolutional neural networks,简称CNN)和深度置信网(Deep Belief Nets,简称DBN)。其主要的思想就是模拟人的神经元,每个神经元接受到信息,处理完后传递给与之相邻的所有神经元即可。
总结:人工智能是一个很老的概念,机器学习是人工智能的一个子集,深度学习又是机器学习的一个子集。机器学习与深度学习都是需要大量数据来“喂”的,是大数据技术上的一个应用,同时深度学习还需要更高的运算能力支撑,如GPU。
2.机器学习重要术语
什么是(有监督的)机器学习?
- ML 系统学习如何组合输入对从未见过的数据进行有用的预测。
什么是标签?
- 标签就是我们要预测的东西-即在线性回归中的y,变量标签可以是小麦的未来价格、图片中显示的动物种类、音频剪辑的含义,或者几乎任何东西。
什么是特征?
- 特征是输入可变的
x,
简单线性回归变量。一个简单的机器学习项目可能使用单个特征,而更复杂的机器学习项目可能使用数百万个特征
什么是模型?
模型定义了特征和标签之间的关系。例如,垃圾邮件检测模型可能会将某些特征与“垃圾邮件”密切相关。让我们强调模型生命的两个阶段:
-
训练意味着创建或学习模型。也就是说,您将模型标记为示例,并使模型能够逐步学习特征和标签之间的关系。
-
推理意味着将经过训练的模型应用于未标记的示例。也就是说,您使用经过训练的模型进行有用的预测 (
y'
)
回归 vs . 分类
一个回归模型预测连续值。例如,回归模型做出的预测可以回答如下问题:
-
加州房子的价值是多少?
-
用户点击该广告的概率是多少?
一个分类模型预测离散值。例如,分类模型做出回答如下问题的预测:
-
给定的电子邮件是垃圾邮件还是非垃圾邮件?
-
这是狗、猫还是仓鼠的图像?
线性回归
1.1 什么是回归分析
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线/线来拟合数据点,目标是使曲线到数据点的距离差异最小。
1.2 线性回归
线性回归是回归问题中的一种,线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w和b。通长我们可以表达成如下公式:
y^为预测值,自变量x和因变量y是已知的,而我们想实现的是预测新增一个x,其对应的y是多少。因此,为了构建这个函数关系,目标是通过已知数据点,求解线性模型中w和b两个参数。
1.3 目标/损失函数
求解最佳参数,需要一个标准来对结果进行衡量,为此我们需要定量化一个目标函数式,使得计算机可以在求解过程中不断地优化。
针对任何模型求解问题,都是最终都是可以得到一组预测值y^ ,对比已有的真实值 y ,数据行数为 n ,可以将损失函数定义如下:
即预测值与真实值之间的平均的平方距离,统计中一般称其为MAE(mean square error)均方误差。把之前的函数式代入损失函数,并且将需要求解的参数w和b看做是函数L的自变量,可得
现在的任务是求解最小化L时w和b的值,
即核心目标优化式为
求解方式:
1)梯度下降(gradient descent)
梯度下降核心内容是对自变量进行不断的更新(针对w和b求偏导),使得目标函数不断逼近最小值的过程
下面是线性回归的简单代码
import * as tfvis from '@tensorflow/tfjs-vis'
import * as tf from '@tensorflow/tfjs'
window.onload = async ()=>{
const xs = [1,2,3,4];
const ys = [1,3,5,7]
tfvis.render.scatterplot(
{name:'线性回归训练集'},
{values: xs.map((x,i)=>({x,y:ys[i]}))},
{xAxisDomain:[0,5],yAxisDomain:[0,8]},
)
//初始化模型
// 连续的模型 这一层的输入一定是上一层的输出
const model = tf.sequential()
//添加一层 全链接层 x乘一个再加一个
//1个神经元 dense线性回归常用的神经网络This layer implements the operation: output = activation(dot(input, kernel) + bias)
model.add(tf.layers.dense({units:1,inputShape:[1]}))
//设置损失函数均方误差 设置随机梯度下降的减少损失方法
model.compile({loss:tf.losses.meanSquaredError,optimizer:tf.train.sgd(0.1)})
//1.转化为tensor
const inputs = tf.tensor(xs);
const labels = tf.tensor(ys);
await model.fit(inputs,labels,{
batchSize: 4,
epochs:200,
callbacks:tfvis.show.fitCallbacks(
{name: '训练过程'},
//想看什么的图像 损失函数的
['loss']
)
})
const output = model.predict(tf.tensor([5]))
//转成数字
alert('如果x为5,那么y为'+output.dataSync()[0])
}