日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

深度贝叶斯神经网络

發(fā)布時(shí)間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度贝叶斯神经网络 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

深度貝葉斯神經(jīng)網(wǎng)絡(luò)

翻譯自:博客

傳統(tǒng)的神經(jīng)網(wǎng)設(shè)計(jì)得不好,無(wú)法建模他們所做的預(yù)測(cè)相關(guān)的不確定性。為此,有一種方法是完全的貝葉斯

這里是我對(duì)下列三種方法的看法:

  • 使用MCMC估計(jì)積分
  • 使用黑箱變分推斷(edward框架)
  • 使用MC dropout
  • 但是首先,我們先做什么呢?
    深度學(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)直接上傳
    貝葉斯法則,xy分別輸入和輸出,分母的積分需要對(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ù)。

    # Define: # ~ K number of classes, e.g. 8 # ~ D size of input, e.g. 10 * 40 # ~ BATCH_SIZE, N_TRAIN, N_TEST, STEPS (how many training steps) # Tensorflow Placeholders: w = Normal(loc=tf.zeros([D, K]), scale=tf.ones([D, K])) b = Normal(loc=tf.zeros(K), scale=tf.ones(K)) x = tf.placeholder(tf.float32, [None, D]) y = Categorical(tf.matmul(x,w)+b) y_ph = tf.placeholder(tf.int32, [BATCH_SIZE]) # For the labels

    我們選擇高斯來(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é)

    以上是生活随笔為你收集整理的深度贝叶斯神经网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。