您好,欢迎光临搜索引擎优化网站!

企业网站优化,优化方法,公司网络优化方案

seo服务公司,seo排名工具、关键词优化学习

『英语流利说』移动端深度神经网络优化

作者:jcmp

浏览量: 0

2021-04-06

『英语流利说』 是一款英语口语学

『英语流利说』 是一款英语口语学习 APP,利用 语音评测 技术给口语 实时打分、反馈 ,帮助纠正发音,提高口语能力。流利说语音评测算法将近年人工智能领域取得重大突破的 深度神经网络(DNN) 模型应用到语音评测系统中,相比传统建模方法,大幅提升各项 benchmark 准确率。

DNN 模型参数通常在千万量级,模型训练需要借助 GPU、CPU 集群才能完成,在计算能力远小于 PC 的移动端更是难以利用,业界做法是把数据(语音、图像等)通过网络传送到服务端计算,再将结果传回移动端。

深度学习(Deep Learning)

深度学习是机器学习的一个分支,近年,深度学习的复兴引领了一波大众“人工”智能热(泡沫),催生大批人工智能砖家。

主流深度学习模型结构有 Deep Feed Forward Neural Networks ( DNN ), deep Convolutional Neural Networks( CNN ) deep (Long Short-Term Memory) Recurrent Neural Networks ((LSTM) RNN ),通常也以 DNN 统称 DNN、CNN、RNN 。

DNN

上图引用自

CS231n Convolutional Neural Networks for Visual Recognition。

FeedForward

Let a_0 = input vector

For i in 1, 2 ... layers:

通常 是 或 函数

分类任务输出层通常为 ,代表 input 属于各类的概率。

绝大部分的运算在 上,如果一次仅有一个输入,则 的内容为向量, 若一次输入多个(图像batch处理, 语音多帧音频特征), 的内容为矩阵。

故在给定 DNN 模型参数的情况下,计算的核心是矩阵运算, 矩阵*矩阵 或 矩阵*向量 ,本文重点介绍 矩阵*向量 的优化。

Basic Linear Algebra Subprograms(BLAS)。

回想一下, 矩阵 概念是在 线性代数 课程引入的,BLAS 是基础线性代数程序集的应用程序接口标准,用以规范发布基础线性代数操作的数值库(如向量或矩阵乘法)。在高性能计算领域,BLAS 被广泛使用。著名的开源 BLAS 实现有 OpenBLAS 和 ATLAS。

BLAS 按照功能被分为三个级别:

Level 1:向量-向量运算

Level 2:矩阵-向量运算

Level 3:矩阵-矩阵运算

BLAS 中 gemv 为非特殊结构的 矩阵*向量 标准 API:

DNN 计算优化

1.合并、移除 不必要的计算

合并特征归一化

机器学习算法通常需要对输入特征做归一化处理,

其中 为均值, 为标准方差;

将上式移入到第一层的 中,

令 , , 则在保证数学运算结果一致的情况下,减少了特征归一化带来的运算。

移除 Softmax 计算

在语音领域并不直接使用 输出的概率值,通常使用 ,则有。

实际上

在解码阶段每一帧是否减去 并不会改变竞争条件 :

故模型训练完成后可以移除 层,直接使用最后一层 的 .

图像领域的应用,如果不需要概率值,也可以不计算 ,是否计算 不会改变 的大小顺序。

2.gemv 计算优化

以 单线程单精度 sgemv 为例,分析多种优化方法,以 OpenBLAS sgemv 为对照。

通常 , 其中 。

测试环境: MacBook Pro, 2.5 GHz Intel Core i7, 16 GB 1600 MHz DDR3, clang -O2。

注:以下以方阵(M=N)为例, 运行1000次取 计算时间平均值 ,每次运行结果略有不同。

2.0 native实现

实现一:baseline

实现二:利用 稀疏性,可以避免不必要的计算;

