2 月 25 日,華為諾亞方舟實(shí)驗(yàn)室將 AdderNet 正式開(kāi)源!
一個(gè)月以前,一篇名為《我們真的需要在深度學(xué)習(xí)中使用乘法嗎?》的論文刷爆朋友圈,這篇來(lái)自華為諾亞方舟實(shí)驗(yàn)室與北大合作的論文提出了一種新的方法,名為:AdderNet。
根據(jù)論文介紹:與加法運(yùn)算相比,乘法運(yùn)算具有更高的計(jì)算復(fù)雜度。在深度神經(jīng)網(wǎng)絡(luò)中被廣泛使用的卷積計(jì)算,正是衡量輸入特征和卷積濾波器之間相似度的交叉相關(guān)計(jì)算,這涉及到浮點(diǎn)值之間的大量乘法。而 AdderNet 可以將深度神經(jīng)網(wǎng)絡(luò)中,特別是卷積神經(jīng)網(wǎng)絡(luò)中的乘法,轉(zhuǎn)換為更簡(jiǎn)單的加法運(yùn)算,以便減少計(jì)算成本。
在 AdderNet 中,研究者采用了 L1 正則距離,用于計(jì)算濾波器和輸入特征之間的距離,分析了這種新的相似性度量方法對(duì)神經(jīng)網(wǎng)絡(luò)優(yōu)化的影響。為了獲得更好的性能,研究人員還開(kāi)發(fā)了一種特殊的反向傳播方法來(lái)研究 AdderNet 的全精度梯度。然后,根據(jù)每個(gè)神經(jīng)元梯度的大小,提出一種自適應(yīng)學(xué)習(xí)速率策略來(lái)增強(qiáng) AdderNet 的訓(xùn)練過(guò)程。
因此,在不使用卷積乘法的情況下,AdderNet 在 ResNet-50 上對(duì) ImageNet 數(shù)據(jù)集進(jìn)行訓(xùn)練后,能夠取得 74.9% 的 top-1 精確度和 91.7% 的 top-5 精確度,如下圖所示:
開(kāi)源后,用戶可以在自己的設(shè)備上對(duì) AdderNet 進(jìn)行配置,需要的基礎(chǔ)環(huán)境為:
python 3
pytorch >= 1.1.0
torchvision
用戶可以按照 pytorch / examples 準(zhǔn)備 ImageNet 數(shù)據(jù)。此外,官方表示預(yù)訓(xùn)練的模型將很快發(fā)布。
目前,開(kāi)發(fā)者可以通過(guò)運(yùn)行如下代碼來(lái)對(duì) ImageNet val 集進(jìn)行評(píng)估:
python test.py --data_dir 'path/to/imagenet_root/'
在 ResNet-50 上對(duì) ImageNet 數(shù)據(jù)集訓(xùn)練,用戶將達(dá)到 74.9%的最高精度和 91.7%的 Top-5 精度。開(kāi)發(fā)者可嘗試運(yùn)行如下代碼,在 CIFAR-10 上進(jìn)行求值運(yùn)算:
python test.py --dataset cifar10 --model_dir models/ResNet20-AdderNet.pth --data_dir 'path/to/cifar10_root/'
此外,在 ResNet-20 上對(duì) CIFAR-10 數(shù)據(jù)集進(jìn)行訓(xùn)練,用戶將達(dá)到 91.8%的精度。
由于加法器過(guò)濾器是由 torch.cdist 實(shí)現(xiàn)的,所以 AdderNet 的推理很慢,但是用戶可以編寫 cuda 以獲得更高的推理速度。
雖然 AdderNet 簡(jiǎn)化了運(yùn)算成本,但是有一些反對(duì)的聲音認(rèn)為:類似的工作是可以通過(guò)硬件的優(yōu)化(如 AI 芯片)來(lái)解決的,因此加法的優(yōu)勢(shì)其實(shí)并不算明顯。如果有讀者對(duì) AdderNet 有更多見(jiàn)解,歡迎在留言區(qū)發(fā)表您的觀點(diǎn)。
GitHub 開(kāi)源鏈接:https://github.com/huawei-noah/AdderNet
論文地址:https://arxiv.org/pdf/1912.13200.pdf
聯(lián)系客服