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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pytorch 笔记:torch.distributions 概率分布相关(更新中)

發布時間:2025/4/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch 笔记:torch.distributions 概率分布相关(更新中) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 包介紹

????????torch.distributions包包含可參數化的概率分布和采樣函數。 這允許構建用于優化的隨機計算圖和隨機梯度估計器。

????????不可能通過隨機樣本直接反向傳播。 但是,有兩種主要方法可以創建可以反向傳播的代理函數。

這些是

  • 評分函數估計量 score function estimato
  • 似然比估計量 likelihood ratio estimator
  • REINFORCE
  • 路徑導數估計量 pathwise derivative estimator

REINFORCE 通常被視為強化學習中策略梯度方法的基礎,

路徑導數估計器常見于變分自編碼器的重新參數化技巧中。

????????雖然評分函數只需要樣本 f(x)的值,但路徑導數需要導數 f'(x)。、

1.1 REINFORCE

? ? ? ? 我們以reinforce 為例:

????????當概率密度函數關于其參數可微時,我們只需要 sample() 和 log_prob() 來實現 REINFORCE:

????????

? ? ? ? 其中θ是參數,α是學習率,r是獎勵,是在狀態s的時候,根據策略使用動作a的概率

? ? ? ? (這個也就是policy gradient)

強化學習筆記:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客

?????????在實踐中,我們會從網絡的輸出中采樣一個動作,在一個環境中應用這個動作,然后使用 log_prob 構造一個等效的損失函數。

?????????對于分類策略,實現 REINFORCE 的代碼如下:(這只是一個示意代碼,跑不起來的)

probs = policy_network(state) #在狀態state的時候,各個action的概率m = Categorical(probs) #分類概率action = m.sample() #采樣一個actionnext_state, reward = env.step(action) #這里為了簡化考慮,一個episode只有一個actionloss = -m.log_prob(action) * reward #m.log_prob(action) 就是 logp #reward就是前面的r #這里用負號是因為強化學習是梯度上升loss.backward()

? 2 包所涉及的類

2.1 伯努利分布

torch.distributions.bernoulli.Bernoulli(probs=None, logits=None, validate_args=None)

????????創建由 probs 或 logits(但不是兩者同時)參數化的伯努利分布。

????????樣本是二進制的(0 或 1)。 它們取值 1 的概率為 p,取值 0 的概率為 1 - p。

2.1.1 參數

probs?(Number,Tensor)?采樣概率
logits?(Number,Tensor)?采樣的對數幾率

2.1.2?函數 & 屬性

sample()

采樣,默認采樣一個值

還可以按照shape 采樣

entropy()

計算熵

enumerate_support()

返回包含離散分布支持的所有值的張量。 結果將在維度 0 上枚舉

mean

均值

probs, logits兩個輸入的參數
param_shape

參數的形狀

variance

方差

2.2 貝塔分布

torch.distributions.beta.Beta(concentration1, concentration0, validate_args=None)

由concentration 1 (α)和concentration 0 (β)參數化的 Beta 分布。

?2.2.1 函數

采樣

默認是采樣一個值,也可以設置采樣的維數

entropy

計算熵


rsample(sample_shape)

如果分布參數是批處理的,則生成一個 sample_shape 形狀的重新參數化樣本或 sample_shape 形狀的重新參數化樣本批次。

注:生成Beta分布的時候,兩個參數必須至少有一個是Tensor,否則rsample效果失效

mean,variance

均值 & 方差

?2.3 Chi2 分布

torch.distributions.chi2.Chi2(df, validate_args=None)

?它只有sample一個函數?

2.4 連續伯努利

參數和伯努利很類似

torch.distributions.continuous_bernoulli.ContinuousBernoulli(probs=None, logits=None, lims=(0.499, 0.501), validate_args=None)

請注意,與伯努利不同,這里的“probs”不對應于伯努利的“probs”,這里的“logits”不對應于伯努利的“logits”,但由于與伯努利的相似性,使用了相同的名稱。?

2.4.1 函數

sample還是采樣
cdf

返回以 value 計算的累積概率密度函數。

icdf

返回以 value 計算的逆累積密度/質量函數。

entropy

還是計算熵

rsample

如果分布參數是批處理的,則生成一個 sample_shape 形狀的重新參數化樣本或 sample_shape 形狀的重新參數化樣本批次。

和前面Beta分布類似,只有創建時參數為Tensor,才會有rsample效果

mean,variance均值 方差

?2.5 二項分布

torch.distributions.binomial.Binomial(total_count=1, probs=None, logits=None, validate_args=None)

?

?????????創建由 total_count 和 probs 或 logits(但不是兩者)參數化的二項分布。 total_count 必須可以用 probs/logits 廣播。

2.5.1 函數&參數

sample

采樣

?

100被廣播到0,0.2,0.8,1 所以每次相當于是四個二項分布

enumerate_support

返回包含離散分布支持的所有值的張量。 結果將在維度 0 上枚舉

mean,variance

均值,方差

2.6? 分類分布

torch.distributions.categorical.Categorical(probs=None, logits=None, validate_args=None)

?樣本是來{0,...,K?1} 的整數,其中 K 是 probs.size(-1)。

2.6.1 函數

sample采樣

entropy

enumerate_support

返回包含離散分布支持的所有值的張量。 結果將在維度 0 上枚舉

2.6.2 注意:

創建分類分布時候的Tensor中元素的和可以不是1,最后歸一化到1即可

import torch import math m=torch.distributions.Categorical(torch.Tensor([1,2,4])) m.enumerate_support() #tensor([0, 1, 2])m.probs #tensor([0.1429, 0.2857, 0.5714])

3 log_probs

很多分類都有這樣一個函數log_probs,我們就統一說一下

假設m是一個torch的分類,那么m.log_prob(action)相當于

probs.log()[0][action.item()].unsqueeze(0)

(對這個action的概率添加log操作)?

import torch import math m=torch.distributions.Categorical(torch.Tensor([1,2,4])) m.enumerate_support() #tensor([0, 1, 2])a=m.sample() a #tensor(2)m.probs #tensor([0.1429, 0.2857, 0.5714])m.probs.log() #tensor([-1.9459, -1.2528, -0.5596])m.log_prob(a) #tensor(-0.5596)m.probs.log()[a.item()] #tensor(-0.5596)

總結

以上是生活随笔為你收集整理的pytorch 笔记:torch.distributions 概率分布相关(更新中)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。