AIの基礎
グラディエント・デセントとは何か?
グラディエント・デセントとは何か?
ニューラルネットワークのトレーニング方法について読んだことがある人は、ほとんど確実に「グラディエント・デセント」という用語に遭遇したことがあるでしょう。 グラディエント・デセント は、ニューラルネットワークのパフォーマンスを最適化する主な方法であり、ネットワークの損失/エラー率を減らすものです。ただし、グラディエント・デセントは、機械学習の初心者にとって少し難しい概念であることがあります。この記事では、グラディエント・デセントのしくみについての理解を提供することを目指しています。
グラディエント・デセントは、最適化アルゴリズムの一種です。ネットワークのパラメータを調整することで、ネットワークの予測と実際の値(損失と呼ばれる)之间の差を可能な限り小さくすることで、ネットワークのパフォーマンスを向上させるために使用されます。グラディエント・デセントは、パラメータの初期値から開始し、計算機による演算を使用して、ネットワークが可能な限り正確になるような値に調整します。グラディエント・デセントを理解するには、微積分をたくさん知る必要はありませんが、グラディエントの概念を理解する必要があります。
グラディエントとは何か?
ニューラルネットワークのエラーを表すグラフがあると仮定しましょう。グラフの底部はエラーが最も小さい点を表し、上部はエラーが最も大きい点を表します。私たちはグラフの底部に向かって移動したいと思います。グラディエントは、エラーとニューラルネットワークの重み之间の関係を量化する方法です。この関係は、傾きとしてグラフ化できます。傾きの急さは、モデルの学習速度を表します。
傾きが急な場合は、エラーの削減が大きく、モデルの学習が速いことを示します。一方、傾きがゼロの場合は、モデルの学習が停滞しています。傾きを計算することで、モデルのパラメータを更新する方向(変化)を決定できます。
さて、丘と谷の比喩を少し変えてみましょう。私たちは谷の底部、つまり損失が最も小さい点に到達したいと思います。丘の頂上から開始すると、自信を持って大きなステップを下向きに進めることができます。
しかし、谷の底部に近づくにつれて、ステップのサイズを小さくする必要があります。そうでない場合は、実際の最小点を超えてしまう可能性があります。同様に、ネットワークの重みを調整するとき、調整が実際の最小点から遠ざけてしまう可能性があります。したがって、調整は時間の経過とともに小さくなる必要があります。グラディエントは、移動する方向(どの係数を更新するか)とステップのサイズ(どの程度更新するか)を示すベクトル/指示です。
グラディエントがどのように計算されるかを見てみましょう。
グラディエントの計算とグラディエント・デセント

グラディエント・デセントは、損失が大きい点から開始し、複数のイテレーションを経て、損失が最も小さい点に向かってステップを進め、最適な重み設定を目指します。画像:Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
グラディエント・デセントを実行するには、まずグラディエントを計算する必要があります。グラディエントを計算するには、損失関数を知る必要があります。損失関数を使用して導関数を決定します。導関数は、関数の特定の点での傾きを表します。したがって、基本的に丘の傾きを損失関数に基づいて計算しています。損失関数を「f」と表記する場合、損失を計算する式は次のようになります。
損失 = f(係数)
次に、導関数、つまり傾きを計算します。損失の導関数を取得することで、どの方向が丘を下りる方向であるかを判断できます。適切な方向を「デルタ」と表記します。
デルタ = 導関数(損失)
丘を下りる方向を決定しました。したがって、ネットワークのパラメータを更新し、損失を減らすことができます。パラメータを更新するには、前のパラメータから適切な変化(デルタ)と変化の大きさ(ステップのサイズ)を引く必要があります。変化の大きさを制御する引数を「学習率」と呼び、アルファを表記します。
係数 = 係数 – (アルファ * デルタ)
このプロセスを繰り返し、ネットワークが損失が最も小さい点に収束するまで続けます。
学習率(アルファ)を適切に選択することが非常に重要です。学習率は大きすぎることも小さすぎることもできません。私たちが谷の底部に近づくにつれて、ステップのサイズを小さくする必要があります。そうでない場合は、実際の最小点を超えてしまう可能性があります。学習率が大きすぎると、ネットワークのパフォーマンスは最小点の周りを跳ね回り、収束しません。一方、学習率が小さすぎると、ネットワークが最適な重み設定に収束するまでに非常に長い時間がかかる可能性があります。
グラディエント・デセントの種類
グラディエント・デセントのしくみを理解したので、さまざまな種類のグラディエント・デセントを見てみましょう。
バッチ・グラディエント・デセント:このタイプのグラディエント・デセントは、すべてのトレーニング・サンプルを処理した後で初めてパラメータを更新します。このタイプのグラディエント・デセントは、最も計算効率の良いグラディエント・デセントである可能性があります。パラメータはバッチが処理された後でしか更新されないため、更新回数が少なくなります。ただし、データセットに多数のトレーニング・サンプルがある場合、バッチ・グラディエント・デセントによりトレーニングに長時間がかかる可能性があります。
ストッキック・グラディエント・デセント:ストッキック・グラディエント・デセントでは、各イテレーションで1つのトレーニング・サンプルだけが処理され、パラメータが更新されます。各トレーニング・サンプルに対してパラメータが更新されるため、バッチ・グラディエント・デセントよりも収束が速い可能性があります。ただし、トレーニング・セット内のすべてのアイテムに対してこのプロセスを繰り返す必要があるため、大きなデータセットの場合、完了するまでに長時間がかかる可能性があります。
ミニ・バッチ・グラディエント・デセント:ミニ・バッチ・グラディエント・デセントでは、トレーニング・データセットを小さなミニ・バッチに分割します。ネットワークを経由してミニ・バッチを処理し、ミニ・バッチを使用してエラーを計算した後、パラメータを更新します。ミニ・バッチ・グラディエント・デセントは、バッチ・グラディエント・デセントとストッキック・グラディエント・デセントの中間をとったアプローチです。モデルの更新はバッチ・グラディエント・デセントよりも頻繁に行われ、収束はわずかに速くなり、かつストッキック・グラディエント・デセントよりも計算効率が良くなります。












