DL4J中文文件/模型/自編碼器
什麼是自編碼器?
自編碼器是用於無監督學習的神經網路。Eclipse DL4J支援某些自動編碼器層,如變分自編碼器。
受限波爾滋曼機在哪?
0.9.x版本已不再支援受限波爾滋曼機了,對於多數機器學習問題它們不再是最好的選擇了。
支援的層
AutoEncoder(自編碼器)
自編碼器層,新增噪聲到輸入並學習重建函式。
corruptionLevel
public Builder corruptionLevel(double corruptionLevel)
構建器 - 設定損壞級別- 0(無)到1(所有值損壞)
- 引數 corruptionLevel 損壞級別 (0 to 1)
sparsity
public Builder sparsity(double sparsity)
自編碼器稀疏引數
- 引數 sparsity 稀疏性
BernoulliReconstructionDistribution(伯努利重建分佈)
變分自編碼器的伯努利重構分佈。
輸出由伯努利分佈建模——即,伯努利分佈應該用於二分類資料(所有值是0或1);變分自編碼器將輸出的概率建模為0或1。
因此,應使用sigmoid活函式將限制啟用範圍為0至1。避免產生不在0至1範圍內資料的啟用函式(包括relu、tanh和許多其它)。
hasLossFunction
public boolean hasLossFunction()
用預設Sigmoid啟用函式建立一個伯努利重建分佈
CompositeReconstructionDistribution(組合重建分佈)
組合重建分佈由其它重建分佈構建而來。典型的用途是將例如連續資料和二分類資料組合在同一個模型中,或者組合連續變數的不同分佈。不何哪種情況下,此類允許使用者建模(例如)前10個值。
addDistribution
public Builder addDistribution(int distributionSize, ReconstructionDistribution distribution)
新增另一個分佈到一個組合分佈中。在任何先前的新增後,這將為下一個‘distributionSize’值新增分佈。例如,在由指定的分佈X建模時呼叫addDistribution(10, X)一次會導致值為0到9(包括)。在由指定的分佈Y建模時呼叫addDistribution(10, Y)一次會導致值為10到19(包括)
- 引數 distributionSize 使用指定分佈模型的值的數目
- 引數 distribution 模型資料分佈
ExponentialReconstructionDistribution(指數重建分佈)
指數重建分佈
支援資料範圍 [0,無窮)
這裡使用的引數化:網路模型分佈引數gamma,其中gamma=log(lambda),用 gamma in (-inf, inf)
這意味著一個來自自編碼器的輸入gamma = 0 給出lambda = 1,這與指數均值有關。
關於啟用函式的選擇:上面的引數化支援gamma範圍(負無窮大,無窮大),因此優先選擇對稱啟用函式,如“identity”或“tanh”。
hasLossFunction
public boolean hasLossFunction()
- 棄用
GaussianReconstructionDistribution (高斯重建分佈)
變分自編碼器的高斯重建分佈
輸出由高斯分佈建模,其中均值和方差(對角協方差矩陣)由網路正向傳遞確定。
具體地說,高斯重建分佈模型均值和log(STDEV ^ 2)。這個引數化給出log(1)=0,並且輸入可以在範圍(無窮大,無窮大)內。用於方差的其他引數化當然是可能的,但是關於平均預啟用函式值和啟用函式範圍可能是有問題的。
對於啟用函式,identity和tanh可能是典型的,儘管tanh(不同於identity)意味著平均值和對數方差的最小/最大可能值。應避免不對稱啟用功能,如sigmoid或relu。
hasLossFunction
public boolean hasLossFunction()
建立具有預設identity啟用函式的高斯重建分佈。
LossFunctionWrapper(損失函式包裝器)
損失函式包裝器允許訓練具有標準(可能確定性)神經網路損失函式的VAE(分變自編碼器)模型。
注意:大多數功能都被支援,但是顯然在使用損失函式包裝器時不能計算重建對數概率,因為ILossFunction例項既沒有(a)概率解釋,也沒有(b)計算負對數概率的方法。
ReconstructionDistribution
指定分佈的形式 p(資料|x). 例如,真實值資料可以被建模。
VariationalAutoencoder(變分自編碼器)
變分自編碼器層
檢視: Kingma & Welling, 2013: 自動編碼變分貝葉斯 - https://arxiv.org/abs/1312.6114
這種實現允許多個編碼器和解碼器層,其數量和大小可以獨立設定。
關於預訓練期間的分數的註釋:這個實現Kingma & Welling中描述的變分下限目標的負值最小化;該文章中的數學是基於變分下限的最大化。因此,在DL4J預訓練報告的分數是本文的變分下界方程的負值。反向傳播和學習過程就是在那裡描述的。
encoderLayerSizes
public Builder encoderLayerSizes(int... encoderLayerSizes)
編碼器層的大小,單位。每個編碼器層在功能上等同於 {- link org.deeplearning4j.nn.conf.layers.DenseLayer}。典型地,解碼器層的數量和大小 (通過 {- link #decoderLayerSizes(int…)設定} )類似於編碼器層。
- 引數 encoderLayerSizes 變分編碼器中每個編碼器層的大小
decoderLayerSizes
public Builder decoderLayerSizes(int... decoderLayerSizes)
解碼器層的單位大小。每個解碼器層在功能上等同於 {- link org.deeplearning4j.nn.conf.layers.DenseLayer}。典型地,解碼器層的數量和大小與編碼器層相似。(通過 {- link #encoderLayerSizes(int…)設定}。
- 引數 decoderLayerSizes 變分編碼器中每個解碼層的大小
reconstructionDistribution
public Builder reconstructionDistribution(ReconstructionDistribution distribution)
給定隱藏狀態資料的重建分佈- i.e., P(data|Z).
這應該根據建模的資料型別仔細選擇。例如:
- {- link GaussianReconstructionDistribution} + {identity 或 tanh}用於實際值(高斯)資料
-
{- link BernoulliReconstructionDistribution} + sigmoid 用於 二分類 (0 or 1) 資料
- 引數 distribution 重建分佈
lossFunction
public Builder lossFunction(IActivation outputActivationFn, LossFunctions.LossFunction lossFunction)
配置變分自編碼器以使用指定的損失函式進行重建,而不是重建分佈。注意,這不遵循標準的變分自編碼器設計(根據Kingma & Welling),它假定一個概率輸出,即一些p(x|z)。然而,它是一個有效的網路配置,允許優化更傳統的目標,例如均方誤差。
注意:顯然,設定損失函式將取代任何先前設定的重建分佈。
- 引數 outputActivationFn輸出/重建的啟用函式
- 引數 lossFunction 使用的損失函式
lossFunction
public Builder lossFunction(Activation outputActivationFn, LossFunctions.LossFunction lossFunction)
配置變分自編碼器以使用指定的損失函式進行重建,而不是重建分佈。注意,這不遵循標準的變分自編碼器設計(根據Kingma & Welling),它假定一個概率輸出,即一些p(x|z)。然而,它是一個有效的網路配置,允許優化更傳統的目標,例如均方誤差。
注意:顯然,設定損失函式將取代任何先前設定的重建分佈。
- 引數 outputActivationFn輸出/重建的啟用函式
- 引數 lossFunction 使用的損失函式
lossFunction
public Builder lossFunction(IActivation outputActivationFn, ILossFunction lossFunction)
配置變分自編碼器以使用指定的損失函式進行重建,而不是重建分佈。注意,這不遵循標準的變分自編碼器設計(根據Kingma & Welling),它假定一個概率輸出,即一些p(x|z)。然而,它是一個有效的網路配置,允許優化更傳統的目標,例如均方誤差。
注意:顯然,設定損失函式將取代任何先前設定的重建分佈。
- 引數 outputActivationFn輸出/重建的啟用函式
- 引數 lossFunction 使用的損失函式
pzxActivationFn
public Builder pzxActivationFn(IActivation activationFunction)
輸入到P(z|資料)的啟用函式。
應該注意這一點,某些啟用函式(relu等)由於在[0,無窮大]範圍內有界而不適用。
引數 activationFunction p(z|x)的啟用函式
pzxActivationFunction
public Builder pzxActivationFunction(Activation activation)
輸入到P(z|資料)的啟用函式
應該注意這一點,某些啟用函式(relu等)由於在[0,無窮大]範圍內有界而不適用。
引數 activationFunction p(z|x)的啟用函式
nOut
public Builder nOut(int nOut)
設定VAE(變分自編碼器)狀態Z的大小。這是標準正向傳播期間的輸出大小,以及預訓練期間的分佈P(Z|資料)的大小。
引數 nOut P(Z|資料) 和輸出資料的大小
numSamples
public Builder numSamples(int numSamples)
設定每個資料點(來自VAE狀態Z)在進行預訓練時使用的樣本數。預設值:1。
這是來自Kingma和Welling的引數L:“在我們的實驗中,我們發現,只要小批量M足夠大,每個資料點的樣本L的數量就可以設定為1,例如M=100。”
- 引數 numSamples 訓練前每個資料點的樣本數