原文:https://mp.weixin.qq.com/s/7nycshlXqHB22Tb3OulWGw

目录

小学三年级我们就开始学习人工智能了

初中二年级的知识解释机器学习求解思路

初中三年级的知识解释梯度下降法

我们需要更复杂的模型结构

深度学习的数学建模思路

深度学习到底有多牛逼?


对于没有在学校里学习过机器学习和深度学习的同学,在谈论人工智能时,常常会听到一些专有名词,比如机器学习,深度学习、深度神经网络、梯度下降法、BP算法、损失函数、欠拟合、过拟合、训练集、验证集和测试集,经常会被整懵了,别人聊的时候只能在旁边呵呵。想去学习,发现网上书上的介绍全是公式。怎么办?

本文用初中和小学的课本知识,来介绍机器学习和深度学习最本质的含义,希望能帮到这部分同学。

延伸阅读:本文只介绍有监督学习,因为在图像检测、分割和分类,语音识别和自动驾驶应用中,绝大部分实践都是有监督学习;第二,有监督和无监督学习的概念比较容易理解,后续会介绍。

小学三年级我们就开始学习人工智能了

让我们来看一道小学三年级的数学应用题:

一艘轮船4小时行驶了100千米,如果用同样的速度行驶5小时,行驶了多少千米?

我们的计算方法是,首先求出速度v=100/4=25千米/小时。然后,对于任意时间长度的行驶时间,我们都能“预测”出行驶的距离。

如果按“机器运用根据示例数据得出的公式解决特定问题”的定义[1],这就是最简单的机器学习的例子。

图1:模型1

由于我们人为的发明的平均速度这个概念,在这个模型当中只有一个参数,那就是平均速度。上面的我们通过一组示例数据:(4小时,100千米),就学习到了这个参数,这个模型的参数是25千米/小时,它的物理含义是平均速度。

如果我们把上面的解题方法,编写成程序,就是“专家系统”,即运用人类对客观世界的抽象,形成逻辑,用电脑实现,解决预测问题。

逻辑上,一个轮船行驶的距离,还受到其他的参数的影响,比如说水流的速度。

为了让我们的预测更准确,我们把水流速度考虑进去。我们根据物理含义,我们认为这是一个线性方程。记轮船速度为a,水流速度为b,行驶时间为x1,有水流动的时间是x2,行驶距离为y,则

a*x1 + b*x2 = y (公式1)

众所周知,方程个数必须和未知数个数相等,才能够求出唯一的解。所以,要求出a和b,需要有2组观测数据(训练数据)。

注:这是我们在初中一年级学到的知识,二元一次方程。

 

观测值1

观测值2

预测1

行驶时间x1

4

5

3

水流时间x2

0

5

2

行驶距离y

100

150

通过表格中观测值1和2,我们可以求解得到a等于25公里每小时,b等于5公里每小时。

求出a和b后,我们就建立了模型,对于任意的x1和x2,都能“预测”出行驶距离y了。

我们把上面的公式,画成图形的形式。是不是就有点神经网络的图形的感觉了。这是因为它们都用到了“乘加”建模的。

图2:模型2

延伸阅读:在其他介绍机器学习的地方,会看到模型的输入超过2个,且用累加符号∑(西格玛)[2]、或者把输入x用向量矩阵的的表达方法[3],来记录上面的公式,虽然样子变了,但是含义和“公式1”并没有区别。

初中二年级的知识解释机器学习求解思路

在实际生活当中,我们知道,一艘轮船的速度,不可能在任何时刻都是绝对的25千米每小时,实际上,这是我们对现实世界的一个抽象。再加上测量误差,所以,多次测试四小时行驶的距离,大概率会比100 km多一点或少一点。

以模型1为例,只考虑参数“速度”:

 

理想的观测值

初始值

实际观测值1

实际观测值2

实际观测值3

行驶时间x

4

0

4

4

5

行驶距离y

100

0

102.5

99.8

124.5

上面的表格中,3个实际观测值不在一条直线上,这在现实生活中,几乎是肯定会发生的事情。假如我们仍然用直线来拟合行驶时间和行驶距离的关系,那么我们就不能用“小学三年级”的除法和乘法来直接求解了。

我们需要用到“小学五年级”的平方的概念,来求解最优拟合曲线。

图3:3个观测值和模型预测值的误差

如上图所示,我们建模的求解过程,变成了求直线y=v*x【初中二年级的二元一次方程】,使得3个观测值(橙色点)对应的x值在直线上的预测值(绿色点)总体误差最小。所以,我们的目的是求出总体误差最小时的v值,就得到了最优的模型。

