DL4J中文文件/模型/自編碼器

weixin_34075551發表於2018-11-04

什麼是自編碼器?

自編碼器是用於無監督學習的神經網路。Eclipse DL4J支援某些自動編碼器層,如變分自編碼器。

受限波爾滋曼機在哪?

0.9.x版本已不再支援受限波爾滋曼機了,對於多數機器學習問題它們不再是最好的選擇了。

支援的層


AutoEncoder(自編碼器)

[原始碼]

自編碼器層,新增噪聲到輸入並學習重建函式。

corruptionLevel

public Builder corruptionLevel(double corruptionLevel) 

14495907-4a57cd44d3ab9500.gif
image.gif

構建器 - 設定損壞級別- 0(無)到1(所有值損壞)

  • 引數 corruptionLevel 損壞級別 (0 to 1)

sparsity

public Builder sparsity(double sparsity) 

14495907-07dc2f6b945743d0.gif
image.gif

自編碼器稀疏引數

  • 引數 sparsity 稀疏性

BernoulliReconstructionDistribution(伯努利重建分佈)

[原始碼]

變分自編碼器的伯努利重構分佈。

輸出由伯努利分佈建模——即,伯努利分佈應該用於二分類資料(所有值是0或1);變分自編碼器將輸出的概率建模為0或1。

因此,應使用sigmoid活函式將限制啟用範圍為0至1。避免產生不在0至1範圍內資料的啟用函式(包括relu、tanh和許多其它)。

hasLossFunction

public boolean hasLossFunction() 

14495907-c756f9c333330c03.gif
image.gif

用預設Sigmoid啟用函式建立一個伯努利重建分佈


CompositeReconstructionDistribution(組合重建分佈)

[原始碼]

組合重建分佈由其它重建分佈構建而來。典型的用途是將例如連續資料和二分類資料組合在同一個模型中,或者組合連續變數的不同分佈。不何哪種情況下,此類允許使用者建模(例如)前10個值。

addDistribution

public Builder addDistribution(int distributionSize, ReconstructionDistribution distribution) 

14495907-a62365e47d2fbdc9.gif
image.gif

新增另一個分佈到一個組合分佈中。在任何先前的新增後,這將為下一個‘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() 

14495907-49e032ef10d06b7a.gif
image.gif
  • 棄用

GaussianReconstructionDistribution (高斯重建分佈)

[原始碼]

變分自編碼器的高斯重建分佈

輸出由高斯分佈建模,其中均值和方差(對角協方差矩陣)由網路正向傳遞確定。

具體地說,高斯重建分佈模型均值和log(STDEV ^ 2)。這個引數化給出log(1)=0,並且輸入可以在範圍(無窮大,無窮大)內。用於方差的其他引數化當然是可能的,但是關於平均預啟用函式值和啟用函式範圍可能是有問題的。

對於啟用函式,identity和tanh可能是典型的,儘管tanh(不同於identity)意味著平均值和對數方差的最小/最大可能值。應避免不對稱啟用功能,如sigmoid或relu。

hasLossFunction

public boolean hasLossFunction() 

14495907-1c39975860a07314.gif
image.gif

建立具有預設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) 

14495907-d82f1116d9c8d70d.gif
image.gif

