Deep Learning—从RNN到GPT模型(Ⅰ)

从RNN到GPT

目录

简介

RNN

LSTM与GRU

Attention机制

word2vec与Word Embedding编码(词嵌入编码)

seq2seq模型

Transformer模型

GPT与BERT

简介

最近在学习GPT模型的同时梳理出一条知识脉络,现将此知识脉络涉及的每一个环节整理出来,一是对一些涉及的细节进行分析研究,二是对一些背后的数学原理进行详细的数学推导。本文的知识脉络如下图:

16799938334517.png

下面本文先从RNN开始推导。

RNN

定义

与DNN和CNN相比,循环神经网络(RNN)是以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network) 。

其研究始于20世纪80-90年代,并在21世纪初发展为深度学习(deep learning)算法之一,其代表模型为双向循环神经网络(Bidirectional RNN, Bi-RNN)和长短期记忆网络(Long Short-Term Memory networks,LSTM)。

结构

RNN 不同于传统神经网络的感知机的最大特征就是跟时间挂上钩,即包含了一个循环的网络,就是下一时间的结果不仅受下一时间的输入的影响,也受上一时间输出的影响,进一步地说就是信息具有持久的影响力。放在实际中也很容易理解,人们在看到新的信息的时候产生的看法或者判断,不仅仅是对当前信息的反应,先前的经验、思想也参与这次信息的推断。人类的大脑不是一张白纸,是包含许多先验信息的,即思想的存在性、持久性是显然的。

所以,考虑上面说所的,我们进行时序上判断时,会有一个当前的输入数据X_t,先验的经验和思想,这一变量用上一时刻的隐状态h_{t-1}来代表。当前正确的推断y_t。另外我们用o_t来指代当前的输出,用L来指代损失函数。那么RNN的结构如下图:

16799938661826.png

图中红色的圈是一个隐藏层,为了生成隐藏状态h_t:
h_t=f(U*X_t+W*h_{t-1}+b )

此表达式的含义是,当前t时刻的思想和状态(隐状态)h_t来自当前的输入和上一时刻的思想和状态(隐状态)。其中f为激活函数,原始模型的激活函数为tanh函数,也正是这个激活函数的原因导致了RNN的一大问题,梯度消失和梯度爆炸。至于为什么使用激活函数,原因和CNN与DNN一致,如果不使用激活函数,一堆线性矩阵相乘永远是线性模型,不可能得到非线性模型。

有了隐状态(当前的思想和状态)就可以给出当前的输出o_t:
o_t=V*h_t+c

有了模型的输出,距离模型预测还有一步,一般在处理多分类问题时,还会有一个Softmax的操作,将o_t映射成预测值。

所以最后的损失函数L:
L=y_t-softmax(o_t)

有了损失函数,那么我们就可以用优化算法求解RNN中的参数:W、U、V、b、c。

上面就是RNN的结构,RNN的结构涉及到神经网络模型的几个概念,下面对损失函数L、Softmax、激活函数f一一展开。

在此之前,为了下面推导的方便,我们先将分类分布函数表达成指数分布族表达式。

分类分布函数的指数分布族表达式

给定参数\theta,对于统计变量x,如果其概率密度p(x|\theta)可以写成如下表达式:
p(x|\theta)=h(x)exp\{\eta(\theta)^T T(x)-A(\theta) \}

其中:h(x),\eta(\theta),T(\theta),A(\theta)为已知函数。

那么该概率分布属于指数分布族。

如果使用\eta当作参数,其概率密度也可以表达成:
p(x|\eta)=h(x)exp\{\eta^T T(x)-A(\eta) \}

其中T(x)表示分布的充分统计量。\eta是自然参数,A(\eta)是负责归一化的log配分函数。

那么该概率分布属于指数分布族。

常见的正太分布,伯努利分布,多项式分布都属于指数分布族。

下面将分类分布(M_k(1,\pi))推导成上面指数族表达式。

首先指出的是,M_k(1,\pi) 分布是多项式分布的特殊形式,即多项式分布M_k(n,\pi)在n=1下的形式。

