共用方式為


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

適用於: SQL Server 2019 和舊版 Analysis Services Azure Analysis Services Fabric/Power BI Premium

重要

SQL Server 2017 Analysis Services 中已淘汰數據採礦,現在已在 SQL Server 2022 Analysis Services 中停止。 檔不會更新為已淘汰和已停止的功能。 若要深入瞭解,請參閱 Analysis Services 回溯相容性

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

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

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

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

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

輸入神經元

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

隱藏的神經元

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

輸出神經元

輸出神經元代表數據採礦模型的可預測屬性值。 對於離散輸入屬性,輸出神經元通常代表可預測屬性的單一預測狀態,包括遺漏值。 例如,二進位可預測屬性會產生一個輸出節點,描述遺漏或現有的狀態,以指出該屬性的值是否存在。 做為可預測屬性的布爾值數據行會產生三個輸出神經元:一個神經元用於 true 值、一個神經元用於 false 值,另一個神經元用於遺漏或現有狀態。 具有兩個以上狀態的離散可預測屬性會產生每個狀態的一個輸出神經元,以及一個遺漏或現有狀態的輸出神經元。 連續可預測數據行會產生兩個輸出神經元:一個神經元,用於遺漏或現有狀態,另一個神經元用於連續數據行本身的值。 如果檢閱一組可預測的數據行來產生超過 500 個輸出神經元,SQL Server 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 參數的值,則會使用特徵選取演算法來減少採礦模型中所包含的網路複雜度。 特徵選取會將輸入或可預測屬性的數目減少為與模型最相關的輸入或可預測屬性。

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

演算法 分析方法 評論
類神經網路 有趣的分數

香農的 Entropy

貝氏與 K2 舊版

貝氏迪里希萊特與統一之前 (預設值)
類神經網路演算法只要數據包含連續數據行,就可以使用以 entropy 為基礎的和貝氏評分方法。

違約。
羅吉斯回歸 有趣的分數

香農的 Entropy

貝氏與 K2 舊版

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

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

評分方法

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

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

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

離散值

μ = p - 狀態的先前機率

StdDev = sqrt(p(1-p))

連續值

值 present= 1 - μ/σ

沒有現有的值= -μ/σ

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

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

自定義類神經網路演算法

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

設定演算法參數

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

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

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

預設值為 4.0。

HOLDOUT_PERCENTAGE
指定定型數據中用來計算鑒效性錯誤的案例百分比,這是定型採礦模型時用來作為停止準則的一部分。

預設值為 30。

HOLDOUT_SEED
指定演算法隨機判斷鑒效組數據時,用來植入虛擬隨機產生器的數位。 如果此參數設定為 0,演算法會根據採礦模型的名稱產生種子,以確保在重新處理期間模型內容保持不變。

預設值為 0。

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

預設值為 255。

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

預設值為 255。

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

預設值為 100。

SAMPLE_SIZE
指定要用來定型模型的案例數目。 此演算法會使用這個數位或未包含在鑒效組數據中之案例總數的百分比,如HOLDOUT_PERCENTAGE參數所指定,以較小的值為準。

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

預設值為 10000。

模型旗標

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

NOT NULL
表示數據行不能包含 Null。 如果 Analysis Services 在模型定型期間遇到 Null,將會產生錯誤。

適用於採礦結構數據行。

MODEL_EXISTENCE_ONLY
指出模型應該只考慮屬性的值是否存在,或遺漏值時。 確切的值並不重要。

適用於採礦模型數據行。

散發旗標

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

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

均勻
表示數據行內的值應該視為統一散發;也就是說,任何值的機率大致相等,而且是值總數的函數。

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

要求

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

輸入和可預測數據行

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

內容類型
輸入屬性 連續、迴圈、離散、離散、離散、索引鍵、數據表和排序
可預測屬性 Continuous、Cyclical、Discrete、Discretized 和 Ordered

注意

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

另請參閱

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