機械学習

第13回: 言語と人工ニューラルネットワーク

千葉工業大学 上田 隆一


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

機械学習(と統計)第13回

今日やること

  • 機械学習での言葉の扱い方
  • Transformer
  • Transformerの応用例
機械学習(と統計)第13回

機械学習での言葉の扱い方

  • 単語の埋め込み
    • 各単語を数百〜数千次元のベクトルに置き換え
    • 近い単語は似たベクトルに(=内積の値を大きく)
      • 例(適当。上記のように次元はもっと必要)
        • おじさん
        • おばさん
        • 不動産
  • 埋め込むと類似度が内積で計算できる
    • 次元が大きいので様々な切り口で類似度を計算可能
  • これらのベクトルや、それらを作ることを「埋め込み」と呼んでいる (どうやって作るか考えてみましょう)
機械学習(と統計)第13回

埋め込みの方法(例: skip-gram)

  • word2vecというモデル群のなかのひとつ
  • 右図のような人工ニューラルネットワーク
    • ある単語について、任意の文の左右の単語前/後に単語がある確率を学習
  • 入力:
    • ある単語について、その単語に対応する要素がになったベクトル(one-hotベクトル)
    • 単語の種類だけ次元がある
  • 出力: の位置ごとに、入力と同じ次元のベクトルで、各単語が存在する確率を出力
これでどうやって埋め込みを作る?
機械学習(と統計)第13回

skip-gramで埋め込みを作る

  • 学習: 大量の文章からを学習
  • 学習済み行列=埋め込み
    • という行列
    • ある単語のone-hotベクトルを入力すると、が得られる
      これが埋め込みのベクトル
  • も使われることがある
機械学習(と統計)第13回

埋め込みができればコンピュータが文章を認識する?

・・・ことはできない

  • 最尤な単語をskip-gramで予想して並べていけばそれっぽい文は作れるけど、たぶん無意味な文ができる
  • 単純な埋め込みには限界
    • 語順に関する情報は、完全にはない
    • 文脈依存な情報を持っていない
      • 同音異義語に1つのベクトル区別してない
        • 例: チンチラ(げっ歯類にも猫にもいる)
どうしましょう?
写真上 by Guérin Nicolas(CC BY-SA 3.0) 写真下 by allen watkin(CC BY-SA 2.0)
機械学習(と統計)第13回

どうすればいいか?

  • 埋め込みに語順と文脈の情報を付加してやるとよい
    • 前ページのスライドを逆に考えると、そういうことになる
  • Transformer(のエンコーダ)
    • 入力: 埋め込みに位置情報を加えて変更したもの
    • 出力: 文脈化トークン埋め込み
      • 各単語の関係性(文脈)に応じて各ベクトルの位置を変更
      • 次の単語の予測などにより有用な埋め込み(使い方はあとで)

機械学習(と統計)第13回

Transformer

  • 翻訳のためにGoogleで開発された
  • 正体: 右のような構造のニューラルネットワーク(あとから細かく見ていきます)
    • GPT(Generative Pre-trained Transformer)などはこれの応用
    • その他言葉を扱うアプリケーションもだいたいこれの応用
  • 画像にも応用されている
    • ViT(Vision Transformer)

画像: CC-BY-4.0 by dvgodoy

機械学習(と統計)第13回

Transformerのエンコーダ: 入力

  • 入力: 文
    • トークン(単語をより細かく文を区切ったもの)
      に分けて、埋め込みのベクトルに変換
      • という行列に
  • 文への位置情報の付加(右図Positional Encoding)
    • 行列を作成
      • : ベクトルの次元(正規化のため)
      • にはトークンが文の何番目にあるかの情報が入る
        • 単純に「何番目か」ではなく三角関数を使ったややこしもの
とりあえずこれで入力に位置情報が加わる
機械学習(と統計)第13回

Transformerのエンコーダ: 文脈情報の付加1

  • 自己注意機構という仕組みで文脈の情報を付加
    • 行列という3つの行列を使う
      • これらの行列は学習の対象で、ここでは学習が済んでいると仮定
    • のなかのベクトルに対して次のベクトルを作成
      • (キー埋め込み)
      • (バリュー埋め込み)
      • (クエリ埋め込み)
    • 3つのベクトルを使う自己注意機構なので特に
      「キー・クエリ・バリュー注意機構」と呼ばれる方法(次のスライドに続く)
機械学習(と統計)第13回

