フィルター行列の要素を初期化する方法は?


24

ライブラリ(ConvnetやTensorFlowなど)に依存しないPythonコードを作成することで、畳み込みニューラルネットワークをよりよく理解しようとしていますが、カーネルマトリックスの値を選択する方法に関する文献にこだわっています。画像の畳み込みを実行します。

CNNのレイヤーを示す以下の画像の機能マップ間のステップで、実装の詳細を理解しようとしています。

畳み込みニューラルネットワーク層

この図によると:

画像の畳み込み

カーネルマトリックスカーネルは画像上で「ステップ」し、特徴マップを作成します。各ピクセルは、カーネル(またはフィルターマトリックス)の各重みと入力画像の対応するピクセル値の間のすべての要素ごとの積の合計です。

私の質問は、カーネル(またはフィルター)行列の重みをどのように初期化するのですか?

上記のデモンストレーションでは、これらは1と0にすぎませんが、これは図のために単純化されていると思います。

これらの重みは、何らかの前処理ステップでトレーニングされていますか?または、ユーザーが明示的に選択しましたか?

回答:


19

通常、ネットワークはランダムな分布から初期化されます。通常はゼロを意味し、分散の選択に関してはある程度の注意が払われます。最適化技術(他の方法の中でも特にSGD + Momentum)と活性化の非線形性(ReLUおよびReLUに似た活性化により、より深いネットワークでも勾配信号のより良い逆伝播が可能になります)の進歩により、最先端の畳み込みを実際に訓練することができますランダム化された初期化からのニューラルネットワーク。

主なプロパティは次のとおりです。

  • なぜランダムなのですか?すべてを0に初期化しないのはなぜですか?ここで重要な概念は、対称性の破れと呼ばれます。すべてのニューロンが同じ重みを持っている場合、同じ出力を生成し、異なる機能を学習することはありません。バックプロパゲーションのステップでは、すべての重みの更新がまったく同じになるため、異なる機能については学習しません。そのため、ランダム化された分布から開始すると、ニューロンを(非常に高い確率で)異なるように初期化し、豊富で多様な機能階層を学習できます。

  • なぜゼロを意味するのですか?機械学習の一般的な方法は、入力データをゼロ中心にするか正規化することです。これにより、未加工の入力フィーチャ(画像データの場合はピクセルになります)の平均がゼロになります。

    データをゼロ中心にし、ネットワークの重み(ランダムに参照した行列)をランダムに初期化します。どのような分布を選択する必要がありますか?ネットワークへの入力データの分布は、ゼロ中心であるため平均ゼロです。バイアス項もゼロに初期化するとします。ネットワークのトレーニングを初期化するとき、すべてがランダムであるため、1つのニューロンを他のニューロンよりも優先する理由はありません。1つのプラクティスは、すべてのウェイトが期待どおりにアクティベーション出力をゼロにする方法で、ウェイトをランダムに初期化することです。このように、ランダムな初期化により対称性を同時に破ると同時に、他のニューロンよりも「活性化」(正の出力値を持つ)に有利なニューロンはありません。これを実現する簡単な方法は、平均ゼロ分布を選択することです。

  • 分散をどのように選択しますか?平均がゼロであっても、分散が大きすぎるように選択するのは望ましくありません。ディープネットウェイトの極端な値は、アクティベーション出力の大きさが指数関数的に増加する可能性があり、この問題はネットワークの深さとともに悪化する可能性があります。これは、ネットワークのトレーニングに大損害を与える可能性があります。また、非常に小さい勾配値を計算しているため、学習が遅くなる可能性があるため、小さすぎる値を選択したくないでしょう。したがって、ここではバランスがあります。特に、より深いネットワークに関しては、順方向または逆方向の伝播で指数関数的に深さを増減させたくないためです。

    2つの非常に一般的なウェイト初期化スキームがあります。GlorotUniform(ディープフィードフォワードニューラルネットワークのトレーニングの難しさを理解する)およびHe Normalイニシャライザー整流器の詳細:ImageNet分類での人間レベルのパフォーマンスの向上)です。

    どちらも、次のコア原則を念頭に置いてディープネットワークをトレーニングすることを目的として構築されています(引用は、Delving Deeper into Rectifiersの記事から)。

    「適切な初期化方法は、入力信号の大きさを指数関数的に減少または拡大しないようにする必要があります。」

    大まかに言って、これらの2つの初期化スキームは、各ニューロンの出力分布が同じになるように各層の分散を初期化します。Delving Deep into Rectifiersのセクション2.2は、詳細な分析を提供します。

最後の注意:時には、すべてのレイヤーで標準偏差が.005または.01のGaussian、または他の「小さな」標準偏差を使用している人もいます。他の場合は、人々が手作業で差異をいじり、基本的に相互検証を実行して最高のパフォーマンスの構成を見つけます。


1
しかし、上記のGIFの黄色のフィルターの「X」形(1で作成)はどうでしょうか。私はこれが写真の任意の場所で「X」形状を検出するために使用したいことを理解していますが、「X」が私が望む形状であることをどのように知ることができますか?フィルターの形状は自動的に学習されるという印象を受けていますが、その方法はわかりません。たぶん、これはOPの質問でもありましたか?
フェリペアルメイダ

2

評判が悪いためコメントできないので、フェリペアルメイダの質問に答えてこれを書いています。Indie AIの完璧な答えの後、追加することはあまりありません。特定の形状(Xなど)を検出する場合は、エッジ検出の場合と同様に、特定のフィルターを事前に定義できます。しかし、これはディープラーニングの美しさであり、非常に多くのレイヤー、非常に多くのフィルター、非常に多くの反復があるため、フィルターはそれ自体で必要なほぼすべてのオブジェクトの形状を学習します。理論的には、検出されるXがある場合、フィルターの1つはXを検出することを学習します(黄色のフィルターとして)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.