在矩阵 以 行主元存储 的时候, y(i) += α * A(i, j) * x(j); 会成为计算的瓶颈:对 A(i,j) 的内存间隔读取导致太多 Cache Misses ;第一个实现虽提高了 缓存命中率 ,但在 稀疏的情况下,却无法利用这个属性避免不必要的计算(稀疏性下面还会提到)。

Fig0. dense/sparse gemv对比(非以上两种实现的对比,这里gemv_ft0为第二个实现)。

2.1 列主元存储

若矩阵A以 列主元存储 ,便可避免 Cache Misses:

Fig1. 列主元存储(gemv_ft1)

可见,通过列主元存储的方式,无论是 dense/sparse,性能均大幅度提升,矩阵维数越大,提升越明显。

2.2 增加缓存命中率

Fig2. 增加缓存命中率(gemv_ft2)

通过增加缓存命中率,gemv 性能再次大幅提升。

Fig3. FineTuning

通过优化,gemv 有1-3倍的性能提升,维数越大,提升越明显。

2.3 Fixpoint 定点化, ARM NEON 指令集加速。

手机设备的处理器绝大多数是 ARM 架构,浮点数运算能力弱;针对ARM架构,对DNN参数做 Fixpoint 定点化,并使用 NEON 指令集做运算加速。这部分的性能对比,不再列出。

2.4 其他

预先分配内存、内存对齐、指针移位代替索引计算、矩阵转置等;编译器优化选项设置对ARM代码的影响很大。

3.DNN 模型设计

gemv 的运算复杂度为 O(M*N),减小神经网络节点数目可以有效降低运算量,如此亦会降低神经网络的准确率。能否在压缩 DNN 模型大小的同时,保证准确率不下降呢?

裁剪“不重要”的神经网络节点,通过再训练的方式,恢复模型准确率。

利用大的神经网络训练更小的神经网络,使之逼近大神经网络准确率

近年相关文章已经很多了,简要参考 FasterDNN 。

4.联合优化

在 2.0 提到, 的计算可以利用 的稀疏性来避免不必要的计算,那么在 DNN 激活函数选择 就可以使得激活向量 稀疏(约50%),从而大幅减少 的运算量,而且 通常比 有更高的准确率。

5.Skip Frame 跳帧计算

在移动端的测试,只简单做了 Android 平台,测得实时率远低于1,就没再继续优化。在上线 DNN 评测模型时,反馈 iPhone 4/itouch4 比较 卡卡卡 。忽然想起已经实现的跳帧计算还没有开启。跳帧计算利用语音信号的特点,运算量减半,准确率几乎无损失。

Fig4. Baseline 为2.0的baseline

语音评测 benchmark 提升

DNN 相比传统建模方法,大幅提升了声学模型的准确率、抗噪能力。语音评测的一个重点就是发音维度评测,与声学模型练习紧密,DNN 声学模型的应用,全面提升了语音评测 benchmark。基于DNN的语音评测系统上线一年有余。

Voice Activity Detection(VAD)

自动停止录音 功能根据停顿时长判断是否结束录音,使得语音交互更流畅。基于 DNN 模型的 VAD 模型有效提升了该功能的准确性和灵敏度。

总结

通过 模型压缩、计算等价性变换、矩阵计算优化 等方法完成 DNN 模型在移动端的运行时编码、计算优化,全面提升了语音评测性能。相比网络传输服务端计算的方式,离线计算对用户网络环境要求低,可以给予用户实时反馈。由于单核 CPU 已做到实时计算,“多核 CPU、Mobile GPU 加速”没有继续探索。

据所知,『英语流利说』仍是为数不多可以离线计算深度神经网络模型的手机应用。

保守地说,在当时 『英语流利说』是全球首款配备深度神经网络的教育 APP 。

首发 『英语流利说』离线深度神经网络优化 (勘误:入职日期应为2014年12月),这里保持原味、略作修改。

进入了解更多关于网站搜索优化的信息。