ここ数週間、私は 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: 線形回帰アルゴリズム
じっとしていられないアンドレイ・カルパティに新しいプロジェクトが! OpenAIはここ数日、非常に忙...
頭に貼るビジョンプロは人から人へと広がっています。これがロンドンの街の最新風景です。 「刺激が欲しけ...
業界最先端の大型モデルが一斉に「脱獄」! GPT-4 だけでなく、通常はそれほど間違いを起こさない ...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
RPA(ロボティック・プロセス・オートメーション)業界のリーダーであるオートメーション・エニウェアは...
著者: Qianshan校正:ウー・ムーテクノロジーの進歩により、AIは大きな発展の可能性を示してい...
11月2日、市場調査会社IDCが発表した最新の予測レポートによると、世界のAIソフトウェア市場規模...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
不確実性が人間関係を形作ります。感染症は、かつては直線的でスムーズで予測可能だった社会を予期せぬ形で...
超高速かつメモリを節約するアテンション アルゴリズム FlashAttention の人気を受けて、...
まずいくつか質問させてください。ビッグデータとは何でしょうか?人工知能とは何ですか?モノのインターネ...
[[205151]] 1. 問題の説明画像認識や画像分類、その他の機械学習タスクを扱う場合、どのよ...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
「私たちの論文を溜め込むのはやめてください」ネイチャー誌のコラムに学者の投稿が掲載される。記事は、...