理论基础(1)模型定义

机器学习理论

一、 机器学习中参数模型和非参数模型理解

参数模型通常假设总体服从某个分布,这个分布可以由一些参数确定,如正态分布由均值和标准差确定,在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设或者说是数据分布假设自由,只知道其分布是存在的,所以就无法得到其分布的相关参数,只能通过非参数统计的方法进行推断。

参数模型:线性回归、逻辑回归、感知机、基本型的SVM

非参数模型:决策树、对偶型的SVM、朴素贝叶斯、神经网络

二、 判别模型 VS 生成模型

判别模型与生成模型,概率模型与非概率模型、参数模型与非参数模型总结 - Eureka的文章 - 知乎 https://zhuanlan.zhihu.com/p/37821985

机器学习中的判别式模型和生成式模型 - Microstrong的文章 - 知乎 https://zhuanlan.zhihu.com/p/74586507

image-20230417171758407

img

判别模型:感知机、逻辑斯特回归、支持向量机、神经网络、k近邻都属于判别学习模型。

判别模型分为两种:

  • 直接对输入空间到输出空间的映射进行建模, 也就是学习函数 \(h\) :

\[ h: X \rightarrow Y, s . t . y=h(x) \]

  • 对条件概率 \(P(y \mid x)\) 进行建模, 然后根据贝叶斯风险最小化的准则进行分类: 【

\[ y=\arg \max _{y \in\{-1,1\}} P(y \mid x) \]

生成模型:

生成模型是间接地, 先对 \(P(x, y)\) 进行建模, 再根据贝叶斯公式: \[ P(y \mid x)=\frac{P(x \mid y) P(y)}{P(x)} \] 算出 \(P(y \mid x)\), 最后根据 \(\arg \max _{y \in\{-1,1\}} P(y \mid x)\) 来做分类 (由此可知, 判别模型实际上不需要对 \(P(x, y)\) 进行建模)。

三、 非概率模型 VS 概率模型

两者的本质区别在于是否涉及到概率分布。

概率模型

线性回归(高斯分布)、LR(伯努利分布)、高斯判别分析、朴素贝叶斯

概率模型指出了学习的目的是学出 \(P(x, y)\)\(P(y \mid x)\), 但最后都是根据 \(\arg \max _{y \in\{-1,1\}} P(y \mid x)\) 来做判别归类。对于 \(P(x, y)\) 的估计, 一般是根据乘法公式 \(P(x, y)=P(x \mid y) P(y)\) 将其拆解成 \(P(x \mid y), P(y)\) 分别进行估计。无论是对 \(P(x \mid y), P(y)\) 还是 \(P(y \mid x)\) 的估计, 都是会先假设分布的形式, 例如逻辑斯特回归就假设了 \(Y \mid X\) 服从伯努利分 布。分布形式固定以后, 剩下的就是分布参数的估计问题。常用的估计有极大似然估计(MLE)和极大后验概率估计 (MAP) 等。其中, 极大后验概率估计涉及到分布参数的先验概率, 这为我们注入先验知识提供了途径。逻辑斯特回归、高斯判别分析、朴素贝叶斯都属于概率模型。

在一定的条件下,非概率模型与概率模型有以下对应关系:

img

非概率模型

感知机、支持向量机、神经网络、k近邻都属于非概率模型。线性支持向量机可以显式地写出损失函数——hinge损失。神经网络也可以显式地写出损失函数——平方损失。

非概率模型指的是直接学习输入空间到输出空间的映射 \(h\), 学习的过程中基本不涉及概率密度的估计, 概率密度 的积分等操作, 问题的关键在于最优化问题的求解。通常, 为了学习假设 \(h(x)\), 我们会先根据一些先验知识 (prior knowledge) 来选择一个特定的假设空间 \(H(x)\) (函数空间), 例如一个由所有线性函数构成的空间, 然后在 这个空间中找出泛化误差最小的假设出来, \[ h^*=\arg \min _{h \in H} \varepsilon(h)=\arg \min _{h \in H} \sum_{x, y} l(h(x), y) P(x, y) \] 其中 \(l(h(x), y)\) 是我们选取的损失函数, 选择不同的损失函数, 得到假设的泛化误差就会不一样。由于我们并不知 道 \(P(x, y)\), 所以即使我们选好了损失函数, 也无法计算出假设的泛化误差, 更别提找到那个给出最小泛化误差的 假设。于是, 我们转而去找那个使得经验误差最小的假设, \[ g=\arg \min _{h \in H} \hat{\varepsilon}(h)=\arg \min _{h \in H} \frac{1}{m} \sum_{i=1}^{m} l\left(h\left(x^{(i)}\right), y^{(i)}\right) \] 这种学习的策略叫经验误差最小化(ERM),理论依据是大数定律:当训练样例无穷多的时候,假设的经验误差会依概率收敛到假设的泛化误差。要想成功地学习一个问题,必须在学习的过程中注入先验知识。前面,我们根据先验知识来选择假设空间,其实,在选定了假设空间后,先验知识还可以继续发挥作用,这一点体现在为我们的优化问题加上正则化项上,例如常用的\(L1\)正则化, \(L2\)正则化等。 \[ g=\arg \min _{h \in H} \hat{\varepsilon}(h)=\arg \min _{h \in H} \frac{1}{m} \sum_{i=1}^{m} l\left(h\left(x^{(i)}\right), y^{(i)}\right)+\lambda \Omega(h) \]

