前に書いてある
コースの大きな宿題に触発されて、私はバックプロパゲーションの具体的な実装プロセスを注意深く研究しました。
関連する側面について記事を書いてくださった各界の偉大な神様に感謝します。
CNN にはトレーニング中にフォワードプロパゲーションとバックプロパゲーションの両方があることは誰もが知っていますが、Pytorch でバックプロパゲーションを実装するために必要なコードは 1 行だけです。手動で実装する必要はありません。したがって、ほとんどの深層学習の書籍でもこれについては取り上げられていません。この記事では、畳み込み層、プーリング層、バッチ正規化の
3 つの部分から分析します。
文章
1. 畳み込み層での逆伝播
Pavithra Solaiのブログを参照してください。
1.1 連鎖の法則
式の導出を始める前に、まず連鎖律の計算を理解する必要があります。
この部分は比較的基本的なものなので、事前に知っていれば直接スキップできます。
2 つの例を挙げて説明しましょう。
事例1
y=g(x)、z=h(y) とします。
x が変更されると、x は y ~ g に影響し、y が変更されると、y は z ~ h に影響します。
したがって、dz/dx を計算したい場合は、この効果により、dz/dy と dy/dx の積を計算できます。
事例2
x=g(s)、y=g(s) とします。
次に、x と y を受け取って z を取得する関数 k があります。したがって、s への変更は x と y の両方に影響し、x と y が同時に z に影響を及ぼします。次に、dz/dsを計算します。計算する必要があるのは、∂ z ∂ xdxds + ∂ z ∂ ydyds \frac{\partial{z}}{\partial{x}}\frac{dx}{ds}+\frac{\partial{z}}{ \ 部分{y}}\frac{dy}{ds}∂ ×∂z _ds _dx _+∂y _∂z _ds _やあ_。
これが連鎖の法則です。
ここで、単純な計算グラフを提案します。
CNN はこの単純化された計算グラフとして想像できます。この計算グラフに、入力 x と y を受け取り、z を出力するゲート f があるとします。
局所勾配を簡単に計算できます。x と y に関して z を微分すると、∂ z / ∂ x \partial{z}/\partial{x} となります。∂ z / ∂ x和∂ z / ∂ y \partial{z}/\partial{y}∂ z / ∂ y。
畳み込み層の順伝播の場合、入力 X と F は畳み込み層を通過し、最後に損失関数を使用して損失 L を取得します。層間で逆に損失の計算を開始すると、前の層からの損失の勾配、つまり∂ L / ∂ X \partial{L}/\partial{X} が得られます。∂ L / ∂ X和∂ L / ∂ F \partial{L}/\partial{F}∂ L / ∂ F。
1.2 順伝播
3×3 入力XXを使用して、フォワード パスから始めます。Xおよび 2×2 コンボリューション カーネルFFFは 2×2 の結果を得るために畳み込まれますOOO、以下の図に示すように、
畳み込みのプロセスは次のように視覚化できます。
順伝播の公式に基づいて、逆伝播計算を実行できます。
上に示したように、出力OOO ∂ O / ∂ X ∂ O / ∂ Xの局所勾配∂ O / ∂ Xおよび∂ O / ∂ F ∂ O / ∂ F∂ O / ∂ F。前の層の損失勾配を使用します -∂L / ∂O ∂L/∂O∂ L / ∂ O、連鎖律を使用すると、∂ L / ∂ X ∂L / ∂X∂ L / ∂ Xおよび∂ L / ∂ F ∂ L / ∂ F∂ L / ∂ Fアップ。
PS: なぜ∂ L / ∂ X ∂ L / ∂ Xを計算する必要があるのですか∂ L / ∂ Xおよび∂ L / ∂ F ∂ L / ∂ F∂ L / ∂ F?
(1) 公式によるとupdated = F − α ∂ L ∂ F F_{updated}=F-\alpha\frac{∂L}{∂F}F更新されました_ _=F−ある∂F _∂L _FFであることがわかりますFは更新を計算するために必要なパラメータであり、その更新は∂ L / ∂ F ∂ L / ∂ F∂ L / ∂ Fパラメータを達成します。
(2)∂L / ∂X ∂L / ∂X∂ L / ∂ Xはこの層の入力部分として使用され、バックプロパゲーション中のバックプロパゲーションの出力とみなすことができます。この出力は前の層の入力勾配であり、∂ L / ∂ X ∂L/∂バツ∂ L / ∂ X では、前の層のバックプロパゲーション計算を続けることができます。
1.3 ∂O/∂F
最初のステップはローカル勾配∂O / ∂F ∂O/∂F∂ O / ∂ Fの計算
以 O 11 O_{11} ○1 1たとえば、O 11 O_{11}だけが必要です。○1 1式内の対応するFFFの偏導関数を求めるだけで十分です。このステップは簡単です。
次に、連鎖規則を使用して、∂L/∂F ∂L/∂Fを取得できます。∂ L / ∂ F、∂ L / ∂ O ∂L/∂O∂L / ∂Oおよび∂O / ∂F ∂O/ ∂F∂ O / ∂ Fの畳み込みが得られます。次の式を使用して展開します。
展開により、次の 4 つの式が得られます。
前述の偏導関数によれば、次のことが得られます。XX
として表現できます。Xと損失勾配∂L/∂O ∂L/∂O∂ L / ∂ O間の畳み込み演算したがって、 ∂ O / ∂ F ∂ O / ∂ F
がわかります。∂ O / ∂ F、続いて∂ O / ∂ X ∂O/∂X∂ O / ∂ X。
1.4 ∂O/∂X
∂ O / ∂ F ∂O/∂Fを解く前∂ O / ∂ Fのプロセスも同様、またはO 11 O_{11}○1 1たとえば、今回はO 11 O_{11}する必要があります。○1 1式内の対応するXXX は偏導関数を求めます。
このようにして、新しい勾配を取得します。連鎖ルールを使用して、新しい畳み込みを作成できます。
展開して偏微分を計算して取得します。
これらの 9 つの式は一見不規則ですが、畳み込みの計算ルールに準拠しています。 。
具体的なルールは何ですか? まずはFFFは 180 度回転します。これは、最初に垂直方向に反転し、次に水平方向に反転することで実行できます。
次に、それに対してフル モードの畳み込み演算を実行します(畳み込みのいくつかのモードの説明については、このブロガーのブログ投稿を参照してください)。
「フル畳み込み」は、以下に示すように視覚化できます。
上記の畳み込み演算により、∂ L / ∂ X ∂ L / ∂ Xが生成されます。∂ L / ∂ Xなので、∂ L / ∂ X ∂ L / ∂ X∂ L / ∂ Xは次のように表されます。
これで、 ∂ L / ∂ X ∂ L / ∂ Xが見つかりました。∂ L / ∂ Xおよび∂ L / ∂ F ∂ L / ∂ F∂ L / ∂ Fから、次の結論を導き出すことができます。
畳み込み層のフォワード パスとバック パスは両方とも畳み込みです。
結論は次の式で表すことができます。
2. プーリング層でのバックプロパゲーション
この部分は雷毛氏のブログ投稿を参照しています。
プーリング層には学習可能なパラメータがないため、バックプロパゲーションは上流導関数のアップサンプリング操作にすぎません。
ここでは、分析の例として Max Pooling を取り上げます。
の:
Max Pooling の式からわかるように、xxの場合、xが最大値のとき、入力と出力を偏微分した後に得られるwwwは1をとります。たった今:
この式によれば、
Max Pooling の逆伝播には非最大値に対する勾配がないと結論付けることができます。
紙面の都合上、バッチ正規化部分については後半で説明します。