数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
二、训练算法
2.1 BPTT 算法
以
多输出&隐-隐RNN
为例,设:输入到隐状态的权重为 $ \mathbf U $ ,隐状态到输出的权重为 $ \mathbf V $ ,隐状态到隐状态的权重为 $ \mathbf W $ , $ \mathbf{\vec b},\mathbf{\vec c} $ 为输入偏置向量和输出偏置向量;激活函数为双曲正切激活函数 $ \tanh $ 。设网络从特定的初始状态 $ \mathbf{\vec h}^{(0)} $ 开始前向传播,从 $ t=1 $ 到 $ t=\tau $ 的每个时间步,则有更新方程:
$ \mathbf{\vec a}^{(t)}=\mathbf{\vec b}+\mathbf W\mathbf{\vec h}^{(t-1)}+\mathbf U\mathbf{\vec x}^{(t)}\\ \mathbf{\vec h}^{(t)}=\tanh(\mathbf{\vec a}^{(t)})\\ \mathbf{\vec o}^{(t)}=\text{softmax}\left(\mathbf{\vec c}+\mathbf V\mathbf{\vec h}^{(t)}\right) $多输出&隐-隐RNN
的单个样本损失函数为: $ L = - \sum_{t=1}^{\tau}\sum_{k=1}^K \mathbb I_\left({k = y^{(t)}}\right) \log o_{k}^{(t)} $ 。该损失函数的梯度计算代价较高:- 因为每个时间步只能一前一后的计算无法并行化,因此时间复杂度为 $ O(\tau) $ 。
- 前向传播中各个状态必须保存直到它们反向传播中被再次使用,因此空间复杂度也是 $ O(\tau) $ 。
- 采用
tanh
激活函数而不是ReLU
激活函数的原因是为了缓解长期依赖。
back-propagation through time:BPTT
:通过时间反向传播算法,其算法复杂度为 $ O(\tau) $ 。由
BPTT
计算得到梯度,再结合任何通用的、基于梯度的技术就可以训练RNN
。计算图的节点包括参数 $ \mathbf U,\mathbf V,\mathbf W,\mathbf{\vec b},\mathbf{\vec c} $ ,以及以 $ t $ 为索引的节点序列 $ \mathbf{\vec x}^{(t)}, y^{(t)}, \mathbf{\vec h}^{(t)},\mathbf{\vec o}^{(t)} $ 以及 $ L^{(t)} $ 。
根据 $ L=\sum_{t=1}^{\tau} L^{(t)} $ ,则有: $ \frac{\partial L}{\partial L^{(t)}}=1 $ 。
令节点 $ \mathbf{\vec s}^{(t)} = \mathbf{\vec c}+\mathbf V\mathbf{\vec h}^{(t)} $ ,则有: $ \mathbf{\vec o}^{(t)}=\text{softmax}(\mathbf{\vec s}^{(t)}) $ 。则有:
$ L^{(t)} = - \sum_{k=1}^K \mathbb I_\left({k = y^{(t)}}\right) \log o_{k}^{(t)} = -s^{(t)}_{y^{(t)}} + \log \sum_{k=1}^K \exp(s_k^{(t)}) $其中 $ s_k^{(t) } $ 表示 $ \mathbf{\vec s}^{(t)} $ 的第 $ k $ 个分量。
则有:
$ \left(\nabla_{\mathbf{\vec s}^{(t)}}L\right)_k=\frac{\partial L}{\partial s_k^{(t)}}=\frac{\partial L}{\partial L^{(t)}}\times \frac{\partial L^{(t)}}{\partial s_k^{(t)}}=1\times \frac{\partial L^{(t)}}{\partial s_k^{(t)}}\\ =-\mathbb{ I}_{k= y^{(t)}}+\frac{\exp(s^{(t)}_k)}{\sum_{k^\prime=1}^{K}\exp(s^{(t)}_{k^\prime})} =o^{(t)}_k-\mathbb{ I}_{k= y^{(t)}} $$ \left(\nabla_{\mathbf{\vec s}^{(t)}}L\right)_k $ 表示梯度 $ \left(\nabla_{\mathbf{\vec s}^{(t)}}L\right) $ 的第 $ k $ 个分量, $ \mathbb I(\cdot ) $ 为示性函数。写成向量形式为:
$ \nabla_{\mathbf{\vec s}^{(t)}}L = \mathbf{\vec o}^{(t)} - \mathbf{\vec y}^{(t)} $其中 $ \mathbf{\vec y}^{(t)}=(0,\cdots,0,1,0,\cdots,0) $ 为真实标签 $ y^{(t)} $ 扩充得到的概率分布,其真实的类别 $ y_i^{(t)} $ 位置上的分量为 1,而其它位置上的分量为 0。
根据定义 $ \mathbf{\vec h}^{(t+1)}=\tanh(\mathbf{\vec b}+\mathbf W\mathbf{\vec h}^{(t)}+\mathbf U\mathbf{\vec x}^{(t+1)}) $ ,得到:
$ h^{(t+1)}_i=\tanh\left(b_i+\sum_{j}W_{i,j}h^{(t)}_j+\sum_{j}U_{i,j}x_j^{(t+1)}\right) $根据导数: $ d\frac{\tanh(x)}{d x}=1-\tanh^2(x) $ ,则有:
$ \frac{\partial h_i^{(t+1)}}{\partial h_j^{(t)}}=\left(1-(h_i^{(t+1)})^2\right)W_{i,j} $设隐向量长度为 $ n $ ,定义:
$ \frac{\partial\mathbf{\vec h}^{(t+1)}}{\partial\mathbf{\vec h}^{(t)} }=\begin{bmatrix} \frac{\partial h_1^{(t+1)}}{\partial h_1^{(t)}}&\cdots &\frac{\partial h_n^{(t+1)}}{\partial h_1^{(t)}}\\ \vdots&\ddots&\vdots\\ \frac{\partial h_1^{(t+1)}}{\partial h_N^{(t)}}&\cdots &\frac{\partial h_n^{(t+1)}}{\partial h_1^{(t)}} \end{bmatrix}\\ \quad\\ \text{diag}\left(1-(\mathbf{\vec h}^{(t+1)})^{2}\right)=\begin{bmatrix} 1-(h_1^{(t+1)})^2&0&\cdots&0\\ 0&1-(h_2^{(t+1)})^2&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&1-(h_n^{(t+1)})^2 \end{bmatrix} $则有: $ \frac{\partial\mathbf{\vec h}^{(t+1)}}{\partial\mathbf{\vec h}^{(t)} } =\text{diag}\left(1-(\mathbf{\vec h}^{(t+1)})^{2}\right) \mathbf W $ 。
根据定义 $ \mathbf{\vec s}^{(t)} = \mathbf{\vec c}+\mathbf V\mathbf{\vec h}^{(t)} $ ,即 $ s^{(t)}_i=c_i+\sum_{j}V_{i,j}h^{(t)}_j $ ,则有: $ \frac{\partial s^{(t)}_i}{\partial h_j^{(t)}}=V_{i,j} $ ,记作:
$ \frac{\mathbf{\partial \vec s}^{(t)}}{\partial\mathbf{\vec h}^{(t)} } =\mathbf V $因此得到隐单元的梯度:
当 $ t=\tau $ 时, $ \mathbf {\vec h}^{(\tau)} $ 只有一个后续结点 $ \mathbf{\vec o}^{(\tau)} $ (从而只有一个后继节点 $ \mathbf{\vec s}^{(\tau)} $ ) ,因此有:
$ \nabla_{\mathbf{\vec h}^{(\tau)}}L=\left(\frac{\mathbf{\partial \vec s}^{(t)}}{\partial\mathbf{\vec h}^{(t)} }\right)^{T}\nabla_{\mathbf{\vec s}^{(t)}}L=\mathbf V^{T}\nabla_{\mathbf{\vec s}^{(\tau)}}L $当 $ t\lt \tau $ 时, $ \mathbf {\vec h}^{(t)} $ 同时具有 $ \mathbf {\vec o}^{(t)},\mathbf {\vec h}^{(t+1)} $ 两个后续节点,因此有:
$ \nabla_{\mathbf{\vec h}^{(t)}}L=\left(\frac{\partial\mathbf{\vec h}^{(t+1)}}{\partial\mathbf{\vec h}^{(t)} }\right)^{T}\nabla_{\mathbf{\vec h}^{(t+1)}}L+\left(\frac{\partial \mathbf{\vec s}^{(t)}}{\partial\mathbf{\vec h}^{(t)} }\right)^{T}\nabla_{\mathbf{\vec s}^{(t)}}L\\ =\mathbf W^{T}(\nabla_{\mathbf{\vec h}^{(t+1)}}L)\text{diag}\left(1-(\mathbf{\vec h}^{(t+1)})^{2}\right)+\mathbf V^{T}\nabla_{\mathbf{\vec s}^{(t)}}L $由于 $ \nabla_{\mathbf{\vec h}^{(t)}}L $ 依赖于 $ \nabla_{\mathbf{\vec h}^{(t+1)}}L $ ,因此求解隐单元的梯度时,从末尾开始反向计算。
一旦获得了隐单元及输出单元的梯度,则可以获取参数节点的梯度。
注意:由于参数在多个时间步共享,因此在参数节点的微分操作时必须谨慎对待。
微分中的算子 $ \nabla _{\mathbf A}f $ 在计算 $ \mathbf A $ 对于 $ f $ 的贡献时,将计算图的所有边都考虑进去了。但是事实上:有一条边是 $ t $ 时间步的 $ \mathbf A $ ,还有一条边是 $ t+1 $ 时间步的 $ \mathbf A $ ,.... 。
为了消除歧义,使用虚拟变量 $ \mathbf A^{(t)} $ 作为 $ \mathbf A $ 的副本。用 $ \nabla _{\mathbf A^{(t)}} f $ 表示参数 $ \mathbf A $ 在时间步 $ t $ 对于梯度的贡献。将所有时间步上的梯度相加,即可得到 $ \nabla _{\mathbf A}f $ 。
根据定义 $ \mathbf{\vec s}^{(t)}=\mathbf{\vec c}^{(t)}+\mathbf V\mathbf{\vec h}^{(t)} $ ,即 $ s^{(t)}_i=c_i+\sum_{j}V_{i,j}^{(t)}h^{(t)}_j $ 。则有:
$ \frac{\partial \mathbf{\vec s}^{(t)}}{\partial \mathbf{\vec c}^{(t)}}=\mathbf I,\quad \frac{\partial s^{(t)}_i}{\partial V_{i,j}^{(t)}}=h_j^{(t)} $考虑到 $ \mathbf{\vec c} $ 对于每个输出 $ \mathbf{\vec o}^{(1)},\cdots,\mathbf{\vec o}^{(\tau)} $ 都有贡献,因此有:
$ \nabla _{\mathbf{\vec c}}L=\sum_{t=1}^{t=\tau}\left(\frac{\partial \mathbf{\vec s}^{(t)}}{\partial \mathbf{\vec c}^{(t)}}\right)^{T}\nabla_{\mathbf{\vec s}^{(t)}}L=\sum_{t=1}^{t=\tau}\nabla_{\mathbf{\vec s}^{(t)}}L $记:
$ \nabla_{V_{k,:}^{(t)}}s_i^{(t)}=\begin{cases}\mathbf{\vec h}^{(t)},&i=k\\ \mathbf{\vec 0},&i\ne k \end{cases} $考虑到 $ \mathbf V $ 对于每个输出 $ \mathbf{\vec o}^{(1)},\cdots,\mathbf{\vec o}^{(\tau)} $ 都有贡献,因此有:
$ \nabla_{V_{i,:}}L=\sum_{t=1}^{t=\tau}\left(\frac{\partial L}{\partial s_i^{(t)}}\right)\nabla_{V_{i,:}^{(t)}} s_i^{(t)}=\sum_{t=1}^{t=\tau}(\nabla_{\mathbf{\vec s}^{(t)}}L)_i\mathbf{\vec h}^{(t)} $其中 $ (\nabla_{\mathbf{\vec s}^{(t)}}L)_i $ 表示 $ \nabla_{\mathbf{\vec s}^{(t)}}L $ 的第 $ i $ 个分量。
根据定义 $ \mathbf{\vec h}^{(t)}=\tanh(\mathbf{\vec b}^{(t)}+\mathbf W\mathbf{\vec h}^{(t-1)}+\mathbf U\mathbf{\vec x}^{(t)}) $ ,即:
$ h^{(t)}_i=\tanh\left(b_i+\sum_{j}W_{i,j}^{(t)}h^{(t-1)}_j+\sum_{j}U_{i,j}x_j^{(t)}\right) $则有:
$ \frac{\partial \mathbf{\vec h}^{(t)}}{\partial \mathbf{\vec b}^{(t)}}=\text{diag}\left(1-(\mathbf{\vec h}^{(t)})^{2}\right),\quad \frac{\partial h_i^{(t)}}{\partial W^{(t)}_{i,j}}=(1-h_i^{(t)2})h_j^{(t-1)},\quad \frac{\partial h_i^{(t)}}{\partial U_{i,j}^{(t)}}=(1-h_i^{(t)2})x_j^{(t)} $考虑到 $ \mathbf{\vec b} $ 对于每个隐向量 $ \mathbf{\vec h}^{(1)},\cdots,\mathbf{\vec h}^{(\tau)} $ 都有贡献,因此有:
$ \nabla _{\mathbf{\vec b}}L=\sum_{t=1}^{t=\tau}\left(\frac{\partial \mathbf{\vec h}^{(t)}}{\partial \mathbf{\vec b}^{(t)}}\right)^{T}\nabla_{\mathbf{\vec h}^{(t)}}L=\sum_{t=1}^{t=\tau}\text{diag}\left(1-(\mathbf{\vec h}^{(t)})^{2}\right)\nabla_{\mathbf{\vec h}^{(t)}}L $记:
$ \nabla_{W^{(t)}_{k,:}}h_i^{(t)}=\begin{cases}(1-h_i^{(t)2})\mathbf{\vec h}^{(t-1)},&i=k\\ \mathbf{\vec 0},&i\ne k \end{cases} $考虑到每个 $ \mathbf W^{(t)} $ 都对 $ L $ 有贡献,则:
$ \nabla_{W_{i,:}} L=\sum_{t=1}^{t=\tau}\left(\frac{\partial L}{\partial h_i^{(t)}}\right) \nabla_{W^{(t)}_{i,:}} h_i^{(t)} =\sum_{t=1}^{t=\tau} (\nabla_{\mathbf{\vec h}^{(t)}}L)_i \left(1-h_i^{(t)2}\right)\mathbf{\vec h}^{(t-1)} $其中 $ (\nabla_{\mathbf{\vec h}^{(t)}}L)_i $ 表示 $ \nabla_{\mathbf{\vec h}^{(t)}}L $ 的第 $ i $ 个分量。
记:
$ \nabla_{U_{k,:}^{(t)}}h_i^{(t)}=\begin{cases}(1-h_i^{(t)2})\mathbf{\vec x}^{(t)},&i=k\\ \mathbf{\vec 0},&i\ne k \end{cases} $考虑到每个 $ \mathbf U^{(t)} $ 都对 $ L $ 有贡献,则:
$ \nabla_{U_{i,:}} L=\sum_{t=1}^{t=\tau}\left(\frac{\partial L}{\partial h_i^{(t)}}\right) \nabla_{U_{i,:}^{(t)}} h_i^{(t)} =\sum_{t=1}^{t=\tau} (\nabla_{\mathbf{\vec h}^{(t)}}L)_i \left(1-h_i^{(t)2}\right)\mathbf{\vec x}^{(t)} $其中 $ (\nabla_{\mathbf{\vec h}^{(t)}}L)_i $ 表示 $ \nabla_{\mathbf{\vec h}^{(t)}}L $ 的第 $ i $ 个分量。
因为任何参数都不是训练数据 $ \mathbf{\vec x}^{(t)} $ 的父节点,因此不需要计算 $ \nabla _{\mathbf{\vec x}^{(t)}} L $ 。
2.2 Teacher forcing 算法
多输出&输出-隐连接RNN
模型可以使用teacher forcing
算法进行训练。- 模型的数学表示: $ o^{(t)}_k=p(y^{(t)} = k \mid y^{(t-1)},\mathbf{\vec x}^{(t)}),\quad k = 1,2,\cdots,K $
- 单个样本的损失: $ L = - \sum_{t=1}^{\tau}\sum_{k=1}^K \mathbb I_\left({k = y^{(t)}}\right) \log o_{k}^{(t)} $
- 训练时:在时刻 $ t+1 $ 接受真实类别分布 $ \mathbf{\vec y}^{(t)} $ 作为输入,而不必等待 $ t $ 时刻的模型输出分布 $ \mathbf{\vec o}^{(t)} $ 。
- 推断时:真实的标记通常是未知的,因此必须用模型的输出分布 $ \mathbf{\vec o}^ {(t)} $ 。
teacher forcing
训练的本质原因是:当前隐状态与早期隐状态没有直接连接。虽然有间接连接,但是由于 $ y^{(t)} $ 已知,因此这种连接被切断。- 如果模型的隐状态依赖于早期时间步的隐状态,则需要采用
BPTT
算法。 - 某些模型训练时,需要同时使用
teacher forcing
和BPTT
算法。
- 如果模型的隐状态依赖于早期时间步的隐状态,则需要采用
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论