← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:B(標準)

📎 前提:Transformer | 関連:主成分分析と次元削減(次元削減との対比)

要点(BLUF)


1. 表現学習とは

機械学習の性能は「どんな入力特徴を与えるか」でほぼ決まります。古典的には、人間がドメイン知識を使って特徴量を手で設計していました(画像なら SIFT/HOG、テキストなら TF-IDF、信号なら FFT のピークなど)。これを 特徴量エンジニアリング と呼びます。

表現学習(representation learning) は、この特徴設計そのものをデータから学習する立場です。生データ xx を、下流タスクに使いやすいベクトル h=fθ(x)h = f_\theta(x) に写す関数 fθf_\theta を、データから最適化します。

要するに:「どんな数字の並びで世界を見るか」を人間が決めるのではなく、データに決めさせる。

なぜ深層が表現学習に強いのか

深層ネットワークは層を重ねることで 階層的(hierarchical)な表現 を作れるからです。

各層が前の層の出力を組み合わせて、より抽象的な特徴を構成していきます。低次の特徴ほど多くのタスクで共通に使えるため、後述の転移学習が効く理由にもなります。

flowchart LR
    X["生データ x(画素・単語)"] --> L1["浅い層:エッジ・文字"]
    L1 --> L2["中間層:パーツ・句"]
    L2 --> L3["深い層:意味・概念"]
    L3 --> H["表現 h(特徴ベクトル)"]
    H --> T["下流タスク(分類など)"]

2. 埋め込み(embedding):離散を連続へ

埋め込み は、語彙やカテゴリのような離散シンボルを、低次元の密な実数ベクトルへ対応づける写像です。NLP の単語、推薦のアイテムID、カテゴリ変数などに広く使われます。

one-hot との対比(ここが本質)

語彙サイズ VV の単語を素朴に表すと one-hot ベクトル になります。ii 番目の単語は

ei=(0,,0,1i,0,,0)RVe_i = (0,\dots,0,\underbrace{1}_{i},0,\dots,0) \in \mathbb{R}^{V}

これには二つの致命的な弱点があります。

  1. 疎で高次元VV が数万〜数十万になり、ほぼ全成分が 0(次元の呪い)。
  2. 意味を持たない:任意の異なる単語 iji \ne j について eiej=0,eiej2=2e_i^\top e_j = 0,\qquad \|e_i - e_j\|^2 = 2 すべての単語ペアが等距離。「猫」と「犬」も「猫」と「微分」も同じ距離で、近さの情報がゼロです。

埋め込みはこれを、学習された行列 ERd×VE \in \mathbb{R}^{d \times V}dVd \ll V)で密ベクトルに移します。

vi=Eei=E:,iRd\mathbf{v}_i = E\, e_i = E_{:,i} \in \mathbb{R}^{d}

要するに:one-hot との掛け算は「埋め込み行列の ii 列目を取り出す」操作。埋め込み層はルックアップテーブルそのものです。

dd 次元(典型的に 100〜1000)の連続空間に置くことで、ベクトル間の距離・内積が意味の近さを表せるようになります。これが one-hot との決定的な差です。

one-hot埋め込み
次元語彙サイズ VV(巨大)dVd \ll V(小さい)
密度疎(1つだけ1)密(全成分が実数)
意味持たない(全ペア等距離)近い意味=近いベクトル
学習固定データから学習

3. word2vec:文脈から単語を学ぶ

word2vec(Mikolov ら, 2013)は、単語埋め込みを学ぶ代表的手法です。核にあるのは 分布仮説(distributional hypothesis):「ある単語の意味は、その周囲に現れる単語たち(文脈)で決まる」。よって文脈を予測するタスクを解かせれば、意味を反映した埋め込みが副産物として得られます。

word2vec には2つの構成があります。

flowchart TB
    subgraph SG["Skip-gram:中心語 → 文脈語"]
        C1["中心語"] --> P1["周辺語を予測"]
    end
    subgraph CB["CBOW:文脈語 → 中心語"]
        P2["周辺語の平均"] --> C2["中心語を予測"]
    end

