ニューラル ネットワークについて学んだことのある人なら誰でも、ニューラル ネットワークには非常に一般的なトレーニング方法である BP トレーニング アルゴリズムがあることを知っています。 BP アルゴリズムを使用すると、ネットワークを継続的にトレーニングし、最終的にはネットワークを適合させたい関数に無限に近づけることができます。最終的に、トレーニングされたネットワークは、トレーニング セットとテスト セットの両方で優れたパフォーマンスを発揮します。
では、BP アルゴリズムとは一体何でしょうか? BP アルゴリズムによって段階的に最適値に近づくことができるのはなぜですか (グローバル最適値ではなくローカル最適値である場合でも、他の方法でグローバル最適値に到達することもできます)。それをサポートする数学的原理はありますか。最近、私はこの分野の知識ポイントをいくつか整理して書き留めました。1つは記録用、もう1つは誤解を防ぎ、一緒に学び、コミュニケーションをとるために全員で共有するためです。
BP アルゴリズムの詳細については、私のこの Zhihu コラムを参照してください (BP プロセスを詳細に説明し、理解を深めます)。それでは、この問題を解決し、BP アルゴリズムを段階的に使用することで、なぜより良い結果を達成できるのかを説明しましょう。まず、ニューラル ネットワークの動作原理を見てみましょう。図に示すような単純なネットワークがあるとします。
<img src="https://static.leiphone.com/uploads/new/article/pic/201708/331506b19a12761324434113a569f3cc.png" data-rawwidth="675" data-rawheight="396" class="origin_image zh-lightbox-thumb" width="675" data-original="https://pic1.zhimg.com/v2-8ad20b3f51bad9e21f1b88e7bbb55744_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201708/331506b19a12761324434113a569f3cc.png"/> 我们定义符&a mp;amp;amp;amp;amp;#21495;说明如下:
シンボルを次のように定義します。
<img src="https://static.leiphone.com/uploads/new/article/pic/201708/af102cbe221d16d8857bac7708dc7c38.png" data-rawwidth="743" data-rawheight="413" class="origin_image zh-lightbox-thumb" width="743" data-original="https://pic4.zhimg.com/v2-dd88143942766bae6dcf704950a6718f_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201708/af102cbe221d16d8857bac7708dc7c38.png"/> 则我们正向传播一次 可以得到下面公式:
次に、1 回の順方向伝播によって次の式を得ることができます。
<img src="https://s4..com/wyfs02/M01/9D/DD/wKiom1mH4hrglqovAAAsJJcRIX8297.png" data-rawwidth="292" data-rawheight="228" class="content_image" width="292" _src="https://s4..com/wyfs02/M01/9D/DD/wKiom1mH4hrglqovAAAsJJcRIX8297.png"/>
<img src="https://s1..com/wyfs02/M01/9D/DD/wKioL1mH4hqDLe5CAAAGC944VOc665.png" data-rawwidth="174" data-rawheight="64" class="content_image" width="174" _src="https://s1..com/wyfs02/M01/9D/DD/wKioL1mH4hqDLe5CAAAGC944VOc665.png"/>
<img src="https://s1..com/wyfs02/M00/9D/DD/wKioL1mH4hqzsmoQAAAwIXlOWdA514.png" data-rawwidth="547" data-rawheight="153" class="origin_image zh-lightbox-thumb" width="547" data-original="https://pic4.zhimg.com/v2-07a79a3e15b67058d57c1128f3640c4b_r.png" _src="https://s1..com/wyfs02/M00/9D/DD/wKioL1mH4hqzsmoQAAAwIXlOWdA514.png"/>
<img src="https://s5..com/wyfs02/M02/9D/DD/wKiom1mH4huCJ2JJAAAgWHx_Q-E162.png" data-rawwidth="547" data-rawheight="99" class="origin_image zh-lightbox-thumb" width="547" data-original="https://pic3.zhimg.com/v2-39f27335952a5ace6f496c58434c80ba_r.png" _src="https://s5..com/wyfs02/M02/9D/DD/wKiom1mH4huCJ2JJAAAgWHx_Q-E162.png"/>
損失関数Cが次のように定義される場合
<img src="https://s5..com/wyfs02/M01/9D/DD/wKiom1mH4hvSP_KlAAAIEq2DEDs173.png" data-rawwidth="206" data-rawheight="69" class="content_image" width="206" _src="https://s5..com/wyfs02/M01/9D/DD/wKiom1mH4hvSP_KlAAAIEq2DEDs173.png"/>
そして、トレーニングされたネットワークによって予測された値が、真の値に可能な限り近くなることを期待します。 SGD メソッドは今のところ無視しましょう。最も過激な方法では、トレーニング データに対して C が最小値に達することを期待します。C 式では、C 式をすべての w パラメーターの関数と見なすことができます。つまり、この多変量関数の最大値を見つけます。そして、ニューラル ネットワークの問題を数学的最適化の道に導入することに成功しました。
---------------------------分割線---------------------------
さて、これで、ニューラル ネットワークが解決する必要のある問題を、多変量関数の最適化にうまく変換できました。ここで問題となるのは、C が最小値に近づくように w をどのように変更するかということです。一般的な方法として、勾配降下法を使用することができます(勾配降下法において勾配の反対方向が最速の方向である理由については、この記事の主題ではありませんが、次の記事を参照してください)。少し抽象的なので、非常に簡単な例を見てみましょう。
下図のように、ネットワークが非常に単純であると仮定します (記号は上記と同じです)。
<img src="https://static.leiphone.com/uploads/new/article/pic/201708/84c0a988d8e05428a3ec5c169824b00d.png" data-rawwidth="366" data-rawheight="329" class="content_image" width="366" _src="https://static.leiphone.com/uploads/new/article/pic/201708/84c0a988d8e05428a3ec5c169824b00d.png"/> 那么我们可以得到: すると次のようになります: <img src="https://static.leiphone.com/uploads/new/article/pic/201708/81efeb3c9ba227b425b0c54a78efec11.png" data-rawwidth="396" data-rawheight="105" class="content_image" width="396" _src="https://static.leiphone.com/uploads/new/article/pic/201708/81efeb3c9ba227b425b0c54a78efec11.png"/>
で<img src="https://static.leiphone.com/uploads/new/article/pic/201708/97d02f2a25bcf78362f4e20b04316cdd.png" data-rawwidth="601" data-rawheight="62" class="origin_image zh-lightbox-thumb" width="601" data-original="https://pic2.zhimg.com/v2-28fc4ccc4dd16bfdf09b0b9ea17168fd_r.png" _src="https://static.leiphone.com/uploads/new/article/pic/201708/97d02f2a25bcf78362f4e20b04316cdd.png"/>
w パラメータのみが未知なので、C は w の 2 進関数と見なすことができます (2 進関数の利点は、3 次元座標で視覚化できるため、理解しやすいことです)。 写真はインターネットから引用したものです:
<img src="https://static.leiphone.com/uploads/new/article/pic/201708/d2f6ec1dfb62c65f9009b6498c0c9c02.jpg" data-rawwidth="660" data-rawheight="518" class="origin_image zh-lightbox-thumb" width="660" data-original="https://pic1.zhimg.com/v2-7ba7a98ed47b5ac4243cfc9b072c5cd4_r.jpg" _src="https://static.leiphone.com/uploads/new/article/pic/201708/d2f6ec1dfb62c65f9009b6498c0c9c02.jpg"/>
アルゴリズムのプロセスを見てみましょう。
まず、グラフ上の点 A に相当する w パラメータをランダムに初期化します。
私たちの目標は最低点 F に到達することなので、勾配の反対方向に移動します。式は次のとおりです。
<img src="https://static.leiphone.com/uploads/new/article/pic/201708/8c615feed3f4d0c723a3d8b8f0a71e21.png" data-rawwidth="229" data-rawheight="169" class="content_image" width="229" _src="https://static.leiphone.com/uploads/new/article/pic/201708/8c615feed3f4d0c723a3d8b8f0a71e21.png"/> 每走一步的步步 mp;amp;amp;amp;amp;#20240;大小由前面的 学习率决定,&a mp;amp;amp;amp;amp;#20551;如下一步到了 B 点,这样迭代下去, 如果全局只有一个最 优点的话,我们在迭 代数次后,可以到达ふ点,从而解决 我们的问题。 各ステップのサイズは、前の学習率によって決まります。次のステップがポイント B に到達し、反復がこのように続く場合、世界に最適なポイントが 1 つしかない場合は、数回の反復の後にポイント F に到達でき、問題が解決されます。
さて、上ではバイナリ関数の簡単な例を示しました。分析から最終結果まで、最終ステップを視覚化できます。ネットワークが複雑になり、多変量関数になった場合でも、最適値を見つける原理はまったく同じです。この時点で、この記事で取り上げる知識のポイントは完了です。 間違いを指摘したりコミュニケーションをとったりする友達を歓迎します〜
---------------------------分割線---------------------------
勉強していたとき、上記の知識はすでに理解していましたが、w に関する多変量関数がようやくわかったので、各 w の偏微分を取って直接更新すればいいのではないかと思っていました。ニューラル ネットワークの人気が高まると、なぜ BP アルゴリズムの導入によって復活する必要があったのでしょうか。私の疑問は、なぜ偏微分を直接見つけることができないのか、また、なぜニューラル ネットワークを非常に適用可能にするために BP アルゴリズムが必要なのかということです。私の考えと理解は次のとおりです(交流を歓迎します〜)
1. なぜ導関数を直接求めることができないのでしょうか?
ニューラルネットワークでは、活性化関数の存在により、コスト関数の最後にあるwパラメータを含むコスト関数は、最も単純なもののような線形関数ではないことがよくあります。 <img src="https://static.leiphone.com/uploads/new/article/pic/201708/e23ef5fe5d4f3d0cd77192101630cb0e.png" data-rawwidth="308" data-rawheight="95" class="content_image" width="308" _src="https://static.leiphone.com/uploads/new/article/pic/201708/e23ef5fe5d4f3d0cd77192101630cb0e.png"/>
この関数を w に関して微分しても解析解を得ることは不可能であり、これが直接微分できない理由を説明しています。
2. 導関数を直接導出できないので、導関数を近似することはできますか?例えば、
この式によれば、各パラメータの導関数を近似的に計算することができます。間隔が小さいほど、近似値になります。では、なぜこれを実行できず、BP アルゴリズムが提案されるまで待たなければならないのでしょうか?考え...
回答: 計算能力の量が原因です。ネットワークに 100 万個の重みがあると仮定すると、重みの偏微分を計算するたびに、変更値を 1 回計算する必要があり、変更値は完全な順方向伝播を経る必要があります。次に、各トレーニング例に対して、100 万回の順方向伝播 (および C を計算するためにさらに 1 回) が必要になりますが、BP アルゴリズムでは、すべてのパラメーターの偏導関数を見つけるために 1 回の逆方向伝播のみが必要であり、合計 2 回の伝播が必要です。この時点で、近似法を使用しないという問題は解決したと思います。速度が遅すぎて計算の複雑さが高すぎるためです。各伝播ごとに、パラメータが多い場合、行列計算の量が非常に大きくなり、以前のマシン速度ではまったく耐えられませんでした。そのため、BPが登場するまで、ニューラルネットワークの適用速度は加速されてきました。
上記はあくまでも私の個人的な理解ですが、ご協力いただいた徳川さんに感謝いたします。質問したり、意見を交換したりする友達を歓迎します〜 以下は私が研究に使用した資料とブログです。 《ニューラルネットワークとディープラーニング》 中国語版が必要ですか?メッセージを残してください メール ゼロベースエントリーディープラーニング(1) - パーセプトロン