【小哈划重点:深度学习是实现机器学习的技术,即人工智能>机器学习>深度学习,最初的深度学习是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并不是一个全新的概念,可大致理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法和激活函数等方面做出相应的调整。】
随着AI产品近年在市场上的热门,AI产品经理也变得抢手了。然而入门AI产品经理除了基本的技能外,还必须具备基础的AI知识。本篇文章,作者将向我们分享基础的AI知识,助你入门了解AI行业。
一、三驾马车
这些年大家都常常听到人工智能有三大马车,即:数据、算法和算力,其实这个是拆解任何一个人工智能项目或者是问题非常有效的方法,大家务必记住这三个要素,缺一不可,我们后面的实战章节会拿来反复进行验证使用。我们接下来就从基础理论看看这三大要素的组成。
1. 数据的构成
数据:任何AI模型训练都需要数据,AI深度学习模型不可能无中生有。包括我们人类的高等智能学习也需要有输入,才能进行输出,因此数据就是AI模型的重中之重。
数据按照用途可分为:训练集(train set)、验证集(validation set)和测试集(test set)。
其中训练集占全部数据集的绝大部分,数量从万级到千万级甚至更多,且对于算法模型来说,一定是数据越多算法模型越好,即可以理解为算法跟人一样“见多识广”,见的数据多了自然模型更加鲁棒和强大。
验证集主要用来调整模型参数从而选择最优模型,验证集可以理解成我们学习时候的教参书,用来验证我们是否对于所学习知识已经掌握;但是最终用来评价模型的好坏是测试集,这部分数据对于模型一定之前是”保密的”,可以理解对于模型要进行一次“考试”。
考试范围包含之前训练集的“知识点“,看看那其中训练集:验证集:测试集=6:2:2;验证集并不是必须的,因此训练集与测试集的比例一般为8:2。
数据按照来源可分为:公开数据集、自建数据集;
人工智能的快速发展与其开源的氛围密不可分,很多大型的组织和机构都愿意把其最新的研究结果的数据开源,供其他人共同研究、推进学术进步。
比如海外的google dataset search、kaggle、data.gov(美国政府)、各种国内外的比赛赛事主办方会开源数据集、包括有一些专业的公司做公开数据集的聚合业务。
对于自建数据集,分为两部分:一是可以通过互联网进行爬取,另一方面可以进行自行采集,除了组织周围同事进行小规模数据采集、通过已有产品埋点回流数据,也可以通过找专业公司组织大规模的采集。
构建自建数据集,需要产品经理与算法同学一同构建数据集的规格specification,即通过分析拆解目标任务,对数据集的构成进行MECE(互相独立、完全穷尽)的拆解,为了更好的拆解,建议大家可以通过构建思维导图的方式来创建。如图1:
人脸关键点数据集构建要求
构建完成数据集要求后,可以进行数据集的试采,通过试采一个完整的被试者,来预估采集项目的完整周期,如果时间远远超于预期时间,是否可以考虑简化数据集的标准、多采集设备并行又或是减少采集人数规模、将数据采集项目分成两期。
由于对于深度学习需要结构化的数据进行训练,因此我们采集完的数据还要同步进行标注。数据标签种类众多,比如分类、拉框、注释、标记(画点)等等。标注之后的结构化数据输入深度学习模型之中才可以进行训练。
很多同学可能觉得这样的操作前期成本太高了,是否可以不标注就进行训练呢?比如最近大火的自监督学习,自监督学习的核心,在于如何自动为数据产生标签。例如输入一张图片,把图片随机旋转一个角度,然后把旋转后的图片作为输入,随机旋转的角度作为标签。
再例如,把输入的图片均匀分割成3*3的格子,每个格子里面的内容作为一个patch,随机打乱patch的排列顺序,然后用打乱顺序的patch作为输入,正确的排列顺序作为label。类似这种自动产生的标注,完全无需人工参与。
但是目前大部分任务,还是需要人类标注(label)大量数据之后再送给机器进行学习。所以之前很多人提到人工智能中都是“人工”这种说法还是十分正确的。
但其实现在很多互联网数据产生的过程中就自带了标签,比如说近些年很火的图片社交网站Instagram,用户上传图片、视频的同时会增加很多#,#美食 #聚餐 #海滩等等,这些其实就是用户自己手动为图片或者视频打标签的过程,省去了统一再打一次标签的过程,Instagram的后台模型就可以利用每天用户上传分享的海量数据对图片、场景进行分类、检测、识别,甚至模型可以理解这张图片代表了什么,看图说话。
反之亦然,可以根据用户的一句话组织相应的素材,一句话成片,图文成片等。这里便是利用了众包的思想,其实除了社交媒体之外,平常大家登陆网站输入验证码的时候会让大家选择下面哪张图片包含“自行车”?其实也是一个人工标签不断帮助模型训练的过程。类似的思路大家可以借鉴并融入到自己产品的设计中。
2. 算法
首先定义一下人工智能、机器学习和深度学习之间的关系。
机器学习直接来源于早期的人工智能领域,机器学习可以定义为一种实现人工智能的方法,传统的算法包括决策树、聚类、贝叶斯分类、支持向量机、EM、Adaboost等等。从学习方法上来分,机器学习算法可以分为监督学习(如分类问题)、无监督学习(如聚类问题)、半监督学习、集成学习、深度学习和强化学习。
而深度学习是实现机器学习的技术,即人工智能>机器学习>深度学习,最初的深度学习是利用深度神经网络来解决特征表达的一种学习过程。
深度神经网络本身并不是一个全新的概念,可大致理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法和激活函数等方面做出相应的调整。
提到算法,我们先了解下计算机视觉任务的分类包括以下种类:
目标识别:物体识别是得到一个原始的图像,任务是给出目标位置和识别物体属于哪个类,另外还有人脸识别,行为识别等;
三维重建:摄像机标定,立体匹配;
图像/视频理解:根据给定图像,给出描述文字等;
深度相机:RGB-D相机,例如手势识别、骨骼跟踪、增强现实等;
视觉导航:视觉SLAM,例如ORB-SLAM;
图像分割:图像分割是一项复杂的任务,目标是将每个像素映射到它的合法类,例如语义分割、实例分割。
而从深度学习来分类,更多的是基于模型的架构进行的区分,包括监督学习和无监督学习:
其中监督学习包括循环网络RNN、CNN、DNN。
RNN适合应用跟序列有关系的任务,比如时间序列,预测股票行情,比如文本序列,其衍生的诸多变体在自然语言处理领域应用广泛,其中LSTM更是在NLP领域鼎鼎大名。
CNN的C代表卷积,是一种很好对目标图像降维的数学运算,主要用于提取特征,因此很多图像分类任务应用较多。
DNN会在搜索中进行应用,可以对于转化率进行预估,这个数据是互联网产品应用频率最高的一个指标,且其转化率预估对应的输入特征包含各个不同域的特征。
如用户域,宝贝域,query域等,各种特征的维度都能高达千万,甚至上亿级别,如何在模型中处理超高维度的特征,成为了一个亟待解决的问题,如何考虑多维高阶信息的同时兼顾计算量和效率,DNN是一个非常合适的方法。
深度神经网络通过构造稀疏id特征的稠密向量表示,使得模型能有更好的泛化性,同时,为了让模型能更好的拟合大促期间商品特征数据的剧烈变化,在深度网络的最后一层增加商品id类特征,id组合特征和实时的统计量特征,使得整个网络同时兼顾泛化性和实时性的特点。
无监督学习我们提一下最近非常火的GAN(生成对抗网络),通过无监督学习同时训练两个模型,其内在的原理可以化身为西方的博弈论或者是东方的道家思想,我还记得我上信息对抗的第一节课老教授就讲了《道德经》中的“反者道之动,弱者道之用”,这其中的内涵读者可以细品。
简单的说,GAN训练两个网络:
生成网络用于生成图片使其与训练数据相似
判别式网络用于判断生成网络中得到的图片是否是真的是训练数据还是伪装的数据。生成网络一般有逆卷积层(deconvolutional layer)而判别网络一般就是上文介绍的CNN。
具体方法可以参考下图:
GAN网络结构示例
3. 算力
深度学习算法根据模型的大小以及最后实际应用的场景会选择部署在端侧还是云侧又或是端云结合的方案。
随着智能手机不断的发展,现在端侧的算力也不断提升,比如最新的高通骁龙888处理器,算力可以达到26TOPS,TOPS是算力的单位,即每秒钟进行1T(10的12次方)次操作。
而大家还有印象的是几年前的英伟达显卡还是2000G算力,换算一下只是2TOPS左右,因此可以看到摩尔定律发展下的半导体制程的进步直接影响着深度学习的算力进步。
比如说自动驾驶,特斯拉的每台汽车搭载一个超算中心,具备144TOPS的算力,可以实时处理运算各种复杂的路面情况,道路标识,检测人物和各种车辆,这些是机器视觉的算法都依赖于强大的算力予以支持。
综上,我们可知,端侧的算力具备实时性好、安全性好(离线),但是很大程度上依赖于半导体处理的制程以及能效的利用。
比如说移动端设备手机上就不太可能配备一台算力巨大的超算中心,最核心的一方面就是就是电量有限,算力越高相应的能耗也越高,再一点越大的能耗对应了着需要配备更大体积的电池和运算单元,无论如何这对于人们日常随身携带的物品设定来讲都不是十分合适;
因此人们就把这个算力单元放到了车上,尤其是新能源电车,有充沛的电力、足够的空间、车身配备很多传感器,平常可以一边采集数据,一边输入算力单元进行快速计算,同时还有一位经验丰富的“人类老司机”进行教学。
平时我们开车的行为:打方向盘、踩刹车、加速、变道,下雨天怎么驾驶、夜间、雪天、雾霾天如何驾驶等等都是对于深度学习模型进行一次次人为“标注”监督训练的过程,如此往复,车这个“智能体”就会不断的迭代演进,直到可以替代人,完成自动驾驶。
而以上就是特斯拉AI高级总监Andrej Kaparthy在2019年的特斯拉发布会上提到“影子模式”(shadow mode),了解这背后原理的我当时不禁感叹特斯拉将机器视觉和深度学习的能力发挥到极致,在商业模式上也十分巧妙,将数据、算力和算法在一台车上就形成了闭环,关键是这个车还能进化,越开越”聪明”。
沿着这个思路想下去,如果说未来手机的算力和电力已经到天花板(因为重量一般在200g左右,屏幕尺寸6-7寸左右,算力上限和能耗上限可知),而车才是离我们最近的算力单元,那么未来真正了解你的是车,他可以存储你日常行为的数据,具备强大的算力可以不断优化模型,手机最后是否只是沦为一个车中心的延展传感器,离你最近的那个。
这就很好解释为什么苹果以及国内的华为等手机大厂都选择纷纷躬身入局,卷入“造车运动”。未来,如果不是特斯拉收编了手机,就是手机厂商颠覆了特斯拉,这么讲的话,我更看好前者。
讲完端侧的算力,我们在看下云端的算力。云端一般指大型的服务器及其集群,也就是我们平常讲的”机房”。基于上文提到的体积和能效,云端是完全没有这方面限制的,甚至可以理解成理论上算力无上限的算力平台,只要机器够多。云端常用来进行模型的训练,而端测用来模型的部署与推理。
当然,云端也可以进行模型部署和推理,比如一些对于算力要求比较高的算法就会跑到云端,比如大家常用的语音助手,需要在联网状态下使用。云端优势是算力强大、方便部署迭代,可以做到训推一体,对于产品化来讲非常的便捷无缝衔接,非常适合于互联网的”快速迭代”模式。
但是缺点也比较显著,比如对于网络有强依赖性,安全和隐私保护一般。
且这个本质上就是一个暴力美学的过程,通过量变来引发质变,比如近年来广受讨论的GPT-3,他是一个具备1750亿个参数的自然语言模型,该模型经过了45TB的数据进行预训练,并且在不进行微调的情况下,可以在多个NLP基准上达到最先进的性能,训练这个模型需要355个GPU年,耗费成本在百万-千万级别美金。
而能提供这些财力和算力的必须是头部的大厂,不禁也感叹连人工智能的世界、模型之间甚至更卷。
神经网络之父Geoffrey Hinton在GPT-3出现后,曾这样感慨:“生命、宇宙和万物的答案,其实只是4.398万亿个参数而已。”
就像是《新约▪️马太福音》中所说“凡有的,还要加倍给他使他多余;没有的,要把他剩下的也夺走。”
讲完云端模型,现在市面上还广泛存在一种端云结合的部署方式,即取各家之所长,在端侧模型进行预处理,再把复杂的任务需要大量运算的部分传到云端,在云端计算完毕之后再返回到端侧。
这种方式,有效的解决了信息隐私问题,因为上传到云端的数据可以是经过特征提取之后的数据对于人类来讲并没有任何意义但是对于机器来讲可以进行后续的计算。同时,也解决了云端模型不断迭代而端侧推理部分迭代较慢的不均衡问题。
端侧模型、云端模型、端云结合模型我们在本书的第四章、第五章会结合实际案例进行讲解。
二、常用用语
1. 泛化能力(generalization ability)
泛化能力是指机器学习算法对新鲜样本的适应能力,简而言之是在原有的数据集上添加新的数据集,通过训练输出一个合理的结果。学习的目的是学到隐含在数据背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。
2. 过拟合(over-fitting)
在机器学习中,模型的典型产出过程是由机器学习算法在训练集上进行训练,希望得到的模型能够在训练过程中不可见的验证集上表现良好。而当引入相较数据集而言过多的参数时,或使用相较数据集而言过于复杂的模型时,则就出现了过拟合现象,违反了奥卡姆剃刀原则。
过拟合造成的一个恶果就包含上述所说的泛化能力较差。其反义词是欠拟合(主要原因是数据量较少)。
3. 鲁棒性(robustness)
鲁棒性亦称健壮性、稳健性、强健性,是系统的健壮性,它是在异常和危险情况下系统生存的关键,是指系统在一定(结构、大小)的参数摄动下,维持某些性能的特性。
4. 超参数(hyperparameter)
超参数是在开始学习过程之前设置值的参数(初始参数)。 相反,其他参数的值通过训练得出。
5. 主干网络(backbone)
主干网络,用来做特征提取的网络,代表网络的一部分,一般是用于前端提取图片信息,生成特征图feature map,供后面的网络使用。
6. 时期(epoch)
时期,一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个/次epoch。即,所有训练样本在神经网络中都进行了一次正向传播 FP(forward propagation)和一次反向传播BP(back propagation) 。简而言之,一个epoch就是将所有训练样本训练一次的过程。
7. 组(batch)
batch size大小是一个超参数,用于定义在更新内部模型参数之前要处理的训练数据集样本量。训练数据集可以分为一个或多个Batch(组)。
批量梯度下降:批量大小=训练集的大小;
随机梯度下降:批量大小= 1;
小批量梯度下降:1 <批量大小<训练集的大小。
8. 阶段(Stage)
阶段,一般网络分为one-stage和two-stage;即一个阶段还是两个阶段;比如说一张图片直接生成分类结果和bounding box,这个就是one-stage;
比如输入一张图片,先进行区域的建议,再将选择的区域进行分类,则分为two-stage,整个任务由两个网络完成,下一个网络的输入是上一个网路输出的结果;当然,根据实际任务的区别,也会有three-stage的整体网络设计。
9. 准确率(Accuracy)
对于分类任务来讲,我们对于分类结果有如下表示/定义。
那么准确率ACC=(TP+TN)/(TP+TN+FP+FN)。
10. 精确率(Precision)
P=TP/(TP+FP),表示被分为正例的示例中实际为正例的比例。
11. 召回率(Recall)
recall=TP/(TP+FN)。
12. 综合评价指标(F-Measure)
P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)。F-Measure是Precision和Recall加权调和平均:
F=(α^2+1)*P*R/α^2(P+R)
我们常用的是当α=1时,即为F1=2*P*R/(P+R);
13. ROC(Receiver Operating Characteristic)
ROC曲线是以假正率(FP_rate)和真正率(TP_rate)为轴的曲线,ROC曲线下面的面积我们叫做AUC,如下图所示:
ROC曲线
(1)曲线与FP_rate轴围成的面积(记作AUC)越大,说明性能越好,即图上L2曲线对应的性能优于曲线L1对应的性能。即:曲线越靠近A点(左上方)性能越好,曲线越靠近B点(右下方)曲线性能越差。
(2)A点是最完美的performance点,B处是性能最差点。
(3)位于C-D线上的点说明算法性能和random猜测是一样的–如C、D、E点。位于C-D之上(即曲线位于白色的三角形内)说明算法性能优于随机猜测–如G点,位于C-D之下(即曲线位于灰色的三角形内)说明算法性能差于随机猜测–如F点。
(4)虽然ROC曲线相比较于Precision和Recall等衡量指标更加合理,但是其在高不平衡数据条件下的的表现仍然过于理想,不能够很好的展示实际情况。
14. GT基准(ground truth)
在有监督学习中,数据是有标注的,以(x, t)的形式出现,其中x是输入数据,t是标注.正确的t标注是ground truth。而ground truth是人类按照一定标准进行定义的基准。
15. IOU(Intersection over Union)
1是ground-truth的bounding box(绿色框框)
2是预测的bounding box(红色框框)IOU输出为值在[0,1]之间的数字。
IOU = 两个矩形交集的面积/两个矩形的并集面积常用于目标检测(物体、人脸、人体等等),来衡量模型检测的精确率。
16. 特征(feature)
为了让计算机掌握人类理解的知识需要构筑一个由简单概念组成的多层连接网络来定义复杂对象,计算机通过对这个网络的迭代计算与训练后,可以掌握这个对象的特征,这种方法叫做深度学习,网络学习到的东西叫做特征。特征是一种数据的表达。
对于特征的要求是informative(富有信息量),discriminative(有区分性)和independent(独立)的。
Feature有很多种特性和分类:Feature可以是Linear(线性),也可以是Non-linear(非线性)的;Feature可以是Fixed(固定的),也可以是Adaptive(自适应变化的),甚至feature都可以不是数字的(numerical)。
17. 损失函数(loss function)或者loss
损失函数是用来估量模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。我们模型训练的过程应该是一个loss function逐渐变小的过程,这样模型才能不断收敛。