深度贝叶斯神经网络
深度貝葉斯神經(jīng)網(wǎng)絡(luò)
翻譯自:博客
傳統(tǒng)的神經(jīng)網(wǎng)設(shè)計(jì)得不好,無(wú)法建模他們所做的預(yù)測(cè)相關(guān)的不確定性。為此,有一種方法是完全的貝葉斯
這里是我對(duì)下列三種方法的看法:
但是首先,我們先做什么呢?
深度學(xué)習(xí)網(wǎng)絡(luò)都有很多參數(shù),通常權(quán)重用w1,w2,...w_1, w_2,...w1?,w2?,...表示,偏置用b1,b2,...b_1,b_2,...b1?,b2?,...表示。傳統(tǒng)的(非貝葉斯)方法僅僅通過(guò)最大似然估計(jì)來(lái)學(xué)習(xí)參數(shù)的最優(yōu)值。這些值是標(biāo)量,比如w1=0.8,b1=3.1w_1=0.8, b_1=3.1w1?=0.8,b1?=3.1
另一個(gè)方面,貝葉斯方法關(guān)注每個(gè)參數(shù)的分布。例如,在貝葉斯神經(jīng)網(wǎng)絡(luò)訓(xùn)練收斂之后,上面兩個(gè)參數(shù)可以被這兩個(gè)高斯曲線描述。
貝葉斯網(wǎng)絡(luò)訓(xùn)練完成之后,w1,b1w_1, b_1w1?,b1?就可以表示為高斯曲線,如果是傳統(tǒng)的網(wǎng)絡(luò),表示為兩條線。
表示為一個(gè)分布而不是一個(gè)單一的值,這是很重要的事情。一方面,它使得從分布中多次取樣成為可能,還可以看到隨之帶來(lái)的模型預(yù)測(cè)的變化。如果它給出連續(xù)的預(yù)測(cè),一遍遍采樣后,網(wǎng)絡(luò)會(huì)對(duì)它的預(yù)測(cè)更有“信心”。
難點(diǎn)
估計(jì)分布當(dāng)然是最難的部分,通過(guò)使用貝葉斯法則,我們可以轉(zhuǎn)化為計(jì)算后驗(yàn)概率密度。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳
貝葉斯法則,x和y分別輸入和輸出,分母的積分需要對(duì)所有的www可能的取值計(jì)算邊緣分布,這是最難的部分。
問(wèn)題在于分母——也被叫做模型的證據(jù),這需要對(duì)參數(shù)全部可能的值進(jìn)行積分(也就是說(shuō)全部非權(quán)重和偏置取值空間),實(shí)踐中這不太可行。
因此,我們采用偽數(shù)值的方法來(lái)估計(jì)積分。
使用MCMC估計(jì)積分
由于使用貝葉斯法則計(jì)算精確的積分比較困難,MCMC(Markov Chain Monte Carlo)被用于做估計(jì)。MCMC背后的想法是非常優(yōu)美的,我建議閱讀這個(gè)帖子,里面給出了代碼和一些方法的理解。在所有的三個(gè)方法里面,除了數(shù)學(xué),這個(gè)方法是最慢的而且最不sexy的。
優(yōu)點(diǎn):理論上MCMC追得到最好的結(jié)果,就是說(shuō)最精確的估計(jì)。
缺點(diǎn):很長(zhǎng)時(shí)間才能收斂
使用黑箱變分推斷(例如edward)
變分推斷是一種估計(jì)密度函數(shù)的方法,它首先選擇一個(gè)我們已知的分布(例如高斯分布),然后漸進(jìn)式地改變它的參數(shù),直到它看起來(lái)像我們想要計(jì)算的分布,也就是后驗(yàn)分布。改變參數(shù)不再需要令人苦惱的積分運(yùn)算,這是一個(gè)優(yōu)化過(guò)程,微分比積分通常更容易估計(jì)。我們優(yōu)化的這種“編造”出來(lái)的分布,成為變分分布
有一些優(yōu)雅的數(shù)學(xué)展示了挑選最優(yōu)參數(shù)為什么等價(jià)于最大化下確界的,在某些時(shí)候得要檢查一下。但是如果你想要直到這種方法具體怎么實(shí)現(xiàn),按時(shí)離開理論分析,我準(zhǔn)備了一個(gè)簡(jiǎn)短的入門教程,這是一個(gè)使用edward的8分類的任務(wù)。
我們選擇高斯來(lái)設(shè)置變分分布,然后我們挑選基于KL散度的推斷方法。實(shí)際上KL的估計(jì)是通過(guò)“黑箱”變分方法估計(jì)ELBO實(shí)現(xiàn)的。(如果你對(duì)此感興趣,可以閱讀這里)
qw = Normal(loc=tf.Variable(tf.random_normal([D, K])),scale=tf.nn.softplus(tf.Variable(tf.random_normal([D, K])))) qb = Normal(loc=tf.Variable(tf.random_normal([K])),scale=tf.nn.softplus(tf.Variable(tf.random_normal([K]))))inference = ed.KLqp({w: qw, b: qb}, data={y: y_ph})inference.initialize(n_iter=STEPS, n_print=100, scale={y: N_TRAIN / BATCH_SIZE})在定義模型之后,我們現(xiàn)在可以開啟tf的session進(jìn)行訓(xùn)練了。
sess = tf.InteractiveSession() tf.global_variables_initializer().run()train_data_generator = generator(train_data, BATCH_SIZE) train_labs_generator = generator(train_labels, BATCH_SIZE) for _ in range(inference.n_iter):X_batch = next(train_data_generator)Y_batch = next(train_labs_generator)info_dict = inference.update(feed_dict={x: X_batch, y_ph: Y_batch})inference.print_progress(info_dict)我們可以采樣這些分布(qwqwqw表示權(quán)重,qbqbqb表示偏置),可以看到預(yù)測(cè)出的是一個(gè)分布,這表示了模型的不確定性。
你可以嘗試一下porb_lst和samples的用法。
總結(jié)如下,優(yōu)點(diǎn):它比樸素的MCMC更快,像edward這樣的庫(kù)幫助實(shí)現(xiàn)貝葉斯網(wǎng)絡(luò),在幾分鐘之內(nèi)就可以運(yùn)行。
缺點(diǎn):深度貝葉斯網(wǎng)絡(luò)可能會(huì)很慢,而且性能并不能保證始終達(dá)到最優(yōu)。
使用MC dropout
MC dropout 是一項(xiàng)最新的理論發(fā)現(xiàn),它提供了被稱為“dropout”的正則化技術(shù)的解釋,下面再做詳細(xì)說(shuō)明。變分推斷是一種貝葉斯方法,用于使用任意分布(先前提到的“變分分布”)來(lái)估計(jì)后驗(yàn)分布;droupout,恰恰相反,它是一種神經(jīng)網(wǎng)絡(luò)的正則化方法,訓(xùn)練過(guò)程中神經(jīng)元隨機(jī)開啟或關(guān)閉,以免使得網(wǎng)絡(luò)依賴某個(gè)特定的神經(jīng)元。這是MC dropout的核心思想:dropout能夠用于執(zhí)行變分推斷,這里變分分布就是一種伯努利分布(狀態(tài)為“開”和“關(guān)”)?!癕C”表示dropout用一種類似于蒙特卡羅的方式采樣。在實(shí)踐中,通過(guò)MC dropout 使用將傳統(tǒng)的網(wǎng)絡(luò)轉(zhuǎn)變成貝葉斯網(wǎng)絡(luò),使得訓(xùn)練問(wèn)題變得跟在每層使用ddropout一樣簡(jiǎn)單。這個(gè)等價(jià)于從伯努利分布中采樣,提供一種模型不確定性的度量(多次采樣的做的預(yù)測(cè)的連續(xù)性。)當(dāng)然我們也可以使用其他的變分分布來(lái)實(shí)現(xiàn)。
優(yōu)點(diǎn):容易將一有的深度網(wǎng)絡(luò)轉(zhuǎn)變成貝葉斯網(wǎng)絡(luò),它比其他方法更快,不需要推斷框架。
缺點(diǎn):測(cè)試階段的采樣對(duì)實(shí)時(shí)應(yīng)用來(lái)說(shuō)計(jì)算太昂貴了。
那到底貝葉斯神經(jīng)網(wǎng)絡(luò)有什么用呢?
許多研究者還是不相信應(yīng)該這么費(fèi)力的去使用貝葉斯方法,讓我再多說(shuō)兩句,我在自動(dòng)駕駛部門工作,所有下面這些的例子非常貼切。假想一個(gè)人正在駕駛者一輛最新的,最強(qiáng)大的自動(dòng)駕駛的汽車,當(dāng)未識(shí)別的物體突然出現(xiàn)在駕駛員面前時(shí),比如是一輛飛行汽車,從未在飛行汽車這個(gè)類別上受過(guò)訓(xùn)練的計(jì)算機(jī)視覺算法,會(huì)把它看作是飛機(jī),認(rèn)為它在很遠(yuǎn)的距離上。
那么會(huì)發(fā)生什么呢?
傳統(tǒng)的網(wǎng)絡(luò)可能會(huì)過(guò)分自信的誤判飛行器的位置,而貝葉斯網(wǎng)絡(luò)則可以利用其不確定性做出建議放慢速度的決策。
下面舉一個(gè)最簡(jiǎn)單的基于Dropout的貝葉斯神經(jīng)網(wǎng)絡(luò)的例子:
Input-FC-Relu-Dropout-FC-Relu-Dropout-FC-Logit-Softmax
在這樣一個(gè)包含兩個(gè)隱藏層的FC分類網(wǎng)絡(luò)中,我們接入了dropout層,dropout層的每個(gè)神經(jīng)元以
的概率取0(隨機(jī)失活)。我們?yōu)榱说玫揭粋€(gè)貝葉斯神經(jīng)網(wǎng)絡(luò),按如下進(jìn)行訓(xùn)練和測(cè)試:
- 訓(xùn)練時(shí),打開dropout層,前向推理計(jì)算分類損失,基于反向梯度傳播算法更新模型參數(shù),迭代若干個(gè)epochs
- 測(cè)試時(shí),仍然打開dropout層,進(jìn)行n次前向推理,得到每次的分類概率 pi∈RCp_i \in R^Cpi?∈RC, 其中C是類別數(shù)量,最終的分類概率為 p^=1n∑pi\hat{p} = \frac{1}{n}\sum p_ip^?=n1?∑pi?, 分類的不確定度(請(qǐng)大家想想這是哪種不確定度呢?)為var(p)=1n∑(pi?p^)2var(p) = \frac{1}{n}\sum(p_i-\hat{p})^2var(p)=n1?∑(pi??p^?)2
總結(jié)
- 上一篇: 【预测模型】基于贝叶斯优化的LSTM模型
- 下一篇: airpak模拟案例_《CFD模拟基本概