written by
Just4test

AWS认证 Machine Learning Specialty 学习笔记——算法部分

1 min read , January 18, 2020

线性回归

回归是通过数值型的自变量推算数值型因变量的过程。如果自变量和因变量具有线性关系,则称为线性回归。只有一个自变量的叫一元线性回归,否则可以称为多元线性回归。

逻辑回归

返回概率(0-1)的线性回归。这通常是在线性回归的基础上添加一个激活函数实现的。常见的激活函数是Sigmoid。

朴素贝叶斯

一种分类算法。基于贝叶斯定理。朴素贝叶斯总是假设所有特征的出现概率相互独立。朴素贝叶斯的训练速度非常快。

贝叶斯定理:P(A|B) = P(B|A)*P(A)/P(B)

梯度下降优化器

  • 批量梯度下降,Batch gradient descent,BGD:每次迭代都训练所有样本。理想状态下经过足够多的迭代可以达到全局最优,但极慢,尤其对于显存放不下的大量样本
  • 随机梯度下降,stochastic gradient descent,SGD:每次迭代随机训练一个或几个样本。速度很快,但引入的随机性会使得模型在最优点附近震荡
  • 小批量梯度下降,Mini-batch gradient descent:每次训练一小批样本,是BGD和SGD的折中,一般一个批次不超过512个。
  • 以上三种详见
  • 动量,momentum:解决SGD的高方差振荡导致网络很难稳定收敛的问题。
  • Adagrad:动态调整学习率,对稀疏参数大幅更新,对频繁参数小幅更新。非常适合处理稀疏数据。
  • Adadelta:Adagrad的改进。它解决了Adagrad学习率急剧下降的问题。
  • RMSprop:另外一种自适应学习率算法,类似Adadelta
  • Adam:相当于 RMSprop + Momentum,目前效果最好。
  • 详见:几种梯度下降方法对比优化器算法Optimizer详解,以及Adadelta 优化器的文尾部分。

计算机视觉相关概念

  • 图像分类,image classification:输出图像上出现的一系列物体名。
  • 对象定位,object localization:输出图像上一系列物体的包围盒。
  • 语义分割,semantic segmentation:将图像上的不同类别元素以像素级别分割出来。但其不能分辨同类物体的个数。
  • 实例分割,instance segmentation:把可数的对象按个数区分出来。比如可以区分一群人的每一个个体,类似对象定位但输出遮罩而不是包围盒。相比语义分割,其不能分辨背景元素,比如天空草地。
  • 全景分割,panoptic segmentation:语义分割和实例分割的综合。能够分辨背景元素,也能够分辨不同对象。

递归神经网络,RNN

一种处理序列信息的神经网络,经常用于自然语言处理。长短期记忆(Long Short-Term Memory,LSTM)就是一种递归神经网络。

线性学习器,Linear Learner

  • 求解分类或回归问题的指导式学习算法。
  • 默认情况下进行了标准化。标准化的缩放参数是依据训练集的一个小样本确定的,因此输入的样本必须随机排布。
  • 训练输入仅支持application/x-recordio-protobuf 和 text/csv 。推理时还额外支持application/json。

因子分解机,Factorization Machine

适用于二元分类和回归任务。它是线性模型的扩展。特别适合处理高维稀疏数据集。
仅支持特征之间的两两交互。

在回归模式下,使用均方根误差 (RMSE) 对测试数据集计分。在二元分类模式下,使用二元交叉熵 (记录丢失)、准确度 (阈值=0.5) 和 F1 分数 (阈值=0.5) 对测试数据集计分。

K-Means

一种无监督聚类算法。算法将具有n个特征的样本映射到n维空间中的点,然后将空间中距离相近的点进行聚类。指定需要的最终类别数k和训练过程中的临时倍数x,算法会挑选k* x个聚类中心并随着训练调整中心,调整后合并中心至k个。 对于初始聚类中心,可以全部随机挑选,也可以随机挑选第一个,然后在全部训练集中找到与第一个中心距离最远的点作为第二个中心并以此类推,这称为k-means++。该方式会提高推理速度并可能极大地减小误差。超参数:

  • k:最终需要的聚类中心数
  • extra_center_factor:训练过程中额外的中心倍数。建议4~10,默认auto。
  • init_method:指定初始中心是完全随机(random)的还是k-means++方式挑选。
  • eval_metrics:评估指标。可选msd,ssd或两者。

