Up 例 : 「応答」 の学習 作成: 2025-06-13
更新: 2025-06-13


    「翻訳」の学習を見てきたが,これは「翻訳」を「応答」に置き換えても同じである。
    よって,「応答」を取り上げても重複になる。
    しかし,重複になることは,実際に見てわかることである。
    そして翻訳の場合は,入力文と出力文が同型に近くなるが,この「同型」が何か要点であるかのように,誤解されるかも知れない。
    そこで,「応答」の場合で,学習方法を改めて確認しておくことにする。


    入力文 (質問) : 「日本の軍事力を具体的数値を用いてある程度詳しく教えて」
    出力文 (応答) : 「日本の自衛隊は ‥‥ 」

    トークン/サブワード分割し,対応するトークンベクトルに位置エンコーディングを加算したものを:
      入力文 → X
      出力文 → Y = ( y_1, y_2, y_3, y_4, y_5,, y_6, ‥‥ )
        = ( "日本", "の", "自", "衛", "隊", "は", ‥‥ )

    そして,
      H^(0) = ( X, <BOS> )
      H^(1) = ( X, <BOS>, "日本" )
      H^(2) = ( X, <BOS>, "日本", "の" )
      H^(3) = ( X, <BOS>, "日本", "の", "自" )
      H^(4) = ( X, <BOS>, "日本", "の", "自", "衛" )
      H^(5) = ( X, <BOS>, "日本", "の", "自", "衛", "隊" )
      H^(6) = ( X, <BOS>, "日本", "の", "自", "衛", "隊", "は" )
       ‥‥‥‥

    以下,k : 2 → 3 の場合を示す:

    (1) H^(2) を TV にとってのテクストにする
      Self-Attention:
       Q = H^(2) W_Q
       K = H^(2) W_K
       V = H^(2) W_V
      Z = softmax( Q K^T /√D ) V

    (2) FFN + 残差接続 + LayerNorm
       通常の全結合層を通して情報変換を行い,LayerNormなどで安定化。

    (3) (1), (2) をレイヤーの数だけ繰り返す
      最終出力を O とする。

    (4) 誤差(得失)計算
      logits = W_O O^T
      p = softmax( logits )
      正解表 true と照合して誤差を計算:
      loss = cross_entropy ( p, true )

    (5) 誤差逆伝播
       トークンベクトル,重み行列 W_Q, W_K, W_V, W_O 等を調整・更新。


    ちなみに,通説は《1トークン/サブワードずつ加える》を「連想ゲーム」だと説明する。
    上の k : 2 → 3 だと,通説はつぎのように言う:
      「 "の" の次は,意味の確率分布により,"自" がくる」
    これは,「まったくのナンセンス」の類の間違いであ。
    学習アルゴリズムのどこにも「連想ゲーム」は存在していないし,意味の確率分布で "の" の次が "自" であるはずもない。