| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 理解序列模型(RNN、LSTM、GRU) -> 正文阅读 |
|
[人工智能]理解序列模型(RNN、LSTM、GRU) |
目录 1.序列模型生活中有许多序列数据(具有先后顺序的数据),比如语音,文本,DNA,音乐,动作,怎样处理这些数据呢?后来,处理序列数据的模型就被称为--序列模型(sequence model) (图片来自deeplearning.ai-Andrew Ng) 语音,音乐,文本,动作,这些数据都是有顺序,连续的。序列的特点在于某一时刻的数据不仅和现在有关,而且和过去、未来有关(例如我们要吃橘子,就要先拨橘子),数据出现的先后顺序也是重要的信息,序列模型能帮我们学习到这些信息。 在语言识别,音乐生成,机器翻译这些激动人心的领域,序列模型都得到了广泛应用,下面介绍著名的RNN(recurrent neural network)和它的变体LSTM(long short term?memory),以及LSTM的简化GRU(gate recurrent unit)。 2.RNNRNN(循环神经网络)经常用于自然语言处理等序列任务中,对于输入的x,这种神经网络可以“记住”这个信息一段时间,于是,前面输入的信息将会被传递到后面的RNN-cell,用于处理之后的输入,下面是一个经典的RNN模型 (图片来自deeplearning.ai-Andrew Ng) 上图的一个输入对应一个输出(Tx=Ty),其中的每个RNN-cell: 可以看到,每个RNN-cell不仅计算了输入x,而且还结合了前一时刻传递过来的信息。值得注意的是,这里一排的每个RNN-cell,它们的参数矩阵Waa,Wax,Wya,ba,by是共享的,具体的参数维度如下
上面介绍的是前向传播的过程,那么损失和反向传播又是怎样的呢? 首先是损失: 第一行是一个输出的损失(交叉熵损失),c表示softmax的分类向量长度 第二行是总损失(每个RNN-cll损失总和) 反向传播: 不断求导,梯度下降,对于每一个RNN-cell求如下偏导 (图片来自deeplearning.ai-Andrew Ng) 这个求导过程是从最后的RNN-cell向前传播的,由于这里一排每个cell的参数矩阵是共享的,所以我们更新的其实是相同的参数,有一个炫酷的名字--backpropagation through time,过程比较复杂,这里就不过多阐述了。
以上就是对一个经典RNN模型的分析,实际上,模型的输入与输出的个数不一定相等,可以是多对多(文本翻译),多对一(情感评价),甚至是一对多(音乐生成),不同任务的模型架构通常不同,但是原理是一样的。 然而,这种经典的RNN还有一些缺点,就像深度神经网络一样,隐藏层太多,容易导致梯度爆炸和梯度消失(主要是梯度消失),导致RNN无法学习到远距离的信息,为了优化这些问题,便诞生了GRU和LSTM。 3.LSTM如果要生成一段英文,那么当主语为单数或者复数时,句子后面的动词要发生相应的变化,于是主语的信息希望被记住一段时间,当看到新的主语时,希望忘记旧的主语,记住新的主语。 LSTM(long short term memory)通过细胞状态和被称为"门"的结构来达到记忆信息的能力,如图,一个LSTM-cell: 门结构包含三个门,分别是忘记门,输入门,输出门 门1 - 忘记门: 忘记门对输入x和上一个cell的输入h(t-1)做线性组合并映射到sigmoid函数,结果越接近0则舍弃的信息越多,越接近1则保留的信息越多,上式将Wf展开应为 门2 - 输入门: 输入门在得到0-1映射的同时,将输入信息整合生成一个新的候选向量,后续将结合忘记门的输出做细胞状态的更新,同样,上式展开应为 ?细胞状态: 细胞状态就是上面贯穿每个LSTM-cell的链,这里就是传递信息,记忆信息的地方,当经过忘记门和输入门的计算后,通过这样一步计算,状态C就被更新了
门3 - 输出门: 和RNN不同的是,RNN的输出是这里的Ot,而LSTM则将进一步结合了细胞状态的信息,也就是前面稳定记忆的信息,得到最终输出ht,也可以加上softmax得到y_pred,第一行式子展开应为 4.GRUGRU(gate recurrent unit)是LSTM的简化版,将LSTM中的忘记门和输入门合并称为更新门,加上了一个重置门,GRU的参数更少,更容易训练,而且效果在多数情况下和LSTM相当 手绘一张: 第二行类似门的符号代表update门,第三行的符号代表reset门,也是通过上面一条链(细胞状态)进行信息的传递和更新,可以发现比LSTM简单了不少。 总结:上文介绍的序列模型可以是双向的(bidirectional),深层的(deep),同时还可以结合注意力机制,成为注意力模型达到更好的效果。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:48:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |