質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1961閲覧

Log probabilityの計算

teefpc

総合スコア111

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/06 15:09

編集2020/04/06 23:01

Python

1import torch 2from torch.distributions import Categorical 3 4# 40%と60%で確率を設定 5probs = torch.tensor([0.4, 0.6]]) 6# カテゴリカル分布クラスをインスタンス化 7m = Categorical(probs) 8# サンプリング 9action = m.sample() 10log_prob = m.log_prob(action)

この確率分布クラスは毎回サンプリング値が異なりますが、具体的に、どのような計算を行っているのしょうか。参考ページPROBABILITY DISTRIBUTIONS - TORCH.DISTRIBUTIONS

multinomialを使っているので基本的には並べ替えを変えているようですが、それだけでしょうか。

PyTorch

1 def sample(self, sample_shape=torch.Size()): 2 sample_shape = self._extended_shape(sample_shape) 3 param_shape = sample_shape + torch.Size((self._num_events,)) 4 probs = self.probs.expand(param_shape) 5 probs_2d = probs.reshape(-1, self._num_events) 6 sample_2d = torch.multinomial(probs_2d, 1, True) 7 return sample_2d.reshape(sample_shape) 8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

質問のコードは表が出る確率が0.4、裏が出る確率が0.6のコインをトスしたとき、表裏のどちらが出るかをサンプリングするというものです。
当たり前ですが、裏の出る確率が高くても常に裏が出るとは限りません。これがサンプリングするたびに結果が異なる理由です。

結果が毎回異なるようにする実装は乱数を生成することで実現しています。ここからは想像になりますが、実装としては擬似乱数関数を使って一様分布の値を生成し、各確率分布の定義に沿って実際の乱数に変換しているのではないでしょうか。

なお、離散系の確率分布のベルヌーイ分布・二項分布・他項分布・カテゴリー分布は式変形により導出な関係です。もう少しざっくりいうとベルヌーイ分布を試行回数・クラス数を拡張させると他の分布になります。よって、コードを追いかけていくと最終的にベルヌーイ分布を擬似乱数関数で実装しているのではないでしょうか

投稿2020/04/07 21:43

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teefpc

2020/04/08 11:44

とても分かりやすいです
guest

0

具体的に、どのような計算を行っているのしょうか。

Log probability は、確率値に対数をとったものです。

実装の話であれば、こちらでコードを見れます。

torch.distributions.categorical — PyTorch master documentation

追記

multinomialを使っているので基本的には並べ替えを変えているようですが、それだけでしょうか。

カテゴリカル分布は、多項分布で N = 1 とした場合なので、torch.multinomial(probs_2d, 1, True) で計算しています。

ややこしい離散分布に関するまとめ - 作って遊ぶ機械学習。

投稿2020/04/06 15:24

編集2020/04/07 03:41
tiitoi

総合スコア21954

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問