若事件A_1,A_2....A_K为基本空间\Omega的一个分割,即:
A_i \cap A_j=\emptyset ,i \neq j
A_1 \cup A_2... \cup A_k=\Omega

又若:
P(A_i)=\pi_i,i=1,2..k
\sum_{i=1}^k\pi=1

为表示事件A_i的发生与否,使用下列随机变量\vec{\xi}

\vec{\xi}=(\xi_1,\xi_2,....\xi_k )^T=(1_{A_1},1_{A_2}.....1_{A_k})^T

其中1_{A_{i}}为示性函数,事件A_i发生,则值为1,事件A_i不发生,则值为0。


P(\vec{\xi}=(1,0,...0)^T)=\pi_1
P(\vec{\xi}=(0,1,...0)^T)=\pi_2
...
P(\vec{\xi}=(0,0,...1)^T)=\pi_k

称随机变量\vec{\xi} 的上述分布为k维M_k(1,\pi)分布。

下面将M_k(1,\pi)分布函数推导成指数族分布表达式的形式。

对于服从M_k(1,\pi)分布的随机变量\vec{\xi} ,其分布概率如下:

P(\vec{\xi}=(0,0,...1,...0)^T )= \pi_{i_0}=\pi_{1}^{1_{A_1}}\pi_{2}^{1_{A_2}}...\pi_{i_0 }^{1_{A_{i_0}}}...\pi_{K}^{1_{A_K}}

所以:

P(\vec{\xi}=(0,0,...1,...0)^T )=\pi_{1}^{1_{A_1}}\pi_{2}^{1_{A_2}}...\pi_{i_0 }^{1_{A_{i_0}}}...\pi_{K}^{1-\sum 1_{A_i} }

则:
P(\vec{\xi}=(0,0,...1,...0)^T )=exp(log \pi_{1}^{1_{A_1}} + log\pi_{2}^{1_{A_2}} ...+ log\pi_{i_0 }^{1_{A_{i_0}}} ...log\pi_{K}^{1-\sum 1_{A_i} })

则:
P(\vec{\xi}=(0,0,...1,...0)^T )=exp({1_{A_1}}log \pi_{1} +{1_{A_2}}log\pi_{2} ...+ {1_{A_{i_0}}}log\pi_{i_0 } ... {(1-\sum 1_{A_i} ) }log\pi_{K})

则:
P(\vec{\xi}=(0,0,...1,...0)^T )=exp({1_{A_1}}log (\pi_{1}/\pi_{K}) +{1_{A_2}}log(\pi_{2} /\pi_{K}))...+{1_{A_{i_0}}}log(\pi_{i_0 } /\pi_{K}) ...+ log\pi_{K})

令:
\vec{\eta}=(log (\pi_{1}/\pi_{K}),log (\pi_{2}/\pi_{K}),....log (\pi_{K-1}/\pi_{K}) ,0)^T

则:
P(\vec{\xi}=(0,0,...1,...0)^T )=exp( \vec{\eta}^T \vec{\xi} +log\pi_{K})

令:
h(\vec{\xi} )=1
T(\vec{\xi} )=\vec{\xi}
A(\vec{\eta} )= -log\pi_K

所以:
P(\vec{\xi})= h(\vec{\xi} ) exp( \vec{\eta}^T T(\vec{\xi} ) -A(\vec{\eta} ))

所以M_k(1,\pi)是一个指数族分布。

损失函数L

对于一个K分类问题P,有数据集D=\{(X,y) \}=\{(x_1,y_1),(x_2,y_2),...(x_i,y_i)...(x_m,y_m) \}, y_i有K个类别,且 y_i是one-hot编码,\vec{ y_i}= (0,0,0...1,...0) 。那么P(Y|X, \theta)的联合分布如下:

P(Y|X, \theta)=p(y_1, \theta)p(y_2, \theta)p(y_3, \theta)...p(y_i, \theta)...p(y_m, \theta)

所以:
P(Y|X, \theta)= exp(\sum_i^m( \sum_j^{K-1} y_{i,j} log(\pi_j/\pi_K)+ log\pi_K ) ) = exp(\sum_i^m( \sum_j^{K} y_{i,j} log(\pi_j)) )

