このページは、単純 RNN を読むうえでよく出る トークン/埋め込み (x_t)/隠れ状態 (h_t)/学習データ/文字列出力 を、初学者向けにまとめた補足です。式の入口は 単純リカレントと誤差逆伝播とは、ChatGPT 的な大規模学習の流れは 事前学習とファインチューニング を参照してください。
ざっくりいうと
- トークン … 系列を1ステップずつ切った 離散記号(単語・文字・サブワードなど。切り方は設計次第)。
- (x_t) … トークン ID から取る 埋め込み(意味空間に近い 語のベクトル)。
- (h_t) … ここまで読んだ文脈 を押し込んだ 隠れ状態空間 のベクトル(語彙の1語そのものではない)。
- 学習 … タスクにより 次トークン・ラベル・入出力列 など;必ずしも「プロンプトと回答のペア」だけではない。
- ユーザーへの返答 … (h) から直接文が出るのではなく、出力層 → トークン1個ずつ生成 → デコード(EOS や最大長で停止)。
トークンと「左から1つずつ」
1つずつとは、コンピュータが 先頭から順に、各ステップで要素1個だけ を入力として渡すことです(人間が1文字しか読めない、という意味ではない)。
| 切り方 | 1ステップの例 |
|---|---|
| 単語 | 「私」「は」「猫」 |
| 文字 | 各文字 |
| サブワード(現代の LLM で多い) | 語の一部のまとまり |
1980〜90年代の説明では 単語=1ステップ の例が多い。考え方(ID → ベクトル → (h) を更新)は同じで、切る粒度だけ時代で変わる。
2種類のベクトル(混同しやすい点)
| (x_t)(埋め込み) | (h_t)(隠れ状態) | |
|---|---|---|
| 何か | いまの 1トークン | 1〜(t) まで の要約 |
| どこから | 語彙表の行(ID → 取り出し) | (h_t = f(W h_{t-1} + U x_t + b)) の 計算結果 |
| 空間のイメージ | 意味空間(埋め込み空間) | 隠れ状態空間(状態空間) |
| BoW との比較 | 1語ぶん | 文全体を1本にした BoW に 役割は近い が、次元の意味は人間が設計しない |
(h_t) は「複合ベクトル」 … 語彙のある単語の点ではなく、過去と今を混ぜた別の表現。1本のベクトルでも 複数トークンの影響が数字の混ざりとして 入る(人間が読める文ではない)。
式の目的((W, U, b) の前に)
[ h_t = f(W h_{t-1} + U x_t + b) ]
の 目的は、順番付きデータを読みながら、固定長のメモ (h_t) を更新する ことです。
- (W h_{t-1}) … 過去メモを隠れ層の形に変換
- (U x_t) … いまのトークンを 同じ長さ に変換してから足す
- (b) … バイアス(共通のオフセット)
- (f) … 非線形化(表現力のため)
メモの保管場所 … ファイルではなく、計算中の RAM 上のテンソル。文が変われば多くは (h_0) からやり直す。長く残るのは (W, U, b) などの重み。
各ステップで行うこと
- トークン ID → 埋め込み (x_t)
- (h_{t-1}) を読む(1ステップ目は (h_0)=初期メモ)
- 上式で (h_t) を更新
- タスクに応じて (h_t) から予測(毎ステップか最後だけかは 設計で決める)
- (h_t) を次ステップへ渡す
要約 … 人間が段落を書き直すのではなく、有限次元の (h_t) に圧縮し直す 操作。目的は主に 固定長メモで文脈付き計算を続ける こと(データ量削減だけが目的ではない)。遠い過去・細部・タスクに不要な情報は落ちやすい(勾配消失など)。
学習データは「プロンプトと回答」だけか
| 型 | データ | 正解(教師信号) |
|---|---|---|
| 次トークン予測 | 文章1本 | 文中の次のトークン(ペアを別に用意しなくてよい) |
| 系列分類 | 文 + ラベル | ラベル |
| seq2seq | 入力列 + 出力列 | 出力側のトークン列 |
| 指示チューニング(後の LLM) | 指示 + 望ましい返答 | 返答のトークン列 |
回答のないプロンプトだけ では、「この質問にはこの返答」という 対応は学べない。一方、テキストだけ なら 次トークン予測 で学習できる(正解は文中に含まれる)。このときも学習の中身は 誤差逆伝播(系列なら BPTT) である(単純リカレントと誤差逆伝播とは の「誤差逆伝播はプロンプトと回答ペア専用か」)。
文字列としてユーザーに返すには
(h_t) は 中間メモ。返答文はだいたい次の流れです。
- (h_t)(または最後の (h_T))→ 出力層 → 語彙サイズのスコア(softmax)
- トークン ID を1個 選ぶ
- デトークナイズして文字列の一片にする
- 長い回答 は上記を 自己回帰(選んだトークンを次の入力に)で繰り返す
最終 (h) から次トークンを出せる理由 … 学習で 出力層が (h) を語彙スコアに写す 対応が付くから(魔法ではなく学習済みの写像)。
いつ生成を止めるか
| 方法 | 内容 |
|---|---|
| EOS(終了トークン) | 学習データの 系列の終端 に合わせて学ぶ。多くは文・発話の終わりで出しやすい |
| 最大長 | トークン上限で強制停止(途中で切れたように見える 原因のひとつ) |
| 停止文字列など | 実装依存 |
EOS で区切りが良い ≠ ユーザーにとってタスクが完了 … EOS は トークン列の終端 の印であり、「質問に十分答えた」ことの保証ではない(指示・対話とアライメント で振る舞いを別途寄せる)。