Lower Frame Rate Neural Network Acoustic Models翻译

摘要

最近,使用连续时序分类(CTC)训练的神经网络声学模型被提出,作为传统的交叉熵训练的神经网络声学模型的替代方法,其中,交叉熵方法每10ms输出一帧。与传统模型相反,CTC联合声学模型一起学习对齐,并且除了传统声学状态单元外还输出空白符号。这允许CTC模型以低帧率运行,与传统模型中的10ms不同,其是每30ms输出一帧,从而提高了整体系统速度。在这项工作中,我们探索传统模型在低帧率下的行为。在一个大词汇量的语音搜索任务上,我们将证明,使用传统模型,与基于CTC的模型相比,我们可以将帧率降低到40ms,同时将WER相对提高3%。

1.介绍

传统的混合神经网络声学模型在每个帧(即10毫秒)上为每个内容相关(CD)状态的声学单元输出帧级预测。这些CD状态用作隐马尔可夫模型(HMM)的发射概率。当第一代使用深度神经网络(DNN)的混合系统出现时,更多的循环体系结构显示了混合系统的额外优势,这包括长短期记忆(LSTM)循环神经网络和卷积长短期记忆深度神经网络(CLDNN)。这些模型通常使用帧级交叉熵损失以及序列判别损失训练。传统模型的缺点之一是它们需要帧级对齐以进行交叉熵训练
  为了解决帧标签问题,提出了使用连续时序分类(CTC)训练的RNN架构。CTC提供了一种在将输入帧序列映射到输出标签序列时学习声学模型的机制。为了允许输出序列短于输入序列,除了常规模型中的常规声学单元之外,还使用空白输出符号。
  在[1]中表明,CTC-LSTM声学模型优于常规LSTM模型。为了加快CTC训练,这些CTC-LSTM模型使用了一种状态相关的音素(CD-Phones)[8]。具有CD-Phones的CTC的好处之一是,它允许模型每30ms输出一个符号,而不是传统的10ms。 这种低帧率减少了输入和输出序列的长度,从而减少了解码期间的计算成本,并改善了等待时间。另外,在训练时,此设置减少了每个输出序列可能的不同对齐的数量,进而减少了任务的难度,从而产生了有效的训练。
  尽管CTC不需要预先进行对齐,但它也有一些缺点。首先,[9]证明了CTC模型严重拟合训练数据,并且只有在训练超过40,000小时的数据后才能与传统模型的性能相匹配。其次,使用CTC损失的结果是,可以在其相应的输入事件之后任意延迟检测输出目标的时间。这意味着,经过CTC训练的模型无法对输入和输出序列进行准确的对齐。因此,由于输出延迟,可能会引入额外的延迟。为了克服等待时间问题,在[1]中,仅使用了与给定强制对齐相差不超过100毫秒的对齐。从随后的序列训练阶段中删除了此约束,并且所生成的模型的性能与未约束的模型一样好,但是与仅具有50ms延迟的常规模型相比,该系统的延迟约为150ms。第三,虽然在传统模型的[5]中显示了向LSTM体系结构中添加卷积层是有帮助的,但是[1]并未发现在使用CTC目标进行训练时附加层是有帮助的。
  本文的目的是探讨在使用低帧率和CD-Phones对传统LSTM型模型进行训练时的行为。我们将此模型称为低帧率(LFR)模型。使用标准交叉熵和序列训练损失训练这些模型。我们注意到,尽管也可以使用低帧率训练CTC模型,但我们使用术语LFR来指代传统模型,因为这是本文研究的重点。在一个大词汇量的语音搜索任务上,我们将证明LSTM LFR模型可以与CTC模型的性能相匹配,两者均以30ms帧率进行训练。此外,我们通过上述CTC模型解决了许多问题。首先,我们将证明与CTC相比,使用具有LFR的CLDNN可以额外获得3%的相对改进。其次,与LTC模型相比,我们可以将帧前进增加到40ms,而只有80ms的输出延迟,而使用CTC则需要30ms的帧速率和150ms的输出延迟。最后,与CTC相比,LFR模型对较小的数据集更健壮。
  本文的其余部分安排如下。在第2节中,我们描述了传统训练和CTC训练,以及在这项工作中探索的LFR模型。在第3节和第4节中,我们讨论实验和结果,最后在第5节中得出结论。

2.使用LSTM RNN的声学模型

