机器学习笔记

听说谷歌出了一个机器学习的课程 (早就出了,致远星战况如何),去学习了一下并且做了一些笔记(基本上是照着 总结的)。

谷歌机器学习速成课程笔记

  • 回归用于预测可连续的值,分类用于预测离散的值

简单来说,训练模型表示通过有标签样本来学习(确定)所有权重和偏差的理想值。在监督式学习中,机器学习算法通过以下方式构建模型:检查多个样本并尝试找出可最大限度地减少损失的模型;这一过程称为经验风险最小化

  • 平方损失是一种常见的损失函数,(L2损失),单一样本的损失为欧几里得距离的平方

  • 均方误差是每个样本的平均平方损失。要计算 MSE,请求出各个样本的所有平方损失之和,然后除以样本数量

  • 通常,可以不断迭代,直到总体损失不再变化或至少变化极其缓慢为止。这时候,我们可以说该模型已收敛

  • 梯度矢量具有方向和大小。梯度下降算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置。

  • 超参数是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费相当多的时间来调整学习速率。如果选择的学习速率过小,就会花费太长的学习时间;如果指定的学习速率过大,下一个点将永远在 U 形曲线的底部随意弹跳

小批量随机梯度下降法(小批量 SGD)是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量 SGD 可以减少 SGD 中的杂乱样本数量,但仍然比全批量更高效。

  • 通过截取离群值(将某些值明显和其他不正常的值限制在一个合理的范围之内【我是这么理解的😅)可以改进模型的拟合情况

  • 总的训练的样本 = batch size(随机选择) * 训练迭代的总次数

  • 泛化是指对于全新的数据能够有较好的效果

  • 通过配套的playground可以推断出通过降低学习速率可以提高训练效果。多数情况下,增加批量大小不会显著影响训练损失或测试损失,有的时候,增加批量大小会是的训练效果更好。

  • 将数据分为训练数据-测试数据可能会在不断地调整参数的过程中造成过拟合。一种较为优秀的时间是将数据分为训练数据-验证数据-测试数据。通过在验证数据对训练结果进行验证,而测试数据只在最后使用。

  • shuffle dataframe

    1
    2
    from sklearn.utils import shuffle
    df = shuffle(df)
  • 在对数据进行预先处理的时候,需要注意遗漏值,重复样本,不良标签和不良特征值。并在可能的时候对其进行修正。

  • 正则化指的是减小模型复杂度来减少过渡拟合

    • 提前停止
    • 添加模型复杂度惩罚(正则化)
  • 逻辑回归会生成一个介于0到1之间的概率值,使用对数损失函数

  • 正确率可能会在正例和负例不均衡的情况下出现一些偏差,并不能很好的反映模型的情况

  • 分类

    • 精确率 = TP / (TP + FP);在被识别为正类别的样本中,确实为正类别的比例是多少?
    • 灵敏度,召回率 = TP / (TP + FN);在所有正类别样本中,被正确识别为正类别的比例是多少?

曲线下面积因以下两个原因而比较实用:

  • 曲线下面积的尺度不变。它测量预测的排名情况,而不是测量其绝对值。
  • 曲线下面积的分类阈值不变。它测量模型预测的质量,而不考虑所选的分类阈值。

不过,这两个原因都有各自的局限性,这可能会导致曲线下面积在某些用例中不太实用:

  • 并非总是希望尺度不变。 例如,有时我们非常需要被良好校准的概率输出,而曲线下面积无法告诉我们这一结果。
  • 并非总是希望分类阈值不变。 在假负例与假正例的代价存在较大差异的情况下,尽量减少一种类型的分类错误可能至关重要。例如,在进行垃圾邮件检测时,您可能希望优先考虑尽量减少假正例(即使这会导致假负例大幅增加)。对于此类优化,曲线下面积并非一个实用的指标。
  • 预测偏差指的是预测平均值以及数据集中标签的平均值的差

  • 造成预测偏差的可能原因包括

    • 特征集不完整
    • 数据集混乱
    • 模型实现流水线中有错误
    • 训练样本有偏差
    • 正则化过强
  • 可以添加校准层调整模型输出,减小预测偏差(不推荐)

  • L1正则化

    • 降低权重而不是权重的平方
    • 从 L2 正则化转换到 L1 正则化之后,所有已知权重将有所减少
    • 增加 L1 正则化率一般会减小已知权重,正则化率过高的时候,模型将不能够收敛
    • 使得大多数信息缺乏的特征的权重正好为0
    • 可能会使得信息丰富的特征的其暗中正好为0
    • 可以用于减小模型的大小
  • 反向传播的直观演示

  • 梯度相关

    梯度消失:较低层(更接近输入)的梯度可能会变得非常小。在深度网络中,计算这些梯度时,可能涉及许多小项的乘积。当较低层的梯度逐渐消失到 0 时,这些层的训练速度会非常缓慢,甚至不再训练。ReLU 激活函数有助于防止梯度消失。

    梯度爆炸:如果网络中的权重过大,则较低层的梯度会涉及许多大项的乘积。在这种情况下,梯度就会爆炸:梯度过大导致难以收敛。批标准化可以降低学习速率,因而有助于防止梯度爆炸。

    ReLU 单元消失:一旦 ReLU 单元的加权和低于 0,ReLU 单元就可能会停滞。它会输出对网络输出没有任何贡献的 0 激活,而梯度在反向传播算法期间将无法再从中流过。由于梯度的来源被切断,ReLU 的输入可能无法作出足够的改变来使加权和恢复到 0 以上。降低学习速率有助于防止 ReLU 单元消失。

  • 丢弃正则化(dropout regularization):在梯度下降的时候随机丢弃某些网络单元,丢弃的越多,正则话效果越强。

  • softmax将二元分类问题延伸到多个类别。在多类别分类问题中,小数表示的概率相加必须是1.0。如果一个样本时多个类比的成员,则不能够使用softmax,必须使用多个逻辑回归。

