⚠️ このページは機械翻訳されています
この日本語訳は機械翻訳によるもので、誤りや不自然な表現が含まれている場合があります。正確な内容については英語版をご参照ください。
This page was machine-translated and may contain errors. Please refer to the English version for accuracy.
誤りを見つけられた場合は、joseph.austerweil@gmail.com までご連絡いただくか、GitHub リポジトリにプルリクエストをお送りください。
GenJAXのためのPython基礎
プログラマーになる必要はありません!
この章では、GenJAXのコードを読んで実行するために必要最低限のPythonを学びます。ソフトウェア開発者になる必要はありませんが、次のことができるようになります:
- コードが何をしているかを理解する
- 値を変えて実験する
- 例を実行して結果を確認する
レストランで注文できる程度のイタリア語を学ぶようなものです — 流暢に話せなくても、実用的な知識があれば十分です!
1. 変数:物に名前をつける
Pythonでは、後で使えるように値に名前をつけます。
| |
意味:「これらの数値を記憶して、この名前で呼ぶ」
確率との対応: 数学で $P(H) = 0.5$ と書いたように、その値を保存しています。
試してみよう:
| |
#記号について
# の後に続くものはすべてコメントです — 人間のためのメモで、コンピュータには無視されます。
| |
2. 関数:アクションのレシピ
関数とは、命令に名前をつけたものです。レシピのようなものだと思ってください。
| |
出力:
Hello, Chibany!
Time for tonkatsu!入力のある関数(パラメータ)
関数は入力(パラメータと呼ばれる)を受け取れます:
| |
文字列の前の f によって、テキストの中の {} 内に変数を埋め込めます。
出力のある関数(戻り値)
関数は値を返すことができます:
| |
確率との対応: $f(\omega)$ が結果を受け取って数値を返す関数であることを思い出してください。同じ考え方です!
3. リスト:物のコレクション
リストは買い物リストのようなもの — 順序のあるアイテムの集まりです。
| |
集合との対応: これは $\Omega = \{HH, HT, TH, TT\}$ に順序がついたものです!
アイテムへのアクセス
| |
Pythonはゼロから数える!
最初のアイテムは [0]、2番目は [1]、というようになります。
最初は誰でもつまずきます。Pythonは少し独特だと覚えておいてください!
アイテムの数は?
| |
対応: これは $|\Omega|$(濃度)のようなものです!
4. ループ:繰り返し実行する
forループはアクションを繰り返します:
| |
出力:
HH
HT
TH
TT読み方:「このリストの各mealについて、mealを表示する」
カウントループ
| |
出力:
Day 0
Day 1
Day 2
Day 3
Day 4対応: 10,000日をシミュレートしたい場合は range(10000) を使えばよいです!
5. 条件分岐:判断を下す
if文を使うとコードが選択を行えます:
| |
読み方:「TがmealにあればこちらをThenする。そうでなければあちらをする。」
複数の条件
| |
注意:
==は「等しい」(比較)を意味します=は「代入」(値を与える)を意味します
6. デコレータ:特別な機能を追加する
デコレータは関数に機能を追加します。GenJAXでは @gen を使います:
| |
@gen が行うこと: GenJAXに「これは生成的関数です — すべての確率的選択を追跡してください!」と伝えます。
デコレータを完全に理解する必要はありません。 次のことだけ知っておいてください:
- 関数定義のすぐ前に置く
- 関数の動作を変更する
- GenJAXでは
@genは確率モデルに不可欠
7. GenJAXの@記号(アドレッシング)
GenJAXでは @ を使って確率的選択に名前をつける:
| |
読み方:「表(true/1/とんかつ)が50%の確率のコインを投げて、この選択を’lunch’と呼ぶ」
ベルヌーイ確率変数とは? ベルヌーイ確率変数は、コイン投げのような単一のyes/no結果を表します。0(失敗/false/裏/とんかつ)または1(成功/true/表/ハンバーガー)のいずれかで、1になる確率は $p$ です。GenJAXでは flip(p) を使ってベルヌーイ分布からサンプリングします — コイン投げのメタファーにちなんだ名前です!
確率との対応: これは「$L$ を昼食の確率変数とし、$L$ は $p=0.5$ のベルヌーイ分布に従う」と言うことに相当します。
8. ライブラリとインポート
ライブラリは、私たちが使えるあらかじめ書かれたコードの集まりです:
| |
意味:
import jax— JAXライブラリをロードする(計算のため)import matplotlib.pyplot as plt— プロットツールをロードし、pltと呼ぶfrom genjax import gen, flip— GenJAXから特定のツールをロードする
これらを暗記する必要はありません。 各ノートブックの最初にインポートセルを実行するだけです!
9. ドット記法でメソッドを呼び出す
オブジェクト「に対して」関数を呼び出すこともあります:
| |
読み方:「modelに属するsimulate関数を呼び出す」
. は「~に属する」または「~の一部」を意味します。
10. コメントとドキュメント
一行コメント
| |
複数行コメント(docstring)
| |
重要な理由: コードが何をしているかを理解するのに役立ちます!
クイックリファレンス:GenJAXコードを読む
典型的なGenJAX関数を分解して説明します:
| |
GenJAXコードを読むには:
@genを見つける — それは生成的関数- docstringを読む — 何をするのか?
@記号を探す — それらが確率的選択- 何を返すかを確認する — それが結果
練習:このコードが読めますか?
| |
学ばなくてよいこと
心配しなくてよいこと:
- ❌ オブジェクト指向プログラミング
- ❌ 高度なデータ構造
- ❌ ファイル入出力
- ❌ エラー処理
- ❌ Pythonのほとんどの機能!
集中すること:
- ✅ コードを読んで何をするかを理解する
- ✅ ノートブックのコードセルを実行する
- ✅ パラメータの値を変えて実験する
- ✅ 確率との対応を理解する
成功のためのヒント
1. 暗記する必要はありません
この章を参照用に開いておいてください。GenJAXコードの中で認識できないものを見かけたら、ここに戻ってきてください!
2. コードを実行して理解する
ただ読むだけでなく、コードを実行してください!出力を見ることで、すべてがより明確になります。
3. 実験しましょう!
値を変えてみてください:
0.5を0.8に変えると何が起こりますか?- シミュレーション回数を変えたら?
- わざと壊してどんなエラーが出るか確かめてみてください!
4.「これは何をしているのか?」と問いかけよう
「これはどのように動くのか?」ではなく、「これは何を達成しようとしているのか?」
GenJAXの準備完了!
これでPythonの知識が十分身につきました:
- ✅ GenJAXコードを読む
- ✅ 生成的関数が何をするかを理解する
- ✅ Colabで例を実行する
- ✅ 値を変えて実験する
次は: 最初の生成的関数を書いてみましょう!
| ← 前の章:はじめに | 次の章:最初のGenJAXモデル → |
|---|