OpenAI的研究人員們近日發(fā)布了一個(gè)高度優(yōu)化的 GPU 計(jì)算內(nèi)核,它可以支持一種幾乎沒(méi)被人們探索過(guò)的神經(jīng)網(wǎng)絡(luò)架構(gòu):帶有稀疏塊權(quán)重的網(wǎng)絡(luò)。取決于不同的稀疏程度,這些內(nèi)核的運(yùn)行速度可以比 cuBLAS 或者 cuSPARSE 快一個(gè)數(shù)量級(jí)。OpenAI的研究人員們已經(jīng)通過(guò)這些內(nèi)核在文本情感分析和文本圖像的生成中得到了頂尖的成果。
在深度學(xué)習(xí)領(lǐng)域,模型架構(gòu)和算法的開(kāi)發(fā)很大程度上受制于GPU對(duì)基礎(chǔ)計(jì)算操作的支持到什么程度。具體來(lái)說(shuō),其中有一個(gè)問(wèn)題就是通過(guò) GPU 實(shí)現(xiàn)稀疏線性操作時(shí)計(jì)算效率太低。OpenAI這次發(fā)布的計(jì)算內(nèi)核就是為了支持這個(gè)的,同時(shí)也包含一些實(shí)現(xiàn)的多種稀疏模式的初期成果。這些成果已經(jīng)展示出了一些潛力,不過(guò)還算不上是決定性的證據(jù)。OpenAI的研究人員們也邀請(qǐng)更多深度學(xué)習(xí)領(lǐng)域的研究人員一起參與,攜手繼續(xù)改進(jìn)這個(gè)計(jì)算內(nèi)核,讓更多的計(jì)算架構(gòu)變得可能。
密集連接的層(左側(cè))可以用稀疏的、更寬的層(中間)或者稀疏的、更深的層(右側(cè))替代,而計(jì)算時(shí)間幾乎不變
稀疏權(quán)重矩陣與密集權(quán)重矩陣有明顯的不同,就是其中的很多值都是零。稀疏權(quán)重矩陣是許多模型所向往的基礎(chǔ)部件,因?yàn)橛邢∈璧膲K參與的矩陣乘法和卷積操作的計(jì)算成本只是和塊中非零數(shù)字的數(shù)目成比例而已。稀疏性的一個(gè)明顯的好處,就是在給定的參數(shù)數(shù)目和計(jì)算資源限制下可以訓(xùn)練比別的方法寬得多、深得多的神經(jīng)網(wǎng)絡(luò),比如實(shí)現(xiàn)帶有上萬(wàn)個(gè)隱層神經(jīng)元的LSTM網(wǎng)絡(luò)(當(dāng)下能訓(xùn)練的LSTM只有上千個(gè)隱層神經(jīng)元而已)。
計(jì)算內(nèi)核
密集權(quán)重矩陣(左)、稀疏塊權(quán)重矩陣(中)的示意圖。白色的區(qū)域意味著權(quán)重矩陣中對(duì)應(yīng)的位置是0
這個(gè)計(jì)算內(nèi)核可以讓全連接和卷積層高效地利用稀疏塊權(quán)重。對(duì)于卷積層來(lái)說(shuō),這個(gè)內(nèi)核的輸入和輸出特征維度都可以是稀疏的;而空間維度中的連接性不受到任何影響。稀疏性的定義是在塊的級(jí)別上定義的(如上右圖),而且為大小為 8x8、16x16、32x32 的塊做了優(yōu)化(在這里展示的就是 8x8 的塊)。在塊的級(jí)別上,稀疏模式是完全可以自己配置的。由于這個(gè)內(nèi)核在計(jì)算時(shí)會(huì)直接跳過(guò)值為 0 的塊,所以消耗的計(jì)算資源就只和非零的權(quán)重的數(shù)目成正比,而不是像以往一樣和輸出/輸出特征的數(shù)目成正比。存儲(chǔ)這些參數(shù)的開(kāi)銷同樣和非零的權(quán)重的數(shù)目成正比。
與 cuBLAS 相比,這個(gè)內(nèi)核在不同稀疏比例下的加速倍數(shù)。測(cè)試條件:很寬的神經(jīng)網(wǎng)絡(luò)(12288 個(gè)隱層神經(jīng)元),塊大小為 32x32,mini-batch 大小為 32;測(cè)試硬件為 NVIDIATitanXPascalGPU,CUDA 版本為 8.0。在測(cè)試的這些稀疏比例下,相比 cuSPARSE 的速度提升比例還要高一些。
應(yīng)用這個(gè)計(jì)算內(nèi)核
OpenAI 的研究人員們也展示了一些在TensorFlow中進(jìn)行稀疏矩陣乘法的示例代碼
importtensorflowastf
importnumpyasnp
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
稀疏塊內(nèi)核有一種非常有意思的用途,就是用來(lái)創(chuàng)建微縮神經(jīng)網(wǎng)絡(luò)。微縮圖之間可以進(jìn)行連接,圖中的任意兩個(gè)節(jié)點(diǎn)都只需要很少的幾個(gè)步驟就可以連接起來(lái),即便整張圖有數(shù)十億個(gè)節(jié)點(diǎn)也可以。OpenAI的研究人員們想要實(shí)現(xiàn)這樣的微縮連接性的原因是,即便網(wǎng)絡(luò)是高度稀疏的,他們?nèi)匀幌M畔⒖梢栽谡麖垐D中快速傳播。人類大腦就顯示出了微縮連接模式,從而也帶來(lái)了「如果LSTM有同樣的特性,它的表現(xiàn)能否有所提高」的問(wèn)題。通過(guò)微縮稀疏連接性的應(yīng)用,OpenAI 的研究人員們高效地訓(xùn)練了帶有大約 2 萬(wàn)個(gè)隱層神經(jīng)元的 LSTM 模型,同時(shí)網(wǎng)絡(luò)的寬度也要比參數(shù)總數(shù)目類似的網(wǎng)絡(luò)寬 5 倍。訓(xùn)練后的網(wǎng)絡(luò)在文本生成建模、半監(jiān)督情感分類上都有更好的表現(xiàn)。
在微縮圖中,即便稀疏程度很高的情況下節(jié)點(diǎn)之間也只需要很少的步數(shù)就可以互相連接。上面動(dòng)圖里顯示的是從二維 Watts-Strogatz 微縮圖中,中央的節(jié)點(diǎn)(像素)向外激活的情況;另外為了更好的觀感做了隨機(jī)的平滑。在這張圖中,不同節(jié)點(diǎn)之間路徑長(zhǎng)度的平均值小于5,和OpenAI研究員們的LSTM實(shí)驗(yàn)中Barabasi-Albert圖的狀況類似。
情感表征學(xué)習(xí)
OpenAI的研究人員們訓(xùn)練了參數(shù)數(shù)目差不多的稀疏塊權(quán)重網(wǎng)絡(luò)和密集權(quán)重矩陣網(wǎng)絡(luò),對(duì)比它們的表現(xiàn)。稀疏模型在所有的情感數(shù)據(jù)集上都取得了更好的表現(xiàn)。在IMDB數(shù)據(jù)集上,OpenAI的這個(gè)稀疏模型把此前最好的 5.91%錯(cuò)誤率大幅降低到了 5.01%。相比OpenAI此前一些實(shí)驗(yàn)中只在短句上有好的表現(xiàn),這次在長(zhǎng)句中也顯示出了有潛力的結(jié)果。
基于生成式密集和稀疏模型提取的特征訓(xùn)練的線性模型的情感分類結(jié)果。這里的密集和稀疏模型有幾乎相等的參數(shù)數(shù)目。
壓縮任務(wù)的表現(xiàn)
借助稀疏的、更寬的LSTM模型,比特?cái)?shù)每字符的壓縮結(jié)果在實(shí)驗(yàn)中從 1.059進(jìn)步到了 1.048,同樣是在具有差不多的參數(shù)數(shù)目的模型上達(dá)到的。帶有稀疏塊的線性層架構(gòu)如果換成密集連接的線性層,這個(gè)結(jié)果也可以得到進(jìn)一步的提高。OpenAI的研究人員們?cè)谟糜贑IFAR-10的PixelCNN++模型上做了一個(gè)簡(jiǎn)單的修改,把正常的 2D卷積核換成了稀疏核,同時(shí)把網(wǎng)絡(luò)變得更深的同時(shí)保持其它的超參數(shù)不變。修改之后的網(wǎng)絡(luò)也把比特?cái)?shù)每維度的數(shù)值從 2.92降低到了 2.90,達(dá)到了這個(gè)數(shù)據(jù)集上的最好結(jié)果。
未來(lái)研究方向
神經(jīng)網(wǎng)絡(luò)中的多數(shù)權(quán)重在訓(xùn)練結(jié)束后都可以剪枝。如果讓剪枝動(dòng)作配合此次的稀疏內(nèi)核使用,那推理時(shí)能節(jié)省多少計(jì)算時(shí)間、提高多少計(jì)算速度呢?
在生物大腦中,網(wǎng)絡(luò)的稀疏結(jié)構(gòu)有一部分是在成長(zhǎng)時(shí)確定的(成長(zhǎng)的另一個(gè)作用是改變連接強(qiáng)度)。人造神經(jīng)網(wǎng)絡(luò)中是否也能有類似的做法呢,就是不僅通過(guò)梯度學(xué)習(xí)連接權(quán)重,同時(shí)還學(xué)習(xí)最優(yōu)的稀疏結(jié)構(gòu)?近期有一篇論文就提出了一種學(xué)習(xí)稀疏塊RNN的方法,OpenAI最近也提出了一個(gè)算法用來(lái)在神經(jīng)網(wǎng)絡(luò)中做L0規(guī)范化,兩者都可以在這個(gè)方向上起到作用。
OpenAI的研究人員們這次訓(xùn)練了帶有上萬(wàn)個(gè)隱層神經(jīng)元的LSTM模型,帶來(lái)了更好的文本建模表現(xiàn)。那么更廣泛地說(shuō),帶有很大的權(quán)重矩陣的模型如果用了稀疏層,就可以保持與更小的模型一樣的參數(shù)數(shù)目和計(jì)算開(kāi)銷。相信一定有一些領(lǐng)域能讓這種方法發(fā)揮很大的作用。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4808瀏覽量
102819 -
gpu
+關(guān)注
關(guān)注
28文章
4912瀏覽量
130673
原文標(biāo)題:學(xué)界 | OpenAI 發(fā)布稀疏計(jì)算內(nèi)核,更寬更深的網(wǎng)絡(luò),一樣的計(jì)算開(kāi)銷
文章出處:【微信號(hào):AItists,微信公眾號(hào):人工智能學(xué)家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
pyhanlp文本分類與情感分析
一種有效的文本圖像二值化方法
基于相容粗集的二值文本圖像數(shù)字水印方法
基于灰度直方圖和譜聚類的文本圖像二值化方法
基于多小波變換的文本圖像文種識(shí)別

基于嶺回歸的稀疏編碼文本圖像復(fù)原方法
基于Hash函數(shù)的文本圖像脆弱水印算法
基于語(yǔ)義的文本語(yǔ)義分析
人工智能在文本創(chuàng)作上的發(fā)展分析
一種針對(duì)中英混合文本的多維度多情感分析方法

OpenAI又放大招:連接文本與圖像的CLIP

如何去解決文本到圖像生成的跨模態(tài)對(duì)比損失問(wèn)題?

基于BGRU的中文文本情感分析方法
通過(guò)Arduino代碼生成器或藍(lán)牙加載圖像和文本

基于文本到圖像模型的可控文本到視頻生成

評(píng)論