三个大概念
深度学习是机器学习领域中神经网络分支的发展。
机器学习
机器学习主要有三类,下面用表格的方式介绍。
监督学习
监督学习就是从有标签的训练数据中学习一个模型,并用该模型预测未来新数据的标签类别。监督的意思就是有标签,标签在监督它的学习。常见的如分类任务、回归任务,它们的区别就是,分类任务的标签是离散的、无序的类别标签,而回归任务的标签是连续数据。
监督学习的过程:
观察现象,发现规律,假设模型,设计评价指标(损失loss),通过评价指标找到模型最优解的过程叫做优化。
强化学习
强化学习是一个可与环境交互,来提高系统性能的智能体。环境状态信息通常包括奖励信号,所以可以将强化学习看作一个与监督学习相关的领域。但强化学习环境提高的反馈信号往往不是正确的标签,而是奖励函数对智能体动作的奖励,用于衡量动作的正确程度。智能体通过与环境交互,使用动作规划方法或探索性的试错方法,学习一系列的动作,来最大化环境提供的奖励。
一个典型的例子,如国际象棋。智能体根据棋盘状态(环境)决定一系列动作。游戏的输赢就是环境提供的奖励,每走一步棋的结果就是环境的一个状态。最终目的就是使总奖励最大化。
无监督学习
监督学习需要标签(事先知道答案),强化学习需要定义智能体动作的奖励函数,而无监督学习处理的是无标签或结构未知的数据,目的是发现这些数据中隐藏的规律。常见的如,聚类方法(发现数据中相似性),降维压缩(去除噪声或冗余)。
基础内容
常见术语
正则化: 防止过拟合、处理共线性(特征之间高度相关)、过滤数据中的噪声的一种方法。其原理是引入额外的信息来惩罚极端参数(权重)值。最常见的正则化是L2正则化。
正则化与特征诡归一化: 特征缩放(如标注化)之所以重要,其中一个原因就是正则化,为了使正则化起作用,需要确保所有特征的幅值大小差不多。
过拟合: 在训练数据上表现良好,在测试数据(未知数据)上不好。
大方差: 和过拟合类似。(大偏差:类似欠拟合)
**维度灾难:**指训练样本数目固定时,随着特征维数的增加,样本空间变得越来越稀疏,在高维空间中,即使是最近的邻值,两者也离得非常远。(KNN算法常见问题,KNN和决策树不适合正则化,因此需要特征选择和降维技术避免维数灾难)
数据预处理
处理缺失值
1.删除含有缺失值的样本或特征(使用dropna方法)
2.填补缺失值(使用插值法,如均值插补)
将数据转换为适合机器学习使用的格式
当为类别特征数据时,分为有序特征和标称特征,有序特征就是能够排序的类别值,如T恤的尺码,S<M<L<XL;标称特征没有有意义的排序,如T恤的红色和蓝色。
1.类别数据编码(用pandas库的DataFrame,里面包含一个标称特征color,有序特征size,数值特征price)
2.映射有序特征(一般将其转换为整数,如用0,1,2,3表示S,M,L,XL)
3.类别标签编码(类别标签时无序的,一般从0开始枚举)
4.标称特征的独热编码(当标签为红=0,绿=1,蓝=2时,模型会误以为红<绿<蓝,所以用onehot编码,即用二进制表示)
5.划分训练集、测试集
6.特征缩放(决策树和随机森林不需这步)
标准化:将特征标准化为均值0,方差1(适合梯度下降类型算法,保留特征之间的异常值)
归一化:特征缩放到[0,1],是最小最大缩放的一种特殊情况(常用于特征值需要有界区间时,丢失了异常值)
选择适合的特征
避免发生过拟合,即在新数据上的泛化能力弱,因此说这个模型具有很大的方差。减少泛化误差的常见方法:
1.收集更多训练数据
2.引入正则项
3.选择参数较少的简单模型
4.降低数据维度
特征降维
1.无监督数据压缩方法,如主成分分析
2.监督降维方法,如线性判别分析
3.数据可视化的非线性降维方法和t分布随机领域嵌入
深度学习
传统机器学习:人工特征提取(靠人的经验)
简单模型:机器学习模型,没有对数据进一步提取深度特征的能力
深度学习最基本概念–神经网络
深度学习不仅实现了模型的端到端学习,还推动了人工智能进入工业大生产阶段,产生了标准化、自动化和模块化的通用框架。不同场景的深度学习模型具备一定的通用性,五个步骤即可完成模型的构建和训练,如下图所示。
正是由于深度学习的建模和训练的过程存在通用性,在构建不同的模型时,只有模型三要素(假设、评价、优化)不同,其它步骤基本一致,深度学习框架才有用武之地。
深度学习框架
近年来深度学习在很多机器学习领域都有着非常出色的表现,在图像识别、语音识别、自然语言处理、机器人、网络广告投放、医学自动诊断和金融等领域有着广泛应用。面对繁多的应用场景,深度学习框架有助于建模者节省大量而繁琐的外围工作,更聚焦业务场景和模型设计本身。
深度学习框架优势:
1.节省编写大量底层代码的精力:屏蔽底层实现,用户只需关注模型的逻辑结构。同时,深度学习工具简化了计算,降低了深度学习入门门槛。
2.省去了部署和适配环境的烦恼:具备灵活的移植性,可将代码部署到CPU/GPU/移动端上,选择具有分布式性能的深度学习工具会使模型训练更高效。
深度学习框架设计思路
深度学习框架的本质是框架自动实现建模过程中相对通用的模块,建模者只需实现模型个性化的部分,这样可以在“节省投入”和“产出强大”之间达到一个平衡。
个性化部分:往往是指定模型由哪些逻辑元素组合,由建模者完成。
通用部分:聚焦这些元素的算法实现,由深度学习框架完成。
深度学习框架设计示意图:
无论是计算机视觉任务还是自然语言处理任务,使用的深度学习模型结构都是类似的,只是在每个环节指定的实现算法不同。因此,多数情况下,算法实现只是相对有限的一些选择,如常见的Loss函数不超过十种、常用的网络配置也就十几种、常用优化算法不超过五种等等。这些特性使得基于框架建模更像一个编写“模型配置”的过程。
深度学习建模流程(横纵式)
纵向概要介绍模型的基本代码结构和极简实现方案。横向深入探讨构建模型的每个环节中,更优但相对复杂的实现方案。例如在模型设计环节,除了在极简版本使用的单层神经网络(与房价预测模型一样)外,还可以尝试更复杂的网络结构,如多层神经网络、加入非线性的激活函数,甚至专门针对视觉任务优化的卷积神经网络。
深度学习分类任务:
分类任务用什么损失函数?
深度学习优化算法:
学习率是优化器的一个参数,调整学习率看似是一件非常麻烦的事情,需要不断的调整步长,观察训练时间和Loss的变化。经过研究员的不断的实验,当前已经形成了四种比较成熟的优化算法:SGD、Momentum、AdaGrad和Adam,效果如图所示。
-
SGD: 随机梯度下降算法,每次训练少量数据,抽样偏差导致的参数收敛过程中震荡。
-
Momentum: 引入物理“动量”的概念,累积速度,减少震荡,使参数更新的方向更稳定。
每个批次的数据含有抽样误差,导致梯度更新的方向波动较大。如果我们引入物理动量的概念,给梯度下降的过程加入一定的“惯性”累积,就可以减少更新路径上的震荡,即每次更新的梯度由“历史多次梯度的累积方向”和“当次梯度”加权相加得到。历史多次梯度的累积方向往往是从全局视角更正确的方向,这与“惯性”的物理概念很像,也是为何其起名为“Momentum”的原因。类似不同品牌和材质的篮球有一定的重量差别,街头篮球队中的投手(擅长中远距离投篮)喜欢稍重篮球的比例较高。一个很重要的原因是,重的篮球惯性大,更不容易受到手势的小幅变形或风吹的影响。
- AdaGrad: 根据不同参数距离最优解的远近,动态调整学习率。学习率逐渐下降,依据各参数变化大小调整学习率。
通过调整学习率的实验可以发现:当某个参数的现值距离最优解较远时(表现为梯度的绝对值较大),我们期望参数更新的步长大一些,以便更快收敛到最优解。当某个参数的现值距离最优解较近时(表现为梯度的绝对值较小),我们期望参数的更新步长小一些,以便更精细的逼近最优解。类似于打高尔夫球,专业运动员第一杆开球时,通常会大力打一个远球,让球尽量落在洞口附近。当第二杆面对离洞口较近的球时,他会更轻柔而细致的推杆,避免将球打飞。与此类似,参数更新的步长应该随着优化过程逐渐减少,减少的程度与当前梯度的大小有关。根据这个思想编写的优化算法称为“AdaGrad”,Ada是Adaptive的缩写,表示“适应环境而变化”的意思。RMSProp是在AdaGrad基础上的改进,学习率随着梯度变化而适应,解决AdaGrad学习率急剧下降的问题。
- Adam: 由于动量和自适应学习率两个优化思路是正交的,因此可以将两个思路结合起来,这就是当前广泛应用的算法。
说明:
每种优化算法均有更多的参数设置,详情可查阅飞桨的官方API文档。理论最合理的未必在具体案例中最有效,所以模型调参是很有必要的,最优的模型配置往往是在一定“理论”和“经验”的指导下实验出来的。