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

Recurrent Neural Networks (1) – RNN への序説 (翻訳/要約)

Posted on 03/17/2016 by Masashi Okumura

Recurrent Neural Networks (1) – RNN への序説 (翻訳/要約)

* Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs の簡単な要約です。
* 原文の図を参照しながらお読みください。

 
本文

チュートリアルの一部として RNN ベースの言語モデルを実装します。言語モデルのアプリケーションは2つの fold を持ちます : 最初に、現実世界で起きることの尤もらしさをベースに任意の文に点数をつけることを可能にします。これは文法的、意味的な正確性の尺度を提供します。そのようなモデルは典型的には機械翻訳システムの一部として使用されます。2つ目に、言語モデルは新しいテキストの生成を可能にします。(よりクールなアプリケーションでしょう。)Shakespeare 上で言語モデルを訓練すれば Shakespeare ライクなテキストの生成を可能にします。Andrej Karpathy による 興味深い投稿 (要約)は RNN ベースの文字レベル言語モデルが何ができるかを示しています。

基本的な NN にある程度慣れていることを仮定しています。そうでないなら、Implementing A Neural Network From Scratch へ進むことを望むかもしれません、これは Non-RNN の背後のアイデアや実装を紹介ます。

 

RNN とは何か?

RNN の背後のアイデアはシーケンシャル情報を利用することです。伝統的な NN では全ての入力(そして出力)は互いに独立です。しかしそれは多くのタスクに対しては非常に悪い考えです。文で次の単語を予測したければその前にどの単語が来たか知る方が良いでしょう。RNN は “recurrent (再発的・周期的)” と呼ばれますが、これはシークエンスの全ての要素に対して(前の計算に依存する出力とともに)同じタスクを遂行するからです。RNN について考える他の方法はそれが “メモリ” を持つことです、これはそれまでに何が計算されたかについての情報を捕捉します。理論的には RNN は任意の長さのシーケンスの情報を利用できますが、しかし実践的には 2, 3 ステップ(後でそれ以上)を look back することに制限されます。典型的な RNN がどのように見えるかをここに示します : (図/省略)

上の図は RNN がフル・ネットワークに展開される (unrolled, unfolded) ことを示しています。この展開は、完全なシーケンスのためのネットワークを書き出していることを単に意味しています。例えば、気にかけるシーケンスが5つの単語の文の場合、ネットワークは 5-層 NN に展開されます、各単語のために 1 層です。RNN で起きる計算を統治する数式は以下のようなものです :

  • x_t はタイム・ステップ t における入力です。例えば、x_1 は文の2番目の単語に相当する one-hot ベクトルです。
  • s_t はタイム・ステップ t における隠れ状態 (hidden state) です。これはネットワークの「メモリ」です。
    s_t は前の隠れ状態と現在のステップの入力をベースに計算されます : s_t=f(Ux_t + Ws_{t-1})。
    関数 f は通常は tanh あるいは ReLU のような非線形性です。
    s_{-1}、これは最初の隠れ状態の計算に必要ですが、典型的には全て 0 に初期化されます。
  • o_t はステップ t における出力です。例えば、文の次の単語を予測することを望む場合、それは確率のベクトルになります。 o_t = \mathrm{softmax}(Vs_t).

