机器学习 (ML; Machine Learning)
在早期的工程领域, 机器学习也经常称为模式识别 (PR; Pattern Recognition), 偏向特定场景的具体应用。 这类应用被称为任务 (Task), 如光学字符识别 (OCR; Optical Character Recognition) 和语音识别 (Speech Recognition) 等。 机器需要学习被称为经验 (Experience) 的历史数据, 并在任务上取得良好性能 (Performance)。
亚瑟· 萨缪尔 (Arthur Samuel)
美国计算机科学家, 提出的西洋棋程序是世界上第一个会自主学习的程序。
亚瑟· 萨缪尔发明了「 机器学习」 一词, 并将其定义为「 不显式编程地赋予计算机能力的研究领域」 。
汤姆· 米切尔 (Tom Mitchell)
美国计算机科学家, 以对机器学习等领域的进步所作的贡献闻名。
汤姆· 米切尔提供了对「 机器学习」 的现代定义, 即「 对于某类任务 和性能度量, 一个计算机程序被认为可以从经验 中学习是指, 通过经验 改进后, 它在任务 上由性能度量 衡量的性能有所提升」 。
传统算法解决某些问题, 需要人为制定并不断更新、 检测规则, 是复杂而难以维护的, 其决策逻辑只适用于单一领域或单一任务, 且制定规则需要对人类专家的决策过程有深刻理解; 而机器学习自动捕获特征, 程序更短, 更容易维护, 而且更精确, 还能在没有人工干预的情况下标记新的数据, 自动更新检测规则。
机器学习的主要学派如下。
符号主义 (Symbolism): 又称逻辑主义、 心理学派或计算机学派, 认为所有的智能行为都可以被简化为逻辑系统的符号操作过程, 符号主义方法的优点就是可解释性强, 代表算法如决策树 等;
贝叶斯学派 (Bayesians): 注重统计学和概率推理, 代表算法如朴素贝叶斯 等;
联结主义 (Connectionism): 又称仿生学派或生理学派, 认为人类的认知过程是由大量简单神经元构成的神经网络的信息处理过程, 专注于用神经科学模拟智能行为, 联结主义方法的弊端是可解释性差, 代表算法如神经网络 等;
进化主义 (Evolutionism): 将自然选择视为真正有价值的学习, 在遗传学和进化生物学的基础上得出结论, 代表算法如遗传算法等;
类推学派 (Analogizers): 以数学最优化来推断相似性判断, 代表算法如支持向量机 等。
机器学习虽然有用, 但并不意味着它有人类一般的智能, 即人工智能 。 机器学习是为了实现人工智能这个更宏大目标的技术之一, 是人工智能的重要分支, 且受到统计学 的深刻影响。
使用 TensorFlow 实现机器学习
TensorFlow 是常用的机器学习库, 通常导入包的操作如下。
1 2 import tensorflow as tffrom tensorflow.keras import layers
TensorFlow 是一个定义和运算涉及张量的计算的框架, 其中张量 tf.Tensor
具有数据类型和形状。 一些特殊的张量有 tf.Variable
、 tf.constant
、 tf.placeholder
和 tf.SparseTensor
等。 其中变量 tf.Variable
最常用, 是可将张量标记为「 可训练」 的变量声明形式, 被标记的变量会在反向传播中记录梯度信息, 因此常用于声明待训练的参数。
通过传入的指定维度, 可使用如下方法创建特殊的张量: tf.zeros
、 tf.ones
和 tf.fill
可创建全为 0、 全为 1 的张量和全为指定值的张量; 指定可选参数均值 mean
和方差 stddev
, tf.random.normal
可生成正态分布的随机数张量, 而 tf.random.truncated_normal
可生成截断式正态分布的随机数张量, 即若生成的数据在 之外时重新进行生成, 保证生成值在均值附近; 指定可选参数最小值 minval
和最大值 maxval
, tf.random.uniform
可生成均匀分布的随机数张量。
定义多元线性回归待估计参数的代码如下。
1 2 w = tf.Variable(tf.random.normal(shape=(n, 1 ))) b = tf.Variable(tf.zeros(1 ))
使用 tf.cast
方法可将张量强制转换为某种数据类型。 当数据是 NumPy 的形式时, 可以使用 tf.convert_to_tensor
方法将数据变为 TensorFlow 的形式即 tf.Tensor
, 其 batch
方法可按指定批量大小将数据分批次。 将数据集转换为 tf.float32
类型的张量并分批次的操作如下。
1 2 3 X_train = tf.cast(X_train, dtype=tf.float32) y_train = tf.cast(y_train, dtype=tf.float32) dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(batch_size)
张量的元素级的四则运算方式分别为 tf.add
、 tf.subtract
、 tf.multiply
和 tf.divide
, 且只有维度相同的张量才能运算。 tf.square
、 tf.pow
和 tf.sqrt
分别对应张量的平方、 次方和开方操作。 矩阵相乘的操作对应 tf.matmul
方法, 如下的线性回归模型即通过这种方法建立。
1 2 def linreg (X, w, b ): return tf.matmul(X, w) + b
tf.where
方法以元素级实现张量的条件三目运算。
获取变量的秩可使用 tf.rank
方法, 获取变量形状可通过变量的 shape
属性。 通常矩阵运算的结果与标记数据的维度是不一致的, 需要使用 tf.reshape
方法以改变张量的形状。 基于上述, 损失函数的代码如下。
1 2 def loss (y_hat, y ): return (y_hat - tf.reshape(y, y_hat.shape)) ** 2 / 2
tf.reduce_mean
、 tf.reduce_sum
、 tf.reduce_min
方法和 tf.reduce_max
方法可以分别计算张量维度上元素的均值、 总和、 最小值和最大值, tf.argmin
和 tf.argmax
分别获得张量维度上元素最小值的索引和最大值的索引, 而可选参数 axis
可控制操作轴即计算的方向。
变量 tf.Variable
的 assign_sub
方法用于参数的自减更新。 考虑多个变量作为参数传入的情况, 基于小批量样本梯度下降更新参数的代码如下。
1 2 3 def sgd (params, grads, lr, batch_size ): for param, grad in zip (params, grads): param.assign_sub(lr * grad / batch_size)
线性回归模型中, 计算损失函数对各待训练参数求导的操作如下。
1 2 3 4 5 6 7 8 for epoch in range (num_epochs): for step, (X, y) in enumerate (dataset): with tf.GradientTape() as g: l = loss(linreg(X, w, b), y) dw, db = g.gradient(l, [w, b]) sgd([w, b], [dw, db], lr, y.shape[0 ]) l_train = loss(linreg(X_train, w, b), y_train) print (f'epoch {epoch + 1 } , loss {float (tf.reduce_mean(l_train)):f} ' )
TensorFlow 使用 tf.GradientTape
记录计算过程, 其 gradient
方法可求张量的梯度。
流水线 (Pipeline) 指机器学习算法的基础架构。 流水线包括收集数据、 将数据制备成训练数据文件、 训练一个或多个模型, 以及将模型导出至生产环境。
数据集 (Data Set)
数据集是记录的集合, 通常具有如下数学形式。
其中: 称为数据的特征 , 则称为特征空间 (Feature Space); 称为数据的标记 , 则称为标记空间 (Label Space), 样本根据标记的有无可称作有标记的 (Labeled) 或无标记的 (Unlabeled)。
数据集的每条记录是关于一个事件或对象的描述, 称为样本 (Sample)、 样例 (Example) 或数据点 (Data Point)。 假定 和 之间的关系可以通过一个未知的真是映射函数 或真实条件概率分布 来描述, 机器学习的目标就是寻找 或 的近似物。
通常对数据集做独立同分布 (IID; Independent and Identically Distributed) 假设, 即数据集的样本彼此相互独立, 并且训练集和测试集是满足相同概率分布的。
众包 (Crowdsourcing) 指将工作先分配给很多参与者再合成为最终结果的模式, 是获取数据集资源的常见模式。
常见公开数据集
scikit-learn 提供了各种常见公开数据集。
安德森鸢尾花数据集 (Anderson's Iris Dataset) 是机器学习和统计学中一个经典的数据集, 包含于 scikit-learn 的 datasets
模块中, 其加载方式如下。
1 2 from sklearn.datasets import load_irisdataset = load_iris()
鸢尾花数据集包含花瓣的长度和宽度及花萼的长度和宽度的测量数据, 其单位为厘米, 每一项测量数据对应的鸢尾花已经被鉴定为属于山鸢尾 (setosa )、 变色鸢尾 (versicolor ) 和维吉尼亚鸢尾 (virginica ) 三个品种之一。
乳腺癌威斯康星数据集 (Breast Cancer Wisconsin Dataset) 是经典的二分类数据集, 加载方式如下。
1 2 from sklearn.datasets import load_breast_cancerdataset = load_breast_cancer()
乳腺癌数据集通过医学指标预测乳腺癌的恶性或良性。
训练 (Training) 又称学习 (Learning), 指从数据中学得模型的过程, 即调整映射函数 的参数, 使得训练样本 的预测结果 与标记 尽可能接近。 训练过程中使用的数据称为训练集 (Training Set)。
通常需要随机打乱训练集, scikit-learn 中随机打乱训练集的代码如下。
1 2 from sklearn.utils import shuffleX_train, y_train = shuffle(X_train, y_train)
测试 (Testing) 指将学得模型用于预测的过程, 即验证测试样本 的预测结果 是否与 接近。 测试过程中使用的数据称为测试集 (Testing Set)。
验证 (Validation) 即训练过程中的测试, 通常用于指导超参数的调整。 验证过程中使用的数据称为验证集 (Validation Set)。
训练集用于构建模型, 而验证集和测试集用于评估模型对前所未见的新数据的泛化能力。 训练期间故意不使用的样本即维持数据 (Holdout Data), 验证集和测试集都属于维持数据。 与纯粹基于训练集的损失相比, 基于维持数据的损失有助于更好地估算未知数据集的损失。
训练集和测试集的划分方法
留出法 (Hold-Out) 直接将数据集随机划分为训练集和测试集两个互斥集合, 可重复实验取平均值。 scikit-learn 中使用留出法划分数据集的代码如下。 其中可选参数 test_size
和 random_state
分别设置测试集的数量 (或占比) 和伪随机数种子。
1 2 from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(feature, label)
折交叉验证 ( -Fold Cross Validation) 可将数据集分层采样划分为 个大小相似的互斥子集, 每次用 个子集作为训练集, 余下的子集作为测试集, 最终返回 个测试结果的平均值。 scikit-learn 中使用 折交叉验证评价模型的代码如下。 其中可选参数 cv
用于设置折数。
1 2 from sklearn.model_selection import cross_val_scorescores = cross_val_score(model, X, y)
分层 折交叉验证 (Stratified -Fold Cross Validation) 使每折的类别比例与数据集的类别比例相同。 scikit-learn 使用交叉验证分离器 KFold
对 折交叉验证进行更多控制, 以实现分层 折交叉验证, 代码如下。
1 2 3 from sklearn.model_selection import KFoldkfold = KFold(n_splits=k, shuffle=True ) scores = cross_val_score(model, X, y, cv=kfold)
留一法 (Leave-One-Out) 是特殊的 折交叉验证, 使测试集只包含单个样本。 留一法对于大型数据集非常耗时, 但在小型数据集上有时能有更好的估计结果。 scikit-learn 使用留一法评价模型的代码如下。
1 2 3 from sklearn.model_selection import LeaveOneOutloo = LeaveOneOut() scores = cross_val_score(model, X, y, cv=loo)
自助法 (Bootstrap) 对数据集有放回采样多次得到训练集, 余下的用做测试集。 自助法也是集成学习中 Bagging 的思想。
稀疏数据集 (Sparse Dataset) 指数据集中存在大量特征值未知的数据, 不利于进行机器学习; 数据集包含太少的样本, 也不利于进行机器学习。
数据集不一定包含目标在各种扰动下的信息, 此时需要进行数据增强 (DA; Data Augmentation) 以提升模型预测能力。 对于图像数据而言, 数据增强一般包括图像的旋转、 平移、 颜色变换、 裁剪、 仿射变换 (定义见数学拾遗的线性变换 ) 等。 数据增强又译作数据扩充。
对于大部分实际应用, 原始输入通常需要经过预处理 (Pre-Processing) 的工序, 以变换到新的空间而使得问题可以更容易被解决。 有时, 预处理的目的是为了加快计算速度。 通常, 预处理阶段是降维即遗弃信息的过程, 因此如果信息对于问题的解决很重要时, 系统整体的精度会下降。
先验信念 (Prior Belief) 指在开始采用相应数据进行训练前, 对数据持有的假设。
特征 (Feature)
反映事件或对象在某方面的表现或性质, 是标记的证据。
通常也把一个样本称为一个特征向量 (Feature Vector), 特征的数量称为样本的维度 (Dimension)。 特征可根据其连续性或离散型分为连续特征 (Continuous Feature) 和离散特征 (Discrete Feature)。 其中, 离散特征又称分类特征 (Categorical) 或属性 (Attribute)。
分桶 (Bucketing) 又称分箱 (Binning), 是根据值区间将连续特征转换为离散特征的操作, 转换后的离散特征单元称为桶 (Bucket) 或箱 (Bin)。
嵌套 (Embedding) 则是以连续特征表示分类特征的操作, 通常指将高维度向量映射到低纬度的空间。 深度学习中, 嵌套是可训练的。
特征工程 (Feature Engineering) 包含特征提取 (Feature Extraction) 和特征选择 (Feature Selection), 旨在构建良好的数据表征, 即对于特定领域应用而言寻找最佳的数据表示。 常见的手工特征 (Hand-Crafted Feature) 有尺度不变特征变换 (SIFT; Scale-Invariant Feature Transform)、 方向梯度直方图 (HOG; Histogram of Oriented Gradient) 等。 由于手工特征是启发式的, 其算法设计背后的出发点不同, 将这些特征组合时有可能会产生冲突。 特征选择可将组合特征的效能发挥出来, 使原始数据在特征空间中的判别性最大化。
特征缩放 (Feature Scaling) 可回避由于量纲不同、 自身变异或者数值相差较大所引起的误差, 使数据的尺度尽量统一, 手段包括标准化 (Normalization) 和归一化 (Standardization)。
特征缩放的方法
scikit-learn 提供了各种特征缩放的方法。
sklearn.preprocessing.StandardScaler
确保所有特征符合标准正态分布, 记 为所有特征的均值, 为所有特征的标准差, 其对每个数据点 的转换如下式。 sklearn.preprocessing.MinMaxScaler
确保所有特征位于 区间, 记 为所有特征的最小值, 为所有特征的最大值, 其对每个数据点 的转换如下式。 sklearn.preprocessing.Normalizer
默认使用范数 , 确保所有特征构成的向量长度为 1, 记 为所有特征的 范数, 其对每个数据点 的转换如下式。 特征缩放器首先使用 fit
方法进行拟合, 然后使用 transform
方法进行数据变换, 而 fit_transform
方法是该流程的高效版本。
对于基于梯度下降的算法如神经网络等, 未经特征缩放的数据需要梯度下降算法花费很多次迭代才能收敛; 对于基于距离的算法如支持向量机等, 未经特征缩放的数据可能因较大的尺度对结果的影响程度更大。
基于树的算法如决策树、 线性判别分析、 朴素贝叶斯等不需要进行特征缩放。
合成特征 (Synthetic Feature) 从一个或多个特征衍生而来, 包括如下类型: 对连续特征的分桶; 将一个特征值与其本身或其他特征值相乘或相除。 仅通过特征缩放创建的特征不属于合成特征。
标记 (Label)
又译作标签, 或称目标 (Target), 作为样本对应的归纳性描述, 是特征的结论。
为样本提供标记的专家有时称为评分者 (Rater)。 根据训练集中样本标记的情况, 机器学习可分为有监督学习 、 无监督学习 和弱监督学习 等类别。
预测 (Prediction) 又称推断 (Inference), 覆盖有监督学习领域的大多数任务。 推断可分为如下两种类型: 离线推断 (Offline Inference) 即生成一组预测并存储, 然后根据需求检索这些预测; 在线推断 (Online Inference) 与之相对, 根据需求生成预测。
优化 (Optimization)
几乎所有的机器学习算法最后都归结为最优化问题。
手动预先指定、 用于定义模型结构或优化策略, 而不在训练过程中更新的参数称为超参数 (Hyperparameter), 如学习率和批量大小等, 调参 (Tuning) 即选择超参数的过程, 是不断试错调整的优化手段, 需要依靠丰富的经验。
损失函数 (Loss Function) 接受模型函数或模型函数的参数作为输入, 输出模型预测不准确的程度, 通常记为。
通常会选择非负数作为损失, 且数值越小表示损失越小, 完美预测时的损失为零。 然而在现实中很难找到「 完美的」 数据集, 无论用何种手段观察特征与标记的潜在关系, 都可能会出现少量的观测误差。
代价函数 (Cost Function) 指能衡量模型预测与真实情况差异的函数, 记为。 一般情况下, 损失函数针对单个样本, 而代价函数针对所有样本。 而在不严谨的讨论下, 损失函数可以和代价函数划等号。 代价函数有时又称经验风险 (Empirical Risk), 经验风险最小化 (ERM; Empirical Risk Minimization) 即寻找合适的模型参数 使得经验风险最小, 即如下数学形式。 目标 (Objective) 或称目标函数 (Object Function) 指有待优化的函数。 而代价函数是目标函数的一种。
对于回归问题, 最常用的损失函数是残差平方和的变形即下式。
其中, 常数系数不会带来本质的差别, 其作用是使求导后系数能够约去, 下同。
为了度量模型在整个数据集上的质量, 使用的代价函数即下式, 又称二次代价 (Quadratic Cost)。
收敛 (Convergence) 即训练过程中, 经历一定次数的迭代, 损失变化很小或基本没有变化的状态。 在深度学习中, 损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变, 暂时形成收敛的假象。
正则化 (Regularization) 指加入额外信息以解决过拟合问题的过程, 会使权重值变小。 使用正则化后损失函数如下式。
上式 称为正则化项, 正则化参数过大可能会造成欠拟合, 定义正则化参数 以对之调整。
引入正则化以限制模型能力, 使其不过度最小化经验风险, 称为结构风险最小化 (SRM; Structure Risk Minimization) 原则, 即如下数学形式。 正则化 ( -Regularization) 有时称为权重衰减 (Weight Decay), 使用平方范数 , 定义如下。
其中, 控制正则化的相对重要性, 称为正则化率 (Regularization Rate)。
使用 正则化的梯度下降参数更新
为简化表达仅讨论单个参数的情况, 即使用 代替, 下同。 使用 正则化后梯度下降中偏导数的计算如下式。
进而有参数的更新式如下式。
正则化会使参数更接近零, 因此该方法可通过减小参数值的大小以降低模型复杂度。 正则化的应用可见岭回归 。
正则化 ( -Regularization) 使用范数 , 定义如下。
使用 正则化的梯度下降参数更新
使用 正则化后梯度下降中偏导数的计算如下式。
进而有参数的更新式如下式。
正则化大概率会使很多参数变为零, 因此该方法可通过稀疏参数即减少参数的数量的方式来降低模型复杂度, 即 正则化可间接地实现特征选择。 正则化的应用可见套索回归 。
其他的正则化形式如下。
正则化 ( -Regularization)[13] : 对矩阵逐行计算 范数, 促进最具鉴别性特征的选择;
提前停止 (Early Stopping): 又称早停, 即当模型在测试集上的性能不再提升时, 就提前停止训练, 可以视作时间维度上的正则化。
Dropout[10] : 在网络训练过程中, 按照一定的概率将部分中间层的单元暂时从网络中丢弃, 即将单元的输出值置零;
DropConnect: 将部分连接权重置零, 相比 Dropout, 使用 DropConnect 时更不容易发生过拟合。
利普希茨连续 (Lipschitz Continuity) 是指存在一个正实数, 使得函数 的任意两个输入 和 之间的差的绝对值与函数输出之间的差的绝对值成比例, 比例系数为, 即下式。
其中, 又称利普希茨常数 (Lipschitz Constant), 并非固定不变的, 而是根据具体的函数而言的。
可见, 若函数满足利普希茨条件, 每对点 和 连线斜率的绝对值不大于。 若函数满足利普希茨条件, 则其在输入空间中的变化不会太快, 即输入的微小变化只会导致输出的微小变化。
满足利普希条件的函数未必处处可微。
双利普希茨连续 (Bi-Lipschitz Continuity) 定义如下。 利普希茨连续的衍生概念如下。
Lipschitz Continuous Gradient: ;
Lipschitz Continuous Hessian: 。
以此类推, 可构建更高阶的利普希茨连续条件。
若函数是 Lipschitz Continuous Gradient, 则有下式。 若函数是 Lipschitz Continuous Hessian, 则有下式。
梯度下降 (Gradient Descent)
梯度下降的目标是将损失函数最小化。 只要代价函数 对参数 的导数存在就能使用梯度下降方法, 因此是求解机器学习算法模型参数最常采用的方法之一。 考虑参数为单变量的情况, 梯度下降的参数更新公式如下。 多变量的情况则使用梯度向量 即, 可理解为各权重偏置的重要程度, 即改变哪些参数「 性价比」 高。
梯度下降的伪代码
学习率 (Learning Rate) 控制梯度下降的程度, 其设置的要点如下: 学习率太大, 难以到达局部最小值, 而是在其附近反复跳跃, 无法收敛; 学习率太小, 收敛速度缓慢。
优化器 (Optimizer) 指梯度下降法的一种具体实现。
最原始的梯度下降算法每次迭代使用所有样本来进行梯度的更新, 又称为批量梯度下降 (BGD; Batch Gradient Descent), 属于批量学习 (Batch Learning)。 遍历整个数据集将导致实际中的执行可能会非常慢, 但由整个数据集确定的方向能够更好地代表样本总体, 从而更准确地朝向极值所在的方向。
随机梯度下降 (SGD; Stochastic Gradient Descent) 又称朴素随机梯度下降 (Vanilla SGD), 每次迭代时使用一个样本来对参数进行更新, 属于在线学习 (Online Learning), 速度大大加快但难以收敛, 迭代次数也较多。
小批量梯度下降 (MBGD; Mini-batch Gradient Descent) 则是批量学习和在线学习的折衷, 此处, 批量 (Batch) 即一次参数更新中使用的样本集, 批量大小 (Batch Size) 即。 小批量梯度下降的参数更新公式如下。 每次小批量更新称为迭代 (Iteration), 完整的训练集更新称为周期 (Epoch), 以确保不遗漏任何样本。 小批量梯度下降在实践中, 有必要随时间推移逐渐降低学习率, 即学习率衰减 (Learning Rate Decay), 或称学习率退火 (Learning Rate Annealing)。
深度学习的梯度下降优化算法
考虑参数为单变量的情况, 对于每一时刻 (当前批次迭代的次数), 下述优化算法通常可概括为如下步骤: 计算代价函数关于参数的梯度即; 根据历史梯度计算一阶动量即与梯度相关的函数, 以及二阶动量即与梯度的平方相关的函数; 若仅使用一阶动量, 根据式 更新参数 (或者也可视作 的情况); 若使用一阶动量和二阶动量, 引入起平滑作用的 以防止 为 0 的情况, 根据下式更新参数。 动量 (Momentum) 使步长受历史梯度的影响, 动量的引入有时可以防止损失优化陷入局部最小值的情况。 不同的优化器, 实质上是定义了不同的一阶动量和二阶动量公式。 显然, 随机梯度下降即 的情况。
带动量随机梯度下降 (SGDM; Stochastic Gradient Descent with Momentum) 引入 作为一阶动量。 带动量随机梯度下降使得参数更新方向不仅由当前梯度决定, 也与此前累积的下降方向有关。 引入动量可有效加速梯度下降手收敛过程。
涅斯捷罗夫梯度加速 (NAG; Nesterov Accelerated Gradient) 是对带动量随机梯度下降的改进, 令, 使得算法能够在代价函数有增高趋势之前, 减缓更新速率。
Adagrad 在 的基础上使用二阶动量, 即考虑全部历史梯度, 可使得算法具有如下效果: 对于更新不频繁的参数, 单次步长更大; 对于更新频繁的参数, 单次步长较小, 让学习到的参数更稳定, 不至于被单个样本影响太多。
RMSprop 在 的基础上使用二阶动量, 可避免二阶动量持续累积的问题。
Adam 可被认为是 RMSprop 和带动量随机梯度下降的结合, 其一阶动量和二阶动量的计算式如下。
对一阶动量和二阶动量偏置校正, 即, 。
梯度裁剪 (Gradient Clipping) 指应用梯度值前先设置上限, 梯度裁剪有助于确保数值稳定性以防止梯度爆炸。
使用梯度下降的例子可见多元线性回归 。
迭代阈值收缩算法 (ISTA; Iterative Shrinkage-Thresholding Algorithm)
近端梯度下降 (Proximal Gradient Descent) 旨在解决损失函数包含正则化项的优化问题。 由 Lipschitz Continuous Gradient 的性质, 损失函数包含正则化项时, 梯度下降法可表示为如下数学形式。 忽略常数项 和, 可得下式。 当迭代步长 为 函数的利普希茨常数的倒数 时, 可以确保算法的稳定性和快速收敛。
迭代阈值收缩算法的伪代码
一开始, 随机初始化参数 ; 尚未达到局部最小值 按 式更新参数;
当使用 正则化时, 即 时, 迭代阈值收缩算法存在如下解析解。
其中, 为软阈值操作函数, 定义为。
快速迭代阈值收缩算法 (FISTA; Fast ISTA) 结合迭代阈值收缩算法与涅斯捷罗夫梯度加速。
快速迭代阈值收缩算法的伪代码
一开始, 随机初始化参数, 令, ; 尚未达到局部最小值 记 式为, 按 更新参数; ; ;
牛顿-拉弗森方法 (Newton-Raphson Method)
见数学拾遗的牛顿-拉弗森方法 。 通常机器学习使用梯度下降而非牛顿-拉弗森方法, 其最大的问题在于, 在优化过程中需要进行矩阵转换, 对于多特征情形开销过高。
奇异值阈值 (SVT; Singular Value Thresholding)
奇异值阈值用于解决核范数优化问题。 假设有问题, 对 进行奇异值分解, 得到, 进行软阈值操作, 则问题的解为。
凸优化 (Convex Optimization)
凸优化即使用如梯度下降 的数学方法寻找凸函数 的最小值。 机器学习方面的大量研究都是专注于如何通过公式将各种问题表示成凸优化问题, 以及如何更高效地解决这些问题。 凸优化的数学定义如下。
其中: 、 均为凸函数; 为仿射函数 (定义见数学拾遗的线性变换 )。
常见的凸优化问题如下。
线性规划 (Linear Programming): ;
二次规划 (Quadratic Programming): ;
半正定规划 (Semi-Definite Programming): 。
仿射集合 (Affine Set)
空间 中的两个点 可以唯一确定直线 (Line), 若, 则唯一确定线段 (Line Segment)。 若经过集合 任意两点的直线 仍在 中, 则称 是仿射集合。
若, 则集合 是一个子空间, 即关于向量加法与数乘是封闭的。
集合 是子空间的证明
设 且, 则有。 因为 是仿射集合且, 所以有下式。 由 可知。 所以 是子空间。
仿射集合 可表述为。
线性方程组 的解集是仿射集合, 反之, 任意仿射集合可以表示为线性方程组的解集。
对于线性组合, 若, 则称该线性组合为仿射组合 (Affine Combination)。
集合 的仿射包 (Affine Hull) 指包含 的最小仿射集合, 定义如下。 若仿射集合 满足, 那么。
凸集 (Convex Set)
若经过集合 任意两点的线段 仍在 中, 则称 是凸集。
对于线性组合, 若 且, 则称该线性组合为凸组合 (Convex Combination)。
集合 的凸包 (Convex Hull) 指包含 的最小凸集, 定义如下。 若凸集 满足, 那么。
凸集有如下的保凸运算 (Convexity-Preserving Operations)。
若 和 为凸集, 则 也是凸集;
若 是仿射函数 (定义见数学拾遗的线性变换 ), 若 是凸集, 则 也是凸集, 若 是凸集, 则 也是凸集。
若对于任意 和, 都有, 则称 是锥 (Cone), 若该集合为凸集, 则称之为凸锥 (Convex Cone)。
两个不相交的凸集可以用一个超平面将二者分开, 这被称为超平面分离定理 (Hyperplane Separation Theorem)。
凸函数 (Convex Function)
凸函数指向下凸的函数, 并非字面直观感受, 国内外教材有相反的定义。 若 的定义域 是凸集, 且对于任意 和任意 满足下式, 则称 是凸函数。 下式又称琴生不等式 (Jensen's Inequality)。 从几何角度而言, 点 和 之间的线段在 的图像上方。
严格凸函数 (Strictly Convex Function) 只有一个局部最小值, 即上式严格满足 以及, 因此损失函数是严格凸函数表明其局部最小值就是全局最小值。 定义凸函数在定义域外的值为, 可以得到其「 延伸函数」 使上式仍然成立, 有时假设所有的凸函数被隐含地延伸。
若 使得 为凸函数, 则称 是 -强凸函数 ( -Strongly Convex Function), 即该函数的「 凸性」 比二次函数还要强。 有「 强凸性 严格凸性 凸性」 。
若 是凸函数, 则称 为凹函数 (Concave Function)。
函数是凸函数当且仅当其在与定义域内的任何直线上是凸的, 即函数 是凸函数, 当且仅当对任意 和任意向量, 函数 是凸函数, 其定义域。
假设 在其定义域内二阶连续可微, 是凸函数的充要条件如下。
使得, 即 的一阶泰勒近似始终在 的下方;
使得, 即 处处都有非负曲率 (若 使得, 则 是严格凸函数)。
函数的 -下水平集 ( -Sublevel Set) 定义为。 对于任意, 凸函数的下水平集都是凸集。
函数的上境图 (Epigraph) 定义为。 函数为凸函数, 当且仅当其上境图是凸集。
凸函数有如下的保凸运算。
交替方向乘子法 (ADMM; Alternating Direction Method of Multipliers)
交替方向乘子法用于求解如下形式的问题。
其中, 、 均为凸函数。
定义对应的增广拉格朗日函数如下。 交替方向乘子法的迭代形式如下。
评估 (Evaluation)
评估关注的数值称为指标 (Metrics), 可能可以也可能不可以直接在机器学习系统中得到优化。
模型对训练集之外的新样本进行预测的能力称为模型的泛化 (Generalization) 能力, 如果模型能对新样本做出准确预测, 就说该模型能从训练集泛化到测试集。 显然机器学习希望得到泛化误差最小的学习器, 若模型泛化能力不高, 可能有如下原因。
过拟合 (Overfitting): 过于紧密或精确匹配训练集, 即在训练集中表现佳, 而面对新样本的预测效果不理想, 是机器学习面临的关键障碍;
欠拟合 (Underfitting): 模型未经期望的优化, 没能很好地捕捉数据特征, 在训练集和新样本上的表现都不理想。
需要对机器学习模型进行评估以判断学习器的优劣。 通常将学习器的实际预测输出与样本真实标记之间的差异称为误差 (Error)。 模型对训练数据的预测误差称为经验误差 (Empirical Error); 模型对测试数据的预测误差称为泛化误差 (Generalization Error) 或测试误差 (Test Error)。
误差可分解为如下三个部分。
偏差 (Bias): 又称预测偏差 (Prediction Bias), 度量了预测结果与真实结果的偏离程度, 通常是预测结果均值与真实结果均值的相差程度, 刻画了学习算法本身的拟合能力, 代表了模型本身的精度, 即模型的表达能力 (Representability);
方差 (Variance): 度量了预测结果分布的分散程度, 刻画了数据扰动所造成的影响, 反映模型的泛化能力;
噪声 (Noise): 数据本身带有的不确定性。
为了取得好的泛化性能, 需要使偏差和方差都尽可能小。 训练不足时, 学习器的拟合能力不强, 此时偏差主导泛化误差; 随训练程度加深, 学习器的拟合能力逐渐增强, 此时方差主导泛化误差。
容量 (Capacity) 或复杂度 (Complexity) 即模型拟合各种函数的能力, 容量低的模型可能很难拟合数据集即欠拟合, 而容量高的模型可能导致过拟合。 衡量机器学习模型复杂度的手段有瓦普尼克-契尔沃年基斯维 和拉德马赫复杂度 等。
一些评估指标与正确预测无关但仍有价值, 如训练和预测的耗时等。 其他与正确预测无关的其他评估指标如下: 鲁棒性 (Robust) 即模型处理缺失值和异常值的能力; 可扩展性 (Scalability) 即处理大数据集的能力; 可解释性 (Interpretability) 即预测标准的易理解程度。
奥卡姆剃刀 (Ockham's Razor)
威廉· 奥卡姆 (William Ockham)
英国经院哲学家, 奥卡姆剃刀理论的提出者。
奥卡姆剃刀理论又称简约法则, 威廉· 奥卡姆的表述为「 切勿浪费较多东西去做用较少的东西同样可以做好的事情」 , 即坚持「 若无必要, 勿增实体」 的原则。 考虑到模型表达能力和泛化能力的权衡, 一般情况下在保证模型表达能力的前提下尽量选择简单的模型, 以保证模型的适用性。
没有免费的午餐 (NFL; No Free Lunch)
没有免费的午餐定理表明「 没有一种机器学习算法是适用于所有情况的」 , 如果一个模型在某一条件、 某一数据环境下具有某种优势, 则在其他条件、 其他数据环境下必然具有相应劣势。 NFL 定理不仅适用于机器学习算法选择, 也适用于模型评估方法。
有监督学习 (Supervised Learning)
又称有导师学习, 训练集中所有样本的标记已知。 回归 和分类 是两个最常见的有监督学习任务。
回归 (Regression)
回归是连续的预测任务, 探索变量间的函数关系即, 这一术语由统计学家高尔顿提出。
回归任务评估指标
决定系数 (Coefficient of Determination) 又称拟合优度, 记为。 适用于一元线性回归 , 值越大则自变量对因变量的解释程度越高。 记 为第 个样本的预测值, 为第 个样本的实际值, 为样本实际值的平均值, 则决定系数的定义如下。
易知 时, 此时获得最优拟合情况。 scikit-learn 中调用计算决定系数函数的代码如下。
1 2 from sklearn.metrics import r2_scorer2 = r2_score(y_test, y_predict)
修正决定系数 (Adjusted Coefficient of Determination) 的定义如下。
式的 为回归平方和 (SSR; Sum of Squares of Regression), 定义如下。 上式中, 预测值和实际值之差的平方又称平方损失 (Squared Loss), 有时又称 损失 ( Loss)。
式的 为残差平方和 (SSE; Sum of Squares due to Error), 定义如下。 式的 为总离差平方和 (SST; Total Sum of Squares), 定义如下。
均方误差 (MSE; Mean Square Error) 是回归任务中最常用的性能度量, 定义如下。 scikit-learn 中调用计算均方误差函数的代码如下。
1 2 from sklearn.metrics import mean_squared_errormse = mean_squared_error(y_test, y_predict)
根均方误差 (RMSE; Root Mean Square Error) 是均方误差的变体, 定义如下。 scikit-learn 中调用计算根均方误差函数的代码如下。
1 2 from sklearn.metrics import mean_squared_errorrmse = mean_squared_error(y_test, y_predict, squared=False )
平均绝对误差 (MAE; Mean Absolute Error) 是均方误差的变体, 定义如下。
scikit-learn 中调用计算平均绝对误差函数的代码如下。
1 2 from sklearn.metrics import mean_absolute_errormae = mean_absolute_error(y_test, y_predict)
平均绝对百分数误差 (MAPE; Mean Absolute Percentage Error) 的定义如下。
赤池信息准则 (AIC; Akaike Information Criterion) 建立在信息熵概念的基础上, 是评估模型拟合优劣的指标。 令 表示需要最大化的值, 如模型的似然函数, 赤池信息准则定义如下。
贝叶斯信息准则 (BIC; Bayesian Information Criterion) 类似于赤池信息准则, 定义如下。
马洛斯 (Mallows' ) 的定义如下, 其中, 为模型均方差, 可通过 估计。
上述回归评估指标取平方或取绝对值的原因是防止正负误差抵消。
式 的证明
由 的定义可得下式。 可知只需证 式右端最后一项为零, 代入一元线性回归式, 可将该项可改写为如下形式。 最小二乘法要求 最小化, 说明 对 的偏导为零, 即有下式。 同时说明 对 的偏导为零, 即有下式。 可得 式右端最后一项为零, 因此 成立。
分类 (Classification)
分类是离散的预测任务, 实现分类的算法称分类器 (Classifier)。 在分类问题中, 输出目标是离散的标记, 而通常判别函数 (Discriminant Function) 的值域为实数, 因此无法直接预测, 需要引入一个非线性的决策函数 (Decision Function) 以实现预测。 记整个分类器为, 则分类问题即如下数学形式。
在二分类 (Binary Classification) 问题, 即「 是/否问题」 中, 通常将其中一个类别称为正类 (Positive Class), 另一类别称为反类 (Negative Class)。 对于满足 的二分类数据集, 若存在线性模型的权重使得所有的样本都满足, 那么训练集 是线性可分 (Linearly Separable) 的。 对于上述二分类问题, 决策函数 可以是符号函数, 而所有满足 的数据点组成的分割平面称为决策边界 (Decision Boundary)。
多分类 (Multi-Class Classification) 是又称单标记分类 (Single-Label Classification), 可拆分转换为二分类问题, 经典的拆分策略如下。
一对一 (OvO; One vs. One): 将 个类别两两配对, 产生 个二分类任务, 最终的分类结果通过投票产生;
一对其余 (OvR; One vs. Rest): 将一个类作为正类, 其余类作为反类, 产生 个分类器, 若只有一个分类器预测为正类, 则就是最终分类结果, 若有多个分类器预测为正类, 则选择置信度最大的;
多对多 (MvM; Many vs. Many): 每次将若干个类作为正类, 若干个其他类作为反例, 显然 OvO 和 OvR 是 MvM 的特例。
在多分类问题中, 常使用独热编码 (One-Hot Encoding) 或称哑变量 (Dummy Variable) 作为数据的标记。 假设所有类型的名称构成词表, 词表大小为, 则可以利用 维的独热编码向量表示每一种类别, 在第 种类别对应的独热编码向量中, 第 维的值为 1, 其余维度的值为 0。 TensorFlow 中将数据转换为独热编码的操作如下。
1 y = tf.one_hot(labels, depth=num_classes)
类别不平衡 (Class Imbalance) 问题指分类任务中不同类别的训练样例数目差别很大的情况。 假设有二分类预测值, 则几率 反映正类可能性和反类可能性之比值。 类别不平衡时, 令 表示正类数而 表示反类数, 使用下式对预测值进行调整的策略即再缩放 (Rescaling), 又称再平衡 (Rebalance)。 然而「 训练集是真实样本总体的无偏采样」 的假设往往并不成立, 即未必能有效地基于训练集观测几率来推断真实几率。 现解决类别不平衡问题的方法有如下三类。
欠采样 (Undersampling): 又称下采样 (Downsampling), 去除多数类样本使得正、 反类样例数目接近;
过采样 (Oversampling): 又称上采样 (Upsampling), 增加少数类样本使得正、 反类样例数目接近;
阈值移动 (Threshold Moving): 直接基于原始训练集进行学习, 预测时将再缩放修正式嵌入决策过程中。
其中过采样的策略有如下几类。
ROS(Random Oversampling): 随机复制少数类样本, 简单易操作但容易导致过拟合;
SMOTE(Synthetic Minority Oversampling Technique): 针对少数类中的每个样本, 计算欧氏距离查找 个近邻, 沿着与 个少数类近邻中的任一相连的线段来生成新样本;
生成对抗网络 。
经典的分类任务评估指标
错误率 (Error Rate) 分类错误样本占总样本的比例, 定义如下。
精度 (Accuracy) 分类正确样本占总样本的比例, 定义如下。
计算精度函数的代码如下。
1 acc = np.mean(y_test == y_predict)
使用 Keras 模型的 score
方法也可以计算测试集的精度, 代码如下。
1 acc = model.score(X_test, y_test)
精度是很好很直观的评估指标, 但有时精度高并不一定意味着模型好。 如数据分布严重不均衡地偏向正类时, 一个只输出正类的模型就能达到高精度。
混淆矩阵 (Confusion Matrix) 又称误差矩阵, 记录预测类别和实际类别。
对于二分类任务, 可根据学习器预测类别与样本真实类别的组合划分真阳性 (TP; True Positive)、 假阳性 (FP; False Positive)、 真阴性 (TN; True Negative) 和假阴性 (FN; False Negative) 四种情况。 显然样本总数, 错误率, 精度。
二分类任务的混淆矩阵
通常二分类任务的混淆矩阵如下。
由混淆矩阵衍生的分类任务评估指标
特异性 (Specificity) 即「 分类器对反类的识别能力」 的评估指标, 定义如下。 查全率 (Recall) 又称召回率, 记为, 关注「 真阳性在实际正类中的占比」 , 与命中率 (Hit Rate) 或称灵敏度 (Sensitivity) 即「 分类器对正类的识别能力」 的评估指标含义相同, 定义如下。 查准率 (Precision) 又称准确率, 记为, 关注「 真阳性在预测正类中的占比」 , 定义如下。 查准率和查全率是一对矛盾的度量。 一般而言, 查准率较高时, 查全率往往较低, 反之亦然。
即几何平均值 (Geometric Mean), 综合考虑特异性和灵敏度, 在数据不平衡的情况下该指标很有参考价值, 定义如下。 将样本依「 为正类的可能性」 降序排序, 按此顺序逐个将样本作为正类预测, 以查准率为纵轴, 以查全率为横轴作图, 得到查准率-查全率曲线 (P-R Curve; Precision-Recall Curve), 简称 P-R 曲线。 曲线的平衡点 (BEP; Break-Even Point) 是 时的取值, 粗略比较的情况下, 此值越大说明学习器越优。
scikit-learn 中计算 P-R 曲线的代码如下。 其中, 得到样本为正类的可能性需要调用模型的 decision_function
或 predict_proba
方法。
1 2 3 from sklearn.metrics import precision_recall_curveprecision, recall, thresholds = precision_recall_curve( y_test, model.decision_function(X_test))
P-R 曲线下的面积实际上是目标检测中常用的评价指标平均精度 (AP; Average Precision), 记 P-R 曲线为函数, 易得平均精度的定义如下。 scikit-learn 中调用平均精度函数的代码如下。
1 2 from sklearn.metrics import average_precision_scoreap = average_precision_score(y_test, model.decision_function(X_test))
值基于查准率和查全率的调和平均 (Harmonic Mean) 定义, 如下式。
scikit-learn 中调用计算 值函数的代码如下。
1 2 from sklearn.metrics import f1_scoref1 = f1_score(y_test, y_predict)
对于多分类任务, 值的计算可有如下方式。
宏观 (Macro) 值: 对每个类别单独计算 值, 再取算术平均值;
微观 (Micro) 值: 累加各类别的查全率和查准率, 再计算 值。
度量 ( -Measure) 或称 分数 ( -Score), 结果记为, 是 值的一般形式, 基于加权调和平均, 如下式。
上式的 度量了查全率对查准率的相对重要性。 时退化为; 时查准率有更大影响; 时查全率有更大影响。
受试者工作特征 (ROC; Receiver Operating Characteristic) 与 P-R 曲线类似, 而横纵轴不同。 ROC 曲线的纵轴为真阳性率 (TPR; True Positive Rate) 即召回率, 定义如下。 ROC 曲线的横轴为假阳性率 (FPR; False Positive Rate) 或称误诊率 (Misdiagnosis Rate), 定义如下。
此外有真阴性率 (TNR; True Negative Rate) 即特异性, 定义如下。 此外还有假阴性率 (FNR; False Negative Rate) 或称漏诊率 (Missed Diagnosis Rate), 定义如下。
scikit-learn 中计算 ROC 曲线的代码如下。
1 2 from sklearn.metrics import roc_curvefpr, tpr, thresholds = roc_curve(y_test, model.decision_function(X_test))
有限样本的情况下无法产生光滑的 ROC 曲线, 通常比较 ROC 曲线下的面积 (AUC; Area Under ROC Curve) 以判断学习器的优劣。 scikit-learn 中调用计算 AUC 函数的代码如下。
1 2 from sklearn.metrics import roc_auc_scoreauc = roc_auc_score(y_test, model.decision_function(X_test))
AUC 越大说明模型的性能越优。
多标记学习 (MLL; Multi-Label Learning)
多标记学习 [14] 任务中, 样本与多个标记同时相关联。 令 表示 维特征空间, 为包含 个可能标记的标记空间, 多标记学习任务旨在从训练集 中学习映射, 其中 且。
多标记学习任务评估指标
记样本真实标记为, 预测的判别结果为, 决策结果为, 为与 对应的排序函数, 常见的多标记学习任务评估指标如下, 其中 为异或运算。
子集精度 (Subset Accuracy)
汉明距离 (Hamming Distance)
最高错误率 (One Error)
覆盖率 (Coverage)
早期的多标记学习算法可依策略分为两类:
问题转换 (PT; Problem Transformation): 将多标记学习问题转换为其他现成学习范式;
算法适应 (AA; Algorithm Adaptation): 对常用的有监督学习算法进行改造, 使之适用于多标记学习。
二元关系 (BR; Binary Relevance)
二元关系法将多标记学习问题拆解为 个二元分类问题, 用 个基分类器逐个训练。
分类器链 (CC; Classifier Chains)
分类器链类似二元关系法, 但每次训练将上个分类器的预测结果作为特征, 以建模二元关系法忽略的标记依赖性。
贪婪分类器链 (Greedy CC): 按某种顺序逐个训练 个基分类器;
概率分类器链 (PCC; Probabilistic CC): 贝叶斯最优的分类器链, 将分类器链的概念视为二叉树中的路径, 其叶节点与标记相关联, 贪婪分类器链只关注固定顺序的单个路径, 而概率分类器链则关注 个路径, 该方法对数据集的标记数量有限制;
蒙特卡洛分类器链 (MCC; Monte-Carlo CC): 使用蒙特卡洛采样的概率分类器链变体, 取 次采样概率最大的标记组合, 性能接近概率分类器链。
标记幂集 (LP; Label Powerset)
标记幂集将 个标记的全部 个组合视为不同的类别, 将多标记学习问题转换为多分类问题, 复杂度高, 难以面向长尾数据且难以预测训练时未知的标记组合。
校准标记排序 (Calibrated Label Ranking)
校准标记排序将多标记学习问题转换为标记排序问题, 预测时投票排序各个学习器的输出, 最终结果即排序后较大的标记。
随机 k 标记集 (RAk EL; Random k -Labelsets)
随机 标记集 [11] 构建标记空间 的 个随机子集, 在这些子集上分别使用标记幂集算法, 并集成各个结果。
标记分布学习 (LDL; Label Distribution Learning)
标记分布学习 [2] 是一种通用的学习框架, 可包含多标记学习 作为特例。 多标记学习关注「 哪些标记能够描述样本」 的问题, 而标记分布学习关注「 每个标记以何种程度描述样本」 的问题。 标记分布 (Label Distribution) 为标记空间 中的每个标记分配一个称为描述度 (Description Degree) 的实数值, 样本 中标记 的描述度记为。 标记分布应满足如下约束。
非负性 (Non-Negative): ;
和为一 (Sum-to-One): 。
标记分布学习任务中, 样本与标记分布相关联。 样本的标记分布中, 某标记的描述度并非表示该样本属于某标记的概率, 而是某标记能描述该样本的程度。 简记样本 的标记分布为, 标记分布学习任务旨在从训练集 中学习映射。
标记分布学习任务评估指标
标记分布学习任务通常以距离和相似性作为评估指标, 记样本真实标记分布为, 预测标记分布为, 常见的评估指标如下。 其中, 克拉克距离和堪培拉距离对接近零的描述度细微变化是敏感的。
切比雪夫距离 (Chebyshev Distance)
克拉克距离 (Clark Distance)
堪培拉距离 (Canberra Distance)
KL 散度
余弦相似度 (Cosine Similarity)
交叉相似度 (Intersection Similarity)
经典的标记分布学习算法以最大熵模型建模, 并以 KL 散度 为优化目标, 使用改进迭代尺度 或拟牛顿法 进行优化。
结构化学习 (Structured Learning)
结构化数据 (Structured Data) 指数据集的每个特征都有清晰的定义, 通常可以通过表格的形式呈现; 而非结构化数据 (Unstructured Data) 与之相对, 如原始音频、 图像、 文本等数据。
结构化学习的输入和输出都是非 结构化数据, 如文本序列、 语法解析树、 预测框等。 语音识别、 翻译、 文法解析、 目标检测等都是结构化学习的应用场景。
k 近邻 (k -NN; k -Nearest Neighbors)
懒惰学习 (Lazy Learning) 即训练阶段仅存储样本, 无训练时间开销, 测试阶段时再处理。 近邻是最常见的懒惰学习算法, 邻居 (Neighbors) 即距离待测样本最近的 个训练样本。 一般情况下, 以欧氏距离作为距离度量。
近邻可用于分类任务, 预测结果由 个邻居投票表决。 在 scikit-learn 中, 调用 近邻分类的代码如下。
1 2 3 from sklearn.neighbors import KNeighborsClassifiermodel = KNeighborsClassifier(n_neighbors=k) model.fit(X, y)
近邻可用于回归任务, 预测结果为 个邻居的平均值。 在 scikit-learn 中, 调用 近邻回归的代码如下。
1 2 3 from sklearn.neighbors import KNeighborsRegressormodel = KNeighborsRegressor(n_neighbors=k) model.fit(X, y)
随 的增加, 分类的决策边界和回归的预测曲线会越来越平滑。
近邻模型容易理解, 通常不需要过多调节就能得到不错的性能, 通常在考虑使用更高级的技术前尝试, 构建模型的速度通常很快, 但数据集大时预测速度慢, 且不能处理具有很多特征的数据集, 对稀疏数据集而言效果尤其不好。
线性模型 (Linear Model)
广义线性模型 (Generalized Linear Model) 定义如下。
其中, 在统计学领域, 单调可微函数 被称为联系函数 (Link Function)。
线性模型虽然简单, 却有丰富的变化。 可令模型预测值逼近 的衍生物, 如认为对应输出在指数尺度上变化时, 可建立模型, 即对数线性回归 (Log-Linear Regression)。 可知对数线性回归是广义线性模型在 时的特例。
非线性模型 (Nonlinear Model) 定义如下。
其中, 为 个非线性基函数组成的向量。
非线性模型通过逐次逼近的方法拟合数据, 其特征因子对应的参数不止一个。
一元线性回归 (Simple Linear Regression)
一元线性回归模型如下式。
最小二乘法 (LSM; Least Squares Method) 试图找到一条直线, 使所有样本到直线上的欧氏距离之和最小。 最小二乘法基于均方误差 最小化来求解模型, 考虑只有一个特征的情况, 即下式。
基于均方误差的损失函数的极大似然估计解读
上式可以用于线性回归的一个原因是假设了观测中包含服从正态分布的噪声, 即有下式。 可得似然函数如下。 根据最大似然估计的方法, 使用「 对数似然」 将乘积转化为求和, 将最大化改写为最小化, 可得下式。 只需假设 为常数即可忽略上式右端第一项, 且第二项除常系数外, 其余部分与均方误差是相同的。 因此, 在高斯噪声的假设下, 最小化均方误差等价于对线性模型的极大似然估计。
将 分别对 和 求偏导, 可得下式。
令上式为零, 可得普通最小二乘法的参数估计公式如下式。
参数 的估计公式的证明
令 对 的偏导为零, 可得下式。 将 代入上式, 整理后可得下式。 引入下式。
则 式可改写为如下形式。
最小二乘回归 (Least Squares Regression) 即通过最小化均方误差训练线性回归模型。 最小二乘法用途很广, 不仅限于线性回归。
多元线性回归 (Multivariate Linear Regression)
多元线性回归模型如下式。
严格地说, 上式是输入特征的一个仿射变换 (定义见数学拾遗的线性变换 )。
为方便讨论, 令, 令。 将数据集的特征表示为一个 大小的设计矩阵 (Design Matrix), 其中每行对应一个样本, 该行前 个元素对应 个属性值, 最后一个元素恒置为, 即下式; 同时将数据集的标记改写为列向量, 即。
多元线性回归模型的参数估计为如下数学形式。 可得多元线性回归的参数估计公式, 又称正规方程 (Normal Equation), 即下式。 类似地使用公式简单表述的解的形式, 在数学上又称为解析解 (Analytical Solution)。
多元线性回归参数估计公式的证明
将式 对 求导, 可得下式。 由标量对向量的求导法则 (见矩阵微积分的向量求导 ), 可得下式。 令上式为零, 可得下式。
多元线性回归的参数估计公式的不 适用情景如下: 对 求逆需要保证其行列式的值不接近 0, 因此自变量间相关性明显时此参数估计公式不适用; 特征数量大时运算的代价高, 此时参数估计公式也不适用。
scikit-learn 内置多元线性回归的实现。 scikit-learn 中使用解析解进行参数估计的代码如下。
1 2 3 from sklearn.linear_model import LinearRegressionmodel = LinearRegression() model.fit(X, y)
使用随机梯度下降法进行参数优化的代码如下。
1 2 3 from sklearn.linear_model import SGDRegressormodel = SGDRegressor() model.fit(X, y)
定义向量 作为 coef_
, 定义 作为 intercept_
。 输出模型参数和拟合优度 的代码如下。
1 2 3 print (model.coef_) print (model.intercept_) print (model.score(X_test, y_test))
scikit-learn 为了与用户设置的参数区分开, 总是将从训练数据中得出的参数值保存在以下划线结尾的属性中。
岭回归 (Ridge Regression)
岭回归使用 正则化, 约束更强因而更不容易过拟合, 是普通线性回归最常用的代替方法之一。 岭回归模型的参数估计为如下数学形式。 由约束项可见岭回归希望 的每个元素都尽可能接近 0, 即意味着每个特征对输出的影响都应尽可能小。 类似多元线性回归参数估计公式的证明方式, 可得岭回归参数估计公式如下。
其中, 为预先设置的超参数, 用于控制系数收缩量, 取值越大则收缩量越大。
使用岭回归模型的代码如下。
其中, alpha
即上式。
1 2 3 from sklearn.linear_model import Ridgemodel = Ridge(alpha=.5 ) model.fit(X, y)
有时岭回归不作预测, 而是用于筛选变量、 研究自变量贡献。 标准化岭回归系数稳定且绝对值很小的自变量、 随岭参数的增加岭迹图曲线趋近于零的自变量是可剔除的, 若有若干个回归系数不稳定, 需根据去掉某变量后重新进行岭回归分析的效果来确定。
套索回归 (Lasso Regression)
套索即最小绝对值收敛和选择算子 (LASSO; Least Absolute Shrinkage and Selection Operator)。 套索回归使用 正则化, 参数估计为如下数学形式。 由约束项可见套索回归希望 的某些元素恰好为 0, 即意味着某些特征被模型完全忽略, 这可以被视作一种自动化的特征选择。 忽略某些特征可使得模型更容易解释, 也可以呈现模型最重要的特征。 套索回归因使用 正则化而不存在解析解, 使用套索回归模型的代码如下。
其中: alpha
控制系数稀疏度; max_iter
为运行迭代的最大次数。
1 2 3 from sklearn.linear_model import Lassomodel = Lasso(alpha=0.01 , max_iter=100000 ) model.fit(X, y)
欠拟合时, 即模型在训练集和测试集的表现都差时, 可尝试减小 alpha
, 即控制系数趋向于 0 的强度, 同时需要增加 max_iter
。
scikit-learn 还提供了结合岭回归和套索回归二者的惩罚项的 ElasticNet
。
局部加权线性回归 (LWLR; Locally Weighted Linear Regression)
局部加权线性回归模型的参数估计为如下数学形式。
其中, 是数据点的权重, 通常是预测点与该数据点的距离。
局部加权线性回归的参数估计公式如下。
其中, 是用于给每个数据点赋予权重的矩阵。
最大熵模型 (Maximum Entropy Model)
最大熵原理 (Maximum Entropy Principle) 认为, 在所有可能的概率模型分布中, 且在满足既定的约束条件的情况下, 熵最大的模型即最大熵模型就是最优的模型。
定义 为特征函数 (Feature Function), 若 和 满足某一事实时, 其值为 1, 否则为 0。
是特征函数关于经验分布的期望值。 > 其中, 可由数据集中样本 出现的频数除以样本总数计算而得。
是特征函数关于真实分布的期望值, 定义如下。 > 其中, 可由样本 出现的频数除以样本总数计算而得。
是一种常见的约束形式。
假设满足所有约束条件的模型集合如下。 > 其中: 表示所有可能的概率模型分布; 表示约束条件的数目。
定义在条件概率分布 上的条件熵如下。
则模型集合 中条件熵 最大的模型即最大熵模型。
最大熵模型的学习等价于约束最优化问题, 按最优化的习惯, 等价于在满足 和约束条件集合 的情况下求解 的最小值。 引入拉格朗日乘子, 可得下式。 则得到最优化问题, 其等价的对偶问题为。
上式对 求偏导数, 可得下式。
令上式为零, 在 的情况下, 得到下式。
由, 可得下式。
上式中, 称为标准化因子 (Normalization Factor), 定义如下。
是特征函数的权值, 也是最大熵模型中的参数向量。 记, 则 的参数估计公式如下。
可知最大熵模型的学习归结为对 的极大化。
的似然函数为如下数学形式。
使用「 对数似然」 将乘积转化为求和, 得到下式。
极大化 等价于最大熵模型的最大似然估计。
改进迭代尺度 (IIS; Improved Iterative Scaling)
改进迭代尺度试图寻找新的参数向量, 使得模型的对数似然函数值增大。
对于给定的经验分布, 模型参数由 到, 对数似然函数的改变量 如下。
引入不等式 计算下界以去除对数项。
记此下界为 即。 改进迭代尺度引入, 即数据点 满足特征函数的数量, 为特征函数构造分布。 此时 可改写为下式。
引入琴生不等式 (Jensen's Inequality) 计算下界 的下界。
记此下界为, 依次令其对 的偏导为零, 求解方程即可得到。
拟牛顿法 (Quasi-Newton Method)
见数学拾遗的拟牛顿法 。
对数几率回归 (Logistic Regression)
对数几率回归又称逻辑回归。 虽然名称叫回归, 但实际上是一种分类学习方法。
对数几率回归直接对分类可能性进行建模, 无需事先假设数据分布, 可避免假设分布不准确导致的问题。 对数几率回归不是仅预测出类别, 而是可得到近似概率预测。
将对数几率函数 (即 Sigmoid 函数) 代入广义线性模型, 即令, 可得如下的对数几率回归模型。
其中: 将 视为样本 作为正类的可能性, 则 是其为反类的可能性, 两者的比值称为几率 (Odds); 取几率的对数得到对数几率 (Logit; Log Odds)。
通常使用最大似然估计 来计算逻辑回归的参数, 即令每个样本属于其真实标记的概率越大越好。 对于逻辑回归, 有似然函数如下。
其中: ; 。
可得对数几率回归的参数估计公式如下。
对数几率回归的似然函数推导
将 视为后验概率估计, 对数几率回归模型可重写为如下数学形式。 显然, 。 似然项可改写为如下数学形式。 将上式代入 式, 得到似然函数如下。 由于 的取值只可能是 0 或 1, 似然函数可改写为下式。 两式综合可得下式。
可知 是关于 的高阶可导连续凸函数, 可使用梯度下降 或牛顿迭代法 求得最优解。
使用对数几率回归模型的代码如下。
1 2 3 from sklearn.linear_model import LogisticRegressionmodel = LogisticRegression() model.fit(X, y)
线性判别分析 (LDA; Linear Discriminant Analysis)
又称费雪线性判别 (Fisher's Linear Discriminant), 设法将样例投影至直线上, 使得同类样例的投影点尽可能接近, 而异类样例的投影点尽可能远离。 在对新样本进行分类时, 将其投影至该直线上, 再根据投影点的位置来确定新样本的类别。
支持向量机 (SVM; Support Vector Machine)
对于支持向量机, 数据点 被视为 维向量, 研究是否可以使用 维超平面 (Hyperplane) 即 分开数据点, 即所谓线性分类器。 样本空间任意数据点 到超平面的距离为如下数学形式。 假定训练集 且标记满足, 正确分类即如下要求: 若 则有; 若 则有。
支持向量 (Support Vector) 即位于类别间决策边界的数据点, 预测新样本需要测量其与每个支持向量之间的距离。 两个异类支持向量到超平面的距离之和为, 其被称为间隔 (Margin)。 训练支持向量机即找到最大间隔的超平面, 即最小化。
线性模型在低维空间中可能非常受限, 添加更多的特征可使线性模型更加灵活。 支持向量机使用的核技巧 (Kernel Trick) 可将数据映射至更高维空间。 高斯核 (Gaussian Kernel) 又称径向基函数核 (RBF Kernel; Radial Basis Function Kernel), 是支持向量机常用的核函数, 考虑所有阶数的所有可能的多项式, 且阶数越高对应特征的重要性越小, 其数学形式如下。
其中: 超参数 决定点与点之间「 靠近」 是多大距离, 值非常大时往往过拟合; 与 呈倒数关系的超参数 又称高斯核的带宽 (Width), 且易知。
硬间隔 (Hard Margin) 要求所有样本必须正确分类, 而软间隔 (Soft Margin) 允许支持向量机在一些样本上出错。 软间隔时支持向量机的参数估计即如下数学形式。
其中: 正则化参数 表示对误分类数据点的惩罚程度, 值过大时将趋于硬间隔标准, 决策边界间隔将变小且泛化能力变差; 可以是铰链损失 (Hinge Loss) 即, 或指数损失 (Exponential Loss) 即, 或对率损失 (Logistic Loss) 即。
常用的软间隔支持向量机使用铰链损失。
决策树 (Decision Tree)
罗斯· 昆兰 (Ross Quinlan)
澳大利亚计算机科学家, 提出最初的决策树算法, 进一步提出 ID3 和 C4.5 算法。
决策树具有强判断依据, 可视化后说服力高, 即可解释性强。
决策树的根结点即整个数据集。 决策树以属性条件作为分支结点, 决策树生成时每个结点包含的样本集合根据属性条件被划分至子结点中, 预测时属性条件判断结果作为该样本分类的路径走向。 最终预测的类别作为决策树的叶结点。 仅有一层划分的决策树称为决策树桩 (Decision Stump)。
生成决策树的伪代码
生成决策树的伪代码如下。
一开始, 生成结点 ; 中样本全属于同一类别 将 标记为 类叶结点; ; 中样本在 上取值相同 将 标记为叶结点, 其类别标记为 中样本数最多的类; ; 从 中选择最优划分属性 ; 的每一个值 为 结点生成分支 ; 令 表示 中在 上取值为 的样本子集; 将 标记为叶结点, 其类别标记为 中样本数最多的类; 以 为分支结点;
决策树生成的关键是选择最优划分属性, 即使分支结点所含样本尽可能属同一类别的划分属性。 如果树中某个叶结点包含数据点的分类情况都相同, 则称这个叶结点是纯的 (Pure)。 选择最优划分属性的标准有信息增益、 增益率和基尼指数。
决策树的生成是一个递归过程, 有三种情形会导致递归返回: 当前结点包含的样本全属于同一类别, 无需划分; 当前属性集为空, 或所有样本在所有属性上取值相同, 无法划分, 结点的类别为所含样本最多的类别; 当前结点包含样本集合为空, 无法划分, 结点的类别为其父节点所含样本最多的类别。
决策树处理
决策树的剪枝处理可用于回避过拟合, 决策树剪枝基本策略如下。
预剪枝 (Pre-pruning): 在决策树生成过程中, 对每个结点在划分前进行估计, 若不能带来泛化性能的提升, 则不进行划分, 即将此结点标记为叶结点以及早停止树的生长;
后剪枝 (Post-pruning): 训练完成后, 自底向上对非叶结点进行考察, 若将子树替换为叶结点能带来泛化性能的提升, 则替换之。
一般情况下, 后剪枝决策树通常比预剪枝决策树保留更多分支, 因此欠拟合风险较小, 且泛化性能往往优于预剪枝决策树, 然而, 其训练时间开销较预剪枝决策树要大得多。
决策树也需要对连续值进行处理。 通常采用二分法将连续属性离散化, 这也是 C4.5 决策树算法中采用的机制, 步骤如下。
将训练集中连续属性 的取值顺序排序, 记为;
求候选划分点集合;
考察并选取最优划分点, 例如以最大信息增益为准则, 即选取 作为最优划分点。 其中 是样本集 基于划分点 二分后的信息增益。
决策树也需要对缺失值进行处理。 定义 为无缺失值样本子集, 为无缺失值样本所占的比例。 如以最大信息增益为准则, 可将信息增益计算式如下推广。
scikit-learn 实现的决策树 DecisionTreeClassifier
使用 CART 算法, 即以基尼指数作为选择最优划分属性的标准, 且只实现了预剪枝, 没有实现后剪枝。
模型的 feature_importances_
可查看特征重要性 (Feature Importance), 即每个特征对树的决策的重要程度, 特征重要性的求和始终为 1。 如果某个特征的特征重要性很小, 并不能说明该特征没有提供任何信息, 只能说明该特征未被树选中, 而可能是另一特征也包含了同样的信息。
信息增益的数学形式如下。
其中: 指属性 可能取值的总数; 若以这些可能取值对样本集 进行划分, 其中划入第 个分支结点的子集记为; 即信息熵 为度量样本集合纯度最常用的指标, 为第 类样本所占的比例。
一般而言, 信息增益越大, 即信息熵减少得越多, 则意味着使用属性 来划分所获得的「 纯度提升」 越大, 即减小不确定性越多。
ID3 算法的 ID 指迭代二分法 (Iterative Dichotomiser), 该算法以最大信息增益为准则来选择最优划分属性。
增益率 (Gain Ratio)
信息增益对可取值数目较多的属性有所偏好, 增益率的目的是需要减少这种偏好带来的不利影响, 增益率的数学形式如下。 上式中 称为属性 的固有值 (IV; Intrinsic Value), 定义如下。 C4.5 算法的 C 指分类器 (Classifier), 该算法使用增益率为准则, 但并不是直接选择增益率最大的候选划分属性, 而是先从候选划分属性中找出信息增益水平高于平均水平的属性, 再从中选择增益率最高的。
基尼指数 (Gini Index)
基尼指数的数学形式如下。
其中 即基尼值, 定义如下。 基尼值反映了从数据集 中随机抽取两个样本, 其类别标记不一致的概率, 用于度量数据集 的纯度。
CART 决策树以最小基尼指数为准则来选择最优划分属性。
朴素贝叶斯 (NB; Naive Bayes)
又称朴素贝叶斯分类器 (NBC; Naive Bayes Classifier)。 其中「 朴素」 即假设每个属性取其各个值的可能性是独立的, 与其他属性的取值不相关。 根据这一假设重写贝叶斯公式, 得到下式。
其中: 为可能的类别标记; 为属性数目。
朴素贝叶斯分类器的表达式即类别判定准则如下。 令 表示训练集 中标记类别为 的样本的集合, 显然先验概率 的计算式如下。 对于离散属性, 令 表示训练集 中第 个属性取值为 的样本的集合, 条件概率的计算式如下。 拉普拉斯修正 (Laplacian Correction) 又称拉普拉斯平滑 (Laplacian Smoothing), 可避免训练集因样本不充分而导致概率值为零的问题。 经拉普拉斯修正后, 先验概率 和条件概率 的计算式如下。
其中: 为训练集 中可能的类别数; 为第 个属性可能的取值数。
对于连续属性, 条件概率可考虑概率密度函数, 假定, 其中 和 分别是类别为 的样本在第 个属性上取值的均值和方差, 即下式。
scikit-learn 实现了如下三种的朴素贝叶斯分类器, 平滑化对应可选参数 alpha
。
GaussianNB
: 可应用于任意连续数据;
BernoulliNB
: 假定输入数据为二分类数据;
MultinomialNB
: 假定输入数据为计数数据, 即每个特征代表对某个对象的整数计数。
GaussianNB
主要用于高维数据; 而 BernoulliNB
和 MultinomialNB
常用于文本数据分类, 广泛用于稀疏计数数据。
神经网络 (NN; Neural Network)
神经网络起源于神经科学。 生物学的神经元 (Neuron) 由负责输入的树突 (Dendrite)、 负责处理的细胞核 (Cell Nucleus)、 轴突 (Axon)、 负责输出的轴突末梢 (Axon Terminal)、 特异性接头突触 (Synapse) 等组成, 神经元之间通过突触互联而传输信息。
树突接收到来自其他神经元 (或视网膜等环境传感器) 的信息, 通过突触权重 加权, 以确定输入的影响, 即激活或抑制。 来自多个源的加权输入以和的形式汇聚于细胞核, 通常经过一些非线性处理, 到达目的地或传入下一神经元。 这种生物神经元的工作方式是早期神经网络的灵感来源, 而当今大多数神经网络的研究几乎没有直接从神经科学中获得灵感。
神经网络又称人工神经网络 (ANN; Artificial Neural Network), 以与生物学意义的神经网络区分。 神经网络被定义为由具有适应性的简单单元即神经元组成的广泛并行互连的网络, 其组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
使用 Keras 构建神经网络模型
Keras 是用于构建和训练神经网络模型的高阶 API, 可用于快速设计原型、 研究和生产。
模型 (Model) 是神经网络的核心, 架构 (Architecture) 即神经网络模型的整体结构, 即单元数目以及单元以何种方式连结。 层 (Layer) 是神经网络中的一组神经元, 负责处理一组输入特征或一组神经元的输出, 而最常见的模型架构是层的堆叠。 TensorFlow2.0 推荐使用 tf.keras
构建神经网络, 使用 tf.keras.Sequential
创建层堆叠模型的代码如下。
1 model = tf.keras.Sequential()
此时只需调用模型的 add()
方法即可新增堆叠层。 常见的神经网络模型都包含于 tf.keras.layers
中, tf.keras.layers
中的各个模型层新建时的重要参数如下。
activation
: 设置层的激活函数, 默认情况下不应用任何激活函数, 参数可以是函数名称字符串如 'sigmoid'
, 也可以是函数对象如 tf.sigmoid
, 大部分参数都类似地支持两种给定方法;
kernel_regularizer
: 设置核正则化方案;
bias_regularizer
: 设置偏置正则化方案。
神经网络模型通常是层的有向无环图, 而 tf.keras.Sequential
创建的模型是层的简单堆叠, 无法表示一些复杂的模型拓扑。 使用函数式的写法则可以创建如多输入、 多输出、 具有共享层或具有非序列数据流的模型。 使用函数式写法构建一个简单的多层感知机模型如下例。
1 2 3 4 input_layer = tf.keras.Input(shape=(72 , )) hidden = layers.Dense(32 , activation='relu' )(input_layer) output_layer = layers.Dense(10 , activation='softmax' )(hidden) model = tf.keras.Model(inputs=input_layer, outputs=output_layer)
共享层是在同一模型中多次重用的层, 使用函数式写法实现含共享层的模型, 只需多次调用同一层的实例即可。
模型构建完毕后, 模型的细节可由如下方式输出。
安装 pydot 和 graphvizf 后可由如下方式输出模型的层图。
1 keras.utils.plot_model(model, 'model.png' , show_shapes=True )
训练前需要对模型进行编译 (Compile) 以进行一些设置, 模型的 compile()
方法的重要参数如下。
optimizer
: 设置优化器, 决定模型如何根据数据和损失函数进行更新;
metrics
: 设置指标, 用于监控训练和测试步骤;
loss
: 设置损失函数。
开始训练需要调用模型的 fit()
方法, 代码如下。 fit()
方法返回一个历史记录对象, 该对象包含一个字典, 其中包含训练阶段所发生的一切事件。
1 history = model.fit(X_train, y_train)
模型的 fit()
方法的重要参数如下。
epochs
: 迭代次数;
batch_size
: 批量大小;
validation_data
: 验证集数据, 形式为 (X_val, y_val)
;
validation_split
: 验证集所占比例;
callbacks
: 训练期间的回调。
训练后的模型可对新数据进行预测, 需要调用模型的 predict()
方法, 代码如下。
1 predictions = model.predict(X_test)
模型的评估使用 evaluate()
方法, 代码如下。
1 result = model.evaluate(X_test)
模型的权重保存和读取对应模型的 save_weights
和 load_weights
方法; 模型的完整保存和读取对应模型的 save
方法和 tf.keras.models.load_model
方法。 保存模型的权重即建立检查点 (Checkpoint)。 通常 Keras 模型的文件后缀为.h5
。
基准 (Baseline) 即比较模型效果时的简单参考模型, 有助于开发者针对特定问题量化最低预期效果。
传统机器学习关注训练预测模型, 以通过连续或离散的特征得到预测结果, 不涉及特征学习, 主要靠人工经验或特征转换方法提取特征, 这类机器学习可视作浅层学习 (Shallow Learning)。
为使模型具有更好的表现, 通常需要将输入信息转换为有效的特征, 即表示 (Representation)。 自动学习有效的特征的学习过程, 称为表示学习 (Representation Learning)。 语义鸿沟 (Semantic Gap) 是表示学习的关键问题, 即输入数据的底层特征与高层语义信息的不一致性和差异性。 好的高层语义表示通常要从底层特征开始, 经过多步非线性转换才能得到, 而深层结构的优点是能够增加特征的重用性, 从而指数级地增加表示能力。
深度学习 (DL; Deep Learning) 是机器学习的特定分支, 主要以深层结构的神经网络为基础, 对数据进行表示学习。 深度学习需要解决的关键问题是贡献度分配问题 (CAP; Credit Assignment Problem), 即特征或其参数对最终输出结果的贡献或影响。
端到端学习 (End-to-End Learning) 即学习的过程中不进行分模块或分阶段训练, 直接优化任务的总体目标, 通常不需要明确给出不同模块或阶段的功能, 中间过程不需要人为干预。 目前大部分深度学习任务都属于端到端学习。
M-P 神经元 (McCulloch-Pitts Neuron)
沃伦· 麦克洛克 (Warren McCulloch)
美国神经科学家和控制论学者。
沃尔特· 皮茨 (Walter Pitts)
美国逻辑学家和计算神经科学家。
M-P 神经元是首个通过模仿神经元而形成的模型, 由沃伦· 麦克洛克和沃尔特· 皮茨提出。 M-P 神经元是多输入单输出的, 数学形式如下。
其中: 为激活函数中的阶跃函数, 决定结果是否向下游输出; 的相反数又称阈值 (Threshold), 若神经元收到的加权输入和大于阈值, 则神经元激活, 即「 兴奋」 状态, 向下一神经元发送信息。
激活函数 (Activation Function) 又称传递函数 (Transfer Function), 装载于神经元, 对计算结果执行最终数学修改。
激活函数应当为连续并可导 (允许少数点上不可导) 的非线性函数, 且通常单调递增, 若即使用恒等函数 (Identity Function), 则神经网络只是将输入进行线性组合后输出。 使用恒等函数的情况特殊, 例如回归问题的输出层中可以使用恒等函数。
激活函数及其导函数应当尽可能简单, 这样有利于提高网络计算效率。 激活函数的导函数值域应当在合适的区间内, 否则会影响训练的效率和稳定性。
常见的激活函数
阶跃函数 (Heaviside Function) 是 M-P 神经元使用的激活函数, 不连续, 不光滑, 数学形式如下。 Sigmoid 函数即形似「 S」 的函数, 是神经网络中最常见的激活函数。 对数几率函数 (Logistic Function) 又称对率函数, 是 Sigmoid 函数最重要的代表, 通常在神经网络的讨论中两者等价, 具有如下数学形式。 对数几率函数可以使用 的函数值完成求导函数值的操作, 即下式, 这对于梯度下降法而言十分方便。
双曲正切 (Tanh; Hyperbolic Tangent) 函数图像关于原点对称, 应用时较 Sigmoid 更快, 数学形式如下。 双曲正切函数的导数即下式。 矫正线性单元 (ReLU; Rectified Linear Unit)[9] 本质上是无限个不同偏差的 Sigmoid 函数的堆叠, 有效减轻梯度消失问题, 且导数计算快, 数学形式如下。 其中「 矫正」 指引入非线性因素。
当权重参数变为负值时, 输入网络的正值会和权重相乘后会变为负值, 负值通过 ReLU 后就会输出零, 此时 ReLU 的导数也为零, 因此会导致权重参数不被更新, 即导致这个神经元永久性死亡, 这个问题被称为死亡 ReLU 问题 (Dying ReLU Problem)。 可以使用 ReLU 的变体解决死亡 ReLU 问题。
参数化矫正线性单元 (pReLU; Parameterized ReLU)[5] 是 ReLU 的变体, 为 ReLU 增加了一个线性项, 数学形式如下。
其中: 当 的值为 0.01 时, 称为带泄露矫正线性单元 (Leaky ReLU)[7] ; 当 的值满足标准正态分布时, 称为随机带泄露矫正线性单元 (Randomized Leaky ReLU)。
指数线性单元 (ELU; Exponential Linear Unit) 同样是 ReLU 的变体, 是近似的零中心化的非线性函数, 数学形式如下。
其中, 超参数 决定 时的饱和曲线, 并调整输出均值至 0 附近。
Swish 函数是一种自门控 (Self-Gated) 函数, 定义如下。 > 其中, 可将函数的形态控制于 ReLU 和线性函数之间, 可以是可学习的参数, 也可以是固定的超参数。
高斯误差线性单元 (GELU; Gaussian Error Linear Unit) 也是一种通过门控机制来调整其输出值的激活函数, 定义如下。 > 其中, 是高斯分布 的累计分布函数。
Softplus 函数是 ReLU 的平滑形式, 即下式。 Softplus 函数与 Sigmoid 函数的关系如下。
Softplus 函数的计算复杂于 ReLU, 一般不使用。
Maxout 函数引入上一层神经元的全部输出作为输入, 数学形式如下。 Maxout 函数可以拟合任意的凸函数, 拟合能力非常强, 且因为参数 是随学习过程而变化的, 所以 Maxout 函数是可学习的激活函数。 采用 Maxout 作为激活函数的神经网络又称 Maxout 网络。
当接近零的数被近似为零时发生下溢 (Underflow); 当大量级的数被近似为正无穷或负无穷时发生上溢 (Overflow)。 Softmax 函数用于对上溢和下溢进行数值稳定, 用于多分类的处理, 因此常见于神经网络的最后一层。 Softmax 函数的定义如下。
可以将线性回归模型视为仅由单个神经元组成的神经网络, 如对数几率回归模型即激活函数为 的单个神经元的神经网络。
感知机 (Perceptron) 由两层神经元组成, 分别称输入层 (Input Layer) 和输出层 (Output Layer), 且只有输出层神经元进行激活函数处理, 即只拥有一层功能神经元, 其学习能力非常有限。 若两类模式线性可分, 即存在一个线性超平面能将之分开, 则感知机的学习过程一定会收敛, 否则感知机学习过程将会发生振荡, 不能求得合适解。 感知机只能解决如与、 或、 非等的线性可分问题, 而不能解决如异或等的非线性可分问题。
神经元层的每个输入都与上一层的每个输出相连, 则称为全连接层 (Fully-connected Layer) 或稠密层 (Dense Layer)。 多层感知机 (Multilayer Perceptron) 又称多层前馈神经网络 (Multi-layer Feedforward Neural Network), 即三层及以上的、 全连接的 、 无反馈回路的神经网络, 能够解决非线性可分问题。 输出层与输入层间的层被称为隐藏层 (Hidden Layer)。 一般情况下, 计数神经网络的层数时, 仅包括隐藏层和输出层, 而不包括输入层。
通用近似定理 (Universal Approximation Theorem) 指出, 只要给予足够数量的隐藏单元, 前馈神经网络可近似任意给定的连续函数, 神经网络因其强大能力而往往容易在训练集上过拟合。
反向传播 (BP; Backpropagation)
反向传播指误差从输出神经元反向传播到输入神经元, 用于计算梯度下降 中的偏导数。 反向传播算法的精要为如下数学形式。
其中: 神经网络共 层; 表示第 层编号为 的神经元连接到第 层编号为 的神经元的权重; 表示第 层编号为 的神经元的输入。
反向传播的计算分为前向传递 (Forward Pass) 和反向传递 (Backward Pass) 两个阶段。 反向传播算法先按前向传递计算并缓存每个神经元的输出值, 然后再按反向传递遍历图的方式计算损失函数值相对于每个参数的偏导数。
前向传递的计算
前向传递阶段计算简单, 将训练输入送入网络可得到结果。 令 表示第 层的输出, 前向传递的数学形式如下。
特别的, 当第 层为输入层时, 有下式。
反向传递的计算
反向传递阶段即如下数学形式。 上式即误差项, 能够间接反映不同神经元对网络能力的贡献程度, 从而较好地解决贡献度分配问题。 记误差项为, 即如下数学形式。 则有下式。 进一步计算得到如下结果。
反向传播计算 的过程, 可被看作以 为输入、 以 为权重、 以乘以 作为线性激活函数的「 新的神经元」 , 整个反向传播过程可看作「 新的神经网络」 。
特别的, 对于网络的最后一层即第 层, 有下式。
误差从输出层反向传播时, 在每一层都要应用该层激活函数的导数。 如对数几率函数一类的饱和的激活函数, 在饱和区的导数接近于 0, 则误差经过每一层传递都会不断衰减, 当层数增加时, 梯度会不断衰减, 甚至消失, 使得整个网络难以训练, 即梯度消失问题 (Vanishing Gradient Problem) 或称梯度弥散问题。 相反, 梯度不断增加的情况称为梯度爆炸问题 (Exploding Gradient Problem)。 隐藏层的层数过多、 采用不合适的激活函数等都可能产生梯度消失或爆炸问题。
使用梯度下降法训练神经网络必须随机初始化参数, 若将所有参数初始化为 0, 无论训练迭代的次数如何, 神经元将由于对称性而执行相同计算。 神经元之所以能提取不同的特征, 是因为它们的参数不同, 所有参数初始化为 0 使得多个神经元将变得没有意义。
较深的神经网络的初始化方式
随着神经网络层数的增加, 标准正态分布的随机初始化并不能解决梯度消失或梯度爆炸问题, 而 Xavier 初始化 [4] 和 Kaiming 初始化 [5] 是较深的神经网络所使用的初始化方式。
Xavier 初始化适合饱和的激活函数, 如对数几率函数和双曲正切函数等。 记 和 为神经元的输入数和输出数, Xavier 正态分布初始化即, Xavier 均匀分布初始化即。
Kaiming 初始化适合非饱和的激活函数, 如 ReLU 函数及其变种。 记 为神经元的输入数, Kaiming 正态分布初始化即, Kaiming 均匀分布初始化即。
自动微分 (AD; Automatic Differentiation) 是利用链式法则对程序函数进行计算导数的方法。 计算图 (Computational Graph) 是自动微分的基础, 是以数学运算为结点的有向图, 按编译时构建或运行时构建可分为静态计算图 (Static Computational Graph) 和动态计算图 (Dynamic Computational Graph)。 静态计算图在构建时可以进行优化, 并行能力强, 但灵活性比较差; 动态计算图则不容易优化, 当不同输入的网络结构不一致时, 难以并行计算, 但是灵活性比较高。
反向传播通过使用计算图而得以在深度学习框架中实现。
卷积神经网络 (CNN; Convolutional Neural Network)
神经系统中神经元只接受其所支配的刺激区域内的信号, 即感受野 (Receptive Field)。 卷积神经网络受感受野的启发而提出。
大卫· 休伯尔 (David Hubel)
加拿大美籍神经科学家。
托斯坦· 威泽尔 (Torsten Wiesel)
瑞典神经科学家。
大卫· 休伯尔和托斯坦· 威泽尔提出, 猫的视皮层上存在如下两种细胞: 对感受野中特定朝向的线段做出反应的简单细胞 (Simple Cell); 对线段的移动也能做出反应的复杂细胞 (Complex Cell)。
福島邦彦 (Kunihiko Fukushima)
日本科学家。
福岛邦彦受视皮层简单细胞和复杂细胞的感受野的启发, 提出一种视觉信号逐层处理的多层神经网络, 称为新知机 (Neocognitron), 又称神经认知模型, 也是首个模仿感受野的模型。 神经认知模型由对比度提取层、 图形特征提取层和抗变形层交替排列组成, 即包含卷积和下采样的操作。
杨立昆 (Yann LeCun)
法国计算机科学家, 首次提出卷积神经网络。
卷积神经网络包含如下两种主要操作。
卷积 (Convolution): 以数学方法提取图像特征, 因与图像处理中的滤波处理一样, 使用的滑动窗口即卷积核 (Convolution Kernel) 又称滤波器 (Filter), 卷积操作所得结果称为特征图 (Feature Map), 卷积核完成一次卷积操作后, 将结果矩阵中所有元素求和后经由激活函数处理并存储至特征图, 滑动特定的步长 (Stride) 移动至下一位置重复操作;
池化 (Pooling): 又称汇聚, 即下采样操作以减小特征图的尺寸, 可使得特征表示对输入数据的位置变化具有稳健性, 与卷积操作类似, 池化也需要指定滑动窗口, 常用池化操作有平均池化 (Mean Pooling) 和最大池化 (Max Pooling), 前者对窗口内数据求均值, 而后者取最大值。
卷积神经网络是局部连结、 参数共享的前馈神经网络, 一般由多个卷积层 (Convolution Layer) 和池化层 (Pooling Layer) 线性堆叠, 再通过平坦操作展开至全连接层以完成最后的高级推理工作。 卷积神经网络可用于自动特征提取, 相比手工特征, 卷积神经网络提取的特征更加丰富, 目标浅层特征和深层的语义特征都能提取。
以步长为 1 的一维卷积为例, 零填充 (Zero Padding) 即在输入向量两端各填补 个 0。 记卷积核尺寸为, 通常使用 的零填充即等宽卷积 (Equal-Width Convolution), 使得卷积前后张量的尺寸保持一致。 的零填充即窄卷积 (Narrow Convolution); 的零填充即宽卷积 (Wide Convolution)。
减少池化层、 全连接层的作用, 可使得网络趋向于全卷积网络 (FCN; Fully Convolutional Network)。
循环神经网络 (RNN; Recurrent Neural Network)
循环神经网络可以接受自身的信息, 因而具有环路和短期记忆能力, 且更符合生物神经网络结构。 隐状态 (Hidden State) 即隐藏层的活性值。 记 时刻的隐状态为 且, 则艾尔曼循环神经网络 (Elman RNN) 通过下式更新隐状态。
其中: 为状态-状态权重矩阵; 为状态-输入权重矩阵; 为偏置向量。
约旦循环神经网络 (Jordan RNN) 通过下式更新隐状态。 霍普菲尔德网络 (Hopfield Network) 中, 隐状态神经元间相互双向连接, 每个神经元输出的数据经过其他神经元后最终反馈回自身。
隐状态 就是记忆 (Memory), 因为每个时刻都会被重写, 所以可以看作一种短期记忆 (Short-Term Memory)。
循环神经网络可以视为在时间维度上权值共享的神经网络, 一个完全连接的循环神经网络可以近似解决所有的可计算问题。 由于梯度消失或梯度爆炸问题, 循环神经网络只能学到短期依赖关系, 而很难对长距离的依赖关系建模, 即长程依赖问题 (Long-Term Dependencies Problem)。
双向循环神经网络 (Bi-RNN; Bidirectional RNN) 由输入相同但传递方向不同的两层循环神经网络组成。 记前向层和反向层的隐状态分别为 和, 则最终隐状态。
长短期记忆 (LSTM; Long Short-Term Memory)
长短期记忆的设计解决了普通循环神经网络的长期依赖问题, 长短期记忆模型通过输入门 (Input Gate)、 遗忘门 (Forget Gate) 和输出门 (Output Gate) 三个闸门控制记忆的增添、 遗忘和流失。
长短期记忆模型引入内部状态 (Internal State) 以专门进行线性的循环信息传递, 计算式如下。
其中, 是内部状态的候选值。
内部状态同时非线性地输出信息给隐藏层的外部状态, 计算式如下。 内部状态 有能力在捕获到关键信息时保存一定的时间间隔, 使得短期记忆的时间延迟, 长短期记忆因此得名。
门控循环单元 (GRU; Gated Recurrent Unit)
长短期记忆设计中, 输入门和遗忘门是互补关系, 具有一定冗余性, 而门控循环单元仅使用一个更新门 (Update Gate) 来控制保留的信息, 且引入重置门 (Reset Gate), 隐状态的计算式如下。
其中, 是状态的候选值。
可见, 当 且 时, 门控循环单元网络退化为简单的循环神经网络。
玻尔兹曼机 (Boltzmann Machine)
玻尔兹曼机的输入又称可见层 (Visible Layer)。 玻尔兹曼机类似霍普菲尔德网络, 可见层和隐藏层的神经元间相互双向连接。
受限玻尔兹曼机 (RBM; Restricted Boltzmann Machine) 又称簧风琴 (Harmonium), 主要用于无监督的特征学习。 相较于玻尔兹曼机, 受限玻尔兹曼机限定模型为二分图, 即可见层神经元间不连接且隐藏层神经元间不连接。 为可见层 配置偏置, 为隐藏层 配置偏置, 权重矩阵 中每个元素指定了隐藏层单元 和可见层单元 间的权重。 受限玻尔兹曼机的能量 (Energy) 定义如下。 可见层的边缘分布可由能量计算, 如下式。 上式中, 为归一化系数, 定义如下。 受限玻尔兹曼机的训练目标是最大化所有可见层的边缘分布的乘积。
自编码器 (Autoencoder)
自编码器是神经网络的一种, 包含编码器和译码器, 自编码器即二者连结构成的前馈神经网络。 编码器的输出即编码, 是自编码器的隐藏层, 其维度通常远小于编码器输入; 译码器将编码扩展为与编码器输入具有相同维度的输出。 记编码器为, 译码器为, 可得自编码器的目标函数如下。
编码器和译码器的权重可以共享以减少参数, 称为捆绑权重 (Tied Weight), 在一定程度上起到正则化的作用, 但并非必要。
一些非传统的自编码器如下。
稀疏自编码器 ;
变分自编码器 ;
降噪自编码器 (Denoising Autoencoder): 为输入随机添加噪声, 重建无噪声的输入;
堆叠自编码器 (Stacked Autoencoder): 即深层的自编码器。
稀疏自编码器 (Sparse Autoencoder)
稀疏编码 (Sparse Coding) 即编码维度高于输入, 且编码尽量稀疏。 稀疏自编码器的目标函数如下。 > 其中: 为稀疏性衡量函数; 控制稀疏性的强度。
向量的稀疏性定义为非零元素的比例, 如果一个向量只有很少的几个非零元素, 就说这个向量是稀疏的。 最直接的稀疏性衡量函数是 范数, 但 范数不满足连续可导, 难以进行优化。 因此, 实际操作中稀疏性衡量函数通常使用 范数等。
变分自编码器 (VAE; Variational Autoencoder)
变分自编码器 [6] 的编码向量 如下式。
其中: 原始编码向量 和方差向量 由变分自编码器的编码器输出, 是与编码维度相同的两个向量; 噪声向量 由标准正态分布产生, 也与编码维度相同; 保证结果为正。
同时, 变分自编码器在学习时需要最小化下式的值。
变分自编码器的数学理解
考虑一维数据的情况, 编码 由其所服从的概率密度函数 生成, 根据 从条件概率分布 生成, 即原始数据集的概率分布可由下式得到。 假定 为标准正态分布, 视 为译码器且是 的正态分布, 和 待估计, 根据最大似然估计并使用对数似然, 可得似然函数如下。 引入另一分布 并视之为编码器, 可得下式。 一般情况而言 可以是任意分布, 此处假定是 的正态分布。 记上述结果的第一项为, 即。 由于, 有, 又称 为 的变分下界。 又因为 是固定的, 若要最小化 与 间的散度, 则要最大化。 可进一步改写为下式。 由 即 可得形似 式的损失。
相较传统自编码器, 变分自编码器加入噪声且学习编码的概率分布, 能使两输入中间的插值得以出现于输出, 且编码的维度对应潜在的特征, 因此可以用于完成生成任务。
生成对抗网络 (GAN; Generative Adversarial Network)
生成对抗网络是无监督学习的一种, 包括生成器和判别器两个部分。 生成器 (Generator) 用于生成样本数据, 而判别器 (Discriminator) 用于判断样本是真实的还是生成的。
生成对抗网络通过让生成器和判别器以相互博弈的方式进行学习, 生成器和判别器置身于对抗环境中, 生成器尽可能造出样本迷惑判别器, 而判别器则尽可能识别出来自生成器的样本。
训练生成对抗网络的伪代码
训练生成对抗网络的伪代码如下。
一开始, 随机初始化参数 和 ; 每一次训练迭代 从数据集中选择 个样本 ; 从一个分布 (如高斯分布) 中采样 个噪声向量 ; 获得生成的数据, 其中 ; 更新参数 以最大化式 ; ; 再从一个分布 (如高斯分布) 中采样 个噪声向量 ; 更新参数 以最大化式 ; ;
图神经网络 (GNN; Graph Neural Network)
图神经网络是以图为输入的新兴神经网络, 通过学习图结点的关系来提取图中的特征。 类似卷积神经网络, 图神经网络包含如下两种主要操作。
聚合 (Aggregation): 根据结点及其近邻结点更新下一隐藏层;
读出 (Readout): 将隐藏层的信息转换为最终输出。
计算学习理论 (Computational Learning Theory)
计算学习理论即关于机器学习的理论基础, 其目的是分析学习任务的困难本质, 为学习算法提供理论保证, 并根据分析结果指导算法设计。
对于二分类问题, 令 为 到 的映射, 在数据集 上的经验误差的定义如下。
若 在数据集 上的经验误差为零, 则称 与 一致 (Consistent), 或 对 可分 (Separable); 否则, 称 与 不一致 (Non-Consistent), 或 对 不可分 (Non-Separable)。
假设 中所有的样本服从隐含未知的分布, 而 是 的独立同分布采样, 的泛化误差定义如下。
定义「 误差参数」 为泛化误差 的上限, 即, 表示预先设定的学得模型所应满足的误差要求。 对任意两个映射, 其间的差异即不合 (Disagreement) 定义如下。
概念 (Concept) 决定样本的真实标记, 对任何样本都有 的称为目标概念 (Target Concept), 期望学得的目标概念的集合记为概念类 (Concept Class)。
假设空间 (Hypothesis Space) 是对于给定学习算法 所考虑的所有可能概念的集合。 对于, 由于不能确定其是否为目标概念, 因此称为假设 (Hypothesis)。 若目标概念, 则称问题对 可分, 亦称一致; 若, 则称问题对 不可分, 亦称不一致。 学习过程可视为 在 中进行搜索的过程, 期望学得的模型所对应的假设 尽可能接近目标概念。
概率近似正确 (PAC; Probably Approximately Correct) 即以较大的概率学得误差满足预设上限的模型。
令失败概率, 学习算法 能从假设空间 中 PAC 辨识 (PAC Identify) 概念类 的定义如下, 即学习算法 能以较大的概率 学得目标概念 的最大误差为 的近似。
若存在学习算法 和多项式函数, 使得下式满足, 则称概念类 对假设空间 而言 PAC 可学习 (PAC Learnable)。
PAC 可学习给出了抽象地刻画机器学习模型能力的框架。 考虑学习算法的时间复杂度, 若学习算法的运行时间也满足形如上式的多项式函数, 则称概念类 高效 PAC 可学习 (Efficiently PAC Learnable), 称学习算法 为概念类 的 PAC 学习算法 (PAC Learning Algorithm)。
满足 PAC 学习算法所需的最小的 称为样本复杂度 (Sample Complexity), PAC 学习可将对算法时间复杂度的分析可转换为对样本复杂度的分析。
时, 称为恰 PAC 可学习 (Properly PAC Learnable), 但通常。 越大, 其包含任意目标概念的可能性越大, 但从中找到具体目标概念的难度也越大。
当 有限, 且目标概念 时, 需要如下规模的训练数据使得学习算法 以概率 学得目标概念 的 近似。 可见, 有限, 且目标概念 时的 都是 PAC 可学习的。
目标概念 往往不存在于假设空间 中。 当 有限, 任何 都有 时, 即任何 都会在训练集上出现或多或少的错误时, 有下式成立。 显然, 有限, 但目标概念 时, 学习算法 无法学得目标概念 的 近似。 样本数 增大时, 泛化误差和经验误差的差距的上界减小。 样本数 足够大时的假设 的 近似是 中较好的目标, 即经验风险最小化原则。
目标概念 时的 PAC 可学习称为不可知 PAC 可学习 (Agnostic PAC Learnable), 对于任何满足 式的, 假设空间 不可知 PAC 可学习的定义如下。
瓦普尼克-契尔沃年基斯维 (Vapnik-Chervonenkis Dimension)
又称 VC 维, 用于衡量假设空间 无限时的复杂度。 为每个样本点分配随机的二分类类别, 则 VC 维可简单定义为使得模型正确分类的模型对应空间中存在的样本点的最大值。
增长函数 (Growth Function) 表示 对 个示例所能赋予标记的最大可能结果数, 定义如下。 增长函数描述了 的表示能力。
对任意 有下式成立, 以估计经验误差和泛化误差的关系。
中的假设对样本集 中样本赋予标记的每种可能结果称为对 的一种对分 (Dichotomy)。 若 能实现样本集 上的所有对分, 即对二分类问题而言有, 则称 能被 打散 (Shattering)。
的 VC 维即能被 打散的最大样本集的大小, 定义如下。
若 的 VC 维为, 则有下式成立。
拉德马赫复杂度 (Rademacher Complexity)
拉德马赫复杂度在考虑数据分布的情况下刻画 的复杂度。 考虑函数空间, 其中 为任意空间, 函数空间 关于 的经验拉德马赫复杂度的定义如下。
其中: ; , 服从取值为-1 或 1 的均匀分布, 称为拉德马赫变量 (Rademacher Variables)。
函数空间 关于 的拉德马赫复杂度的定义如下。
对任意 都有 的概率使下式成立。
集成学习 (Ensemble Learning)
集成学习的基本思想是将多个模型组合, 从而实现一个预测效果更好的集成模型, 可理解为通过多个高方差模型以降低平均方差。 对于分类问题, 以各个子模型投票的方式确定最终结果; 对于回归问题, 以计算各个子模型均值的方式确定最终结果。
Bagging(Bootstrap Aggregating)
Bagging 的基本思想如下: 每次使用有放回采样 (即自助法) 取出 个样本组成的训练集; 利用新的数据集, 训练得到 个子模型。 这种策略又称模型平均 (Model Averaging), 模型平均策略奏效的原因是不同模型通常不会在测试集上产生完全相同的误差。
随机森林 (Random Forest) 即利用多棵决策树对样本进行训练并预测, 是基于 Bagging 的一种集成学习算法, 可解决决策树容易过拟合的现象, 但可解释性弱于决策树。
随机森林使用自助法进行采样, 即有放回地抽样选取样本, 意味着样本在不同树中可能有重复, 且随机在属性中挑选不大于属性总数的属性, 因此随机森林中不同的树所含样本和属性大多不一样。
利用 scikit-learn 构建随机森林模型, 需要确定 RandomForestClassifier
的 n_estimators
参数, 即树的棵数, 以及 max_features
参数, 即每棵决策树需要考虑的特征个数。
Stacking
Stacking 额外训练一个元模型 (Meta Model), 以子模型在原始训练集上的预测作为训练集, 可以视作表示学习。 为避免过拟合, 训练过程中伴随交叉验证操作。
Boosting
Boosting 的目标是学习一个加性模型 (Additive Model), 可以将弱学习器提升为强学习器, 如下式。
假设模型面向分类任务, 其中: 称为强分类器 (Strong Classifier); 称为弱分类器 (Week Classifier) 或基分类器 (Base Classifier); 是弱分类器的权重。
Boosting 的基本思想如下: 首先利用训练集得到一个基模型; 基于准确率给予样本不同的权重, 使得误差大的样本在下一轮训练中可以得到更大的关注; 重复训练直到获得 个子模型。
AdaBoost(Adaptive Boosting) 是 Boosting 的代表, 其基本思想如下: 为每个样本分配一个初始权重, 并首先训练一个基模型; 对于每个样本, 若预测错误则增加, 若预测正确则降低; 令权重 较大的样本分配较高的优先权, 以训练新的模型; 重复上述步骤, 直至满足条件, 如一定的迭代次数。
AdaBoost 需要计算弱分类器 在数据集上的加权错误, 以计算分类器的集成权重。 集成权重 的更新式如下。
样本权重 的更新式如下。
弱监督学习 (Weakly Supervised Learning)
弱监督学习面向有缺陷的数据集, 额外地使用一些技术进行改善。 弱监督可以分为如下三类。
不完全监督 (Incomplete Supervision): 训练集只有一个很小的子集有标记, 主动学习和半监督学习是解决不完全监督的手段;
不确切监督 (Inexact Supervision): 训练集只有粗粒度的标记;
不准确监督 (Inaccurate Supervision): 训练集的标记不总是真实的。
主动学习 (Active Learning)
主动学习中, 未标记数据通过人工专家等方法来进行标注, 得到了新的标记信息后继续迭代模型。 主动学习的关键在于选择出合适的标注候选集给人工进行标注, 其中选择的方法称为查询策略 (Query Strategy)。
半监督学习 (SSL; Semi-Supervised Learning)
半监督学习的训练集同时包含标记样本和未作标记的样本, 学习器不需要人工干预和外界交互, 自动利用未作标记的样本来提升学习性能。 常见的半监督学习算法如下。
自训练 (Self-Training): 自训练又称自举法 (Bootstrapping), 是半监督分类的一种简单策略, 首先使用含标记样本训练出分类器, 再对未作标记的样本训练, 所产生的标记称为软标记 (Soft Label) 或伪标记 (Pseudo Label), 从得到标记的样本中, 以置信度等标准挑选认为分类正确的样本来训练分类器;
协同训练 (Co-Training): 协同训练中, 条件独立的不同特征称为视图 (View)。 协同训练首先为每个视图学习一个分类器, 然后使用每个分类器对未标记数据以置信度等标准来迭代地构建附加训练数据, 若考虑「 视图间是全相关的」 这种极端情况, 则协同训练算法将退化为自训练算法;
三体训练 (Tri-Training): 三体训练不需要考虑视图, 将集成学习机制与半监督学习相结合, 利用三个分类器以投票的方式产生伪标记;
协同森林 (Co-Forest): 协同森林是三体训练的推广, 使用更多的分类器。
无监督学习 (Unsupervised Learning)
又称无导师学习, 训练集中所有样本的标记未知。
聚类 (Clustering)
聚类指将数据按相似度划分为不同的分组, 聚类的分组称为簇 (Cluster)。
聚类任务评估指标
若聚类结果能够与某个外部评价标准进行比较, 则该类指标称为外部指标 (External Index); 不使用任何外部评价标准的则称为内部指标 (Internal Index)。
记 为外部评价标准即真实结果, 而 是聚类结果, 并将样本两两配对考虑, 假设如下统计量: 为在 中为同一类且在 中也为同一类的数据点对数; 为在 中为不同类且在 中为同一类的数据点对数; 为在 中为同一类且在 中为不同类的数据点对数; 为在 中为不同类且在 中也为不同类的数据点对数。 显然有下式成立。
杰卡德系数 (JC; Jaccard Coefficient) 的定义如下。
福尔克斯-马洛斯系数 (FMI; Fowlkes-Mallows Index)
兰德系数 (RI; Rand Index) 的定义如下。 调整兰德系数 (ARI; Adjusted Rand Index) 假设聚类模型为广义超几何分布, 即随机选择 的划分, 簇的数量是稳定的。 调整兰德系数的定义如下。
上述指标均位于 区间, 值越大聚类的效果越佳。
记 为聚类结果, 计算两个样本之间的距离, 平均样本间距离定义如下。
簇内样本间最远距离定义如下。
两簇最近样本之间的距离定义如下。
记 为簇 的中心点, 两簇间中心点距离定义如下。
戴维斯-堡丁系数 (DBI; Davies-Bouldin Index) 定义如下。
杜恩系数 (DI; Dunn Index) 定义如下。
戴维斯-堡丁系数的值越小聚类的效果越佳, 而杜恩系数的值越大聚类效果越佳。
k 均值 (k -Means)
簇中心 (Cluster Center) 即聚类所得的簇中所有数据点的平均值, 又称形心 (Centroid)。 一般情况下, 以欧氏距离作为距离度量, 而以曼哈顿距离作为距离度量的算法称为 中位数 ( -Median)。
均值算法首先随机选取 个数据点作为簇中心, 然后交替执行如下两个步骤, 直到收敛即簇的分配不再变化: 将每个数据点分配给最近的簇中心; 将每个簇中心设置为所分配的所有数据点的平均值。
均值算法的目标函数如下, 该值刻画了簇内样本围绕簇内均值向量的紧密程度。
其中, 是第 个簇 的均值向量。
在 scikit-learn 中, 调用 均值聚类的代码如下。
1 2 3 from sklearn.cluster import KMeansmodel = KMeans(n_clusters=k) model.fit(X)
簇中心被保存于模型的 cluster_centers_
属性中。
均值算法简单, 但距离的计算开销大, 且难以识别具有复杂形状的簇。 此外, 均值算法受初始值影响较大, 优化容易陷入局部最小值, 因此可以随机多次执行 均值算法。 在 scikit-learn 中, 可以设置 n_init
参数以指明 均值算法执行的次数。
层次聚类 (Hierarchical Clustering)
层次聚类基于贪婪算法, 通过计算不同类别数据点的距离来创建有层次的嵌套聚类树, 分为自底向上的凝聚聚类 (Agglomerative Clustering) 和自顶向下的分裂聚类 (Divisive Clustering)。
凝聚聚类首先声明每个数据点是自己的簇, 然后寻找两个最近的簇进行合并, 不断重复直到满足需要的簇的数量或其他中止条件为止。
分裂聚类首先声明所有数据点都是同一个簇, 然后寻找两个最远的数据点并归为两个不同簇, 将其余数据点分配给最相似的簇中心, 对得到的两个簇递归地执行分裂聚类, 直到满足需要的簇的数量或其他中止条件为止。
scikit-learn 中内置凝聚聚类的实现 sklearn.cluster.AgglomerativeClustering
, 没有 predict
方法, 因此需要调用 fit_predict
方法代替。 可使用参数 n_clusters
指定簇的数量, 不使用簇的数量的场合则可以使用 distance_threshold
指定距离阈值。 距离阈值越大, 则簇的数量越少, 每簇的样本数量就越多, 反之亦然。
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
DBSCAN 不需要先验地指出簇的数量, 可以划分具有复杂形状的簇, 还能够找出不属于任何簇的数据点, 但相较于 均值和凝聚聚类而言稍慢。
scikit-learn 中内置 DBSCAN 的实现 sklearn.cluster.DBSCAN
, 没有 predict
方法, 因此需要调用 fit_predict
方法代替。
聚类集成 (Clustering Ensemble)
聚类集成指集成多个聚类结果。
共协矩阵 (CA Matrix; Co-Association Matrix) 是聚类集成中最常见的信息矩阵。 共协矩阵是 的矩阵, 假设有 个聚类结果的集合, 其计算方式如下。
其中: 是 的二元矩阵; 是所有聚类结果的总簇数; 有 个簇的聚类结果 中, 表示第 个样本属于第 个簇, 表示第 个样本不属于第 个簇。
上式中, 是规范化函数, 定义如下。 共协矩阵反映了 个聚类结果中相应样本出现在相同簇的频率, 因此共协矩阵可被视为相似性矩阵。
降维 (Dimensionality Reduction)
降维指找到表示高维数据的一种新方法, 使得用更少的特征就能概括其重要特性。 降维的一个重要应用是将数据降为二维以便于数据可视化。
主成分分析 (PCA; Principal Components Analysis)
主成分分析是正交化线性变换, 将数据变换到新的坐标系统, 以对数据集进行降维。 对于数据集的每个数据点, 使用对应的点 进行表示, 使损失的信息尽可能少。 主成分 (Principal Component) 即主成分分析得到的新的特征, 通常主成分分析的缺点在于不易对各主成分做出解释。
视之为编码和解码的过程, 假设编码和解码函数分别为 和, 则有 且。 考虑线性解码函数, 且列向量相互正交。
对于给定的, 计算信息损失最小的 即求解下式。 可得编码函数 如下式。
编码函数式的证明
将 式右端的平方 范数展开, 得到下式。 将上式与式 代入 式, 忽略不依赖 的 项, 利用 的正交性质, 得到下式。 对 求梯度, 并令其为零, 由标量对向量的求导法则 (见矩阵微积分的向量求导 ), 可得下式。
通过编码解码得到的重构如下式。 求解最优变换 需要最小化所有维数和所有点上的误差矩阵的弗罗贝尼乌斯范数, 即求解下式。
其中, 由 排列而成, 且对 进行了中心化, 即。
式的证明
由弗罗贝尼乌斯范数的迹运算表示, 可得下式。 删去无关 的项, 由迹运算的性质可合并循环置换后相同的项, 可得下式。 由于, 可得下式。
取 最大的前 个特征值 所对应的特征向量, 构成的投影矩阵 就是主成分分析的解。 通常 可由用户预先设置, 或从重构的角度设置一个重构阈值, 使下式成立。
scikit-learn 中内置主成分分析的实现 sklearn.decomposition.PCA
, 其中: 参数 n_components
指定主成分的数量; 可选参数 whiten
控制是否启用白化 (Whitening), 即缩放主成分至相同的尺寸, 变换后的结果与使用 StandardScaler
相同。
非负矩阵分解 (NMF; Non-Negative Matrix Factorization)
相较主成分分析, 非负矩阵分解的分量和系数均为非负的。
scikit-learn 中内置非负矩阵分解的实现 sklearn.decomposition.NMF
, 其中参数 n_components
指定分量的数量。
t 分布随机近邻嵌入 (t -SNE; t -Distribution Stochastic Neighbour Embedding)
t -SNE[12] 是最常用的流形学习降维算法。 流形 (Manifold) 指一组点, 且每个点都有其领域。 流形学习 (Manifold Learning) 是一类用于可视化的算法, 允许进行更复杂的映射, 通常也给出更好的可视化。
scikit-learn 中内置 t -SNE 的实现 sklearn.manifold.TSNE
, 没有 transform
方法, 因此需要调用 fit_transform
方法代替。
迁移学习 (TL; Transfer Learning)
迁移学习指将源领域 (Source Domain) 的知识, 迁移到目标领域 (Target Domain), 使得目标领域能够取得更好的学习效果, 其中, 领域 (Domain) 指样本空间及其分布。 通常当源领域数据量充足而目标领域数据量较少, 或从头建立模型复杂且耗时的情境下, 适合应用迁移学习。
迁移学习可分为如下两类。
归纳迁移学习 (Inductive Transfer Learning): 在源领域和任务上学习出一般的规律, 再将规律迁移至目标领域和任务上;
转导迁移学习 (Transductive Transfer Learning): 迁移样本使得可以直接利用源领域和目标领域的样本进行学习, 通常源领域有大量标注数据, 而目标领域没有或只有少量标注数据, 但有大量无标注数据。
领域适应 (DA; Domain Adaptation)
领域适应 (DA; Domain Adaptation) 是转导迁移学习的一种情景, 思路是将不同领域的数据特征映射到同一特征空间。
按目标领域样本的标记情况, 领域适应可分为有监督领域适应 (SDA; Supervised DA)、 半监督领域适应 (SSDA; Semi-Supervised DA) 和无监督领域适应 (UDA; Unsupervised DA)。 无监督领域适应通常更具吸引力, 因为它完全不需要标记的目标领域样本。 但当目标领域样本稀缺时, 有监督领域适应和半监督领域适应则更有优势。
三种领域适应的分布偏移假设
The three types of distribution shift are as follows.
先验偏移 (Prior Shift)
协方差偏移 (Covariate Shift)
概念漂移 (Concept Drift)
令源领域特征空间为, 目标领域特征空间为, 若, 则称为同构领域适应 (Homogeneous DA), 若, 则称为异构领域适应 (Heterogeneous DA)。
领域适应可按实现手段分为如下类别。
基于差异 (Discrepancy-Based): 以某统计学分布偏移度量来对齐源领域和目标领域, 其中最大均值差异 (MMD; Maximum Mean Discrepancy) 是领域适应中应用最广泛的损失函数, 用于衡量源领域和目标领域的差异;
基于对抗 (Adversarial-Based): 混淆领域分类器以完成源领域和目标领域的对齐, 如域对抗神经网络 ;
基于重构 (Reconstruction-Based): 以重构作为领域适应的辅助任务, 如深度重构分类网络 。
域对抗神经网络 (DANN; Domain-Adversarial Neural Networks)
域对抗神经网络 [1] 是无监督领域适应的代表模型, 其结构包括如下三个部分。
特征提取器 (Feature Extractor): 将数据映射到特定的特征空间, 使标记预测器精度最大化的同时, 最小化域分类器的精度;
标记预测器 (Label Predictor): 对特征空间的源领域数据分类, 尽可能得到正确的标记;
域分类器 (Domain Classifier): 对特征空间的数据进行领域分类, 尽可能分辨出数据的领域。
特征提取器和标记预测器构成了一个前馈神经网络。 域分类器连接至特征提取器之后, 中间通过一个梯度反转层 (GRL; Gradient Reversal Layer) 连结, 梯度反转层将所求得的梯度乘以一个负值。
对源领域的数据, 网络不断最小化标记预测器的损失, 即下式。 对全部数据, 网络不断最小化域分类器的损失, 即下式。 以 表示某领域第 个样本的损失, 改写损失函数得到下式。 最终代价函数如下式。
其中: 为源领域样本数; 为目标领域样本数。
深度重构分类网络 (DRCN; Deep Reconstruction-Classification Networks)
深度重构分类网络 [3] 利用自编码器结构, 将重构输入视为领域适应的辅助任务。 结构除包含特征提取器 和标记预测器 外, 还包含进行重构任务的解码器。 损失除源领域数据的预测损失 外, 对目标领域的数据进行重构, 即下式。 最终代价函数如下式。
分类对比语义对齐 (CCSA; Classification and Contrastive Semantic Alignment)
分类对比语义对齐 [8] 面向有监督领域适应。 结构包含特征提取器 和标记预测器。 为确保源领域和目标领域数据中类别相同的样本在子空间中的表征有相近的距离, 损失除源领域数据的预测损失 外, 对类别相同但领域不同的样本进行表征的距离最小化, 即下式。
其中: 为任意的距离度量函数; 和 应属同一类别。
此外, 还需要对类别不同且领域不同的样本进行表征的距离最大化, 即相似度最小化, 即下式。
其中: 为任意的相似度度量函数; 和 应属不同类别。
最终代价函数如下式。 原始实现中, 有标记的目标领域数据不在主要训练中计算预测损失, 而是建议作为对标记预测器进行微调时的训练数据, 即下式。
多任务学习 (Multi-Task Learning)
多任务学习即同时学习多个相关任务, 利用多个任务之间的相关性来改进模型在每个任务上的性能和泛化能力。 多任务学习可视为归纳迁移学习的一种。
少样本学习 (FSL; Few-Shot Learning)
少样本学习旨在通过少量训练样本学习模型。 其中, 仅通过单个训练样本学习称为单样本学习 (OSL; One-Shot Learning)。
零样本学习 (ZSL; Zero-Shot Learning)
零样本学习指没有带标记样本的迁移学习任务, 是迁移学习的一种极端形式。
元学习即让模型「 学会学习」 , 其核心思想是学习某种先验知识。
强化学习 (RL; Reinforcement Learning)
强化学习又称再励学习、 评价学习或增强学习, 其灵感来源于心理学的行为主义, 即有机体如何在环境给予的奖励或惩罚的刺激下, 逐步形成对刺激的预期, 产生能获得最大利益的习惯性行为。
强化学习的交互对象如下。
行动者 (Actor): 又称智能体 (Agent), 感知外界环境的状态以作出不同的行动, 根据外界环境的奖励 调整策略;
环境 (Environment): 行动者以外的所有事物, 受行动者行动的影响而改变状态, 并反馈给行动者相应的奖励。
策略 (Policy) 指有参数 的网络, 将行动者的观察即环境状态 作为输入, 输出行动者相应的行动。
行动者与环境的交互过程可视作马尔可夫决策过程 (MDP; Markov Decision Process), 即在状态序列中引入行动作为额外的变量。 下一个时刻的状态 不仅和当前时刻的状态 相关, 还和行动 相关, 即下式。
当抵达环境的终止状态, 行动者和环境的交互过程结束, 一轮交互的过程称为一个回合 (Episode)。 每一个回合的所有状态 和行动 的序列称作轨迹 (Trajectory), 记为, 定义如下。
可得轨迹 的概率如下。
上式中, 属于环境部分, 无法控制, 因此只能采取不同的策略网络参数 以改变, 进而影响。
一个回合的轨迹 收到的累计奖励称为回报 (Return), 记为, 定义如下。
若环境中没有终止状态, 即, 称为持续式任务 (Continuing Task), 其回报也可能是无穷大。 可以引入折扣率 (Discount Rate) 来降低远期回报的权重。 引入折扣率的回报称为折扣回报 (Discounted Return), 定义如下。
强化学习的目标即调节策略的参数 使得 最大化。
策略通常可以分为确定性策略 (Deterministic Policy) 和随机性策略 (Stochastic Policy), 强化学习一般使用随机性策略。
若采用确定性策略, 每次试验得到的轨迹是一样的, 此时仅仅是对当前策略的利用 (Exploitation), 而缺乏对环境的探索 (Exploration)。 为平衡利用和探索, 可以采用 -贪心法 ( -Greedy Method), 一种随机性策略, 以 的概率随机选择行动, 以 的概率执行。 通常, 随训练过程衰减。
上置信界 (UCB; Upper Confidence Bound) 是 -贪心法的改进, 优先选择从未尝试的行动, 若所有行动都已尝试, 则选择下式最大值的行动。
其中: 是行动 的平均奖励; 是采取行动 的次数; 是行动的总次数。
Q 学习 (Q Laerning)
为评估策略 的期望回报, 需要定义状态值函数 (State Value Function) 和状态-行动值函数 (State-Action Value Function)。 前者描述策略 在给定状态 下累计期望奖励; 后者又称 Q 函数 (Q Function), 描述策略 在给定状态 下采取行动 的累积期望奖励。
蒙特卡罗方法 (Monte Carlo Method) 通过采样来计算 Q 函数, 随机游走地探索环境, 并计算得到的回报。 假设进行 次试验, Q 函数的近似为下式。
蒙特卡罗方法需要完整的轨迹才能得到回报, 也不依赖马尔可夫性质。 时序差分学习 (Temporal Difference Learning) 只需从状态 进行至状态, 将 Q 函数的估计更改为增量计算的方式。
当时序差分学习中每次更新的动作数为最大步数时, 就等价于蒙特卡罗方法。
通过下式寻找策略 即更新策略。
对所有的状态 都有。
评估策略和更新策略使用相同的策略, 称为同策略 (On-Policy) 方法或同轨策略方法; 评估策略和更新策略使用不同的策略, 称为异策略 (Off-Policy) 方法或离轨策略方法。
同策略的时序差分学习称为 SARSA(State Action Reward State Action) 方法; 异策略的时序差分学习即 Q 学习。 Q 学习直接选择 Q 函数取最大值对应的行动作为下次行动, 更新后的 Q 函数并不关于选取动作的策略。
大多数任务中, 状态空间和行动空间是庞大的, 传统的 SARSA 方法和 Q 学习不适合解决问题。 深度 Q 网络 (DQN; Deep Q Network) 视 Q 函数为神经网络, 并采取如下的改进措施。
冻结目标网络 (Freezing Target Network): 在一个时间段内固定目标网络的参数以稳定学习目标;
经验回放 (Experience Replay): 构建回放缓冲区 (Replay Buffer) 以去除数据相关性。
策略梯度 (Policy Gradient)
策略梯度即使用梯度上升的方式更新策略的参数, 将强化学习的问题转化为有监督学习的问题。
总回报 不是常量, 而是随机变量, 因为采取何种行动是有随机性的, 而环境给出何种状态也是有随机性的。 因此, 需要以 的期望 作为代价函数。
策略梯度的计算
假设有复合函数, 则, 可得公式。 与 无关, 因此, 对参数 求偏导, 可得下式。
由期望的定义, 可得下式。
采样 个数据样本, 可得下式。 其中, 与状态转移概率 无关, 只与策略函数 相关。
通过采样来计算策略梯度的方法, 称为 REINFORCE 算法。 可以引入 减少不同轨迹的方差, 这称为带基准线的 REINFORCE 算法, 即下式。
参数的更新公式即下式。
近端策略优化 (PPO; Proximal Policy Optimization)
近端策略优化是策略梯度的变形。
演员-评委算法 (Actor-Critic Algorithm)
演员-评委算法是时序差分学习和策略梯度的结合。 演员 (Actor) 即策略, 评委 (Critic) 即值函数。 演员-评委算法的代价函数形式如下。
演员-评委算法需要估计两个网络, 而优势演员-评委 (A2C; Advantage Actor-Critic) 算法只需一个网络, 代价函数形式如下。
大语言模型 (LLM; Large Language Model)
大语言模型通常指的是参数数量在数十亿或更多数量级的深度学习模型, 体现规模扩展带来的重要性能提升, 是通用的任务求解途径, 但学习的成本高昂。 语言模型的发展历程如下。
统计语言模型 (SLM; Statistical Language Model): 具备一定的生成能力, 如 元语法 ( -Gram) 模型, 即通过 个词语出现的概率来推断语句的结构;
神经语言模型 (NLM; Neural Language Model): 如循环神经网络 ;
预训练语言模型 (PLM; Pre-Trained Language Model): 可有效捕获上下文语义, 提升任务迁移性能;
大语言模型。
扩展法则 (Scaling Law) 可描述模型的最终能力, 并解决模型参数量和数据量的分配问题, 大语言模型的扩展法则以 Chinchilla 扩展法则为代表, 即如下数学形式。
其中: 表示模型参数量; 表示数据量; 为训练成本, 即算力开销; 为测试集的负对数似然损失, 即性能; 其余符号表示常数。
涌现能力 (Emergent Ability) 是「 不存在于小型模型中, 但存在于大型模型中」 的罕见现象, 是简单组件经复杂交互而自发产生的功能, 包括但不限于如下。
上下文学习 (ICL; In-Context Learning);
指令遵循 (Instruction Following);
逐步推理 (Step-by-Step Reasoning)。
基于人类反馈的强化学习 (RLHF; Reinforcement Learning from Human Feedback) 聚合问答数据并训练奖励模型, 并通过强化学习 的方式微调大语言模型。
登普斯特-谢弗证据推理 (Dempster-Shafer Evidential Reasoning)
辨识框架 (Frame of Discernment) 是由一组相互排斥且构成完备集的命题 构成的集合, 定义 为恰好分配给命题 的基本概率质量, 其中 又称为基本概率分配 (BPA; Basic Probability Assignment) 函数, 满足下式。 若, 则称 为 的一个焦元 (Focal Set)。 证据 (Evidence) 指人们分析命题求其基本可信程度所依据的事物的属性与客观环境, 对证据的分析可以得到焦元 的基本概率分配函数。 对于一个具体的问题, 辨识框架依赖于人们的认知水平, 框架中的元素即由人们的知识决定。
定义信任函数 (Belief Function) 如下, 表示对焦元的总的信任程度。 定义似然函数 (Plausibility Function) 如下, 表示不否定焦元的信任程度。 总有, 而 表示 的信任区间。
登普斯特-谢弗证据合成 (Dempster-Shafer Evidence Combination) 将不同的基本概率分配函数合成为新的基本概率分配函数, 公式定义如下。 上式中 是归一化系数, 定义如下。 当证据间高度冲突, 登普斯特-谢弗证据合成将违反直觉。
粒计算 (GrC; Granular Computing)
粒计算将事物或问题分解成若干个相互关联的子部分, 以处理模糊性和不确定性。
粒 (Granule) 可以是一组因相似性或功能性受约束而被聚集的对象, 而粒化 (Granulation) 是产生粒的数学操作。 粒结构 (Granular Structure) 被定义为粒的集合。
参考文献 (References)
[1] Ganin, Y. et al. 2016. Domain-Adversarial Training of Neural Networks. Journal of Machine Learning Research , 17(1): 2096-2030. [2] Geng, X. 2016. Label Distribution Learning. IEEE Transactions on Knowledge and Data Engineering , 28(7): 1734-1748. [3] Ghifary, M.; Kleijn, W. B.; Zhang, M.; Balduzzi, D.; and Li, W. 2016. Deep Reconstruction-Classification Networks for Unsupervised Domain Adaptation. In Proceedings of the European Conference on Computer Vision , 597-613. [4] Glorot, X.; and Bengio, Y. 2010. Understanding the Difficulty of Training Deep Feedforward Neural Networks. In Proceedings of the International Conference on Artificial Intelligence and Statistics , 249-256. [5] He, K.; Zhang, X.; Ren, S.; and Sun, J. 2015. Delving Deep into Rectifiers: Surpassing Human-Level Performance on Imagenet Classification. In Proceedings of the IEEE International Conference on Computer Vision , 1026-1034. [6] Kingma, D. P.; and Welling, M. 2014. Auto-Encoding Variational Bayes. In Proceedings of the International Conference on Learning Representations . [7] Maas, A. L.; Hannun, A. Y.; and Ng, A. Y. 2013. Rectifier Nonlinearities Improve Neural Network Acoustic Models. In Proceedings of the International Conference on Machine Learning , 3. [8] Motiian, S.; Piccirilli, M.; Adjeroh, D. A.; and Doretto, G. 2017. Unified Deep Supervised Domain Adaptation and Generalization. In Proceedings of the IEEE International Conference on Computer Vision , 5715-5725. [9] Nair, V.; and Hinton, G. E. 2010. Rectified Linear Units Improve Restricted Boltzmann Machines. In Proceedings of the International Conference on Machine Learning , 807-814. [10] Srivastava, N.; Hinton, G.; Krizhevsky, A.; Sutskever, I.; and Salakhutdinov, R. 2014. Dropout: A Simple Way to Prevent Neural Networks from Overfitting. Journal of Machine Learning Research , 15(1): 1929-1958. [11] Tsoumakas, G.; Katakis, I.; and Vlahavas, I. 2010. Random -Labelsets for Multilabel Classification. IEEE Transactions on Knowledge and Data Engineering , 23(7), 1079-1089. [12] Van der Maaten, L.; and Hinton, G. 2008. Visualizing Data using t -SNE. Journal of Machine Learning Research , 9(11): 2579-2605. [13] Yang, Y.; Shen, H. T.; Ma, Z.; Huang, Z.; and Zhou, X. 2011. -Norm Regularized Discriminative Feature Selection for Unsupervised Learning. In Proceedings of the International Joint Conference on Artificial Intelligence , 1589-1594. [14] Zhang, M. L.; and Zhou, Z. H. A review on Multi-Label Learning Algorithms. IEEE Transactions on Knowledge and Data Engineering , 26(8), 1819-1837.