端智能入门-算法基础

导读

端智能是一门算法与工程相互配合的技术,算法是其中解决问题的关键部分,工程是算法能得以应用和落地的重要环节。虽然在实际端智能场景落地过程中,大多时候是算法侧研发和工程侧研发一起协同完成的;但如果算法和工程能对彼此技术知识有基本的了解,在协同过程中就能更顺畅、效率更高。在方案设计时就更能兼顾彼此,让方案更加完备。

基本知识

认识 人工智能 机器学习 深度学习

我们经常会看到人工智能机器学习深度学习强化学习这样一些词汇,可能会有疑问他们之间是什么关系,这里先做个介绍。

人工智能、机器学习、深度学习关系(左),机器学习训练过程(右)

  1. 人工智能是一个非常庞杂的概念,主要讲的是为机器赋予人的智能,让机器能够像人类一样认知、思考和判断,这是强人工智能,是很难实现的。目前能够实现的一般是弱人工智能,是让机器能够像人一样、甚至比人更好的去完成某些特定任务,像人脸识别、图像分类、语言翻译等。

机器学习则是实现人工智能这个目的一种方法。类比于人类学习认知的过程,预先让机器在数据资料和经验中学习、训练,自动掌握某些规律,然后再用它对新的事件做出判断和预测。

  • 这里学习、训练的方法又分为三大类,有监督学习 (通过有标注的数据来学习)、无监督学习 (通过没有标注的数据来学习)、强化学习(让程序与环境互动,给予反馈和奖励,让程序不断学习进化,如游戏中的电脑人)。
  • 如果我们把机器学习当作教育小孩,那么,有监督学习就是根据正确答案指导小孩学习;强化学习就是根据小孩实践的过程给予各种鼓励引导学习;无监督学习就是让孩子自由探索世界,自己总结规律。

深度学习则是一种实现机器学习的技术。它使用深度神经网络算法来学习,适合从大数据中学习经验,是一种高级的机器学习类型。

认识神经网络

神经网络 是一种机器学习的算法。模仿人脑的处理方式,以大量的神经元按照一定的层次结构连接起来构建算法模型。算法学习到的经验规律被储存在各个神经元中。当有新的数据输入时,其中部分神经元被激活,传导信号,为最终决策做出响应和判断。

  • 神经网络模型的构建如同搭积木一样,神经元则是一个个小木块(节点),设计者可以根据思路任意组合变换。当然,业界的一些经典神经网络模型是非常值得我们在设计模型时借鉴和引用的,那些都是业界大拿们的经验积累。

神经网络模型结构示意图(左),单个神经元结构(右)

  • 上(左)图为MLP多层感知器神经网络结构示意图,一般由输入层、隐藏层(可多个)、输出层组成,每层又包括多个神经元。神经元结构如右侧示意图,可表示为:

    • <math xmlns="http://www.w3.org/1998/Math/MathML"> t = f ( W ⃗ X ⃗ + b ) = f ( ∑ w i ∗ x i + b ) {\displaystyle t=f({\vec {W}}{\vec {X}}+b)=f(\sum_{}{w_i*x_i}+b) } </math>t=f(W X +b)=f(∑wi∗xi+b)

    • x1、x2、x3、xn 是神经元输入信号,w1、w2、w3、wn 是每个输入信号的权重值,b 是偏移值,f 是激活函数,激活函数可以给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络模型就可以用于解决现实中非线性问题了。

    • 当 <math xmlns="http://www.w3.org/1998/Math/MathML"> W ⃗ X ⃗ + b {\displaystyle{\vec {W}}{\vec {X}}+b} </math>W X +b求和之后,神经元被激活,处于兴奋状态了,决定要向下一个神经元传递信号,但是要传递多强烈的信号,由激活函数来确定,如常用Sigmoid、ReLu、Tanh。

认识回归和分类

回归(Regression)和分类(Classification)是神经网络的两项主要功能。

回归(Regression)或者叫做拟合(Fitting)

  • 所谓回归或者拟合,其实就是给出 x 值输出 y 值的过程, 并且让y值与样本数据形成的曲线的距离尽量小,可以理解为是对样本数据的一种骨架式的抽象。回归模型一般输出连续值(通常是浮点数)。

  • 单层的神经网络能够模拟一条二维平面上的直线,从而可以完成线性分割任务。而两层神经网络理论上可以无限逼近任意连续函数。下图所示就是一个两层神经网络拟合复杂曲线的实例。

