1.知识简介
1.1 人工智能、机器学习、深度学习
人工智能是研究如何使计算机去做过去只有人才能做的智能工作。
- 强人工智能:实现与人类同等智慧的人工智能
- 应用人工智能:
- 计算机视觉:图像分类、物体检测、视频分析等
- 语音识别:声纹识别(识别说话的人是谁)、语音合成(将文字信息转换为人类听得懂的语音)等
- 自然语言处理:机器翻译、阅读理解、自动摘要、文本分类、中文分词等
- 专家系统
完成和实现上述任务目前最常用的方法是机器学习,深度学习是机器学习的一个分支。
机器学习是专门研究计算机怎样模拟或实现人类的学习行为以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能核心,是使计算机具有智能的根本途径。
- 基于学习方式的分类
- 监督学习:需要数据集来进行模型训练,以概率函数、代数函数或人工神经网络为基函数模型,采用迭代,学习结果为模型。
- 无监督学习:无需训练即可直接使用,采用聚类方法,学习结果为类别。
- 强化学习:以环境反馈(奖/惩信号)作为输入,以统计和动态规划技术为指导的一种学习方法。
- 基于数据形式的分类
- 结构化学习:以结构化数据为输人,以数值计算或符号推演为方法。典型的结构化学习有神经网络学习、统计学习、决策树学习、规则学习。
- 非结构化学习:以非结构化数据为输人。典型的非结构化学习有类比学习、案例学习、文本挖掘、图像挖掘。
深度学习(DL,Deep Learning)是机器学习(ML,Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI,Artificial Intelligence)。深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,使机器模仿视听和思考等人类的活动,在语音和图像识别方面取得的效果,远远超过先前相关技术。采用人工学习网络的方法。
1.2 强化学习、深度强化学习
强化学习是一种训练方法。在强化学习中做出决策的一方被称为主体(Agent),它存在于环境中,每做出一个动作环境都会给予反馈,它会在评估环境的反馈后决定下一个动作,是最接近人类的学习方式。一切动作的基础都是回报,其目标是使未来的回报尽可能的大,就像下棋的流程一样。由于主体的每一个行为都会改变环境,这就决定了强化学习无法使用数据集训练,只能通过真实环境或模拟器产生的数据来学习。由于其计算量大、效率低,除AlphaGo和游戏AI外落地应用并不多。现实世界中存在诸多强化学习问题,如推荐系统每次推荐都会影响人们的购买,系统需要根据新的市场数据给出新的推荐。
- 基于模型的:试图用模型模拟真实环境
- 基于无模型的:无模型指的是不模拟环境,只根据反馈数据构建关于回报的模型。
担任主体的可以是各种模型,也可是神经网络。如果输入的是棋局的图片,可以使用擅长处理图像的CNN卷积神经网络;若要考虑多张图片所展现的前后步之间的联系,可使用擅长捕捉序列关系的RNN循环神经网络。像上述使用神经网络构建强化学习主体的就是深度强化学习。
将关注点放在回报上,用数值Q表示特定状态下采取某种行动的收益,并将计算Q的工作交给神经网络,就是DQN。增加一个对Q值评估相对谨慎的网络,平衡两者之间的看法来防止主体过于激进就是Double DQN。为了提升探索能力,适当的在网络中增加噪音,增强主体的随机性就是NoisyNet。将上述三者综合起来就是Rainbow。
将关注点放在选择上,如果一个动作能使最终回报变大,就增加这个动作出现的概率,反之就减少,这就是策略梯度。
如果让选择动作的神经网络担任主体,关注回报的神经网络为主体的表现打分来提供反馈,这是Actor-Critic。使用多个这样的网络同时探索环境,并将采集到的数据交给主网络更新参数,就是A3C。
强化学习面对的情景多种多样的,如游戏、机械臂、自动驾驶等等。
1.3 语音识别(Speech Recognition)
将人类的语音转换成文字。
语言由单词组成,单词由音素组成。将一段语音的声波按帧切开,用帧组成状态,用状态组成音素,再将音素合成单词,语音就变成了文字。
相关任务:声纹识别(识别说话的人是谁)、语音合成(将文字信息转换为人类听得懂的语音)等
1.4 自然语言处理(Natural Language Processing)
用机器 处理和运用 自然语言,往往需要 理解 语言语义。由于语言的复杂性,处理过程常常涉及理解,因此被认为是距离强人工智能最近的任务。
- 机器翻译:通过计算机将一种自然语言转换为另一种自然语言。
- 基于规则的翻译方法(第一阶段):首先分析句子中单词的词性,将每个词翻译为目标语言,再根据语法规则进行调整。由于语言表达过于自由,有限的语法和规则无法覆盖所有的语言现象,因此效果不佳
- 基于统计的翻译方法(第二阶段):根据词或者短语找到所有可能的结果,再在庞大的语料库中进行搜索,统计每种结果出现的概率,将概率最高的结果进行输出。对语料库的依赖较大,适用于成对语料较少情况
- 基于神经网络的翻译方法(第三阶段):通过学习大量成对的语料让神经网络自己学习找到输入和输出的关系
- 基于中间语言的翻译方法:当成对的语料严重不足时,采用中间语言进行转换
- 基于实例的翻译方法:对于约定俗成的短语效果更好
- 中文自动分词:使用计算机对中文文本进行词语切分
- 问答系统:设计能够自动回答问题的对话系统
- 信息抽取:从自然语言文本中抽取出特定的事件或事实信息,帮助我们将海量内容自动分类、提取和重构。这些信息通常包括实体、关系、事件,抽取出来的信息更加具有框架性
- 阅读理解
- 自动摘要
-
1.5 推荐系统(Recommender system)
根据用户的历史行为、社交关系、兴趣点等来判断用户当前感兴趣的物品或内容。
基于内容的推荐方法:根据物品的属性为其贴标签,再通过标签计算它们之间的相似度。
- 协同过滤:通过数据找到与用户相似的其他用户,通过他们喜欢的行为为用户推荐可能感兴趣的内容。
1.6 梯度下降(Gradient Descent)
回归:根据已有数据的分布来预测新数据
分类:希望有一条线将数据分割为不同类别
无论回归还是分类,目标都是使用搭建好的模型尽可能的模拟已有的数据,除了模型结构,模型的参数也是模型模拟成功的关键参数。模型在自动学习最优参数时,需要使用损失函数来帮助模型调整参数。
损失函数(Loss Function):用来衡量模型代表的分布与真实分布之间误差的函数,函数值最小的位置即为模型的最佳情况。有时也被称为误差函数。
如果损失函数为向上开口的二次函数,导数为0的位置就是二次函数的最低点。无论从哪里开始,只要不断向导数绝对值更低的方向调整,就可找到损失函数的最低点。当然,真实的损失函数更像崎岖不平的山区,找到最低点需要梯度,梯度会像导数一样为我们指出向下的方向。
梯度下降:沿着梯度所指出的方向一步一步向下走,去寻找损失函数最小值的过程,最终即可找到接近正确的模型。
1.7 迁移学习(Transfer Learning)
机器学习中不少任务是相似的,例如区分图像是猫还是狗、区分图像是苹果还是梨都是区别图像。让机器在实现前者后借鉴其经验来完成后者。
在CNN中,前几层都是在提取图像特征,直到最后的全连接层才进行分类。提取特征的过程很是相似,可以将训练好的猫狗分类网络的前几层拿出来直接使用,再用苹果与梨的数据训练新的全连接层来完成分类。
像这样利用数据、任务、模型间的相似性将训练好的内容应用到新的任务上被称为迁移学习。
使用迁移学习的情况有很多。有时是目标领域的数据太少,需要标注数据更多的源域的帮助。有时是为了节约训练时间。有时是为了实现个性化应用。语料匮乏的小语种翻译,缺乏标注的医疗影像数据识别,面向不同领域快速部署对话系统都是迁移学习擅长的应用。Transformer与Bert等经过微调即可实现不同领域的应用就是迁移学习在nlp领域的应用。
1.8 AutoML(自动机器学习)
机器学习流程通常包含4步:
- 数据准备:包括数据的收集、清洗和增强。
- 特征生成:特征的选择、构建和提取
- 模型生成:模型和优化方法的选择
- 模型评估:模型的训练和调优
AutoML 即希望机器能自主解决上述所有问题。指的是根据任务目标,自动实现模型构建、筛选的技术。对AutoML来说模型的生成和评估是最难的。
构建模型的第一步是确定哪些零件可以用,为此需要先将卷积、池化等可用零部件进行编码,定义一个搜索空间,在这个范围内进行筛选。接下来以一定的方法在庞大的零件库中找到最合适的零件以及拼接它们的方法。此外还需要一个评价标准来测试搭建好的模型好不好用。
在搜索模型的过程中,会用到许多深度学习的技术。神经网络架构搜索是目前最常提到的方法。神经网络架构搜索的基础是一个RNN网络,通过训练它生成模型,不断评估这些模型在验证集上的准确率后反馈调整,来提升RNN网络的生成能力。
1.9 epochs, batch_size, iterations
超参数是机器学习开始学习过程之前设置值的参数。 相反,其他参数的值通过训练得出。其有如下特性:
- 定义关于模型的更高层次的概念,如复杂性或学习能力。
- 不能直接从训练过程中学习,需要预先定义。
- 可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定。
batch_size:每批数据量的大小。深度学习通常用SGD(随机梯度下降)的优化算法进行训练,也就是一次(1 个iteration)训练batch_size个样本,计算它们的平均损失函数值,来更新参数。
iteration:1个iteration即迭代一次,也就是用batch_size个样本训练一次。
epoch:1个epoch指用训练集中的全部样本训练一次,此时相当于batch_size 等于训练集的样本数。
如果数据集较大,而所能提供的计算资源(如显存)较小,采用一次一个epoch将导致训练失败,可采用batch_size=1训练,称作在线学习。该方法根据每一个样本的情况更新一次权值,开销小速度快,但收到单个样本的巨大随机性,全局来看优化性能较差,收敛速度很慢,产生局部震荡,有限迭代次数内很可能无法收敛。
目前常用随机梯度下降SGD来训练,相当于上述两个“极端”方法的折中:将训练集分成多个mini_batch(即常说的batch),一次迭代训练一个mini_batch(即batch_size个样本),根据该batch数据的loss更新权值。这相比于全数据集训练,相当于是在寻找最优时人为增加了一些随机噪声,来修正由局部数据得到的梯度,尽量避免因batch_size过大陷入局部最优。
这种方法由于一次只分析一小部分数据,因此整体优化效果与batchsize有关:
batchsize越小,一个batch中的随机性越大,越不易收敛。然而batchsize越小,速度越快,权值更新越频繁;且具有随机性,对于非凸损失函数来讲,更便于寻找全局最优。从这个角度看,收敛更快,更容易达到全局最优。
batchsize越大,越能够表征全体数据的特征,其确定的梯度下降方向越准确,(因此收敛越快),且迭代次数少,总体速度更快。然而大的batchsize相对来讲缺乏随机性,容易使梯度始终向单一方向下降,陷入局部最优;而且当batchsize增大到一定程度,再增大batchsize,一次batch产生的权值更新(即梯度下降方向)基本不变。因此理论上存在一个最合适的batchsize值,使得训练能够收敛最快或者收敛效果最好(全局最优点)。
第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。
另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。
基本上现在的梯度下降都是基于mini-batch的,所以深度学习框架的函数中经常会出现batch_size,就是指这个。
批量大小将决定我们一次训练的样本数目。
- Batch(蓝色):如果数据集比较小,我们就采用全数据集。全数据集确定的方向能够更好的代表样本总体,从而更准确的朝向极值所在的方向。但对于大的数据集,我们不能使用全批次,因为会得到更差的结果。
- mini-batch(绿色):选择一个适中的Batch_Size值。就是说我们选定一个batch的大小后,将会以batch的大小将数据输入深度学习的网络中,然后计算这个batch的所有样本的平均损失,即代价函数是所有样本的平均。
- stochastic(Batch_Size等于1的情况)(红色):每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。
适当的增加Batch_Size的优点:
1.通过并行化提高内存利用率。
2.单次epoch的迭代次数减少,提高运行速度。(单次epoch=(全部训练样本/batchsize)/iteration=1)
3.适当的增加Batch_Size,梯度下降方向准确度增加,训练震动的幅度减小。(看上图便可知晓)
2.传统机器学习方法
2.1 KNN分类(K-Nearest Neighbors)
KNN即K近邻算法,是机器学习中常用的分类算法。如果一个样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也属于这个类别。喂给它的数据集是带label的数据,已经是完全正确的数据,新数据通过最近的K个邻居从而判断自己的类别。由于计算量大,该算法很难应用到较大的数据集中。
- k值的选择:较小的k值可以减少近似误差,但是会增加估计误差;较大的k值可以减小估计误差,但是会增加近似误差。一般而言,通常采用交叉验证法来选取最优的k值。
- 距离度量:距离反映了特征空间中两个实例的相似程度。可以采用欧氏距离、曼哈顿距离等。
- 分类决策规则:往往采用多数表决。
步骤:
- 先计算新样本与所有样本之间的距离
- 按由近及远的顺序排列
- 按最小K个对象的大多数类别确定分类
2.2 SVM分类
支持向量机(Support Vector Machine)SVM是在数据集所在特征空间中确定一个超平面将其分为两个空间,通过新样本所在空间的位置来决定样本结果。是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier)
SVM所要解决的问题就是线怎么画的问题。与线的距离越远,是该类的可能性越高,越近则是该类的可能性越小。目标是在样本间找到一条可以让所有样本的分类可信度最高的线。其不必计算所有的距离,只要找到线附近的样本,让它们与线的距离越远越好,这个距离被称为分类间隔,决定了线的样本被称为支持向量。
如果样本的分布有交叉,就关注无法被线正确分类的样本与线之间的距离,找到能最小化该距离的线。此外,如果样本空间的分布无法用线来区分,则需要通过一定的变化映射到新的样本空间使得其能被线区分。
深度学习出现前,随机森林和SVM是最好的分类方法。SVM对样本依赖小,不会过拟合,小样本也能取得不错的效果。
2.3 决策树分类(Decision Tree)
根据一定条件进行选择的过程就是决策树,其节点会根据样本的特征做出判断,叶子节点代表分类结果。
为了构建决策树,需要使用熵(ENTROPY)。熵代表分支下样本种类的丰富性,样本种类越多越混乱,熵就越大;如果分支下的样本均为一个类别,熵就等于0。
随着树层数的增加让熵快速降低,熵降低的速度越快代表决策树分类的效率越高。
决策树最大的优点是天然的可解释性,可以通过节点条件很好的解释分类结果。缺点是对于特例数据效果很差,如果一棵决策树能够将样本完美分类,其一定是过拟合的。通常为了防止过拟合需要进行剪枝。
- 预剪枝:在训练开始前规定条件,比如达到某一深度就停止训练
-
2.4 RF分类
随机森林(Random Forest)包含很多决策树,随机指的是树的生长过程。在构建决策树时,从训练数据中有放回的随机选取一部分样本,同时也不使用数据的全部特征,而是随机选取部分特征进行训练。每棵树使用的样本和特征各不相同,训练的结果也不同。随机森林的输出结果由投票决定,如果大部分决策树认为测试数据是A类,则认为其是A类。由于训练最初并不知道哪些是异常样本,也不知道哪些特征对分类结果影响更大,因此随机的过程降低了对分类结果的影响。
由于树与树之间相互独立,因此可以并行训练而无需花费太长时间
- 随机的过程让其不容易过拟合
- 能处理特征较多的高维数据,也不需要做特征选择。
- 合理训练后准确性很高
在机器学习中,随即森林属于集成学习的范畴,即将多个模型组合起来解决问题,模型可以不同。这些模型会独立学习、预测、再投票出结果。准确度往往比单独的模型高很多。
深度学习出现前,随机森林和SVM是最好的分类方法。
2.5 GBDT分类
GBDT(Gradient Boosting Decision Tree)同样由许多决策树组成,但与随即森林有很多不同。
- GBDT中的树都是回归树:例如将苹果单纯的分为好和坏的是分类树;如果能为苹果的好坏打分的则是回归树。
- GBDT每棵树都建立在前一棵树的基础上:以苹果打分为例,我们会先训练一棵树大体预测一下苹果的分数,再去训练一棵树去预测它们与真实分数间的差距,如果两者相加仍然与真实分数存在差距,再训练第三棵树预测这部分差距,重复这个过程不断减少误差,将这些树的预测值加起来就是苹果的分数。
GBDT在搜索、广告、推荐系统等领域有着广泛的应用,其能处理标签、数值等各类数据并且有较强的可解释性。由于树之间的相互依赖,需要较长的训练时间。GBDT同样属于集成学习,与随机森林类似,模型间相互独立共同投票出结果。
2.6 XGBoost分类
XGBoost本质上还是GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。其整体结构与GBDT一致,都是在训练出一棵树的基础上再去训练下一棵树,预测它与真实分布之间的差距,通过不断训练用来弥补差距的树,最终用树的组合实现对真实分布的模拟。
训练模型通常会定义一个目标函数F,然后去优化它来得到MAXF/MINF。XGBoost的目标函数包含损失函数和正则项两部分。
- 损失函数代表模型拟合数据的程度,通常用一阶导数指出梯度下降的方向。XGBoost还计算了它的二阶导数,进一步考虑了梯度变化的趋势,拟合更快,精度更高。
- 正则项则被用来控制模型的复杂程度,叶子节点越多,模型越大,训练时间越长,还容易产生过拟合,导致训练效果下降。XGBoost的正则项是一个惩罚机制,叶子节点数量越多,惩罚力度越大,从而限制其数量。
优点:XGBoost最大的改进是提升了训练速度,其在训练前就将特征值进行了排序,防止排序产生的耗时。其还善于捕捉复杂数据之间的依赖关系。能从大规模数据集中获取有效模型。在实用性上支持多种系统和语言(Linux,win,macos,C++,java,python…)。
缺点:在高维稀疏特征数据集和小规模数据集上表现不好。
2.7 K-Means聚类
K代表希望将样本分类的类别数。算法步骤如下:
- 在空间中随机选择K个样本作为分类基准
- 计算比较其他样本与基准样本的距离,离哪个基准样本近则将其归为该类
- 分类完成后,找到各个类的分类中心,计算所有样本与中心的距离,按照距离远近再进行分类,一直重复该步,直到分类结果不变为止
K-Means属于无监督学习,其可解释性很好且实现简单,分类效果也不错。但其准确度不如监督学习,对K值的选择也很敏感。
3.深度学习方法
3.1 神经网络
仿照人脑神经元的结构和工作原理,使用计算机构造一个由节点连接而成的大网。节点为神经元,神经突触被抽象为有权重的连接,决定了神经元内的数字将如何改变,以及传递给那些神经元。
神经网络包含:输入层、隐含层、输出层。改造其中的一部分组成,则生成了各种类型的神经网络。如:
- 将输入层输入图结构:图神经网络GNN
- 将神经元换成多个神经元组成的神经元块:胶囊网络
- 使用卷积对图像数据处理:卷积神经网络CNN
真正决定神经网络是否好用的是神经元之间连接的权重和神经元的阈值,通常使用BP算法来确定这些数值。BP算法根据网络输出的答案与正确答案之间的误差,不断调整网络的参数。
当设置好神经网络后,神经网络中的初始数值都是随机赋予的,神经网络根据输出答案与正确答案之间的差距,从最后一层开始逐层向前调整神经网络参数。如果结果误差值为负数,则在调整时提升权重,反之就降低权重。调整的程度受一定的比率即学习率的制约。在一次次输入数据和反向调整中,网络就能逐渐给出不错的输出。
通过BP算法控制的神经网络很容易过拟合,因此训练的程度一定要把控好。可以将数据集划分为训练集和验证集,用训练集调整参数,用验证集估计误差。如果训练集误差降低的同时验证集的误差在升高,就要结束训练。
3.2 卷积神经网络CNN
在CNN的卷积层中,存在一个个填充着数字的正方形小格子,其被称为卷积核。原始图片经过输入层后,会变为灰度或是RGB数值填充的矩阵,将卷积核与图片矩阵对齐,对应格子中的数字对应相乘再相加,再将得到的数字填入新矩阵,这就是卷积。卷积核以一定距离在图像上移动计算,这被称为步长。
除卷积层外,CNN还包括池化层和全连接层。池化层能选取图像的主要特征;全连接层通常在网络最后,能将提取到的特征集合在一起,给出图片可能是某些事物的概率。
得到的新矩阵能反映图像的部分特征,因此被称为特征图。其既是本层的输出也是下一层的输入。通过设定不同的卷积核,就可找到各种各样的特征。CNN非常善于处理图像,此外其还可以应用于语音识别、机器翻译等领域。
3.3 循环神经网络RNN与长短时记忆网络LSTM
对于语言来说,顺序是十分重要的。RNN是高度重视序列信息的网络。最常见的应用领域是自然语言处理。当然也可应用于股票价格预测等领域具有明显序列信息的情景。
RNN仍然是神经网络,只不过其多了一个小盒子,用来记录数据输入时的网络状态,在下一次输入数据时,网络必须要考虑小盒子中保存的信息。随着数据的一次次输入,存储信息也在不断更新。盒子中的信息被称为隐状态。
RNN适合捕捉短时间片依赖,当训练时间长了之后一些重要信息会被后续输入给覆盖。为了弥补RNN缺陷,能捕获长时间片依赖的LSTM被提出,它能选择性决定哪些重要信息留下,哪些被遗忘。
LSTM在之前的小盒子安装了三个门。
- 遗忘门:决定小盒子里要保留多少原有信息,也就是丢掉哪些不重要的记忆
- 输入门:决定当前网络信息有多少要保存到小盒子里,也就是记住哪些新东西
- 输出门:决定多大程度的输出小盒子中的信息。
经过改造的小盒子既能通过输入门对当前的网络状态有所了解,又能利用遗忘门留下过往的重要信息。
通过改变门,LSTM还有很多变体如MGU、SRU等。
最受欢迎的还是门控循环单元GRU。GRU只有两个门,更新门是遗忘门和输入门的结合体,决定丢弃哪些旧信息,添加哪些新信息。重置门决定写入多少上一时刻的网络的状态,用来捕捉短期记忆。结构更简洁、效果更高效,且效果与LSTM不相上下。
但前人发现在某些领域中长和短时间片都有不可忽视的作用,如句子中的上下文关系和文档中的重要关键词,所以后续有人提出了两者的结合体LSTM-RNN,以此捕获全局和局部关系。
3.4 生成对抗网络GAN
GAN(Generative Adversarial Network)拥有生成器和判别器,两个相互对抗以产生更好的输出结果。人脸识别、语音识别等都是为了处理现有的东西,而GAN则是为了创建现有世界中不存在的东西。GAN包含生成、判别和对抗三部分。
生成和判别指两个独立模块,生成器负责依据随机向量产生内容,这些内容可以是图片、文字、音乐等。判别器负责判别接受到的内容是否为真实的,通常会给出一个概率代表内容的真实程度。两者使用何种网络没有硬性规定,擅长处理图片的CNN、常见的全连接均可,只要能完成相应功能即可。
对抗指GAN的训练过程。以图片生成为例,先让生成器产生一些假图片,再将其与收集到的真图片一起提交给判别器,让其学习区分两者,给出真的高分、假的低分。当判别器能够熟练判断现有数据后,再让生成器以从判别器处获得高分为目标,不断输出更好的假图片,重复这一过程直到判别器对任何图片的预测率都接近0.5,也就是无法分析图片的真假。因此,训练GAN的最终目标是能够获得足够好的生成器。
GAN非常难训练。既然目标是骗过判别器,生成器只要一直生成同一种能骗过它的假图片就能完成任务,这就是模式崩溃。比如判别器根据有眼睛和皮毛来判断图片中的狗是不是真的,生成器可能就会生成三个眼睛的狗。
为了解决这些问题,人们创造了WGAN,W指 Wasserstein距离,以它为依据的判别器不仅能很好的判断生成的内容与真实的内容有多相似,还能为生成器的改进方向给出指导。
除了改变判断基准,还可以改变网络类型。DCGAN是生成器和判别器均为卷积神经网络的GAN,其将CNN的结构倒过来,让生成器先确定轮廓等高级特征,再逐步细化低级特征。
生成器和判别器的数量也可以改变。CycleGAN能将简笔画变成实物图片,它有两个生成器和两个判别器。其中一个生成器负责根据简笔画生成照片,并让这些照片尽可能通过照片判别器的审查,另一个生成器通过照片来生成简笔画,让生成的内容尽可能符合简笔画判别器的要求。然后首位相连,让经过两次转换的内容尽可能与原始内容一致,就拥有了两个能在简笔画和真实照片之间转换的生成器。
StyleGAN能融合不同图片的风格不断产生新图片。3DGAN能将二维图片转化为三维模型。通过GAN Zoo能找到更多有趣的GAN。
3.5 图神经网络GNN
通常神经网络的输入是一维或者二维向量,而GNN的输入是图结构。图中的节点代表了实体,包含了它们的属性,边则描述了实体之间的关系。图能表达更广泛的内容,如社交网络中人与人之间的关系、化学分子的结构组成、地铁网络等等。
将重点放在节点上,可以预测社交网络中用户的标签,判断用户是否为恶意账户。对边做出预测,推荐系统就能找到用户需要的商品。以图为基础加以分类、生成,就能对药物分子做出分类,或是预测新的有效分子组成。GNN在计算机视觉或自然语言处理领域均有应用。
3.6 Transformer
在自然语言中,单词的前后顺序会影响整句话的含义,因此通常使用擅长捕捉序列关系的算法。
- RNN:对于机器翻译来说,两种语言句子中的单词数量并非是一一对应的,受限于结构,RNN只能实现N to N、1 to N、N to 1类型,而不可应用与N to M类型。
- SEQ2SEQ:该模型拥有编码器Encoder和解码器Decoder,Encoder和Decoder依然是RNN网络。其首先使用Encoder提取原始句子的意义, 再由Decoder将意义转换为对应的语言。依靠中间意义,该模型解决了两端单词数不对等的问题。然而,意义单元C存储的意义是有限的,如果输入的句子太长,翻译精度就会随之下降。
- Attention:为了解决上述问题,在Seq2Seq的基础结构上,生成每个单词时,都有意识的从原始句子中提取生成该单词时最需要的信息,从而摆脱输入序列的长度限制。然而,该种算法的执行效率非常慢。RNN需要逐个看过句子中的单词,才可给出意义输出。
- Self-Attention:为了解决上述问题,引入自注意力机制。先提取每个单词的意义,再依据生成顺序选取所需要的信息,这样不仅支持并行计算效率更高,也很接近人类的翻译方式。这就是Transformer
Transformer横扫自然语言处理领域,在文本摘要、文本生成、Chatbot等任务上表现出色。此外,其也可应用于语音分类、图像识别、音乐生成、股价预测等其他领域。
Transformer和LSTM的最大区别:LSTM的训练是迭代的,是一个接一个字的,当前这个字通过LSTM单元,才开始进下一个字;而transformer的训练是并行的,所有字是全部同时训练的,大大加快了计算效率。
3.7 VIT(Vision Transformer)
VIT是Transformer在计算机视觉领域的应用。Transformer的输入是一维的序列,将图片转化为一维数据即可使用Transformer。其将一幅图片切割为16x16的小方块,将其排列起来再转化为向量输入给Transformer。在部分数据集效果上超越了CNN。
3.8 BERT
机器无法直接理解语言,需要将语言转化为机器能够明白的东西,比如由数字组成的向量。
距离可以表示词与词之间的关系。机器学习的出现使得我们不必为单词一一设计向量,而是将收集好的句子、文章交给模型,由它为单词们找到最合适的位置。Bert就是帮助我们找到词语位置的模型之一。
Bert来源于Transformer,其将Encoder抽离出来。此外,人们还为Bert设计了独特的训练方式。
- (Masked Language Model)在收集到的语料中,随机覆盖15%的词汇,让Bert去猜这些字是什么。
- (Next Sentence Prediction)由Bert判断两个句子是否相连。
MLM让Bert更好的依据语境做出预测,NSP让Bert对上下文关系有更好的理解。
有时需要为已经训练好的Bert依据任务目标,增加不同功能的输出层联合训练。比如文本分类则需要增加分类器来输出文本的类别,阅读理解则增加一个全连接层来输出答案的位置,Bert只需要根据任务做出微调即可。
Bert诞生于2018年,随后在各类NLP比赛中疯狂屠榜。
3.9 GPT
Transformer的Encoder变成了Bert,Decoder则变成了GPT。
GPT同样需要面对不同任务进行微调的语言模型。GPT-2不仅能承担机器翻译、文本摘要等基于原始文本信息的任务,还能完成新闻写作这类无中生有的任务。
最近,OpenAI将训练参数提升到45TB,最终获得了一个1750亿参数、大小超过700G的庞然大物即GPT-3.在使用GPT-3时,直接输入问题即可获得答案,不需要面对不同的任务再训练,也不需要调试即可直接使用。
与语言模型相比,GPT-3更接近于一个包含知识、语境理解和语言组织能力的数据库。
结构决定了功能,Decoder的每一步输出都基于上一步输出的内容,这使得生成成为GPT最强大的能力。给它一个开头,它就能够依据这些文字的风格和内容不断续写,甚至可以创作歌词和小说。如果学习了大量的音乐语句后,给出一段乐句,GPT-2就能生成一段音乐。使用文本和图像的对应数据进行训练,GPT-3就能依据描述输出图像。
GPT-3作为商业项目需要到OpenAl官网申请API以使用。
3.10 Attention(注意力机制)
人在观察某一项事务时,往往仅关注其中的一部分。例如翻译”我爱吃苹果”,不同时间段我们会关注不同的部分,于是机器引入了注意力机制。Attention可以从纷繁复杂的信息中找出对当前输出最重要的部分。
一个典型的Attention包括Q、K、V三部分。Q是Query,是输入的信息,key和value成对的出现,通常是源语言、原始文本等已有信息。通过计算Q与K之间的相关性,得出不同的K对输出的重要程度,再与对应的V相乘求和得到Q的输出。
以阅读理解为例,Q是问题,K和V是原始文本。通过计算Q和K的相关性让我们找到文本中最需要注意的部分,利用V得到对应的答案。
Attention有不少进化形式,如Self-Attention。其只关注输入序列元素之间的关系,通过将输入序列直接转化为Q、K、V在内部进行Attention计算就能很好的捕捉文本的内在联系,对其做出再表示。
Multi-Head Attention多头注意力机制是在自注意力机制的基础上,使用多种变换生成的Q、K、V进行运算,再将他们对相关性的结论综合起来,进一步增强Self-Attention的效果。
借助Transformer、Bert、GPT等形式,Attention在NLP领域大放异彩。其次,其还应用于图片分类、图片描述、视频描述,Attention都能在输出结论时指出它注意到的图像区域,可解释性相当好。