沐神机器学习笔记

笔记系列目录

沐神:别把大神当大神



第一章

代码可以在vscode敲一遍

1.2 数据获取(注意隐私)

没有足够数据:找数据或实操得到 / 融合数据 / 数据生成
是否满足要求:模型需要多类数据还是大量数据

找数据:Paperwithcoudes Datasets / Kaggle / google dataset search / tensorflow 本身 或 huggingface / Open data on aws (大规模数据,如气象卫星)

数据融合: hive,实用join,注意:缺失/冗余/数值冲突/key不对应等
数据增强:如gan,旋转 拉伸,英语-翻译为法语-再翻译回英语
数据合成:如3D模型等

1.3 网页获取(有代码)

爬虫:3-5s一个网页是比较合理的时间,IP禁掉之后重启即会分配新IP(爬完之后,存储是大问题)

1.4 数据标注

(1)半监督学习:(相似特征,同一类,降维)使用模型先训练,然后反馈得到置信度比较高的,然后循环(由于不上线,且为了后续精确,可以不计成本的上一些大模型)
(2)众包(crowdsourcing)标数据:设置简单问题可以降低成本,对于可能有错误的问题,通过把相同任务发给多个人
(3)主动学习:如不确信采样(和半监督差不多,且通常会同时采用,不断更新数据集以进行标签预测)
(4)弱监督学习(data programming):关键词,正则化,模型,发给平台图片分类等,最后把所有规则总和

第二章

2.1 探索性数据分析 (有代码)

from IPython import display
display.set_matplotlib_formats('svg')
# 警告可以忽视

另读取csv比较大时,可以直接读压缩文件(尤其是文本文件)

2.2 数据清洗 (有代码)

需要数据清洗的数据类型:

  1. 超过数据边界(Outliers,类别不对或者类别中的数目过少的【box图中间是25%-75%,上边界是1.5倍的box height,之外即为离群值】)
  2. 缺失/必须唯一却没有唯一(Rule-based detection,直接根据经验设置规则)
  3. 格式/单位不同/空格/语义语法(Pattern-based detection,直接根据经验设置规则)

2.3 数据变形

平衡数据大小/质量/加载速度
在这里插入图片描述

  • 图片:机器学习低分辨率也可以很好地学习(同时节省了内存),因为关注逐个像素点,resize、采样图片、降维都可以,但中等质量的图片会有1%的精度下降
  • 视频:视频一般要去掉冗余的片段,且压缩后存起来,机器学习模型需要解压缩和采样这样速度会很慢
  • 文本:语法化(am/is变为be)或词根化(car‘s变为car)或子词化(拆分成字母)

2.4 特征工程

注:以前因为模型简单所以多做特征工程然后用SVM,现在深度学习可以自己进行特征提取
(a)对于数值,即tubular

  1. 切分区间
  2. 对于类别:one-hot encoding 独热编码,把小众类作为一列0
  3. 对于时间类型:可以多给一些,比如一个日期,可以添加day_of_year,week_of_year,day_of_week
  4. feature combination(做笛卡尔乘积,然后用one-hot,可以得到相关性信息)
    (b) 对于文本
    token features:
    bag of words (BoW) 词频统计,缺点会缺少顺序信息
    word embeddings (eg: Word2vec) 通过根据上下文训练,可以得到词的向量表示,内积越近代表语义越近,进而可以表示整句(求和或平均)
    但使用预训练模型会更准(如BERT,GPT-3,中间会有Transformer,但开销更大)
    (c)图片/视频
    同样使用预训练模型,拿出倒数第二层提取除的特征

一二章总结:调模型VS收集数据,数据质量:diversity/unbiased/fairness(不是针对特定的人或地方),数据管理:存储/迭代/安全性
在这里插入图片描述

第三章

3.1 机器学习介绍

在这里插入图片描述
在这里插入图片描述

3.2 决策树

优点:可解释性,可以针对数据或类别
缺点:对噪音敏感,过拟合,难以并行

  • 树模型常作为首选模型判断是否可行
  • 随机森林:同时训练多个数,随后通过投票(分类问题)和取平均(回归问题)
  • 随机:通过随机性可以提高鲁棒性,bagging数据通过有放回采样和特征随机采样
  • gradient boosting decision tree,按顺序训练多个树,梯度下降决策树同样可以提升模型鲁棒性(不断弥补残差)