ここで2、3の注意すべき点があります :

  • 隠れ状態 s_t はネットワークのメモリとして考えて良いです。s_t は全ての前の時間ステップにおいて発生したことについての情報を捕捉します。ステップ o_t における出力は時間 t におけるメモリをベースに単独で計算されます。簡単に上述したように、実践ではもう少し複雑です、何故ならば s_t は通常は非常に多くの過去の時間ステップから情報を捕捉することはできないからです。
  • 各層で異なるパラメータを使用する伝統的な DNN と違って、RNN は同じパラメータ ((U, V, W) を全てのステップに渡り共有します。これは各ステップで同じタスクを、異なる入力だけで、遂行しているという事実を反映しています。これは学習しなければならないパラメータの総数を大きく減らします。
  • 上図は各時間ステップで出力を持ちますが、タスクによってはこれは必要ないかもしれません。例えば、文の感情を予測する時、各単語の後の感情ではなくて、最終的な出力のみに注意を払うかもしれません。同様に、各時間ステップで入力は必要ないかもしれません。RNN の主要な特徴はその隠れ状態にあります、これはシーケンスについての幾つかの情報を捕捉します。
 

RNN は何ができるか?

RNN は多くの NLP タスクで大きな成功を見せてきました。ここで RNN の最も共通的に使用されるタイプは LSTM であることに言及すべきでしょう。これは long-term 依存を捕捉する点で vanilla RNN よりも遥に優れています。しかし心配しないでください、LSTM は本質的にはこのチュートリアルで開発るる RNN と同じものです、それらは隠れ状態の異なる計算方法を持つだけです。

ここで NLP における RNN の幾つかの例となるアプリケーションを示します。

言語モデルとテキスト生成

単語のシーケンスが与えられた時、前の単語群が与えられた時の各単語の確率を予測したいです。言語モデルは文の尤もらしさを計測することを可能にし、これは機械翻訳のための重要な入力となります。(何故なら高い確率の文は典型的には正しいからです。)次の単語を予測することができる副次的効果は生成モデルを得られることです、これは出力確率からのサンプリングによる新しいテキストの生成を可能にします。そして訓練データに依存して あらゆるもの が生成できます。 言語モデルでは入力は典型的には(例えば one-hot ベクトルとしてエンコードされた)単語のシーケンスで、出力は予測された単語のシーケンスです。ネットワークを訓練する時には o_t = x_{t+1} とします、何故ならステップ t における出力を実際の次の単語として望むからです。

言語モデルとテキスト生成についての研究論文です :

  • Recurrent neural network based language model
  • Extensions of Recurrent neural network based language model
  • Generating Text with Recurrent Neural Networks

機械翻訳

機械学習は、入力がソース言語(例えばドイツ語)における単語のシーケンスである、という言語モデルと同様です。ターゲット言語(例えば英語)における単語のシーケンスを出力することを望みます。鍵となる違いは、出力が完全な入力を見た後でのみ始まることです。何故なら訳文の最初の単語は完全な入力文から捕捉された情報を必要とするかもしれないからです。

機械翻訳についての研究論文です :

  • A Recursive Recurrent Neural Network for Statistical Machine Translation
  • Sequence to Sequence Learning with Neural Networks
  • Joint Language and Translation Modeling with Recurrent Neural Networks

音声認識

音波からの音響信号の入力シーケンスが与えられた時、音声セグメント (phonetic segments) を確率と一緒に予測できます。

音声認識についての研究論文です :

  • Towards End-to-End Speech Recognition with Recurrent Neural Networks

画像説明(文)を生成する

畳み込み NN と一緒に、RNN は unlabeled 画像のための generate descriptions へのモデルの一部として使用されています。これがどれほど上手く動作しているか驚異的です。combined モデルは、画像で見られる特徴と生成された単語を連携させる (align) ことさえします。

 

RNN を訓練する

RNN の訓練は伝統的な NN の訓練と同様です。backpropagation アルゴリズムもまた使いますが、少し捻っています。パラメータがネットワークの全ての時間ステップで共有されますので、各出力の勾配は現在の時間ステップの計算上だけではなく、前のステップにも依存します。例えば、t=4 における勾配を計算するためには 3 ステップを backpropagate して勾配を加算する必要があるでしょう。これは BPTT – Backpropagation Through Time と呼ばれます。今のところ、BPTT で訓練された vanilla RNN は long-term 依存(= 遠く離れたステップ間の依存)を学習するには、勾配消失/発散問題 (vanishing/exploding gradient problem) と呼ばれるもののために 困難を持つ という事実を知っておいてください。これらの問題を扱うために幾つかの機械が存在して、(LSTM のような)あるタイプの RNN がこれを回避するために特に設計されました。

 

RNN 拡張

何年もの間、vanilla RNN モデルの欠点の幾つかに対処するために、研究者は RNN のより洗練されたタイプを開発してきました。この章はモデルの分類に慣れるように簡単な概要を提供します。

Bidirectional RNN は時間 t における出力がシーケンスの前の要素だけではなく、未来の要素にも依存するというアイデアをベースにしています。例えば、文の欠けた単語を予測するためには左側と右側のコンテキストを見たいでしょう。Bidirectional RNN は非常に単純です。それらは互いのトップに積み重ねた、単に2つの RNN です。そして出力は両方の RNN の隠れ状態をベースにして計算されます。

Deep (Bidirectional) RNN は Bidirectional RNN と同様ですが、時間ステップ毎に多層を持ちます。実際にこれはより高い学習キャパシティを与えてくれます。(しかしまた沢山の訓練データが必要になりますが。)

LSTM ネットワーク は最近極めて人気があり上でも簡単に話題にしました。LSTM は基本的には RNN と違うアーキテクチャを持つわけではありませんが、隠れ状態を計算するために異なる関数を使用します。LSTM のメモリはセルと呼ばれ、それらを、入力として前の状態 h_{t-1} と現在の入力 x_t を取るブラックボックスと考えることができます。内部的にはこれらのセルは何をメモリに保持するか(そしてそこから何を消すか)を決めます。そしてそれらは前の状態、現在のメモリ、そして入力を結合します。これらのタイプのユニットは long-term 依存を捕捉するために非常に効率的であることが分かっています。

 

以上

クラスキャット

最近の投稿

  • LangGraph : 例題 : エージェント型 RAG
  • LangGraph Platform : Get started : クイックスタート
  • LangGraph Platform : 概要
  • LangGraph : Prebuilt エージェント : ユーザインターフェイス
  • LangGraph : Prebuilt エージェント : 配備

タグ

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 (21) 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