infer.net機器學習翻譯系列文章将進行連載,感興趣的朋友請收藏或關注
歡迎傳播分享,必須保持原作者的資訊,但禁止将該文檔直接用于商業盈利。
本人正在研究基于infer.net元件,并計劃将其應用于實際的預測之中,該元件功能強大,封裝很完善,但也有很多難以了解的地方,同時官方也給出了大量的例子,限于個人精力有限,更新時間較慢,也希望有興趣的朋友一起來完成該項工作。
該元件的采用的是microsoft research license agreement 授權,non-commercial use only,除了商業使用,都可以,自己看着辦。
支援單變量和多變量變量、也支援連續型和離散型變量。可以使用大量的各種因素進行模組化,包括算術運算、線性代數、範圍和積極限制、布爾操作符等等。支援不同模型的組合,以及不同類型的組合。【附:infer.net的内部使用了the model specification language (msl) 模組化語言,由于該元件不允許用于商業,是以源代碼也沒有全部開發,無法也無法搞清楚其原理】
内置了多種推理算法,如expectation propagation, belief propagation (a special case of ep), variational message passing and gibbs sampling.這幾個專業詞彙暫時還不懂意義。
現有的在大多數推理程式執行過程中的開銷,減慢了推理過程。而infer.net将推理模型編譯為能夠獨立執行的源代碼,不需要額外的開銷。它也可以直接內建到您的應用程式。此外,也可以檢視,分步執行源代碼,或者使用标準的開發工具進行修改。
機率分布、因素、消息操作和推理算法都可以由使用者添加。infer.net使用一個插件架構,使其開放性,适應性更強。而内置庫支援多種模型和推理操作;但總會有特殊的情況,需要新的因素或者分布類型或者算法,這種情況下,使用者可以編寫自定義代碼,自由與内置功能進行混合,以減少一些額外的工作。
infer.net通過zip壓縮包進行發行,解壓後,可以看到如下的檔案夾目錄:
“bin,learners,source(distributions,factors,wrappers),samples(c#,f#)”
bin檔案夾包含了infer.net的dll檔案:
1.infer.compiler.dll是一個使用infer.net api編寫的将模型描述轉換為推理代碼的編譯器;
2.infer.runtime.dll是一個執行推理代碼的程式集
一般開發過程中隻需要引用這兩個dll,但在某些部署場景你可能隻需要infer.runtime.dll。
bin檔案夾還包括了一些例子的生成檔案,以及幾個項目的生成檔案。
例子檔案夾中有2個完整項目的源代碼,1個是貝葉斯分類器,1個是推薦系統【比較複雜,還沒開始研究】
下面是一個使用infer.net計算抛擲2枚硬币,結果都是正面的機率的例子,代碼如下:
程式輸出為:
上述結果說明2面同時為正面的機率為0.25。上述簡單的例子,包括了使用infer.net程式設計的幾個關鍵步驟。
1.定義機率模型:所有infer.net程式都需要明确定義的機率模型。上述程式的前3行就是定義3個随機變量。
2.建立推理引擎(推理機):所有的推理都是使用推理引擎進行的,在使用之前,必須建立和配置推理引擎。如第四行,使用預設的推理算法建立的推理引擎。
下圖是infer.net的推理過程:
過程如下:
1.首先使用者建立1個 模型定義,并聲明一些和模型相關推理查詢需求;
2.使用者将模型定義和推理查詢傳遞給模型編譯器,後者使用指定的推理算法,建立需要執行這些查詢模型的源代碼。這個源代碼可以寫入一個檔案,如果需要,也可以直接使用。
3.c#編譯器編譯源代碼來建立一個編譯過的算法。這可以手動執行,或通過推斷方法自動執行。
4.使用一組觀測值(資料),推理引擎根據使用者指定的設定,執行編譯算法,以便産生推理查詢要求的邊際分布。可以對觀測值重複不同的設定,而不需要重新編譯算法。
另外本文的翻譯電子版,以及該項目相關的翻譯資源,将在最終完成後逐漸開放,請關注本部落格。
翻譯很累,寫篇文章也費時間,兄台順手點個推薦吧。