3.3 线性模型

(1)回归
(2)分类:还是针对one-hot,但是不仅仅关注了真实的类,还关注了错误的类,学习起来太过复杂——softmax,将正负无穷范围的数变为正数,且求和后为1,是递增的且最后判断类别的时候还是以概率的最大值为类别,所以认为线性模型。在此基础上使用cross-entropy,label为0的时候,只剩下我们关注的类,所以学习效果会更好。

3.4 小批量随机梯度下降

  • 除了决策树,均可以用此方法求解
  • yield和return不同可以反复调用

3.5 多层感知机

  • 线性模型:需要自己做特征提取,模型喜欢的输入
  • 神经网络:网络自己提取,但和线性模型比需要1000倍以上的数据量和学习的参数(回归:一个输出,分类:多个输出),主要四类:多层感知机,卷积神经网络,循环神经网络,Transformer(变形金刚)
  • 线性模型其实就是单层神经网络
  • 神经网络的非线性体现在激活函数

3.6 卷积神经网络

  • 用MLP学图片特征,需要学习的参数太多了
  • 根据Locality(只关注小窗口,kernel)和Translation invariant(平移不变性,即共享学习到的参数,之前的位置可以用这样的参数识别,另外的位置也可以)两个特性,CNN不再考虑输入输出的个数,而考虑每个小窗口(kernel,但一个模式不够,所以有多通道)
  • 满足上面两个条件的,不一定是图像,均可用CNN
  • 池化层:可以让模型对像素平移(或者说位置)不敏感,满足要求的特征经过计算还是会很大
  • 常见结构:输入-卷积层-激活函数-池化层-全连接-输出
  • 常见架构:AlexNext, VGG, Inceptions, ResNet, MobileNet

3.7 循环神经网络

  • 常用于NLP,可以看做处理变化长度输入的MLP,但实际用的时候是固定长度的模型
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

第四章

4.1 模型评估

经常会用多个指标进行评价
分类指标:
在这里插入图片描述

  • 其中,精度和召回分子一样,precision解决了正样本特别少的问题,但如果要求模型输出严格些(即高置信度在判别为对应类),这样分母会变小,整个值会很大,此时recall解决了这个问题
  • F1则对应两者的调和平均
    在这里插入图片描述
  • ROC,0.5模型最差(即完全随机),1最好
  • 实际业务中会更关注是否可以区分出会点击的广告和不会点击的广告,所以更关注ROC(而不是F1)
  • AUC和盈利之间指标的平衡

4.2 过拟合和欠拟合

  • 训练误差和泛化误差
  • 参数复杂度,模型复杂度(参数的数量和范围,但都是同类模型在比)
  • 最好的模型,应该是有一点过拟合(即泛化误差会比训练误差高一些)
    在这里插入图片描述
    在这里插入图片描述
  • 不断更新模型,选择的模型复杂度要和数据复杂度匹配
  • 通过采样部分特征进行训练也可以解决过拟合问题

4.3 模型验证

  • 测试集只使用一次,太费数据。所以从训练集中拿出一部分作为验证集多次用。(可以以考试做历年真题为例进行理解),且希望验证集尽可能接近真实想要预测的数据
  • non i.i.d data(非独立同分布数据):随机选有时并不行,例如时序信息,验证集的时间要后于训练集的时间;同一个人的不同照片同时出现在训练集和验证集,那效果自然会好;再比如不平衡的数据集(多采些小类或者各一半都是可以的)
  • 比如房价预测,分为前三个月和后三个月时,模型浅一点泛化效果会好些,这样不会太多学习前三个月而过拟合;而随机分的时候,可以学习整个趋势,所以模型可以复杂一些
  • K-fold:分组分别进行,取平均作为整体误差,K=5或10,常用于数据量没有那么多且模型训练成本不高的情况
  • 效果很好,很有可能是验证集受到了污染

第五章

5.1 方差和偏差

在这里插入图片描述
泛化的误差等于 = (偏差:每次学习差多远)+ (方差:每次学习变化多大) + (数据本身的噪音)
在这里插入图片描述
在这里插入图片描述

Bagging

