数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
七、dropout
dropout
:在前向传播过程中,对网络中的每个隐层,每个隐单元都以一定的概率 $ MathJax-Element-412 $ 被删除,最后得到一个规模更小的网络。在反向传播过程中,仅仅针对该小网络进行权重更新。所谓的删除,即指定该该隐单元的输出都为 0。
一旦隐单元的权重为0,则该隐单元对后续神经元的影响均为 0 。
输入层和输出层的神经元不会被删除,因为这两个层的神经元的数量是固定的。
理论上可以对输入层应用
dropout
,使得可以有机会删除一个或者多个输入特征。但实际工程中,通常不会这么做。隐单元删除发生在一个训练样本的训练期间。
- 不同的训练样本,其删除的隐单元的集合是不同的,因此裁剪得到的小网络是不同的。
- 不同的训练样本,隐单元被删除的概率 $ MathJax-Element-412 $ 都是相同的。
- 在不同
batch
之间的同一个训练样本,其删除的隐单元的集合也是不同的。
在不同的梯度更新周期,会从完整的网络中随机删除不同的神经元,因此裁剪得到的小网络是不同的。
但是在这个过程中,隐单元被删除的概率是相同的。
可以指定某一个隐层或者某几个隐层执行
dropout
,而没有必要针对所有的隐层执行dropout
。可以对网络的每个隐单元指定不同的删除概率,但实际工程中,通常不会这么做。
定义一个掩码向量 $ MathJax-Element-428 $ ,它给出了哪些隐单元被保留哪些隐单元被删除:掩码为
0
的位置对应的隐单元被删除,掩码为1
的位置对应的隐单元被保留。定义 $ MathJax-Element-415 $ 为参数 $ MathJax-Element-467 $ 和掩码 $ MathJax-Element-461 $ 共同定义的模型代价,
dropout
的目标是最小化 $ MathJax-Element-418 $ 。- 这里采用期望,因为掩码向量 $ MathJax-Element-428 $ 是一个随机向量,对于每个训练样本 $ MathJax-Element-428 $ 都可能不同。
- 因为掩码向量具有指数多个,因此期望包含了指数多项。实际应用中,可以通过抽样 $ MathJax-Element-461 $ 来获得期望的无偏估计。
7.1 dropout 与 bagging
dropout
可以视作集成了非常多的神经网络的bagging
集成模型,这些网络包含了所有从基础网络中删除隐单元形成的子网络。bagging
涉及训练多个模型,并且在每个测试样本上评估多个模型。当每个模型都是一个大型神经网络时,这种bagging
计算量非常庞大,实际不可行。dropout
提供了一种方便的bagging
近似,它能够训练和评估指数级别的神经网络的集成。dropout
训练与bagging
训练不同:bagging
中,假设所有的子模型都是独立的。dropout
中,所有的子模型是共享参数的,每个子模型继承了基础神经网络的不同子集。参数共享使得在有限的内存下训练指数数量的子模型变得可能。
bagging
中,每个子模型在其相应的训练集上训练到收敛。dropout
中,大部分子模型都没有显式的被训练(因为指数量级的神经网络不可能被训练完成)。我们只是对子模型的某些部分训练单个
step
,同时参数共享使得子模型的剩余部分能够有较好的参数值。
除此之外,二者相同。比如每个子模型使用的训练集是原始训练集的一个有放回重复采样而来。
7.2 模型推断
dropout
仅仅用于神经网络的训练阶段,在网络的测试阶段并不会删除神经元,而是使用所有的神经元。因为在测试期间,不希望输出是随机的。如果在测试阶段使用
dropout
,则理论上需要运行多次dropout
测试过程,然后对输出结果取加权平均(或者几何平均)。这种做法的结果与不采用dropout
的测试结果相同,反而计算效率更低。在
dropout
情况下,每个子模型的输出为概率分布 $ MathJax-Element-422 $ ,不同的掩码 $ MathJax-Element-424 $ 就定义了不同的子模型。集成模型的输出由所有子模型输出的加权平均给出:
$ p_{ensemble}(y\mid \mathbf{\vec x})=\sum_{\vec\mu}p(\vec\mu)p(y\mid \mathbf{\vec x},\vec \mu) $其中 $ MathJax-Element-425 $ 是训练时 $ MathJax-Element-461 $ 的概率分布。之所以不采用 $ MathJax-Element-427 $ 这种代数平均(
k
为子模型数量),是因为 $ MathJax-Element-428 $ 掩码生成的概率不一定是均匀的。上式包含了指数量级的项,不可能计算出来。但是可以通过采样来近似推断,即对多个掩码对应的输出进行平均。通常 10-20 个掩码就足以获取不错的表现。
除了子模型输出的加权平均之外,还可以采用几何平均:
$ \tilde p_{ensemble}(y\mid \mathbf{\vec x})=\sqrt[2^{d}]{\prod_{\vec \mu}p(y\mid \mathbf{\vec x},\vec \mu) } $其中 $ MathJax-Element-429 $ 为所有的可以被丢弃的单元的数量,其丢弃/保留组合有 $ MathJax-Element-430 $ 种。
这里采用的是均匀分布的 $ MathJax-Element-461 $ (也可以采用非均匀分布),设丢弃和保留的概率都是 $ MathJax-Element-453 $ 。
多个概率分布的几何平均不一定是个概率分布,因此为了保证结果是一个概率分布,概率归一化为:
$ p_{ensemble}(y\mid \mathbf{\vec x})=\frac{\tilde p_{ensemble}(y\mid \mathbf{\vec x})}{\sum_{y^{\prime}} \tilde p_{ensemble}(y^{\prime}\mid \mathbf{\vec x})} $其中要求:没有任何一个子模型给出所有事件的概率为都为 0 (否则会导致 $ MathJax-Element-567 $ 都为 0 )。
实际应用中,并不需要直接求解 $ MathJax-Element-433 $ 。通常通过评估某个模型的 $ MathJax-Element-434 $ 来近似 $ MathJax-Element-435 $ 。该模型这样产生:该模型与
dropout
的基础模型具有相同的单元;该模型单元 $ MathJax-Element-437 $ 输出的权重需要乘以保留该单元 $ MathJax-Element-437 $ 的概率。这种策略叫做权重比例推断法则。目前这种做法在深度非线性网络上工作良好,但是没有任何理论上的证明。
7.3 示例
考虑
softmax
单元。假设 $ MathJax-Element-523 $ 表示 $ MathJax-Element-455 $ 个输入变量,则有: $ MathJax-Element-586 $ 。其中 $ MathJax-Element-441 $ 表示分类的类别, $ MathJax-Element-442 $ 表示输出的第 $ MathJax-Element-449 $ 个分量。假设给定掩码 $ MathJax-Element-444 $ 。其中 $ MathJax-Element-445 $ ,为二值随机变量:若它取值为
0
则表示输入 $ MathJax-Element-447 $ 被遗忘;若它取值为1
则表示输入 $ MathJax-Element-447 $ 被保留。且假设 $ MathJax-Element-612 $ 。则: $ MathJax-Element-592 $ 。其中 $ MathJax-Element-448 $ 表示逐元素的相乘。
$ \tilde p_{ensemble}(y\mid \mathbf{\vec v})=\sqrt[2^{n}]{\prod_{\mathbf{\vec d}\in \{0,1\}^{n}}p(y\mid \mathbf{\vec v};\mathbf{\vec d}) } $softmax
单元的输出为: $ MathJax-Element-615 $ 。其中 :化简上式:
$ \sqrt[2^{n}]{\prod_{\mathbf{\vec d}\in \{0,1\}^{n}}softmax(\mathbf W^T(\mathbf{\vec v}\odot \mathbf{\vec d})+\mathbf{\vec b})_y } = \sqrt[2^{n}]{\prod_{\mathbf{\vec d}\in \{0,1\}^{n}}\frac{\exp(\mathbf W _{y,:}\cdot(\mathbf{\vec v}\odot \mathbf{\vec d})+\mathbf{\vec b}_y)}{\sum_{y^{\prime}}\exp(\mathbf W _{y^{\prime},:}\cdot (\mathbf{\vec v}\odot \mathbf{\vec d})+\mathbf{\vec b}_{y^{\prime}})} } $其中 $ MathJax-Element-648 $ 表示矩阵 $ MathJax-Element-472 $ 的第 $ MathJax-Element-449 $ 列; $ MathJax-Element-668 $ 表示向量点乘。
忽略对 $ MathJax-Element-449 $ 不变的项,有:
$ \tilde p_{ensemble}(y\mid \mathbf{\vec v}) \propto \sqrt[2^{n}]{\prod_{\mathbf{\vec d}\in \{0,1\}^{n}} \exp(\mathbf W^{T}_{y,:}(\mathbf{\vec v}\odot \mathbf{\vec d})+\mathbf{\vec b}_y)} \\ = \exp\left(\frac 1{2^{n}}\sum_{\mathbf{\vec d}\in \{0,1\}^{n}} \mathbf W^{T}_{y,:}(\mathbf{\vec v}\odot \mathbf{\vec d})+\mathbf{\vec b}_y \right) $考虑 $ MathJax-Element-686 $ ,它就是 $ MathJax-Element-744 $ 。则有:
$ \tilde p_{ensemble}(y\mid \mathbf{\vec v}) \propto \exp\left(\frac 1{2^{n}}\sum_{\mathbf{\vec d}\in \{0,1\}^{n}} \mathbf W^{T}_{y,:}(\mathbf{\vec v}\odot \mathbf{\vec d})+\mathbf{\vec b}_y \right) =\exp\left(\frac 12\mathbf W_{y,:}\mathbf{\vec v}+\mathbf{\vec b}_y\right) $因此,
softmax
单元采用dropout
的结果就是权重为 $ MathJax-Element-454 $ 的softmax
单元。权重比例推断法在
softmax
以外的情况也是精确的,但是它对于非线性的深度模型仅仅是一个近似。虽然尚未有理论上的分析,但是在实践中往往效果非常好。
7.4 性质
dropout
不限制使用的模型或者训练过程,另外其计算非常方便。训练过程中使用
dropout
时,产生 $ MathJax-Element-455 $ 个随机二进制数与每个权重相乘。dropout
对于每个样本每次更新只需要 $ MathJax-Element-457 $ 的计算复杂度。根据需要也可能需要 $ MathJax-Element-457 $ 的存储空间来保存这些二进制数(直到反向传播阶段)。在预测过程中,计算代价与不使用
dropout
是一样的。
dropout
的缺点是:代价函数 $ MathJax-Element-413 $ 不再被明确定义,因为每次迭代时都会随机移除一部分隐单元。虽然
dropout
在模型训练的每一步上所做的工作是微不足道的(仅仅是随机地保留某些单元),但是在完整的训练结果上,该策略的效果非常显著。dropout
不仅是一种高效的近似bagging
的方法,它还是共享隐单元的集成模型,它通过参数共享来实现bagging
。这种参数共享策略不一定必须是
包括
和排除
(也就是二进制的 0 和1)。原则上任何一种随机的修改都可以接受。随机向量 $ MathJax-Element-461 $ 可以具有任何形式,而不一定要求它是掩码向量(取值为 0/1)。
Srivastava et al.(2014)
表明:将权重乘以 $ MathJax-Element-462 $ 要比基于二值掩码dropout
表现的更好。由于此时 $ MathJax-Element-463 $ ,则网络自动实现了集成方法的近似推断,因此不需要应用权重比例推断。
网络中的不同隐层的删除概率可以是变化的:
- 对于某些层,如果隐单元数量较少,过拟合的程度没有那么严重,则该层的 $ MathJax-Element-412 $ 值可以小一些。
- 对于一些层,如果隐单元数量较多,过拟合较严重,则该层 $ MathJax-Element-412 $ 的值可以较大。
- 对于一些层,如果不关心其过拟合问题,则该层的 $ MathJax-Element-412 $ 可以为
0
。
对一个隐层设定一个删除概率
p
,意思是对该层中所有隐单元设定同一个删除概率p
使用
dropout
有两点注意:在训练期间如果对某个单元的输入神经元执行了
dropout
,则推断期间该单元的输出要进行调整。假设该单元的输出为 $ MathJax-Element-408 $ ,则需要调整为 $ MathJax-Element-409 $ ,从而保证不影响该单元的输出值。
在测试期间,不必使用
dropout
。
7.5 dropout 与正则化
由于针对每个训练样本,训练的都是一个规模极小的网络,因此
dropout
也是一种正则化策略,它减少了模型的有效容量effective capacity
。为了抵抗模型有效容量的降低,必须增大模型的规模,此时需要更多的训练迭代次数。
- 对于非常大的数据集,
dropout
正则化带来的泛化误差减少得很小。此时使用dropout
带来的更大模型的计算代价可能超过了正则化带来的好处。 - 对于极小的数据集,
dropout
不会很有效。
- 对于非常大的数据集,
除非模型发生过拟合,否则不要轻易使用
dropout
。因为计算机视觉领域通常缺少足够的数据,所以非常容易发生过拟合。因此
dropout
在计算机视觉领域大量应用。Srivastava et al.(2014)
显示:dropout
比其他标准的、计算开销较小的正则化项(如 $ MathJax-Element-460 $ 正则化)更加有效。dropout
也可以与其他形式的正则化合并,进一步提升模型的泛化能力。dropout
训练时随机丢弃隐单元:这种随机性并不是产生正则化效果的必要条件,它仅是近似所有可能的子模型总和的一种方法。
这种随机性也不是产生正则化效果的充分条件。
Warde-Farley et al.(2014)
使用dropout boosting
策略(类似于boosting
)设计了一个对照试验,结果表明dropout boosting
几乎没有正则化的效果。
dropout
正则化效果主要来源于施加到隐单元的掩码噪声。这可以看作是对输入信息自适应破坏的一种形式。dropout
是对输入内容的某个结构进行了修改,而不是传统的噪声注入。dropout
的噪声是乘性的,而传统的噪声注入是加性的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论