Skip to content

ClasCat® AI Research

クラスキャット – 生成 AI, AI エージェント, MCP

Menu
  • ホーム
    • ClassCat® AI Research ホーム
    • クラスキャット・ホーム
  • OpenAI API
    • OpenAI Python ライブラリ 1.x : 概要
    • OpenAI ブログ
      • GPT の紹介
      • GPT ストアの紹介
      • ChatGPT Team の紹介
    • OpenAI platform 1.x
      • Get Started : イントロダクション
      • Get Started : クイックスタート (Python)
      • Get Started : クイックスタート (Node.js)
      • Get Started : モデル
      • 機能 : 埋め込み
      • 機能 : 埋め込み (ユースケース)
      • ChatGPT : アクション – イントロダクション
      • ChatGPT : アクション – Getting started
      • ChatGPT : アクション – アクション認証
    • OpenAI ヘルプ : ChatGPT
      • ChatGPTとは何ですか?
      • ChatGPT は真実を語っていますか?
      • GPT の作成
      • GPT FAQ
      • GPT vs アシスタント
      • GPT ビルダー
    • OpenAI ヘルプ : ChatGPT > メモリ
      • FAQ
    • OpenAI ヘルプ : GPT ストア
      • 貴方の GPT をフィーチャーする
    • OpenAI Python ライブラリ 0.27 : 概要
    • OpenAI platform
      • Get Started : イントロダクション
      • Get Started : クイックスタート
      • Get Started : モデル
      • ガイド : GPT モデル
      • ガイド : 画像生成 (DALL·E)
      • ガイド : GPT-3.5 Turbo 対応 微調整
      • ガイド : 微調整 1.イントロダクション
      • ガイド : 微調整 2. データセットの準備 / ケーススタディ
      • ガイド : 埋め込み
      • ガイド : 音声テキスト変換
      • ガイド : モデレーション
      • ChatGPT プラグイン : イントロダクション
    • OpenAI Cookbook
      • 概要
      • API 使用方法 : レート制限の操作
      • API 使用方法 : tiktoken でトークンを数える方法
      • GPT : ChatGPT モデルへの入力をフォーマットする方法
      • GPT : 補完をストリームする方法
      • GPT : 大規模言語モデルを扱う方法
      • 埋め込み : 埋め込みの取得
      • GPT-3 の微調整 : 分類サンプルの微調整
      • DALL-E : DALL·E で 画像を生成して編集する方法
      • DALL·E と Segment Anything で動的マスクを作成する方法
      • Whisper プロンプティング・ガイド
  • Gemini API
    • Tutorials : クイックスタート with Python (1) テキスト-to-テキスト生成
    • (2) マルチモーダル入力 / 日本語チャット
    • (3) 埋め込みの使用
    • (4) 高度なユースケース
    • クイックスタート with Node.js
    • クイックスタート with Dart or Flutter (1) 日本語動作確認
    • Gemma
      • 概要 (README)
      • Tutorials : サンプリング
      • Tutorials : KerasNLP による Getting Started
  • Keras 3
    • 新しいマルチバックエンド Keras
    • Keras 3 について
    • Getting Started : エンジニアのための Keras 入門
    • Google Colab 上のインストールと Stable Diffusion デモ
    • コンピュータビジョン – ゼロからの画像分類
    • コンピュータビジョン – 単純な MNIST convnet
    • コンピュータビジョン – EfficientNet を使用した微調整による画像分類
    • コンピュータビジョン – Vision Transformer による画像分類
    • コンピュータビジョン – 最新の MLPモデルによる画像分類
    • コンピュータビジョン – コンパクトな畳込み Transformer
    • Keras Core
      • Keras Core 0.1
        • 新しいマルチバックエンド Keras (README)
        • Keras for TensorFlow, JAX, & PyTorch
        • 開発者ガイド : Getting started with Keras Core
        • 開発者ガイド : 関数型 API
        • 開発者ガイド : シーケンシャル・モデル
        • 開発者ガイド : サブクラス化で新しい層とモデルを作成する
        • 開発者ガイド : 独自のコールバックを書く
      • Keras Core 0.1.1 & 0.1.2 : リリースノート
      • 開発者ガイド
      • Code examples
      • Keras Stable Diffusion
        • 概要
        • 基本的な使い方 (テキスト-to-画像 / 画像-to-画像変換)
        • 混合精度のパフォーマンス
        • インペインティングの簡易アプリケーション
        • (参考) KerasCV – Stable Diffusion を使用した高性能画像生成
  • TensorFlow
    • TF 2 : 初級チュートリアル
    • TF 2 : 上級チュートリアル
    • TF 2 : ガイド
    • TF 1 : チュートリアル
    • TF 1 : ガイド
  • その他
    • 🦜️🔗 LangChain ドキュメント / ユースケース
    • Stable Diffusion WebUI
      • Google Colab で Stable Diffusion WebUI 入門
      • HuggingFace モデル / VAE の導入
      • LoRA の利用
    • Diffusion Models / 拡散モデル
  • クラスキャット
    • 会社案内
    • お問合せ
    • Facebook
    • ClassCat® Blog