四、 过拟合和欠拟合

欠拟合、过拟合及如何防止过拟合 - G-kdom的文章 - 知乎 https://zhuanlan.zhihu.com/p/72038532

4.1 欠拟合

欠拟合是指模型不能在训练集上获得足够低的误差。换句换说,就是模型复杂度低,模型在训练集上就表现很差,没法学习到数据背后的规律。

4.2 欠拟合解决方法

欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。但是如果真的还是存在的话,可以通过增加网络复杂度或者在模型中增加特征,这些都是很好解决欠拟合的方法。

4.3 过拟合

过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。模型对训练集"死记硬背"(记住了不适用于测试集的训练集性质或特点),没有理解数据背后的规律,泛化能力差

造成原因主要有以下几种: 1、训练数据集样本单一,样本不足。如果训练样本只有负样本,然后那生成的模型去预测正样本,这肯定预测不准。所以训练样本要尽可能的全面,覆盖所有的数据类型。 2、训练数据中噪声干扰过大。噪声指训练数据中的干扰数据。过多的干扰会导致记录了很多噪声特征,忽略了真实输入和输出之间的关系。 3、模型过于复杂。模型太复杂,已经能够“死记硬背”记下了训练数据的信息,但是遇到没有见过的数据的时候不能够变通,泛化能力太差。我们希望模型对不同的模型都有稳定的输出。模型太复杂是过拟合的重要因素。

4.4 如何防止过拟合

要想解决过拟合问题,就要显著减少测试误差而不过度增加训练误差,从而提高模型的泛化能力。

1、使用正则化(Regularization)方法。

那什么是正则化呢?正则化是指修改学习算法,使其降低泛化误差而非训练误差

常用的正则化方法根据具体的使用策略不同可分为:(1)直接提供正则化约束的参数正则化方法,如L1/L2正则化;(2)通过工程上的技巧来实现更低泛化误差的方法,如提前终止(Early stopping)和Dropout;(3)不直接提供约束的隐式正则化方法,如数据增强等。

L2正则化起到使得权重参数\(w\)变小的效果,为什么能防止过拟合呢?因为更小的权重参数\(w\)意味着模型的复杂度更低,对训练数据的拟合刚刚好,不会过分拟合训练数据,从而提高模型的泛化能力。

2、获取和使用更多的数据(数据集增强)——解决过拟合的根本性方法

让机器学习或深度学习模型泛化能力更好的办法就是使用更多的数据进行训练。但是,在实践中,我们拥有的数据量是有限的。解决这个问题的一种方法就是创建“假数据”并添加到训练集中——数据集增强。通过增加训练集的额外副本来增加训练集的大小,进而改进模型的泛化能力。

我们以图像数据集举例,能够做:旋转图像、缩放图像、随机裁剪、加入随机噪声、平移、镜像等方式来增加数据量。另外补充一句,在物体分类问题里,CNN在图像识别的过程中有强大的“不变性”规则,即待辨识的物体在图像中的形状、姿势、位置、图像整体明暗度都不会影响分类结果。我们就可以通过图像平移、翻转、缩放、切割等手段将数据库成倍扩充。

3. 采用合适的模型(控制模型的复杂度)

过于复杂的模型会带来过拟合问题。对于模型的设计,目前公认的一个深度学习规律"deeper is better"。国内外各种大牛通过实验和竞赛发现,对于CNN来说,层数越多效果越好,但是也更容易产生过拟合,并且计算所耗费的时间也越长。

根据奥卡姆剃刀法则:在同样能够解释已知观测现象的假设中,我们应该挑选“最简单”的那一个。对于模型的设计而言,我们应该选择简单、合适的模型解决复杂的问题

4. 降低特征的数量

对于一些特征工程而言,可以降低特征的数量——删除冗余特征,人工选择保留哪些特征。这种方法也可以解决过拟合问题。

