さあ、あなただけの人工知能を作ってみましょう。
や外部 を使わず、こので小さなを手入力してさせ、自分で作ったとで対話します。まず開発全体の流れをつかみましょう。
XSLMの概要
はExtra Small Language Modelの意味で、SONUBが開発を学ぶために自ら作った用語です。 thruthesky.github.io/xslm
Webブラウザの中だけでAIを開発します
この講座で XSLM を開発するときは、必ずWebのだけを100%使います。自分のパソコンのや別のターミナルなど、ほかのプログラムを使ってはいけません。すべてWebブラウザの中で行います。
XSLMの開発は最初から最後まで、sonub.com のAIページの中にあるこのターミナルだけで行います。ここで作るはとても小さいので、スマートフォンでも、Webブラウザだけで開発できます。
詳しく見る
-
XSLMはさまざまな方法で作れますし、自分のコンピューターでも開発できます。
-
しかしSONUBはXSLMを最初に考案したとき、用として設計しました。Webブラウザの中の だけで、すべてを開発できます。
-
誰でも気軽にAIを自分で作ってみられるように、学ぶ過程のすべてをWebブラウザの中だけで行います。
-
ターミナルは Web ブラウザの中で動く Linux(v86)なので、パソコン・タブレット・スマートフォンのどこでも同じターミナルを使います。スマートフォンの画面キーボードにない Tab や などのキーは、ターミナルの上のキーバーで押します。
Web ブラウザの中で皆さんが自分で作った XSLM を、 で世界中の人が使えるように公開します。 自分のモデルを公開
小さいだけで、SLM・LLM を作る手順と同じです
XSLM は言語モデルのサイズがとても小さいだけで、AI を開発する や の開発手順ととてもよく似ています。だから XSLM の開発を学ぶと、AI をとてもよく理解できます。
- 同じところ
- 文章を集めてに分け、 モデルが次のトークンを当てるように学習し、そので文章を作ってとして提供する、という順番と原理が同じです。
- 違うところ
- の量、数、学習に使うコンピュータと時間がはるかに大きくなります。大きなモデルは、会話が上手になるよう整える追加の学習(など)も行います。
言語モデルをゼロから完成させ、の準備と学習からテキスト生成、自分のチャットボットとの接続まで、すべての段階を理解します。とても小さな学習用モデルなので最初の答えはめちゃくちゃですが、すべての部品の動きがわかるようになります。
文章→→学習→→と進みます。が提供するのは計算とファイルであり、学習済みの頭脳ではありません。
XSLM とは — LLM・SLM より一段小さい言語モデル
XSLM(Extra Small Language Model、超小型言語モデル)は、大規模言語モデル(LLM)や小型言語モデル(SLM)よりさらに一段小さい、パラメータが数百万〜数億個ほどのとても小さな AI モデルのことです。sonub.com が独自に考えた用語です。
- LLM: パラメータは数百億〜数千億個。の で動きます。
- SLM: パラメータは数十億個ほど。性能の良いコンピューターや GPU 1枚で動きます。
- XSLM: パラメータは数百万〜数億個。スマートフォンのような小さな機器でも動きます。
XSLM の大事な特徴は3つです。
- オンデバイス()向け: モデルがとても軽いので、スマートフォン・ウェアラブル機器・(モノのインターネット)機器のように計算力がかなり限られた機器でも、につながずに単独で動きます。
- とても低いコスト: ふつうの SLM はモデルを読み込むだけで数(GB)の が必要ですが、XSLM は数百メガバイト(MB)以下ので動きます。そのため、配布や運用の費用がほとんどかかりません。
- 1つの仕事の専門家(Specialized Worker): 百科事典のように多くを知る LLM と違い、XSLM は文章の要約・テキストの分類・関数()・AI の行き先の振り分け(Router)のように、1つの仕事だけをとても上手にこなすように作ります。
この過程で自分で作る XSLM は、それよりもさらにずっと小さい、パラメータ1,248個の学習用です。原理を目で追えるように一番小さくしただけで、部品は同じです。同じ構造を大きくして1つの仕事の資料で学習させれば、上で説明した実用的な XSLM になります。
言語モデルとは — 次のトークンの確率を出す関数
言語モデルは、前に出た文章を見て、次に来るかけら(トークン)ごとにをつける関数です。"the sun is" の次なら、たとえば warm に 0.6、hot に 0.2、blue に 0.01 をつけ、残りの 0.19 を語彙のほかのトークンに配ります。語彙全体の確率をすべて足すと1です。
文章を書くことは、この関数を繰り返すことです。
- これまでの文章をトークン番号に変えます。
- モデルが次のトークンの確率を計算します。
- 確率に従ってトークンを1つ選びます。
- 選んだトークンを文章の後ろにつけ、最初に戻ります。
・ のような巨大モデルも土台は同じです。違うのは大きさ(重みが数千億個)、学習資料の量、そして会話が上手になるよう加えた追加学習です。XSLM はこの土台を最も小さな大きさで一から作り、部品ごとの役割を目で確かめる過程です。
一から作るということ — ランダムな数字から始める
一から(from scratch)作るとは、他人が学習したを受け取らないという意味です。XSLM の重み 1,248個は、すべて random.gauss(0, 0.1) で選んだ小さなランダムな数字から始まります。このときモデルは何も知らないので、語彙40個にほぼ同じ確率を与えます。
学習がすることは1つだけです。資料に実際に出てきた次のトークンの確率が上がるように、数字を少しずつ直します。この次のトークン当て()だけで、文法・形式・よく出る内容が数字の中にたまっていきます。正解の印を別につける必要はありません。文章そのものが問題であり、正解です。
だからモデルが何を得意になるかは、より資料の形式が決めます。XSLM の資料はすべての行が Q: 質問 の次に A: 答え という形式なので、モデルは A: の後に答えらしい文章を続ける習慣を学びます。会話する能力を別に入れるはありません。
自分で Python で作ります
皆さん自身が Python でプログラミングをして AI を開発します。
そのために Python のコーディングも少し学びます。
Python のプログラムは 1 つので実行します。 の後にファイル名を書くと、そのファイルのコードが実行されます。
python3 [ファイル名.py]
自分で実習する
ターミナルで最初の Python プログラムを作る
下のコマンドを順番にターミナルへ自分で入力してください。コマンドごとに Enter を押します。
-
バージョンを確認する
ターミナルにこのコマンドを入力します。Python 3 で始まる番号が出れば準備完了です。
python3 --version -
Python を開く
python3 だけを入力します。>>> が出たら、Python がコマンドを待っている状態です。
python3 -
最初のコマンドを入力する
>>> の後にこのコマンドを入力して Enter を押します。画面に Hello と出ます。
print("Hello")Hello
-
Python を終了する
このコマンドで Python を閉じてターミナルに戻ります。
exit() -
ファイルを作る
はターミナルで使うで、Python のコードに色を付けて表示します。このコマンドで hello.py を作って開きます。
micro hello.py -
コードを入力する
この4行をそのまま入力します。最後の行の先頭にある4つの空白は、for が繰り返す行という印なので必ず入れます。Tab を押しても4つの空白になります。
name = "XSLM" print("Hello,", name) for step in range(1, 4): print("Step", step) -
保存して閉じる
+S を押すと保存されます。Ctrl+Q を押すと micro が閉じます。
Ctrl+S Ctrl+Q
-
プログラムを実行する
ターミナルに戻ったら、このコマンドで実行します。下のように表示されれば成功です。
python3 hello.pyHello, XSLM Step 1 Step 2 Step 3
-
自分で変えてみる
micro hello.py でもう一度開き、XSLM を自分の名前に変えて保存し、もう一度実行します。画面に自分の名前が表示されます。
全体の流れ — プログラムがファイルを渡していく
XSLM は、各プログラムが前のプログラムの作ったファイルを読み、次のファイルを作る鎖です。
- prepare.py — data/raw.txt を読み、data/train.txt と data/val.txt を作ります。
- tokenizer.py — train.txt で合併規則を学び、data/tokenizer.json を作ります。
- engine.py・model.py — 計算道具と GPT の構造です。自分ではファイルを作らず、他のプログラムが読み込んで使います。
- train.py — 資料とで GPT を学習し、checkpoints/model.json を作ります。
- generate.py — model.json を読み、文章を続けて書きます。
- runner.py — generate を として公開します。
- xchat.py — Runner に質問を送り、答えを表示します。
前のファイルが変わったら、その後ろを作り直す必要があります。例えば raw.txt を直したら prepare → tokenizer → train を順に実行し直します。
-
raw.txt 元の質問と答え
-
prepare.py 整理して学習用・検証用に分ける
-
tokenizer.py 文章をトークン番号に変える規則
-
train.py 次のトークンを当てる学習
-
model.json 学習したを保存
-
runner.py HTTP で生成を提供
-
xchat.py ターミナルの会話画面
どれくらい小さいか — 大きさの比較
モデルの大きさは、学習する数字(パラメーター)の個数で数えます。
- XSLM: 1,248個 — 語彙40、幅8、ブロック1個、ヘッド1個。
- 小さな練習用 GPT(例): 約2,800万個 — 語彙24,000、幅384、ブロック6個、ヘッド6個。
- Small(2019): 約1億2千万個。
- GPT-3(2020): 約1,750億個。
XSLM がこれほど小さいのには理由があります。すべての数字を Python の1つ(Value)で扱い、ブラウザーの中の仮想 で計算するからです。大きくすると学習1回に数分かかります。その代わり、数字1つ1つの計算を直接読めます。構造は GPT と同じで、大きさと計算方法だけが違います。
同じ方法で大きくすれば SLM になります
XSLM を学んで終わりではありません。同じ方法で大きさを広げていくだけです。
-
sonub.com で XSLM を学ぶ Web ブラウザーの中で
-
自分のコンピューターでもっと大きな XSLM を作る 同じ方法で、サイズを大きくして
-
さらに大きくすれば SLM 同じ方法で、さらに大きく
作る手順は同じです。サイズが大きくなるほど学習データとコンピューター、時間がより多く必要になり、計算は などのツールに任せます。
実際に使われている XSLM — 公開モデルと小さくする技術
この大きさのモデルは、すでに公開されて使われています。
- SmolLM2-135M(Hugging Face、2024年): パラメータは約1億3,500万個。文章の続きを書く GPT 型のモデルで、スマートフォンでも動きます。
- MobileBERT(Google、2020年): パラメータは約2,500万個。文章を書くよりも、文を理解して分類したり、文章の中から質問の答えを探したりするモデルです。
大きなモデルを XSLM の大きさまで小さくする代表的な技術は2つです。
- (Knowledge Distillation): 大きなモデル(先生)が出した確率を、小さなモデル(生徒)がまねして学びます。正解1つだけを見て学ぶよりも、多くのことを学べます。
- (Quantization): パラメータ1つを、 の小数の代わりに 8bit・4bit の数字で保存します。メモリは4〜8分の1になり、正確さは少し下がります。
どちらの技術も、この過程で作る学習ループ(6段階)と重みの保存(チェックポイント)が土台です。過程を終えれば、こうした技術の文書やコードを読む準備ができています。
核心となる概念9つ — 1行ずつ
過程で出会う概念を、先に1行ずつ見ておきます。詳しくは段階ごとに扱います。
- データ形式: モデルが何をするかを決めます(3段階)。
- トークナイザー: 文章をトークン番号に変え、元に戻します(4段階)。
- : トークン番号を数字のベクトルに変える表です(5段階)。
- : 何番目の位置かを知らせるベクトルです(5段階)。
- : 前の位置のどこをどれだけ見るかを決め、情報を混ぜます(5段階)。
- (): 混ぜた情報を位置ごとにもう一度加工します(5段階)。
- ・: 元の情報を守り、数字の大きさを安定させます(5段階)。
- 次のトークン予測・損失: 正解トークンの確率で、どれだけうまくできたかを測ります(6段階)。
- : 確率から実際のトークンを選びます(7段階)。
よくある誤解4つ
初めて作るときによくある誤解を正してから始めます。
- モデルの中に文章が保存されている? 違います。知識はすべての重みの数字のパターンに散らばっています。数字を1つ開いても文章はありません。
- 次の単語をから探す? 違います。モデルは毎回、計算で語彙全体の点数を出します。検索はしません。
- 損失が低ければ事実を話す? 違います。学習資料に似た文章を出す確率が高いという意味にすぎません。
- 小さいモデルは原理が違う? 違います。XSLM と巨大モデルは同じ部品を使います。大きさ・資料・追加学習が違うだけです。
もう1つあります。学習した内容は、学習を終えた瞬間に固まります。新しいニュースを知るには、もう一度学習するか、実際のサービスのように質問するときに最新の文書を探して一緒に入れる必要があります(、9段階)。
入力して実験
端末を開いて命令を入力し、各部分の役割を説明しましょう。短い英語例は後で自分の言語に置き換えられます。
python3 -c "print('XSLM: text -> tokens -> GPT -> Runner -> XChat')"
ターミナルで実習する
理解を確認
自分の重みを学習・保存・再読込し、XChatで使えれば完成です。
困ったとき
Pythonの・・ループ・・クラスが難しければ先に復習しましょう。
よくある質問
こんなに小さいモデルを作って、何に使うのですか?
この過程で作る1,248個のモデルには、実用性はほとんどありません。目的はエンジンを自分で組み立ててみることです。トークナイザー・埋め込み・アテンション・損失・・サンプリング・サーバーを一度ずつ手で作ってみると、大きなモデルの文書・論文・コードに出てくる名前が何を指すのかがわかります。PyTorch に移っても概念はそのままです。同じ部品を数百万〜数億個まで大きくし、1つの仕事の資料で学習させれば、要約・分類・振り分け(Router)のように実際に使われる XSLM になります。
答えがでたらめですが、失敗ですか?
違います。基本の学習20回は、すべての部品が実際につながって動くかを確かめる量です。この程度では確率がほぼ均等に広がっていて、文章はめちゃくちゃです。学習の損失が最初の値(約3.7)より下がり、チェックポイントを読んだ Runner が XChat に実際の生成結果を返せば、過程は完成です。品質を上げる実験は6・7段階で行います。
事前に学習されたモデルを受け取って使ってはだめですか?
この過程では受け取りません。受け取った重みはすでに計算し終えた結果なので、学習がどう数字を変えるのかが見えないからです。実際の開発では、公開されたモデルを受け取り、自分の資料で少し追加学習するファインチューニング(fine-tuning)をよく使います。XSLM で学んだ学習ループは、ファインチューニングにもそのまま使えます。
準備運動:バイグラムで単語を数える
実際の開発につながる計画
最初はおもちゃのように小さく作り、原理を理解してから少しずつ大きくしていきます。
文を集める
学びたいテーマの文章を集めます。最初は10文だけでも大丈夫です。
次の単語の回数を数える
ある単語の後にどの単語が何回出たかを表にまとめます。
確率スコアを計算する
選んだ単語のすぐ後に、どの単語が何回来たかを数えます。も1回として数えます。次に、それぞれの回数を合計で割ります。「空は」の後に「青い」が3回、「曇り」が1回来たなら、「青い」は 3 ÷ 4 = 75%、「曇り」は 25% です。
二つの選択方法を比べる
毎回いちばん高い候補を選ぶか()、割合どおりにくじを引きます()。くじ引きでも、同じ単語がまた出ることがあります。が選ばれたら止まります。このステップのどこにも、その文が本当かどうかを確かめる部分はありません。
自分の基準で改善する
より良い文章、より多くの、別の選択ルールを加えて、自分だけのに育てます。
はじめての方は、この手順でどうぞ
この実習では、すぐ前の単語1つだけを見る、とてもを作ります。どの単語のあとにどの単語が来たかを数え、その回数をに変えてから、重みのついたサイコロをふって次の単語を選びます。
- 学習用の文はそのままにして「もう一度生成」を押しましょう。学習用の文にある単語だけでできた、新しい文が出てきます。
- 確率の式を見ましょう。前の単語のあとに次の単語が来た回数を、前の単語が出た回数で割ったものが確率です。
- 回数の表では、行が前の単語、列が次の単語です。マスの色がこいほど、その組み合わせがよく出ています。
- 選択方法をに変えて、もう一度押しましょう。毎回同じ文が出ます。にもどしてを上げると、文がだんだんへんになります。
- 用の文に、自分の文を1つ足してみましょう。はこの回数がすべてなので、表と確率がすぐに変わります。
もっと知りたい方へ Pythonで自分で作る(AIコース) 次の単語はどうやって選ばれるの?
小さな確率計算機
開始文の最後の単語に続く候補がまだありません。
| 前の単語次の単語 | |
|---|---|
単語が多いため、最初の8個だけ表示します
核心となる概念
考え方はかんたんです。たくさんの文を読んで、どの単語のすぐ後にどの単語が来るかを数えます。文が終わるところも数に入れます。その回数が小さな表になり、この表だけでも、は次の単語を推測できます。このページで作るモデルは、まさにそれです。
本物のも同じ考え方で動いています。ただ、ずっと大きいのです。小さな回数の表の代わりに、例から何十億から何千億個もの数を学びます。これをと呼びます。そして直前の一つの単語だけでなく、質問全体とそれまでの会話を見ます。保存してある文を探して取り出しているわけでもありません。それでも最後のステップは、あなたが作るものと同じです。候補ごとに点数をつけて、一つを選びます。
この実習と実際の言語モデルの比較
| この実習() | ニューラル | |
|---|---|---|
| 見る範囲 | 直前の単語一つだけ | 与えられた長い |
| 学ぶもの | 続いた回数の表 | 数値の |
| ・ | いいえ | はい |
| 自分で事実を確認 | いいえ | いいえ |