回归/拟合示意图

  • 以上图为例,蓝色的点是样本点,从中可以大致地看出一个轮廓或骨架,而红色的点所连成的线就是神经网络的学习结果,它可以"穿过"样本点群形成中心线,尽量让所有的样本点到中心线的距离的和最近。

  • 回归问题的评估标准

    • 方差 :MSE(Mean Squared Error) <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 m ∑ i = 1 m ( y i ′ − y i ) 2 {\displaystyle \cfrac{1}{m}\sum^{m}_{i=1}{(y'_i-y_i)^2}} </math>m1i=1∑m(yi′−yi)2
    • 平均绝对误差 :MAE(Mean Abolute Error) <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 m ∑ i = 1 m ∣ y i ′ − y i ∣ {\displaystyle \cfrac{1}{m}\sum^{m}_{i=1}{|y'_i-y_i|}} </math>m1i=1∑m∣yi′−yi∣

分类(Classification)

  • 所谓分类,其实就是给定样本x,输出它属于哪个预设类别的过程。

  • 下图二维平面中有两类点,红色的和蓝色的,用一条直线肯定不能把两者分开了。使用一个两层的神经网络可以得到一个非常近似的结果,使得分类误差在满意的范围之内。图中淡蓝色曲线本身并不存在,是通过神经网络训练出来的分界线,可以比较完美地把两类样本分开,所以分类可以理解为是对两类或多类样本数据的边界的抽象。

    分类示意图

  • 回归和分类示意图中的曲线形态实际上是一个真实的函数在 [0,1] 区间内的形状,其原型是:

<math xmlns="http://www.w3.org/1998/Math/MathML"> y = 0.4 x 2 + 0.3 x s i n ( 15 x ) + 0.01 c o s ( 50 x ) − 0.3 y=0.4x^2+0.3xsin(15x)+0.01cos(50x)-0.3 </math>y=0.4x2+0.3xsin(15x)+0.01cos(50x)−0.3

  • 多层神经网络的本质就是对复杂函数的拟合。从输入层到隐藏层的矩阵计算,是对输入数据进行空间变换。而训练的过程,就是确定这个空间变换矩阵的过程。这个空间变化矩阵对应的就是一大堆的权重组成的数组,就是神经网络训练的结果 - 模型,它是近似解,并不是精确的数学表达式。

  • 分类问题的评估标准

    • 先看几个四个术语:

      • TP(True Positive,真阳,实际阳性样本被预测为阳性样本)
      • TN(True Negative,真阴,实际阴性样本被预测为阴性样本)
      • FP(False Positive,假阳,实际阴性样本被预测为阳性样本)
      • FN(False Negative,假阴,实际阳性样本被预测为阴性样本)
    • 其中T/FTrue/False ,代表预测是否正确;P/NPositive/Negative ,代表预测的结果是阳性样本还是阴性样本。阳性样本 可以理解为我们预测的目标样本,阴性样本则为阳性样本之外的样本。如果预测目标是判断是否新冠阳性,Positive就是阳性样本,Negative就是阳性之外的阴性样本;如果目标是判断是否新冠阴性,那么相应的Positive/Negative样本就发生了互换。

    • 混淆矩阵 ( Confusion Matrix ) :TP/TN/FP/FN四类样本的矩阵关系, <math xmlns="http://www.w3.org/1998/Math/MathML"> [ T N F P F N T P ] \begin{bmatrix}TN&FP\\FN&TP\\ \end{bmatrix} </math>[TNFNFPTP]。

    • 准确率(Accuracy) : <math xmlns="http://www.w3.org/1998/Math/MathML"> T P + T N T P + F P + T N + F N {\displaystyle \cfrac{TP+TN}{TP+FP+TN+FN}} </math>TP+FP+TN+FNTP+TN,对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。

    • 精确率(Precision,查准率) : <math xmlns="http://www.w3.org/1998/Math/MathML"> T P T P + F P {\displaystyle \cfrac{TP}{TP+FP}} </math>TP+FPTP,被预测为阳性样本中实际是阳性样本的比例,即查出来是阳性样本中查找的准确率。

    • 召回率 (Recall,查全率) : <math xmlns="http://www.w3.org/1998/Math/MathML"> T P T P + F N {\displaystyle \cfrac{TP}{TP+FN}} </math>TP+FNTP,,实际阳性样本中被预测为阳性样本的比例,即实际阳性样本被正确查找出来的比例。

    • F1-Score :是Precision和Recall加权调和平均, <math xmlns="http://www.w3.org/1998/Math/MathML"> F = ( a 2 + 1 ) ( P ∗ R ) a 2 ∗ ( P + R ) {\displaystyle F=\cfrac{(a^2+1)(P*R)}{a^2*(P+R)}} </math>F=a2∗(P+R)(a2+1)(P∗R),当 a 取值 1 时,就是常说的F1, <math xmlns="http://www.w3.org/1998/Math/MathML"> F 1 = 2 ∗ P ∗ R P + R {\displaystyle F1=\cfrac{2*P*R}{P+R}} </math>F1=P+R2∗P∗R。Precision和Recall指标有时候会出现的矛盾的情况,F1是一个综合考虑值。

    • AUC :ROC 曲线下面积,一种考虑到所有可能的分类阈值的评估标准,用于衡量分类器区分正负样本的能力。代表分类器随机预测真阳性类(Ture Positives)要比假阳性类(False Positives)概率大的确信度。其中ROC 曲线是以伪阳性率(FPR)为 X 轴、真阳性率(TPR) Y 轴在0~1空间内绘制的曲线。

      ROC曲线和AUC关系

      • TPR :在所有实际为阳性的样本中,被正确地判断为阳性之比率。 <math xmlns="http://www.w3.org/1998/Math/MathML"> T P R = T P T P + F N {\displaystyle TPR=\cfrac{TP}{TP+FN}} </math>TPR=TP+FNTP
      • FPR :在所有实际为阴性的样本中,被错误地判断为阳性之比率。 <math xmlns="http://www.w3.org/1998/Math/MathML"> F P R = F P F P + T N {\displaystyle FPR=\cfrac{FP}{FP+TN}} </math>FPR=FP+TNFP
      • AUC:即曲线围成的阴影部分面积,衡量分类器在不同阈值下的表现,越高则在表现越好。

机器学习术语

  • 反向传播、梯度下降、损失函数(Loss) :模型训练中的三大概念,将在下节模型训练章节中展开介绍。
  • 数据集:样本的集合,又包括训练样本集,测试样本集。
  • 样本:一个数据集的一行内容。一个样本包含了一个或多个特征,0个、1个或多个标签。
  • 特征:输入变量,用于做出预测。
  • 标签(Label) :在有监督式学习中,样本的「答案」或「结果」。标注数据集中的每个样本包含一或多个特征和一个标签。
  • 特征工程:在训练模型的时候,通过数据分析等手段决定哪些特征是有用的,然后将原始数据转换成样本(有用特征list)的过程。
  • 模型(model) :机器学习系统从训练数据中所学内容的表示,包括模型结构的描述、一系列权重和偏差值。
  • 学习率(learning rate) :通过梯度下降训练模型时使用的一个标量。每次迭代中,梯度下降算法使学习率乘以梯度,乘积叫作 gradient step。学习率是一个重要的超参数。
  • 分桶 (Bucketing) :根据值的范围将一个连续特征转换成多个称为 buckets 或者 bins 二元特征,称为 buckets 或者 bins。
  • 深度模型:一种包含多个隐藏层的神经网络。深度模型依赖于其可训练的非线性性质。
  • 过拟合:模型在训练集上误差率低,但在测试集上误差率较高,模型与训练数据非常匹配,以至于模型无法对新数据进行正确的预测,网络的泛化能力差。
  • 欠拟合:模型在训练集和测试集上误差率都较高,意味着模型没学到经验规律,可能是特征选取不佳、模型结构简单等原因。

机器学习模型介绍

这一部分主要介绍一下我们常用的一些基础模型,更多内容可以自行查阅"机器学习模型"相关资料。

全连接神经网络

这是深度学习最基础的网络类型之一,无论多么深层的网络,一般都离不开全连接层进行构建。由于前面部分内容已经有了关于MLP的原理介绍,这里就不多赘述。

卷积神经网络

卷积神经网络示意图

图像处理是机器学习的一个重要应用,如果直接使用全连接网络将构成图片的像素展开后进行输入,可能会丢失像素间的空间信息,同时由于参数过多导致训练困难,容易导致网络过拟合。因此便有了卷积神经网络,它能够很好地将图片的信息进行提取,通过卷积和池化的操作,使得模型在保留空间信息的同时大大减少了参数量,让训练变得更加准确和高效。

  • 卷积层:主要是对输入图像进行转换,以从中提取特征。 在这种转换中,图像与内核(或过滤器)卷积。内核是一个小的矩阵,其高度和宽度小于要卷积的图像。该核在图像输入的高度和宽度上滑动,并且核的点积和图像在每个空间位置处进行计算。像RGB图像一般会存在3个通道,此时内核的通道数要与图像的通道数相同,同时内核也可以存在多个,从而使模型拥有更强的表达能力。

卷积过程示意图

3通道2内核过程

  • 池化层:池化层用于对图像进行下采样,从而减小输入数据的为度。 在卷积神经网络中,通常在卷积层之后是池化层。 通常添加池层以加快计算速度,并使某些检测到的功能更健壮。如下图的最大池化层(Max Pooling Layer),就是对图片进行切分后,选取各个部分最大的值进行拼接后作为输出。

最大池化层示意图

  • 全连接层:全连接层的作用主要是进行分类。前面通过卷积和池化层得出的特征,在全连接层对这些总结好的特征做分类。全连接层就是一个完全连接的神经网络,根据权重每个神经元反馈的比重不一样,最后通过调整权重和网络得到分类的结果。

循环神经网络

循环神经网络示意图

循环神经网络的输入经过其计算后可以通过hidden layers进行传递,与新一轮输入一起传入到下一个网络进行学习。一些诸如MLP的网络,只能单独地去处理一个个输入,无法拟合前一个输入和后一个输入之间的联系。然而现实中的很多场景都有着时序和因果的关系,循环神经网络便能够依据其独特的结构对这些情况进行良好的建模。

循环神经网络在自然语言处理,例如语音识别、语言建模、机器翻译等领域有应用,也被用于各类时间序列预报。

生成对抗网络

生成对抗网络示意图

生成对抗网络包含一个生成器(Generator)和一个判别器(Discriminator)。生成器输入随机噪声,从而生成一些假图片样本。判别器则会输入真样本和假样本,目的就是要对这些样本进行区分,判断其是真还是假。生成器希望生成的图片可以骗过判别器,而判别器则希望提高判别能力、防止被骗,两者的训练处于一种对抗博弈状态中的,直到最终达到一个稳定的状态。通常会用于图片生成,或者风格迁移等场景。

决策树

决策树示意图

决策树是基于已知各种情况(特征取值)的基础上,通过构建树型决策结构来进行分析的一种方式,是常用的有监督的分类算法。与上述基于神经网络的模型不同,主要通过if-then的树形原理,构造完根节点后,根据一定的标准(条件熵、信息增益、基尼系数等)选取最优特征,对训练数据集划分为多个子集。如果这些子集已经能够很好地分类,那么直接构建叶节点(分类结果);如果还不能很好地分类,那么继续递归选取最优特征、划分数据集,直到所有数据集被正确分类或者没有合适的特征为止。

目前常用的树模型算法有GBDT、LightGBM等,适用于决策结果较为直观的场景,尤其是对于表格数据有着不错的分类效果。

总结

以上是端智能技术中涉及到的机器学习算法基础的一些梳理和介绍,包括一些基本知识概念和术语,以及一些经典模型结构的介绍,更多可参考 微软 AI-EDU 教程

相关推荐
jyl_sh3 天前
CMake教程:第一步:一个基本的起点
开发语言·c++·客户端·cmake
jyl_sh13 天前
Windows Ribbon框架
windows·ribbon·c#·客户端
jyl_sh13 天前
Ribbon布局和尺寸调整
ribbon·c#·wpf·客户端
cyt涛22 天前
Redis访问工具
数据库·redis·spring cache·注解·客户端·lettuce·redistemplae
Crazy Struggle1 个月前
.NET 8 + WPF 企业级工作流系统
wpf·客户端·工作流·.net 8.0
邂逅岁月1 个月前
【网络编程通关之路】 Udp 基础回显服务器(Java实现)及你不知道知识原理详解 ! ! !
服务器·前端·网络·后端·udp·java-ee·客户端
中草药z1 个月前
【JavaEE】网络原理 UDP协议
服务器·网络协议·tcp/ip·udp·java-ee·客户端
Amd7942 个月前
使用 prefetchComponents 进行组件预取
缓存·组件·客户端·nuxt.js·用户·体验·预取
DieSnowK2 个月前
[Qt][对话框][下]详细讲解
c++·qt·客户端·qt内置对话框·消息对话框·文件对话框·输入对话框
DieSnowK2 个月前
[Qt][输入类控件]详细讲解
c++·qt·客户端·常用控件·输入类控件·line edit·text edit