共用方式為


Microsoft類神經網路演算法技術參考

Microsoft類神經網路使用 多層式 Perceptron 網路,也稱為 Back-Propagated 差異規則網路,由最多三層神經元或 感知器組成。 這些層是輸入層、選擇性隱藏層和輸出層。

多層式 Perceptron 神經網路的詳細討論超出本文件的範圍。 本主題說明演算法的基本實作,包括用來正規化輸入和輸出值的方法,以及用來減少屬性基數的特徵選取方法。 本主題描述可用來自定義演算法行為的參數和其他設定,並提供查詢模型的其他信息連結。

Microsoft類神經網路演算法的實作

在多層式 Perceptron 神經網路中,每個神經元都會接收一或多個輸入,併產生一或多個相同的輸出。 每個輸出都是神經元輸入總和的簡單非線性函式。 輸入會從輸入層中的節點轉送至隱藏層中的節點,然後從隱藏層傳遞至輸出層:一層內的神經元之間沒有連接。 如果未包含隱藏層,如同羅吉斯回歸模型中,輸入會直接從輸入層中的節點轉送至輸出層中的節點。

類神經網路中有三種類型的神經元是使用Microsoft類神經網路演算法所建立:

  • Input neurons

輸入神經元提供數據採礦模型的輸入屬性值。 對於離散輸入屬性,輸入神經元通常代表輸入屬性中的單一狀態。 如果定型數據包含該屬性的 Null,這會包括遺漏值。 具有兩個以上狀態的離散輸入屬性會針對每個狀態產生一個輸入神經元,如果定型數據中有任何 Null,則為遺漏狀態產生一個輸入神經元。 一個連續輸入屬性會生成兩個輸入神經元:一個神經元用於遺漏狀態,另一個神經元對應於連續屬性本身的值。 輸入神經元向一個或多個隱藏神經元提供輸入。

  • Hidden neurons

隱藏的神經元會接收來自輸入神經元的輸入,並提供輸出給輸出神經元。

  • Output neurons

輸出神經元代表數據採礦模型的可預測屬性值。 對於離散輸入屬性,輸出神經元通常代表可預測屬性的單一預測狀態,包括遺漏值。 例如,二進位可預測屬性會產生一個輸出節點,描述遺漏或現有的狀態,以指出該屬性的值是否存在。 作為可預測屬性的布林欄位會產生三個輸出神經元:一個神經元用於真值、一個神經元用於假值,另一個神經元用於遺漏或現有狀態。 離散且可預測的屬性具有兩個以上的狀態時,會為每個狀態產生一個輸出神經元,並針對遺漏狀態和現有狀態分別產生一個輸出神經元。 連續可預測數據行會產生兩個輸出神經元:一個神經元,用於遺漏或現有狀態,另一個神經元用於連續數據行本身的值。 如果檢閱一組可預測的資料行產生超過 500 個輸出神經元,Analysis Services 會在資料探勘模型中生成新的網路,以代表額外的輸出神經元。

神經會接收來自其他神經元或其他數據的輸入,視其所在的網路層而定。 輸入神經元會接收來自原始數據的輸入。 隱藏的神經元和輸出神經元會從神經網路中其他神經元的輸出接收輸入。 輸入會建立神經元之間的關聯性,而關聯性可作為一組特定案例的分析路徑。

每個輸入都有指派給它的值,稱為 權數,其描述該特定輸入對隱藏神經元或輸出神經元的相關性或重要性。 指派給輸入的權數越大,該輸入的值就越相關或更重要。 權數可以是負數,這表示輸入可以抑制特定神經元,而不是啟用。 每個輸入的值會乘以權數來強調特定神經元的輸入重要性。 對於負權數,乘以權重後的效果是減少其重要性。

每個神經元都有指派給它的簡單非線性函式,稱為 啟用函式,其描述特定神經元對神經網路該層的相關性或重要性。 隱藏的神經元會使用 雙曲正切函數 (tanh) 作為啟用函式,而輸出神經元則使用 sigmoid 函數來啟用。 這兩個函式都是非線性的連續函式,可讓神經網路模型化輸入和輸出神經元之間的非線性關聯性。

定型類神經網路

在定型使用 Microsoft類神經網路演算法的數據採礦模型時,涉及數個步驟。 這些步驟會受到您為演算法參數指定的值所影響。

演算法會先從數據源評估及擷取定型數據。 訓練數據的一部分百分比,稱為 保留數據,會保留用於評估網路的正確性。 在整個訓練過程中,網路會在每次迭代訓練數據之後立即進行評估。 當精確度不再增加時,訓練程式就會停止。

SAMPLE_SIZEHOLDOUT_PERCENTAGE參數的值可用來判斷要從訓練數據取樣的案例數目,以及保留為保留數據的案例數目。 HOLDOUT_SEED 參數的值是用來隨機決定個別案例,以供保留作為測試數據使用。