在本节中,我们将介绍使用神经网络进行声学建模的各种方法。一旦选择了声学单元(即CD-states,CD-phones),就可以使用硬(Viterbi)或软(Baum-welch)对齐训练。此外,可以使用各种目标函数训练这些模型,包括交叉熵(CE),CTC和序列训练(ST)。我们将在以下部分描述这些不同的因素,包括我们提出的LFR模型。对于这些不同因素的更详细的总结,我们请读者参考[9]。

2.1 使用交叉熵训练的传统模型

将长度为 T T T发音输入序列表示为 x = x 1 , … , x T \pmb x=x_1,\dots,x_T xxx=x1,,xT,其中 x t ∈ R N x_t∈\mathbb R^N xtRN是帧级特征向量(即log-mel特征), w \pmb w www是输出单词序列。使用维特比可以近似将声音似然表示为:
p ( x ∣ w ) = ∏ t = 1 T p ( x t ∣ l t ) p ( l t ∣ l t − 1 ) , p(\pmb x|\pmb w)=\prod^{T}_{t=1}p(x_t|l_t)p(l_t|l_{t-1}), p(xxxwww)=t=1Tp(xtlt)p(ltlt1),
  这里 l 1 , … , l T l_1,\dots,l_T l1,,lT是通过将发音与单词序列 w \pmb w www强制对齐而计算出的标签序列,通常由预先存在的模型(例如GMM或神经网络)执行。在混合解码中,HMM的发射概率被定义为 p ( x t ∣ l t ) = p ( l t ∣ x t ) p ( x t ) / p ( l t ) p(x_t|l_t)=p(l_t|x_t)p(x_t)/p(l_t) p(xtlt)=p(ltxt)p(xt)/p(lt),此处的标签后验概率由神经网络声学模型的输出给出,可以使用当前帧左边的 L L L帧和右边的 R R R帧的上下文进行计算 ,表示为 p ( l t ∣ x t ) ≈ p ( l t ∣ x t − L : x t + R ) p(l_t|x_t)≈p(l_t|x_{t-L}:x_{t+R}) p(ltxt)p(ltxtL:xt+R),当进行 l t l_t lt的帧级预测时,这允许神经网络合并声学上下文。标签先验概率 p ( l t ) p(l_t) p(lt)是通过对强制对齐产生的标签频率进行计数而获得的。数据似然性 p ( x t ) p(x_t) p(xt)不依赖于标签,因此出于训练和解码目的可以忽略。
  给定输入序列 x \pmb x xxx和大小相等的相应帧级别对齐 l \pmb l lll,首先训练神经网络声学模型,以使所有声学帧上的CE损失最大化,如下所示:
L C E = − ∑ ( x , l ) ∑ t = 1 ∣ x ∣ l o g   p ( l t ∣ x t ) . (1) \mathcal L_{CE}=-\sum_{(x,l)}\sum^{|x|}_{t=1}log~p(l_t|x_t).\tag{1} LCE=(x,l)t=1xlog p(ltxt).(1)
这里的 p ( l ∣ x ) p(l|x) p(lx)是神经网络的softmax输出层之后的标签。该损失的缺点是每个标签是相互独立的,这可以通过使用序列判别损失进行其他训练来解决此问题,如下所述

2.1.1 传统建模

大多数ASR系统都假设语音信号可以在10毫秒的时间尺度上近似为分段平稳过程,从而导致前端每10毫秒产生局部移位不变表示(例如 x t x_t xt是log-mel滤波器组)。随着音素以更长的时间规模出现,每个音素通常分为3个分段固定模型,其中对应的HMM拓扑是带有自环的3状态,从左到右的模型。训练无状态声学模型(例如GMM,DNN)以每10ms在HMM状态上提供分布 p ( x t ∣ s t ) p(x_t|s_t) p(xtst),从而匹配前端帧率。然后,使用经过训练的10ms模型提供的固定对齐方式,如上所述进行CE训练。

2.1.2 LFR建模

有状态的循环声学模型能够在发出预测之前处理更多的输入,因此无需假设信号平稳。因此,无需将音素分为多个子单元,而是HMM可以直接使用音素(例如CD-Phones)。这些修改使我们可以消除10ms的限制,并且在LFR建模中,我们以较低的帧速率或等效地以较高的帧前进(即20ms,30ms等)计算输出标签 l t l_t lt尽管可以使用替代的前端,但在这项工作中,我们使用典型的10ms log-mel前端,但是将连续的帧堆叠在一起以弥补较低的速率,然后对帧进行二次采样以达到所需的帧速率,如[4]所示。软目标标签类后验是通过在所需帧频窗口中的10ms后验平均来创建的。

2.2 使用CTC训练的声学模型

