OpenAI发布高度优化的GPU计算内核—块稀疏GPU内核

深度学习领域的模型架构和算法的发展在很大程度上受到GPU能否高效实现初等变换的限制。其中一个问题是缺乏GPU不能高效执行稀疏线性操作,我们现在正在发布高度优化的GPU计算内核实现一些稀疏模式(附带初步研究结果)。从初步的结果来看希望很大,但有不确定性,我们邀请社区加入我们,研究这些内核解锁的体系结构的极限。

稠密层(左)可以替换为稀疏并且宽的层(中)或稀疏并且深的层(右),而它们的计算时间几乎相同。

稀疏权矩阵与密集权矩阵相反,它具有大量值为零的项。我们希望稀疏权重矩阵作为模型的构建模块,因为矩阵乘法和稀疏块卷积的计算成本仅与非零块的数量成正比。例如,在给定的参数预算和计算预算中,神经网络的训练比其他方法更宽也更深,,例如具有数万个隐藏单元的LSTM 。(目前训练的最大LSTM只有数千个隐藏单元。)

内核

稠密权重矩阵(左)和块稀疏权重矩阵(中)的可视化,其中空白部分表示权重为零。

这个内核允许在完全连接层和卷积层中有效地使用块稀疏权重(如上所示)。对于卷积层,内核的输入和输出特征维度都允许有稀疏性; 空间维度上的连通性不受影响。稀疏性是在块级别(右上图)中定义的,并且已针对8×8(例如本例中)16×16或32×32的块大小进行了优化。在这个块级别中,稀疏模式是完全可配置的。由于内核计算时跳过值为零的块,所以计算成本只与非零权重的数量成正比,而不是与输入或输出特征的数量成正比。存储参数的成本也只与非零权重的数量成比例。

不同水平的稀疏的加速系数,与cuBLAS相比,在宽的状态下(12288个隐藏单元),块大小为32×32,小批量大小为32。在使用CUDA 8的NVIDIA Titan X Pascal GPU上进行比较。相对于cuSPARSE的加速在测试的稀疏水平上事实上更大。

使用内核

下面我们展示用于在Tensorflow中执行稀疏矩阵乘法的示例代码。

from blocksparse.matmul import BlocksparseMatMul
import tensorflow as tf
import numpy as np

hidden_size = 4096
block_size = 32
minibatch_size = 64