備註

這些演算法參數與HOLDOUT_SIZE和HOLDOUT_SEED屬性不同,這些屬性會套用至採礦結構以定義測試數據集。

接下來,演算法會決定採礦模型支援的網路數目和複雜度。 如果採礦模型包含一或多個僅用於預測的屬性,演算法會建立代表所有這類屬性的單一網路。 如果採礦模型包含一或多個用於輸入和預測的屬性,演算法提供者會為每個屬性建構網路。

對於具有離散值的輸入和可預測屬性,每個輸入或輸出神經元分別代表單一狀態。 對於具有連續值的輸入和可預測屬性,每個輸入或輸出神經元分別代表屬性的值範圍和分佈。 任一案例中支援的狀態數目上限取決於 MAXIMUM_STATES 演算法參數的值。 如果特定屬性的狀態數目超過 MAXIMUM_STATES 演算法參數的值,則會選擇該屬性的最受歡迎或相關狀態,最多允許的最大狀態數目,其餘狀態會分組為遺漏值以供分析之用。

然後,當決定要為隱藏層建立的初始神經元數目時,演算法會使用 HIDDEN_NODE_RATIO 參數的值。 您可以將 HIDDEN_NODE_RATIO 設定為 0,以防止在演算法為採礦模型產生的網路中建立隱藏層,將神經網路視為羅吉斯回歸。

演算法供應商反覆評估網路中所有輸入的權重,方法是使用稍早保留的訓練數據集,並將每個案例在保留數據中的實際已知值與網路的預測值進行比較,這個過程稱為批次學習。 在演算法評估整個定型數據集之後,演算法會檢閱每個神經元的預測和實際值。 演算法會計算錯誤程度(如果有的話),並調整與那個神經元的輸入相關的權重,以稱為反向傳播的方式從輸出神經元反向調整到輸入神經元。 然後,此演算法會針對整個定型數據集重複此程式。 因為演算法可以支援許多權重和輸出神經元,因此會使用共軛梯度演算法來引導訓練過程,以指派和評估輸入的權重。 結合漸層演算法的討論超出本檔的範圍。

特徵選取

如果輸入屬性的數目大於 MAXIMUM_INPUT_ATTRIBUTES 參數的值,或可預測屬性的數目大於 MAXIMUM_OUTPUT_ATTRIBUTES 參數的值,則會使用特徵選取演算法來減少採礦模型中所含網路的複雜性。 特徵選取會將輸入或可預測屬性的數目減少為與模型最相關的輸入或可預測屬性。

所有 Analysis Services 數據採礦演算法都會自動使用特徵選取,以改善分析和減少處理負載。 用於類神經網路模型中特徵選取的方法取決於 屬性的數據類型。 如需參考,下表顯示神經網路模型所使用的特徵選取方法,也會顯示羅吉斯回歸演算法所使用的特徵選取方法,其以類神經網路演算法為基礎。

演算法 分析方法 評論
類神經網路 趣味評分

香農的熵

貝葉斯與 K2 先驗

貝氏迪里希萊特,均勻先驗(預設值)
類神經網路演算法在數據包含連續欄時,可以使用基於熵的評分方法和貝氏評分方法。

違約。
羅吉斯迴歸 趣味評分

香農的熵

貝葉斯與 K2 先驗

貝氏迪里希萊特,均勻先驗(預設值)
因為您無法將參數傳遞至此演算法來控制特徵選舉行為,所以會使用預設值。 因此,如果所有屬性都是離散或離散化,則預設值為 BDEU。

控制類神經網路模型特徵選取的演算法參數是MAXIMUM_INPUT_ATTRIBUTES、MAXIMUM_OUTPUT_ATTRIBUTES和MAXIMUM_STATES。 您也可以藉由設定 HIDDEN_NODE_RATIO 參數來控制隱藏層的數目。

評分方法

評分 是一種正則化,在訓練類神經網路模型的過程中,意思是將一個值,例如離散的文字標籤,轉換成可以與其他類型的輸入進行比較並在網路中加權的值。 例如,如果一個輸入屬性是 Gender,而且可能的值為 Male 和 Female,而另一個輸入屬性是 Income,且具有變數範圍的值,則每個屬性的值都無法直接比較,因此必須編碼為一般小數位數,以便計算權數。 評分是將這類輸入正規化為數值的程式:具體而言,就是將這類輸入正規化為機率範圍。 用於正規化的函式也有助於更均勻地在統一的尺度上分配輸入值,讓極端值不會扭曲分析結果。

