数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
三、 mini-batch
机器学习算法和一般最优化算法不同的一点:机器学习算法的目标函数通常可以分解为每个训练样本上的损失函数的求和。如: $ \vec\theta_{ML}=\arg\max_{\vec\theta}\sum_{i=1}^{N}\log p_{model}(\mathbf{\vec x}_i,y_i;\vec\theta) $ 。
最大化这个总和,等价于最大化训练集在经验分布上的期望:
$ J(\vec\theta)=\mathbb E_{(\mathbf{\vec x},y)\sim \hat p_{data}}\log p_{model}(\mathbf{\vec x} ,y ;\vec\theta) $当使用基于梯度的优化算法求解时,需要用到梯度:
$ \nabla_\vec\theta J(\vec\theta)=\nabla_\vec\theta [\mathbb E_{(\mathbf{\vec x},y)\sim \hat p_{data}}\log p_{model}(\mathbf{\vec x} ,y ;\vec\theta)] = \mathbb E_{(\mathbf{\vec x},y)\sim \hat p_{data}} \nabla_\vec\theta\log p_{model}(\mathbf{\vec x} ,y ;\vec\theta) $这个梯度本质上也是一个期望,要准确的求解这个期望的计算量非常大,因为需要计算整个数据集上的每一个样本。
实践中,可以从数据集中随机采样少量的样本,然后计算这些样本上的梯度的均值,将这个均值作为该期望的一个估计。
使用小批量样本来估计梯度的原因:
使用更多样本来估计梯度的方法的收益是低于线性的。
独立同分布的 $ n $ 个样本的均值 $ \bar X $ 是个随机变量,其标准差为 $ \frac{\sigma}{\sqrt{n}} $ ,其中 $ \sigma $ 为样本的真实标准差。
如果能够快速计算出梯度的估计值(而不是费时地计算准确值),则大多数优化算法会更快收敛。
大多数优化算法基于梯度下降,如果每一步中计算梯度的时间大大缩短,则它们会更快收敛。
训练集存在冗余。
实践中可能发现:大量样本都对梯度做出了非常相似的贡献。
最坏情况下, 训练集中的 $ N $ 个样本都是相同的拷贝。此时基于小批量样本估计梯度的策略也能够计算正确的梯度,但是节省了大量时间。
使用整个训练集的优化算法被称作
batch
梯度算法(或者确定性deterministic
梯度算法)。每次只使用单个样本的优化算法被称作随机
stochastic
算法(或者在线online
算法)。大多数深度学习的优化算法介于两者之间:使用一个以上、又不是采用全部的训练样本,称作
mini-batch
或者mini-batch
随机算法。当使用小批量样本来估计梯度时,由于估计的梯度往往会偏离真实的梯度,这可以视作在学习过程中加入了噪声扰动。这种扰动会带来一些正则化效果。
3.1 mini-batch 大小
mini-batch
的大小由下列因素决定:不能太大。更大的
batch
会使得训练更快,但是可能导致泛化能力下降。训练更快是因为:
更大的
batch size
只需要更少的迭代步数就可以使得训练误差收敛。因为
batch size
越大,则小批量样本来估计总体梯度越可靠,则每次参数更新沿着总体梯度的负方向的概率越大。另外,训练误差收敛速度快,并不意味着模型的泛化性能强。
更大的
batch size
可以利用大规模数据并行的优势。
泛化能力下降是因为:更大的
batch size
计算的梯度估计更精确,它带来更小的梯度噪声。此时噪声的力量太小,不足以将参数推出一个尖锐极小值的吸引区域。解决方案为:提高学习率,从而放大梯度噪声的贡献。
不能太小。因为对于多核架构来讲,太小的
batch
并不会相应地减少计算时间(考虑到多核之间的同步开销)。如果
batch
中所有样本可以并行地预处理,则内存消耗和batch
大小成正比。对于许多硬件设备来说,这就是
batch
大小的限制因素。在有些硬件上,特定大小的效果更好。
在使用
GPU
时,通常使用 2 的幂作为batch
大小。
泛化误差通常在
batch
大小为 1 时最好,但此时梯度估计值的方差非常大,因此需要非常小的学习速率以维持稳定性。如果学习速率过大,则导致步长的变化剧烈。由于需要降低学习速率,因此需要消耗更多的迭代次数来训练。虽然每一轮迭代中,计算梯度估计值的时间大幅度降低了(
batch size
为 1),但是总的运行时间还是非常大。某些算法对采样误差非常敏感,此时
mini-batch
效果较差。原因可能有两个:- 这些算法需要用到全部样本的一些精确信息,但是这些信息难以在少量样本上估计到。
- 这些算法会放大采样误差,导致误差积累越来越严重。
通常仅仅基于梯度 $ \mathbf{\vec g} $ 的更新方法相对更稳定,它能够处理更小的
batch
(如100)。如果使用了黑塞矩阵 $ \mathbf H $ (如需要计算 $ \mathbf H^{-1}\mathbf{\vec g} $ 的二阶方法) 通常需要更大的
batch
(如 10000)。- 即使 $ \mathbf H $ 被精确估计,但是它的条件数很差,那么乘以 $ \mathbf H $ 或者 $ \mathbf H^{-1} $ 会放大之前存在的误差。这就导致 $ \mathbf{\vec g} $ 的一个非常小的变化也会导致 $ \mathbf H^{-1}\mathbf{\vec g} $ 的一个非常大的变化。因此
batch
需要更大从而降低梯度估计的方差。 - 通常只是近似地估计 $ \mathbf H $ ,因此只会引入更多的误差。
- 即使 $ \mathbf H $ 被精确估计,但是它的条件数很差,那么乘以 $ \mathbf H $ 或者 $ \mathbf H^{-1} $ 会放大之前存在的误差。这就导致 $ \mathbf{\vec g} $ 的一个非常小的变化也会导致 $ \mathbf H^{-1}\mathbf{\vec g} $ 的一个非常大的变化。因此
3.2 随机抽样
mini-batch
是随机抽样的也非常重要。从一组样本中计算出梯度期望的无偏估计要求:组内的样本是独立的。另外,也希望两个连续的梯度估计也是相互独立的。这要求:两个连续的
mini-batch
样本集合也应该是彼此独立的。实际应用中,采集的数据样本很可能出现这样的情况:连续的样本之间具有高度相关性。
如:统计人群的偏好,很可能连续的样本就是同一个家庭、同一个职业、同一个地域...。
解决方法是:将样本随机混洗之后存储,训练时按照混洗之后的顺序读取。
这种打乱顺序不会对
mini-batch
产生严重的影响,不打乱顺序的mini-batch
才会极大降低算法泛化能力。mini-batch
可以异步并行分布式更新:在计算mini-batch
样本集合 $ \mathbb X_i $ 上梯度更新时,也可以同时计算其他mini-batch
样本集合 $ \mathbb X_j $ 上的更新。
3.3 重复样本
当 $ \mathbf{\vec x},y $ 都是离散时,泛化误差的期望:
$ J^{*}(\vec\theta)=\mathbb E_{(\mathbf{\vec x},y)\sim p_{data}} L(f(\mathbf{\vec x};\vec\theta),y) =\sum_{(\mathbf{\vec x},y)} p_{data}(\mathbf{\vec x},y) L(f(\mathbf{\vec x};\vec\theta),y) $其梯度为:
$ \mathbf{\vec g}=\nabla_{\vec\theta}J^{*}(\vec\theta)=\sum_{(\mathbf{\vec x},y)} p_{data}(\mathbf{\vec x},y) \nabla_{\vec\theta}L(f(\mathbf{\vec x};\vec\theta),y) $泛化误差的梯度的无偏估计可以通过从数据生成分布 $ p_{data} $ 抽取
$ \hat{\mathbf{\vec g}}= \frac 1m \nabla_{\vec\theta}\sum_{i=1}^{m}L(f(\mathbf{\vec x}_i;\vec\theta),y_i) $mini-batch
样本 $ \{\mathbf{\vec x}_1,\mathbf{\vec x}_2,\cdots,\mathbf{\vec x}_m\} $ 以及对应的标签 $ \{y_1,y_2,\cdots,y_m\} $ ,然后计算mini-batch
上的损失函数对于 $ \vec\theta $ 的梯度:它就是 $ \mathbf{\vec g} $ 的无偏估计。
因此,
mini-batch
随机梯度下降中,只要没有重复使用样本,它就是真实泛化误差梯度的无偏估计。如果是在线学习,则每个样本或者
mini-batch
都不会重复。每次更新都是独立地从真实分布 $ p_{data} $ 中采样获得。如果训练集不大,通常需要多次遍历训练集,此时只有第一遍满足泛化误差的梯度的无偏估计。
后续的遍历中,泛化误差的梯度估计不再是无偏的。但是后续的遍历会减小训练误差,从而抵消了训练误差和测试误差之间
gap
的增加。最终效果是:减小了测试误差。随着数据集规模的爆炸性增长,超过了计算能力的增长速度,现在普遍地对每个样本只使用一次,甚至不完整地使用训练集。
此时过拟合不再是问题,欠拟合以及计算效率成为主要问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论