ここ数週間、私は 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: 線形回帰アルゴリズム
ほとんどの CIO は、AI に意思決定を任せることに消極的です。しかし、それは彼らがより優れた、よ...
人工知能はますます多用途になり、すでに私たちの仕事のすべてを人工知能が引き継ぐことができるようです。...
この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...
自動運転車、交通標識検出、顔認識、セルフサービスチェックアウト。 これらすべての高度なソリューション...
統合と国境を越えた発展が進む今日の世界において、教育が象牙の塔に留まり、自己満足に浸っているだけでは...
実際、ディープラーニングは多くの厄介な最適化問題を解決しています。ニューラル ネットワークは、問題に...
この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...
テクノロジートラベラー北京ニュース 1 月 3 日:ケネス・リブブレヒトは、この寒い冬に暖かく快適な...
[[426278]] 2021年1月、コンピュータサイエンスと人工知能分野のトップ学者であるエリッ...
[[273650]]まず最初に強調しておきたいのは、この記事の発端は High Availabil...
[[432777]]中国新聞社、北京、11月1日(記者:孫子発)中国国家知識産権局の沈長宇局長は1...
フェデレーテッド ラーニングは、データがローカルの場所から出ないようにするプライバシー保護戦略により...
ドローンは警報装置、検出器、カメラなどを搭載し、多くの機能を実現でき、セキュリティ監視、スマートビル...