连续时序分类(CTC)方法是诸如RNN之类的序列模型的训练标准,其中声学模型是与标签序列一起学习的。CTC模型与常规框架模型在两个方面有所不同。首先,CTC模型引入了一个额外的 b l a n k blank blank标签,以减轻网络在不确定时进行帧级标签预测的负担。其次,训练标准在序列级别进行操作,并优化状态序列的对数概率,而不是如等式1中那样优化独立输入帧的对数似然。
  CTC损失函数定义为每个训练样例正确标签的负对数概率之和:
L C T C = − ∑ ( x , l ) l n p ( z l ∣ x ) (2) \mathcal L_{CTC}=-\sum_{(x,l)}lnp(z^{l}|x)\tag{2} LCTC=(x,l)lnp(zlx)(2)
其中 x \pmb x xxx是声学帧的输入序列, l \pmb l lll是目标标签序列(例如说话的语音转录), z l z^l zl x \pmb x xxx l \pmb l lll的所有可能对齐的编码表示,它允许存在重复标签,以及存在 b l a n k blank blank标签。
  可以使用以下公式估算正确标签 p ( z l ∣ x ) p(z^l|x) p(zlx)的概率:
p ( z l ∣ x ) = ∑ π ∈ z l ∏ t y π t t (3) p(z^l|x)=\sum_{\pi \in z^l}\prod_t y^t_{\pi_t}\tag{3} p(zlx)=πzltyπtt(3)
其中 y s t y^t_s yst是符号 s s s在时间 t t t的softmax输出,而 π π π枚举 z l z^l zl中的所有路径。易处理的前向后向算法被用于计算路径概率的求和(有关更多详细信息,请参见[7])。从等式3可以看出,在网络内部状态给定的情况下,输出标签被认为是独立的,这阻碍了语言模型信息的合并。使用序列判别标准可以通过额外的训练来缓解这种弱点。

2.3 序列判别训练

完成CTC或CE训练后,通常使用序列级判别训练标准对模型进行再训练,该标准在目标函数上与ASR WER目标函数更加匹配。在实践中,已证明ST可以改善通过CE或CTC训练训练的神经网络模型。 在本文中,我们探索使用状态级最小贝叶斯风险(sMBR)标准训练所有模型。

3.实验设置

3.1 神经网络结构

用于所有实验的声学特征是每10毫秒在25毫秒窗口上计算的80维对数梅尔滤波器组能量。在当前帧 t t t处,这些特征以 l = 7 l=7 l=7帧向左堆叠,并下采样得到所需的帧速率,以产生640维特征 x t − 1 : x t x_{t-1}:x_t xt1:xt。这与本文所有NN实验所使用的特征相同,并且与[4]中使用的特征类似。
  与[4]类似,用于CTC训练的LSTM模型由5个LSTM层组成,其中每层含有640个隐藏单元,并且没有投影层。总计约20M参数。用于LFR建模的CLDNN模型具有卷积层,LSTM和DNN层。首先,将 8 × 80   t i m e × f r e q u e n c y 8\times 80~time\times frequency 8×80 time×frequency的log-mel特征带入具有 8 × 15 8×15 8×15的滤波器大小和 256 256 256个特征映射的单个卷积层中。卷积后,我们在 f r e q u e n c y frequency frequency上使用窗口大小为6的非重叠最大池化。卷积层的输出传递到具有256个输出的线性映射层,然后传递给3个LSTM层(具有832个隐藏单元和512个投影单元)层。最后,我们将LSTM的输出传递给具有1024个隐藏单元的完全连接的ReLU层。同样,为了减少参数的数量,将softmax层分解为两个,中间是一个具有512个单元的线性低秩层。CLDNN模型还具有约20M参数。所有声学模型都有9,287个CD-phone输出目标。

3.2 训练过程

最初使用异步随机梯度下降(ASGD)优化的CE训练LFR模型。这些模型使用由现有的10ms CD-state模型生成的现有强制对齐。特征被提取并堆叠,我们保留每第n个特征帧(例如,n = 3表示30毫秒)并将其余部分丢弃。使用相同的前端配置对CTC模型进行了训练,每30ms生成一帧(有关更多详细信息,请参见[1])。对于LFR模型,我们通过平均n个1-hot目标标签来产生软目标,从而将CD-state映射到CD-Phones和子样本。所有LFR模型均采用1-state HMM进行训练。然后使用与[6]相似的设置,使用sMBR对模型进行序列判别训练。在训练期间,循环网络将展开20个时刻,以进行截断的反向传播(BPTT)训练。所有结果均在ST后进行测试。此外,输出状态标签会延迟 k k k帧,其中实验选择 k k k可以在准确性和延迟之间取得良好的平衡,如结果所示。

