Processing math: 100%

FSMN结构快速解读

参考文献如下:

(1) Feedforward Sequential Memory Neural Networks without Recurrent Feedback
(2) Feedforward Sequential Memory Networks: A New Structure to Learn Long-term Dependency

注意:!!!
小写字母代表单个标量
大写字母代表矩阵
小写字母头上带个小箭头代表向量

1. 模型结构解析:

       观察图(a),可以发现,在隐藏层的旁边,FSMN挂了一个记忆模块Memory Block,记忆模块的作用与LSTM门结构类似,可以用来记住t时刻输入信息的相邻时刻序列的信息。

       根据记忆模块编码方式的区别,FSMN又可以分为sFSMNvFSMN,前者代表以标量系数编码,后者代表以向量系数编码。

       如图(b)的结构,以记住前N个时刻信息为例,其计算公式如下:

˜hlt=Ni=0alihlti,in...sFSMN

˜hlt=Ni=0alihlti,in...vFSMN

       其中,(1)式代表的标量乘积,(2)式代表的是Hadamard积

       因此,可以得到sFSMN下的编码系数向量和vFSMN下的编码系数矩阵:

al={al0,al1,...,alN},in...sFSMN

Al={al0,al1,...,alN},in...vFSMN

       有了这一个隐藏层旁挂着的记忆模块,就要将此记忆模块作为输入传递到下一个隐藏层,如图(a):

hl+1t=f(Wlhlt+˜Wl˜hlt+bl)

       多出来的权重矩阵和偏置系数向量,都是后续训练模型需要调整的参数。

       以上就是简单的回看式FSMN,也就是说当下的记忆模块只关注了它之前的信息,如果还要关注未来的信息,实现上下文联通,也就是所谓的双向的FSMN,直接在(1)式和(2)式中添加后看的阶数即可,如下:

˜hlt=N1i=0alihlti+N2j=1cljhlt+j,in...sFSMN

˜hlt=N1i=0alihlti+N2j=1cljhlt+j,in...vFSMN

       其中N1和N2分别代表前看和后看的阶数。

2. 在文本段落上的应用

       给定一个包含T个单词的序列X,我们可以构造一个T阶的方阵M

M=[a0a1aN000a0a1aN000a0a1aN0a0]T×Tin...sFSMN

M=[a0a1aN100c1a0a1aN10cN2c1a0a1aN100cN2c1a0a1aN10cN2c1a0]T×Tin...vFSMN

       鉴于上式,我们就有了很美的以下这个公式:

˜H=HM

       更为推广的,对于给定的K个序列:

L={X1,X2,...,XK}

       一个更美的公式诞生了:

˜H=[H1,H2,...,HK][M1M2MK]=ˉHˉM

posted @   JeffreyLee  阅读(5381)  评论(2编辑  收藏  举报
编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
点击右上角即可分享
微信分享提示