机器学习基础
1.机器学习的分类
1.1监督学习
定义
给定一组样本(通常由人工标注样本),它可以学会将输入数据映射到已知目标(人工标注标签)
应用
监督学习任务主要为分类与回归
其他一些关于监督学习的变体任务:
- 序列生成
- 给定一张图像,预测描述图像的文字
- 语法树预测
- 给定一个句子,预测其分解生成的语法树
- 目标检测
- 给定一张图像,在图中特定目标用边界框标注出来
- 图像分割
- 给定一张图像,在特定物体上画一个像素级的掩模
1.2无监督学习
定义
无监督学习是指在没有目标的情况下寻找数据的有趣变换,即数据无标注,自动学习给定数据的内在模式
应用
- 降维
- 聚类
1.3自监督学习
定义
自监督学习是监督学习的特例,是没有人工标注的标签的监督学习。其标签是从输入数据中生成的,通常使用启发式算法生成的。
应用
- 自编码器
- 给定视频中过去的帧来预测下一帧
- 给定文本中前面的词来预测下一个词
1.4强化学习
定义
智能体接收有关其环境的信息,并学会选择使某种奖励最大化的行动
应用
- AlphaGo
- AI玩游戏
2.机器学习模型的评估
在评估机器学习模型时,我们通常将数据划分为训练集,验证集和测试集;在训练集上进行训练,在训练过程用验证集来监控模型的性能,找到最佳参数之后,最后用训练好的模型在测试集上进行评估。
机器学习的目的是得到可以泛化的模型,即在前所未见的数据上表现很好的模型,而过拟合则是训练过程的最大难点。
过拟合:
随着训练的进行,模型在训练集上的性能始终在提高,但在前所未有的数据上的性能则不再变化或者开始下降
2.1数据集的划分
为什么需要验证集:
开发模型的时候,需要调节模型的配置和学习过程的配置(如模型的层数,模型每层大小,学习率等,这些称之为模型的超参数),超参数的调节是要依据验证集的反馈信号来进行的,这一过程就会导致验证集的信息泄露;最终我们评估的应该是模型在全新数据上的性能,所以需要划分测试集。
常见数据集划分方法
①简单的流出验证
留出一定比例数据作为测试集,剩余数据中选出部分数据作为验证器,其余作为训练集
缺点:如果数据量太少,导致可用的验证集和测试集的样本数就会较少,两者无法代表数据整体的统计规律,如果数据选取方法不一样,可能导致评估结果也会有很大差别。
②k折验证
流出一定比例数据作为测试集,将剩余数据划分为k份,将模型编译k次,每次从中挑选一份最为验证集,在其余(k-1)份上对模型进行训练,最终将k次评估分数的平均值作为模型整体的评估分数。
改进:
如果数据量比较少,每次在划分k个分区时,都将数据事先打乱,在一定程度上可以增加模型评估的准确性
注意事项:
- 在分类任务时,应该要充分随机打乱数据
- 如果数据是该类别进行排序,如果取前一部分数据作为训练集,后一部分数据作为测试集,那么可能会使样本类别不均衡
- 数据类型为时序数据时,不应随机打乱数据
- 如:根据过去数据预测未来,随机打乱数据可能会造成信息泄露
- 数据冗余,应该要确保训练集和测试集之间没有交集
2.2数据预处理
-
向量化
- 数据在输入模型之前,一定要处理成对应张量模式
-
值标准化
- 将取值比较大的数据或异质数据输入到模型中是不安全的
- 可能会导致比较大的梯度更新,从而导致模型不收敛
- 在输入模型之前,需要对每个特征进行标准化,使其均值为0,方差为1
- 将取值比较大的数据或异质数据输入到模型中是不安全的
-
缺失值处理
- 训练集中的缺失值,可以替代为0处理(前提为0在整个数据集上不是一个有意义的数字)
- 网络会自动从学习到0是一种缺失数据,并且最终会忽视这个值
- 如果训练集中没有缺失值,而测试集中有缺失值
- 网络是无法学会如何处理这些缺失值,此时应人为生成一些缺失值样本,加入训练集中
- 训练集中的缺失值,可以替代为0处理(前提为0在整个数据集上不是一个有意义的数字)
2.3过拟合与欠拟合
过拟合:随着训练的进行,模型在训练集上的性能始终在提高,但在测试集上的性能则不再变化或者开始下降
欠拟合:在训练集上的数据损失值越小,在测试集上损失值也越小
过拟合解决方法:
-
增加数据量
- 训练数据越多,模型的泛化能力也就越好
-
对模型加以约束
- 正则化
- 添加权重正则化
- 奥卡姆剃刀原理:如果一个事情有两种解释,那么最可能正确解释就是最简单的那个,即假设更少的那个
- 权重正则化:向网络的损失函数中添加与较大权重值相关的成本,强制让模型权重只能取较小值,从而限制模型的复杂度
- L1正则化:添加的成本与权重系数的绝对值成正比
- L2正则化(权重衰减):添加的成本与权重系数的平方成正比
- 添加drop_out正则化
- 对某一层使用drop_out,就是在训练过程随机将该层的一些输出特征舍弃
- dropout_prob:通常在0.2~0.5范围内
- 添加权重正则化
- 正则化
-
减小网络大小
- 网络越大,其记忆容量也就越大,拟合训练数据的速度就越快,也更容易出现过拟合
-
数据增强(Data Augmentation)
3.机器学习流程
1.定义问题,收集数据集
- 明确输入数据是什么,预测结果是什么?
- 确定求解问题的类型:分类?or 回归? or others
- 做出假设:
- 输出是可以根据输入来进行预测
- 数据包含足够多的信息,足以学习输入和输出之间的关系
2.选择衡量成功指标
- 成功定义:精度?准确率?召回率?
- 成功指标会引导目标函数(损失函数)的定义
3.确定评估方法
- 数据集的划分
- 留出验证
- k折交叉验证
- 重复k折验证
4.数据准确
- 数据预处理
5.开发比基准更好模型
- 开发一个小模型,观察其能否打败纯随机的基准
- 验证前面的两个假设是否成立
- 训练配置
- 最后一层的激活函数,根据问题类型选择
- 损失函数
- 优化器
6.扩大模型规模
- 最好的模型是处于欠拟合与过拟合的分界线上
- 为了找到最好的基准,必须穿越分界线,开发出过拟合模型
- 使用更复杂的模型
- 增加模型训练的轮次
7.模型调优
- 添加dropout
- 尝试不同模型结构:增加 or 减少网络层数
- 添加权重正则化,L1 or L2
- 尝试不同的超参数
- 特征工程?