ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?