TensorFlow深度学习实战(36)——自动机器学习(AutoML)
TensorFlow深度学习实战(36)——自动机器学习(AutoML)
- 0. 前言
- 1. 自动机器学习
- 2. 自动数据准备
- 3. 自动特征工程
- 4. 自动模型构建
- 5. AutoKeras
- 小结
- 系列链接
0. 前言
自动机器学习 (AutoML
) 指的是利用自动化的方法和工具,旨在简化和自动化机器学习模型的开发和部署过程,使非专业人士也能够进行机器学习模型的构建、训练和优化,其核心目标是减少人工干预,提高效率,并推动机器学习的更广泛应用。
1. 自动机器学习
我们已经学习了深度学习中常见的模型架构,例如,全连接网络 (dense network)、卷积神经网络 (Convolutional Neural Network, CNN)、自编码器和生成对抗网络 (Generative Adversarial Network, GAN) 等,这些架构由深度学习研究人员手动设计,需要大量的专业知识和试错过程。
目前,人工智能研究的一个主要目标是实现通用人工智能 (Artificial General Intelligence
, AGI
),一种能够理解并自动学习任何人类能够完成的工作或活动的机器智能。需要注意的是,许多研究人员认为 AGI
是不可实现的,因为智能不是仅有一种形式,而是有多种形式。
在自动机器学习 (AutoML
) 之前,设计深度学习架构类似于手工制作,通过在网络中添加或替换组件来达到最优结果。
例如,识别癌症的X光片任务,可以通过组合多个 CNN
创建的深度学习模型。但问题在于,向用户解释为什么使用特定的 CNN
组合在癌症检测领域能够获得优异效果并不容易。我们希望为用户提供易于访问的深度学习工具,而不需要用户具有深厚的机器学习背景。
另一个问题在于,了解是否存在能获得更好结果的变体并不容易。我们希望有以更自动化的方式探索模型变体空间的深度学习工具。
因此,AutoML
的核心思想是通过使整个端到端机器学习流程更加自动化,从而降低手工构建机器学习解决方案的复杂性和巨大成本。AutoML
流程包含三个步骤:自动数据准备、自动特征工程和自动模型构建。接下来,我们将详细介绍这三个步骤。
AutoML
使用机器学习来自动化机器学习流程。自动化过程的优势在于,端到端自动化创建和调整机器学习模型提供了更简单的模型构建解决方案,缩短了模型构建时间,并最终可能得到性能超越手工设计模型的架构。
2. 自动数据准备
经典的机器学习流程的第一阶段为数据准备,主要包含以下两个方面,数据清洗和数据合成。
数据清洗 (Data cleaning
),通过检查数据类型错误、缺失值,以及应用数据归一化、缩放和编码来提高数据质量,一个稳定的 AutoML
流程应该尽可能地自动化这些琐碎但极其重要的步骤。
数据合成 (Data synthesis
),通过数据增强生成用于训练、评估和验证的合成数据,通常这一过程基于特定领域。例如,通过裁剪、旋转、缩放和翻转操作生成合成的 CIFAR1
0 图像,还可以通过 GAN
生成图像或视频,并使用增强的合成数据集进行训练。对于文本,可以训练 RNN
生成合成文本,或者其它自然语言处理技术,如 BERT
、Seq2Seq 或 Transformers 来对文本进行翻译,然后再翻译回原文。
简言之,合成数据生成是 AutoML
应提供的另一个功能。通常,使用的工具基于特定于领域,对图像或视频的有效工具不一定适用于文本等其它领域。因此,需要一个大规模工具集,以便能够在各个领域进行合成数据生成。
3. 自动特征工程
特征工程是经典机器学习流程的第二步,包括以下三个主要步骤:特征选择、特征构建和特征映射。
特征选择 (Feature selection
),通过舍弃对学习任务贡献较小的特征来选择有意义的特征子集,这取决于具体问题的应用和领域。
特征构建 (Feature construction
),从基本特征出发构建新的衍生特征。通常用于提高模型的泛化能力,并提供数据的更丰富表示。
特征映射 (Feature mapping
),通过映射函数改变原始特征空间。可以通过多种方式实现,例如使用自编码器、主成分分析或聚类。
简言之,特征工程是一门基于丰富领域知识的过程,AutoML
旨在使整个过程更加自动化,减少人工干预。
4. 自动模型构建
模型构建和超参数调整是机器学习流程的第三个步骤。模型构建涉及为解决特定任务创建合适的模型,例如,使用卷积神经网络 (Convolutional Neural Network, CNN) 进行视觉识别,使用循环神经网络 (Recurrent Neural Network, RNN) 进行时间序列分析或序列处理。当然模型存在许多变体,每种变体都通过大量实践过程手动设计,并适用于非常具体的领域。
模型构建后,需要进行超参数调整,这一过程通常具有很高的计算成本,并且能够显著改善模型的质量,因为调整超参数可以进一步优化模型。
自动模型构建是 AutoML
流程的最终目标。为了实现这一目标,可以通过组合基本操作(包括卷积、池化、连接、跳跃连接、递归神经网络、自编码器等)来构建模型。这些操作构成了一个大规模的搜索空间,需要使探索过程尽可能高效。在 AutoML
中,这种探索称为神经架构搜索 (Neural Architecture Search
, NAS
)。原始 NAS
的关键思想是使用强化学习 (Reinforcement learning, RL),RNN
作为控制器,生成候选神经网络的模型描述,使用 RL
来最大化生成架构在验证集上的预期准确率。
在 CIFAR-10
数据集上,NAS
方法从头开始设计了一种新颖的网络架构,其测试集准确度与人工设计的架构相似。在 CIFAR-10
数据集上,NAS
的测试错误率为 3.65
,比同样使用类似架构方案的最先进模型好0.09个百分点,速度快 1.05
倍;在 Penn Treebank
数据集上,NAS
模型构建了一种新型的递归单元,其表现优于长短期记忆 (Long Short Term Memory, LSTM) 单元。
在 NAS
中,基于 RNN
的控制器网络生成一个概率为 p
的样本架构 A
。这个候选架构 A
由子网络训练获得候选准确率 R
。然后计算 p
的梯度,并用 R
进行缩放以更新控制器。这一强化学习操作进行多个循环,如果网路层数量超过给定阈值,则停止架构生成过程。
NAS
使用基于Q学习的元建模算法,采用ϵ-贪婪探索策略和经验重放来探索模型搜索空间。
自 NAS
论文发表后,模型生成技术引起了研究人员的广泛关注。最初是一次性生成整个模型,后来,提出了一种基于单元的方法,将生成过程分为两个步骤。首先,自动构建单元结构,然后将发现的若干个单元堆叠在一起生成完整的端到端架构。这种高效的神经架构搜索 (Efficient Neural Architecture Search
, ENAS
) 在使用更少训练时长的情况下,表现出强大的性能,并且计算成本比标准神经架构搜索低 1000
倍。ENAS
的主要目标是通过层次化组合来减少搜索空间。纯层次化方法是基于单元方法的变体,通过逐步迭代地结合低层单元来生成高层单元。
迁移学习是另一种 NAS
方法,将现有神经网络的学习迁移到新的神经网络中以加速设计。
遗传编程 (Genetic Programming, GP) 和进化算法 (Evolutionary Algorithm, EA) 同样可以用于 NAS
,将构成模型搜索空间的基本操作编码成合适的表示,然后对编码执行遗传操作以逐渐改进模型,类似于生物体的遗传进化。
超参数调整的目标是找到与学习优化(如批大小、学习率等)和模型特定参数(如卷积核大小、特征图数量等)相关的超参数的最佳组合。同样,搜索空间通常非常大,一般可以采用以下三种方法:贝叶斯优化、网格搜索和随机搜索。
贝叶斯优化构建目标函数的概率模型,并利用该模型选择最有可能的超参数进行评估。网格搜索将搜索空间划分为离散的网格值,并测试所有可能的组合。例如,如果有三个超参数,每个超参数有两个候选值,那么总共需要检查 2 x 3 = 6
种组合。
网格搜索还可以层次化进行,逐步细化搜索空间的区域以提供更好的结果。关键思路是先使用粗粒度网格,然后在找到更好网格区域后,在该区域内进行更精细的网格搜索。
随机搜索对参数搜索空间进行随机采样,研究表明,这种简单的方法在许多情况下同样非常有效。
5. AutoKeras
AutoKeras
提供了自动搜索深度学习模型架构和超参数的功能。该框架使用贝叶斯优化来高效地进行神经架构搜索,可以通过 pip
安装:
$ pip3 install autokeras
AutoKeras
架构遵循以下步骤:
- 用户调用
API
- 搜索器在
CPU
上生成神经网络架构 - 根据神经网络架构构建神经网络,存储在
RAM
中 - 将神经网络复制到
GPU
上进行训练 - 将训练好的神经网络保存到存储设备上
- 根据训练结果更新搜索器
- 重复执行步骤
2
到步骤6
,直到达到时间限制为止。
小结
自动机器学习 (AutoML
) 的主要目的是通过使整个端到端机器学习流程(数据准备、特征工程和自动模型生成)更加自动化,从而降低手工构建机器学习解决方案的巨大成本。
系列链接
TensorFlow深度学习实战(1)——神经网络与模型训练过程详解
TensorFlow深度学习实战(2)——使用TensorFlow构建神经网络
TensorFlow深度学习实战(3)——深度学习中常用激活函数详解
TensorFlow深度学习实战(4)——正则化技术详解
TensorFlow深度学习实战(5)——神经网络性能优化技术详解
TensorFlow深度学习实战(6)——回归分析详解
TensorFlow深度学习实战(7)——分类任务详解
TensorFlow深度学习实战(8)——卷积神经网络
TensorFlow深度学习实战(9)——构建VGG模型实现图像分类
TensorFlow深度学习实战(10)——迁移学习详解
TensorFlow深度学习实战(11)——风格迁移详解
TensorFlow深度学习实战(12)——词嵌入技术详解
TensorFlow深度学习实战(13)——神经嵌入详解
TensorFlow深度学习实战(14)——循环神经网络详解
TensorFlow深度学习实战(15)——编码器-解码器架构
TensorFlow深度学习实战(16)——注意力机制详解
TensorFlow深度学习实战(17)——主成分分析详解
TensorFlow深度学习实战(18)——K-means 聚类详解
TensorFlow深度学习实战(19)——受限玻尔兹曼机
TensorFlow深度学习实战(20)——自组织映射详解
TensorFlow深度学习实战(21)——Transformer架构详解与实现
TensorFlow深度学习实战(22)——从零开始实现Transformer机器翻译
TensorFlow深度学习实战(23)——自编码器详解与实现
TensorFlow深度学习实战(24)——卷积自编码器详解与实现
TensorFlow深度学习实战(25)——变分自编码器详解与实现
TensorFlow深度学习实战(26)——生成对抗网络详解与实现
TensorFlow深度学习实战(27)——CycleGAN详解与实现
TensorFlow深度学习实战(28)——扩散模型(Diffusion Model)
TensorFlow深度学习实战(29)——自监督学习(Self-Supervised Learning)
TensorFlow深度学习实战(30)——强化学习(Reinforcement learning,RL)
TensorFlow深度学习实战(31)——强化学习仿真库Gymnasium
TensorFlow深度学习实战(32)——深度Q网络(Deep Q-Network,DQN)
TensorFlow深度学习实战(33)——深度确定性策略梯度
TensorFlow深度学习实战(34)——TensorFlow Probability
TensorFlow深度学习实战(35)——概率神经网络