其中:\theta=(\pi_1,\pi_2,....\pi_K)

极大似然估计

上面推导出了P(Y|X,\theta)的联合分布。现在使用极大似然估计计算\theta。因为极大似然等价极大对数释然。所以有:

\underset { \theta } {argmax} ( log P(Y|X,\theta) )= \underset { \theta } {argmax} \sum_i^m( \sum_j^{K} y_{i,j} log(\pi_j))

上公式等价于最小化负对数释然,定义L(\theta)为:
L(\theta)=\underset { \theta } {argmin} (-\sum_i^m( \sum_j^{K} y_{i,j} log(\pi_j)))

习惯上,将以上公式中的L(\theta)定义为多分类问题的损失函数,即对数损失函数。此损失函数又称为交叉熵损失函数,具体原因如下。

交叉熵损失函数

下面接着负对数释然继续推导:
L(\theta)=\underset { \theta } {argmin} (-\sum_i^m( \sum_j^{K} y_{i,j} log(\pi_j))) = \underset { \theta } {argmin} (-\frac{ \sum_i^m( \sum_j^{K} y_{i,j} log(\pi_j))}{m*K}) =\underset { \theta } {argmin} E_{(x,y)\in pmodel } ( p_{j} log(\frac{1}{\pi_j} ) )

所以:
L(\theta) =\underset { \theta } {argmin} E_{(x,y)\in pmodel } ( p_{j} log(\frac{1}{\pi_j} ) )

其中,p_j是数据集D中j类别的频率(概率)。

根据熵的定义,H(p,\pi)= \sum p_j log(\frac{1}{\pi_j})

所以,对数损失函数又叫交叉熵损失函数。

如果在多分类问题中损失函数使用交叉熵损失函数,那么由模型输出到类别概率的映射函数必然是SoftMax函数。

SoftMax函数

下面我们推导,为什么使用交叉熵损失函数后,最后的模型输出到类别概率的映射函数是SoftMax函数。

在上面的推导中,有\vec{\eta}=(log (\pi_{1}/\pi_{K}),log (\pi_{2}/\pi_{K}),....log (\pi_{K-1}/\pi_{K}) )^T

所以:
\eta_i= log (\pi_{i}/\pi_{K})

所以:
e^{\eta_i}= e^{ log (\pi_{i}/\pi_{K})} = \pi_{i}/\pi_{K}

所以:
\pi_{K} e^{\eta_i}= \pi_{i}

所以:
\sum_{i=1}^K \pi_{K} e^{\eta_i}= \sum_{i=1}^K\pi_{i} =1

所以:
\pi_{K} =1/\sum_{i=1}^K e^{\eta_i}

所以:
\pi_{K} /\pi_{j} =(1/\sum_{i=1}^K e^{\eta_i})/\pi_{i}

所以:
\pi_{j} = e^{\eta_j} /\sum_{i=1}^K e^{\eta_i}

所以,事件A_j发生的概率为:
e^{\eta_j} /\sum_{i=1}^K e^{\eta_i}

这刚好是softmax的表达式。
softmax( \eta_j)= e^{\eta_j} /\sum_{i=1}^K e^{\eta_i}

这里我们讨论下\vec{\eta}的物理意义,\vec{\eta}的物理意义来源 softmax回归模型。 softmax回归模型中使用线性模型\vec{w_i}^TX+b_i去拟合log (\pi_{1}/\pi_{K})

有:
\vec{w_i}^TX+b_i=log (\pi_{1}/\pi_{K})=\eta_i

所以,一般在处理多分类问题时,还会有一个Softmax的操作,使用Softmax函数将模型的输出值映射成预测概率。softmax回归与逻辑回归相当于没有隐藏层只有输入输出层的一层神经网络,输出层一个使用logistic函数,一个使用softmax函数。

激活函数

在神经网络中,激活函数的作用是将神经元的输出映射到一个非线性的范围内。如果没有激活函数,神经网络的输出将是一组线性组合,其表达能力非常有限。