5. Dropout

Dropout是在训练网络时用的一种技巧(trike),相当于在隐藏单元增加了噪声。Dropout 指的是在训练过程中每次按一定的概率(比如50%)随机地“删除”一部分隐藏单元(神经元)。所谓的“删除”不是真正意义上的删除,其实就是将该部分神经元的激活函数设为0(激活函数的输出为0),让这些神经元不计算而已。

Dropout为什么有助于防止过拟合呢?

(a)在训练过程中会产生不同的训练模型,不同的训练模型也会产生不同的的计算结果。随着训练的不断进行,计算结果会在一个范围内波动,但是均值却不会有很大变化,因此可以把最终的训练结果看作是不同模型的平均输出。

(b)它消除或者减弱了神经元节点间的联合,降低了网络对单个神经元的依赖,从而增强了泛化能力。

6. Early stopping(提前终止)

对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)。Early stopping是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合

为了获得性能良好的神经网络,训练过程中可能会经过很多次epoch(遍历整个数据集的次数,一次为一个epoch)。如果epoch数量太少,网络有可能发生欠拟合;如果epoch数量太多,则有可能发生过拟合。Early stopping旨在解决epoch数量需要手动设置的问题。具体做法:每个epoch(或每N个epoch)结束后,在验证集上获取测试结果,随着epoch的增加,如果在验证集上发现测试误差上升,则停止训练,将停止之后的权重作为网络的最终参数。

为什么能防止过拟合?当还未在神经网络运行太多迭代过程的时候,w参数接近于0,因为随机初始化w值的时候,它的值是较小的随机值。当你开始迭代过程,w的值会变得越来越大。到后面时,w的值已经变得十分大了。所以early stopping要做的就是在中间点停止迭代过程。我们将会得到一个中等大小的w参数,会得到与L2正则化相似的结果,选择了w参数较小的神经网络。

Early Stopping缺点:没有采取不同的方式来解决优化损失函数和过拟合这两个问题,而是用一种方法同时解决两个问题 ,结果就是要考虑的东西变得更复杂。之所以不能独立地处理,因为如果你停止了优化损失函数,你可能会发现损失函数的值不够小,同时你又不希望过拟合。

五、损失函数(loss)与评价指标(metric)的区别?

当建立一个学习算法时,我们希望最大化一个给定的评价指标matric(比如说准确度),但算法在学习过程中会尝试优化一个不同的损失函数loss(比如说MSE/Cross-entropy)。

那为什么不把评价指标matric作为学习算法的损失函数loss呢?

  • 一般来说,我认为你应该尝试优化一个与你最关心的评价指标相对应的损失函数。例如,在做分类时,我认为你需要给我一个很好的理由,让我不要优化交叉熵。也就是说,交叉熵并不是一个非常直观的指标,所以一旦你完成了训练,你可能还想知道你的分类准确率有多高,以了解你的模型是否真的能在现实世界中发挥作用,总之,在每个epoch训练完后,你都会有多个评估指标。这样作的主要原因是为了了解你的模型在做什么。这意味着你想要最大化指标A,以便得到一个接近最大化指标B的解决方案。

  • 通常情况下,MSE/交叉熵比精度更容易优化,因为它们对模型参数是可微的,在某些情况下甚至是凸的,这使得它更容易。

六、标准化和归一化

PCA、k-means、SVM、回归模型、神经网络

定义

归一化和标准化都是对数据做变换的方式,将原始的一列数据转换到某个范围,或者某种形态,具体的:

归一化(Normalization):将一列数据变化到某个固定区间(范围)中,通常,这个区间是[0, 1],广义的讲,可以是各种区间,比如映射到[0,1]一样可以继续映射到其他范围,图像中可能会映射到[0,255],其他情况可能映射到[-1,1];

标准化(Standardization):将数据变换为均值为0,标准差为1的分布切记,并非一定是正态的;

中心化:另外,还有一种处理叫做中心化,也叫零均值处理,就是将每个原始数据减去这些数据的均值。

差异

归一化:对处理后的数据范围有严格要求;

标准化: 数据不为稳定,存在极端的最大最小值; 涉及距离度量、协方差计算的时候;

  • 归一化会严格的限定变换后数据的范围,比如按之前最大最小值处理的,它的范围严格在[ 0 , 1 ]之间;而标准化就没有严格的区间,变换后的数据没有范围,只是其均值是0,标准差为1。
  • 归一化的缩放比例仅仅与极值有关,容易受到异常值的影响。

