Skip to main content

[Japanese] How to Initialize Weights in PyTorch

PyTorchで重みを初期化する方法についての短いチュートリアル。コードとインタラクティブな視覚化を含みます。
Created on August 1|Last edited on August 1

目次

私たちが取り上げる内容

この記事では、PyTorchモデルのさまざまな層で重みを初期化する方法を見ていきます。
Tensorflowとは異なり、PyTorchはさまざまな層で重みを初期化するための簡単なインターフェースを提供していません(ただし、トーチ・エヌエヌ・イニット ですしたがって、XavierやHe初期化のようなよく知られた手法に従って重みを初期化したいときに難しくなります。
以下で重みの初期化方法を見ていきますが、実行可能なColabで一緒に進めたい場合は、次のリンクで行うことができます。


ニューラルネットワークの重み初期化におけるさまざまな手法と動機についての詳細な情報は、参考文献を参照してください。この記事
💡

PyTorchでのクラス関数を使用したゼロによる重みの初期化

最も一般的な重みの初期化方法の一つは、クラス関数を使用して、最後に呼び出すことです。初期化カスタムPyTorchモデルでの関数。
トーチ.nnをインポート クラスモデル(nn.Module): # . . . 定義 __init__(self): 。 自身に適用し、初期重みを設定します。 ウェイトを初期化する(module) もしモジュールが nn.Linear のインスタンスである場合: モジュールの重みデータが平均0.0、標準偏差1.0の正規分布に従うように正規化されます。 モジュールのバイアスが存在する場合: モジュール.バイアス.データ.ゼロ_()
このコードスニペットは、平均0、標準偏差1の正規分布からすべての重みを初期化し、すべてのバイアスをゼロに初期化します。これは、他の層にも簡単に拡張できます。層ノーマル化および埋め込み
重みを初期化する(モジュール): モジュールがnn.Embeddingのインスタンスかどうかを確認します。 モジュールの重みデータが平均0.0、標準偏差1.0の正規分布に従うように正規化されます。 モジュールのpadding_idxがNoneでない場合: モジュール.重み.データ[モジュール.パディング_インデックス].ゼロ_() ただし、モジュールが nn.LayerNorm のインスタンスである場合: モジュール.バイアス.データ.ゼロ_() モジュールの重みデータに1.0を代入します。
他の機能も利用可能です。トーチ・エヌエヌ・イニットこれは調べることができます:

パイトーチ重み初期化実験

以下のWeights & Biasesチャートは、提供されたColabから描画されたもので、重みの初期化をよりよく説明するためのものです。もう一度、それを見つけることができます:



ここでは、正規分布のさまざまな標準偏差がパフォーマンスの面でどのように異なるかを確認できます。

Run set
42

標準偏差の値が大きいと良い結果につながらず、局所的な最小値につながる可能性が高いです。一方、小さな値ははるかに良い性能をもたらします。

概要

この記事では、PyTorchの深層学習モデルの重みを初期化する方法と、Weights & Biasesを使用してメトリクスを監視することで貴重な洞察を得ることができる方法を紹介しました。
W&Bの全機能を見るには、こちらをご確認ください。5分間ガイドさらに数学やゼロからのコード実装に関するレポートが必要な場合は、下のコメント欄または私たちの上でお知らせください。フォーラム ✨
こちらの他のレポートをご覧ください。全結合GPU利用率やモデル保存のような他の基本的な開発トピックをカバーする。

Weights & Biasesを試す

Weights & Biasesは、機械学習の実験を追跡するのに役立ちます。ハイパーパラメータを記録し、実行結果からメトリクスを出力し、結果を視覚化して比較し、同僚と迅速に結果を共有するために、ツールをお試しください。
始める5分以内に、Replitで2つの短い実験を実行し、W&Bがどのように作業を整理するのに役立つかを確認してください。以下の指示に従ってください。
指示:
  1. 下の緑色の「実行」ボタンをクリックします。初めて実行をクリックすると、Replitはマシンの割り当てに約30〜45秒かかります。
  2. 端末ウィンドウのプロンプトに従ってください。(下の右下のペイン)
  3. ターミナルウィンドウのサイズを変更できます。(右下)で拡大表示



おすすめの読書