# The Unreasonable Effectiveness of Recurrent Neural Networks Navigation: [[index]] | [[_index|sources]] > [!info] 取り込み対象 > 30 papers の個別ページは本作を「文字レベルRNNを訓練し、多様な生成例によって獲得される構造を示す実践的な記事」と紹介する。静的HTMLから取得できる本文はメタデータに限られるため、内容の確認には [[Andrej Karpathy]] の[原典全文](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)を用いた。(Source: [[.raw/articles/30papers-unreasonable-effectiveness-of-rnns-2026-07-28.md]]) ## 概要 2015年に公開された、[[RNN]]と[[文字レベル言語モデル]]の仕組みを実装・生成例・内部状態の可視化を通じて説明する記事である。固定長ベクトル間を固定回数の計算で写像する通常のニューラルネットワークに対し、RNNは同じ状態遷移を反復して可変長の系列を扱う。記事の全実験はバニラRNNではなく多層[[LSTM]]で行われ、同時に再現用リポジトリ[[char-rnn]]と約100行のNumPy実装が公開された。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ## RNNを状態付きプログラムとして捉える RNNは入力ベクトル $x_t$ と直前の隠れ状態 $h_{t-1}$ から新しい状態を計算し、出力を生成する。バニラRNNの更新は次式で表される。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) $ h_t = \tanh(W_{hh}h_{t-1} + W_{xh}x_t), \qquad y_t = W_{hy}h_t $ この単一の遷移を必要な回数だけ適用できるため、固定長入力から固定長出力だけでなく、一対多、多対一、多対多、時刻同期した多対多を同じ枠組みで表現できる。入力自体が系列でなくても、画像の一部を順番に見る、キャンバスへ逐次描画するといった状態付き処理へ再定式化できる。Karpathyはこの性質を「通常のニューラルネットワークの訓練が関数の最適化なら、再帰型ネットワークの訓練はプログラムの最適化」と要約する。ただし、RNNのチューリング完全性は適切な重みが存在するという表現能力の主張であり、学習可能性を直接保証しないとも注意している。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ![[_attachments/30papers-unreasonable-effectiveness-of-rnns/fig01-sequence-modes.jpeg]] 固定長の一対一と、RNNによる一対多・多対一・多対多の系列処理を並べた図。赤が入力、緑が状態、青が出力を表す。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ## 文字レベル言語モデル モデルは過去の文字列を条件として次の1文字の確率分布を学習する。各文字を1-of-kベクトルとして時刻順に入力し、各出力へSoftmax交差エントロピー損失を適用する。同じ文字でも文脈によって次文字が異なるため、正解には再帰結合が保持する状態が必要である。記事ではミニバッチSGDとRMSPropまたはAdamを使い、推論時には出力分布から文字を標本化して次の入力へ戻す自己回帰生成を行う。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ![[_attachments/30papers-unreasonable-effectiveness-of-rnns/fig02-character-model.jpeg]] 文字列`hell`を入力したときの、入力層・隠れ層・次文字スコアの時刻展開。各時刻の正解文字を高くするよう逆伝播で重みを更新する。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) 生成時の温度を下げると分布が鋭くなり、保守的だが反復に陥りやすい。温度を上げると多様性が増す一方、綴りなどの誤りも増える。これは生成品質を単一の「正しさ」でなく、確実性と多様性のトレードオフとして制御する初期の明快な実例である。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ## 5種類のコーパスで現れた構造 記事は同じ次文字予測という目的関数を、構造の異なる5種類のテキストへ適用する。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) | コーパス | 規模・モデル | 観察 | |---|---|---| | Paul Grahamの随筆 | 約1MB、2層LSTM、各512ユニット、約350万パラメータ | 綴り、句読法、随筆らしい局所表現を獲得 | | Shakespeare全集 | 4.4MB、3層、各512ユニット | 話者名、台詞形式、韻文らしい改行を生成 | | Wikipedia | 100MBのうち先頭96MBを訓練 | 見出し、リンク、括弧、XMLの局所的入れ子構造を生成 | | 代数幾何のLaTeX | 16MB | ほぼコンパイル可能な外形を生成するが、環境の開閉不一致を残す | | Linuxソースコード | 474MB、3層、約1000万パラメータ | 字下げ、括弧、文字列、コメントは再現するが、未定義変数や型整合性を誤る | これらは、明示的な字句解析器や文法規則を与えなくても、次文字予測だけから局所構造が獲得されることを示す。一方、Wikipediaでは実在しないURLや人物を生成し、LaTeXでは`\begin{proof}`を`\end{lemma}`で閉じ、Cコードでは未定義変数や無意味な自己比較を使う。したがって「見た目がもっともらしい構文」と「意味的・長距離の整合性」は分けて評価する必要がある。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ## 学習の進行と内部状態 『戦争と平和』で100反復ごとに標本化すると、モデルはまず空白による単語境界を学び、次に句読法と短い頻出語、続いて長い単語を獲得し、複数語にまたがる話題や長距離依存はさらに遅れて現れた。これは次文字損失が同じでも、学習される規則に粗い段階性があることを示す観察である。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ![[_attachments/30papers-unreasonable-effectiveness-of-rnns/fig03-url-neuron.jpeg]] WikipediaモデルのあるLSTMセルは、URL内で強く活性化し、URL外で停止する。上段は正解文字と上位予測、色はセル活性を示す。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) 別のセルは`[[...]]`内外、引用符内外、行内位置、`www`の文字数などに対応した。Karpathyは、観察したセルの約5%に人が解釈しやすい挙動が見られたと報告する。ただし隠れ状態は高次元の分散表現であり、単一セルへの意味付けは探索的・定性的な解釈にとどまる。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ![[_attachments/30papers-unreasonable-effectiveness-of-rnns/fig04-quote-neuron.png]] 行内位置、引用符内、条件分岐内で活性化するセルと、解釈しにくいセルの比較。学習目的は次文字予測だけであり、これらの状態検知器は明示的に設計されていない。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ## 2015年時点の位置づけと後続 記事はRNNを音声認識、機械翻訳、手書き生成、画像・動画キャプション、視覚的注意、外部メモリへ広がる中心アーキテクチャとして位置づけ、特に注意機構を当時もっとも興味深い革新と評価した。同時に、バニラRNNは系列を記憶できても正しい規則へ帰納的に汎化するとは限らないこと、状態表現を大きくすると一時刻あたりの計算量が二次的に増えることを課題として挙げた。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) > [!note] 歴史的主張として読む > 「RNNが知的システムの普遍的かつ重要な構成要素になる」という結論は2015年時点の予測である。2018年のGPT-1ではTransformerがLSTMベースラインを平均5.6ポイント上回り、長距離依存を扱う主流アーキテクチャは変化した。一方、[[RNN]]を固定次元状態を反復更新する計算様式として見れば、線形注意や状態空間モデルへ継承された側面もある。(Source: [[@2018__OpenAI__Improving Language Understanding by Generative Pre-Training]], [[joisino-トランスフォーマーはRNN-2024]]) ## 再現資産 - [[char-rnn]]: 多層LSTMを訓練するTorch/Lua実装。MITライセンス。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) - [約100行のNumPy文字レベルRNN](https://gist.github.com/karpathy/d4dee566867f8291f086): バニラRNNの教育用最小実装。(Source: [Karpathy原典](https://karpathy.github.io/2015/05/21/rnn-effectiveness/)) ## 関連 - [[RNN]] — 状態遷移を反復する系列モデル - [[LSTM]] — 記事中の全生成実験で使われたゲート付きRNN - [[文字レベル言語モデル]] — 次文字予測による自己回帰生成 - [[言語モデル事前学習]] — 同じ自己回帰目的を大規模な表現学習と下流転移へ発展させた系譜 - [[Andrej Karpathy]] — 著者 - [[char-rnn]] — 記事と同時公開された再現用実装 ## 出典 - Raw: [[.raw/articles/30papers-unreasonable-effectiveness-of-rnns-2026-07-28.md]] - 30 papers: https://30papers.com/papers/unreasonable-effectiveness-of-rnns/ - 原典: https://karpathy.github.io/2015/05/21/rnn-effectiveness/