数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
五、早停
当训练一个容量较大的模型时会经常发现:训练误差逐渐降低,但是验证误差先下降后上升。
当验证误差没有进一步改善时,算法就提前终止。这种策略被称作早停
early stopping
。早停是深度学习中最常用的正则化形式,因为它简单、有效。
当训练终止时,返回的不是最新的模型参数,而是验证误差最小的模型参数,因此需要频繁存储模型参数。
5.1 早停算法
早停算法:
输入:
- 当前验证集的误差非最小值的次数 $ MathJax-Element-300 $
- 验证集验证的间隔 $ MathJax-Element-455 $
- 初始参数 $ MathJax-Element-380 $
输出:
- 最佳参数 $ MathJax-Element-282 $
- 获得最佳参数时迭代的步数 $ MathJax-Element-315 $
算法步骤:
初始化:
- 参数变量 $ MathJax-Element-284 $
- 迭代步数变量 $ MathJax-Element-285 $
- 验证次数变量 $ MathJax-Element-286 $
- 验证集的最小误差 $ MathJax-Element-287 $
- 最佳参数 $ MathJax-Element-288 $
- 最佳迭代步数 $ MathJax-Element-289 $
循环,循环条件为: $ MathJax-Element-290 $ :
学习模型 $ MathJax-Element-455 $ 步(每隔 $ MathJax-Element-455 $ 步验证一次)
更新 $ MathJax-Element-293 $
记录最新的验证集误差 $ MathJax-Element-294 $
如果 $ MathJax-Element-295 $ ,则: $ MathJax-Element-296 $ 。
如果 $ MathJax-Element-297 $ ,则: $ MathJax-Element-298 $ 。
若当前验证集误差是最小的,则 $ MathJax-Element-299 $ 清零。这意味着必须连续 $ MathJax-Element-300 $ 次 $ MathJax-Element-301 $ ,才说明算法到达终止条件。
可以认为早停是一个非常高效的超参数选择算法:训练步数是一个超参数,该超参数在验证误差上具有
U
形曲线。- 早停策略通过控制训练步数来控制模型的有效容量
capacity
。 - 早停策略只需要跑一轮训练就能够得到很多的超参数(即:训练步数)及其对应的验证误差。
- 早停策略通过控制训练步数来控制模型的有效容量
早停策略的代价有两个:
需要在训练期间定期评估验证集。
- 可以通过并行的执行训练和验证来加速这一过程。
- 也可以选取一个较小的验证集、或者不那么频繁地评估验证集来减小评估代价。
需要保持最佳的参数的副本。
这种代价一般可以忽略不计。
早停是正则化的一种非常不起眼的形式,其优点有:
- 它几乎不需要干涉基本的训练过程,适合任何模型。
- 可以单独使用,或者与其他的正则化策略相结合。
- 早停不仅有正则化的好处,还有降低计算成本的好处。
以泛化误差的偏差方差分解角度来看,早停试图同时解决偏差和方差,其结果很可能导致得到的模型并不是一个最优的模型。
如下图中所示的验证误差曲线。因为提前停止了训练,所以使得代价函数的值可能不够小,即:偏差可能还可以继续降低。方差(即:验证误差与训练误差之间的
gap
) 虽然处于上升趋势,但是它们叠加的结果可能导致验证误差呈现波动走势。
5.2 二次训练
早停需要验证集,这意味着某些样本不能用于模型的训练过程,这会造成数据的浪费。
为了更好地利用验证集的样本,可以在早停之后进行额外的训练。在第二轮额外的训练中,所有的训练数据都被包括在内(包括验证集)。
有两个基本的策略可以用于第二轮训练过程 :
保留迭代步:再次初始化模型,然后使用所有数据再次训练。此时使用第一轮早停确定的最佳步数作为第二轮的迭代步数。
该策略重新训练模型,成本较高,但是效果较好。
保留参数:保持从第一轮训练中获得的参数,然后使用全部的数据继续训练。此时观察原始验证集的损失函数,直到它低于第一轮停止时的原始训练集的损失函数值。
根据早停策略,第一轮结束时原始验证集的损失函数值是较大的
该策略避免了重新训练模型的高成本,但是表现一般。
这是因为一旦将 $ MathJax-Element-324 $ 合并到训练集,则对它们评估的结果就是训练误差(而不再是验证误差)。新的训练误差小于原来的验证误差,并不能说明模型的泛化能力得到了提升。
保留迭代步二次训练算法:
输入:
- 训练集 $ MathJax-Element-318 $ , $ MathJax-Element-319 $
- 训练集 $ MathJax-Element-318 $ , $ MathJax-Element-319 $
步骤:
- 将 $ MathJax-Element-318 $ 和 $ MathJax-Element-319 $ 分割为 $ MathJax-Element-323 $ 和 $ MathJax-Element-324 $
- 随机选择参数的初始化值 $ MathJax-Element-380 $ ,将 $ MathJax-Element-323 $ 作为训练集, 将 $ MathJax-Element-324 $ 作为验证集,运行早停算法,返回最佳训练步数 $ MathJax-Element-315 $
- 再次选择参数的另一个初始化值 $ MathJax-Element-313 $ ,在 $ MathJax-Element-314 $ 上再次训练 $ MathJax-Element-315 $ 步
保留参数二次训练算法:
输入:
- 训练集 $ MathJax-Element-318 $ , $ MathJax-Element-319 $
- 训练集 $ MathJax-Element-318 $ , $ MathJax-Element-319 $
步骤:
将 $ MathJax-Element-318 $ 和 $ MathJax-Element-319 $ 分割为 $ MathJax-Element-323 $ 和 $ MathJax-Element-324 $
随机选择参数的初始化值 $ MathJax-Element-380 $ ,将 $ MathJax-Element-323 $ 作为训练集, 将 $ MathJax-Element-324 $ 作为验证集,运行早停算法,返回算法停止时的目标函数的值 $ MathJax-Element-325 $
迭代: $ MathJax-Element-326 $
- 在 $ MathJax-Element-327 $ 上训练 $ MathJax-Element-455 $ 步 (每隔 $ MathJax-Element-455 $ 步检查一次,为了降低评估代价)
5.3 早停与 L2 正则化
早停将优化过程的参数空间限制在初始参数值 $ MathJax-Element-380 $ 的一个小的邻域内。
假设参数 $ MathJax-Element-331 $ 。令 $ MathJax-Element-332 $ ,它就是无正则化项时使得目标函数最小的权重向量。
和 $ MathJax-Element-460 $ 正则化中的推导相同,有: $ MathJax-Element-334 $ 。
$ MathJax-Element-363 $ 为 $ MathJax-Element-413 $ 在 $ MathJax-Element-361 $ 处的海森矩阵, 其中 $ MathJax-Element-526 $ 在 $ MathJax-Element-361 $ 的一个邻域内。
根据梯度下降法,参数的迭代过程为:
$ \mathbf{\vec w}^{(\tau)}=\mathbf{\vec w}^{(\tau-1)}-\epsilon \nabla_{\mathbf{\vec w}}\hat J(\mathbf{\vec w}^{(\tau-1)})=\mathbf{\vec w}^{(\tau-1)}-\epsilon\mathbf H(\mathbf{\vec w}^{(\tau-1)}-\mathbf{\vec w}^{*})\\ \rightarrow \mathbf{\vec w}^{(\tau)}-\mathbf{\vec w}^{*}=(\mathbf I-\epsilon\mathbf H)(\mathbf{\vec w}^{(\tau-1)}-\mathbf{\vec w}^{*}) $注意:这里并没有加入任何正则化项,而是使用 $ MathJax-Element-413 $
将 $ MathJax-Element-363 $ 进行特征分解: $ MathJax-Element-342 $ ,其中 $ MathJax-Element-343 $ 为对角矩阵, $ MathJax-Element-344 $ 为特征向量的一组标准正交基。则有:
$ \mathbf{\vec w}^{(\tau)}-\mathbf{\vec w}^{*}=\mathbf Q(\mathbf I-\epsilon\Lambda)\mathbf Q^{T}(\mathbf{\vec w}^{(\tau-1)}-\mathbf{\vec w}^{*}) \\ \rightarrow \mathbf Q^{T}(\mathbf{\vec w}^{(\tau)}-\mathbf{\vec w}^{*})=(\mathbf I-\epsilon\Lambda)\mathbf Q^{T}(\mathbf{\vec w}^{(\tau-1)}-\mathbf{\vec w}^{*}) $令参数向量的初始值为原点: $ MathJax-Element-345 $ ,并且选择 $ MathJax-Element-492 $ 使得 $ MathJax-Element-347 $ ( $ MathJax-Element-348 $ 为 $ MathJax-Element-363 $ 的特征值)。则经过 $ MathJax-Element-377 $ 次参数更新之后: $ MathJax-Element-351 $ 。
根据 $ MathJax-Element-460 $ 正则化项中的推导结果,有:
$ \tilde{\mathbf{\vec w}}^{*}=\mathbf Q(\mathbf \Lambda+ \alpha\mathbf I)^{-1}\mathbf \Lambda\mathbf Q^{T} \mathbf{\vec w}^{*} \\ \rightarrow \mathbf Q^{T}\tilde{\mathbf{\vec w}}^{*}=(\mathbf \Lambda+ \alpha\mathbf I)^{-1}\mathbf \Lambda\mathbf Q^{T} \mathbf{\vec w}^{*} = [\mathbf I-(\Lambda+\alpha\mathbf I)^{-1}\alpha]\mathbf Q^{T} \mathbf{\vec w}^{*} $通过直接写出逆矩阵的形式可以证明等式
如果超参数 $ MathJax-Element-353 $ 满足: $ MathJax-Element-354 $ ,则 $ MathJax-Element-460 $ 正则化等价于早停。
为了求得三个超参数满足的条件,求解:
$ \begin{bmatrix} (1-\epsilon\lambda_1)^{\tau}&0&\cdots&0\\ 0&(1-\epsilon\lambda_2)^{\tau}&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&(1-\epsilon\lambda_n)^{\tau}\\ \end{bmatrix}=\begin{bmatrix} \frac{\alpha}{\lambda_1+\alpha}&0&\cdots&0\\ 0&\frac{\alpha}{\lambda_2+\alpha}&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&\frac{\alpha}{\lambda_n+\alpha}\\ \end{bmatrix} $则有: $ MathJax-Element-356 $ 。
两边取对数,然后使用 $ MathJax-Element-357 $ 的级数展开有(假设 $ MathJax-Element-358 $ ,且 $ MathJax-Element-359 $ ): $ MathJax-Element-360 $ 。
由于 $ MathJax-Element-361 $ 是 $ MathJax-Element-362 $ 的最小点,因此海森矩阵 $ MathJax-Element-363 $ 是半正定的,因此其特征值 $ MathJax-Element-364 $
则有: $ MathJax-Element-365 $ 。即: $ MathJax-Element-366 $ 的倒数与 $ MathJax-Element-460 $ 正则化系数的作用类似。
在给定 $ MathJax-Element-492 $ 的条件下:
- $ MathJax-Element-377 $ 越小,则正则化系数越大。这与以下事实吻合: $ MathJax-Element-526 $ 从原点出发开始迭代,如果 $ MathJax-Element-377 $ 越小,则 $ MathJax-Element-526 $ 越靠近原点。
- $ MathJax-Element-377 $ 越大,则正则化系数越小。这与以下事实吻合:此时 $ MathJax-Element-526 $ 迭代足够多步之后会逐渐远离原点。
假设用学习率 $ MathJax-Element-492 $ 进行了 $ MathJax-Element-377 $ 个优化步骤(对应于 $ MathJax-Element-377 $ 个训练迭代), $ MathJax-Element-381 $ 可以视作模型的有效容量
effective capacity
的度量。假设梯度有界,则限制迭代的次数和学习率,会限制 $ MathJax-Element-467 $ 从 $ MathJax-Element-380 $ 能够到达的范围。 $ MathJax-Element-381 $ 的行为就像是 $ MathJax-Element-460 $ 正则化项的系数的倒数。
早停比 $ MathJax-Element-460 $ 正则化更有优势:
早停能够监控验证误差,从而自动在某个较好的参数解的位置终止。
训练一次就相当于得到了多个超参数 $ MathJax-Element-386 $ 的结果。
采用 $ MathJax-Element-460 $ 正则化需要多次训练,从而选择合适的超参数 $ MathJax-Element-386 $ 的值。
这种方式的计算成本太高。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论