標籤:

【翻譯】Brian2高級指導_Brian如何工作

本節我們將簡略介紹Brian如何工作的內部組件。這兒介紹它是為了理解Brian在運行模擬時的經過,但不足夠用來理解Brian的源代碼或拓展Brian使之成為新東西。要更詳細地了解,參見開發者指導。

時鐘驅動與時間驅動

Brian是個時間驅動模擬器。這意味著時間被分成等分的時間間隔,0, dt, 2*dt, 3*dt, ...在每個時間間隔t,說明模型的微分方程首先在時間t+dt積分,給出其值。脈衝在像v>vt這樣的條件成立時產生,且只在時間間隔點出現。

時鐘驅動模擬的優點是非常靈活(可使用任意微分方程)且計算高效。然而,時間間隔近似會導致網路中出現的同步兩的過高估計。這通常不是大問題,且可通過減少時間間隔dt管理,但對某些模型可能是個問題。

注意脈衝時間近似引入的誤差是O(dt)階,因此模擬總的精度是每個時間間隔O(dt)階。這意味著許多情況中沒有必要使用比前向歐拉更高階的數值積分方法,因為不會超過誤差O(dt)的階次。參見狀態更新查看更多關於積分方法的詳述。

一些模擬器使用事件更新方法。這種方法下,脈衝可出現在任意時間而不僅僅是在時間間隔點上。該方法比時鐘驅動模擬更準確,但事實上通常計算量更大(尤其時對更大型的網路而言)。此外,它們通常在可求解的微分方程類中限制更多。

回顧已使用的模擬策略,參見 Brette et al. 2007。

代碼概述

Brian的用戶可見部分包含許多像NeuronGroup, Synapses, Network等的對象。這些都有原生Python編寫,實際上用於將用戶說明模型翻譯成計算引擎。該翻譯的結束狀態是操作操作名字域的短代碼集,由Network按順序調用。這些短代碼塊的例子是」狀態更新器「,它進行數值積分或突觸傳播步驟。名字域包含了名字到值的映射,其中可能的值可以是標量值,固定長度或動態大小數組和函數。

語法層

語法層包含了所有與最終模擬計算方法無關的東西(也就是運行語言和設備)。其中包含像NeuronGroup, Synapses, Network, Equation等東西。

這裡面用戶可見的部分都寫在用戶指導和高級指導。具體地說,就是對方程的分析和數值積分器的賦值。該過程傳遞給計算引擎的最終結果是包含下面數據的模擬說明:

  • 變數值,固定長度數組,動態大小數組和函數的變數集。這些由Variabel對象處理,其詳細信息在變數和索引中。例如,NeuronGroup的每個狀態變數賦值為ArrayVariable;由SpikeMonitor存儲的脈衝索引賦值為DynamicArrayVariable等。
  • 通過」任意代碼時鐘「和模板名說明的代碼塊集。」任意代碼塊「是像要執行的v = vr這樣的語句序列。在那樣的情況下,v和vr是數組,那麼語法將對數組的每個元素執行。這些任意的代碼塊既可以由用戶直接給出(神經元閾值和複位代碼,突觸前後代碼),也可由結合數值積分的微分方程生成。模板名稱是一個小集(總計約20個),它給出了額外的環境。例如,當代碼塊a = b考慮成」狀態更新器「的部分意味著對每個神經元索引執行。在複位語法環境中意味著它對已觸發脈衝的神經元的所有索引執行。在內部,這些模板需要對每個目標語言/設備實現,但它們的數量相對較少。
  • 執行這些代碼塊的階次,如Network 定義的那樣。

計算引擎

計算引擎包含在具體語言或具體設備生成到運行的所有東西。它以上面描述的語法層的模擬抽象定義開始。

計算引擎由Device對象定義。這通常用於收集內存,生成及運行代碼。有兩種類型的設備,」運行時「和」獨立「。在運行時模式,即使單個代碼塊使用不同的語言,所有都由Pyhton管理。內存用numpy數組管理(可以以指針傳遞在其他語言中使用)。在獨立模式中,進度的輸出(調用Device.build後)是處理包含內存管理在內的一切東西的複雜源代碼,獨立於Python。

對於兩種設備,用同樣步驟運行的關鍵步驟是代碼生成,可從任意代碼快編譯和運行的代碼塊和變數集。這發生在兩個階段:首先,任意代碼塊轉換成代碼片段,這是個目標語言中語法正確的代碼塊,但不是可獨立運行的代碼塊(他不從內存中獲取變數等等)。代碼片段通常代表內部循環代碼。這步由CodeGenerator對象處理。在某些情況下,它會包含語法翻譯(例如Python語法x**y在C++中為pow(x, y))。下一步是將代碼片段插入模板生成可編譯代碼快。該代碼塊然後傳遞到運行時CodeObject。在獨立模式的情況下,這沒做任何事,但對運行時設備它編譯了代碼然後在給定名字域中運行編譯好的代碼塊。


How Brian works - Brian 2 2.1.2 documentationbrian2.readthedocs.io


推薦閱讀:

《小王愛遷移》系列之十三:在線遷移學習(online transfer learning)
機器學習預測地震,信得過嗎?
讓我們一起來學習CNTK吧
如何測量這個世界的混亂-1-定義混亂
第二章:機器學習對配電網健康指數分析

TAG:機器學習 |