閱讀453 返回首頁    go 阿裏雲 go 技術社區[雲棲]


沒有任何公式——直觀的理解變分自動編碼器VAE

首發地址:https://yq.aliyun.com/articles/68410


作者介紹

12b5c884dbe35a3c41dda6d19ab83b10e7801298

出來。通過簡單的測量重構誤差和反傳網絡參數能夠很好的訓練該類網絡。

 0324a99f1be1f83b526cfc9852f6850c6a2aeefb

上圖是變分自動編碼器-VAE”,不同點在於其隱藏代碼來自於訓練期間學習到的概率分布。

90更有效的學習參數。

概率解釋通過假設每個參數的概率分布來降低w_i=0.7,在概率版本中,計算均值大約為u_i = 0.7和方差為v_i = 0.1的高斯分布,即w_i =N(0.7,0.1)。這個假設將輸入,隱藏表示以及神經網絡的輸出轉換為概率隨機變量。這類網絡被稱為貝葉斯神經網絡或BNN。

d4fb842f611d24a0c42ff9fc7cb3e9686ba46dd1

,將該計算問題轉換為優化問題,可以使用隨機梯度下降法解決。

在貝葉斯網絡中,網絡可以基於分布參數重新參數化。在變分自動編碼器中,僅在隱藏節點上假設這些分布。因此,編碼器變成一個變分推理網絡,而且譯碼器變成一個將隱藏代碼映射回數據分布的生成網絡。

81cc9fd8bcaa8074b13fedc6c43f660947652db4

將分布的均值和方差視為傳統網絡的參數,並將方差乘以來自噪聲發生器的樣本以增加隨機性。通過參數化隱藏分布,可以反向傳播梯度到編碼器的參數,並用隨機梯度下降訓練整個網絡。此過程能夠學習重新調參技巧

在經典版的神經網絡中,可以用均方誤差

VAE

network= {

  # encoder
  encoder_x = Input_layer(size=input_size, input=data)
  encoder_h = Dense_layer(size=hidden_size, input= encoder_x)

  # the re-parameterized distributions that are inferred from data 
  z_mean = Dense(size=number_of_distributions, input=encoder_h)
  z_variance = Dense(size=number_of_distributions, input=encoder_h)
  epsilon= random(size=number_of_distributions)

  # decoder network needs a sample from the code distribution
  z_sample= z_mean + exp(z_variance / 2) * epsilon

  #decoder
  decoder_h = Dense_layer(size=hidden_size, input=z_sample)
  decoder_output = Dense_layer(size=input_size, input=decoder_h)
}

cost={
  reconstruction_loss = input_size * crossentropy(data, decoder_output)
  kl_loss = - 0.5 * sum(1 + z_variance - square(z_mean) - exp(z_variance))
  cost_total= reconstruction_loss + kl_loss
}

stochastic_gradient_descent(data, network, cost_total)

keras

eb74970c96711308d7b9b4fb88d0e141765aed8b

44447deb8a959a610889cb929a385efe09493614

本文由北郵@愛可可-愛生活 老師推薦,

,譯者:海棠

最後更新:2017-07-12 22:09:51

  上一篇:go  深度學習網絡大殺器之Dropout——深入解析Dropout
  下一篇:go  深度學習零基礎?沒關係——麵向藝術家的RNN教程