BrainScript 的頂層指令

主要的頂層指令 train 和testeval/描述在 Train, Test, Eevaluation 頁面。 以下將詳細說明更多頂層指令。

適應指令

此指令會以KL散度正則化調整已訓練好的模型。 建議所有其他調整都應透過模型編輯來完成。 adapt 指令與列車指令非常相似,但多了兩個參數:

  • originalModelFileName:將被調整的模型檔名。

  • refNodeName:計算網路中用於KL散度正則化的節點名稱。

簡歷

此指令評估來自不同時代的一系列模型,並顯示最佳模型的資訊。 除了測試指令所使用的參數外,這個指令也使用參數

  • crossValidationInterval:由三個整數組成的陣列,標示起始紀元、紀元增量及最終紀元,以求值。 例如,3:2:9 表示會評估模型 3、5、7 和 9。

  • sleepTimeBetweenRuns:兩次跑步之間要等幾秒。 這只有在顯卡過熱時才需要。

寫入指令

此指令會將輸出節點的值寫入檔案。 相關參數為

  • reader讀取器配置區塊以讀取輸入資料。

  • writer: 寫入組用來決定如何寫入輸出資料。 若未指定此值,則使用 outputPath 參數。

  • minibatchSize:讀取與處理資料集時使用的迷你批次大小。

  • epochSize:資料集的規模。 預設值為 0。 如果整個資料集設為 0,就會被評估。

  • modelPath:計算輸出的模型路徑。

  • outputPath:將輸出寫入文字格式的路徑。 如果有寫入阻擋,這個參數就會被忽略。 outputPath 或 writer 必須存在。

  • outputNodeNames:一個由一個或多個輸出節點名稱組成的陣列,要寫入檔案。

編輯指令

此指令用來編輯模型並將修改後的模型存檔。 這已被取代。 相關參數如下:

  • editPath: 是要執行的 MEL 腳本路徑。
  • ndlMacros:將載入並用於 MEL 腳本的 NDL 巨集檔案路徑。

SVD 指揮

此指令對可學習參數進行低階近似,並對可學習參數進行 SVD 分解。 主要動機是將權重矩陣分解為兩個較低階矩陣,以提升推論速度,同時保持準確性。 例如:

svd = [
    action = "SVD"
    modelPath = "train\lstm.model.67"
    outputModelPath = "train\lstm.model.svd"
    SVDConfig = "nodeConfigs"
]

相關的參數區塊包括:

  • modelPath: 指定初始模型的載入位置。

  • outputModelPath: 指定了修正後模型的儲存位置。

  • SVDConfig: 一個設定檔,規定不同節點群組如何執行 SVD。 此設定為兩欄格式:

    <NodeNameRegex> <float>

第一欄是一個正則表達式,會與某一群組的節點名稱相匹配。 第二欄為浮點,表示SVD能量在SVD後將保留多少百分比,SVD能量定義為奇異值的總和。 例如,設定

`LSTMoutput[1-3].Wx[ifco] 0.4`
`LSTMoutput[1-3].Wh[ifco] 0.6`

在 LSTM 中,非重複連接(從 x 到 i,f,c,o 閘)會進行較激進的 SVD(0.4)分解,而對於重複連接(從 h 到 i,f,c,o 閘)則較為激進,因為參數名稱在 NDL 中定義。

Dumpnode 指令

此指令會將節點資訊傾倒到輸出檔案,這在 MEL 中也能以更精確的控制方式實現。 相關參數包括:

  • modelPath: 是包含要傾倒節點的模型檔案路徑。

  • nodeName:要寫入檔案的節點名稱。 若未指定,所有節點都會被傾倒。

  • nodeNameRegex:將要寫入檔案的節點名稱的正則表達式。 若指定 nodeName 參數,則忽略該參數。

  • outputFile: 輸出檔案的路徑。 若未指定,則會根據 modelPath 自動產生檔案名稱。

  • printValues決定是否列印與節點相關的值,前提是該節點的值在模型中是持久的。 預設值是「true」。

  • printMetadata決定是否列印與節點相關的元資料(節點名稱、維度等)。 預設值是「true」。

WriteWordAndClass 指令(已棄用)

此指令讀取文字訓練資料,計算訓練集中每個單字的出現次數,依計數由多到低排序,賦予每個單字唯一 ID,將每個單字指派到類別,並產生四欄詞彙檔案及單字to-id 映射檔案,供(已棄用的)LMSequenceReader 用於訓練類別語言模型。 相關參數包括:

  • inputFile: 文字訓練檔案的路徑。

  • outputVocabFile: 產生的四欄詞彙檔案名稱。 第一欄是單字 ID,第二欄是單字數,第三欄是單字,第四欄是類別 ID。

  • outputWord2Cls: 是產生的 word-to-class 映射檔案的路徑。

  • outputCls2Index: 是產生的 class-to-wordId 映射檔案的路徑。

  • vocabSize:所需的詞彙量大小。

  • nbrClass:期望的類別數。

  • cutoff:截止點。 當單字數低於或等於此值時,該單字將被視為 <未知>數。 預設為 2。 請注意,此參數僅在期望詞彙量大於訓練集中實際字數時使用。

CreateLabelMap 指令

通常手動製作標籤映射檔很簡單。 不過有時候,你會希望標籤映射檔能自動產生,這正是 CreateLabelMap 指令的目的。 目前 UCIFastReader 是唯一支持此舉的讀者。 相關參數為

  • section: 參數區塊名稱(通常是列車區塊),其中包含用於產生標籤映射檔案的讀取子區塊。 產生的標籤映射檔案會儲存到該參數區塊的讀取子區塊中指定的labelMappingFile中。

  • minibatchSize: 用於建立標籤映射檔案時使用的 minibatch 大小。

DoEncoderDecoder 指令

神經網路可以用來形成一連串的網路。 前幾個網路可作為編碼器使用,後面的網路則可作為解碼器使用。 每個網路中會使用一個特殊節點 PairNetworkNode,來服務一個待由其他網路連接的套接字。 相關參數為

  • section: encoderReader 與 decoderReader 是編碼器與解碼器的讀取器。 同理,對於 encoderCVReader 和 decoderCVReader 用於驗證設定。

  • encoderNetworkBuilder 以及 decoderNetworkBuilder:這些工具指定了要使用的簡單網路建構器。

BNStat 指揮部

評估批次正規化節點資料集的平均值與變異數相當棘手。 雖然訓練時可透過跑動平均或經驗計算平均值與變異數,但我們仍傾向於提供更穩定且穩健的方法來產生批次正規化的平均值與變異數——批次正規化後統計量。 訓練後指揮部必須被通知。 它會產生每個 BN 層的平均值與變異數。

  • modelPath:即包含已訓練模型的模型檔案路徑
  • minibatchSize: 在評估時的 mini-batch 大小,訓練 minibatchSize 也是一樣
  • itersPerNode:每個批次正規化節點的統計迭代
  • reader讀取器配置區塊以讀取測試資料。 詳情請參見 讀者區塊
  • enableDistributedMBReading:分散式平行訓練中的閱讀