首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >明月机器学习系列021:图解RNN与Seq2Seq

明月机器学习系列021:图解RNN与Seq2Seq

作者头像
明月AI
发布2021-10-28 10:04:00
发布2021-10-28 10:04:00
4270
举报
文章被收录于专栏:野生AI架构师野生AI架构师

趁着周末隔离在家,有时间就梳理一下深度学习的这些基础知识。纯属造轮子方便自己理解,可能对正在学习的小伙伴们也会有一点帮助吧。

应该会整理成几篇文章,最后要说的是的bert和xlnet。

RNN:循环神经网络


这里并不准备介绍RNN的基础定义,具体可以看维基百科上的定义:https://zh.wikipedia.org/wiki/%E5%BE%AA%E7%8E%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C 。

相对于传统的词袋模型,RNN能更好考虑语序所带来的不同影响,基本结构如下:

如上图,输入x1到x4,对应输出y1到y4。这个图虽然简单,不过并不能体现RNN循环的特点,看下图:

网上也有很多方便理解的图,只是觉得不够好,还是自己重新画一下。x是输入,y是输出,h是中间隐状态,加号圆圈是作用函数(线性)。简单理解可以如下:

代码语言:javascript
复制
h1 = f1(x1, h0)
y1 = g(h1)

h2 = f1(x2, h1)
y2 = g(h2)

# 以此类推

每个不同的输入x,都对应一个不同的激活函数f,而输出的函数g则是共享的。看到了,后一个隐状态是依赖于前一个隐状态的,所以叫循环。(也正是因为循环的存在,也导致了该结构效率不高,很难进行分布式计算)

上面是最基础的RNN,适合处理的任务,如序列标注等,每一个输入都有对应的输出的场景。RNN还有几种变种:

N vs 1


对于有些任务,如文本分类,输入很多,但是输出只有一个值,其变种结构如下:

和前面结构基本一样,只是输出的时候,只在最后的隐状态上输出。

1 vs N


同样,也有1对多的场景,例如从图像生成文本等。其结构可能有两种:

第一种:

第二种:

也很简单,一种是只输入一次,另一种是将输入变量复制成多个,分别进行输入。

N vs M


如果说前面两种变体理解起来都很简单,那这种就需要花点时间了。而且其使用场景还是非常多的,例如生成摘要等。

N vs M结构看起来应该是N vs 1和1 vs M的合体,就像矩阵分解。实际上,N vs M其实有点像这两种的合体:

如上图,4个输入对应3个输出,中间的c是语义编码,理解为中间输出其实就可以了,而Encoder和Decoder其实都可以理解为一个简单的N vs 1和1 vs N模型。完整结构如下:

跟1 vs N变种中的类似,也有另一种结构:

这种结构看起来挺复杂,可看图理解起来并不复杂,如上。

这种Encoder-Decoder结构,其实就是Seq2Seq了,至于中间的语义编码C,最简单的就是直接将Encoder中的最后的隐变量赋值给它,复杂一点的,可以对应Encoder中的隐变量做一次运算,结果赋值给C。

下一篇应该会讲Attention。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 野生AI架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档