怎樣看待b大巔峰之作『LiFT深度學習框架』無人問津?

眾所周知,b大(@bhuztez)是華人中特別稀罕的天才程序員(沒有之一),其水平公認深不可測。

到了知乎b大呼風喚雨了十幾年也沒有什麼別的,大概三件事:

一個,及時從大學退學,腳踩各大公司offer,確立了程序員素質教育的典範;

第二個,把各種21天寫入了程序員入門必讀里;

第三個,就是我們知道的J、APL、Erlang三個編程語言代表。

如果說還有一點什麼成績就是知乎程序員一律不得裝b!這個對知乎的命運有很大的關係。因為b大後來又幹了三年,等於在知乎幹了23年曾博。還有怒斥輪子哥英語也是很爛的。但這些都是次要的,b大主要的就是三件事情,很不幸,就做了一點微小的工作,逗逗大家。

近日來,由於曾博棒殺tyd給b大成功續命,b大開足馬力完成了巔峰之作『LiFT深度學習框架』,開撕機器學習領域的裝b犯。據說LiFT掏空了J的精華rank,並且實現了消數組之類的功能,領先各路機器學習框架幾十年(四捨五入就是一個世紀)。

如今(2016年7月24日),一些日子過去了,雖然LiFT實現完美,沒人提出issue,但是star量只有8,可以說門可羅雀。這是什麼原因呢?是因為大家沉迷在了LiFT華美的英文介紹中嗎?我應該鄭重地star LiFT嗎?急,在線等!!!


你這黑的。只有許式偉才會說什麼巔峰之作吧。

-----------------------------

理念再好,沒有跑分的數字很難宣傳啊。畢竟porn也是很重要的。

而LiFT還沒能跑分是因為integer set library優化的速度很慢很慢,在抄襲了ppcg的默認參數之後還是很慢,要想調isl的參數不容易啊。

就來看一個簡單的convolution

Input :: (in 24 24)
K1 :: (in 8 5 5)
B1 :: (in 8)
Pool1 :: (out 8 10 10)

relu"0 := (0.0 &>. y)
ratio"1 := (y / ((reduce 1 +) y))

Conv1 := ((((trim 4 4)"2) (((oblique 2 +)"4) (K1 ((*"2 0)"2 2) Input))) + B1)

Relu1 := (relu Conv1)
Pool1 := (((stride 2 2)"2) (((trim 1 1)"2) (((oblique 2 &>.)"4) (((duplicate 2 2)"0) Relu1))))

採用了ppcg的默認參數之後,那個schedule在分塊之前直接生成AST會變成這樣

for (int c1 = 0; c1 &<= 7; c1 += 1) for (int c2 = 4; c2 &<= 23; c2 += 1) for (int c3 = 4; c3 &<= 23; c3 += 1) { S22(c1, c2, c3); for (int c4 = 0; c4 &<= 4; c4 += 1) for (int c5 = 0; c5 &<= 4; c5 += 1) S26(c1, c2 + c4 - 4, c3 + c5 - 4, c4, c5); S24(c1, c2 - 4, c3 - 4); S25(c1, c2, c3); } for (int c1 = 0; c1 &<= 7; c1 += 1) for (int c2 = 1; c2 &<= 19; c2 += 2) for (int c3 = 1; c3 &<= 19; c3 += 2) { S16(c1, c2, c3); for (int c4 = 0; c4 &<= 1; c4 += 1) for (int c5 = 0; c5 &<= 1; c5 += 1) S28(c1, c2 + c4 - 1, c3 + c5 - 1, c4, c5); S18(c1, c2, c3); }

這就有了一個問題,convolution和max pooling分開了,也就是和再快也快不過CuDNN了,這是不可接受的。

使用更合適的參數優化,生成出來的AST是這樣的

for (int c0 = 0; c0 &<= 7; c0 += 1) for (int c1 = 4; c1 &<= 23; c1 += 1) for (int c2 = 4; c2 &<= 23; c2 += 1) { S22(c0, c1, c2); for (int c3 = 0; c3 &<= 4; c3 += 1) for (int c4 = 0; c4 &<= 4; c4 += 1) { S26(c0, c1 + c3 - 4, c2 + c4 - 4, c3, c4); if (c3 == 0 c4 == 0) { S24(c0, c1 - 4, c2 - 4); } else if (c3 == 1 c4 == 1 c2 % 2 == 0 c1 % 2 == 0) S16(c0, c1 - 3, c2 - 3); } S25(c0, c1, c2); S28(c0, c1 - 4, c2 - 4, c1 % 2, c2 % 2); if ((c1 - 1) % 2 == 0 (c2 - 1) % 2 == 0) S18(c0, c1 - 4, c2 - 4); }

這樣把convolution和max pooling放在一起計算了,才有可能跑贏naive調用CuDNN的工具。

但是這個例子後者的優化所需時間大約是前者的4倍,而比如ConvNetJS那個MNIST DEMO,前者需要大約5分鐘,後者我就懶得跑了。


曾老師不是退知乎了嗎...

說話不作數啊你


等於在知乎幹了23年曾博

題主你來解釋一下?


hah,看來曾老師這個號要主攻b大了


曾老師的精分水平,我給10000分!

另外,曾老師,你為什麼把上午那個曾五億的回答給刪了?


我只想問問b大是誰,有人科普下嘛!


這個勃勃應該不是真的吧,好像是後來改名的


我什麼時候才能達到勃勃提問題一半的水平呢?


推薦閱讀:

北大裝逼哪系強?
天河二號對人工智慧的行為模式開發上有什麼作用?
2016網易機試編程題中的字元串問題?
面試會出哪些經典演算法題?
如何通過自己編程為瀏覽知乎增加一些比較小眾的功能?

TAG:人工智慧 | 開源軟體 | 計算機 | 機器學習 | 深度學習DeepLearning |