ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Gen.jl とは
Gen.jl は MIT の Probabilistic Computing Project が開発する Julia 製の確率的プログラミング言語 (PPL: Probabilistic Programming Language) です。 Bayesian inference (MCMC / Particle Filter / Variational Inference) を柔軟にカスタマイズできるのが特徴で、TensorFlow/PyTorch のような自動微分も統合しています。
事前準備: Julia 本体のインストール
# Linux / macOS: 公式インストーラ juliaup (推奨)
curl -fsSL https://install.julialang.org | sh
# シェル再起動後
juliaup add lts # 1.10.x LTS
juliaup add release # 最新リリース
juliaup default lts # デフォルトを LTS に
julia --version # julia version 1.10.x
# 古い手動方式 (tar.gz 展開)
wget https://julialang-s3.julialang.org/bin/linux/x64/1.10/julia-1.10.4-linux-x86_64.tar.gz
tar xf julia-1.10.4-linux-x86_64.tar.gz
sudo mv julia-1.10.4 /opt/
sudo ln -s /opt/julia-1.10.4/bin/julia /usr/local/bin/julia
Windows
# winget
winget install --id=Julialang.Julia
# Chocolatey
choco install julia
# juliaup
winget install --id=Julialang.Juliaup
juliaup add lts
Gen.jl のインストール
# Julia REPL を起動
$ julia
# Pkg モードに入る (] キー)
julia> ]
(@v1.10) pkg> add Gen
# 戻る (Backspace) → using でロード
julia> using Gen
# またはスクリプト
using Pkg
Pkg.add("Gen")
Pkg.add("Distributions")
Pkg.add("StatsBase")
Pkg.add("MCMCChains")
GitHub 最新版を入れる
using Pkg
# main ブランチ
Pkg.add(url="https://github.com/probcomp/Gen.jl")
# 特定ブランチ
Pkg.add(url="https://github.com/probcomp/Gen.jl", rev="dev")
# 確認
Pkg.status("Gen")
Jupyter Notebook で使う
using Pkg
Pkg.add("IJulia")
# Jupyter を起動
using IJulia
notebook()
# または JupyterLab
notebook(dir=pwd(), detached=true)
これで Jupyter のカーネル選択に Julia が追加され、Notebook で Gen.jl が使えます。
動作確認: 簡単な確率モデル
using Gen
using Distributions
# 1. 線形回帰モデル定義
@gen function linear_model(xs::Vector{Float64})
slope ~ normal(0, 2) # 傾き ~ N(0, 2)
intercept ~ normal(0, 10) # 切片 ~ N(0, 10)
noise ~ gamma(1, 1) # ノイズ標準偏差
ys = Vector{Float64}(undef, length(xs))
for (i, x) in enumerate(xs)
ys[i] = ({(:y, i)} ~ normal(slope * x + intercept, noise))
end
return ys
end
# 2. 観測データ
xs = [1.0, 2.0, 3.0, 4.0, 5.0]
true_ys = [2.5, 4.7, 6.8, 9.1, 11.2]
# 3. 観測値を制約
constraints = choicemap()
for (i, y) in enumerate(true_ys)
constraints[(:y, i)] = y
end
# 4. importance sampling で推論
trace, weight = generate(linear_model, (xs,), constraints)
println("slope = ", trace[:slope])
println("intercept = ", trace[:intercept])
MCMC 推論サンプル
using Gen
# Metropolis-Hastings サンプリング
function mh_inference(model, observations, num_samples)
trace, _ = generate(model, (xs,), observations)
slopes = Float64[]
intercepts = Float64[]
for i in 1:num_samples
trace, _ = mh(trace, select(:slope, :intercept))
push!(slopes, trace[:slope])
push!(intercepts, trace[:intercept])
end
return slopes, intercepts
end
slopes, intercepts = mh_inference(linear_model, constraints, 10000)
println("slope mean: ", sum(slopes) / length(slopes))
他の PPL との比較
| PPL | 言語 | 強み | 弱み |
|---|---|---|---|
| Gen.jl | Julia | 柔軟性 / カスタム推論 / GFI | ユーザ少 / 学習曲線 |
| Turing.jl | Julia | シンプル API / 自動微分 | カスタム推論が限定的 |
| Stan | 独自 (C++) | HMC/NUTS 高速 / 安定 | 記述自由度低い |
| PyMC | Python | Python エコシステム / NumPy 連携 | 大規模で遅め |
| NumPyro | Python | JAX 高速 / GPU 対応 | 新興 / API 変動 |
| Pyro | Python | PyTorch ベース / DL 連携 | HMC 系遅め |
環境別の注意点
| 環境 | 注意点 |
|---|---|
| Linux | juliaup 経由インストール推奨。libgfortran が必要なケース有 |
| macOS (Intel / Apple Silicon) | arm64 ネイティブ版を juliaup で。Rosetta 2 経由は遅い |
| Windows | パス長制限。プロジェクトを浅い階層に |
| WSL2 | Windows で Linux 版 Julia を使うのが快適 |
| Docker | julia:1.10 公式イメージ。Pkg.add("Gen") を Dockerfile で |
Docker でのセットアップ
FROM julia:1.10
WORKDIR /app
# Project.toml と Manifest.toml をコピー
COPY Project.toml Manifest.toml ./
# 依存を一括インストール
RUN julia -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()'
COPY . .
CMD ["julia", "--project=.", "run.jl"]
トラブルシューティング
| 症状 | 対処 |
|---|---|
初回 using Gen がやたら遅い | 事前コンパイル中。一度成功すれば次回以降速い |
| Pkg.add で SSL エラー | プロキシ環境変数 JULIA_PKG_SERVER / HTTPS_PROXY を設定 |
| 古い Julia で Gen が入らない | Julia 1.6+ にアップグレード。juliaup で簡単 |
ERROR: LoadError: UndefVarError: @gen not defined | using Gen 忘れ |
FAQ
Q: Gen.jl と Turing.jl どちらを学ぶべき?
A: シンプルな確率モデルなら Turing.jl が書きやすい。カスタム推論アルゴリズムや programmable inference が要るなら Gen.jl。
Q: Python ユーザに薦めるなら?
A: Julia の学習コストを考えると、まずは PyMC や NumPyro から入るほうが現実的。本格的に推論カスタマイズが必要になったら Gen.jl 検討。
Q: GPU で動く?
A: Julia の CUDA.jl と組合せれば可能。ただし Gen の標準 API では明示的に GPU 配列を扱う必要があり、初心者向けではありません。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?