总体误差的表达式,最直观的是把3个误差相加,总误差

但是由于误差有的为正数,有的为负数,直接加表达不方便,所以,我们通常用均方差(MSE)表示整体误差:

和初中二年级的方差的公式形式一样。

延伸阅读:我们给这个误差取了个名字,叫“损失函数”。损失函数还有别的变种表示误差,但是概念不变,都是表示误差。有的损失函数会有一些优点,比如易于计算、计算的模型的精度更高。

上图的模型只有一个参数,当参数变成2个时,变成点到平面的误差;以此类推,参数更多时,变成点到多维平面的误差。当模型从线性变成非线性时,可以理解为直线变成了弯曲的线,平面变成了弯曲的平面。含义相同。

初中三年级的知识解释梯度下降法

从上面的解释,我们已经知道,数值分析中,即使只有一个参数的线性模型,也不能用代数方法方程求解了,而是求解误差(即“损失函数”)最小。

那怎么求最小的误差呢?最笨的办法就是遍历,把所有可能的模型参数都计算一遍。然后,每个模型参数都求一遍误差,然后把所有的误差都比较一遍,然后,比出最小的误差,对应的参数就是最好的模型参数。这样理论上是可行的。

现在我们开始计算。我们采用均方差MSE作为总体误差(即“损失函数”):

直线方程为(v为速度,x为时间,y为行驶距离):

误差:

均方差

对MSE和v绘图(即计算出所有v的值对应的MSE),可以得到如下的曲线【实际为初中三年学到的一元二次方程】:

图4:MSE和v绘图(即计算出所有v的值对应的MSE)

图5:放大底部的MSE和v绘图

可以看到,当v在25.1公里/小时附近时,MSE最小。

但是,因为实际使用中,参数超过几百万个是常见的,遍历参数所有可能的值计算量太大了,事实上几乎不可行了。所以呢,我们需要一个更快速的找到最小误差的方法。梯度下降法就是其中一种,是我们常用的,大家最经常听到的。

延伸阅读:即使采用了梯度下降法,一个人脸识别的模型训练需要一周时间也是常见的,这个时长相对业务需求,仍然太长了。另外,人工智能应用到行业的成本,训练占用了很大比例,包含训练的GPU服务器的费用、电费和人工费用。所以,缩短训练时间仍然是AI行业非常值得研究的课题。

为了更快的找到最小的MSE,使用梯度下降法,我们执行以下步骤:

1)随机初始化v,如60公里/小时;

2)在60公里/小时的地方,求曲线的的切线的斜率(即导数,由于导数是高中一年级的学习内容,所以这里称切线的斜率)

图6:梯度下降法的模拟图

如上图,在60公里/小时的地方,切线的斜率是正数,我们可以知道,为了让MSE更小,需要减小v的值;

3)根据步长更新v,在新的v值再计算切线的斜率,根据斜率的正负,决定v增加还是减小;重复该步骤,直到v的变化值小于“停止迭代阈值”;

  1. 设步长为25,则v从60更新为35,所以,我们计算v等于35公里/小时的地方的斜率,如图。我们发现斜率仍然为正数,所以,为了让MSE更小,需要减小v的值;
  2. 设步长为9,则v从35更新为26,所以,我们计算v等于26公里/小时的地方的斜率,如图。我们发现斜率仍然为正数,所以,为了让MSE更小,需要减小v的值;
  3. 如此循环,直到v的变化值小于“停止迭代阈值”0.1公里/小时。

4)输出上一步求得的参数v。

上面的求解参数v的过程,就像是机器自己学习的过程,它不需要理解“速度”的概念,所以我们叫机器学习(Machine Learning)。我们可以把上面的3组观测数据叫“训练集”或“训练数据”,上面的求解过程,叫“训练”。

注意:上面的例子中,第3步的步长25、9是为了简化解释,并不代表真实情况。详见下面的延伸阅读。

延伸阅读:上面的例子中,第3步的步长25、9是为了简化文章,并不代表真实情况。事实上,步长 = 新v值 - 旧v值 = 学习率(learning rate) * 斜率(梯度、gradient)。梯度会由深度学习框架自动计算,学习率需要程序员设置,并且有一定技巧,避免收敛速度慢,或只找到局部最优解。

上面的例子只有一个参数,如果有2个参数,梯度下降法那就是在一个平面内找下降速度最快的方向。

图7:二维平面的梯度下降法示意图

