Tiny Language Model Lab v0.1

極小の文字予測モデルを、Androidのブラウザ内で学習・観察する実験室。通信・外部ライブラリ・アカウント不要。

ニューラル・ビグラム(1文字だけ参照)

重要:これはLLMやTransformerそのものではありません。LLMで使われるトークン、埋め込み、確率分布、損失関数、勾配降下、自己回帰生成を、Attentionを加える前に切り出した教材です。学習データ外の知識はありません。

この実験で何をしているか

これは文字の直前1個から次の文字を予測する小型ニューラルモデルを、ブラウザ内で学習・観察できる教材です。文章の意味を理解するチャットAIや、Transformerではありません。

v0.1基礎モデルの版
4次元文字埋め込み
135初期データでの係数数
0外部ライブラリ
実装されている機能
  • サンプル8文/任意の短い文章を文字ペアへ分解
  • 埋め込み・線形変換・softmaxの前向き計算
  • 交差エントロピー損失と確率表示、勾配降下による学習
  • 学習回数と学習率の調整、損失の推移、次文字の確率比較
  • 確率的な文字生成、Temperature調整、生成過程の表示
まだ実装していない機能
  • Self-Attention、複数文字の文脈処理、Transformer
  • 長期記憶、意味理解、外部知識・検索
  • アカウント、共有学習、サーバー上での学習
  • 永続保存・復元(ページ更新時にモデルは初期化)

入力データの扱い:学習と生成はこのページを開いたブラウザ内で行います。この教材のコードには、入力した文章や学習結果をサーバーへ送る処理はありません。ただしWebページ閲覧自体の接続記録はホスティング事業者等に残り得ます。個人情報・機密情報を入力しないでください。

公開履歴:基礎教材 v0.1(2026-10-21)/公開用パッケージ v0.1-web.1(2026-10-26)。基礎計算コードは変更せず、公開説明のみ追加しました。

参照:元の実験ページ / 独立実行用JS(Node.js向け) / バージョン・ファイル一覧 / 公開仕様

1. 学習用テキスト

1行=1文として扱います。改行ごとに開始・終了の特別トークンを付けます。最初は8文だけです。

2. 学習する(数値を更新する)

0完了エポック
0パラメータ更新回数
—平均損失(小さいほど良い)
—困惑度 / perplexity
—語彙数(特殊記号含む)
—学習パラメータ数
0.10

「1例だけ学習」を押すと、1件の正解トークンに対する確率の変化が見られます。

エポック=学習テキストから作った全(前の文字→次の文字)組を1巡すること。損失は自然対数を使用。

3. 予測確率を比較する

右側の「実測」は教材内で次に出現する文字を単純集計した割合。左側の「ニューラル」はモデルが学習した確率です。初期状態で両者は一致しません。

ニューラル実測(カウント)

選択文字の埋め込みベクトル

4個の小数が学習で動きます。このモデルでは「直前の1文字」だけを4次元の数値列に変換しています。

4. 新しい文字列を生成する

0.8
未生成

生成時の選択記録

生成ボタンを押すと1文字ずつの予測が現れます。

直前の1文字しか参照しないため、学習を進めても文全体の文脈や意味は保持できません。これが次にAttentionを導入する理由です。

5. コードと数式の対応

このファイルのJavaScriptは、外部ライブラリを一切使わず約100個規模の係数を自前で更新しています。主な処理は以下の通りです。

直前の文字 x → 埋め込み h = E[x] (4数)
各候補 j のスコア z[j] = b[j] + W[j]・h
予測確率 p = softmax(z)
損失 L = -log(p[正解文字])
誤差 d[j] = p[j] - (j が正解なら 1)
W, b, E を勾配に沿って更新
次の文字を p に従い抽選 → 繰り返す
プログラミングの見どころ(ソースを見る順序)
  1. buildCorpus():文字をトークンIDへ置き換える
  2. initializeModel():ランダムな重みの配列を作る
  3. predict():スコアをsoftmax確率に変換
  4. trainOne():正解との誤差から重みを更新
  5. generateText():予測→抽選→次の予測を反復
  6. render...:計算結果を画面の部品に描画

次の発展

v0.2:複数文字を入力して文脈を持たせる。v0.3:1-head causal self-attention+位置埋め込みを実装する。v0.4:小規模Transformerを実際に学習させる。これらはまだ本ファイルには実装していません。