最近AlphaGo的勝利引起很大反響鸠珠,大眾對于AI的關(guān)注一下子熱火了起來∥『模現(xiàn)在的人工智能領(lǐng)域,神經(jīng)網(wǎng)絡(luò)已經(jīng)是一個(gè)相對比較成熟的領(lǐng)域渐排,深度學(xué)習(xí)目前不僅僅依靠神經(jīng)網(wǎng)絡(luò)炬太,但是它本身仍然是一個(gè)基礎(chǔ)的、不可避免的底層組成部分驯耻,而且也是整個(gè)體系里面消耗計(jì)算量的大頭亲族。制作專用處理器看來已經(jīng)成為一種剛需。
神經(jīng)網(wǎng)絡(luò)的專用機(jī)可缚?聽起來不妙霎迫。
在當(dāng)初日本為了趕超美國開發(fā)“第五代計(jì)算機(jī)”的時(shí)候,出現(xiàn)了很多推理(lisp帘靡、prolog)專用機(jī)知给,但是最后都落得了一個(gè)黯然收場的結(jié)果。主要是專用機(jī)很難利用現(xiàn)有的技術(shù)積累描姚,一旦理論領(lǐng)域發(fā)生極小的變化涩赢,由于沒有動機(jī)在商業(yè)上得到持續(xù)的優(yōu)化投入,于是最后只會在價(jià)格和速度上雙雙落敗轩勘,成為雞肋筒扒。
但是現(xiàn)在神經(jīng)網(wǎng)絡(luò)的計(jì)算量問題基本上可以比較確信的成為一個(gè)必須突破的瓶頸,和相對成熟穩(wěn)定的應(yīng)用前景赃阀。神經(jīng)網(wǎng)絡(luò)有訓(xùn)練和應(yīng)用兩塊霎肯,訓(xùn)練的部分要比應(yīng)用略微復(fù)雜一點(diǎn)擎颖。但是兩者都是簡單的乘法和加法的疊加,從而是一個(gè)原理相對簡單观游、相對比較容易設(shè)計(jì)搂捧、兼容和可替代性、可升級性比較簡單的應(yīng)用懂缕,制作專用處理器完全可以一步一步來允跑。
舉例來說,中科院現(xiàn)在已經(jīng)有人研制出有專用指令的處理器
可以把神經(jīng)網(wǎng)絡(luò)推理部分的“乘以系數(shù)疊加然后判斷是否超過閾值”的多個(gè)指令搪柑,做成一個(gè)指令聋丝,從而把一百多個(gè)cpu指令簡化成一個(gè),從而加速運(yùn)算工碾。
但是熟悉cpu設(shè)計(jì)的人可能會指出弱睦,現(xiàn)代cpu已經(jīng)作了高度優(yōu)化,這種把多個(gè)指令打包成一個(gè)指令的做法渊额,除了保證了計(jì)算路徑的無關(guān)度况木、深挖了cpu計(jì)算單元的并行效率外,增加的速度其實(shí)非常有限旬迹。但是鑒于現(xiàn)代cpu往往有很多核每個(gè)核有多個(gè)計(jì)算單元火惊,而缺省并行效率并不好,這種做法在不大幅度改變現(xiàn)有計(jì)算體系的情況下奔垦,能夠輕松得到幾倍的冗余效率提升屹耐,不失為一種物廉價(jià)美的應(yīng)急方案,但比起另一個(gè)類似方案而言并不算好椿猎。
神經(jīng)網(wǎng)絡(luò)計(jì)算的特點(diǎn)是數(shù)據(jù)量大惶岭,單位數(shù)據(jù)的計(jì)算次數(shù)卻并不大,并行性好鸵贬,這些都和圖像計(jì)算非常類似俗他,屬于計(jì)算強(qiáng)度不如IO強(qiáng)度重要的范圍,于是使用GPU進(jìn)行神經(jīng)網(wǎng)絡(luò)計(jì)算就成了一個(gè)很好的選擇阔逼。這次使用的阿法狗軟件除了cpu外兆衅,也使用了大量的GPU。但是我們要看到嗜浮,通用的GPU使用的計(jì)算單元數(shù)目多羡亩,獨(dú)立性強(qiáng),相對CPU而言流程并行優(yōu)化度沒那么高危融,從而專用指令相對原生指令的優(yōu)化提升更大畏铆,從而引入專用指令的“提速、降能耗”程度也就更高吉殃。我想隨著神經(jīng)網(wǎng)絡(luò)的流行辞居,在GPU里面加入“多個(gè)數(shù)同時(shí)相乘楷怒、大小判斷、相加”一氣呵成的專用指令瓦灶,想必和“三個(gè)數(shù)平方和的平方根倒數(shù)”指令一樣會成為非常自然的流行選擇鸠删。
除了GPU專用指令外,是否還能有更加激進(jìn)的專用神經(jīng)網(wǎng)絡(luò)計(jì)算體系設(shè)計(jì)呢贼陶?
我們可以看到刃泡,到了后來,神經(jīng)網(wǎng)絡(luò)最大的瓶頸是數(shù)據(jù)帶寬而不是計(jì)算能力碉怔。在視覺識別烘贴、聲音識別等領(lǐng)域,訓(xùn)練數(shù)據(jù)并不大而且可以固化在硬件中撮胧,而大部分計(jì)算數(shù)據(jù)是不需要存儲的桨踪,只要有最后一個(gè)“是或者否”的結(jié)果即可,因此神經(jīng)網(wǎng)絡(luò)計(jì)算完全可以用“輸入流”-DSP-“輸出流”的方法工作趴樱,使用大規(guī)模多級DSP串聯(lián)的方法即可對數(shù)據(jù)進(jìn)行即時(shí)處理馒闷,從而進(jìn)一步簡化設(shè)計(jì)酪捡、提高并行性叁征,降低計(jì)算時(shí)間和能耗。但是這種方法過于簡單逛薇,顯然是無法在圍棋這種更復(fù)雜的神經(jīng)網(wǎng)絡(luò)計(jì)算中應(yīng)用的捺疼。
那么能否更更更激進(jìn)一點(diǎn)呢?
現(xiàn)代計(jì)算體系永罚,很多人認(rèn)為優(yōu)點(diǎn)在于“CPU的通用化”以及程序存儲在內(nèi)存里面啤呼,從而極大的提高了靈活性和降低設(shè)計(jì)難度。但是這個(gè)優(yōu)點(diǎn)的隱含意義呢袱,其實(shí)是在于存儲設(shè)備的廉價(jià)和快速上」倏郏現(xiàn)代的很多大數(shù)據(jù)處理,其實(shí)對于數(shù)據(jù)的加工超級簡單羞福,無非就是“查找有沒有某個(gè)字符串”“一串?dāng)?shù)字中過濾出大于某個(gè)值的數(shù)據(jù)”“按權(quán)重求總和”“從一塊內(nèi)存集體拷貝到另外一個(gè)內(nèi)存”這幾個(gè)需求惕蹄。一個(gè)數(shù)據(jù)庫軟件,把大量數(shù)據(jù)運(yùn)輸?shù)絚pu治专,處理后又送回存儲器卖陵,其實(shí)想想這些需求根本無需由cpu或者gpu處理,為什么不直接在存儲器端就做出來呢张峰?
有人會說泪蔫,這樣不是把存儲器端做復(fù)雜了嗎?我們的cpu再復(fù)雜喘批,也無非是幾億個(gè)CMOS管撩荣,相當(dāng)于幾兆內(nèi)存所用的晶體管數(shù)目而已铣揉,你這樣搞相當(dāng)于把存儲器復(fù)雜度翻幾番,假設(shè)用到的新型存儲器有幾G餐曹,等于是多做了幾千個(gè)cpu老速。這怎么可能劃算呢?
或者說你這個(gè)方案不就等于每個(gè)內(nèi)存都是一個(gè)小型單片機(jī)凸主,這樣并沒有什么新鮮內(nèi)容橘券?
我認(rèn)為
新型內(nèi)置計(jì)算功能內(nèi)存的復(fù)雜度沒有cpu那么高,獨(dú)立性強(qiáng)卿吐,做壞了某個(gè)區(qū)域標(biāo)記為壞塊即可旁舰,不像cpu或者單片機(jī)那么嚴(yán)格,成品率高得多嗡官,制備價(jià)格并不會提高太多箭窜。而且所有內(nèi)存提價(jià)幾倍,也不過和一塊cpu的提價(jià)相當(dāng)衍腥。
對于數(shù)據(jù)庫處理磺樱、神經(jīng)網(wǎng)絡(luò)這種應(yīng)用,相同計(jì)算量前提下利用智能內(nèi)存可以極大減小CPU體系婆咸、多處理器體系竹捉、并行處理的復(fù)雜度和IO瓶頸,減少需要的CPU數(shù)量尚骄,等于就是降低了處理器的總價(jià)格佑吝。計(jì)算價(jià)格的主要費(fèi)用現(xiàn)在越來越從cpu的價(jià)格蜡饵,轉(zhuǎn)變?yōu)殡娰M(fèi)了。減少IO就大幅度減少計(jì)算能耗了,長期節(jié)能看比硬件價(jià)格更省錢开仰。
cpu提高并行度是有IO瓶頸的丧裁,而且很快就會達(dá)到讼撒。這個(gè)方法可以極大減少IO交換再菊。
專用方案的最大問題并不在于價(jià)格,而是在通用性宏邮。隨著數(shù)據(jù)庫需求分解的穩(wěn)定泽示,和神經(jīng)網(wǎng)絡(luò)計(jì)算需求的穩(wěn)定,保證了通用性蜀铲,那么就有做出來的可能
仿生學(xué)的角度
從仿生學(xué)的角度來看边琉,人類的神經(jīng)元細(xì)胞,是使用電流脈沖來實(shí)現(xiàn)半數(shù)字半模擬信號的神經(jīng)網(wǎng)絡(luò)的记劝。從這個(gè)角度來說变姨,如果使用憶阻器,也就是可以隨外加電流而改變電阻的元器件厌丑,把整個(gè)神經(jīng)網(wǎng)絡(luò)做成基于電流脈沖的半數(shù)字運(yùn)算形式定欧,那么使用十多個(gè)晶體管完成一個(gè)神經(jīng)網(wǎng)絡(luò)計(jì)算單元代替幾千個(gè)晶體管的計(jì)算單元渔呵,最后把存儲和計(jì)算完全一體化,并不是難以實(shí)現(xiàn)的事情砍鸠。當(dāng)然扩氢,一旦要用到半模擬電路,在相同計(jì)算頻率的前提下爷辱,隨著計(jì)算能力提升耗電量相比數(shù)字電路就直線上升了录豺,這點(diǎn)簡化并不一定劃算。
不過考慮到人腦的耗電量大大小于阿法狗饭弓,在保證相同計(jì)算量的前提下双饥,使用頻率只有數(shù)字電路千分之一的脈沖半數(shù)字半模擬電路,這就完全值得考慮了弟断。當(dāng)然咏花,這個(gè)時(shí)候,真正的問題反而在于如何編程了阀趴。這樣的體系昏翰,由于存儲和計(jì)算合一,在編程上會變成全新的系統(tǒng)刘急,可能要在理論上進(jìn)行進(jìn)一步突破才有可能棚菊。
后記
我本人是贊同技術(shù)進(jìn)步的。但是對于神經(jīng)網(wǎng)絡(luò)排霉,我卻并不希望在應(yīng)用上做過了頭窍株。畢竟,神經(jīng)網(wǎng)絡(luò)往往“知其然而不知其所以然”攻柠,理論上我們是無法保證其算法是魯棒性好、在未知環(huán)境穩(wěn)定發(fā)揮的后裸,而我們的生活永遠(yuǎn)充滿著例外瑰钮。
日常的神經(jīng)網(wǎng)絡(luò)應(yīng)用,大家可以試用一下waifu2x這個(gè)軟件微驶。它的降噪和放大圖片功能都非常強(qiáng)浪谴。