3.3 解码过程

所有声学模型都使用基于WFST的单程解码器进行解码,该解码器使用1亿n元语言模型和超过500万个单词的词汇表。 解码器执行集束搜索,并且在任何时间点仅保留7,000个活动弧。

<think>好的,我现在需要帮助用户解决如何正确使用BPNeuralNetwork类的问题。首先,用户提到的是从models.bp_neural_network中导入这个类,所以我需要先假设这个类的结构是怎样的。通常,一个BP神经网络的类应该包含初始化方法、训练函数和预测函数。 接下来,我需要回想一下常见的BP神经网络实现方式。根据引用[1],使用newff函数创建网络时指定了神经元个数,所以在初始化类的时候可能需要参数比如输入层、隐藏层、输出层的节点数。激活函数也是一个重要部分,通常隐藏层会用Sigmoid或ReLU,输出层可能用线性或者Sigmoid,具体看是分类还是回归问题。 然后,用户可能需要进行数据预处理。标准化或归一化是常见的步骤,这有助于提升训练效果。引用[3]提到了BN层,但这里可能用户没有使用BN,不过数据预处理仍然是必要的。 训练过程中,需要设置学习率、迭代次数、损失函数等参数。引用[2]提到RPROP算法,但如果是标准的BP,可能用的是梯度下降。此外,引用[3]还提到训练时启用model.train()来处理dropout,所以如果类中有dropout或BN,需要确保在训练和评估时切换模式。 接下来,我需要考虑代码示例的结构。先导入类,然后准备数据,分割训练集和测试集,标准化处理。接着实例化模型,设置参数,进行训练,最后预测并评估。可能还需要可视化训练过程中的损失变化,帮助用户理解训练效果。 用户的问题还可能涉及常见错误,比如数据未标准化导致收敛慢,或参数设置不当。需要提醒用户注意这些点。此外,引用[4]中的梯度计算可能涉及到反向传播的实现,但用户可能不需要自己写这部分,只要调用正确的方法即可。 最后,生成的相关问题需要围绕使用中的其他方面,比如参数调优、数据预处理、过拟合处理等,这样用户如果有进一步的问题可以自行参考。</think>### BPNeuralNetwork类的使用指南 #### 1. 模型导入与初始化 ```python from models.bp_neural_network import BPNeuralNetwork # 初始化参数示例 input_nodes = 4 # 输入层神经元数(对应特征维度) hidden_nodes = 9 # 隐藏层神经元数,参考newff函数的参数设置[^1] output_nodes = 1 # 输出层神经元数 learning_rate = 0.1 # 学习率 model = BPNeuralNetwork( input_nodes=input_nodes, hidden_nodes=hidden_nodes, output_nodes=output_nodes, learning_rate=learning_rate ) ``` #### 2. 数据预处理要点 - 标准化处理(推荐Z-score标准化): $$ x_{norm} = \frac{x - \mu}{\sigma} $$ - 分类任务需对标签进行one-hot编码 - 使用sklearn的`train_test_split`划分数据集 #### 3. 模型训练流程 ```python # 典型训练参数配置 epochs = 1000 # 训练迭代次数 batch_size = 32 # 批处理大小 validation_split = 0.2 # 验证集比例 # 训练执行(需保持训练模式) model.train() # 启用BN/dropout等训练特性[^3] loss_history = model.fit( X_train, y_train, epochs=epochs, batch_size=batch_size, validation_split=validation_split ) ``` #### 4. 预测与评估 ```python model.eval() # 切换评估模式[^3] predictions = model.predict(X_test) # 回归任务评估 from sklearn.metrics import mean_squared_error mse = mean_squared_error(y_test, predictions) print(f"测试集MSE: {mse:.4f}") ``` #### 5. 关键参数说明表 | 参数 | 推荐值 | 作用说明 | |------|--------|----------| | hidden_nodes | 5-20 | 隐藏层复杂度控制,需平衡欠/过拟合 | | learning_rate | 0.01-0.2 | 梯度下降步长,影响收敛速度[^2] | | activation | sigmoid | 隐藏层默认激活函数 | | momentum | 0.9 | 动量因子,加速收敛 | #### 6. 典型问题排查 1. **梯度消失**:减小网络深度或改用ReLU激活 2. **过拟合**: - 增加L2正则化项:$$ J_{new} = J + \lambda \sum w_i^2 $$ - 早停法(监控验证集损失) 3. **收敛缓慢**: - 检查数据标准化 - 调整学习率(参考RPROP算法思想)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值