本文参考文献
Waibel A, Hanazawa T, Hinton G, et al. Phoneme recognition using time-delay neural networks[J]. IEEE transactions on acoustics, speech, and signal processing, 1989, 37(3): 328-339.
引用次数:2362
今天要介绍的是卷积神经网络的前身:Time-Delay Neural Network,它被Hinton组于1989年提出,初衷是为了解决语音识别中传统方法HMM无法适应语音信号中的动态时域变化,并且该结构参数较少,进行语音识别不需要预先将音标与音频在时间线上进行对齐,实验证明TDNN相比HMM表现更好。
TDNN的两个明显的特征是动态适应时域特征变化和参数较少,传统的深度神经网络的输入层与隐含层一一连接,TDNN在这里做了一点改变,即隐含层的特征不仅与当前时刻的输入有关,而且还与未来时刻的输入有关。
文中提出了一个三层的TDNN用于字母”B”, “D”, “G”的语音识别任务,如上图所示。图中的输入是15帧音频的特征,每一帧特征是长度为16的梅尔系数,这里设定的时延值为2,即上面一层网络的输入由下面一层连续三个时刻组成,可以看到,Hidden Layer 1的神经元个数为8,由于TDNN中应用了权重共享,即相同的时延位置的权重是共享的(如下图所示,相同颜色的箭头代表的权重相同),于是,在输入层与Hidden Layer 1之间有48个权重。在Hidden Layer 2中,设定了时延值为4,该层神经元个数为3,设置较大的时延值可以让网络看到更大的时域范围特征。最后,将Hidden Layer 2经过一个MLP即可得到三个字母的输出概率分布。
TDNN原理现在看起来似乎非常简单,但是在1989年那个时候,已经是一个非常大的突破了,并且受此影响,后来就有了卷积神经网络的诞生。TDNN原理就介绍这么多,接下来我们动手基于TensorFlow来实现论文中的TDNN模型结构。
import tensorflow as tf
import numpy as np
tf.set_random_seed(922)
np.random.seed(0)
def tdnn(inp, n_class):
h1_kernel_size = 3
h1_filters = 8
h1 = tf.layers.conv1d(inp, h1_filters, h1_kernel_size)
h2_kernel_size = 5
h2_filters = n_class
h2 = tf.layers.conv1d(h1, h2_filters, h2_kernel_size)
h2 = tf.transpose(h2, [0, 2, 1])
output = tf.squeeze(tf.layers.dense(h2, 1, tf.sigmoid))
return output
if __name__ == '__main__':
bs = 1
n_frame = 15
n_feature = 16
n_class = 3
inp=tf.placeholder(tf.float32, shape=[bs, n_frame, n_feature])
output = tdnn(inp, n_class)
with tf.Session() as sess:
i = np.random.normal(size=(bs, n_frame, n_feature))
sess.run(tf.global_variables_initializer())
o = sess.run(output, feed_dict={inp: i})
print np.array(o).shape # (3,)
print np.array(o) # [ 0.64834243 0.91836888 0.50499392]
之前看到有人说Lecun提出的卷积神经网络是受视觉启发,不过由于Hinton的这篇TDNN论文比Lecun的卷积神经网络要早一年发表,也许Lecun是受Hinton的TDNN启发的。有趣的是,虽然TDNN在30年前就已经被Hinton提出来了,近几年,语音识别的成功还是主要受益于RNN/LSTM+CTC,而深度卷积神经网络在语音识别中的应用才刚刚开始不久。
题图:黄淑珍《暖》
点击阅读原文可以查看最任性的清华学霸/大学教授/私募投资达人,同时又是富有温度的自媒体写手的精彩文章,看看财务自由的他,整天都在思考些啥。小编力荐!
你可能会感兴趣的文章有:
Network-in-Network原理及其TensorFlow实现
如何基于TensorFlow实现ResNet和HighwayNet
深度残差学习框架(Deep Residual Learning)
推荐阅读 | 如何让TensorFlow模型运行提速36.8%
推荐阅读 | 如何让TensorFlow模型运行提速36.8%(续)
深度学习每日摘要|坚持技术,追求原创