Menu

LSTM ネットワークの理解 (翻訳/要約)

Posted on 03/17/2016 by Masashi Okumura

LSTM ネットワークの理解 (翻訳/要約)

* TensorFlow : コード解説 : RNN – リカレント・ニューラルネットワーク & LSTM で参照されている Understanding LSTM Networks の要約です。原文の図を参照しながらお読みください。

 

RNN – リカレント・ニューラルネットワーク

人間は刻々とゼロから思考を始めるわけではありません。この文書を読む時でも、前の単語の理解を元に各単語を理解しており、全てを捨ててゼロから再度考え始めるわけではありません。人間の思考には持続性があります。伝統的な NN はこれができません。大きな欠点です。例えば、映画の全てのポイントでどのような種類のイベントが起きているか分類することを望むとして、伝統的な NN が映画の前のイベントについての情報を後のイベントに伝えるための方法が判然としません。

RNN – リカレント・ニューラルネットワーク はこの問題を処理します。RNN はそれらの中にループを持つことで情報を持続することを可能にします。NN の塊 A がある入力 xt を見て値 ht を出力するとします。ループは情報がネットワークの一つのステップから次へ渡されることを可能にします。

これらのループは RNN を幾分神秘的にしていますが、普通の NN とそれほど違うわけではありません。RNN は個々が継承者にメッセージを渡す同じネットワークの複数のコピーとして考えられます。ループを展開して得られる、鎖状 (chain-like) の性質は RNN がシークエンスとリストに親密に関係することを示しています。これらはそのようなデータを使用するために自然なアーキテクチャです。

ここ2、3年で RNN を各種の問題に適用することについて大きな成功があります : 音声認識、言語モデリング、翻訳、画像キャプション …。RNN の成果についての議論は Andrej Karpathy のブログポスト – The Unreasonable Effectiveness of Recurrent Neural Networks に委ねますが、驚異的です。

これらの成功の本質は LSTM の使用にあります。これは RNN の特殊な種類ですが、多くのタスクに対して標準判よりも非常に上手く動作します。RNN 上の殆どの素晴らしい結果はこれによって達成されています。

 

Long-Term 依存の問題

RNN の主張の一つは、以前の情報を現在のタスクに結合できるということです。例えば、以前のビデオフレームの利用が現在のフレームの理解に情報を与えるというようにです。もし RNN がこれを行なうのであれば非常に有用ですが、本当にできるのでしょうか?それは場合によります。

時として現在のタスクを遂行するために最近の情報を見ることだけが必要となります。以前の単語をベースに次の単語を予測を試みる言語モデルを考えましょう。“the clouds are in the sky.” における最後の単語の予測を試みる場合、それ以上のコンテキスト情報は必要ありません – 次の単語が sky になることは明白です。

しかし更なるコンテキストが必要な場合もあります。テキスト “I grew up in France… I speak fluent French.” の最後の単語を予測する場合、 最近の情報が次の単語は言語名と提案します、しかしどの言語か狭めようとするならば、更に戻ったところから、フランス語のコンテキストが必要となります。関係情報とそれが必要なポイントのギャップが非常に大きくなる可能性があります。

残念ながらギャップが大きくなれば、RNN は情報を結合して学習することができなくなります。理論的には RNN はそのような “long-term 依存” を処理できますが、実践では RNN はそれらを学習できるようには見えません。

LSTM はこの問題がありません。

 

LSTM ネットワーク

Long Short Term Memory ネットワーク – 通常は LSTM と呼称 – は RNN の特別な種類で long-term 依存を学習することができます。LSTM は Hochreiter & Schmidhuber (1997) で導入されました。

LSTM は long-term 依存問題を回避するためにデザインされ、情報を長時間記憶しておくことがデフォルトの挙動です。