以此类推,如果有大于2个参数,则在多维空间中找到下降速度最快的方向。

我们也可以看到,我们的模型不一定是v*x这样简单的,只要误差(即“损失函数”)可求导,就可以使用梯度下降法找到最小值,求得模型参数。

“可求导”是需要在模型设计时决定的,幸运的是,由于我们实践中,模型结构很大程度会借鉴已有的,所以这点不会成为困扰。

延伸阅读:除了梯度下降法,也可以通过其他的迭代方法比如牛顿法与拟牛顿法。所有学习过唐浩强的《C程序设计》的课本的同学,都学习过牛顿法,因为书中有一道例题,就是牛顿法求解一元二次方程的根。

可以看到,即使用了梯度下降法,机器学习的求解思路仍然是猜和试“可能的参数值”,梯度下降法只不过是让“试”更有方向感一些,不需要把所有可能的参数值都试一遍。

延伸阅读:由于梯度下降法没有摆脱猜和试的本质,这种方法仍然有失败的可能性。有两种失败的可能性,第一种,在训练过程中,误差始终较大,不收敛,甚至越来越大,这种情况我们叫欠拟合(under-fitting),第二种,训练的时候,误差变小、达到要求了,但是去验证集、测试集和实际使用场景上,误差又很大了,这种情况我们叫过拟合(over-fitting)。我们在实际工作中,其实就是和这两种情况战斗。

延伸阅读:当训练过程结束,我们需要怎么测试,来衡量得到的模型是正确的呢?训练结束是不够的,因为有可能是过拟合。训练集就是算法工程师用于训练模型时用的数据集(x、y),验证集是算法工程师用于自测模型精度的数据集,测试集是测试工程师测试模型精度的数据集。训练集、验证集和测试集的内容应该完全不重叠。测试集应该永远不要让算法工程师获得,且尽量代表实际使用场景的数据。

我们需要更复杂的模型结构

我们人类一直是渴望在实际工作当中,通过输入和输出的示例数据,能够建立一个公式,能够在有新的输入的时候,能够“预测”出新的结果。

图8:人工智能算法的黑盒子表示

在初中二年级数学当中,我们把函数表示成为y=f(x),其中x表示自变量,y表示因变量。即x输入,y是输出。机器学习的一个典型任务就是根据已知的x和y的数据,学习这个函数。然后如果有新的输入变量x的时候。我们就能够对y的值进行预测。

图9:人工智能算法用函数表示

比如说在人脸识别中,x是输入的照片,y是照片中的人是谁。

在语音识别中,x输入的人说话的音频信号,y是说话的内容。

在医疗诊断中,x是输入的医疗影像的图片,y是输出的诊断结果。

在电子商务当中,x是输入的用户的过去的行为和数据,y是输出的用户将来感兴趣的内容。

在机器翻译当中,x是输入是源语言,y是输出的目标语言。

这其实就是一个典型的数学建模的过程。

我们人类在不断的探索,在不同应用场景中建模的方式,也在探索一个通用的建模的方式。所以,机器学习现在有很多具体的建模方式,即很多具体的算法。比如上面的轮船行驶速度的例子,我们叫它“线性回归(Linear Regression)”,另外还有支持向量机、Boosting等,详见《机器学习新手必看十大算法》。

这些更复杂的算法出现,是为了更好的解决我们遇到的各个领域、各种复杂度、各种条件下的建模问题。这么多算法,是不是被整懵了?不要紧,即使是经验丰富的数据科学家在尝试不同的算法之前,也无法分辨哪种算法会表现最好。所以,大家遇到问题时,查找自己场景的常用算法,放心多尝试、多和有经验的同学们交流吧。

深度学习的数学建模思路

深度学习,是机器学习的一个子集。深度学习是指是指通过深度神经网络来建立模型f(x),所以,不管深度神经网络长什么样,都是一种建立f(x)的方式。

首先我们来聊一下什么叫神经网络。那下面就是一个感知机例子,它是神经网络的基本组成单元,是典型的一个乘加结构。感知机由两层组成,输入层接收外界输入信号后,乘以权重Wi,并求和(这一层和上面的“模型2”很类似,只不过还引入初始值1*W0,我们将来常称为偏移量b),然后传递给输出层,输出层我们称作激活函数(大家可以理解为,激活函数不是直线,是曲线,工程师和科学家试了试,发现拟合效果不错),会增加模型的表达能力,如能够拟合非线性的曲线。 曾经也有人认为这样的感知器,能够模拟任何函数,后来我们发现,它模拟不了最简单的非线性可分问题--异或问题。

