
原创
文章平均质量分 89
MoussaTintin
@美团语音AI
展开
-
【Learning Notes】基于 boosting 原理训练深层残差神经网络
Huang et al. Learning Deep ResNet Blocks Sequetially using Boosting Theory.文章指出一种基于 boosting(提升)原理,逐层训练深度残差神经网络的方法,并对性能及泛化能力给出了理论上的证明。1. 背景1.1 BoostingBoosting[1] 是一种训练 Ensemble 模型的经典方法,其中一种具体实现 GBDT原创 2017-06-17 00:28:00 · 3676 阅读 · 0 评论 -
【Learning Notes】生成式对抗网络(Generative Adversarial Networks,GAN)
简单介绍各种生成式对抗网络(GAN)原创 2017-03-14 10:18:13 · 9164 阅读 · 2 评论 -
pytorch 学习笔记之自定义 Module
pytorch 是一个基于 python 的深度学习库。pytorch 源码库的抽象层次少,结构清晰,代码量适中。相比于非常工程化的 tensorflow,pytorch 是一个更易入手的,非常棒的深度学习框架。对于系统学习 pytorch,官方提供了非常好的入门教程 ,同时还提供了面向深度学习的示例,同时热心网友分享了更简洁的示例。1. overview不同于 theano,te...原创 2017-04-22 14:42:39 · 10380 阅读 · 2 评论 -
模型压缩之 BinaryNet
1. 动机深度学习在图像、语音、文本等领域都取得了巨大的成功,推动了一系列智能产品的落地。但深度模型存在着参数众多,训练和 inference 计算量大的不足。目前,基于深度学习的产品大多依靠服务器端运算能力的驱动,非常依赖良好的网络环境。很多时候,出于响应时间、服务稳定性和隐私方面的考虑,我们更希望将模型部署在本地(如智能手机上)。为此,我们需要解决模型压缩的问题——将模型大小、内存占用...原创 2016-12-03 16:13:02 · 14786 阅读 · 3 评论 -
【Learning Notes】Quasi-recurrent Neural Networks
Quasi-recurrent Neural Networks (QRNN)原创 2017-09-12 20:02:14 · 5406 阅读 · 0 评论 -
AMD ROCm 平台简介
介绍 AMD 的 ROCm GPU 计算平台。原创 2017-07-08 14:26:36 · 40193 阅读 · 3 评论 -
基于 NVRTC 和 CUPY 的 Python CUDA 扩展
在之前的文章中,我们探讨了如何通过 cffi,扩展 pytthon (pytorch)。利用 cffi 方法,我们需要单独的 C 和 CUDA 源文件,还需要事先进行编译,不但过程比较繁琐,代码结构也稍显凌乱。对于一些简单的 CUDA 扩展(代码量不大,没有复杂的库依赖),显得不够友好。这里,我们介绍如何通过在线编译的方式,直接为 pytorch 提供 CUDA 扩展(当然,也可以是纯 C 的原创 2018-01-26 16:30:20 · 5660 阅读 · 2 评论 -
【Learning Notes】CTC 原理及实现
CTC( Connectionist Temporal Classification,连接时序分类)是一种用于序列建模的工具,其核心是定义了特殊的目标函数/优化准则[1]。 jupyter notebook 版见 repo.1. 算法这里大体根据 Alex Graves 的开山之作[1],讨论 CTC 的算法原理,并基于 numpy 从零实现 CTC 的推理及训练算法。...原创 2018-03-05 09:47:32 · 25229 阅读 · 21 评论 -
【Learning Notes】KMeans GMM 模型 及 EM 训练
kmeans 和 GMM 的简单实现及基于 EM 的训练。 jupyter notebook 版本见 repo。首先,导入相关的模块。from __future__ import print_functionimport numpy as npimport matplotlibimport matplotlib.pyplot as plt%matplotlib inl...原创 2018-03-03 09:38:23 · 1023 阅读 · 0 评论 -
【Learning Notes】Gumbel 分布及应用浅析
1. 分布的形式化物理意义Gumbel 分布是一种极值型分布。举例而言,假设每次测量心率值为一个随机变量(服从某种指数族分布,如正态分布),每天测量10次心率并取最大的一个心率值作为当天的心率测量值。显然,每天纪录的心率值也是一个随机变量,并且它的概率分布即为 Gumbel 分布。概率密度函数(PDF)Gumbel 分布的 PDF 如下:f(x;μ,β)=e−z−e...原创 2018-02-24 23:33:32 · 42299 阅读 · 11 评论 -
【Learning Notes】线性链条件随机场(CRF)原理及实现
1. 概述条件随机场(Conditional Random Field, CRF)是概率图模型(Probabilistic Graphical Model)与区分性分类( Discriminative Classification)的一种接合,能够用来对“结构预测”(structured prediction,e.g. 序列标注)问题进行建模。如图1,论文 [1] 阐释了 CRF 与其他模...原创 2018-03-17 21:40:20 · 5220 阅读 · 1 评论 -
A Note on Kaldi's PLDA Implementation
Kaldi’s PLDA implementation is based on [1], the so-called two-covariance PLDA by [2]. The authors derive a clean update formula for the EM training and give a detailed comment in the source code. He...原创 2018-04-05 16:24:05 · 907 阅读 · 1 评论 -
【Learning Notes】PLDA(Probabilistic Linear Discriminant Analysis)
PLDA 是一个概率生成模型,最初是为解决人脸识别和验证问题而被提出[3,5],之后也被广泛应用到声纹识别等模式识别任务中。学者从不同的动机出发,提出了多种 PLDA 算法,文献[2] 在统一的框架下比较了三种 PLDA 算法变种(standard[3,6], simplified[4], two-covariance[5,8]),并在说话人识别任务上比较了它们的性能差异。本文讨论的 PLDA...原创 2018-04-21 23:19:15 · 10206 阅读 · 3 评论 -
基于 python 的语音识别 API 调用
腾讯 AI 开放平台 开放了语音、图像等多种 AI 功能接口。本文尝试基于 python 完成对语音识别接口的本地调用。1. 准备工作API 调用需要身份认证。我们首先需要注册并获得 AppID 和 AppKey。在官网注册后,进入控制台,创建一个新应用,并在接口选择栏,为应用勾选“语音识别”。应用创建成功后,记下 AppID 和 AppKey。2. 接口鉴权接口鉴权的...原创 2018-04-19 23:31:35 · 6042 阅读 · 0 评论 -
【Learning Notes】Sequence Transducer
CTC独立性假设,各个 frame 的输出概率。 合理性:1。简化了模型;2。虽然独立于输出,但依赖输入。我们能做的更好吗? 输出概率依赖于之前的输出,更合理,显然许多问题是成立的(语音识别,识别结果应该符合某种习惯) Fig. 1. The RNN-T model. The model consists of an encoder network, which maps inp...原创 2018-07-28 12:56:14 · 6443 阅读 · 0 评论 -
keras CNTK 后端
试验 Keras 的 CNTK 后端。原创 2017-06-02 23:42:35 · 3210 阅读 · 0 评论 -
【Learning Notes】作为 Ensemble 模型的 Residual Network
以模型 Ensemble 的思路分析 Residual Network 成功的原因。原创 2016-11-20 17:40:07 · 4947 阅读 · 0 评论 -
【Learning Notes】变分自编码器(Variational Auto-Encoder,VAE)
简单介绍变分自编码器(Variational Auto-Encoder,VAE)实现和原理。原创 2016-12-14 17:48:49 · 70290 阅读 · 20 评论 -
神经网络端到端序列学习(一)
许多重要问题都可以抽象为变长序列学习问题(sequence to sequence learning),如语音识别、机器翻译、字符识别。这类问题的特点是,1) 输入和输入都是序列(如连续值语音信号/特征、离散值的字符),2) 序列长度都不固定,3)并且输入输出序列长度没有对应关系。因此,传统的神经网络模型(DNN, CNN, RNN)不能直接以端到端的方式解决这类问题的建模和学习问题。解决变长序列的原创 2016-11-26 15:33:49 · 17679 阅读 · 1 评论 -
Matlab数据可视化(5):二维数据可视化 I
以下介绍数据的二维可视化。一. 二维散点图(源代码:scatter.m)我们用著名的Iris数据集(Fisher, 1936)作为绘图实例。Iris数据集包含3种鸢尾花的150个样本数据,每个数据都有4个属性(花萼和花瓣的长度及宽度)。1) 基本散点图我们用其中两个属性值作为X和Y轴,另一个属性值表示点的大小。(图1)%% 加载数据集[attrib classNam原创 2013-06-13 16:34:42 · 14869 阅读 · 2 评论 -
Matlab数据可视化(4):一维数据绘图 II
五. 结点连接图(node link plot)(源代码:NodeLinks.m)有时,我们需要绘制出不同结点之间的连通关系,即结点连接图。以下以绘制美国128座城市之间的连通关系为例,介绍两种结点连接图的画法。1) 定义每座城市与距它最近的城市连通,与其余视为不连通,然后根据连通性,利用gplot命令,直观的绘出结点连接图。(图9)%% #1%% 定义数据[XYCoord原创 2013-06-11 18:18:00 · 9710 阅读 · 0 评论 -
Matlab数据可视化(3):一维数据绘图 I
以下介绍一维数据的可视化。一. 饼状图、根状图和梯形图1) 饼状图(源代码:pie_stem_stairs.m)饼状图可以直观地表示百分比的相对大小。饼状图可以由matlab的pie命令绘制。其中,我们可以将某些数据从饼中分离以强调显示(图1)。Expenses = [20 10 40 12 20 19 5 15];ExpenseCategories = {'食品',原创 2013-06-09 08:34:02 · 14975 阅读 · 0 评论 -
Matlab数据可视化(1):基础篇 I
本文在《MATLAB Graphics and Data Visualization Cookbook》一书的基础上,介绍Matlab数据可视化方法。 我们假设读者已经具备Matlab的基本知识(了解Matlab的语法,能够使用Matlab进行数据的读取、运算等操作),并能熟练地查阅相关的Matlab函数。未经特殊说明,所有图像都在Matlab 2013a 环境下绘制(源码下载)。一. 绘原创 2013-05-21 05:32:16 · 12292 阅读 · 3 评论 -
Matlab数据可视化(2):基础篇 II
五. 添加图例(源代码legends.m)在图像包含较多图形时,适当的图例对快速、正确的理解图像反映的信息是必不可少的。以下一个实例可以说明精心设计图例的重要性。我们在一幅图像中,同时绘出10个不同均值和方差的正态分布曲线。数据可以由如下代码生成,或直接加载10NormalDistributions.mat% stdVect and meanVectstdVect = [.49,原创 2013-05-21 19:12:02 · 4969 阅读 · 0 评论 -
随机数生成(一):均匀分布
引言许多应用中都需要用到随机数,如物理仿真、统计采样、密码学、博彩等。随机数一般可以通过两种方法得到。一种是基于物理现象由硬件产生。由此得到的随机数,在产生之前是不可预知的,因此,是真正的随机数。另一种是通过计算机算法产生。通过算法产生的随机数在本质是可以预知,但是在统计上,满足一定的随机性要求,因此一般称作“伪随机数”。伪随机数要比真正的随机数更容易获取,而且在大多数情况下都能满足应用的原创 2012-09-11 16:17:02 · 28453 阅读 · 2 评论 -
Intel 超线程技术(Hyper-Threading Technology)
我们经常会提到两种“线程”(thread)。一种线程存在于操作系统(OS)中。对OS而言,进程是资源分配的基本单位,每个程序在一个进程中分配相应的内存等系统资源。而每个进程可以包含多个“线程”。这些线程共享进程分配的资源,但是独立地被OS调度执。我们可以称这种线程为“软线程”。另一种线程则是我们将要介绍的,因为它与处理器密切相关,我们不妨称之为“硬线程”。可以认为,这两种线程除了名称相原创 2012-08-01 02:08:20 · 11915 阅读 · 0 评论 -
为 OpenCL 提供支模版支持
OpenCL本身(至少目前)并不支持模版。在许多场景下(例如移植CUDA代码),这会带来一些麻烦。 这里,我们介绍一种解决方案。主要思路是,利用OpenCL在运行时编译的特点,通过宏定义实现类似C++模型的功能。首先我们要解决动态获取类型名称的问题 解决方法如下:template<typename T>struct TypeParseTraits { static const ch原创 2015-06-23 15:05:49 · 2051 阅读 · 0 评论 -
静态集成 OpenCL 的 Kernel 源代码到可执行文件
在编写OpenCL代码时,为了方便起见,我们更喜欢将kernel源代码放在单独的文件中(一般为*.cl)。这各做的缺点在于,程序需要在运行时动态读入文件中的代码为字符串,然后再传递给OpenCL的RT编译、执行。因此,在可执行文件之外,我们还需要单独分发*.cl文件。下面,我们介绍一种简单的技巧,将*.cl文件在编译时静态的包含在可执行文件中。首先,将所有源代码由”STRINGFY()”括起来。原创 2015-06-23 14:26:38 · 3937 阅读 · 0 评论 -
基于表达式模版(expression template)的惰性求值(lazy evaluation)
基于模版的惰性求值原创 2016-11-30 11:11:00 · 1650 阅读 · 0 评论 -
智能音箱技术概览
概述智能音箱的软硬件技术。原创 2017-03-21 16:38:20 · 29534 阅读 · 5 评论 -
pytorch 学习笔记之编写 C 扩展
注,pytorch 0.4 提供了更加方便的工具来添加 C++ 扩展,参见这里及这里。pytorch利用 CFFI 进行 C 语言扩展。包括两个基本的步骤(docs):编写 C 代码; python 调用 C 代码,实现相应的 Function 或 Module。在之前的文章中,我们已经了解了如何自定义 Module。至于 [py]torch 的 C 代码库的结构,我们留...原创 2017-05-01 16:53:29 · 3701 阅读 · 1 评论