全ての RNN は NN の反復モジュールのチェイン形式を持ちます。標準的な RNN では、この反復モジュールは tanh 単層のような非常に単純な構造を持ちます。LSTM はまたチェイン状の構造を持ちますが、反復モジュールは異なる構造を持ちます。単一のニューラルネットワーク層を持つ代わりに、4つの NN 層があり、特殊な方法で相互作用します。

 

LSTM の背後の核心の考え

LSTM への鍵はセル状態 (cell state) で、セル状態はベルトコンベアのようなものです。幾つかの小さな線形作用だけを伴い鎖全体をストレートに走り抜けます。情報は変更されないままそれに沿って流れることは簡単です。

LSTM は情報を削除したりセル状態に追加したりする能力を持ち、ゲート と呼ばれる構造により注意深く統制されます。ゲートは選択的に情報を通り抜けさせる手段です。これらはシグモイド NN 層と単点の乗算演算から成ります。シグモイド層は 0 と1の間の数を出力し各コンポーネントのどれだけを通り抜けさせるかを記述します。0 の値は「何も通さない」を、1 の値は「全てを通す」を意味しています。

LSTM はセル状態を保護して制御するためにこれらゲートを3つ持ちます、

 

Step-by-Step LSTM ウォークスルー

LSTM の最初のステップはセル状態からどの情報を捨てるかを決めることです。この決定は「忘却ゲート層」と呼ばれるシグモイド層により行なわれます。それは \(h_{t-1}\) と \(x_t\) を見て、セル状態 \(C_{t-1}\) の各数値のために 0 と 1 の間を数値を出力します。1 は「完全に保持する」を表す一方で、0 は「完全にこれを除去する」を表します。

全ての前の単語をもとに次の単語の予測を試みる言語モデルの例に戻りましょう。そのような問題では、セル状態が現在の主語の性別を含むことにより正しい代名詞が使用できることになります。新しい主語を見る時には、古い主語の性別は忘れたいです。

次のステップはどのような新しい情報をセル状態にストアするかを決定します。これは2つの部分を持ちます。まず、「入力ゲート層」と呼ばれるシグモイド層がどの値を更新するか決めます。次に、状態に追加される可能性のある、新しい候補値のベクタ \(\tilde{C}_t\) を tanh 層が作成します。次のステップは、これら2つを結合して状態への更新を作成します。

言語モデルの例では、忘れようとしている古いものを置き換えるために、新しい主語の性別をセル状態に追加することを望んでいます。

そして今、古いセル状態 \(C_{t-1}\) を新しいセル状態 \(C_t\) に更新する時です。前のステップが既に何をするか決めているで、実際にそれを行なうだけです。

古い状態に \(f_t\) を乗算して、前に忘れると決めたことを忘れます。それから \(i_t*\tilde{C}_t\) を加算します。これは各状態値を更新すると決めた数によりスケールされた、新しい候補値です。

言語モデルの場合には、ここでは前のステップで決定したように、実際に古い主語の性別についての情報をドロップして新しい情報を追加します。

最後に、何を出力するかを決める必要があります。この出力はセル状態の基づきますが、フィルターされたバージョンになります。まず、シグモイド層を実行します、これはセル状態のどのパートを出力するかを決めます。それから、セル状態に(-1 と 1 の間に値を収めるために) \(\tanh\) を通してからシグモイド・ゲートの出力を乗算します、結果として決めたパートだけを出力します。

言語モデルの例で言えば、単に主語を見てからは、(次に来るのが動詞である場合には)動詞に関連した情報を出力したいかもしれません。例えば、主語が単数か複数かを出力するかもしれません、その結果、(次に来るとして)動詞がどのような形に活用すべきかを知ります。

 

Long Short Term Memory の変形 (Variants)

ここまで説明してきたものは通常の LSTM です。しかし全ての LSTM が上と同じというわけではありません。事実、LSTM を含む殆ど全ての論文は少し違ったバージョンを使用しています。違いは大きなものではありませんが、幾つかについては言及する価値があります。

Gers & Schmidhuber (2000) で紹介された、一つの有名な LSTM の変形は 「のぞき穴接続 (peephole connections)」を追加します。これはゲート層にセル状態を見させることを意味しています。

のぞき穴を全てのゲートに追加する場合もありますが、多くの論文では幾つかにのぞき穴を与え、他には与えません。

他のバリエーションはカップリングされた忘却と入力ゲートを使用します。何を忘れて新しい情報を何に追加すべきかを別々に決定する代わりに、それらの決定を一緒に行ないます。何かをその場所に入力する時にだけ忘れます。古い何かを忘れる時にだけ新しい値を状態に入力します。