編碼器層的大小,單位。每個編碼器層在功能上等同於 {- link org.deeplearning4j.nn.conf.layers.DenseLayer}。典型地,解碼器層的數量和大小 (通過 {- link #decoderLayerSizes(int…)設定} )類似於編碼器層。

  • 引數 encoderLayerSizes 變分編碼器中每個編碼器層的大小

decoderLayerSizes

public Builder decoderLayerSizes(int... decoderLayerSizes) 

14495907-cb5c790c4e69a6b6.gif
image.gif

解碼器層的單位大小。每個解碼器層在功能上等同於 {- link org.deeplearning4j.nn.conf.layers.DenseLayer}。典型地,解碼器層的數量和大小與編碼器層相似。(通過 {- link #encoderLayerSizes(int…)設定}。

  • 引數 decoderLayerSizes 變分編碼器中每個解碼層的大小

reconstructionDistribution

public Builder reconstructionDistribution(ReconstructionDistribution distribution) 

14495907-93d11aa61580d836.gif
image.gif

給定隱藏狀態資料的重建分佈- 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) 

14495907-6c46c4a74c3b5c0b.gif
image.gif

配置變分自編碼器以使用指定的損失函式進行重建,而不是重建分佈。注意,這不遵循標準的變分自編碼器設計(根據Kingma & Welling),它假定一個概率輸出,即一些p(x|z)。然而,它是一個有效的網路配置,允許優化更傳統的目標,例如均方誤差。

注意:顯然,設定損失函式將取代任何先前設定的重建分佈。

  • 引數 outputActivationFn輸出/重建的啟用函式
  • 引數 lossFunction 使用的損失函式

lossFunction

public Builder lossFunction(Activation outputActivationFn, LossFunctions.LossFunction lossFunction) 

14495907-bf20cf4220f5295e.gif
image.gif

配置變分自編碼器以使用指定的損失函式進行重建,而不是重建分佈。注意,這不遵循標準的變分自編碼器設計(根據Kingma & Welling),它假定一個概率輸出,即一些p(x|z)。然而,它是一個有效的網路配置,允許優化更傳統的目標,例如均方誤差。

注意:顯然,設定損失函式將取代任何先前設定的重建分佈。

  • 引數 outputActivationFn輸出/重建的啟用函式
  • 引數 lossFunction 使用的損失函式

lossFunction

public Builder lossFunction(IActivation outputActivationFn, ILossFunction lossFunction) 

14495907-437bc607bc1c2fd4.gif
image.gif

配置變分自編碼器以使用指定的損失函式進行重建,而不是重建分佈。注意,這不遵循標準的變分自編碼器設計(根據Kingma & Welling),它假定一個概率輸出,即一些p(x|z)。然而,它是一個有效的網路配置,允許優化更傳統的目標,例如均方誤差。

注意:顯然,設定損失函式將取代任何先前設定的重建分佈。

  • 引數 outputActivationFn輸出/重建的啟用函式
  • 引數 lossFunction 使用的損失函式

pzxActivationFn

public Builder pzxActivationFn(IActivation activationFunction) 

14495907-1bc67d07f75bc4d1.gif
image.gif

輸入到P(z|資料)的啟用函式。
應該注意這一點,某些啟用函式(relu等)由於在[0,無窮大]範圍內有界而不適用。

引數 activationFunction p(z|x)的啟用函式

pzxActivationFunction

public Builder pzxActivationFunction(Activation activation) 

14495907-d3eb4136302e73a5.gif
image.gif

輸入到P(z|資料)的啟用函式
應該注意這一點,某些啟用函式(relu等)由於在[0,無窮大]範圍內有界而不適用。

引數 activationFunction p(z|x)的啟用函式

nOut

public Builder nOut(int nOut) 

14495907-25a40f2fd5bac49c.gif
image.gif

設定VAE(變分自編碼器)狀態Z的大小。這是標準正向傳播期間的輸出大小,以及預訓練期間的分佈P(Z|資料)的大小。

引數 nOut P(Z|資料) 和輸出資料的大小

numSamples

public Builder numSamples(int numSamples) 

14495907-a702e31e2be315b6.gif
image.gif

設定每個資料點(來自VAE狀態Z)在進行預訓練時使用的樣本數。預設值:1。

這是來自Kingma和Welling的引數L:“在我們的實驗中,我們發現,只要小批量M足夠大,每個資料點的樣本L的數量就可以設定為1,例如M=100。”

  • 引數 numSamples 訓練前每個資料點的樣本數

翻譯:風一樣的男子

14495907-f566798f2dd5634b.jpg
image

如果您覺得我的文章給了您幫助,請為我買一杯飲料吧!以下是我的支付寶,意思一下我將非常感激!

14495907-62deae2fc42daaf7.jpg
image

相關文章