新聞中心
本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。

南豐網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
那個(gè)在GitHub標(biāo)星4.3k的張量操作工具Einops,在開(kāi)源三年后終于中了頂會(huì)!
這是一個(gè)統(tǒng)一的、通用的操作張量結(jié)構(gòu)的方法,基于愛(ài)因斯坦求和約定(Einstein summation convention)的思路開(kāi)發(fā),能夠大幅提高代碼的可讀性和易修改性。
同時(shí),Einops支持Pytorch、TensorFlow、Chainer、Jax、Gluon等多個(gè)深度學(xué)習(xí)框架,以及Numpy、Cupy等張量計(jì)算框架。
ICLR 2022將其接收為Oral論文的消息一出,無(wú)數(shù)白嫖多年的“精神股東”們紛紛奔走相告,認(rèn)為Einops確實(shí)“當(dāng)之無(wú)愧”:
不過(guò),這一早就聲名在外,還有無(wú)數(shù)大牛站臺(tái)的工具,在投往頂會(huì)后卻并非一帆風(fēng)順。
比愛(ài)因斯坦求和約定更好用的標(biāo)記法
我們先來(lái)了解一下Einops的基本原理。
它的設(shè)計(jì)思路來(lái)自于愛(ài)因斯坦在1916年提出的愛(ài)因斯坦求和約定,也叫愛(ài)因斯坦標(biāo)記法(Einstein notation)。
這一方法的規(guī)定是:當(dāng)一組乘積中,有兩個(gè)變量的腳標(biāo)一樣,就要對(duì)相同的兩個(gè)腳標(biāo)求和。例如下圖中的aibi:
這樣書寫的好處是,避免公式里出現(xiàn)大量的求和符號(hào),看起來(lái)更簡(jiǎn)潔。
Numpy里的Einsum就是一種模仿愛(ài)因斯坦求和約定的方法,可以說(shuō),這種思路已經(jīng)被廣泛使用。
而Einops正是基于Einsum進(jìn)行了諸多改進(jìn),針對(duì)張量操作過(guò)程中一些以前難以解決的問(wèn)題,提供了更加便利的方案。
比如,當(dāng)僅通過(guò)Pytorch,以及結(jié)合Einops兩種方法來(lái)實(shí)現(xiàn)超分辨率(Super-resolution)時(shí),后者無(wú)疑極大降低了代碼冗余:
△上:原版 下:結(jié)合Einops
可以看到,結(jié)合了Einops之后的代碼不需要特殊指令PixelShuffle,并且,還使用了模塊調(diào)用nn.ReLU以及nn.Sequential。
最后得到的輸出結(jié)果既不包含虛假坐標(biāo),還能在框架之間進(jìn)行轉(zhuǎn)移。
為什么Einops能做到這些?
這得益于Einops的本質(zhì):這是一種針對(duì)變換模式的新的標(biāo)記法,能夠確保元素在張量中的位置與坐標(biāo)變量的值一對(duì)一映射。
△Numpy和Einops操作之間的對(duì)應(yīng)關(guān)系
對(duì)比愛(ài)因斯坦求和約定(Einsum),Einops有幾個(gè)額外的特征:
- 減少僅存在于輸入中的坐標(biāo)(例如可以使用max-reduction法)
- 重復(fù)僅存在于輸出中的坐標(biāo)(張量值對(duì)于新坐標(biāo)的索引都是一樣的)
- 使表達(dá)式兩邊的所有坐標(biāo)的標(biāo)記唯一(Einsum允許重復(fù))
在這些特征中,輸入和輸出被描述為張量的維度和坐標(biāo)的預(yù)期順序,這使得基于Einops的代碼的可讀性和易修改性非常高,用戶也不需要在每次操作后記住或推斷出張量的形狀。
同時(shí),Einops將輸入坐標(biāo)(或其組成)與輸出坐標(biāo)連接起來(lái),這也使得張量結(jié)構(gòu)在設(shè)計(jì)上就無(wú)法被破壞。
用括號(hào)表示的坐標(biāo)的組成和分解也是Einops的一個(gè)主要?jiǎng)?chuàng)新之處:
通過(guò)上述的特點(diǎn),Einops模式有利于更加靈活地處理高維度數(shù)據(jù)。
比如,一個(gè)注意力機(jī)制函數(shù)接受了一個(gè)形狀為[batch,seq,channel]的張量k q v,Einops可以將其高度、寬度和深度合成為一個(gè)維度。
同時(shí),張量的頭部和batch維度也能夠被分組,這就保證了注意力頭部的獨(dú)立處理,從而將其變?yōu)槿S數(shù)據(jù)的多頭注意力:
類似的,通過(guò)修改輸入和輸出的結(jié)構(gòu),其他神經(jīng)塊也能夠在Einops模式下完成“升級(jí)”。
論文接收并非一帆風(fēng)順
Einops的作者是來(lái)自俄羅斯的Alex Rogozhnikov,他擁有莫斯科大學(xué)的數(shù)學(xué)和物理學(xué)博士學(xué)位,目前的主要研究領(lǐng)域是機(jī)器學(xué)習(xí)。
而Einops正是他最火熱的一項(xiàng)開(kāi)發(fā),不僅在GitHub上收獲4.3k星,還有特斯拉AI高管、FAIR實(shí)驗(yàn)室工程師站臺(tái):
但是,當(dāng)作者將其整理成論文并投稿頂會(huì)時(shí),有不少審稿人認(rèn)為這篇論文“讀起來(lái)像是一篇技術(shù)博客”、“創(chuàng)新性不夠”、“缺乏嚴(yán)謹(jǐn)性”,并給出了3分(拒絕)的意見(jiàn):
不過(guò),會(huì)議主席最終給出了一錘定音的正面評(píng)價(jià),并同意將其接收為Oral論文。
比起將幾個(gè)模塊共同訓(xùn)練、壓縮、結(jié)合,最后在某個(gè)任意基準(zhǔn)上的SOTA增加0.31 +/-1.04,這篇論文所描述的技術(shù)對(duì)于ICLR讀者來(lái)說(shuō)更重要。
有Einops的使用者專門將會(huì)議主席最后的評(píng)價(jià)貼了出來(lái),并表示:
除了新穎的技術(shù)和SOTA之外,其他的很多論文也同樣具有價(jià)值。
而不管這篇論文有何更廣泛的鼓勵(lì)意義,至少對(duì)于開(kāi)發(fā)者Alex Rogozhnikov本人來(lái)說(shuō),也算是修成正果了。
?論文:
??https://openreview.net/forum?id=oapKSVM2bcj??
GitHub鏈接:
??https://github.com/arogozhnikov/Einops??
作者主頁(yè):
??http://arogozhnikov.github.io/about/??
文章名稱:開(kāi)源三年4.3k星的張量工具終于中頂會(huì)了!網(wǎng)友:ICLR你做得好啊
路徑分享:http://m.5511xx.com/article/dpcpegi.html


咨詢
建站咨詢