为了解决神经网络有较好的非线性表达能力,那么我们引入的激活函数必须满足以下几点:

1、可微性:激活函数必须是可微的,这是为了方便使用反向传播算法来计算网络中参数的梯度,从而进行训练。但在某些点不可微也是可以的。

2、非线性:激活函数必须是非线性的,这是为了让神经网络可以学习到非线性函数和复杂的决策边界。如果激活函数是线性的,那么整个神经网络就等价于单个线性变换,无法学习到更复杂的模式。

3、单调性:激活函数应该是单调的,这是为了保证网络的输出随着输入的增加而单调地增加或减少,使得模型更容易训练和收敛。

4、输出范围:激活函数的输出值应该在一定范围内,通常是0到1或-1到1。这是为了使得神经网络的输出具有可解释性,例如可以表示为概率值或标签类别。但不是绝对的,因为某些特定的激活函数不在这一范围内。

5、计算效率:激活函数的计算应该是高效的,这是为了使得神经网络的训练和推理速度更快。

最长使用的激活函数是sigmod函数、tanh函数、ReLU函数以及上面介绍的softmax函数。

sigmod激活函数

sigmod激活函数的数学表达式为:
\sigma(x)= \frac{1}{1+e^{-x}}

对于一个神经网络,若某一层使用sigmod激活函数激活,那么此层的最终输出为:
\sigma(W*X+b )= \frac{1}{1+e^{-W*X+b }}

所以从上面的公式我们也可以看出,逻辑回归其实就是只有输入层和输出层,没有隐藏层的简单神经网络。

tanh激活函数

tanh激活函数的数学表达式为:

tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} = 2\sigma(2x)-1

由表达式看出,tanh激活函数的取值范围比sigmod激活函数大一倍,且其导数也比sigmod激活函数的导数大,即使用tanh激活函数在使用梯度下降优化参数时,收敛的速度更快。

ReLU激活函数

ReLU激活函数的数学表达式为:

f(x)=max(0,x)

此函数与上面两个函数相比求导更容易,且导数在x>0时是一个常数,更不容易发生梯度消失和梯度爆炸。它看起来像一个线性函数,但实际上是一个非线性函数,可以学习数据中的复杂关系 。ReLU出现了,是深度学习革命中为数不多的里程碑之一 。但其因为在零点不可导,一开始时被大家摈弃,认为其性质很差,但是在2000年后,ReLU激活函数再次被提出,证明了在多数情况下其效果要明显好于其他激活函数,且其行为和生物的神经元反应行为也是较贴合。

三个激活函数的图像如下:

16799939083782.png

梯度消失和梯度爆炸

在bp反向传播算法最优化求解参数时,一般会使用梯度下降算法,在RNN中梯度的系数会有一部分是\Pi_{i=1}^N W \frac{\partial f}{\partial x },f为激活函数。

可以看到,若使用sigmod激活函数和tanh激活函数, 当N很大时,\Pi_{i=1}^N W \frac{\partial f}{\partial x } 很容易趋于0(导数小于1时),或者很容易趋于无穷大(导数大于1时)。

当其趋于0时,梯度就趋于0,这种现象叫做梯度消失,当其趋于无穷大时,梯度就趋于无穷大,这种现象叫做梯度爆炸。

所以当使用sigmod激活函数或者tanh激活函数时,RNN处理很长的时序序列时,会发生梯度消失和梯度爆炸的问题。

ReLU激活函数的导数只有两个值,0和1.所以偏导累乘时,不会有消失和爆炸的现象,但是\Pi_{i=1}^N W \frac{\partial f}{\partial x } 还有一项W,很多个W相乘也会出现梯度消失和梯度爆炸的现象。所以单单使用ReLU激活函数不能很好的解决梯度爆炸的问题。如果我们给的初始W为E,那么就可以很好的解决梯度消失和梯度爆炸的现象。

使用ReLU激活函数的RNN,若初始参数W=E,那么在多数情况下训练的效果和LSTM相当。

为了彻底解决梯度消失和梯度爆炸的问题,在RNN的基础上构建出了模型LSTM。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容