少しばかりよりドラマチックな LSTM バリエーションは、Cho, et al. (2014) で紹介された GRU – Gated Recurrent Unit です。これは忘却と入力ゲートを単一の「更新ゲート (update gate)」に結合します。それはまたセル状態と隠れ状態をマージして、幾つかの他の変更を行ないます。結果としてのモデルは標準的な LSTM モデルよりも単純で、段々と一般的なものになってきています。

これらは最も有名な LSTM バリエーションの2、3に過ぎません。他にも Yao, et al. (2015) による Depth Gated RNNs のようなものがたくさんあります。また Koutnik, et al. (2014) による Clockwork RNN のような、long-term 依存にタックルするための完全に異なる幾つかのアプローチもあります。

これらのバリエーションのどれがベストでしょうか?違いは重要でしょうか?Greff, et al. (2015) は人気のあるバリエーションの良い比較を行ない、すべて大体同じあることを見出しています。 Jozefowicz, et al. (2015) は 10,000 以上の RNN アーキテクチャをテストし、あるタスクでは幾つかは LSTM よりも良く動作したとしています。

 

結論

LSTM は RNN で達成できることの中で大きなステップでした。他の大きなステップはあるのか? と疑問を抱くのは自然なことです。研究者の共通の意見は : 「はい!次のステップがありそれは『attention』です!」アイデアは、RNN の全てのステップに、情報のある大きなコレクションから、情報を見るために pick させることです。例えば、画像を説明するキャプションを作成するために RNN を使用している場合、それは出力する全ての単語のために、画像の一部を見るために pick するかもしれません。実際に、Xu, et al. (2015) は正確にこれを行なっています – attention を探検することを望むならば楽しい開始点かもしれません。attention を使用した本当にエキサイティングな結果が幾つかあり、角を曲がればより沢山ありそうです…

attention だけが RNN 研究における唯一のエキサイティングな話題ではありません。
例えば、Grid LSTMs by Kalchbrenner, et al. (2015) による Grid LSTM は特に有望に思われます。生成モデルにおいて RNN を使用したワーク – 例えば Gregor, et al. (2015), Chung, et al. (2015), あるいは Bayer & Osendorfer (2015) – はまた非常に興味深く見えます。

ここ2、3年は RNN にとってエキサイティングな時間でしたが、これからの2、3年もそうあるでしょう。

 

以上

クラスキャット

最近の投稿

  • LangGraph on Colab : マルチエージェント・スーパーバイザー
  • LangGraph on Colab : エージェント型 RAG
  • LangGraph : 例題 : エージェント型 RAG
  • LangGraph Platform : Get started : クイックスタート
  • LangGraph Platform : 概要

タグ

AutoGen (13) ClassCat Press Release (20) ClassCat TF/ONNX Hub (11) DGL 0.5 (14) Eager Execution (7) Edward (17) FLUX.1 (16) Gemini (20) HuggingFace Transformers 4.5 (10) HuggingFace Transformers 4.6 (7) HuggingFace Transformers 4.29 (9) Keras 2 Examples (98) Keras 2 Guide (16) Keras 3 (10) Keras Release Note (17) Kubeflow 1.0 (10) LangChain (45) LangGraph (23) MediaPipe 0.8 (11) Model Context Protocol (16) NNI 1.5 (16) OpenAI Agents SDK (8) OpenAI Cookbook (13) OpenAI platform (10) OpenAI platform 1.x (10) OpenAI ヘルプ (8) TensorFlow 2.0 Advanced Tutorials (33) TensorFlow 2.0 Advanced Tutorials (Alpha) (15) TensorFlow 2.0 Advanced Tutorials (Beta) (16) TensorFlow 2.0 Guide (10) TensorFlow 2.0 Guide (Alpha) (16) TensorFlow 2.0 Guide (Beta) (9) TensorFlow 2.0 Release Note (12) TensorFlow 2.0 Tutorials (20) TensorFlow 2.0 Tutorials (Alpha) (14) TensorFlow 2.0 Tutorials (Beta) (12) TensorFlow 2.4 Guide (24) TensorFlow Deploy (8) TensorFlow Get Started (7) TensorFlow Graphics (7) TensorFlow Probability (9) TensorFlow Programmer's Guide (22) TensorFlow Release Note (18) TensorFlow Tutorials (33) TF-Agents 0.4 (11)
2016年3月
月 火 水 木 金 土 日
 123456
78910111213
14151617181920
21222324252627
28293031  
« 2月   4月 »
© 2025 ClasCat® AI Research | Powered by Minimalist Blog WordPress Theme