Skip-gram の定式化

各単語に 中心語ベクトル vw\mathbf{v}_w文脈語ベクトル uw\mathbf{u}_w の2種類を持たせます。中心語 wcw_c が与えられたとき、文脈語 wow_o が出る確率を softmax で定義します。

P(wowc)=exp(uovc)iVexp(uivc)P(w_o \mid w_c) = \frac{\exp(\mathbf{u}_o^\top \mathbf{v}_c)}{\sum_{i \in \mathcal{V}} \exp(\mathbf{u}_i^\top \mathbf{v}_c)}

要するに:内積 uovc\mathbf{u}_o^\top \mathbf{v}_c が大きい(=方向が近い)単語ほど「文脈に来やすい」とみなす。共起しやすい単語どうしのベクトルが近づくよう押される。

長さ TT の文に対し、窓幅 mm の文脈ペアすべての負の対数尤度を最小化します。

L=t=1Tmjm,j0logP ⁣(w(t+j)w(t))\mathcal{L} = -\sum_{t=1}^{T} \sum_{-m \le j \le m,\, j \ne 0} \log P\!\left(w^{(t+j)} \mid w^{(t)}\right)

中心語ベクトルに関する勾配は次の形で、「正解の文脈語 uo\mathbf{u}_o」から「モデルが予測する文脈語の期待値」を引いた予測誤差になります(勾配降下の更新と同じ構造)。

logP(wowc)vc=uojVP(wjwc)uj\frac{\partial \log P(w_o \mid w_c)}{\partial \mathbf{v}_c} = \mathbf{u}_o - \sum_{j \in \mathcal{V}} P(w_j \mid w_c)\,\mathbf{u}_j

CBOW は逆向きで、周辺語ベクトルの平均 vˉo\bar{\mathbf{v}}_o から中心語を当てます。

P(wcWo)=exp(ucvˉo)iVexp(uivˉo)P(w_c \mid \mathcal{W}_o) = \frac{\exp(\mathbf{u}_c^\top \bar{\mathbf{v}}_o)}{\sum_{i \in \mathcal{V}} \exp(\mathbf{u}_i^\top \bar{\mathbf{v}}_o)}

ざっくり、Skip-gram は低頻度語・複雑な語に強く、CBOW は高頻度語で速い、という使い分けです。

負例サンプリング(softmax が重い問題への対処)

分母の和 iV\sum_{i \in \mathcal{V}} は語彙全体(数十万語)にわたるため、毎ステップ計算するのは非現実的です。そこで 負例サンプリング(negative sampling) を使い、「全語の分布を当てる多クラス問題」を「正しい共起ペアか、ランダムな雑音ペアかを見分ける二値分類」に置き換えます。Levy & Goldberg の整理では、最大化する目的は

logσ(uovc)+k=1KEwkPn[logσ(ukvc)]\log \sigma(\mathbf{u}_o^\top \mathbf{v}_c) + \sum_{k=1}^{K} \mathbb{E}_{w_k \sim P_n}\big[\log \sigma(-\mathbf{u}_k^\top \mathbf{v}_c)\big]

ここで σ\sigma はシグモイド、PnP_n は雑音分布、KK は負例数(数個〜十数個)。

要するに:「本物の文脈語との内積は大きく、ランダムに引いた無関係語との内積は小さく」を KK 個の負例だけで押す。全語を計算せず済むので一気に軽くなります(確率的勾配降下と同じ「全部見ずに近似」の発想)。


4. 埋め込み空間の性質:意味の幾何

word2vec の埋め込みの面白さは、意味の近さがベクトルの近さとして現れることです。類似度はふつうコサイン類似度で測ります。

cos(va,vb)=vavbvavb\cos(\mathbf{v}_a, \mathbf{v}_b) = \frac{\mathbf{v}_a^\top \mathbf{v}_b}{\|\mathbf{v}_a\|\,\|\mathbf{v}_b\|}

線形構造(アナロジー)

有名なのが king − man + woman ≈ queen。意味の差分がベクトルの差分として揃う、という現象です。

