自然言語処理

GRU じーあーるゆー

GRUGated Recurrent UnitLSTMRNNゲート機構系列モデル
GRUについて教えて

簡単に言うとこんな感じ!

GRUは「LSTMの軽量版」だよ!LSTMが3つのゲートとセル状態で複雑なのに対し、GRUはゲートを2つにまとめてシンプルにしたんだ。多くのタスクでLSTMと同等の精度が出るのに計算が速いから、「とりあえずLSTMとGRUを試して精度と速度を比べよう」がよくあるアプローチだよ!


GRUとは

GRU(Gated Recurrent Unit:ゲート付き再帰ユニット) は、2014年にChoらが提案したLSTMを簡略化したRNNのバリアントです。LSTMの「忘却ゲート・入力ゲート・出力ゲート」とセル状態の4つの構造を、「リセットゲート・更新ゲート」の2つのゲートと隠れ状態のみに簡略化しました。

GRUがLSTMより優れている点はパラメータ数が少なく学習が速いことです。一方でLSTMが優れている点はより長い依存関係の保持能力と表現力です。実際のベンチマークでは多くのタスクでGRUとLSTMの精度差が小さく、計算コストを重視するならGRUが有利な場面が多いです。


GRUのゲート機構

ゲート計算式役割
リセットゲート(r_t)r_t = σ(W_r × [h_{t-1}, x_t])過去の記憶をどのくらい「リセット」するか
更新ゲート(z_t)z_t = σ(W_z × [h_{t-1}, x_t])過去と新しい情報をどのくらいブレンドするか
候補隠れ状態h̃_t = tanh(W × [r_t × h_{t-1}, x_t])新しい情報を表現
隠れ状態の更新h_t = (1−z_t) × h_{t-1} + z_t × h̃_t最終的な隠れ状態
import torch.nn as nn

# PyTorchでのGRU
gru = nn.GRU(
    input_size=128,
    hidden_size=256,
    num_layers=2,
    batch_first=True,
    dropout=0.3,
    bidirectional=False  # Trueで双方向GRUに
)

output, h_n = gru(x)  # LSTMと違いセル状態がない

歴史と背景

  • 2014年:Choらが機械翻訳のSea2Seq論文でGRUを提案
  • 2014〜2015年:GRUはLSTMと精度を比較する論文が多数発表。多くのタスクで同等と確認
  • 2017年以降Transformerが台頭するが、GRUは軽量な用途で引き続き使用
  • 現在:エッジデバイス・組み込み・時系列データの処理で利用が継続

LSTM vs GRU の比較

項目LSTMGRU
ゲート数3つ(Forget, Input, Output)2つ(Reset, Update)
隠れ状態h_t + セル状態 c_th_t のみ
パラメータ数多い少ない(LSTMの約75%)
計算コスト高め低め
長期依存関係高いやや低い
実用精度タスク依存多くの場合LSTM同等

関連用語