神經網路的輸出也會進行編碼。 當輸出有單一目標(也就是預測),或只用於預測且不用於輸入的多個目標時,模型會建立單一網路,而且可能不需要將值正規化。 不過,如果有多個屬性用於輸入和預測,模型必須建立多個網路;因此,所有值都必須正規化,而且輸出也必須在輸出結束網路時進行編碼。

輸入的編碼是以訓練案例中的每個離散值相加為基礎,並將該值乘以其權重。 這稱為 加權總和,這會傳遞至隱藏層中的啟用函式。 z 分數用於編碼,如下所示:

離散值

μ = p - 狀態的先前機率

StdDev = sqrt(p(1-p))

連續值

目前值= 1 - μ/σ

沒有現有的值= -μ/σ

編碼值之後,輸入會經過加權加總,並將網路邊緣當做權數。

輸出的編碼會使用 sigmoid 函式,其具有屬性,使其非常適用於預測。 其中一個這樣的屬性是,無論原始值如何縮放,無論值是負數還是正值,此函式的輸出一律是介於 0 到 1 之間的值,這適合估計機率。 另一個有用的屬性是 sigmoid 函式具有平滑效果,因此當值遠離偏轉點時,值的機率會向 0 或 1 移動,但速度緩慢。

自定義類神經網路演算法

Microsoft類神經網路演算法支援數個會影響結果採礦模型行為、效能和精確度的參數。 您也可以修改模型處理數據的方式,方法是在數據行上設定模型旗標,或設定散發旗標來指定如何處理數據行內的值。

設定演算法參數

下表描述可與Microsoft類神經網路演算法搭配使用的參數。

隱藏節點比率
指定隱藏神經元與輸入和輸出神經元的比例。 下列公式會決定隱藏層中神經元的初始數目:

HIDDEN_NODE_RATIO * SQRT(總輸入神經元 * 總輸出神經元)

預設值為 4.0。

保留比例
指定訓練數據中用於計算驗證錯誤的案例百分比,作為訓練採礦模型時停止準則的一部分。

預設值為 30。

保留種子
指定用於設定偽隨機生成器的種子數字,以在演算法隨機確定保留數據時使用。 如果此參數設定為 0,演算法會根據採礦模型的名稱產生種子,以確保在重新處理期間模型內容保持不變。

預設值為 0。

最大輸入屬性
決定在採用特徵選取之前,可以提供給演算法的輸入屬性數目上限。 將此值設定為 0 會停用輸入屬性的功能選取。

預設值為 255。

最大輸出屬性
決定在採用特徵選取之前,可以提供給演算法的輸出屬性數目上限。 將此值設定為 0 會停用輸出屬性的功能選取。

預設值為 255。

最大狀態
指定演算法所支援之每個屬性的離散狀態數目上限。 如果特定屬性的狀態數目大於為此參數指定的數位,則演算法會針對該屬性使用最受歡迎的狀態,並將其餘狀態視為遺漏。

預設值是 100。

樣本大小
指定要用來定型模型的案例數目。 此演算法將使用此數字或不包含在保留數據中的案例總數百分比,以由HOLDOUT_PERCENTAGE參數指定的較小者為準。

換句話說,如果HOLDOUT_PERCENTAGE設定為 30,則演算法會使用此參數的值,或值等於案例總數的 70%,以較小者為準。

預設值為 10000。

模型旗標

以下列出支援與 Microsoft 類神經網路演算法搭配使用的模型旗標。

不可為空
表示欄位不能包含 Null。 如果 Analysis Services 在模型定型期間遇到 Null,將會產生錯誤。

適用於採礦結構欄位。

模型僅存在
模型應該只考慮屬性是否有值或是否有缺失。 確切的值並不重要。

適用於採礦模型數據行。

分配標誌

支援搭配Microsoft類神經網路演算法使用的分配標誌如下。 旗標只能作為模型的提示使用;如果演算法偵測到不同的分佈,則會使用找到的分佈,而不是提示中提供的分佈。

正常
表示數據行內的值應該視為代表一般或高斯分佈。

均勻
表示欄位中的值應該被視為均勻分布;也就是說,任何值的機率大致相等,而且是由值的總數決定的。

記錄正常
表示數據行內的值應該視為根據 對數法線 曲線分佈,這表示值的對數會以常態分佈。

需求

神經網路模型必須至少包含一個輸入數據行和一個輸出數據行。

輸入和預測欄位

Microsoft類神經網路演算法支援下表所列的特定輸入數據行和可預測數據行。

資料行 內容類型
輸入屬性 連續、循環、離散、離散化、索引鍵、數據表和排序
可預測屬性 連續、循環、離散、離散化和有序

備註

支援迴圈和已排序的內容類型,但演算法會將它們視為離散值,而且不會執行特殊處理。

另請參閱

Microsoft類神經網路演算法
類神經網路模型的採礦模型內容 (Analysis Services - 數據採礦)
類神經網路模型查詢範例