图10:感知机

后来人们发现,在感知机中间,加一些隐藏层扩展神经网络的层数,能够提升他的表达能力。让我们看一个经典的神经网络。

图11:一个经典的神经网络

现在我们常见的神经网络,有几百层。但是无论这些神经网络,它有几百层几千层,还是有各种各样的网络结构,但本质上,都是跟上面的机器学习的概念是类似的,都是建模,代表了图中的黑盒子。深度神经网络的优势是函数表达能力更强,在性能上,远超过非深度神经网络的效果。

图12:流行的网络结构和出现的年份(AlexNet、VGG、GoogleNet)

图13:流行的网络结构和出现的年份(Residual Net)

那到底多深才可以称作深度神经网络呢?通常,只要隐藏层超过或等于2层,就可以认为是“深度神经网络”,即隐藏层为1层的为“浅层神经网络”。

同时,从我们实际使用的深度神经网络来看,隐藏层通常远超过2层。

延伸阅读:为什么深度神经网络没有在2012年之前出现呢?第一,得益于Hinton的实验室长期的技术积累,AlexNet算法包含多项技术改进,而在这之前,全球已经很少有人在研究神经网络了;第二,作者编写代码,实现了AlexNet在GPU上加速,计算速度缩短了10倍量级。AlexNet大获成功,掀起了卷积神经网络的研究热潮。

延伸阅读:能否通过加深网络不断提升效果吗?答案是现在不能。现在最深的神经网络效果并不是最好的。谷歌发表于 ICML 2019的 EfficientNet的论文中指出,更大的网络具有更大的宽度、深度或分辨率,往往可以获得更高的精度,但精度增益在达到80%后会迅速饱和,这表明了只对单一维度进行扩张是有局限性的。

深度神经网络为什么受关注,那是因为它的效果真的提升了很多。

深度学习到底有多牛逼?

最早让人们意识到深度学习在机器学习当中那么牛逼,是Alex在2012年参加ImageNet挑战赛,在这个比赛当中,让他得了第1名,而且比其他结构好了很多。Alex第一次采用了深度神经网络,之后,大家可以看到随着新网络出现,错误率不断下降,并且从2015年开始在测试集中比人类的表现更好。

紧接着人们开始把深度学习,用在语音识别、自然语言处理等各个方面,而且这种处理的结果都碾压了以前的算法的结果。

可以这么说,就是因为深度学习效果好,所以才会有深度学习热,这个行业才这么火。什么都别说,我就是效果比之前好太多了。

再举几个例子:

  1. 在语音识别上,下图是IBM的的语音识别字错误率这几年的一个数字,2014年开始有大幅下降。

注:CTS和BN是2个测试集,CTS是conversational telephone speech,BN是broadcast news。

在语音合成领域,2018年5月8日,Google推出了WaveNet,语音合成的效果大幅度提升:

延伸阅读:为什么深度神经网络的建模效果好呢?一个最原始粗暴的拟合任意函数的思路,是将函数切成很多段线性函数,之后用逻辑门控制当x在哪一个区间时,某些逻辑门被激活,对应的线性函数的权重w与偏移量b在逻辑门的包裹下变成非0,计算出y在这一段的输出值。另外有一种解释是,在二维空间,神经网络能够模拟出任意高度、任意位置、任意宽度的矩形函数,当无数个这样不同高度、不同位置、不同宽度的矩形函数堆叠在一起就能近似出任意函数;更多维空间类似,详见参考资料[4]。

最后,我们把上面提到的概念画到一个图中:

参考资料:

  1. 一个专题让你轻松入门机器学习  https://36kr.com/topics/437

  2. 深度神经网络(DNN)   https://zhuanlan.zhihu.com/p/29815081

  3. 线性回归方程   https://baike.baidu.com/item/线性回归方程/7198720

  4. 神经网络为什么可以(理论上)拟合任何函数?   https://www.zhihu.com/question/268384579/answer/564137244