bagging是合成词:boostrap aggrgrating
在这里插入图片描述
在这里插入图片描述

  • 柯西不等式,每个差的越多误差就越小,即方差越小,Bagging效果越好。决策树选择的数据不同,学习到的分割条件就不同,所以不稳定,所以最为base learner时效果会变好。线性模型则由于比较稳定,结果几乎不变。
  • 使用bagging下降的是方差
  • 应用:随机森林

Boosting

  • 目的是降低偏差,且是按顺序学,更关注之前分类错误的,会根据之前的误差来重新采样数据
  • 应用:AdaBoost和gradient boosting
    在这里插入图片描述
  • 梯度可以变为其它方式,也因为可以变为其它的Boosting方法
  • 对于回归问题:多个模型的最后是求和,而bagging是求平均
  • 当使用week learner(每个模型都很弱),且学习率较低时,不容易过拟合
  • 不能并行计算,而bagging可以
  • 应用:XGBoost,lightGBM(两个包都写了加速的方法)
    在这里插入图片描述

Stacking

  • 刷榜利器
  • bagging是在不同的数据上(bootstrap采样方法)训练同一个模型,而stacking是在同样的数据上训练不同的模型,来降低方差,结果是通过concat,再做线性的组合得到输出(可以通过学习得到怎么对每个模型的结果怎么进行组合)
    在这里插入图片描述
  • 目前已经降低方差了,如何进一步降低偏差:每一层在上一层的基础上去拟合在这里插入图片描述 - 如何解决上述方法的过拟合:(repeat,即取平均使得每层输入均有略微不同)在这里插入图片描述
  • 时间成本昂贵,但可以并行,同时要注意过拟合

第九章

9.1 模型调参

  • Adam优化方法结果不一定最好,但对参数没那么敏感,调参方便,所以很多人会用
  • 可以使用默认参数 / 论文中的参数作为baseline,一次改变一个参数来寻找比较敏感的参数
    在这里插入图片描述
    在这里插入图片描述

9.2 超参数优化

  • batch size之所以是2的次方,是为了分配给线程计算的时候刚好map
  • 主要有两大类:black-box(每组参数完整训练)和multi-fidelity(加速,如使用部分训练集/使用简单的模型/不扫很多遍数)
    在这里插入图片描述
  • 随机搜索:根据最大搜索时间确定随机搜索次数,如果有一段时间精度没有提升就可以早停,目前最好用的方法
  • 贝叶斯优化,要调参且不能并行,贝叶斯优于随机优化一般出现在,问题简单或预算充足
  • successive halving:每次淘汰一半的参数,再增加一倍的epoch,如此训练时间是固定的。但总epoch数,迭代次数t,每次迭代epoch设置m,和搜索参数配置个数n都要确定(可以先设置m以粗略设置,但n代表exploration,m代表exploitation,有和贝叶斯类似的博弈在)
  • Hyperband:进行多次的successive halving,后面n逐渐减少,m逐渐增加
  • 可能出现某几组参数,在各个地方结果都不错,再入效果比较好的论文参数设置,只在这些好的参数组合测试或许就能得到不错的结果

9.3 网络架构搜索

  • 2017年:RNN+实际训练评估+强化学习,实现网络架构搜索(NAS),但强化学习(类似贝叶斯)成本很高
  • one-shot:训练一个大的模型,每个参数包含其中,使用不训练完整等方法来加速,如differentiable architecture search,使用softmax来学习
  • scaling CNNs:使用部分神经网络,EfficientNet就是用这个方法,根据模型计算复杂度,只动其中一个参数即可,另外的配置全部一体会跟着动
  • 值得注意的问题:会发现搜索出的最优模型不对称,即可解释不行

第十章

10.1 深度神经网络架构

  • 残差和注意力机制可以看论文精读
  • Normalization:可以使损失函数更加平滑,即可以使用更大的学习率,进而更容易受收敛。但其实对精度影响不大,可以不做,有其它的方法弥补
  • 批量归一化(Batch Normalization):可拆解为四步:(1)输入变为2D (2)每一列标准化(3)通过逆操作可以实现数据的还原,但参数可以学习,从而更适用于模型(4)2D还原最开始的维度
  • 层的归一化:和BN类似,但做了转置,即对列标准化,这样针对每个样本分别计算,而不需要考虑前面的样本,尤其适用于RNN和transformers
    在这里插入图片描述
  • 针对不同的模型还是要用不同的Normalizations

第十一章

11.1 迁移学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值