嵌套是一种相对低维的空间,您可以将高维矢量映射到这种低维空间里。通过使用嵌套,可以让在大型输入(比如代表字词的稀疏矢量)上进行机器学习变得更加容易。在理想情况下,嵌套可以将语义上相似的不同输入映射到嵌套空间里的邻近处,以此来捕获输入的语义。一个模型学习到的嵌套,也可以被其他模型重用。

  • 选取嵌套维度的经验值为词汇量(潜在的值的数量,比如50万部电影)的四次方根

静态模型采用离线训练方式。也就是说,我们只训练模型一次,然后使用训练后的模型一段时间。动态模型采用在线训练方式。也就是说,数据会不断进入系统,我们通过不断地更新系统将这些数据整合到模型中。

离线推理,指的是使用 MapReduce 或类似方法批量进行所有可能的预测。然后,将预测记录到 SSTable 或 Bigtable 中,并将它们提供给一个缓存/查询表。在线推理,指的是使用服务器根据需要进行预测。

反馈环

有时,模型会影响其自身的训练数据。例如,来自某些模型的结果反过来是同一模型的直接或间接输入特征。有时,一个模型会影响另一个模型。

由于模型 A 有误,因此会导致错误地决定购买股票 X 的股票,而购买这些股票会抬高股票 X 的价格。模型 B 将股票 X 的股价用作输入特征,因此它很容易对股票 X 的价值得出错误结论。然后,模型 B 会根据模型 A 的错误行为购买或销售股票 X 的股份,反过来,模型 B 的行为会影响模型 A,而这样很可能会触发郁金香狂热效应或导致 X 公司的股价下滑。

  • 标签泄露:训练标签泄露到特征中,使其带有欺骗性

有效的机器学习准则:

  • 确保第一个模型简单易用。
  • 着重确保数据管道的正确性。
  • 使用简单且可观察的指标进行训练和评估。
  • 拥有并监控您的输入特征。
  • 将您的模型配置视为代码:进行审核并记录在案。
  • 记下所有实验的结果,尤其是“失败”的结果。

其他相关内容笔记

  • 深度可分离卷积:对于每一个通道进行卷积最后通过1*1的卷积将通道混合。相当于是将空间特征学习以及通道特征学习分离开来。深度可分离卷积的超参数更少,可以得到更好以及更快的模型。(exception: Xception)

  • 模型集成(model ensembling):通过将不同模型的结果汇聚在一起,从而得到更好的预测效果。其中,这些模型需要具有多样性,其偏差需要尽可能在不同的方向上。一种较为成功的实践是结合深度学习以及浅层次的学习。

  • 深度学习能够从感知数 据提取出人类能够提取出的几乎全部信息,但是只是针对感知而言

  • 输入模式与网络架构的对应关系

    • 向量数据:密集连接网络(Dense 层)

    • 图像数据:二维卷积神经网络

    • 声音数据(比如波形):一维卷积神经网络(首选)或循环神经网络

    • 文本数据:一维卷积神经网络(首选)或循环神经网络

    • 时间序列数据:循环神经网络(首选)或一维卷积神经网络

    • 其他类型的序列数据:循环神经网络或一维卷积神经网络。如果数据顺序非常重要(比如时间序列,但文本不是),那么首选循环神经网络

    • 视频数据:三维卷积神经网络(如果你需要捕捉运动效果),或者帧级的二维神经网络(用于特征提取)+ 循环神经网络或一维卷积神经网络(用于处理得到的序列)。

    • 立体数据:三维卷积神经网络

  • 深度学习模型只是将一个向量空间映射到另一个向量空间的简单而又连续的几何变换链。它能做的只是将一个数据流形X 映射到另一个流形Y