# Create a (random) sparsity pattern
sparsity = np.random.randint(2, size=(hidden_size//block_size,hidden_size//block_size))

# Initialize the sparse matrix multiplication object
bsmm = BlocksparseMatMul(sparsity, block_size=block_size)

# Input to graph
x = tf.placeholder(tf.float32, shape=[None, hidden_size])

# Initialize block-sparse weights
w = tf.get_variable("w", bsmm.w_shape, dtype=tf.float32)

# Block-sparse matrix multiplication
y = bsmm(x, w)

# Run
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
result = sess.run([y], feed_dict = {x: np.ones((minibatch_size,hidden_size), dtype='float32')})
print(result)

小世界的LSTM

块稀疏内核的一个特别有趣的用途是使用它们来创建小世界神经网络。小世界网络图的连接方式是,图中的任何两个节点都可以通过少量步骤连接(即使图中有数十亿个节点)。我们实现小世界连通性是为了在稀疏性很高的情况下,仍然可以通过网络迅速传播信息。其实人类的大脑也是小世界的连接模式,这就引发了一个问题:让LSTM具有同样的特性能否提高性能。利用小世界稀疏连通性,我们很快训练了近2万个隐藏单元的LSTM,比具有相似参数计数的密集网络宽5倍,提高了文本生成建模的结果,以及半监督的情感分类。

参阅:

https://s3-us-west-2.amazonaws.com/openai-assets/blocksparse/blocksparsepaper.pdf

在小世界图中,即使具有高度稀疏,节点也能够以少量步骤连接。上面的动图展示了从二维Watts-Strogatz小世界图中中心节点(像素)传播的激活(为了美观做了平滑的随机)。在图中,节点之间的平均路径长度小于5,类似于我们的LSTM实验中使用的Barabasi-Albert图。

情感表征学习

在我们的情绪神经元实验中,我们使用了近似等效参数计数的LSTM,并比较了比较了具有密集权重矩阵与块稀疏变量的模型。稀疏模型在所有情感数据集上都优于稠密模型。我们的稀疏模型将文档级别IMDB数据集的最新状态从5.91%的错误率(Miyato et al,2016)降低到5.01%。与以前的结果相比,这个改进看起来很不错,之前只有在较短的句子级别的数据集上表现最好

对密集和稀疏生成模型的特征进行训练的线性模型的情感分类错误(%)大致相当于总参数计数。

压缩结果

通过使用稀疏和宽的LSTM,我们的实验位每字符的结果从1.059下降到1.048,且参数计数相同(约1亿)。具有块稀疏线性层的架构也可以根据用稠密连接的线性层获得的结果进行改善。我们对CIFAR-10自然图像的PixelCNN ++模型进行了简单的修改。用稀疏内核代替常规的二维卷积核,在加深网络的同时保持超参数的其余部分不变,导致每维的位数从2.92降低到2.90,现在这个数据集的最新技术水平。

研究方向

这里我们列出一些对未来研究的建议。

  • 神经网络中的大部分权重可以在训练结束后修剪。如果推理时这种修剪与这些内核一起使用能节省多少执行的时间?
  • 在生物大脑中,除了连接强度之外,网络的部分稀疏结构在成长过程中就已确定。我们是否可以在人工神经网络中进行模仿,是否可以不仅使用梯度学习连接权重还学习最佳的稀疏结构?近期有两篇论文可以在这个方向起到作用:arxiv.org/abs/1711.02782 arxiv.org/abs/1712.01312
  • 我们训练了有上万个的隐藏单位的LSTM,获得了更好的文字模型表现。那么,稀疏层使得训练具有大量权重矩阵的模型成为可能,而且与其较小的稠密网络相同数量的参数和相同的计算成本。那么应用在哪些领域将对性能产生最大的影响?

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-12-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏计算机视觉战队

深度学习超参数简单理解

首先谢谢读者的指正,现在已经把所有遮挡的都处理完毕,谢谢您们的指正,谢谢! ---- 正文: 说到这些参数就会想到Stochastic Gra...

3554
来自专栏机器之心

揭秘深度学习成功的数学原因:从全局最优性到学习表征不变性

3999
来自专栏华章科技

揭秘深度学习成功的数学原因:从全局最优性到学习表征不变性

近年来,深度学习大获成功,尤其是卷积神经网络(CNN)在图像识别任务上的突出表现。然而,由于黑箱的存在,这种成功一度让机器学习理论学家颇感不解。本文的目的正是要...

542
来自专栏人工智能

揭秘深度学习成功的数学原因:从全局最优性到学习表征不变性

原标题:揭秘深度学习成功的数学原因:从全局最优性到学习表征不变性 选自arXiv 作者:RenéVidal、Joan Bruna、Raja Giryes、Ste...

2746
来自专栏机器之心

入门 | 理解深度学习中的学习率及多种选择策略

2636
来自专栏磐创AI技术团队的专栏

一个完整的机器学习项目在Python中演练(四)

1175
来自专栏机器之心

学界 | 李飞飞等人提出MentorNet:让深度神经网络克服大数据中的噪声

3584
来自专栏深度学习那些事儿

深度学习中IU、IoU(Intersection over Union)的概念理解以及python程序实现

Intersection over Union是一种测量在特定数据集中检测相应物体准确度的一个标准。我们可以在很多物体检测挑战中,例如PASCAL VOC ch...

2463
来自专栏计算机视觉战队

深度学习超参数简单理解

说到这些参数就会想到Stochastic Gradient Descent (SGD)!其实这些参数在caffe.proto中 对caffe网络中出现的各项参数...

3499
来自专栏磐创AI技术团队的专栏

深度学习中的正则化技术概述(附Python+keras实现代码)

751

扫码关注云+社区