加入巨頭競爭之列,索尼開源可在Windows中運行的神經網路庫NNabla
選自Sony
機器之心編譯
參與:蔣思源、李澤南
索尼昨天宣布開源了自己的神經網路庫 NNabla,其中包含用於深度學習系統的 Python API 與用於嵌入式設備的 C++API。彭博社也表示索尼正在加入谷歌、Facebook 和亞馬遜等巨頭的人工智慧開發競爭。
神經網路是深度學習模型的核心,後者自 2012 年在圖像識別領域獲得突破性進展以來獲得了人們的廣泛關注。現在,深度學習已經在很多領域中獲得應用,它不僅僅是一種圖像識別的演算法,也是一種用於建模的黑箱系統。
用於處理深度學習模型的架構各有不同:從小到大,從前饋到循環,從非監督到監督……對於深度學習技術的研究發展也有很快速度,新的架構、組件或神經網路每天都在出現。目前裝備 GPU 的高性能深度學習計算機或集群,對於運行深度學習的移動設備、物聯網設備的要求也在催生技術的發展。
索尼從 2010 年起就加入了深度學習的研究行列。這次開源的深度學習核心庫已是其研究成果的第三代了,它包含以下特性:
CUDA 兼容性。
它擁有 Python API,因此最大化了設計神經網路模型的靈活性,並且還能支持快速的原型設計和測試。
同時支持靜態和動態計算圖(computation graphs)。靜態計算圖在速度和內存上有更高的效率,而動態計算圖在設計模型上更加靈活。
有各種內置的神經網路模塊,如函數、運算元和優化器等。該神經網路庫的模塊軟體架構允許開發者添加新的模塊,因此開發者可以基於新的研究思路實現更快的原型設計、產品或服務部署。
它由輕便、輕量的 C++11 核所編寫,並能在多個平台上運行。該框架已經在 Linux (Ubuntu 16.04) 和 Windows (8, 10) 上進行了測試。
極高的速度和內存效率。計算圖引擎允許安全的原位計算(in-place computation)和內存分享,這將極大地將少內存的佔用。因此該框架的設計僅採用少量的計算負載就能執行前向和後向傳播。
為各種計算方案而設計的解耦合實現(Decoupled implementation)介面允許為每一個計算方案提供插件式的開發方案。開發者可以更關注函數運算元實際計算的特定實現,而不用管計算圖引擎與其內存優化等。
索尼官方將很快發出更具體更詳細的神經網路庫使用方法。
索尼表示他們的神經網路庫提供了最基本的深度學習開發研究和部署的函數。他們希望該軟體庫能推動人工智慧的發展,並且不論是在先進研究領域還是前沿應用部署上都能提供強有力的助力。
項目地址:https://github.com/sony/nnabla
說明文檔:https://nnabla.readthedocs.io/
項目官網:https://nnabla.org/
下面是該神經網路庫的 Github 項目介紹:
NNabla 是一個深度學習框架,計劃在研究,開發與生產領域當中使用。索尼的目標是讓它可以在任何地方運行,就像個人筆記本電腦、高性能計算集群、嵌入式裝置和生產伺服器一樣。因此索尼希望通過提供高效便捷的機器學習庫而將演算法嵌入到邊緣設備中。
安裝
安裝 NNabla 很簡單:
pip install nnabla
這是 CPU 版本的 NNabla,GPU-加速器可以通過安裝 CUDA 工具包來添加:pip install nnabla-ext-cuda
特徵
簡單,靈活並且有表現力
基於 NNabla C++11 內核的 Python API 給你提供了靈活性和高產出效率。例如,一個帶有分類損失的兩層神經網路可以僅通過以下 5 行代碼被定義(超參數由<>括出)。
import nnabla as nnimport nnabla.functions as Fimport nnabla.parametric_functions as PF
x = nn.Variable(
) t = nn.Variable(
) h = F.tanh(PF.affine(x,
, name="affine1")) y = PF.affine(h,
, name="affine2") loss = F.mean(F.softmax_cross_entropy(y, t))
訓練可以通過以下步驟來完成:
import nnabla.solvers as S
# Create a solver (parameter updater)
solver = S.Adam(
) solver.set_parameters(nn.get_parameters())
# Training iterationfor n in range(
): # Setting data from any data source
x.d =
t.d =
# Initialize gradients solver.zero_grad()
# Forward and backward execution
loss.forward()
loss.backward()
# Update parameters by computed gradients
solver.update()
動態計算圖使網路結構的執行時間變得靈活。NNabla 可以使用靜態和動態圖的模型,在兩種情況下都使用相同的 API。
x.d =
t.d =
drop_depth = np.random.rand(
) < with nn.auto_forward(): h = F.relu(PF.convolution(x,
, (3, 3), pad=(1, 1), name="conv0")) for i in range(
): if drop_depth[i]:
continue # Stochastically drop a layer
h2 = F.relu(PF.convolution(x,
, (3, 3), pad=(1, 1), name="conv%d" % (i + 1)))
h = F.add2(h, h2)
y = PF.affine(h,
, name="classification") loss = F.mean(F.softmax_cross_entropy(y, t))# Backward computation (can also be done in dynamically executed graph)
loss.backward()
攜帶型和多平台
Python API 能夠在 Linux 和 Windows 上使用。
大多數函數庫的代碼都是使用 C++11 寫的,所以可以部署到嵌入設備中。
可擴展性
可以像神經網路運算符和優化器那樣添加新的模塊。
該軟體庫允許開發者添加特定的實現(如在 FPGA 上的實現等)。例如我們提供 CUDA 後端作為擴展,這將可以利用 GPU 加速計算來加速演算法。
高效性
在單塊 CUDA GPU 上速度極快
內存優化引擎
支持多 GPU(即將可用)
文檔
https://nnabla.readthedocs.org
安裝
https://nnabla.readthedocs.io/en/latest/python/installation.html
入門指南
在 tutorial 頁面中可以找到很多 Jupyter notebook 教程。我們建議由 by_examples.ipynb 開始在 NNabla 學習第一個案例,python_api.ipynb 文檔介紹了 NNabla API。
我們同樣在 examples 中提供了一些其他複雜的案例。
※使用認知心理學解釋深度神經網路:DeepMind新研究破解AI黑箱問題
※在機器人撫養孩子的浪潮中,迪士尼正研究如何搶佔先機
※專欄|自然語言處理第一番之文本分類器
※用 AI 撬動美國神秘大型銀行,這位年輕創業者如何做到的?
TAG:機器之心 |
※聯想發布Legion Game Store:加入在線遊戲競爭
※Facebook的Calibra加密貨幣錢包已經迎來競爭對手
※在VR中創作3D內容,微軟Maquette將發布測試版,與Tilt Brush、Medium競爭
※大數據競爭對手Cloudera和Hortonworks宣布合併
※三星Galaxy S9 Plus與蘋果iPhone X:競爭激烈
※Facebook重新測試搜索廣告 與谷歌AdWords展開競爭
※網路安全行業競爭格局之變:谷歌Chronicle發布首款信息安全數據平台——Backstory
※老爹鞋競爭激烈!Valentino 發布新款 New Runner
※卡馬克親自吐槽Oculus Go,將Quest定位為與Switch競爭的遊戲機
※Facebook競爭壓力下Snapchat推出Clear Chat能否挽回用戶?
※HTC總經理:Shadow VR 將成為Oculus Quest的競爭對
※DMP競爭達到白熱化,Salesforce有望趕超Oracle
※與PC和Pad競爭激烈 今年的Macbook Air壓力很大
※iPhone將採用三攝;傳Facebook致力開發語音助力服務與亞馬遜競爭
※迪士尼將推出Display Plus 與蘋果競爭流媒體服務資源
※Priceline更名Booking,和Airbnb業務競爭,不只是帶點火藥味?
※三星Galaxy Note 9會是蘋果iPhone X Plus最強競爭對手嗎?
※外媒看好MateBook X Pro,將與MacBook Pro激烈競爭
※HTC宣布Viveport正式支持競爭對手Oculus Rift
※Facebook的Calibra加密貨幣錢包已迎來競爭對手