数据
具体方法的采用,要综合成本和效率
1,数据收集
○ 爬取
网页爬取 -利用云 开多个实例比如100个,
○ 采集
2.数据标注
○ 半监督
○ 众包
○ 弱监督 基于一些规则的处理
这三种方法可以组合使用
3.数据探索
pandas 读取文本数据,建议采用.zip压缩格式,加快读取速度(从磁盘读取的速度)。
○ 值
无值
空值
Nan
○ 类型
○ 分布
■ 特别是和目标相关特征的数据分布
○ 相关性
4.数据清理
提升数据质量。
○ 问题数据训练出来的模型,性能会逐渐退化(模型迭代循环)
○ 数据错误
■ 值 不在正常分布区间内 outlier
■ 规则冲突 rule
■ 语法,语义(货币单位,拼写)-pattern
检测错误:类型数据(拼写),值数据(看分布),直接的映射关系等等
5.数据变形 格式变化
平衡大小(存储),读取速度和数据质量
○ 表数据
■ Normalization
● Min-Max Normalization
● Z-score Normalization :0 mean 1 stand deviation
● Decimal scaling 全部转化为小数 -1~1。之间
● log 压缩分布区间 log的加减等于源值乘除
○ Image Transformations
爬数据不是问题,关键是数据的存储(成本很高)及之后的处理
■ Downsampling and Cropping 下采样
● ML is good at kow-resolution images
● Be aware of jpeg qulity 80%~90% —》1% acc。drop
■ image whitening
○ 视频
■ 大小,质量,loading速度
■ 短视频 <10s(切割) 实际机器学习时,也是采样一些帧。这个比较耗机器,一般用GPU。存和读要综合考虑
■ 存储 压缩算法。
ML只能看 注相对短,(聚焦) 有用的片段,看不了太长的视频
○ Text Transformations
■ 词根化,语法化(针对英语,中文不存在)。机器学习不怎么关注语法
● Eg。car,cars,cas’s —》car ,Eg am,are,is—>be
■ Tokenization 词元化
word ,char,subwords
6.特征工程
- 深度学习,通过算法自动抽取特征。特征和参数一起学。(耗资源和金钱)
○ 表数据
■ int/float 转化为几个区间。因为机器学习不关注具体值,关注的是值处于那个范围。—这个和后面的可以降低参数精度就能对上了
■ 分类 one-hot encoding
■ 时间格式 转换为year,month,day,day of year,week of year,day of week
■ 组合 [cat,dog] * [male,female] = >[cat male],[cat female],[dog ,male][dog,female]
○ text
■ token features (one hot;bag of words—BOW,Word Embedding–word2vec)
■ Pre trained language models.(BERT/GP3). 抽取特征, 贵
○ Image/Video
■ hand-craft such :SIFT
■ Pre trained language models. softmax regresion之前的输出 可以作为特征.
挑战:
- 数据量 vs 数据质量(label 质量)
- 数据质量
○ 多样性
○ 无偏向
○ 公平
3.大数据的管理 数据存储,数据处理,数据版本,数据安全
算法/模型
1.决策树
○ 随机森林
■ 多棵树 独立 随机采样行,随机采样特征来构建一棵树
■ 分类(多棵是投票方法),回归(多棵树求均值)
○ GBDT
■ 多棵树 新的树 在之前的残差上训练, 通过多棵树组合来训练 。新的树是针对训练的不准的部分在训练
○ 其他Boosting模型
○ 。。。
● 工业界应用最多。简单,没有太多超参数,结果一般都还不错。通过树模型,可以让我们对数据有一个判断。一般树模型是我们的第一选择模型
2.线性模型
○ 回归 == > 输出是一个值
○ 分类 > 输出是向量
■ MSE 的问题,通过把输出值(负无穷~ 正无穷),通过softmax转换为一个概率(置信度),这样所有的概率输出加起来为1.===》softmax回归。
○ softmax回归。
3.SGD
Mini SGD
4.多层感知机
A dense layer :y = Wx + b (W:m*n, b: m) 全联接层,可以称之为单层感知机,
linear regression :dense layer with 1 ouput
softmax regression: dense layer with m outputs + softmax
linear ===>MLP (多层感知机)
激活函数 sigmoid,ReLu
隐藏层(可堆叠) 是对输出来说的,
超参数:hidden layers,outputs for each hidden layer
5.卷积神经网络
卷基层 Dense layer ----> Conv layer
pooling layer 池化 最大池化,平均池化(conv的输出是池化的输入) 池化是为了降低对位置的敏感型。
CNN:
inputs–>conv -->activation(relu)–>pooling - conv -->activation(relu)–>pooling -Dense–>outputs
本地性 + 平移不变性
○ activation用在每一个卷基层之后
○ 池化是为了降低对位置的敏感型。
● Moder CNN :deep neural network with various hyper-parameters and layer connections.(Alex net,VGG,Inceptions,ResNet,MobileNet)
6.循环神经网络
MLP ---->RNN
simple RNN
concat :hidden(存储过去的状态信息)+ next input
Gate RNN(LSTM,GRU)
Bi-RNN(完形填空)
deep rnn
model select
7.模型评估
广告:
分类模型
ACC(准确率), 精准率。召回率,F1-score
ROC()/AUC
性能指标:
Latency(),ASN(average ads in a page),CTR(user click through rate),ACP(average price advertiser pays per click);
Revene =pageviews * ASNCTRACP
好的AUC有正向的效果,但是只是好的AUC,不能保证好的商业指标。
8.欠拟合和过拟合
训练误差,泛化误差
data and model (复杂度) Complexity
模型复杂度
不同算法模型复杂度很难比较,只能是同类型的模型做一些比较。
trees vs nerual 很难比较
different tree /different MLP, 可以比较
参数数量
每个参数的值,值有限制的模型相对简单----正则化
数据复杂度
样本数,样本的维度,特殊的时空结构,数据多样性;
不同的数据复杂度 也是很难比较。只能是类似问题间的数据比较
8.模型验证
泛化误差评估
测试数据集 只能被用一次。
通常我们用的测试集实际上是验证集,验证集可以用多次。
通常上也是用验证集上的误差,近视为泛化误差。
数据分割
随机分割,假设数据的每个样本 是独立同分布(I.I.D)的。实际上很多数据 不符合这个.。过拟合会出现的晚一些
时序数据: (在树模型【 验证集 应该在训练集后面】 和线性回归 有不同的表现)
可分组数据,相同的数据应该在同一个组
数据不平衡:验证集 更多的从小类采样。
交叉验证 k=5,10
常见错误
超级好误差的模型 大部分是验证集被污染了,验证集里有来自训练集的数据(重复数据),验证集数据信息泄漏到了训练集上
9.偏差(主要是训练数据的拟合),方差(影响在测试数据上的拟合)
下面是泛化误差的公式
可以通过更高质量的数据,可以降低最后一项
10.集成学习----贵
○ Bagging
多个独立模型 均值(回归),投票(分类)
每个模型,m个训练样本,随机采样也是m个(这个m里面可能有重复值,大概1-1/e ~ 63% )
主要用于降低方差,不稳定的模型一般方差比较大,比如决策树…; 线性回归是比较稳定的。
bagging的一个重要应用就是 随机森里
○ Boosting
n个弱模型, 迭代的模型针对之前模型预测不好的样本,====》降低偏差
■ adaBoost adaboost是一种不同损失函数的Boost
■ gradient Boost t=1 是在源数据上训练 之后都是在残差上训练,去拟合残差。 里面有学习率,有梯度。用gradient Boost 做决策时 就是GBDT,其他还有XGBoost,LightGBM等
弱的模型,比如只用了一部分特征,训练的模型。
○ Stacking 刷榜利器
■ 方差
单层stacking
■ 偏差
多层stacking ,
下层的输入是原始特征+上一层的输出.。这样同一份数据被学习多次,就特别容易过拟合。所以可以原数据分开,分层训练。可以采用类似K折验证的方法,降低过拟合。
○ from autogluon.tabular import TabularPredictor
11.模型调参
○ 手动调参
○ 自动调参【机器的成本< 人的成本】
■ AutoML
HPO Hyperparameter optimization 超参数优化
NAS Neruak archieture search 模型选择
12.超参数优化
搜索空间 算法: black-box 不关注训练内部,只关注输入(超参数组合)和输出,具体算法有如下
gird Serach 存在维度诅咒问题
randdom search 比较有效
Bayesian optimization 贝叶斯优化
BO/Surrogate model multi-fielity 超参数排序,深入任务细节 successive halving 每轮超参数减半(保留重要参数的重要数值),训练轮次加倍。
Hyper band ----多个successive halving,多跑几次,跑下次减少参数数量,增加跑的轮数
实践中,从random search开始。另外关注top performers,就用top performers(top5)试下新的数据集,就可以分析出来。都不用跑search
13.NAS Neruak archieture search(选择不同网络架构)
nas with Reinforcement Learning.
one-shot Approach ;
training archieture and model params together.
14.深度神经网络架构
■ 残差链接,
■ 注意力,
■ 批量归一化(Batch Normalization)实际意义上是标准化,对特征那一列进行Normalization。
■ 层归一化(对每个样本 按行 normalization,这样通过变换后样本的计算就可以获得BN需要的均值和方差)
■ 更多的归一化
○ 归一化 可以让网络更容易训练一些,不用BN效果也可以。
15.迁移学习
■ 特征提取
■ 模型重用
■ 模型微调
初始化
■ 预训练模型的特征提取器
■ 随机初始化outout layer
■ 开始参数优化训练
训练
■ 限制搜索空间-【通过小的学习率(因为已经在解附近了),较少的epochs】,在自己的数据集上训练
■ 把最底层的基层固定住----训练时,可以选择要微调的层,比如只微调输出层,或者是某些层,一般都会把下面的层固定住【把学习率设为0】,都微调。底层学习的是抽象的底层特征。上层学习的是语义空间------》加快训练速度
应用(ImageNet上的预训练模型 )
检测/分割segmentation
医疗/卫星数据集
微调不总是能改善精度,但也不会变差,但可以加快训练速度,因为它会比随机的起点要好很多.
■ 其他
● 半监督学习
● zero-shot /few-shot
● multi-task learning
16…NLP中的微调
bert/gpt/t5
最后 机器学习解决的是P问题,不是NP问题(最优解)