kaldi中CD-DNN-HMM网络参数更新公式手写推导
在基于DNN-HMM的语音识别中,DNN的作用跟GMM是一样的,即它是取代GMM的,具体作用是算特征值对每个三音素状态的概率,算出来哪个最大这个特征值就对应哪个状态。只不过以前是用GMM算的,现在用DNN算了。这是典型的多分类问题,所以输出层用的激活函数是softmax,损失函数用的是cross entropy(交叉熵)。不用均方差做损失函数的原因是在分类问题上它是非凸函数,不能保证全局最优解(只有凸函数才能保证全局最优解)。Kaldi中也支持DNN-HMM,它还依赖于上下文(context dependent, CD),所以叫CD-DNN-HMM。在kaldi的nnet1中,特征提取用filterbank,每帧40维数据,默认取当前帧前后5帧加上当前帧共11帧作为输入,所以输入层维数是440(440 = 40*11)。同时默认有4个隐藏层,每层1024个网元,激活函数是sigmoid。今天我们看看网络的各种参数是怎么得到的(手写推导)。由于真正的网络比较复杂,为了推导方便这里对其进行了简化,只有一个隐藏层,每层的网元均为3,同时只有weight没有bias。这样网络如下图:

上图中输入层3个网元为i1/i2/i3(i表示input),隐藏层3个网元为h1/h2/h3(h表示hidden),输出层3个网元为o1/o2/o3(o表示output)。隐藏层h1的输入为
(q11等表示输入层和隐藏层之间的权值),输出为
。输出层o1的输入为
(w11等表示隐藏层和输出层之间的权值),输出为
。其他可类似推出。损失函数用交叉熵。今天我们看看网络参数(以隐藏层和输出层之间的w11以及输入层和隐藏层之间的q11为例)在每次迭代训练后是怎么更新的。先看隐藏层和输出层之间的w11。
1,隐藏层和输出层之间的w11的更新

先分别求三个导数的值:


所以最终的w11更新公式如下图:

2,输入层和隐藏层之间的q11的更新

先分别求三个导数的值:


所以最终的q11更新公式如下图:

以上的公式推导中如有错误,烦请指出,非常感谢!
kaldi中CD-DNN-HMM网络参数更新公式手写推导的更多相关文章
- pytorch 想在一个优化器中设置多个网络参数的写法
使用tertools.chain将参数链接起来即可 import itertools ... self.optimizer = optim.Adam(itertools.chain(self.enco ...
- C# 多线程,new ThreadStart(方法)中的方法如果有参数,该怎么写
using System; using System.Threading; public class Work { public static void Main() { // Start a thr ...
- python中导入模块的本质, 无法导入手写模块的解决办法
最近身边一些朋友发生在项目当中编写自己模块,导入的时候无法导入的问题. 下面我来分享一下关于python中导入模块的一些基本知识. 1 导入模块时寻找路径 在每一个运行的python程序当中,都维护了 ...
- 2019-3-10——生成对抗网络GAN---生成mnist手写数字图像
""" 生成对抗网络(GAN,Generative Adversarial Networks)的基本原理很简单: 假设有两个网络,生成网络G和判别网络D.生成网络G接受一 ...
- [转] kaldi中FST的可视化-以yesno为例
http://blog.csdn.net/u013677156/article/details/77893661 1.kaldi解码过程 kaldi识别解码一段语音的过程是:首先提取特征,然后过声学模 ...
- [转]决策树在Kaldi中如何使用
转自:http://blog.csdn.net/chenhoujiangsir/article/details/51613144 说明:本文是kaldi主页相关内容的翻译(http://kaldi-a ...
- 3. CNN卷积网络-反向更新
1. CNN卷积网络-初识 2. CNN卷积网络-前向传播算法 3. CNN卷积网络-反向更新 1. 前言 如果读者详细的了解了DNN神经网络的反向更新,那对我们今天的学习会有很大的帮助.我们的CNN ...
- 2. DNN神经网络的反向更新(BP)
1. DNN神经网络的前向传播(FeedForward) 2. DNN神经网络的反向更新(BP) 3. DNN神经网络的正则化 1. 前言 DNN前向传播介绍了DNN的网络是如何的从前向后的把数据传递 ...
- Centos环境下手动设置-网络参数配置-网络挨排错顺序-设置网卡为上网模式的设定
Linux中网络参数大致包含以下内容: IP地址 子网掩码 网关 DNS服务器 主机名(默认 localhost) 历来Linux系统中修改这些参数的方式通常有:命令.文件两种.其中通过命令设置可以立 ...
随机推荐
- Spring BeanDefinition的加载
前面提到AbstractRefreshableApplicationContext在刷新BeanFactory时,会调用loadBeanDefinitions方法以加载系统中Bean的定义,下面将讲 ...
- 遇见Python
开发: 开发语言: 1.高级语言:Python Java.PHP C# Go ruby C++... ===> 字节码 2.低级语言:C.汇编 ...
- 最近太多人问Protobuf的问题了,把这个重新搬出来!
pb杀手 我先让pbkiller做个自我介绍 pbkiller:我是一位专业的争对 protobuf 问题训练有素的杀手,我可以为您轻松搞定 protobuf 在 Cocos Creaotr 开发中的 ...
- HTML input 文本框输入中文逗号自动转换为英文逗号
input 标签中增加 onkeyup.onafterpaste 属性: <input type="text"placeholder="中文逗号自动转换为英文逗号& ...
- 定期从Docker上部署的MySQL备份数据
前段时间公司停电,正巧赶上周一领导要开会要过一遍项目,然而项目所依赖的MySQL数据库是直接部署在宿主机,且因为各人部署方式不同的原因,花了很久才在开会前启动起来.于是开完会后,我第一件事就是把原先依 ...
- Java-Thread01之创建线程
------  ...
- 设计模式----行为型模式之观察者模式(Observer Pattern)
下面是阅读<Head First设计模式>的笔记. 观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. JDK API内置机制 ...
- ActiveMQ学习总结------原生实战操作(下)03
本篇将继续延续上一篇的内容,作为知识补充篇,为接下来我们学习spring整合ActiveMQ打好基础 本篇主要学习内容: 1.ActiveMQ 队列服务监听 2.ActiveMQ Topic模型 回顾 ...
- 从0开始学FreeRTOS-(创建任务)-2
# 补充 开始今天的内容之前,先补充一下上篇文章[从单片机到操作系统-1](https://jiejietop.gitee.io/freertos-1/)的一点点遗漏的知识点. ```js BaseT ...
- js 判断对象是否为空
利用JSON.stringify var objData = {};JSON.stringify(objData) ==="{}" // true 第二种用原声js 方法 Obje ...