machine-learning は何をしますか?
JAX、関数型プログラミングパターン、高性能コンピューティングを用いた機械学習開発。
概要
このスキルは、以下の分野に焦点を当てています:
- JAX: 自動微分とGPU/TPUアクセラレーションのためのNumPy互換ライブラリ。
- 関数型プログラミング: 純粋関数、不変データ構造、高階関数を使用して、より明確でテスト可能な機械学習コードを実現。
- 高性能コンピューティング (HPC): 効率的なモデルトレーニングと推論のためのベクトル化、並列化、およびハードウェアアクセラレーションの活用。
主要な概念
JAXの基本
JAXは、高速な数値計算のためのライブラリです。以下の機能を提供します:
jax.numpy: NumPyと同様のAPI。jax.grad: 自動微分。jax.jit: ジャストインタイムコンパイルによるパフォーマンス向上。jax.vmap: 自動ベクトル化。jax.pmap: 複数のデバイス(GPU/TPU)での並列実行。
関数型パターン
機械学習における関数型プログラミングの重要なパターン:
- 純粋関数: モデルの順伝播や損失計算を副作用のない関数として定義。
- 不変状態: パラメータを明示的に管理し、更新は新しいパラメータを返す関数で行う。
- 高階関数:
jax.gradやjitなどのデコレータや変換を関数に適用。
ワークフロー例
import jax
import jax.numpy as jnp
from jax import grad, jit, vmap
def predict(params, x):
return jnp.dot(x, params['w']) + params['b']
def loss(params, x, y):
pred = predict(params, x)
return jnp.mean((pred - y) ** 2)
# 勾配を計算
grad_loss = grad(loss)
# コンパイルされた更新ステップ
@jit
def update(params, x, y, lr=0.01):
grads = grad_loss(params, x, y)
return {k: params[k] - lr * grads[k] for k in params}
使用例
モデルの定義とトレーニング
import jax.random as random
# パラメータの初期化
key = random.PRNGKey(0)
params = {
'w': random.normal(key, (10,)),
'b': jnp.zeros(())
}
# データの準備
x_train = jnp.ones((100, 10))
y_train = jnp.ones((100,))
# トレーニングループ
for epoch in range(100):
params = update(params, x_train, y_train, lr=0.01)
対応プラットフォーム
- Claude Code
- Cursor
- Codex
- その他のAIエージェント