遗传算法与深度学习实战——进化深度学习
- 0. 前言
- 1. 进化深度学习
- 1.1 进化深度学习简介
- 1.2 进化计算简介
- 2. 进化深度学习应用场景
- 3. 深度学习优化
- 3.1 优化网络体系结构
- 4. 通过自动机器学习进行优化
- 4.1 自动机器学习简介
- 4.2 AutoML 工具
- 5. 进化深度学习应用
- 5.1 模型选择:权重搜索
- 5.2 模型架构:架构优化
- 5.3 超参数调整/优化
- 5.4 验证和损失函数优化
- 5.5 增强拓扑的神经进化
- 小结
0. 前言
深度学习 ( Deep learning
, DL
) 已成为与人工智能 (Artificial Intelligence
, AI
) 和机器学习 (Machine Learning
, ML
) 爆炸式发展最相关的技术。它从被认为是一门伪科学,到被用于驾驶汽车等各种主流应用,虽然许多人认为它是未来技术的趋势,但也有人由于其日益增长的复杂性和对大量数据的依赖持更加保守的态度。
随着深度学习的复杂性增加,需要不断为其提供更多的数据,以期在特定领域取得重大突破。但通常会事与愿违,经常只得到糟糕的模型、结果。这个问题将持续存在,直到我们开发出高效的深度学习系统流程。
构建有效、鲁棒的深度学习系统的过程,与其他机器学习或数据科学过程相似。虽然在所需资源和复杂性上有所变化,但所有步骤都保持不变。而在深度学习领域,通常缺少一套可以帮助自动化某些流程的工具包。
进化深度学习 (Evolutionary Deep Learning
, EDL
) 是一套可以用于自动化深度学习系统开发的工具和实践,EDL
包括了广泛的进化计算方法和模式,可以应用于深度学习系统流程的各个方面。
1. 进化深度学习
1.1 进化深度学习简介
进化深度学习 (Evolutionary Deep Learning
, EDL
) ,也称深度神经进化 (Deep Neural Evolution
)、进化神经自动机器学习 (Evolutionary Neural AutoML
)、神经进化 (Neuroevolution
)、进化人工智能 (Evolutionary AI
)等,是将进化方法与深度学习相结合的一组技术,可以用于优化深度学习系统,包括从数据的收集到模型验证的整个过程。
进化深度学习是人工智能领域两个独特子领域的融合:进化计算 (Evolutionary Computation
, EC
) 和将深度学习应用于自动化和改进模型。进化计算本身是一系列模拟生物或自然过程来解决复杂问题的方法,将其应用于深度学习中,以自动化和优化解决方案,同时也有可能发现新的策略和架构。
尽管许多进化方法研究已经证明能够在自动调整深度学习模型方面取得成功,但这方面的研究在人工智能领域中并未受到足够的关注。在多数论文中,研究人员仍然通过花费大量时间进行特征工程以及超参数调整创新模型。
然而,对于许多深度学习模型而言,构建鲁棒、高性能的模型是一项艰巨且充满挑战的任务,需要对所选择的深度学习框架的所有特性有全面的了解,以便了解何时模型可能出现错误拟合的情况。进化深度学习作为一种自动机器学习 (AutoML
) 解决方案,旨在解决深度学习领域面临的大部分问题。
进化深度学习的目的是提供更好的机制和工具集,以实现优化深度学习解决方案和自动化机器学习,专注于使用进化技术构建更好的优化网络。在此之前,我们首先介绍进化计算和进化算法 (Evolutionary Algorithm
, EA
) 的基本概念。
1.2 进化计算简介
进化计算是人工智能的一个子领域,利用生物和自然启发的过程来解决复杂问题。之所以使用进化这个词来描述这类算法,是因为这类算法多以自然选择理论为基础。
自然选择理论由达尔文在《物种起源》中提出,定义了地球上生命的进化过程。它描述了强壮和适应环境的生命能够得以生存,而虚弱或不适应环境的生命会逐渐灭绝。
基于达尔文的理论,进化计算的核心是在系统中模拟个体或种群,以找到最优解。其目的是通过允许个体改变,从而衍生或进化出一个能够在模拟环境中生存和繁衍的个体。个体的变化机制会因进化计算方法而异,但无论如何,我们都需要一种机制来量化个体的生存能力。
用于量化个体生存或繁衍能力的标准称为适应度,用于定义个体在环境中生存或执行任务的能力。适应度可以使用多种方式进行衡量,是评估个体或种群问题解决效率的重要因素。
自然选择和适应度的概念已成为多数模拟生物繁殖过程的算法的核心思想,有些算法甚至模拟了细胞中的染色体分裂和 DNA
共享。经典进化计算算法包括:
- 人工生命:康威的生命游戏和冯·诺伊曼细胞自动机使用智能体模拟生命本身的人工过程。在这种算法中,智能体通常根据其与其他智能体或环境的接近程度移动、生存或死亡。虽然智能体模拟通常用于模仿真实世界,但也可以用于优化过程
- 差分进化:将微分计算与进化算法相结合优化搜索的过程。这种技术通常与其他进化计算方法(如人工生命)一起使用。在这种算法中,智能体通过计算向量之差并重新应用于种群以实现进化
- 进化算法:将自然选择的进化过程应用于具体问题上。这类方法通常专注于模拟种群进化
- 进化程序设计:进化算法的一种特殊形式,使用代码创建算法。在这种算法中,一个个体由一块代码表示,并通过运行代码生成的某个最优值来衡量其适应度。有多种实现代码生成的方式,在多数情况下会使用更具体的方法,例如基因表达
- 遗传算法:模拟有机体中的细胞有丝分裂,允许遗传特征传递给后代。遗传算法是将个体特征编码为基因序列,并使用基因序列评估适应度。适应度用于模拟生物选择过程和组合父代个体的基因来创建新的后代个体
- 遗传编程:使用遗传算法构建编程代码。在遗传算法中,个体的特征较为通用,但在遗传编程中,一个特征或基因可以表示任意数量的函数或其他代码逻辑。遗传编程是一种专门的技术,可以开发新的算法代码。例如,使用遗传编程编写智能体模拟代码,用于解决迷宫问题或创建图片
- 基因表达式编程:对遗传编程的进一步扩展,用于开发代码或数学函数。在遗传编程中,代码被抽象为高级函数,而在基因表达式编程中,目的是开发特定的数学方程。基因表达式编程与遗传编程的一个关键区别是使用表达式树来表示函数。在遗传编程中,表达式树表示代码,而在基因表达式编程中,表达式树表示数学表达式树,代码按照基于位置的明确定义的操作顺序进行执行
- 粒子群优化:人工生命的一个子集,是对智能粒子的模拟。在算法中,评估每个粒子的适应度,并选择最佳粒子作为其余粒子聚集的焦点
- 群体智能:一种搜索方法,模拟群体昆虫或鸟类的行为,以找到优化问题的峰值。它与粒子群优化非常相似,但实现上有所不同,具体取决于适应度的评估
下图展示了用于 EDL
应用的 EC
方法的层次结构。还可以使用其他 EC
方法来改进 DL
模型,但我们将重点介绍图中的基本方法。
生命模拟是进化计算的一个特定子集,它模拟了自然界中所观察到的自然过程,例如粒子或鸟群的聚集方式。而遗传模拟则模拟了生物生命中细胞有丝分裂的过程,更具体地说,它模拟了基因和染色体在生物进化中的传递过程。
2. 进化深度学习应用场景
进化深度学习既是一个概念,又是一套用于深度学习优化的工具和技术。从概念上讲,EDL
是利用进化计算来优化深度学习网络的模式与实践。然而,它也提供了一套工具,可以在深度学习之上进行堆叠,甚至可以替代深度学习。
进化深度学习的应用领域非常广泛:它可以用于基本的超参数优化、神经权重搜索、在生成对抗网络中平衡对抗网络,甚至可以替代深度强化学习。实际上,我们可以将进化深度学习技术应用到任何深度学习系统中。
进化方法为深度学习系统提供了进一步优化性能的可能性,但进化深度学习的计算代价较高,可能并不适合简单的系统。然而,对于复杂或新颖的问题,进化算法能够为深度学习模型提供进一步优化的空间。
3. 深度学习优化
深度学习是一种强大的技术,但它也仍有许多不足,其中包括模型理解与优化,可能需要数小时甚至数月的数据标注或模型超参数调整。
在绝大多数情况下,我们不能直接使用模型,需要优化深度学习系统的各个方面,从调整学习率到选择激活函数。优化网络模型往往是深度学习的主要任务,如果手动进行优化,将耗费大量时间。
优化深度学习网络除了常见的超参数调整外,有时还需要优化网络体系结构本身。
3.1 优化网络体系结构
随着网络层的增加,网络会变得越来越复杂,并影响误差的反向传播过程。下图展示了在深度学习系统逐渐复杂化的过程中最常见的问题。
在较深的网络中,损失会逐渐变小甚至趋近于零,称之为梯度消失问题,这种情况会导致网络较深层的权重更新缓慢甚至停滞。相反,梯度也可能在反向传播期间变得异常大,称之为爆炸梯度,这种情况会导致权重更新过大,网络参数的不稳定性,甚至可能导致算法无法收敛。
这两种梯度问题都可以使用不同技术来解决,例如对输入数据进行归一化,以及在网络中使用特殊的层或函数进行操作。这些技术增加了网络的计算复杂性,并且可能过度平滑数据中重要的特征。因此,往往需要更大、更多样化的训练数据集来提高网络性能。
虽然归一化可以解决深层网络中梯度消失和梯度爆炸的问题,但随着模型的增长,它们也会出现其他问题。例如,随着模型的增大,虽然对输入的处理能力也增加了,但可能会导致一种被称为网络记忆的副作用,特别是在输入的训练集过小时。这是因为网络过于庞大,以至于它可能开始记住整个的输入内容。
甚至一些最先进的深度学习模型,如 OpenAI
的自然语言处理模型 GPT-3
,也会在一定程度上受到记忆化的影响。即使将多种形式文本的数十亿个文档输入到模型中进行训练,GPT-3
等模型仍然会重复整段记住的文本。
为了解决网络记忆问题,可以使用 Dropout
方法,在每次训练过程中停用网络层内的一定百分比的节点。通过在每次传递中关闭和打开节点,可以创建一个更通用的网络。然而,这需要将网络扩大 100%
到 200%
为代价。
除了这些问题,深层网络添加更多层会增加更多的权重,这些权重甚至需要在数十亿甚至数万亿次迭代中进行训练,训练这样的模型需要庞大的算力。
大多数深度学习研究人员认为,更宽更深的网络很快就会达到一个瓶颈。因此,简单的解决方案是寻找可以简化这些大型网络开发的替代方法,包括将进化计算应用到深度学习中来优化网络体系结构、权重。
进化深度学习可以自动优化网络的大小和形式,以解决深层网络的各种问题,自动优化是进化深度学习的核心。
由于进化算法提供了用于解决多种问题的优化模式,进化深度学习可以在机器学习开发过程的各个方面发挥作用,包括调整模型超参数、特征工程、模型验证、模型选择和体系结构。
4. 通过自动机器学习进行优化
进化深度学习提供了一组用于自动 DL
系统优化的工具,以获得更加鲁棒的模型。因此,它可以被视为 AutoML
工具。自动机器学习 (Automated Machine Learning
, AML
) 和 AutoML
通常被认为是等价的,它们具有相同的目的,但前者通常用于描述产生优化模型的黑盒系统。
4.1 自动机器学习简介
自动机器学习是用于自动化和增强 AI/ML
构建的工具,它不是特定的技术,而是一组方法和策略,其中进化算法或进化优化方法是其子集,可以在整个 AI/ML
工作流程中使用,如下图所示。
上图展示了构建良好模型的典型 AI/ML
工作流程,以便对新数据进行推断。这一工作流程通常由 AI/ML
研究者手动完成,但已经有各种尝试自动化所有步骤的方法。接下来,我们详细总结每一步骤,包括如何使用 AML
进行自动化:
- 数据准备:为
AI/ML
训练准备数据相当耗时。一般来说,自动化数据准备能够大幅提高用于微调复杂模型的数据工作流的性能。AutoML
在线服务通常假设用户已经准备并清洗了数据,这是大多数ML
模型所需进行的步骤,使用进化方法可以自动化数据准备 - 特征工程:使用领域知识从数据中提取相关特征的过程,通常由领域专家根据直觉和经验选择相关特征,自动化此过程可以降低成本并提高标准化水平。有些
AutoML
工具内置了特征工程 - 模型选择:随着
AI/ML
的发展,通常可以解决类似问题的模型已经达到数百种。研究人员会花费几天或几周的时间来选择一组要进一步评估的模型,自动化模型选择过程可以加快模型开发,并帮助确认他们适合当前任务的正确模型。一个优秀的AutoML
工具能够从几十种或几百种模型中进行选择,包括DL
变体或模型集成 - 模型架构:在
AI/ML
和深度学习领域,定义正确的模型架构通常是至关重要的。以自动化方式正确完成这一步骤可以节省大量调整架构和重新运行模型的时间。根据具体实现,一些AutoML
系统会在模型架构上有所不同,但通常局限于经典模型的变体 - 超参数微调:微调模型超参数的过程十分耗时且容易出错。为了解决这些问题,多数研究人员依赖于直觉和以往的经验,但日益增加的模型复杂性使得仅通过人工调整变得不可行。通过自动化超参数调整,不仅可以减轻模型构建的工作,还可以发现模型选择或架构中的潜在缺陷
- 模型验证:有多种选项用于评估模型的性能,涵盖了从用于训练和测试数据量到可视化模型输出性能的各个方面。自动验证模型提供了在数据发生变化时重新表征模型性能的强大手段,并使模型在长期内更具解释性
经典的 AML/AutoML
工作流程只涉及处理特征工程步骤及其后续步骤,这个过程通常是迭代进行的,可以是单个步骤或多个步骤进行组合。某些步骤,例如超参数调优,是特定于模型类型的,在 DL
中可能需要大量时间来优化模型。
虽然商业 AutoML
服务能够成功处理各种数据类型和形式,但生成的模型缺乏创新性,并且为了构建一个调整好的模型,AutoML
需要执行大量的任务,需要大量算力,而开发的模型本质上是经典基准模型的重建,往往缺乏新的优化模式。
想要获得更具创新性的自动化模型,通常需要开发自己的 AutoML
解决方案,其中 EDL
是一个主要候选方案,进化方法可以提供各种自动构建和优化 DL
模型、超参数、特征工程和网络架构的解决方案。
4.2 AutoML 工具
常用的 AutoML
工具和平台如下:
DataRobot
:AutoML
的第一个平台,提供了各种自动构建模型的工具Google Cloud AutoML
:由AI
领域的主要参与者构建,该平台可以处理各种数据,从图像到结构化数据Amazon SageMaker AutoPilot
:适用于自动化开发依赖于结构化数据的模型H2O AutoML
:提供了各种功能来自动化机器学习工作流程Azure Machine Learning
:提供了在不同形式的数据上调整模型的自动化过程AutoKeras
:提供了网络架构的自动化开发AutoTorch
:提供了自动架构搜索
5. 进化深度学习应用
接下来,我们介绍如何在 DL
之上应用像遗传算法 (Genetic Algorithms
, GA
) 这样的方法来改进 AI
模型。可能有无数种合并 EC
与 DL
的可能性,我们首先需要了解一些基本的实用策略。
了解这些策略将使我们能够修改现有的 DL
网络或创建自己的组合 EC/DL
模型,能够在更短的时间内使用更少的资源创建优化网络,为我们提供选择策略甚至开发新策略的能力。
可以采用多种形式在 DL
中应用 EC
,包含各种在 AutoML
中的自动化策略。下图展示了可以应用于 DL
的 EC
或 EDL
的各种方法,以及它们可以在 AI/ML
模型开发工作流程中的哪些位置应用。
5.1 模型选择:权重搜索
通常,我们所选择的基础模型和层类型取决于所要解决的问题类型。在大多数情况下,优化模型选择可以快速手动完成。然而,模型选择不仅仅是选择层类型;它还包括优化架构、初始权重和用于训练模型的损失函数。通过优化模型层类型、架构甚至损失函数,可以使网络更具鲁棒性,更高效地学习。
5.2 模型架构:架构优化
在构建 DL
网络时,我们通常会在模型中添加过多的节点和层。随着训练的进行,我们会缩小网络,使其更适合解决问题。在多数情况下,过大的网络可能会“记住”输入数据,而导致过拟合。相反,过小的网络无法学习足够多样的数据,通常会出现欠拟合的情况。
为了解决过度拟合和欠拟合问题,我们可以应用 GA
自动修剪网络至最小形态。这不仅可以提高模型性能并限制过度训练或欠拟合,还可以通过减小网络大小来减少训练时间。这是一种在尝试优化更大、更深的网络时非常有效的技术。
5.3 超参数调整/优化
超参数调整是 AI
和 ML
中的一个过程,通过调整定义模型的各种控制变量来优化模型。在 DL
中,参数用于表示模型的权重,为了表示区分,我们将控制变量称为超参数。
EC
提供了多种算法,在包括 DL
在内的各种模型中添加自动超参数优化,包括粒子群优化、差分进化和遗传算法。
5.4 验证和损失函数优化
在开发强大的 DL
模型时,我们经常依靠几种已有的模式来生成高质量的网络,包括通过迭代地观察训练和测试损失来验证模型的训练和性能,为了保证性能,我们希望两个损失值不会相差太远。
在监督学习训练中,我们通常会使用与标签比较相关的度量方法。而对于生成DL模型甚至需要优化损失函数或者模型性能验证函数。
在自动编码器、嵌入层和生成对抗网络之类的网络中,可以使用组合决策来进行损失和模型验证。使用 EC
,我们能够以 AutoML
的方式优化这些形式的网络。
5.5 增强拓扑的神经进化
增强拓扑的神经进化 (Neuroevolution of Augmenting Topologies
, NEAT
) 是一种将超参数和架构优化与权重搜索相结合的技术,能够自动构建新的DL模型,也可以优化损失和验证方法,这种技术已经被应用于各种 DL
和深度强化学习的应用中。
小结
深度学习 ( Deep learning
, DL
) 是一种强大的技术,能够解决许多人工智能和机器学习任务,但它通常需要大量的数据,并且开发、训练和优化成本高昂。
进化计算 (Evolutionary Computation
, EC
) 是人工智能和机器学习的一个子领域,其理论基础是自然选择。虽然 EC
的发展速度不及 DL
快,但它提供了解决各种复杂问题的技术。
进化深度学习 (Evolutionary Deep Learning
, EDL
) 包括一系列将进化方法与 DL
相结合的技术。包括神经进化、进化超参数优化和增强拓扑的神经进化。EDL
定义了 EC
方法的一个子集,可以用于在机器学习的多个阶段自动化和改进 DL
模型的开发。
自动机器学习 (Automated Machine Learning
, AML
) 和 AutoML
定义了一套工具和技术,旨在自动化整个人工智能和机器学习模型的开发工作流程。大量商业公司开发多种 AutoML
平台,以帮助用户根据需求构建强大的模型。