DPRNN的学习

可以以非常简单的方式组织任意类型的RNN层(不重要,因为我这里会换成transformer)。

优点:

1.模型更小

2.性能更好(SI-SNR)

模型组成:

首先肯定是encoder和decoder了,一个声音的信号经过编码才会得到这种L*N的形式。

1.Segmentation(分割模块)

把输入分割成重叠的块,再把所有的块连接为3-D张量。

先记住这里有一个点:K=2P(就是对应的划分好了的关系!!!!)

输入W:N*L规格的向量信息,N表示词向量维度特征,L表示时间步长。

把输入分割为一个一个小小的块,每一个块长度为K=2P,其中P为hope size,也就是说是buffer的一半。(50%)

第一个和最后一个块是用0填充的,目的在于:让输入中的所有样本都可以被处理到,而且都是在重叠的地方(头一个P和尾一个P没有数据,这样所有数据都是放在重叠区)如右图:

生成S个相同大小的块。

把S个块信息,综合起来形成了一个3-D张量——N*K(2P)*S

2.Block processing(块处理模块)

分为两个块:intra和inter。每一个模块输入和输出的矩阵维度信息都是相同的。

首先提出了b=1,…,B as 𝑇𝑏∈𝑅𝑁∗𝐾∗𝑆,其中T1=T(上面的输出?)于是重叠成了左边模块最下面的图形。进入intra进行训练,intra是双向的,并且RNN只用于𝑇𝑏的第二维。

(我明白了,所谓的the second dimension,就是除去前面的N维,这个是不变的词向量特征信息(N维向量表示一个词的特征),剩下的KS维度,对于这两层进行处理,而KS就分别代表了intra-chunkinter-chunkRNN的长度信息,表示处理的是块内的还是块间的)

Intra里面RNN输出的信息是𝑈𝑏=[𝑓𝑏𝑇𝑏:,:,𝑖,𝑖=1,…𝑆]:

其中Ub的维度信息是H*K*S,𝑓𝑏(.)是RNN里面定义的mapping 函数(映射函数),𝑇𝑏:,:,:𝑖维度信息是N*K。

维度信息改变了,需要进行归一化和预处理。

FC:线性连接层,用来改变维度信息𝑈𝑏=[𝐺𝑈𝑏:,:,𝑖+𝑚,𝑖=1,…𝑆]:

其中G的维度信息:N*H,就是FC层内的权重分布;m维度信息:N*1,FC层内的偏置项。

LN:LayerNorm归一化层,(简单写一下公式,和BN算法是一致的,多了一个小正数𝜖,用来数值稳定的)

公式:LN𝑈𝑏=𝑈𝑏−𝜇(𝑈𝑏)𝜎𝑈𝑏+𝜖⊙z+r,基本上一模一样。

最后接上一个残差连接。就是输出𝑇𝑏。

Inter里面RNN输出的同样也是和上面一样的,但是公式有所不同,处理的是最后一个维度的信息。

公式:𝑉𝑏=[h𝑏𝑈𝑏:,𝑖,:,𝑖=1,…𝐾]。

后面的步骤是同样的。也有残差连接,但是块间的RNN是单向的,从第一个到最后一个进行扫描。

3.Overlap-Add(重叠相加块)

 𝑇B+1∈𝑅𝑁∗𝐾∗𝑆,作为块处理的结果,进入重叠相加块。把结果转换为顺序输出。

具体机理是,作用于S个块,然后形成一个 𝑄∈𝑅𝑁∗𝐿,作为结果。

参数选择:

K=2P,S=2𝐿/𝐾+1,𝐾+𝑆=𝐾+2𝐿/𝐾+1,K=2𝐿,S≈2𝐿≈𝐾。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值