vkingvmanvqueenvwoman\mathbf{v}_{\text{king}} - \mathbf{v}_{\text{man}} \approx \mathbf{v}_{\text{queen}} - \mathbf{v}_{\text{woman}}

つまり「男→女」という変化が、どの語対でもほぼ同じ方向ベクトルになっている。これは「性別」という意味軸が空間内の一定方向として埋め込まれていることを示します。なぜ生じるかは共起統計の構造から説明されており、明示的にそう学習させたわけではない創発的な性質である点が重要です([1901.09813] が理論的整理)。

graph LR
    man["man"] -->|"性別の方向(→ 女性)"| woman["woman"]
    king["king"] -->|"同じ方向 ≈"| queen["queen"]

次元削減との関係

埋め込みは dd 次元(数百次元)なので直接は見えません。可視化には 次元削減 を使い、2〜3次元へ落として「近い意味が固まる」様子を確認します。

注意したいのは向きの違いです。PCA 等は「与えられたデータを低次元に映す」のに対し、埋め込み学習は「離散シンボルに意味ある座標を与える」。後者は次元削減の前段で、可視化はその座標を覗く手段です。


5. 事前学習と転移学習

考え方

flowchart LR
    D1["大規模データ"] --> PT["事前学習(汎用表現を獲得)"]
    PT --> W["学習済み重み θ"]
    W --> FE["特徴抽出(θを凍結+分類層だけ学習)"]
    W --> FT["ファインチューニング(θも追加学習)"]
    D2["小さな下流データ"] --> FE
    D2 --> FT
    FE --> TaskA["下流タスクA"]
    FT --> TaskB["下流タスクB"]

転用には二段階あります。

  1. 特徴抽出(feature extraction):事前学習の重みを凍結し、上に乗せた新しい分類層だけを学習。データが少ないときに過学習しにくい。
  2. ファインチューニング:上位層(時に全体)を解凍して下流データで更新。タスク固有の特徴まで適応でき、性能は高いがデータと計算を要する。

なぜ効くのか

事前学習で得た低次の汎用特徴を再利用(feature reuse)できるからです。エッジ・テクスチャ・基本的な構文といった特徴は多くのタスクで共通で、これらをゼロから学び直さずに済む。結果として、下流タスクは少ないデータ・短い学習で高精度に到達します。

要するに:良い初期値は「世界の見方の下地」。下地ができていれば、目的に合わせた微調整だけで済む。


6. 自己教師あり学習と文脈依存表現

word2vec が「人手ラベルなしで、文脈予測という擬似タスクから学ぶ」点に注目してください。これは 自己教師あり学習(self-supervised learning) の典型です。データ自身の一部を隠して当てさせる(next word / masked token / 一部画像の復元など)ことで、ラベルなしの大規模データから表現を引き出します。表現学習の現代的な主役です。

word2vec の限界は、各単語に固定の1ベクトルしか与えない点です。「bank(銀行)」と「bank(川岸)」が同じベクトルになってしまう。これを解決するのが 文脈依存表現(contextual embeddings) で、同じ単語でも周囲の文に応じて表現が変わります。

⚠️ 要最新確認:BERT 以降の事前学習・対照学習・文単位の埋め込みは進展が速い領域です。具体的なモデル名・SOTA・推奨手法は最新の文献で確認してください。詳細は 大規模言語モデル 目次 で扱います。


⚠️ よくある誤解・落とし穴


シミュレーション

simulations/word_embeddings.py:分布仮説「似た文脈に現れる単語は似た意味」に基づき、小コーパスの単語共起行列を SVD で低次元に圧縮して埋め込みを作ります。王室の単語どうし・動物の単語どうしが近くに集まり、コサイン類似度も同じ話題で高く(king-queen 0.71)違う話題で低い(king-cat 0.00)ことを可視化します。word2vec はこれをニューラルネットの周辺語予測として解いた発展形で、埋め込みは下流タスク(検索拡張生成)の入力に使われます。可視化は t-SNE/UMAP(カーネルPCAと多様体学習)。

共起+SVDで埋め込みが意味を捉える


まとめ


関連ノート