数据相关
要做量和质量的权衡 1.常用的数据收集网站
数据湖
学术数据集:数据已经被处理,清洗,小少
竞赛数据集:更接近应用数据集,相对比较干净的数据集(小少)
原始的数据集:比较多,范围广
2.数据融合:把不同源的数据转换成一个比较一致性的数据集 找到关键key, 处理数据缺失的行,
3.data augmentations 数据增强
4.web crawling :网页爬虫
scraping:网页数据提取,对网页中的特定信息数据提取,一般会变成一张table
5.数据标注
- (1)半监督 semi-supervised learning (SSL) 对有标注数据和无标注数据的假设:一.连续性假设 二.聚类假设 三.流形假设(1.所有数据点可以被多个低维流形表达。简单理解就是,将高维冗余特征降维到低维空间;2.相同流形上的数据点,标签一样。换句话说,降维之后同样标签的数据要接近或一致。)流形假设:数据的内在复杂性远远比内在(或者说看到的维度)的要低 自学习(自训练)算法:1.利用已标好的数据训练一个模型 2.利用模型对没有标注的数据进行预测,得到一些伪标号(选择置信度高的结果) 3.将伪标号和之前标注好的数据进行合并,在更大的数据集上再次进行模型训练
众包人工标注
-
(2)主动学习(active-learning)让人来干预:1.uncertainty sampling 利用已标好的数据训练一个模型 ,利用模型对没有标注的数据进行预测,选择最不确定的数据,让人来标注(就是选择最难标注的数据让人标注)2.query-by-committee:使用多个模型进行训练,让多个模型进行投票,找到最难判断的数据,让人来标注
-
(3).主动学习和自训练的结合
(4)弱监督(半自动的生成标签,这些标签的精度没那么高,但是用于训练是足够了):data programming(数据编程)用启发式的方法给数据标注
(5)数据可视化展示
5.数据清洗, 提升数据质量 基于规则检测,基于模式检测,基于语义检测 可以使用工具多清洗几遍
6.数据变换 原始数据 -> 标注和清洗 -> 数据变换 -> 特征工程 -> 模型训练 机器学习对数据较敏感,数值范围太大,数值会不稳定 normalization (标准化,归一化) ,对数值,图片,视频,文本(词根化或语法化,概化,tokenization词元(子词,词,char))做变换 机器学习对低分辨率的图处理的还是不错的,
7.特征工程 one-hot 独热编码,一位有效编码 文本词元: bag of words (BOW), word embedding(词嵌入)word2vec 图片和视频
机器学习算法
1.分类: 监督学习(包含self-supervised),半监督学习(包含self-training), 无监督学习(聚类,density estimation(GAN)),reinforcement :强化学习,跟环境交互,做出行为,对行为进行评估或者叫奖励 2.监督模型 : model -> loss -> 目标函数 -> 优化(优化可学习的参数)
-
监督学习的model 类型: 决策树, 线性模型, 核函数, 神经网络
-
决策树模型: 分类树和回归树 决策树可解释性,能处理分类和数值问题, 但是生成的树比较复杂可能过拟合(需剪枝),顺序执行,不太好并行, 生成树不稳定,生成随机森林提高稳定性, 梯度提升决策树:(Gradient Boosting Decision Tree,GBDT)顺序的训练出一些树,每一个新预测的树,是之前那些预测树预测不准的那一部分,去继续拟合它
5.线性模型 线性回归 mean square error (MSE) 均方误差 逻辑回归 只需要那个真实类的置信度够大够强,如果用均方误差就算不是这个类,也要让置信度变小(关注东西太多,其实那些东西是不关心的,比如不是这个类的置信度), 逻辑回归使用交叉熵作为损失函数,只关心正确类别,而不关心其他类别的概率
6.手动特征提取 -> 深度神经网络自己提取特征(需要更多的数据,更多的计算量) 使用不同的神经网络架构来抽取特征: 多层感知机 , 卷积神经网络,循环神经网络, transformers multilayer perceptron (MLP)多层感知机 使用ReLU的神经网络计算比较高效,但是如果学习率很大,更新后不一定能被激活,所以relu的变种也很常用
卷积神经网络:本地性(局部性) -> 窗口大小(卷积的核),平移不变性 -> 参数共享 卷积层理论上来说也是线性的, 卷积核用来识别图片的模式,或者叫特征图,卷积(交叉相关)cross correlation,卷积网络对位置敏感 池化层对信息不敏感,添加pooling layer(池化层,汇聚层)增加对位置移动的鲁棒性,如果使用K*K的窗口,那么对k个像素的偏移不会那么敏感,把图像分成很多小块,然后取这个小块的池化值,相当于采样,图片偏移不大时,相同采样方式得到的采样值是一样的,
循环神经网络
7.模型评估 对不平衡问题(例如正类和负类数量不对等)常常更关心预测正确的
数据的复杂度和模型复杂度相匹配,数据量少的时候选简单模型,数据量大选复杂模型,正则项用来限制可学习的范围, 数据规模和质量决定上限,模型只是逼近这个上限
一般更关心模型的泛化误差,测试数据集,随机划分训练集和测试集的前提是样本符合独立同分布
样本比较少的时候,使用K折交叉验证,k = 5 或者 10
泛化误差 = 偏差 + 方差(减小方差的方法,用一个简单的模型,或者使用L1、L2 正则限制参数学习的范围) + 数据噪音的方差(提高数据质量) 偏差太大说明模型复杂度不够,
8.集成学习: 通过多个模型来提升我的预测的性能 boosting Stacking bagging 一. bagging - Bootstrap aggregating,引导聚集算法, 装袋算法 下降的主要是方差 相互独立的训练n个模型(不同数据上训练相同类型的模型)(给定一个大小为n的训练集D,Bagging算法从中均匀、有放回地(即使用自助抽样法)选出m个大小为n'的子集Di,作为新的训练集。),如果是回归任务各个模型结果取平均,如果是分类任务,就进行投票。 方差大的模型被称为不稳定模型(决策树不稳定,线性回归比较稳定),在baselearner方差比较大的时候,使用bagging 方差下降的更多,bagging一个最重要的应用是随机森林 bagging用n个不太稳定(方差大)的模型得到一个相对稳定的模型 二.boosting就是用多个弱一点的模型(偏差大),组合在一起变成一个强一点的模型(偏差小的模型),按顺序的学习n个模型,第i步训练一个弱模型h_i,评估整个样本的误差,然后重采样,使得我们接下来的模型会更关注那些我们预测不正确的样本,经典的例子是adaBoost, gradient boosting gradient boosting: 在时间t的时候,我当前训练好的模型是H_t,然后在训练一个弱一点的模型h_t把之前没有拟合好的残差重新拟合一下(在残差上训练,特征什么的不变,但是标签是用的y - H_t(x)), H_t+1 = H_t + n h_t (n 为学习率)
GBDT:gradient boosting decision trees 学习率控制好的时候,过拟合不那么严重
三.stacking 多个base learning(可以是多个不同类别,在原始数据上训练) 放在一起,把每个模型的输出concat起来,降低方差,
多层Stacking :特别容易过拟合,训练第一层和第二层的数据集不应该是同一个,或者 K折交叉验证
9.调整超参数 参数记录: 手动调参 - > 自动调参 摩尔定律其核心内容为:集成电路上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍。换言之,处理器的性能大约每两年翻一倍,同时价格下降为之前的一半.
Automated Machine Learning(AutoML)将机器学习中所有耗时过程自动化
HPO: mutil-fidelity NAS:
10.迁移学习 特征提取器(encoder) 做决策的 (decoder) encoder 和decoder的划分没有那么明显 预训练模型:一个在大数据集上训练的模型,具有一定的泛化能力 微调:fine-tuning 用小的学习率,小的搜索空间 深度学习(神经网络)中,最底层的一些层是 图片像素底层特征,越往上可能是更大的更有全局性的语义特征, NLP: 一般是自监督 self-supervised