Transformerのエンコーダ: 文脈情報の付加2

  • から、文脈を考慮した埋め込みベクトルを計算
    • 手順
      • 番目のトークンと番目のトークンの関連性の強さを次のように計算
        • (内積)
      • をソフトマックス関数で合計1に正規化
      • 次の番目のトークンの埋め込みベクトルとして出力
機械学習(と統計)第13回

Transformerのエンコーダ: 文脈情報の付加3

  • をフィードフォワード層に通す

    • このあと2層のニューラルネットワークを通ってさらに文脈が強化された文脈化トークン埋め込みに
  • 全体でという行列が出力される

機械学習(と統計)第13回

エンコーダの出力を使った翻訳

  • 問題の定式化: 条件付き確率の問題にする
    (例: 日本語から英語への翻訳)
    • 問題1: 先頭のトークンを選ぶ
      • 私 は 牛丼 を 食べ ます 。
    • 問題2: 2番目のトークンを選ぶ
      • 私 は 牛丼 を 食べ ます 。, I
    • 問題3: 3番目のトークンを選ぶ
      • 私 は 牛丼 を 食べ ます 。, I eat
  • Transformerのデコーダがこれを解く
    どうやって?
機械学習(と統計)第13回

デコーダ側の処理1

  • 自己注意機構で翻訳途中の文の文脈を埋め込みに反映
    • 途中の文なので計算のときに少し細工が必要だけど、
      エンコーダと同じ
機械学習(と統計)第13回

デコーダ側の処理2: 交差注意機構

  • もとの言語の文脈を翻訳中の文に持ち込む
    • クエリ埋め込みだけデコーダの埋め込みから計算
    • キー埋め込み、バリュー埋め込みは、エンコーダ側の出力から計算
機械学習(と統計)第13回

デコーダ側の処理3: 次の単語の出力

  • 全単語について次の単語になる確率を計算して、
    その確率が最も高いものを出力
    • 文脈がしっかり考慮されているので、かつての
      マルコフ連鎖ジェネレータのようにはならない
    • その文脈に最もふさわしい単語が出てくる
機械学習(と統計)第13回

Transformerの応用例

機械学習(と統計)第13回

GPT(Generative Pre-trained Transformer)

  • 途中の文から次の単語を予測
    • デコーダだけで構成
  • ChatGPTの一部に使われる

画像: CC0 (public domain)

機械学習(と統計)第13回

ChatGPT

  • GPTを使ってテキスト(人の質問や発言)に答える
    • (構造に関する決定的な文献なし)
機械学習(と統計)第13回

Vision Transformer (ViT)

  • Transformerを画像に転用
    • 画像をブロック状に切って単語のように扱う(右図)
    • 右図のCLS: クラストークン
      • 分類のためにくっつけるデータでこれを計算して出力する
  • 画像をブロック状に扱うのはCNNと同じだが、そのあとが違う
    • CNNは遠くのブロックの関係性を見るのが苦手

画像: CC-BY-4.0 by Daniel Voigt Godoy

機械学習(と統計)第13回

Contrastive Language-Image Pre-training (CLIP)

  • テキストと画像の関連性を学習したモデル(論文
  • 学習方法
    1. 画像と画像の内容を説明する文を準備
    2. ViTを使って画像をエンコーディング
    3. Transformerを使って文をエンコーディング
    4. エンコーディングされたデータ(埋め込み)同士の相関を学習
      画像から文、文から画像などの変換が可能
機械学習(と統計)第13回

Segment Anything

  • コードや説明
  • プロンプトの指示で画像から特定の部分を切り出す(セグメンテーション)
  • 画像のエンコードにはViTを使う
  • プロンプトのエンコードにはCLIPを使う
機械学習(と統計)第13回

Stable Diffusion

  • プロンプトを画像に変換
    • プロンプトから画像のタネを作るためにCLIPを利用
    • 画像を復元するときにも注意機構
機械学習(と統計)第13回

まとめ

  • Transformer
    • 埋め込みに文脈を反映させる仕組み
  • 埋め込み
    • 次元の高いベクトルで、単語やトークンの様々な関係性を表現可能
    • skip-gramなどの学習方法で実用性のある埋め込みが作成可能
    • ViTなどでは画像に対しても作られる
  • 埋め込みを使うと性質の異なるデータを交差注意機構で関連させることが可能
    • ある言語別の言語
    • 画像言語
機械学習(と統計)第13回