丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能 正文
發(fā)私信給叢末
發(fā)送

0

TensorFlow Probability 概率編程入門級實操教程

本文作者: 叢末 2019-02-04 20:34
導語:目前該教程已在 TFP 中開放。

雷鋒網(wǎng) AI 科技評論按:TensorFlow Probability(TFP)是一個基于 TensorFlow 的 Python 庫,能夠更容易地結(jié)合概率模型和深度學習。數(shù)據(jù)科學家、統(tǒng)計學以及機器學習研究者或者從業(yè)者,都可以用它編碼領(lǐng)域知識 (Domain Knowledge),從而理解數(shù)據(jù)并寫出自己的應(yīng)用。針對那些對 TFP 還不那么熟悉的入門者,日前,谷歌 TensorFlow Probability 的產(chǎn)品經(jīng)理 Mike Shwe 及軟件工程師 Josh Dillon、谷歌的軟件工程師 Bryan Seybold 及 Matthew McAteerCam Davidson-Pilon 共同在 TensorFlow 官網(wǎng)上發(fā)布介紹 TensorFlow Probability 的入門級實操性教程——《Bayesian Methods for Hackers》的文章,雷鋒網(wǎng) AI 科技評論編譯如下。

之前沒有學過概率編程?對 TensorFlow Probability(TFP)還不熟悉?下面我們?yōu)槟銣蕚淞巳腴T級實操性教程——《Bayesian Methods for Hackers》(教程查看地址:https://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/#tensorflow),這門教程的實例現(xiàn)在也在 TFP 中開放了。作為對所有人開放的開源資源,TFP 版本的概率編程對之前用 PyMC3 寫的那版進行了補充。

《Bayesian Methods for Hackers》具備許多優(yōu)勢:它不僅能讓概率初學者較容易上手,而且還展示了如何將概率編程應(yīng)用于現(xiàn)實問題。

每個人都可以學的概率編程

雖然概率編程不要求貝葉斯方法(Bayesian approach),但是該方法提供了一個相對直觀的框架,來表示信念(representing beliefs),并基于新的數(shù)據(jù)來更新這些信念?!禕ayesian Methods for Hackers》使用 TFP 為基礎(chǔ),以實操的方式來教授這些技術(shù)。由于這本書由 Google Colab 所寫,你可以運行并修改其中的 Python 示例。

TensorFlow 團隊開發(fā)的 TFP 專門面向數(shù)據(jù)科學家、統(tǒng)計學家以及以及想要編碼領(lǐng)域知識 (Domain Knowledge)來了解數(shù)據(jù)并進行數(shù)據(jù)預(yù)測的機器學習研究者和從業(yè)者。TFP 是基于 TensorFlow 的 Python 開發(fā)庫,能夠更容易地結(jié)合概率模型和先進硬件上的深度學習。TFP 可以讓你:

  • 互動地探究數(shù)據(jù)

  • 快速地評估不同的模型

  • 自動地利用先進的、矢量化的硬件加速器

  • 更輕易、更有把握地啟用。TFP 經(jīng)專業(yè)地開發(fā)和測試,可使用現(xiàn)成的 Google-Cloud,并且還有一個強大的開源社區(qū)的支持。

正如我們在相關(guān)博文中曾討論過的,概率編程有非常多樣化的應(yīng)用,包括金融、石油和天然氣等各行各業(yè)。為什么?——因為不確定性無處不在?,F(xiàn)實世界的現(xiàn)象——即便是那些我們完全了解的現(xiàn)象,都受到我們無法控制甚至無法意識到的外部因素的影響。如果忽略這些因素,這些模型所得出的結(jié)論可能往好里說是誤導性的或者是完全錯誤的。我們開發(fā)出了對所有場景都可用的 TFP,就是為了對我們周圍所有的不確定性進行建模。

解決現(xiàn)實世界的問題

許多貝葉斯教程都是聚焦于解決那些已有分析結(jié)果的簡單問題:比如擲硬幣和擲骰子的問題。不過《Bayesian Methods for Hackers》一書是從這些簡單的問題開始,之后迅速轉(zhuǎn)向更加現(xiàn)實的問題,例如從理解宇宙到檢測某個在線用戶的行為變化等。

在這篇文章接下來的部分,我們將一起探討一個 非常有名的現(xiàn)實世界的問題,這個問題在 Bayesian Hackers 一書中的第二章節(jié)(查看地址:https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/blob/master/Chapter2_MorePyMC/Ch2_MorePyMC_TFP.ipynb)有更詳細的描述:1986 年航天飛機挑戰(zhàn)者的災(zāi)難。

1986 年 1 月 28 日,美國挑戰(zhàn)者號航天飛機的第 25 次飛行中,由于一處 O 形圈故障,挑戰(zhàn)者號的兩個固體火箭助推器其中的一個發(fā)生了爆炸。雖然控制中心的工程師們與 O 形圈制造商就先前飛行中的損壞進行了多次溝通,但制造商堅持認為風險是可以接受的。

下圖將對先前航天飛機任務(wù)中的七次 O 形圈損壞事件的觀測,描述成了一個環(huán)境溫度的函數(shù)。(在 70 度時,有兩次損壞事件。)

TensorFlow Probability 概率編程入門級實操教程

你會注意到,隨著溫度的降低,O 形圈損壞的比例會明顯增多,不過沒有明顯的溫度閾值——低于該閾值時 O 形圈就一定會失效。與現(xiàn)實世界中的大多數(shù)現(xiàn)象一樣,這個問題涉及不確定性。我們希望在給定溫度 t 下,來確定 O 形圈失效的概率。

我們可以特別使用邏輯函數(shù)模擬溫度 t 下 O 形環(huán)損壞的概率 p :

TensorFlow Probability 概率編程入門級實操教程

其中β確定概率函數(shù)的形狀,α是偏移項,控制函數(shù)從左向右移動。由于這兩個參數(shù)都既是正的或負的,也沒有特定的邊界或大小的偏差,我們可以將它們建模為高斯分布隨機變量:

TensorFlow Probability 概率編程入門級實操教程

在 TFP 中,我們可以用 tfp.distributions.Normal 直觀地表示 α 和 β,其代碼片段如下:

temperature_ = challenger_data_[:, 0]    

temperature = tf.convert_to_tensor(temperature_, dtype=tf.float32)    

D_ = challenger_data_[:, 1]                # defect or not?    

D = tf.convert_to_tensor(D_, dtype=tf.float32)    


beta = tfd.Normal(name="beta", loc=0.3, scale=1000.).sample()    

alpha = tfd.Normal(name="alpha", loc=-15., scale=1000.).sample()    

p_deterministic = tfd.Deterministic(name="p", loc=1.0/(1. + tf.exp(beta * temperature_ + alpha))).sample()    


[    

prior_alpha_,    

prior_beta_,    

p_deterministic_,    

D_,    

] = evaluate([    

alpha,    

beta,    

p_deterministic,    

D,    

])    

(如果要運行這個代碼片段,請前往本書第二章的 Google Colab 版本,來運行整個航天飛機示例)。

要注意的是,我們在第 8 行得到 p(t) 的實際值 0 或 1,其中我們使用此前在第 6 行和第 7 行中采樣的α和β值從概率函數(shù)(logistic function)中采樣。此外,注意 evaluate() 輔助函數(shù)可以讓我們實現(xiàn)圖表和 eager 模式之間的無縫轉(zhuǎn)換,與此同時將張量值轉(zhuǎn)換為 numpy。關(guān)于 eager 和圖表模型以及這一輔助函數(shù)的更詳細的講解,請查看第二章節(jié)的開頭部分。

為了將溫度 t 下的失效概率 p(t) 與我們觀測的數(shù)據(jù)聯(lián)系起來,我們可以使用帶參數(shù) p(t) 的伯努利隨機變量。要注意的是,一般而言 Ber(p) 是隨機變量,它的值為 1 的概率為 p,其它情況下都為 0。因此,生成模型的最后一部分是溫度值為 ? 的情況下觀測到的有缺陷事件的數(shù)量 D?,我們可以對其建模為:

TensorFlow Probability 概率編程入門級實操教程

給定這一生成模型的情況下,我們希望找到模型參數(shù)從而讓模型能夠解釋所觀察到的數(shù)據(jù)——這正是是概率推理的目標。

TFP 通過使用非標準化的聯(lián)合對數(shù)概率函數(shù)評估模型來執(zhí)行概率推斷。此 joint_log_prob 的論點是數(shù)據(jù)和模型狀態(tài)。該函數(shù)返回參數(shù)化模型生成觀測數(shù)據(jù)的聯(lián)合概率的對數(shù)。如果要了解更多關(guān)于 joint_log_prob 的信息,可以查看這個短文介紹。

針對上述挑戰(zhàn)者的示例,這里我們定義 joint_log_prob 的方式如下:

def challenger_joint_log_prob(D, temperature_, alpha, beta):    

"""    

   Joint log probability optimization function.    


   Args:    

     D: The Data from the challenger disaster representing presence or     

        absence of defect    

     temperature_: The Data from the challenger disaster, specifically the temperature on     

        the days of the observation of the presence or absence of a defect    

     alpha: one of the inputs of the HMC    

     beta: one of the inputs of the HMC    

   Returns:     

     Joint log probability optimization function.    

   """    

rv_alpha = tfd.Normal(loc=0., scale=1000.)    

rv_beta = tfd.Normal(loc=0., scale=1000.)    

logistic_p = 1.0/(1. + tf.exp(beta * tf.to_float(temperature_) + alpha))    

rv_observed = tfd.Bernoulli(probs=logistic_p)    


return (    

rv_alpha.log_prob(alpha)    

+ rv_beta.log_prob(beta)    

+ tf.reduce_sum(rv_observed.log_prob(D))    

)    

注意 15-18 行怎樣簡單地對生成模型、每行的隨機變量進行編碼。同時也要注意 rv_alpha rv_beta 表示此前對 ? 和 β 分布的隨機變量。相比之下,rv_observed 表示給定一個參數(shù)為 ? 和 β 的概率分布情況下溫度和 O 形圈輸出的觀察可能性的條件分布。

接下來,我們使用 joint_log_prob 函數(shù),并將其發(fā)送到 tfp.mcmc 模塊。馬爾可夫鏈蒙特卡洛(MCMC)算法對未知的輸入值進行有依據(jù)的猜測,并計算 joint_log_prob 函數(shù)中參數(shù)集的可能性。通過多次重復這一過程,MCMC 構(gòu)建了可能的參數(shù)的分布,而構(gòu)建這一分布是概率推理的目標。

因此,我們將在 challenge_joint_log_prob 函數(shù)上設(shè)置一種特定類型的稱為「哈密頓蒙特卡洛」的 MCMC:

number_of_steps = 60000    

burnin = 50000    


# Set the chain's start state.    

initial_chain_state = [    

0. * tf.ones([], dtype=tf.float32, name="init_alpha"),    

0. * tf.ones([], dtype=tf.float32, name="init_beta")    

]    


# Since HMC operates over unconstrained space, we need to transform the    

# samples so they live in real-space.    

unconstraining_bijectors = [    

tfp.bijectors.Identity(),    

tfp.bijectors.Identity()    

]    


# Define a closure over our joint_log_prob.    

unnormalized_posterior_log_prob = lambda *args: challenger_joint_log_prob(D, temperature_, *args)    


# Initialize the step_size. (It will be automatically adapted.)    

with tf.variable_scope(tf.get_variable_scope(), reuse=tf.AUTO_REUSE):    

step_size = tf.get_variable(    

name='step_size',    

initializer=tf.constant(0.5, dtype=tf.float32),    

trainable=False,    

use_resource=True    

)    


# Defining the HMC    

hmc=tfp.mcmc.TransformedTransitionKernel(    

inner_kernel=tfp.mcmc.HamiltonianMonteCarlo(    

target_log_prob_fn=unnormalized_posterior_log_prob,    

num_leapfrog_steps=2,    

step_size=step_size,    

step_size_update_fn=tfp.mcmc.make_simple_step_size_update_policy(),    

state_gradients_are_stopped=True),    

bijector=unconstraining_bijectors)    


# Sampling from the chain.    

[    

posterior_alpha,    

posterior_beta    

], kernel_results = tfp.mcmc.sample_chain(    

num_results = number_of_steps,    

num_burnin_steps = burnin,    

current_state=initial_chain_state,    

kernel=hmc)    


# Initialize any created variables for preconditions    

init_g = tf.global_variables_initializer()    

最終,我們將真正通過 evaluate() 輔助函數(shù)進行推理:

evaluate(init_g)    

[    

posterior_alpha_,    

posterior_beta_,    

kernel_results_    

] = evaluate([    

posterior_alpha,    

posterior_beta,    

kernel_results    

])    


print("acceptance rate: {}".format(    

kernel_results_.inner_results.is_accepted.mean()))    

print("final step size: {}".format(    

kernel_results_.inner_results.extra.step_size_assign[-100:].mean()))    


alpha_samples_ = posterior_alpha_[burnin::8]    

beta_samples_ = posterior_beta_[burnin::8]    

繪制 α 和 β 的分布圖時,我們注意到這兩個參數(shù)的分布相當寬泛,正如我們所預(yù)期的那樣,數(shù)據(jù)點相當少,并且失效和非失效觀測的溫度出現(xiàn)重疊。然而,即使分布寬泛,我們也可以相當確定溫度確實對 O 形圈損壞的概率有影響,因為β的所有樣本都大于 0。同樣,我們也可以確信 α 明顯小于 0,因為所有的樣本都能很好地轉(zhuǎn)化為負數(shù)。

TensorFlow Probability 概率編程入門級實操教程

正如我們上面所提到的,我們真正想知道的是: 在給定溫度下,O 形環(huán)損壞的預(yù)期概率是多少?為了計算這一概率,我們可以對來自后驗的所有樣本求平均值,從而得到概率 p(t?) 的可能值。

alpha_samples_1d_ = alpha_samples_[:, None]  # best to make them 1d    

beta_samples_1d_ = beta_samples_[:, None]    


beta_mean = tf.reduce_mean(beta_samples_1d_.T[0])    

alpha_mean = tf.reduce_mean(alpha_samples_1d_.T[0])    

[ beta_mean_, alpha_mean_ ] = evaluate([ beta_mean, alpha_mean ])    


print("beta mean:", beta_mean_)    

print("alpha mean:", alpha_mean_)    

def logistic(x, beta, alpha=0):    

"""    

   Logistic function with alpha and beta.    


   Args:    

     x: independent variable    

     beta: beta term     

     alpha: alpha term    

   Returns:     

     Logistic function    

   """    

return 1.0 / (1.0 + tf.exp((beta * x) + alpha))    


t_ = np.linspace(temperature_.min() - 5, temperature_.max() + 5, 2500)[:, None]    

p_t = logistic(t_.T, beta_samples_1d_, alpha_samples_1d_)    

mean_prob_t = logistic(t_.T, beta_mean_, alpha_mean_)    

[    

p_t_, mean_prob_t_    

] = evaluate([    

p_t, mean_prob_t    

])    

我們可以在整個溫度范圍內(nèi)計算 95%的可信區(qū)間。要注意的是,這個區(qū)間是可靠的,而不是在統(tǒng)計分析的頻率論方法中常用到的置信區(qū)間。95%可信區(qū)間告訴我們,能夠以 95%的概率確定真實值將位于此區(qū)間內(nèi)。例如,在正如下圖中的紫色區(qū)域所顯示的,在 50 度時,我們可以 95%確定 O 形圈損壞的概率介于 1.0 和 0.80 之間。諷刺地是,許多人都錯誤地將置信區(qū)間解釋為具有這一特征。

TensorFlow Probability 概率編程入門級實操教程

挑戰(zhàn)者號災(zāi)難發(fā)生的當天,其溫度為 31 華氏度,這一事實證明了,O 形圈失效的后驗分布將使我們高度確信挑戰(zhàn)者號會出現(xiàn)損壞的問題。

TensorFlow Probability 概率編程入門級實操教程

這種非常簡單的概率分析展示了 TFP 和貝葉斯方法的強大:它們可以提供有價值的分析,同時可以對可能帶來嚴重后果的現(xiàn)實世界的問題進行預(yù)測。

在《Bayesian Methods for Hackers》一書中,你可以看到大量現(xiàn)實世界示例。對短信量隨時間變化的分析,可以在制造業(yè)和生產(chǎn)系統(tǒng)中的各種故障檢測問題得到廣泛應(yīng)用。在我們首次起草本章節(jié)的 TFP 版本的幾周時間內(nèi),谷歌的軟件工程師就應(yīng)用了短信分析的方法來理解生產(chǎn)軟件的文本片狀(text flakiness)。

你可以找到某個分析來尋找宇宙中的暗物質(zhì)。此外,書中還有預(yù)測上市公司的股票收益率的方法

我們希望大家能深入了解本書中的概念性實操演示,并將這些技術(shù)應(yīng)用到各自所在領(lǐng)域的問題中。歡迎大家在 Github 中發(fā)表評論和提出要求,來幫助我們對這本書不斷改進,從而使其實現(xiàn)最佳狀態(tài)!

本文參考:https://en.wikipedia.org/wiki/Space_Shuttle_Challenger_disaster

via:https://medium.com/tensorflow/an-introduction-to-probabilistic-programming-now-available-in-tensorflow-probability-6dcc003ca29e 雷鋒網(wǎng) AI 科技評論編譯。

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

TensorFlow Probability 概率編程入門級實操教程

分享:
相關(guān)文章
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說