理解人工智能算法,初中数学知识就够了相关推荐

  1. 人工智能要学习哪些数学知识?

    近些年,随着人工智能的又一次崛起,越来越多的人选择加入人工智能的学习行列.在学习人工智能的时候,我们首先需要学习和掌握一定的数学知识.可能会有人问了,人工智能要学习哪些数学知识呢?大致来讲就是三大核心 ...

  2. FE之DR之线性降维:PCA/白化、LDA算法的数学知识(协方差矩阵)、相关论文、算法骤、代码实现、案例应用等相关配图之详细攻略

    FE之DR之线性降维:PCA/白化.LDA算法的数学知识(协方差矩阵).相关论文.算法骤.代码实现.案例应用等相关配图之详细攻略 目录 PCA 1.PCA的数学知识 1.协方差矩阵计算 2.PCA算法 ...

  3. 人工智能的学习,需要学习哪些算法和数学知识呢?需要什么学历?

    https://www.toutiao.com/a6661754579887063566/ 根据<人工智能影响力报告>显示: 人工智能科学家主要毕业于清华大学.中国科学院.中国科技大学.麻 ...

  4. 熬了几个通宵,终于把初中到大学的数学知识梳理完了(学习算法必备数学知识)

    作者简介:阿里巴巴高级技术专家,一直关注前端和机器学习邻域相关技术,在知乎和微信公众号的"全栈深入"分享深度硬核技术文章. 下面的基础数学知识涉及很多数学公式,这些公式编辑起来累S ...

  5. AES算法相关数学知识 - 素域学习

    在AES算法中的MixColumn层中会用到伽罗瓦域中的乘法运算,而伽罗瓦域的运算涉及一些数学知识如下: 素域 有限域有时也称伽罗瓦域,它指的是由有限个元素组成的集合,在这个集合内可以执行加.减.乘和 ...

  6. 算法基础课-数学知识

    数学知识 第四章 数学知识 数论 质数 约数 欧拉函数 欧拉定理与费马小定理 拓展欧几里得定理 裴蜀定理 中国剩余定理 快速幂 高斯消元 求组合数 卡特兰数 容斥原理 博弈论 Nim游戏 SG函数 第 ...

  7. 关系代数的自然连接符号_初中数学知识清单之代数式的认识

    知识点1:代数式的认识 定义:用运算符号,如+.-.×.÷等,将数或者表示数的字母连接起来,所得的式子叫做代数式(单独的一个数字或者字母也叫做代数式).例如:3+2C.ab.3a等. 注意:1.代数式 ...

  8. 初中数学知识遗忘记录(持续更新中)

      概念解释 图示 旋转中心对称 把一个图形绕着某一点旋转180度,如果它能够和另一个图形重合   轴对称   余角 果两个角的和是直角,那么称这两个角"互为余角"(complem ...

  9. acwing算法基础课数学知识关于质数的笔记

    质数 1.质数和合数是针对所有大于1的 "自然数" 来定义的(所有小于等于1的数都不是质数). 2.所有小于等于1的整数既不是质数也不是合数. 3.质数和素数都是同一种性质,只是叫 ...

最新文章

  1. MySQL 一个库中表数量是否有限制?
  2. matlab cell,fix,floor,round取整的几种方式
  3. [css] 怎么让英文单词的首字母大写?
  4. 【转】dcmtk程序包综述(1)!!!!!!
  5. MTK:GPIO模式与设置
  6. 讲座资源:ASP.NET AJAX 体验
  7. 一些嵌入式开发有用的github上的开源代码库
  8. 大咖分享|汪国强:数字化风控下,数据资产如何助力企业降本增效?
  9. MacBook在任意文件夹目录打开终端
  10. Linux Intel 无线网卡Wifi+蓝牙
  11. sqlmap之sql注入(二)
  12. 约8937亿元:台积电创下台湾企业市值最高纪录
  13. happybase对hbase数据库的基本操作
  14. linux遇到nul字符,linux TXT文件操作 '^@ ' 'NUL' 符号乱码问题
  15. python系统编程培训
  16. 阿龙的学习笔记---python相关杂七杂八的记录
  17. 工作了这么长时间,是不是非用macbook pro不可呢?
  18. 首台android手机,黑莓首台Android系统曲面屏手机Priv 真机和视频曝光
  19. 【Redis高级应用总结】
  20. SAP 委外加工会计分录

热门文章

  1. 2022年如何寻找外链资源?
  2. 《C陷阱和缺陷》总结
  3. 人员不足、供应链断裂,危机之下制造业该如何自救?
  4. 条形码识别(4)——校验
  5. 9.JS面向对象补充
  6. Windows 10 系统设置系统环境变量和用户环境变量
  7. 用什么软件测试mate9的闪存_华为mate9手机闪存测试工具
  8. F.unfold运行解析
  9. 力科示波器重装系统教程 LECROY示波器(型号wave runner 640Zi)重装操作系统教程 力科示波器卡死/死机/系统崩溃 重装系统
  10. unity3d 飞碟游戏