ここ数週間、私は PyTorch で char-rnn のバージョンを実装することに多くの時間を費やしてきました。これまでニューラル ネットワークをトレーニングしたことがないので、ここから始めるのが面白いかもしれません。 このアイデア (The Unreasonable Effects of RNNs より) を使用すると、文字ベースのリカレント ニューラル ネットワーク (RNN) をテキストでトレーニングし、驚くほど優れた結果を得ることができます。
しかし、望んでいた結果は得られなかったものの、PyTorch と RNN の実験を始めようとしている他の人たちに役立つことを願って、いくつかのサンプル コードと結果を共有したいと思いました。 以下は Jupyter ノートブック形式のコードです: PyTorch.ipynb の char-rnn 。この Web ページの上部にある [Colab で開く] ボタンをクリックすると、Google の Colab サービスで開き、トレーニングに無料の GPU を使用できます。全部で約 75 行のコードですが、このブログ投稿でできる限り詳しく説明します。 ステップ1: データを準備する まず、データをダウンロードする必要があります。私はプロジェクト・グーテンベルクのハンス・クリスチャン・アンデルセン童話のデータを使用しました。
これはデータを準備するためのコードです。データ処理には fastai ライブラリの Vocab クラスを使用しました。このクラスは、一連の文字を「語彙」に変換し、この「語彙」を使用して文字を数字に変換します。 次に、モデルのトレーニングに使用できる大きな数値配列 ( training_set ) を作成します。
ステップ2: モデルを定義する これは、PyTorch の LSTM クラスのラッパーです。 LSTM クラスをカプセル化するだけでなく、次の 3 つのことを行います。
このコードも魔法のようなことを行いますが、それほど明白ではありません。入力が 6 つの文字に対応するベクトル (例: [1,2,3,4,5,6]) である場合、nn.LSTM は時間の経過に伴うバックプロパゲーションを使用して内部的に隠しベクトルを 6 回更新するというのが私の理解です。 ステップ3: トレーニングコードを書く モデルは自動的にトレーニングされません。 最初は fastai ライブラリ (PyTorch のラッパーでもある) のヘルパー クラスを使用してみました。何をしているのか全くわからなかったので少し混乱しましたが、結局モデルのトレーニング コードを自分で書くことになりました。 以下のコード (epoch() メソッド) は、1 ラウンドのトレーニング プロセスに関する基本情報です。基本的には、以下のことを繰り返します。
nn.LSTMを使用して時間経過に沿ってバックプロパゲートし、独自のコードを書かないでください。 まず、次のように、一度に 1 文字ずつ LSTM レイヤーに渡し、定期的に導関数を計算する独自のコードを書きました。
このコードは 20 文字を 1 文字ずつ渡し、最後に 1 回トレーニングします。このステップは時間によるバックプロパゲーションと呼ばれ、Karpathy がブログ記事で使用しているものです。 この方法は、ある程度は役に立ちます。私が書いた損失関数は、最初はしばらく減少しますが、その後ピークに達します。なぜこのようなことが起こったのかは分かりませんが、LSTM に 20 文字ずつ (seq_len 次元に応じて) 渡してバックプロパゲーションするように変更したところ、状況は改善しました。 ステップ 4: モデルをトレーニングします。 モデルが英語のようなテキストを出力し始めるまで、同じデータに対してこのトレーニング コードを約 300 回繰り返しました。約1時間かかりました。 この場合、モデルが過剰適合しているかどうかは気にしませんが、実際のシナリオでモデルをトレーニングする場合は、検証セットでモデルを検証する必要があります。 ステップ 5: 出力を生成します。 最後に、このモデルを使用して出力を生成します。このトレーニング済みモデルからテキストを生成するヘルパー メソッド (make_preds と next_pred) を作成しました。ここで重要なのは、ベクトルの次元を揃えることです。重要な点は次のとおりです。
基本的に私たちが行うことは次のとおりです。
処理するテキストの長さが 300 の場合、このプロセスを 300 回繰り返すだけで済みます。 結果! 予測関数のパラメータを温度 = 1 に設定し、モデルによって次の結果が生成されました。これは英語に少し似ていますが、モデルが英語を最初から「学習」し、文字シーケンスのレベルで学習していることを考えると、かなり良い結果です。 これらの単語には意味がありませんが、どのような出力が欲しいのかわかりません。
以下の結果は、temperature=0.1 の場合に生成されます。これは、「毎回最も高い確率の文字を選択する」方法に近い方法で文字を選択します。その結果、出力に多くの重複が生じます。
この出力には、甲虫、菓子職人、太陽、海という単語に対する奇妙な執着があります。 まとめます! これまでのところ、私の結果は Karpathy ほど良くありませんが、おそらくいくつかの理由があります。
しかし、概ね合格点の結果が出ました! 悪くないですね! |
<<: 人工知能はどれくらい怖いのでしょうか?アメリカはAI兵器を開発し、イランの科学者は死亡した
>>: 無料の Python 機械学習コース 1: 線形回帰アルゴリズム
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
要点: 1. 自動車会社が独自の自動運転システムを開発することがトレンドとなっている。 2. MBD...
最近、「2021 JD全国大学生アルゴリズム設計・プログラミングエリートコンテスト-コードの無限の想...
インテリジェントロボットはインテリジェント製品の代表的なものです。知能ロボットには、少なくとも以下の...
[51CTO.com クイック翻訳] 人工ニューラル ネットワークには、ネットワークのアーキテクチャ...
多くの企業のセキュリティ運用センター チームにとって、サイバー攻撃に対する防御は、ますます高度化する...
多くの関係者は、AI が「悪」の力にもなり得るという事実を受け入れ始めています。関連する海外メディア...
現在、生体認証技術は比較的成熟しており、さまざまな応用シナリオがあります。国内の生体認証市場全体は、...
ディープラーニングの研究者は、神経科学と認知科学からインスピレーションを得ています。隠れユニットや入...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
近年、OpenAI の GPT-3 などの大規模言語モデル (LLM) は、人工知能の分野で大きな進...