K-近邻,k-Nearest Neighbor,KNN

一种简单的分类/回归算法。给定包含分类标签/特征值的训练集和k,将训练集的数据索引化。在推理期间,对于输入的采样点,找到其在维度空间中最近的n个邻居,返回这些邻居中最常用的标签或特征值的均值。超参数和指标:

  • k: 1-1024
  • sample_size:最初建立索引时的取样点。256-两千万
  • test:accuracy:执行分类任务时,报告预测标签符合实际标签的百分比。
  • test:mse:执行回归任务时,报告预测与真实值的均方误差。

随机森林砍伐RCF

用于检测离群值。该算法的核心是将数据集中的所有样本构成一个树。每次迭代以随机形式划分数据集成为两个子集,即树的两个子树(如果子集中只有一个元素则为叶子结点)。在随机划分的过程中,离群值有更高的几率被划分成单独的叶子结点,因而在树中的深度通常较小。 完整的数据集被均分成N个子集,并用于生成N颗树。执行推理时,将样本送入每棵树并重新构造该树,得到目标样本的深度,并将N棵树的平均深度作为结果输出。超参数:

  • num_trees:子集/树的个数。这正比于推理速度。
  • num_samples_per_tree:每棵树的数据子集样本数。建议根据离群值出现频率估计此值,并使得每个子集出现一个离群值(即离群值出现比率为1/num_samples_per_tree)

Linear Learner

XGBoost

一种分类和回归算法,是梯度提升树(Gradient Boosting Decision Tree,GBDT)的优化。
梯度提升树的第一轮训练构建一颗决策树,其预测标签和真实标签的差称为残差,或梯度;其后的训练构建下一棵树,去拟合这个残差,直到最终残差足够小或者轮数达到上限。最终的输出是所有树的结果相加。详细原理说明见通俗理解kaggle比赛大杀器xgboost

仅支持CPU,是内存限制型算法,建议使用M系列实例。推理时输入数据仅支持text/csv和text/libsvm。重要的超参数:

  • alpha:权重上的 L1 正则化项。增加此值会使模型更加保守。浮点,默认0
  • min_child_weight:子项中所需的最小实例权重总和 (hessian)。浮点,范围:[0,∞),默认1。
  • subsample:训练实例的子样本比率。将其设置为 0.5 意味着 XGBoost 随机收集一半数据实例来让树长大。这会防止过拟合
  • eta:在更新中用于防止过度适合的步骤大小收缩。范围[0,1],默认0.3
  • num_round:训练轮数

BlazingText

包含Word2vec和文本分类算法。该算法经过优化可以很好地支持GPU和多核CPU。 Word2vec将单词映射到分布式向量,语义相似的单词的向量相近。

Object2Vec

神经主题模型,Neural Topic Model,NTM

一种自主学习算法。将一批文档根据其内部的单词分布归类到不同的主题下。这可以用于对文档分类汇总,或者基于主题相似性推荐内容。主题是自行学习得到,无法指定,也可能和人类对主题的理解不一致。

  • 训练、验证、测试时支持的文件格式是CSV和recordIO-wrapped-protobuf。
  • 可以使用文件模式或管道模式训练模型。
  • 推理时支持text/csv、application/json、application/jsonlines、application/x-recordio-protobuf、application/json、application/x-recordio-protobuf。

超参数:

  • num_topics:所需主题数量。
  • encoder_layers_activation:编码器层的激活函数,默认sigmoid,可选tanh、relu
  • optimizer:用于训练的优化程序。
  • rescale_gradient:梯度缩放因子。
  • weight_decay:权重衰减系数

DeepAR使用RNN进行时间序列推理。可以指定多个时间序列,比如说,使用旧款运动鞋的长期销售数据,以及新款运动鞋的短期销售数据,预测该新款运动鞋日后的销售数据。 DeepAR可以预测具体的数量(比如销量是1000)或范围和置信度(比如销量在800-1200之间,可能性90%)