用处

  • 回归模型,自变量X的量纲不一致导致了回归系数无法直接解读或者错误解读;需要将X都处理到统一量纲下,这样才可比;
  • 机器学习任务和统计学任务中有很多地方要用到“距离”的计算,比如PCA,比如KNN,比如kmeans等等,假使算欧式距离,不同维度量纲不同可能会导致距离的计算依赖于量纲较大的那些特征而得到不合理的结果;
  • 参数估计时使用梯度下降,在使用梯度下降的方法求解最优化问题时, 归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度

其他:log、sigmod、softmax 变换

七、回归 vs 分类

回归问题可以理解为是定量输出的问题,是一个连续变量预测;分类问题可以理解为是定性输出的问题,是一个离散变量预测。

如何理解回归与分类?

八、常见损失函数求导

sigmod 交叉熵求导

交叉熵损失函数为:

\[ J(\theta)=-\frac{1}{m} \sum_{i=1}^m y^{(i)} \log \left(h_\theta\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \log \left(1-h_\theta\left(x^{(i)}\right)\right) \] 其中: \[ \begin{gathered} \log h_\theta\left(x^{(i)}\right)=\log \frac{1}{1+e^{-\theta^T x^{(i)}}}=-\log \left(1+e^{-\theta^T x^{(i)}}\right), \\ \log \left(1-h_\theta\left(x^{(i)}\right)\right)=\log \left(1-\frac{1}{1+e^{-\theta^T x^{(i)}}}\right)=\log \left(\frac{e^{-\theta^T x^{(i)}}}{1+e^{-\theta^T x^{(i)}}}\right) \\ =\log \left(e^{-\theta^T x^{(i)}}\right)-\log \left(1+e^{-\theta^T x^{(i)}}\right)=-\theta^T x^{(i)}-\log \left(1+e^{-\theta^T x^{(i)}}\right) \end{gathered} \] 由此, 得到: \[ \begin{gathered} J(\theta)=-\frac{1}{m} \sum_{i=1}^m\left[-y^{(i)}\left(\log \left(1+e^{-\theta^T x^{(i)}}\right)\right)+\left(1-y^{(i)}\right)\left(-\theta^T x^{(i)}-\log \left(1+e^{-\theta^T x^{(i)}}\right)\right)\right] \\ =-\frac{1}{m} \sum_{i=1}^m\left[y^{(i)} \theta^T x^{(i)}-\theta^T x^{(i)}-\log \left(1+e^{-\theta^T x^{(i)}}\right)\right] \\ =-\frac{1}{m} \sum_{i=1}^m\left[y^{(i)} \theta^T x^{(i)}-\log e^{\theta^T x^{(i)}}-\log \left(1+e^{-\theta^T x^{(i)}}\right)\right] \\ =-\frac{1}{m} \sum_{i=1}^m\left[y^{(i)} \theta^T x^{(i)}-\left(\log e^{\theta^T x^{(i)}}+\log \left(1+e^{-\theta^T x^{(i)}}\right)\right)\right]\\ =-\frac{1}{m} \sum_{i=1}^m\left[y^{(i)} \theta^T x^{(i)}-\log \left(1+e^{\theta^T x^{(i)}}\right)\right] \end{gathered} \] 由此, 得到: \[ \begin{aligned} & J(\theta)=-\frac{1}{m} \sum_{i=1}^m {\left[-y^{(i)}\left(\log \left(1+e^{-\theta^T x^{(i)}}\right)\right)+\left(1-y^{(i)}\right)\left(-\theta^T x^{(i)}-\log \left(1+e^{-\theta^T x^{(i)}}\right)\right)\right] } \\ &=-\frac{1}{m} \sum_{i=1}^m\left[y^{(i)} \theta^T x^{(i)}-\theta^T x^{(i)}-\log \left(1+e^{-\theta^T x^{(i)}}\right)\right] \\ &=-\frac{1}{m} \sum_{i=1}^m\left[y^{(i)} \theta^T x^{(i)}-\log e^{\theta^T x^{(i)}}-\log \left(1+e^{-\theta^T x^{(i)}}\right)\right] \\ &=-\frac{1}{m} \sum_{i=1}^m\left[y^{(i)} \theta^T x^{(i)}-\left(\log e^{\theta^T x^{(i)}}+\log \left(1+e^{-\theta^T x^{(i)}}\right)\right)\right] \\ &=-\frac{1}{m} \sum_{i=1}^m\left[y^{(i)} \theta^T x^{(i)}-\log \left(1+e^{\theta^T x^{(i)}}\right)\right] \end{aligned} \] 求导: \[ \begin{aligned} & \frac{\partial}{\partial \theta_j} J(\theta)=\frac{\partial}{\partial \theta_j}\left(\frac{1}{m} \sum_{i=1}^m\left[\log \left(1+e^{\theta^T x^{(i)}}\right)-y^{(i)} \theta^T x^{(i)}\right]\right) \\ & =\frac{1}{m} \sum_{i=1}^m\left[\frac{\partial}{\partial \theta_j} \log \left(1+e^{\theta^T x^{(i)}}\right)-\frac{\partial}{\partial \theta_j}\left(y^{(i)} \theta^T x^{(i)}\right)\right] \\ & =\frac{1}{m} \sum_{i=1}^m\left(\frac{x_j^{(i)} e^{\theta^T x^{(i)}}}{1+e^{\theta^T x^{(i)}}}-y^{(i)} x_j^{(i)}\right) \\ & =\frac{1}{m} \sum_{i=1}^m\left(h_\theta\left(x^{(i)}\right)-y^{(i)}\right) x_j^{(i)} \\ & \end{aligned} \] 这就是交叉熵对参数的导数: \[ \frac{\partial}{\partial \theta_j} J(\theta)=\frac{1}{m} \sum_{i=1}^m\left(h_\theta\left(x^{(i)}\right)-y^{(i)}\right) x_j^{(i)} \]

平方损失函数【绝对值、hubor损失】为例(GBDT 残差):

\[ \begin{aligned} &g_{i}=\frac{\partial\left(\hat{y}^{t-1}-y_{i}\right)^{2}}{\partial \hat{y}^{t-1}}=2\left(\hat{y}^{t-1}-y_{i}\right) \\ &h_{i}=\frac{\partial^{2}\left(\hat{y}^{t-1}-y_{i}\right)^{2}}{\hat{y}^{t-1}}=2 \end{aligned} \]

softmax 函数求导

softmax 回归的参数矩阵 \(\theta\) 可以记为 \[ \theta=\left[\begin{array}{c} \theta_{1}^{T} \\ \theta_{2}^{T} \\ \vdots \\ \theta_{k}^{T} \end{array}\right] \] 定义 softmax 回归的代价函数 \[ L(\theta)=-\frac{1}{m}\left[\sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y_{i}=j\right\} \log \frac{e^{\theta_{j}^{T} x_{i}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x_{i}}}\right] \] 其中, 1{:}是示性函数, 即 \(1\{\) 值为真的表达式 \(\}=1 , 1\{\) 值为假的表达式 \(\}=0\) 。跟 logistic 函数一样, 利用梯度下降法最小化代价函数, 下面 求解 \(\theta\) 的梯度。 \(L(\theta)\) 关于 \(\theta_{j}\) 的梯度求解为 \[ \begin{aligned} \frac{\partial L(\theta)}{\partial \theta_{j}} &=-\frac{1}{m} \frac{\partial}{\partial \theta_{j}}\left[\sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y_{i}=j\right\} \log \frac{e^{\theta_{j}^{T} x_{i}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x_{i}}}\right] \\ &=-\frac{1}{m} \frac{\partial}{\partial \theta_{j}}\left[\sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y_{i}=j\right\}\left(\theta_{j}^{T} x_{i}-\log \sum_{l=1}^{k} e^{\theta_{l}^{T} x_{i}}\right)\right] \\ &=-\frac{1}{m}\left[\sum_{i=1}^{m} 1\left\{y_{i}=j\right\}\left(x_{i}-\sum_{j=1}^{k} \frac{e^{\theta_{j}^{T} x_{i}} \cdot x_{i}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x_{i}}}\right)\right] \\ &=-\frac{1}{m}\left[\sum_{i=1}^{m} x_{i} 1\left\{y_{i}=j\right\}\left(1-\sum_{j=1}^{k} \frac{e^{\theta_{j}^{T} x_{i}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x_{i}}}\right)\right] \\ &=-\frac{1}{m}\left[\sum_{i=1}^{m} x_{i}\left(1\left\{y_{i}=j\right\}-\sum_{j=1}^{k} 1\left\{y_{i}=j\right\} \frac{e^{\theta_{j}^{T} x_{i}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x_{i}}}\right)\right] \\ &=-\frac{1}{m}\left[\sum_{i=1}^{m} x_{i}\left(1\left\{y_{i}=j\right\}-\frac{e^{\theta_{j}^{T} x_{i}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x_{i}}}\right)\right] \\ &=-\frac{1}{m}\left[\sum_{i=1}^{m} x_{i}\left(1\left\{y_{i}=j\right\}-p\left(y_{i}=j \mid x_{i} ; \theta\right)\right)\right] \end{aligned} \]