diff --git a/机器学习.md b/机器学习.md index ca72450..1f9acb9 100644 --- a/机器学习.md +++ b/机器学习.md @@ -71,8 +71,10 @@ - 正态随机变量采样: Box-Muller法 - 从 $ U(0,1) $ 中抽取两个独立随机数 $ u_1 $ 和 $ u_2 $ 。 - 使用以下公式生成两个独立的标准正态随机变量 $ Z_1 $ 和 $ Z_2 $ : - $$ Z_1 = \sqrt{-2 \ln(u_1)} \cos(2\pi u_2) \\ - Z_2 = \sqrt{-2 \ln(u_1)} \sin(2\pi u_2) $$ + $$ + Z_1 = \sqrt{-2 \ln(u_1)} \cos(2\pi u_2) \\ + Z_2 = \sqrt{-2 \ln(u_1)} \sin(2\pi u_2) + $$ - 重要性抽样:思想是从一个容易采样的提案分布中抽取样本,然后通过权重调整来估计目标分布下函数f的期望值。q 的选取要接近 p,否则就需要大量的采样才能收敛 - 舍选法或接受-拒绝抽样法 (accept-reject sampling method) :通过均匀分布采样大于某阈值选择或舍弃某次采样。建议分布一定比目标分布有更粗的尾。接受一个建议样本的次数 $ N ∼ G(\frac{1}{M}) $ - π 称为平稳分布 (Stationary distribution)如果 $ π^T = π^T Q $ 。 @@ -143,3 +145,573 @@ - 递归特征消除(Recursive Feature Elimination, RFE):1从全部特征开始,训练一个基线模型;2使用模型(如决策树、随机森林等)评估每个特征重要性;3. 根据特征重要性,选择一定数量特征进行消除;4递归,在消除了部分特征的数据集上重新训练模型,并重复2和3;5最终选择在多次迭代后保留下来的特征。优势在于可使RFE能够识别出那些在组合中对模型性能有显著影响的特征。 - 随机稀疏模型 (Randomized sparse models): 多次随机选取特征训练如L1稀疏模型,以被稀疏模型选中为非零特征的次数来排序。 - 要同时选中高相关特征的重要性除了过滤法外,也有改进RF的Boruta:通过随机打乱原始特征的值为数据集中的每个特征创建影子特征;将影子特征添加到原始数据集中,形成扩展数据集,并用其训练随机森林模型;在每次迭代中,比较每个原始特征的重要性与影子特征的最高重要性,若原始特征的重要性高于影子特征的最高值,则认为该特征是重要的(Hit),否则是不重要的(Miss);重复上述过程多次(通常100次),统计每个特征的“命中”次数和“未命中”次数;根据统计结果,将特征分为“重要”、“不重要”和“不确定”三类,重要特征被保留,不重要特征被剔除,而不确定特征则根据设定的迭代次数或阈值进一步判断 + + +### 回归 + +- 最小二乘解: $ min_\theta \| y_{N \times 1}-X_{N\times d} \theta_{d\times 1} \| $ + + $$ + \hat \theta=(X^T X)^{-1} X^T y \\ + Cov(\hat\theta)= \frac{\sigma^2}{X^TX}= \sigma^2 \sum \frac{\alpha_i\alpha_i^T}{ \lambda_i} \\ +Var(\hat\theta_i)=\frac{\sigma^2}{RSS_i} = \frac{\sigma^2}{TSS_i} /(1-R_i^2) +$$ +这里RSS和R2为剩余特征对第i个特征回归 +- 最小二乘同时也是 CCA dim y = 1 时的特殊情形 +- R-sqaured:TSS=ESS+RSS, $ R^2=1-\frac{RSS}{TSS}=\frac{ESS}{TSS} $ ,增加额外的特征R-Squared一定不减 +- 对于高维 regression 我们定义Adjusted R-Squared: $$ 1-\frac{RSS/(N-d)}{TSS/(N-1)} $$ 有可能会负,且一定小于 R-squared。如果增加更多无意义的变量,Adjusted R-squared 会下降,R-squared和Adjusted R-squared 之间的差距会越来越大。 +- 对无截距项的R-squared, 如果依然按照有截距项的定义,不再保证[0,1] +- 不再保证[0,1]的问题也会出现在 out of sample 上 +- 注意当特征个数大于样本个数的时候 $ X^T X $ 就会退化,MLR能够完美拟合即残差为 0, 最优解不唯一 +- 当 X 本身不满秩即特征之间存在相关性时,也会退化。但最优预测依然唯一存在,只是最优解不再唯一。 +- 重复数据 (XT , XT )T 和数乘 λX 对系数估计和 y 预测没有影响。估计的方差会变小,所以T检验会变大;R-Squared没有影响;F 检验会被影响,主要是由于样本个数变化引起的 degree 变化。 +- 增加线性相关的特征,不会影响系数估计和 y 的预测,因此也不会影响 R-Squared。会改变F检验的值,主要也是因为特征数目的改变引起 degree变化。 +- 增加线性相关的特征,变量估计方差增加,而减小T检验的值,这个可以从 VIF中可以看出。整体的MSE也会因此变大。这也可以用来解释多重共线性时,单个系数会不显著。 +- 较大的系数估计方差往往对应较大的系数即特征对输入变化非常敏感,使得估计不稳定,也就会带来过拟合的风险。 +- 增加额外的特征R-Squared一定不减。特征 v2 与 y 无关但与 v1 相关,增加 v2 可以使拟合变得更好(增大 R-squared),也被解释成 v2 抑制了 v1 与 y 无关的部分,使得整体的拟合更加好。 +- 局部的比例A比B高,但是整体比例B却比A高。隐藏变量的存在使得局部相关性和整体的相关性相反。 +- 增加新的变量后,原来变量与新增变量越相关方差就会变得越大。因此整体的MSE也会因此变大。这也可以用来解释多重共线性时,单个系数会不显著(相关性增大了方差减小了 t 检验值)。 +- 我们有如下公式: +$$ +\hat y=X(X^TX)^{-1}X^Ty=:Hy \\ +\hat y - y=:e=(I-H) \epsilon +$$ + +$$ +\frac{RSS}{\sigma^2} \sim \chi^2_{N-d} \\ +\frac{ESS}{\sigma^2} \sim \chi^2_{d-1}((Xθ)^T (H − \frac{1}{N} J)(Xθ)) +$$ + +$$ +J := ones(N,N)\\ +\frac{TSS}{\sigma^2} \sim \chi^2_{N-1}((Xθ)^T (I − \frac{1}{N} J)(Xθ)) + $$ +- F检验 $ F= \frac{ESS/d-1}{RSS/N-d} = \sim F_{d-1,N-d} $ +- T检验 $ T_i = \frac{\hat\theta_i}{\sqrt{\hat\sigma^2 c_{ii}}} \sim t_{N-d} $ ,这里 $ c_{ii}= (X^T X)^{−1} $ 的对角线上第 i 个元素, $ \hat\sigma^2=RSS/(N-d) $ 。 p-value 越小或者 Ti 越大说明特征 xi 可以有效预测 y。 T 检验不显著的原因可能是特征本身与 y 无关或者特征过多把单个特征的解释性稀释了。 +- 增加线性相关的特征,不会影响系数估计和 y 的预测,因此也不会影响 R-Squared +- 加入线性相关的特征会改变 F 检验的值,主要因为特征数目的改变引起 degree 变化 +- 多重共线性主要会影响: + - 参数估计的方差增大,方差增大会导致:两个特征相关性高夹角很小,所以任一特征向量的微小变动都会引起它们张成的线性子空间大幅变动,而使得 y 的投影变化很大 + - 难以区分每个特征的重要性:比如原本相似重要性的三个特征,对某特征x3加入多重共线性使其变成会给你错误判断x1, x2不重要,这与PCA类似 + - 变量的显著性 T 检验失去意义 +- 多重共线性的检测方法: + - F 检验很显著(或者 R-Squared很大)但是每个特征的T检验不显著; + - 定义容忍度 (Tolerance) 和方差扩大因子 (Variance Inflation Factor, VIF): + $$ T_i:= 1-R_i^2 , V_i=1/T_i $$ 容忍度越小或者 VIF 越大,说明该特征的多重共线性就越严重。一般 10 以上的 VIF 被认为严重多重共线性;5 以下则不需要处理;中间视情况而定。 + - 回归系数的正负号与预期的相反; +- 解决多重共线性问题的方法包括: + - 手动删除高相关的特征; + - 增加样本容量; + - Ridge, LASSO + - PCR + - 逐步回归 (Stepwise Regression): 利用加进线性相关的特征对拟合并没有太多改善。选择每个特征1维回归F检验最大作为第一变量,然后选择第2,3...变量 +- LASSO和RIDGE中较大的正则系数给出较小的参数的先验方差, 以防止过拟合 +- LASSO求解: + - 次梯度法。但并不能得到真正的稀疏解,只会使解的部分数值尽可能小;而近端梯度和坐标下降能得到。 + - 坐标梯度下降 + - 近端梯度下降 + - 修正 LARS。 但LARS 是给出不同 λ 的一系列 LASSO 的解,不能给出指定 λ 的解。 +- LASSO 的一些性质: + - 在正交的假设下,LASSO 的解是在 OLS 解的基础上套上了 soft thresholding function。可解释 LASSO 的稀疏性 + - LASSO 系数不像 Ridge 按比例缩小而是按绝对数值减少,因此可以达到 0 + - 当 LASSO 面对一组互相关的特征时,它们只会选择其中一项特征。因此除去稀疏性,Ridge往往比LASSO拥有较小的偏差而更好? + - $ \lambda \geq 2 \| X^T y \|_{\infty} $ 时,所有的系数都会等于0 +- Ridge 的一些性质: + - 样本矩阵正交时Ridge 的解与 OLS 的解差因子 $ \lambda+1 $ + - Ridge 是有偏估计 + - Ridge 是对 OLS 解的压缩 $ \hat \| \theta(\lambda)\| \leq \| \theta\| $ 。但单个系数也有可能随着 k 的增加而增加 + - Ridge 能够降低 OLS 的 MSE. 但当 λ 选取不恰当时,MSE 也有可能高于 OLS 即虽然正则项降低了方差,但增加了更多的偏差。 + - 当 Ridge 面对一组互相关的特征时,它会趋于给相关特征分配相似的系数。 + - X 的列向量间相关性不高时,改变 λ 的值并不能显著的改善 MSE + - Ridge 系数只是按比例缩小而不会真的达到 0. 因此 Ridge 没有 LASSO 那样的稀疏性来做特征选择。 +- 内核岭回归 (Kernel Ridge Regression, KRR):预测y可以写成与x相关的只有內积项的公式,可以使用 SVM 中的核技巧代替内积 +- Reduce Multicollinearity: 通过拓展矩阵ridge等价于OLS +- 通过X 的紧奇异值分解 +$$ +\hat y_{ridge}=U diag(\frac{\lambda_i}{\lambda_i+\lambda})U^Ty\\ +\hat y_{OLS}=U I U^Ty\\ +\hat y_{PCR}=U diag(I_k, 0) U^Ty +$$ + OLS 可以看做 λ = 0 的情形;PCR 则可以看做前 k 个λ为0, 其余的主成分无穷. ridge为PCR的smoothing;ridge偏向于惩罚小的主成分。 +- λ 的选取: + - 岭迹法 (ridge trace): 使得绝大多数参数估计的系数都有符合实际意义的绝对值和符号;或所有系数作为 λ 的函数相对稳定。 + - 使得所有 VIF ≤ 10. + - 给定一个常数c > 1, 我们选取λ, s.t. RSS(λ) < cRSS. +- ridge LASSO 都sensitive to the outliers;ridge对大系数的惩罚更重一点,所以对outliers 更敏感;Ridge 的主要作用是除去多重共线性而不是降低方差 +- 较大的系数估计方差往往对应较大的系数;正则化是参数估计 bias 和 variance 的权衡,正则化系数越大,参数估计的 variance 就小而 bias 就越大; +- L2 正则有 Weight Decay 特点,但不会达到 0, 因此不会有 L1 的稀疏性。 +- 从梯度更新公式可以看出,L2权重按比例缩小;L1权重减去的是一个绝对数值 +- L1 的梯度下降方法: + - 次梯度法 + - 近端梯度下降(Proximal Gradient Descent, PGD)。在OLS的梯度下降走一步基础上, $ \leq $ 阙值的分量归为0 + - 坐标下降 +- Best subset selection也就是L0 正则,求解方法:Forward-Stepwise Selection从没有特征开始,逐项选择拟合最好的特征;Backward-Stepwise Selection: 从全特征开始,逐项剔除拟合最差的特征 +- 弹性网 (Elastic Net):约束形状与 1 < p < 2 的范数约束形状十分相似,我们可以近似的看成一个介于 Ridge 和 LASSO 之间的Lp 正则 +- 弹性网不会像 LASSO 那样只选择其中一个,而是趋于把相关特征分配相似的系数,从而解决的 LASSO 丢失信息的问题。 +- 当样本矩阵正交时: + - L0: $ \hat \theta_i I_{\theta_i \geq \sqrt{\lambda} } $ + - L1: $ \hat \theta_i (1-\frac{\lambda}{|\hat \theta_i |})^+ $ + - L2: $ \frac{1}{1+\lambda} \hat \theta_i $ + - Elastic Net: $ \frac{1}{1+\lambda_2} \hat \theta_i^{LASSO} $ +- LASSO 像是L2和L0的结合,压缩 OLS 系数的同时让一部分系数为 0. +- 弹性网像是L2和l1的结合,在LASSO的基础上再进行压缩。 +- LARS算法的工作原理可以简要概述为以下几个步骤: + - 初始化:所有回归系数初始化为零。 + - 选择变量:在每一步,选择当前与残差最相关的变量,将其加入到活跃集合中。 + - 计算方向:沿着这个方向向前移动,使得新的残差与所有在活跃集合中的变量等角度相关。 + - 更新系数:逐步增加选择变量的系数,直到另一个变量与残差同样相关,或某个变量的系数变为零。 + - 重复步骤:重复选择变量和更新系数的步骤,直到满足停止条件(如达到预定的变量数或误差标准)。 +- PLSR: 同时考虑 x 的方差,y 的方差以及 x, y 之间的相关性。 +- CCA: 只考虑了 x, y 之间的相关性。Special case dim y = 1 : Linear regression +- PCA: 只考虑了 x 的方差。 +- 高斯过程回归:非参数的贝叶斯回归方法,通过高斯过程先验对数据进行建模,进而预测新的数据点的输出的分布。可提供有意义的置信区间和后验样本以及预测值,而内核岭回归仅提供预测。 +- 逻辑斯蒂回归 (Logistic regression): +$$ +P(Y=1|X=x)=\frac{1}{1+e^{-x^T \theta}}:=logistic(x^T \theta) +$$ +- logistic 函数类似一个概率分布 (CDF) +- 标签imbalance不会影响逻辑斯蒂回归的齐次项系数,只会影响截距。所以适当调整阙值,imbalance 并不会影响预测。 +- 逻辑斯蒂回归在样本线性可分时表现很差。因为当 ||θ|| → ∞ 时logistic 函数会成为在 0 点跳跃的阶梯函数。会使参数趋于无穷大来最大化似然函数。可加入 L1, L2 正则来避免过拟合。 +- 二阶的牛顿法求解逻辑斯蒂回归,等价于求多个加权最小二乘解,因此被称为Iteratively Reweighted Least Squares (IRLS) +- 广义线性模型 (Generalized linear model, GLM):logistic函数换成任意一个函数。 +- 特别的,probit(正态分布的CDF) 函数时候为probit 回归。logistic比probit有更粗的 tail. 因此当样本中有 outliers 或者取值跨度很大时,logistic更加robust +- 多类别逻辑回归:(up to a const.) +$$ +P(Y=k|X=x)=\frac{e^{x^T \theta_k}}{\sum\limits_{i=1}^K e^{x^T \theta_i}} +$$ +Softmax 可以看做最值指标函数的smoothing。MLE等价于交叉熵损失函数。(i为样本; k为类) +$$ +\sum_i \sum_k 1_{y_i=k} \log P(Y=k|X=x_i) +$$ +- 分位回归: $ \min\limits_{\theta} \sum\limits_{y_i > x^T \theta} (y_i - x^T \theta) \tau + \sum\limits_{y_i < x^T \theta} ( x^T \theta - y_i) (1-\tau) $ + - 能够更加全面的描述响应变量条件分布的全貌。 + - 对离群点则表现的更加稳健 + - 对误差项不要求很强的假设,因此对非正态而言更加稳健。 + +### 感知机 +- 分类函数 $ f(x)=sign(w^T x+b) $ +- Loss函数 $ \sum\limits_{x_i 误分点} - y_i (w^T x+b) $ +- 使用随机梯度下降法 (stochastic gradient descent, SGD)每次更新梯度 associate with 随机误分点。训练集线性不可分时,该算法不收敛。 + +### K近邻法 (K-nearest neighbor, K-NN) +- 选取最近的K个点集,每个点加权评分。 +- 一般最优的 K 值通过交叉验证来获得。 +- kd搜索树是二叉搜索树 (binary search tree, BST), 在训练集中,找到按某个维度的中位数做划分 +- kd树搜索:找出目标点 x 对应的叶节点 l 作为起始点;逐级往上搜索,如果新的最近点出现更新最近点;搜索到某个节点时,考察兄弟点, 考察某两集合,如果相交则对该点的子树递归,不相交则继续往上搜。 +- 当要搜寻 K 个最邻近点时:将最先搜索到的 K 个点作为初始值;替换当前K个点中的最远距离的点。 +- 当样本点个数远大于维度: $ N \gg 2^k $ 时效率较高,否则kd Tree 几乎和线性搜索一样遍历所有点。 +- Ball 树,为了解决 kd 树在高维上效率低下的问题: + 1) 先构建一个包含所有样本的最小球体; + 2) 从球中选择一个离球的中心最远的点,然后选择第二个点离第一个点最远,将球中所有的点分配到离这两个聚类中心最近的一个上,然后计算每个聚类的中心,以及聚类能够包含它所有数据点所需的最小半径。得到两个子超球体,和kd树里左右子树对应; + 3) 对于这两个子超球体,递归得到ball 树。 +- ball Tree 的结点个数由样本个数确定 + +### 朴素贝叶斯法 +- 独立假设下 +$$ +\max\limits_k P(Y=c_k| X=x ) = \max\limits_k P(Y=c_k) \prod\limits_i P(X^i =x^i|Y=c_k) +$$ +- 最大化 Y 的后验概率(MAP)实际上就是最小化 0-1损失函数 (L0-norm) 下的贝叶斯风险。 +- 朴素贝叶斯由于简单的无关假设,是一种高偏差低方差的算法。尤其是特征之间存现相关时,偏差会比较大。 +- 独立性假设做一定的放松,独依赖估计(One-Dependent Estimator, ODE)。SPODE (Super-Parent ODE)假设所有特征都依赖于同一个特征(超父),然后通过交叉验证等模型选择方法来确定超父。AODE (Average ODE)将样本的特征依次作为超父来计算概率最后求和。 +- 每个特征的独立性可以 conditional on k 个父特征拓展为 KDE。随着k增加所需的训练样本数量将以指数级增加。KDE 的表述即是贝叶斯网 + +### 最大熵模型 +- 寻求最优的 P(Y|X) 最大化他的经验条件熵max H(Y|X),在某些给定特征函数相关的约束条件下。 +- 转化为等价的对偶极小极大问题:$ \max\limits_\omega \min\limits_P L(P,\omega) $ +- 对偶极小的解: $ P_\omega(y|x) = \frac{1}{Z(\omega,x)} exp(\sum \omega_i f_i(x,y)) $ ,这里 $ f_i $ 为特征函数。因此最大熵模型与逻辑斯蒂回归模型类似都被叫做对数线性模型 +- 以 $ \omega $ 为参数的模型 $ P_\omega(y|x) $ 的MLE等同于上面的对偶极大 $ \max\limits_\omega $ +- 最优化问题可以使用经典的牛顿法和拟牛顿法, 还有一种迭代尺度法 (improved iterative scaling, IIS): 找到对数似然的一个可以迭代递增的下界,再通过最大化下界迭代求解 + +### 支持向量机 (SVM) +- 函数间隔 $ y_i(w_i^T x+ b) $ ;几何间隔 $ y_i(w_i^T x+ b)/\|\omega\| $ +- 可分SVM: $ \min\limits_{\omega,b} \|\omega\|^2 /2 $ , s.t. $ y_i(w_i^T x+ b)-1 \geq 0 $ +- 不可分SVM原始问题 +$$ +\min\limits_{\omega,b,\xi} \|\omega\|^2 /2 + C \sum \xi_i \\ +\, \\ + s.t. \,\,\, y_i(w_i^T x+ b) \geq 1- \xi_i, \, \, \xi_i \geq 0 +$$ +- 等价的 KKT condition (原始变量 $ \omega,b,\xi $ ,对偶变量 $ \alpha_i, \mu_i $ ) + - $ \alpha_i=0 $ :xi在临界平面之内 + - $ 0<\alpha_i < C $ :xi 在临界平面上 + - $ \alpha_i=C $ :ξ < 1,xi 越过临界超平面但在分离平面正确一侧;ξ = 1,xi 在分离平面上;ξ > 1,xi 在分离平面错误一侧。 +- 把所有 $ \alpha_i >0 $ 即所有越过临界平面的 xi 叫做软间隔 (soft margin) 的支持向量 +- SVM 具有稀疏性(样本):分离平面即分类器完全由支持向量(α > 0)来决定。 +- 不可分SVM对偶问题: +$$ +\min\limits_{\alpha} \frac{1}{2} \sum\limits_{i,j} \alpha_i \alpha_j y_i y_j (x_i^T x_j) - \sum\limits_i \alpha_i +$$ + +$$ +\sum\limits_i \alpha_i y_i=0 , \,\, 0\leq \alpha_i \leq C +$$ +对偶问题最优解与原问题之间关系 +$$ +\omega=\sum \alpha_iy_ix_i\\ +b=y_j-\sum y_i \alpha_i(x_i^T x_j) +$$ +- 合页损失函数 (hinge loss function),无约束优化问题: + $$ + \min\limits_{\omega,b} C(1-y_i(w_i^T x+ b))^+ + \|\omega\|^2/2 + $$ + SVM是一种自动正则化的方法。能够很好的处理高维数据。因为它只取决于线性超平面和支持向量,计算成本不会随着维数的增加而急剧增加。 +- 核技巧:不直接定义点的映射,而是定义映射后的內积即核函数代替原空间里的內积 +- 序列最小化求解对偶问题 (sequential minimal optimization, SMO) + - 每次只优化两个 α1, α2(固定其他) + - 调整b,使第一步中的最优解满足KKT。 + - 选取另外一对α直到所有的α都满足KKT。 +- 多类SVM + - 一对多法 (one-versus-rest, OVR; one-versus-all): 把某个类别的样本归为一类,其他剩余的样本归为另一类,需要k个SVM,将未知样本分类为具有最大分类函数值。这种方法存在 bia。 + - 一对一法 (one-versus-one, OVO): 在任意两类样本之间设计一个SVM。分类时,用最后得票最多的类别 +- SVR回归,损失函数 $ \min\limits_{\omega,b} C \sum (|y_i-(w_i^T x+ b)|-\epsilon)^+ + \|\omega\|^2/2 $ 考虑上/下松弛变量,等价于 +$$ + \min C \sum (\xi_i + \hat\xi_i ) + \|\omega\|^2/2\\ +s.t. \, \,0 \leq\xi_i , \hat\xi_i ; \, \, -\epsilon - \hat\xi_i \leq y_i-(w_i^T x+ b) \leq \epsilon + \xi_i +$$ + +类似,SVR的对偶问题得到原变量和对偶变量关系 $ \omega = \sum(\alpha_i-\hat\alpha_i)x_i $ ,只有在带宽内的点有 $ \alpha_i-\hat\alpha_i=0 $ +- 对比岭回归KRR和SVR。类似:都使用 L2 正则;都可以使用核技巧。不同:损失函数不同,KRR 有解析解;KRR对中等规模训练速度通常更快,SVR适用于较大的训练集;SVR稀疏性,预测比KRR快。? +- One Class SVM +$$ + \min\limits_{r,o} V(r,o)+ C \sum \xi_i\\ +s.t. \,\, \|x_i-o\|\leq r+ \xi_i; \,\,\, \xi_i \geq0 +$$ +- 校准概率 (Calibrate Probability):在 score g(xi)基础上再训练一个 [0, 1] 之间的函数 (calibration regressor) 来表示xi被预测成1的校准概率。 + + + +### 决策树 + + +**构建决策树** + +- 选择最大的信息增益ID3/信息增益比C4.5/最小相对基尼指数的特征进行分裂 +- 用信息增益比代替是因为要排除那些提供很多信息但同时自身熵也很大的特征。比如取值非常多的特征,每个样本被该特征分裂成节点都是 1 个样本 +- 回归树 (regression tree),通过最小化平方误差来寻找最优特征和切分 +- 利用某叶结点对应的划分的子空间中样本个数/总样本,可以作为输入X的概率分布估计。 +- 决策树的优点:易于解释;不是很依赖于预处理;缺失值和异常点不敏感。 +- 决策树的缺点:计算量较大;连续特征类别化;样本扰动敏感;过拟合;特征选择一。对multicollinearity鲁棒;弱 interaction 的特征低效;不是概率模型 + + +**剪枝** + +- 预剪枝 (pre-pruning),以下值达到阙值:所有样本点属于类别个数;样本个数;树的深度;衡量指标的值 +- 后剪枝 (post-pruning) +- 代价函数 $ C_\alpha(T):=C(T)+\alpha |T| $ , $ C(T) $ 为决策树的叶节点熵加权和 +- $ C_\alpha(T-T_t)- C_\alpha(T)= C_\alpha(T_t^p) - C_\alpha(T_t) $ , $ T_t $ 为减掉的子树, $ T_t^p $ 为剪枝后的叶节点。等式说明子树代价函数的剪枝变化=整体树代价函数的剪枝变化 +- CART 剪枝,逐步减去使得 $ g(t) $ 最小的 $ t $ ,这里 $ g(t)=\frac{C(T_t^p)-C(T_t)}{|T_t|-1} $ ,构造决策树包含序列 $ T_{i+1} \subset T_i $ 。 满足性质:(1) $ \alpha_{i+1} \geq \alpha_i $ (2) $ \forall \alpha \in [\alpha_i, \alpha_{i+1}) $ $ T_i $ 是最优的。 + +**类别特征** +- 独热编码 (one-hot encoding)缺点:划分样本不平衡,某个划分几乎就是原始样本集;把样本划分到很多过分零散的小空间上。 + +### 提升方法 + +**AdaBoost** +- 步骤:1等权重初始化数据;2计算Gm的(加权)错误率 $ e_m $ ,选取错误最小的分类器作为m轮的基础分类器;3计算Gm的权重 $ \alpha_m =\frac{1}{2}\log\frac{1-e_m}{e_m} $ (为了最小化指数损失函数);5更新数据权重,误分类的样本点权值扩大,正确的减小。;6重复3-5;7得到最终分类器 $ f(x)=sign(\sum \alpha_m G_m(x)) $ 。 +- 加法模型 (additive model),通常使用向前分布算法 (forward stagewise algorithm) +- AdaBoost 算法是向前分步法的特例,逐步优化损失函数: +$$ +(\alpha_m,G_m) = \arg\min\limits_{\alpha,G} \sum\limits_{样本i} exp(-y_i (\sum\limits_{l=1}^{m-1}\alpha_lG_l(x_i) + \alpha G(x) ) ) +$$ + +**GBDT 梯度提升树** +- 梯度提升树 (Gradient Boosting Decision Tree,GBDT): + - 初始化 $ f_0(x) $ 为一最优常数函数; + - 通过梯度计算残差 $ r_m^i=-\frac{\partial L(y_i,f)}{\partial f}|_{f=f_{m-1}(x_i)} $ ; + - 对数据集合 $ \{(x_i, r^i_m) \}_i $ 拟合出m轮基本树的叶节点划分(不需要每个学习器拟合太好来节省计算时间); + - 优化计算划分上的输出值(当损失函数是平方误差时,就是回归树里用的均值) + - 更新 $ f_m(x) = f_{m-1}(x)+ m轮拟合出的树 $ +- 每一轮拟合残差必须与原始的损失函数一致 +- 对于平方损失来说,梯度计算的“残差”=y − f(x) +- 分类问题的区别: $ P(Y=1|x)=\frac{1}{1+exp(-f_m(x))} $ ;损失函数是y的交叉熵;残差 $ r_m^i= y_i - \frac{1}{1+exp(-f_{m-1}(x_i))} $ +- AdaBoost每一轮没有在拟合残差,而是直接最小化指数损失;而梯度提升树在拟合残差。 + +**XGBoost** +- XGBoost叶节点划分:采用按层生长 (level(depth)-wise learning) 每一层的所有 leaf 都分裂,逐层往下分裂。对每个特征进行线性扫描找出Gain = Obj_unsplit − Obj_split最大的切分点,然后再遍历所有特征找出最大的特征分裂。 +- XGBoost优化计算划分上的输出值:最小化目标函数使用二阶的牛顿法,对损失函数 $ L(y_i, f) $ 在 $ f=f_{m-1}(x_i) $ 二阶Taylor展开。 +- 因为是按层生长,XGboost 通常会规定最大深度,然后从下往上后剪枝。这是因为分裂虽然是最优,但依然有可能Gain是负的。 +- 防止过拟合: + - shrinkage参数: $ f_m = f_{m−1} + ϵ Tree_m $ ; + - 列(特征)抽样 (column subsampling): 与随机森林类似, 每次随机地从所有特征中抽取少量的特征进行分裂。 +- XGBoost按层生长带来了很多没必要的开销。 LightGBM中我们采用leaf-wise learning +- DART (Dropouts meet Multiple Additive Regression Trees): 训练第m棵树时,随机丢弃前面m − 1棵树中的K棵。同时需要数乘正则化:。后面提到的随机森林就可以看做DART dropout 所有的树。 + +**LightGBM** +- XGBoost不足:预排序后需要保存特征值及排序后的索引,因此内存占用和计算消耗巨大,且最佳切分点容易过拟合;预排序后,特征对梯度的访问是一种随机访问,对内存 (cache) 不友好。 +- LightGBM (Light Gradient Boosting Machines) :更少的内存(直方图 (Histogram))、更少的样本 (GOSS)、更少的特征 (EFB)。 +- 直方图:将数据离散化成K个桶(bin),把数据放入对应的桶中,然后寻找K个桶的最佳切分点来近似以减少计算量。优势:简化了计算;不是很精确的分割起到了正则化的效果,同时提升也不需要单独学习器过高的精度;直方图差加速,分裂后左右子树需要重新计算直方图,但其中一个直方图确定时,另外一个可以由父直方图减去得到。 +- 直接丢掉小梯度数据可提高速度但是也降低精度。为了权衡这两,考虑单边梯度采样算法 (Gradient-based One-Side Sampling, GOSS): 保留前a × 100%大梯度数据同时,在抛弃的小梯度样本中再随机选取b × 100%。需要在后面取出的小梯度样本前面乘一个常数 (1 − a)/b, 以尽量保证它的原始分布。 +- 互斥特征合并 (Exclusive Feature Bundling, EFB):把互斥特征(即特征不会同时为非零值,像 one-hot)捆绑成一个特征来减少特征的维度。捆绑,把冲突样本总个数小于阙值的几个特征捆绑成一个bundle;合并,为了确保bundle中每个特征可以被区分开来,我们对特征进行平移,确保不同特征的值区间没有交集。 + +LightGBM还用到了以下技术 +- Leaf-wise(分裂):每次从当前所有叶子中找到 Gain 最大(一般也是数据量最大)的一个叶子进行分裂。优点:Leaf-wise 可以降低更多的误差,得到更好的精度。缺点:树的深度较深,产生过拟合。 +- 并行学习 (Parallel Learning):特征并行、数据并行? +- 顺序访问:LightGBM 因为是将样本投入 bin 中,所以是顺序访问,对 cache 比较友好。 +- 类别特征:LightGBM 按照某一特征类别的梯度统计排序以后,然后按照最优的切分分裂。 + +**CatBoost** +- CatBoost作用:处理 GBDT 中的类别特征;使用Ordered TS解决由类别特征编码造成的目标泄露 (Target Leakage)问题;用Ordered Boosting解决由梯度提升方法造成的预测偏移 (Prediction shift)问题。 +- one-hot编码面对大量类别会造成维度灾难。目标变量统计 (Target Statistics) 使用类别标签的统计量来数值化特征的类别。 + - Greedy TS: 使用所有相同类别对应的标签均值来数字化类别。就是目标 (自身标签) 泄露的由来。 + - Holdout TS: 训练集一分为二DTS ∪ Dtrain。用DTS来独立地计算训练集Dtrain中样本的TS。 但是却大大减少了训练样本的数量。 + - Leave-one-out TS: 训练集样本xi使用D/xi计算TS; 测试集样本使用训练集全样本计算TS。但两种类别的条件分布不一致。 +- CatBoost使用Ordered TS + - 对训练集样本随机排序; + - 对训练集样本xi使用它置换下前面的(历史)样本计算TS; + - 对测试集样本xi使用训练集全样本计算TS。 +- Ordered Boosting:希望m−1轮训练所用的样本和m轮计算残差所用的样本应该是各自独立采样,这样便可获得无偏残差 (Unshifted Residuals)。样本xi的m轮残差,只在它用历史样本训练的学习器fm-1上,来计算。 + +### 集成学习 + +**Bagging 随机森林** +- 集成学习(Ensemble learning)包括提、装袋(Bagging)、Stacking。 +- 如果装袋的弱分类器是决策树,则称为随机森林(Random Forest, RF): + - 自助法在训练数据中生成M组数据; + - 随机地从所有特征中抽取少量的特征(一般√特征总数)。在这特征子集中用决策树的方法生成节点,平行的训练多个弱分类器。(随机抽取的目的是避免某些信息增益比较高的特征频繁出现而使决策树之间相关度高); + - 对M个弱分类器的输出求平均(回归)或者取众数(分类)。 +- 提升是提高精度,降低偏置;装袋在不增加偏置的情况下降低方差。 +- 对于样本x, 装袋也可以把弱分类器的类别输出频率作为y=f(x)的概率分布估计。 +- 自助采样可以产近1/3的袋外样本没有被用到的, 可当做测试集来计算模型的袋外误差 (OOB Error)。 +- 特征个数越多,RF 树的个数也需要越多。因为足够多的树才能保证每个特征等概率被选上。 +- 增加RF树的个数不会overfitting, 但由于fully grown tree可能过拟合,增加这样的树就有可能过拟合。 + +RF在重要性选择的应用 + +- Gini Importance / Mean Decrease in Impurity (MDI):对于每棵树,计算每个特征在所有分裂节点上减少的Gini不纯度总和,然后将所有树的结果相加并除以树的总数。缺点:RF求平均稀释相关特征,导致所有的特征重要性都被低估。这一点 GBDT 就会选出其中一个而优于RF。 +- permutation Importance / Mean Decrease in Accuracy (MDA):在 OOB数据上计算OOB Error1; 随机打乱某特征取值得到OOB Error2。Error2-Error1越大说明该特征越重要。优点:避免过拟合对特征选择带来的 +偏差。缺点:当有相关特征存在时,MDA容易低估特征的重要性。 +- Boruta 对特征重要性的选择类似于filtering, 会保留所有相关的重要特征。 +- 决策树可由以下指标来选取特征重要性: + - weight: 特征被分裂次数。 + - cover: 被分割的样本数即用分裂样本数作为权重加权分裂次数。假设在某次分裂中,当前节点包含n个样本,那么这次分裂的样本数就是n。 + - gain: 由该特征分裂前后损失函数的减少总量。每次分裂前后损失函数(如均方误差、Gini不纯度等)的减少量之和。 +- 两样本近似性 $ Prox_{ij}:= $ 两样本被分到同一个叶节点的树的棵数/RF总棵数。作用: + - 找出异常点 (outlier location)。 $ OL_i = \frac{|D|}{\sum\limits_{x_k \in D}Prox_{ik}^2} $ ,越大说明xi与同类样本的近似性越小,就越有可能是异常点。 + - 聚类填补缺失值 (Missing value replacement),缺失xi情况:1用同类未缺失样本的众数(离散)或者中位数(连续)暴力填补;2建立RF,考虑没有缺失样本xj,Proxij作为权重来计算加权众数或者均值;3重复步骤2建立RF。 +- 孤立森林 (Isolation Forest, IForest)是无监督学习,它的思想是拥有异常点的样本训练树结构时,很快就会把异常点孤立地分配到一个叶节点中,异常点在树中深度很浅。为无监督学习,因此使用随机选取特征和最佳切分点。 +- IForest仅对全局稀疏点敏感,不擅长处理局部的相对稀疏点 +- 极限随机树(extremely randomized trees, ExtraTrees)。两种树都特征随机、模型随机。随机森林样本随机(自助法),最优分裂;极限随机树分裂随机,使用全样本。 + +**Stacking** +- Stacking步骤,数据集 $ T=\{(x_i,y_i)\} $ + - 训练集T上训练好 $ p_k $ ; + - $ z_i:= (p_1(x_i),...,p_K(x_i)) $ ; + - 元学习器 f 在 $ \{(z_i,y_i)\} $ 上学习; + - 预测 $ y=f(p_1(x),...,p_K(x)) $ . +- 直接用初级学习器的训练集来产生次级训练集,则过拟合风险会比较大。 +- 解决方法: $ T=T_1 \cup,...,\cup T_J $ ; $ T_j^C $ 训练p;p作用 $ T_j $ 产生 $ T_j^* $ ; $ T^*=T_1^* \cup,...,\cup T_J^* $ ;f 在 $ T^* $ 上学习。 + + +### EM算法 +- 求解含有隐变量模型 $ p(x;\theta)=\sum\limits_z p(x,z;\theta) $ 最大似然估计: + - E步: $ \max\limits_\theta p(x;\theta) \geq \max\limits_\theta E_{p(Z|X,\theta_i)}(\log(p(X,Z;\theta)))=: \max\limits_\theta Q(\theta,\theta_i) $ ; + - M步: $ \theta_{i+1}= \arg \max\limits_\theta Q(\theta,\theta_i) $ 。 +- 不直接求MLE因为:X分布很复杂,但 $ Z;\theta $ 和 $ X|Z;\theta $ 简单;不一定是凸函数难以优化或者最大值不存在。 +- 计算 $ p(Z|X,\theta_i) $ 有时候容易(当 $ p(X;θ) $ 容易知道时)用贝叶斯公式;有时候比较难,用变分推断。 +- EM只保证收敛到梯度为 0 的点。 +- 对任意分布 $ q(z) $ (非z变量本来的分布 $ p(z|x;\theta) $ ),有等式 +$$ + \log p(X;\theta) = E_q \big[\log \frac{p(X,Z;\theta)}{q(Z)}\big] - E_q \big[\log \frac{p(Z|X;\theta)}{q(Z)}\big] \\ +\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, =: ELBO(q, X;\theta)+ KL(q(z)|p(z|x;\theta)) +$$ +ELBO为证据下界 (Evidence Lower Bound, ELBO)。EM算法也可用ELBO解释:因为 $ KL\geq 0 $ ,可通过最大化ELBO来求 $ p(X;\theta) $ 的MLE。但是为了下界更贴合,选择 $ q(z)=p(z|x;\theta_i) $ (对应E步)。 +- 变分推断的思想:通过优化参数 $ \phi $ ,将复杂的后验分布 $ q(z|x) $ 用一个更简单的分布 $ q(z;\phi) $ 来近似。ELBO等式左边不依赖于 $ \phi $ ,所以该最优近似等价于优化ELBO。为了化简计算,对 $ q(z;\phi) $ 做分量无关即平均场变分族 (mean-field variational family)的假设。此时变分推断为逐个坐标依次更新,该法称为坐标上升变分推断 (Coordinate Ascent Variational Inference, CAVI)。 +- VAE + + +### 隐马尔可夫模型 (HMM) +- 隐马尔可夫模型(Hidden Markov Model,简称HMM):描述一个含有隐含未知参数的马尔可夫过程。状态本身是不可见的,只能通过观察到的输出结果来推断状态序列。 + - **状态集合**:模型中所有可能的状态的集合,通常表示为 \( S = \{s_1, s_2, ..., s_N\} \)。 + - **观测集合**:与状态集合相关联的观测结果的集合,通常表示为 \( O = \{o_1, o_2, ..., o_M\} \)。 + - **状态转移概率**:在任意两个状态之间转移的概率,通常表示为 \( a_{ij} = P(s_{t+1} = s_j | s_t = s_i) \)。 + - **观测概率**:在某个状态下观测到某个结果的概率,通常表示为 \( b_i(o) = P(o_t | s_t = s_i) \)。 + - **初始状态概率**:模型开始时各个状态的概率分布,通常表示为 \( \pi_i = P(s_1 = s_i) \)。 + +- 隐马尔可夫模型的三个主要问题: + - **评估问题**(Evaluation):给定模型参数和一个观测序列,计算这个序列出现的概率。采用前向-后向算法(Forward-Backward Algorithm)解决,一种动态规划方法。 + - **解码问题**(Decoding):给定模型参数和观测序列,寻找最有可能产生这个观测序列的状态序列。维特比算法(Viterbi Algorithm)解决,一种动态规划方法。 + - **学习问题**(Learning):给定观测序列,调整模型参数以最大化观测序列出现的概率。鲍姆-韦尔奇算法(Baum-Welch Algorithm),一种期望最大化(EM)算法。 + + +### 条件随机场 (CRF) +- 成对马尔可夫性 (pairwise Markov): 对任意两node v ≁ w; 局部马尔可夫性 (local Markov): 如果对任意一个节点v和邻居的外部; 全局马尔可夫性 (global markov): 任意两个被C分开的点集A, B。 +- 全局(强于)局部(强于)成对。在正概率下三者等价。 +- 一个无向图满足以上任意一个马尔可夫性,则我们称其为概率无向图 (probability undirected graph) 或者马尔可夫随机场 (Markov random field). +- 一个点集中任意两点都有边连接我们称其为无向图的一个团 (clique), 若没有包含他的更大的团即不能再加进点成团,则我们称为最大团 (maximal clique)。 +- 概率无向图的联合分布可以被最大团分解。 +- 设Y的无向图构成一个马尔科夫随机场,给定X称P(Y|X)是条件随机场 (conditional random field, CRF), 如果在条件X下,每个点的分布只与其相邻点有关。 +- 类似HMM也有三个问题和算法。 +- 模型联系 + +| 模型联系 | 非序列 | 序列化 | +| -------- | -------- | -------- | +| 生成模型 | 朴素贝叶斯 | HMM | +| 判别模型 | 最大熵(逻辑斯蒂) | CRF | + + + +### 数据处理和网络优化 +**交叉验证** +- 留 P 法 (Leave P Out Cross Validation, LPOCV): 选P个作为验证集,剩下的训练集。跑遍所有可能即一共验证 $ C_P^N $ 次。P = 1时叫做留一法 (Leave One Out, LOOCV),几乎无偏但计算消耗很大。 +- K-Fold交叉验证(K-fold CV):把样本集分成K份,K − 1份作为训练集,剩下的1份作为验证集,最后取K次验证的平均误差来评估模型;当K = N 时,就是LOOCV;也可重复多次取平均即多次K折交叉验证 (Repeated K-Fold CV);当类别样本数量不均匀时可以分别在类别内做划分即Stratified K-fold; +- K的选取是一个trade-off:K越大,训练集的数据越多,模型的Bias越小;训练集之前的相关性越大而导致更大的Variance。 + +**正则化** +- 权重衰减 (Weight Decay): $ \theta_{k+1} ← (1 − β) \theta_{k} − \alpha g_k $ , 梯度更新时引入一个小的衰减系数。简单情况与L2正则效果相同(复杂不一定)。 +- 提前停止 (Early Stop): 在验证集上错误率小于阙值时就停止更新。 +- 数据增强 (Data Augmentation): 主要应用于图像处理包括旋转(Rotation)、翻转(Flip)、缩放(Zoom In/Out)、平移(Shift):将图、加噪声(Noise)等。 +- 标签平滑 (Label Smoothing): 对 x 的标签 one-hot 向量增加噪声平滑。 +- 丢弃法 (Dropout Method): 隐藏层中随机选择一部分神经元,并将它们的输出值设为零。每次迭代都相当于训练一个不同的子网络,这些子网络共享原网络的参数,最终的网络可以近似看作集成学习了指数级个不同网络的组合模型。 +- 特征选择;特征抽样;剪枝;Bagging;提升 + +**归一化** +- 目的: + - 便于不同量纲 + - 加快梯度下降。某个特征特别的大,很大可能导致梯度不平衡;归一化样本让参数等高线接近圆形。 + - 靠近Sigmoid函数的中心而远离梯度为0的饱和区域 + - 避免太大数据的数值问题 +- 方法:归一化:把数据压缩到[0, 1];标准化。 +- 需要标准化的算法:PCA;SVM, KNN, 聚类;回归模型,虽然对于y的预测没有影响,但影响梯度下降速度;有惩罚项的回归如Lasso,,Ridge,方差大的变量系数小,会受到较小的惩罚;特征选择/提取中需要根据一些统计检测或者评分函数做特征排名。 +- 不需要标准化的算法:概率模型(逻辑回归),树模型,集成学习(随机森林,提升树) + +**处理类别不平衡** +- 随机过采样:随机复制少数类样本,可能过拟合。 +- SMOTE (synthetic minority oversampling technique):对少数类样本使用KNN选取K个邻近少数点,邻近点和中心点做随机插值。问题:一类K 邻近点全是少数点,不带什么新信息;另一类K邻近点都是多数点,可能是噪声。 +- Border-line SMOTE:为解决SMOTE的问题,只选取那些多数类和少数类的“边界点”作为中心点。 +- 随机欠采样:随机删除多数类的样本,可能会丢失重要信息的点。 +- 数据清洗方法 (data cleaning techniques):删除 Tomek Links 中的多数点;Edited Nearest Neighbours(ENN) 剔除多数类的一个点,如果其K个近邻点有超过一半都不属于多数类。问题:无法控制欠采样的数量。 +- EasyEnsemble:将多数类随机分成数量与少数类一样的多份子样本,再集成。 +- BalanceCascade:每次从多数类中抽出和少数类数目一样的子样本 + + +**数据预处理** +- 标准/归一化 +- 填补缺失值: + - 无监督情况下缺失某些特征:统计填补,同一特征未缺失样本的中位数/均值。可能引入噪声或者会改变特征原有的分布;标签填补:局部近似样本的统计量填充; + - 缺失标签:聚类填补;KNN填补,领近点的众数/均值;把缺失的特征当做标签缺失时,该方法可用在上面的无监督情况。 + - 缺失特征:随机森林; 回归填补,将已知特征值和标签代入回归方程来反解出缺失特征值;极大似然填补,把缺失值的x作为隐含变量使用EM算法估计。 +- 处理样本不平衡:过采样和欠采样 +- 噪声 (noise)/异常值/离群点(outliers)处理:均方差,几个方差以外的数据点;聚类/DBSCAN;随机森林/孤立森林;One Class SVM;PCA; +- 降维:特征提取;特征选择;特征捆绑; +- 类别特征编码: (男, 女, 收入高, 中, 低),则样本:(男, 高) → (1,0,1,0,0) +- 离散化 (Discretization),也叫量化 (quantization) 或者装箱 (binning)。 +- 二值化:将数值特征用阈值过滤得到布尔值。 + +**梯度下降** +- 非常大的神经网络中,大部分的局部最小解是等价,没有必要找全局最小值,这反而可能导致过拟合。主要是想逃离鞍点 (Saddle Point)和尖锐最小值 (Sharp Minima)。 + +**批量大小** + +- 批量大小越大,随机梯度的方差越小。线性缩放规则 (Linear Scaling Rule): 当批量大小增加 m 倍时,学习率也增加 m 倍,该规则在批量大小比较小时适用。批量越大,越有可能收敛到尖锐最小值;批量越小,越有可能收敛到平坦最小值。 + +**学习率** + +- 学习率在前面需要大来保证收敛速度,在最优点附近时要小以避免来回振荡。但是在刚开始训练时,由于参数是随机初始化的,梯度大,大的学习率会使训练不稳定。为此,最初几轮采用小的学习率,该方法称为学习率预热 (Learning Rate Warmup)。逐渐预热(Gradual Warmup): $ \alpha_t = \alpha_0 \frac{t}{T_W} $ 。 +- 固定衰减学习率:分段常数衰减;逆时衰减 $ \frac{1}{1+\beta t} $ ;指数衰减;余弦衰减。 +- 周期性学习率:当鞍点或者尖锐最小值附近时,增大学习率有助于逃离;当处于平坦时,增大学习率依然有可能在该平坦最小值的吸引域 (Basin of Attraction) 内。因此考虑周期性学习率来逃离:三角循环学习率 (Triangular Cyclic Learning Rate);带热重启的随机梯度下降 (Stochastic Gradient Descent with Warm Restarts, SGDR): 每间隔一定周期后重新初始化为某个预先设定值,然后逐渐衰减。 +- 自适应学习率 + - AdaGrad算法(Adaptive Gradient Algorithm):较大的梯度累积使用相对较小的学习率;较小的梯度累积使用相对较大的学习率。但整体是学习率逐渐缩小。 $ G_t=\sum\limits_{k=0}^tg^k\odot g^k $ 放到分母上。缺点:学习率是个严格递减的过程,所以经过一定次数的迭代学习率非常小,很难再找到最优点。 + - RMSprop 算法 (Root Mean Square Propagation):为了解决上面缺点,对梯度平方累积使用了指数加权移动平均 (Exponentially Weighted Moving Average, EWMA), $ G_t $ 中指数加权求和。 + - AdaDelta算法:在RMSprop算法基础上,对参数的增量进行EWMA,放到分子上。在一定程度上抑制学习率的波动即分子分母有互相抵消的效果(有相同量纲而避免初始学习率的选取) + + +**梯度估计** +- 动量法 (Momentum Method): 对参数增量使用加权移动平均(Weighted Moving Average, WMA)。最近一段时间内的梯度方向不一致时,比如在迭代后期收敛值附近,动量法会起到减速作用,增加稳定性;相反,当方向都一致时比如在迭代初期,动量法会起到加速作用,可加速。自适应学习率在迭代的任意时刻增加过快时自动的减速;动量法是在接近收敛点的时候自动减速。 +- Nesterov 动量法:将梯度取在前面动量更新后的参数上。 +- Adam算法(Adaptive Moment Estimation Algorithm): 动量法和 RMSprop的联合,对梯度和梯度平方都是用 EWMA。 +- 梯度截断,像RNN中梯度爆炸问题,大的梯度更新参数反而远离最优点。 + + + +**初始化** +- 预训练初始化 (Pre-trained Initialization)。 +- 固定值初始化:比如偏置通常用0;在LSTM遗忘门中,偏置通常初始化为 1或2; 对于使用ReLU的神经元,有时也可以将偏置设为0.01,使得ReLU神经元在训练初期更容易激活。 +- 神经网络不能把权重全部初始化成一样或0,这会导致每一层的神经元值相同,甚至恒为0。线性规划和逻辑斯蒂回系数可以全部初始化为0因为线性回归没有激活函数,逻辑斯蒂函数不过原点。 +- 随机初始化 (Random Initialization):从一些固定方差的随机器中产生初始值。 +- 为了缓解梯度消失或爆炸,尽可能保持每个神经元的输入和输出的方差一致,根据神经元的连接数量来自适应地调整初始化分布的方差,这类方法称为方差缩放 (Variance Scaling)。 $ Var(\omega_i)=\frac{1}{M_{l-1}} $ +- Xavier 初始化: $ Var(\omega_i)=\frac{1}{(M_{l-1}+M_l)/2} $ . +- He 初始化:ReLU激活通常有一半的神经元输出为0, 因此: $ Var(\omega_i)=\frac{2}{M_{l-1}} $ +- 另外为了避免梯度消失或梯度爆炸,我们希望误差项在反向传播中具有范数保持性 (Norm-Preserving),选取W为正交矩阵。方法:标准高斯分布初始化矩阵,用奇异值分解得到。 + + +**超参数优化** +- 超参数 (Hyperparameter) 包括: + - 网络结构:连接关系、层数、每层的神经元数量、激活函数类型等; + - 优化参数,包括优化方法、学习率、小批量样本数量等; + - 正则化系数。 +- 超参数优化方法网格搜索 (Grid Search) 和随机搜索 (Random Search) +- 贝叶斯优化:利用前面采集的超参及其函数值, $ H_t = \{(x_1, y_1), · · · , (x_t, y_t)\} $ 建立高斯过程回归,来选取下一个待搜索的点。 + +**神经网络归一化** +- 逐层归一化 (Layer-wise Normalization) 好处: + - 神经网络低层输入的微小变化在非线性激活函数作用下都会引起高层输入的分布变化Internal Covariate Shift (ICS)。对每一个神经层的输入进行归一化操作,使其分布保持稳定。 + - 使大部分神经层的输入处于不饱和区域,从而让梯度变大,避免梯度消失问题。 +- 批量归一化(Batch Normalization, BN):每一层输入样本维归一化。训练时小批量样本,测试时全样本。 +- 批量归一化缺点: + - 要求足够大的批量大小。难应用到在线学习。 + - 很难处理像RNN这样的动态序列网络。序列长度可能不一致,后续的隐藏序列长度也不一致。这可能导致随着时间推移样本会越来越少,使得样本均值和方差不可信。 + - 要求测试集样本时间序列长度必须小于训练集,否则超过的部分就没有可以用的均值和方差。 +- 层归一化(Layer Normalization, LN): 逐层对每个神经元即每个分量维度做归一化。 +- BN可以看做样本矩阵(样本数 * 特征维度)列方向或样本维的归一化;LN行方向上或特征维的归一化。 +- 权重归一化 (Weight Normalization): 将权重矩阵 W 的行向量在参数化成长度和单位向量: $ W_{i,:} = g_i e_i $ 。 +- 局部响应归一化 (Local Response Normalization, LRN):卷积层的输出特征映射 $ Y\in R^{M ′×N ′×P} $ ,切片矩阵 $ Y^p \in R^{M ′×N ′} $ 。LRN为 $ Y^p $ 除以类似某邻域切片 $ Y^{p'} $ 平方和。 +- 如果有个神经元的活性值非常大,LRN能使和它邻近的特征映射中(P 方向上)的神经元近似地归一化为0, 从而起到抑制作用,增强模型的泛化能力。 +- 最大汇聚也有抑制作用,区别是对同一个特征映射中的邻近位置中的神经元。 + + +### 前馈神经网络 +- FNN $ \phi: x=a^{(0)} \rightarrow z^{(1)} \rightarrow a^{(1)} \rightarrow \dots \rightarrow z^{(L)} \rightarrow a^{(L)} $ +- 反向传播算法的FNN训练过程 + - 正向计算每一层 $ z^{(l)}, a^{(l)} $ ; + - 反向计算每一层 $ \delta^{(l)}:= \frac{\partial L}{\partial z^{(l)}} = f'(z^{(l)}) \odot ( (W^{(l+1)})^T \delta^{(l+1)} ) $ ; + - 计算每一层梯度 $ \frac{\partial L}{\partial W^{(l)}}=\delta^{(l)}(a^{(l-1)})^T $ , $ \frac{\partial L}{\partial b^{(l)}}=\delta^{(l)} $ 。 +- 这里我们用z(l)做中间变量因为容易计算导数 +- 当网络层数很深时,梯度就会不停衰减,这就是所谓的梯度消失 (Vanishing Gradient) 问题。消失是指相比较当前迭代的参数值W(l)梯度值非常小即梯度对参数的更新不明显。 +- 梯度消失的方法: + - 学习率; + - ReLU; + - 残差网络; + - 归一化(也适用梯度爆炸); + - 初始化(也适用梯度爆炸); + - 对特定神经网络RNN: LSTM;GAN: W-GAN。 + +### 卷积神经网络 +- 卷积运算实际上是把互相关中的卷积核旋转180◦ +- 卷积核的步长 (Stride) S 是指卷积核在滑动时的时间间隔为S;零填充(Zero Padding) P是在输入向量两端进行补P个零。 +- 输入图像有 M 个神经元,卷积核大小为K, 则卷积以后的神经元数量:(M − K + 2P)/S + 1 + - 窄卷积 (Narrow Convolution): S = 1, P = 0. 输出长度为 M − K + 1; + - 等宽卷积 (Equal-Width Convolution): S = 1, P = (K − 1)/2. 输出长度为 M; + - 宽卷积 (Wide Convolution): S = 1, P = K−1. 输出长度为 M +K−1。 +- 图像神经元之间插入0, 来输出高维的特征映射,这样的卷积称为微步卷积(Fractionally-Strided Convolution). 在卷积核中添加0, 使输出的特征映射维数降低,这样的卷积称为空洞卷积 (Atrous Convolution) 也称为膨胀卷积 (Dilated Convolution). +- 卷积层 $ X: M\times N \times D $ 张量 $ \rightarrow $ $ W: U\times V \times D \times P $ 张量 $ \rightarrow $ $ Y: M'\times N' \times P $ 张量。这里对D求和,D代表颜色通道。非线性激活函数,一般用ReLU,作用是舍弃一些卷积后产生的特征图中的负值即与该特征不大关联的数据。 +- 汇聚层(Pooling Layer)作用是进行特征选择,降低特征数量,扩大感受野,使得网络对一些小的局部形态改变保持不变性。但会丢失一部分信息。 +- 卷积网络是由卷积层、汇聚层、全连接层交叉堆叠而成。 +- 卷积层反向传播。 $ \delta^{l,d}:= \frac{\partial L}{\partial Z^{l,d}} = f_l'(Z^{l,d}) \odot \sum_p (rot(W^{l+1,p,d}) \otimes \delta^{l+1,p} ) $ ( $ Z^{l,d} $ 是M*N向量) +- 汇聚层反向传播。 $ \delta^{l,p}:= \frac{\partial L}{\partial Z^{l,p}} = f_l'(Z^{l,p}) \odot up( \delta^{l+1,p} ) $ 。up上采样 (up sampling)函数,对于最大汇聚每个区域除最大值处以外都是0; 对于平均汇聚被平均的分配到前一层每一格中。如果区域是有重叠的,重叠处的值直接叠加。 + + +### 循环神经网络 +- $ h_t = f(U h_{t-1} + W x_t +b) $ ,f是非线性激活函数,通常为 Logistic 函数或 Tanh 函数。 + - 序列到类别输出 $ y=g(h_T) $ + - 同步的序列到序列 $ y_t=g(h_t) $ + - 异步的序列到序列:也称为编码器-解码器。编码和前面一样,解码 $ h_{T+t} = f_2(h_{T+t-1} ,y_{t-1}), \, \, y_t = g(h_{T+t}) $ 用前面的输出y而非输入x。 +- 随时间反向传播(BackPropagation Through Time, BPTT) $ z_t:=U h_{t-1} + W x_t +b $ +$$ + \delta_{t,k}:= \frac{\partial L_t}{\partial z_{k}} =diag(f'(z_k)) U^T \delta_{t,k+1} \\ +\frac{\partial L}{\partial U}=\sum\limits_{t=1}^T \sum\limits_{k=1}^t \delta_{t,k} h_{k-1}^T\\ +\frac{\partial L}{\partial W}=\sum\limits_{t=1}^T \sum\limits_{k=1}^t \delta_{t,k} x_{k-1}^T\\ +\frac{\partial L}{\partial b}=\sum\limits_{t=1}^T \sum\limits_{k=1}^t \delta_{t,k} +$$ +- 因为 $ \frac{h_{t+1}}{h_t}=f'(z_{t+1})U^T $ ,长距离的梯度为多个乘积,如果U的最大特征根大于1, 梯度趋于无穷大即梯度爆炸问题 (Gradient Exploding Problem); 如果U 的最大特征根小于1, 这个梯度趋于0梯度消失问题 (Vanishing Gradient Problem)。消失不是说∂U梯度消失,而是∂hk梯度消失即参数U的更新主要靠当前时刻t的几个相邻状态来更新,长距离的状态对参数 U 没有影响。 +- 解决梯度爆炸问题,我们可以 + - 权重衰减:给参数增加正则化项来限制参数的取值范围; + - 梯度截断。 +- 长短期记忆网络 (LSTM),“门”指的是Logistic函数取值在 (0, 1) 之间,它设置了每个单元中应该通过的数据数量。 + - 遗忘门 (forget gate):控制上一个时刻的内部状态ct-1需要遗忘多少信息; + - 输入门:控制当前时刻的候选状态需要保存多少信息; + - 输出门:控制当前时刻的内部状态ct需要输出多少信息。 +- GRU不再额外增加内部状态,且只设有重置门 (reset gate) 和更新门 (update gate)。 GRU 更容易进行训练。在小规模数据时,CRU 效果与 LSTM 类似;但在数据规模较大时,LSTM效果更好。 +- 堆叠循环神经网络 (Stacked Recurrent Neural Network, SRNN) 也称为循环多层感知器 (Recurrent Multi Layer Perceptron, RMLP),多层RNN多个层的 $ h_t^{(l)} $ 。 +- 双向循环神经网络 (Bidirectional Recurrent Neural Network, Bi-RNN), $ h_t^{(1)} $ 依赖于前面的 $ h_{t-1}^{(1)} $ 和下面输入x, $ h_t^{(2)} $ 依赖于后面的 $ h_{t+1}^{(2)} $ 和下面输入x,输出y依赖于 $ h_t^{(1)} $ 和 $ h_t^{(2)} $ 。 +- 递归神经网络 (Recursive Neural Network, RecNN),类似于树结构输出为树根,输入为叶子。 \ No newline at end of file