ホーム
Think
トピック
バックプロパゲーション
公開日: 2024年7月2日
寄稿者:Dave Bergmann、Cole Stryker
バックプロパゲーションは、機械学習手法であり、人工ニューラル・ネットワークの最適化に不可欠です。これにより、ネットワークの重みを更新するための勾配降下法アルゴリズムの使用が容易になります。これは、現代のディープラーニング・モデルが「学習」する方法で、人工知能(AI)を推進しています。
「誤差の逆伝播」を意味するバックプロパゲーションは、ニューラル・ネットワークの重みまたはバイアスの変更がモデル予測の精度にどのように影響するかを計算する優れた方法です。ニューラル・ネットワークをトレーニングするには、教師あり学習、半教師あり学習、または 自己教師あり学習の使用が不可欠です。
バックプロパゲーションと同等のものやその前身となるものは1960年代に遡ってさまざまな文脈で個別に提案されていましたが、正式な学習アルゴリズムを最初に発表したのは認知心理学者であったDavid E. Rumelhart氏、コンピューター・サイエンスおよび認知心理学の研究者Geoffrey Hinton氏、そして、コンピューター・サイエンスの教授であったRonald J. Williams氏の3人でした。彼らの共著である1986年の論文「誤差の逆伝播による表現の学習」は、現代の機械学習のコンテキストで使用され、理解されている逆伝播アルゴリズムの導出を示しました。
バックプロパゲーションのロジックは、人工ニューラル・ネットワーク内のニューロン層が本質的に一連のネストされた数学関数であるというものです。トレーニング中、これらの相互接続された方程式はさらに別の関数にネストされます。これは、特定の入力に対する望ましい出力(または「グラウンド・トゥルース」)とニューラル・ネットワークの実際の出力との差(または「損失」)を測定する「損失関数」です。
これにより、17世紀に遡る計算原理である「チェーン・ルール」を使用して、各ニューロンが全体の損失に寄与する割合を計算できます。そうすることで、ニューロンが表す方程式内の任意の変数、つまり任意の重みやバイアスに対する変更の影響を計算できます。
数学的に言えば、バックプロパゲーションは出力から逆方向に動作して、損失関数の「勾配」、つまりネットワーク内のすべての方程式の導関数のベクトルを効率的に計算します。この勾配は、「勾配降下法」などの最適化アルゴリズムに、損失を減らすためにどの方程式を調整し、どの方向に調整するかを伝えます。
これら3つの絡み合ったプロセス、つまり、さまざまな入力にわたってモデル・エラーを追跡する損失関数、ネットワークのさまざまな部分がエラーにどのように影響するかを確認するためのそのエラーの逆方向伝播、およびそれに応じてモデルの重みを調整する勾配降下アルゴリズムによって、ディープラーニング・モデルは「学習」します。そのため、バックプロパゲーションは、最も基本的な多層パーセプトロンから生成AIに使用される複雑なディープ・ニューラル・ネットワーク・アーキテクチャーに至るまで、ニューラル・ネットワーク・モデルのトレーニングの基本となります。
ほとんどの組織が生成AIによる成果に何を期待しているか明確にしていますが、モデルの選択を誤ると、ビジネスに重大な影響を与えるおそれがあります。この電子書籍では、パフォーマンス要件とコスト、リスク、デプロイメント・ニーズ、利害関係者の要件のバランスが取れるよう、モデルを選択する際のフレームワークについて説明します。
バックプロパゲーションのプロセスはニューラル・ネットワークのトレーニング方法にとって非常に基本的なため、このプロセスをわかりやすく説明するには、ニューラル・ネットワークがどのように予測を行うかを実際に理解する必要があります。
最も重要なのは、「重み」と「バイアス」の目的とコンテキストを理解することです。これらは、バックプロパゲーションと勾配降下法によって最適化される調整可能なモデル・パラメーターです。
ニューラル・ネットワークは、人間の脳の構造を大まかに模倣することを目的としています。それらは、層状に配置された多数の相互接続されたノード(またはニューロン)で構成されています。ニューラル・ネットワークは、元の入力データがネットワーク全体を「フォワード・パス」するという予測を行います。
「入力層」のニューロンは、通常、ベクトル埋め込みとして入力データを受け取り、各入力ニューロンは入力ベクトルの個々の特徴を受け取ります。例えば、10 x 10ピクセルのグレースケール画像で動作するモデルでは、通常、入力層に100個のニューロンがあり、各入力ニューロンは個々のピクセルに対応します。したがって、ニューラル・ネットワークでは通常、固定サイズの入力が必要ですが、プーリングや正規化などの手法によってある程度の柔軟性が得られます。
標準的なフィードフォワード・ニューラル・ネットワークでは、入力層の各ニューロンは次の層の各ニューロンに接続され、それらのニューロン自体も次の層のニューロンに接続され、最終的な予測が行われる 出力層までこれが続きます。入力層と出力層の間にある中間層はネットワークの隠し層と呼ばれ、ここでほとんどの「学習」が行われます。
専門家の混合モデルや畳み込みニューラル・ネットワークなどの一部の特殊なニューラル・ネットワーク・アーキテクチャでは、この単純な配置にバリエーション、追加、または例外が伴いますが、すべてのニューラル・ネットワークはこのコア構造を採用しています。
各ニューロンは前の層の各ノードから入力を受け取りますが、それらの入力すべてに同じ重要性が与えられるわけではありません。2つのニューロン間の各接続には、固有の「重み」が与えられます。これは、あるニューロンが次の層のニューロンに与える寄与を増減させる乗数です。
個々のニューロンには「バイアス」が与えられる場合もあります。これは、前の層のニューロンからの重み付けされた入力の合計に加算される定数値です。
バックプロパゲーションと勾配降下法の最終的な目標は、最良のモデル予測を生み出す重みとバイアスを計算することです。正確な予測と有意に相関するデータ特徴に対応するニューロンには、より大きな重みが与えられ、他の接続にはゼロに近い重みが与えられる場合があります。
現代のディープ・ニューラル・ネットワークは、多くの場合、多数のニューロンを含む数十の隠し層を備えており、数千、数百万、またはほとんどの大規模言語モデル(LLM)の場合は数十億の調整可能なパラメーターで構成されることがあります。
各ニューロンは、前の層のノードから受信したさまざまな重み付けの入力の合計に対して、「活性化関数」と呼ばれる数学演算を実行するように構成されています。活性化関数は「非線形性」を導入し、モデルが入力データ内の複雑なパターンを捉え、最適化可能な勾配を生み出すことを可能にします。線形活性化関数のみを使用すると、ニューラル・ネットワークは基本的に線形回帰モデルに縮小されます。
ニューラル・ネットワークの一般的な活性化関数には次のものがあります。
入力層に3つの入力ノードa、b、cを持つニューラル・ネットワークの2番目の層に、tanh活性化関数とバイアス項tを持つ仮想の隠れユニットzがあるとします。入力ノードとノードz間の各接続には、一意の重みwがあります。ノードzが次の層のニューロンに渡す出力値は、簡略化された式z = tanh(waz*a + wbz*b + wcz*c + t)で表すことができます。
ニューロンzは次の層のニューロンに接続されます。したがって、zの方程式は次の層の活性化関数の一部となり、さらに、後続の層のニューロンのすべての活性化関数の一部にもなります。
次のセクションで説明するように、バックプロパゲーションは、ニューラル・ネットワーク内の相互接続された変数と方程式の巨大なウェブを解きほぐす、非常に高速で効率的なアルゴリズムです。
バックプロパゲーションの効率性を説明するために、量子物理学者であるMichael Nielsen氏はオンライン教科書「ニューラル・ネットワークとディープラーニング)」の中で、バックプロパゲーションをニューラル・ネットワークの損失関数の勾配を計算するシンプルで直感的な代替アプローチと比較しています。
Nielsen氏が説明しているように、ネットワーク内の特定の重みwjの変更の影響は、他のすべてのパラメーターを変更せずに、わずかに異なる2つのwjの値に対してフォワード・パスを完了し、各パスで結果として生じる損失を比較するだけで簡単に推定できます。そのプロセスを簡単な方程式に形式化し、Pythonで数行のコードを実装することで、ネットワーク内の重みごとにそのプロセスを自動化できます。
しかし、モデルに100万個の重みがあると想像してください。これは、最新のディープラーニング・モデルとしては非常に控えめな数です。勾配全体を計算するには、ネットワークを1,000,001回フォワード・パスで通過させる必要があります。1 回目はベースラインを確立し、2 回目は100万個の重みのそれぞれに対する変更を評価します。
バックプロパゲーションでは、1回のフォワード・パスと1回のバックワード・パスという2回のパスで同じ目標を達成できます。
バックプロパゲーションの仕組みを簡単に説明するために、まずいくつかの中核となる数学的概念と用語を簡単に確認しておくと役立ちます。
連鎖律は、前の層にある他のニューロンの活性化関数の出力から構成されるニューラル・ネットワークの活性化関数の導関数を計算するために不可欠です。
バックプロパゲーションの背後にあるロジックは比較的単純ですが、特に変数計算に慣れていない人にとっては、数学と表記法が非常に複雑になる可能性があります。
モデルの出力から逆方向(バックワード)に作業するバックプロパゲーションは、「チェーン・ルール」を適用して、個々のニューラル・ネットワーク・パラメーターの変更がモデルの予測の全体的なエラーに与える影響を計算します。
大まかに言えば、バックプロパゲーションの目的は、教師あり学習を通じてニューラル・ネットワークをトレーニングし、より優れた予測を行うことです。より根本的には、バックプロパゲーションの目的は、「損失関数」によって測定されるエラーを最小限に抑えるために、モデルの重みとバイアスをどのように調整するかを決定することです。
技術的、数学的なレベルでは、バックプロパゲーションの目的は、ニューラル・ネットワークの個々のパラメーターのそれぞれに関して損失関数の勾配を計算することです。技術的、数学的なレベルでは、バックプロパゲーションの目的は、ニューラル・ネットワークの個々のパラメーターのそれぞれに関して損失関数の勾配を計算することです。
一般的に、バックプロパゲーションを使用してニューラル・ネットワークをトレーニングするには、次の手順に従います。
ニューラル・ネットワークは、順方向伝播を意味するフォワード・プロパゲーションを通じて予測を出力します。順方向伝播は、本質的には長い一連のネストされた方程式であり、あるニューロン層からの活性化関数の出力が、次の層のニューロンの活性化関数への入力として機能します。
モデルのトレーニングは通常、重みとバイアスのランダムな初期化から始まります。モデルのハイパーパラメータ(隠し層の数、各層のノード数、特定のニューロンの活性化関数など)は手動で設定され、トレーニングの対象にはなりません。
各フォワード・パスでは、トレーニング用データ・セットから入力がサンプリングされます。入力層のノードは入力ベクトルを受け取り、それぞれがランダムな初期重みを乗算した値を最初の隠し層のノードに渡します。隠れユニットは、これらの出力値の加重合計を活性化関数への入力として受け取り、その出力値(ランダムな初期重みによって条件付けられる)が次の層のニューロンへの入力として機能します。これは最終的な予測が行われる出力層まで続きます。
入力を5つのカテゴリーのいずれかに分類するニューラル・ネットワークの簡略化されたサンプルを考えてみましょう。
十分にトレーニングされたネットワークでは、このモデルは、正しい分類に対して一貫して高い確率値を出力し、その他の誤った分類に対しては低い確率値を出力します。ただし、このニューラル・ネットワークはまだトレーニングされていません。この時点では、重みとバイアスの初期値はランダムなので、予測は一般的に不正確です。
各フォワード・パスの後、「損失関数」は、特定の入力に対するモデルの予測出力と、その入力に対する正しい予測(または「グラウンド・トゥルース」)との差(または「損失」)を測定します。言い換えれば、モデルの実際の出力が望ましい出力とどの程度異なるかを測定します。
ラベル付きデータを使用する教師あり学習では、グラウンド・トゥルースは手動の注釈によって提供されます。ラベル付けされていないデータ・サンプルの一部をマスクまたは変換し、モデルにそれらを再構築させる自己教師あり学習では、元のサンプル自体がグラウンド・トゥルースとして機能します。
この損失関数の目的は、各入力に対するモデルの出力の誤差の性質と大きさの両方を適切に反映する方法で不正確さを定量化することです。損失に関するさまざまな数式は、特定のタスクに最適です。例えば、平均二乗誤差のバリアントは回帰問題に適しており、クロスエントロピー損失のバリアントは分類に適しています。
損失関数はニューラル・ネットワークの出力を入力として受け取り、そのニューラル・ネットワークの出力は個々のニューロンの多数のネストされた活性化関数を含む複合関数であるため、損失関数を微分するにはネットワーク全体を微分する必要があります。これを行うには、バックプロパゲーションで連鎖律を使用します。
「損失関数」「コスト関数」または「誤差関数」
いくつかの文脈では、損失関数の代わりにコスト関数または誤差関数という用語が使用され、「損失」の代わりに「コスト」または「誤差」が使用されることに注意してください。
機械学習の文献の中には、それぞれの用語に独自のニュアンスを割り当てているものもありますが、一般的には互換性があります。1目的関数は、最小化または最大化したい評価関数を表す広義の用語です。損失関数、コスト関数、またはエラー関数は、最小化したい項を具体的に示します。
最終層から始めて、「バックワード・パス」によって損失関数を微分し、ネットワークの個々のパラメーターが単一の入力の全体的なエラーにどのように寄与するかを計算します。
先ほどの分類器モデルの例に戻ると、最終層の5つのニューロンから始めます。これをL層と呼びます。各出力ニューロンのソフトマックス値は、入力がそのカテゴリーに属する可能性(最大1)を表します。完璧にトレーニングされたモデルでは、正しい分類を表すニューロンの出力値は1に近くなり、他のニューロンの出力値は0に近くなります。
ここでは、正しい予測を表す出力ユニットに焦点を当てます。これをLcと呼びます。Lcの活性化関数は、入力層から出力層までのニューラル・ネットワーク全体の多数のネストされた活性化関数を含む複合関数です。損失関数を最小化するには、ネットワーク全体で調整を行い、Lc の活性化関数の出力を1に近づける必要があります。
そのためには、前のレイヤーの変更が Lc 自身の出力をどのように変更するかを知る必要があります。言い換えれば、Lcの活性化関数の偏微分を見つける必要があります。
Lcの活性化関数の出力は、最後から2番目の層(ここでは層L-1と呼びます)のニューロンから受け取る寄与によって決まります。Lcの出力を変更する1つの方法は、L-1とLcのニューロン間の重みを変更することです。各L-1重みを他の重みに対して偏微分計算することで、重みのいずれかを増加または減少させると、Lcの出力が 1 に近づく(または遠ざかる)ことがわかります。
しかし、これはLcの出力を変更する唯一の方法ではありません。Lcが L-1 ニューロンから受け取る寄与は、L-1の出力値に適用される重みだけでなく、実際の(重み付け前の)出力値自体によっても決まります。L-1ニューロンの出力値は、L-2から受信する入力に適用された重みによって影響を受けます。したがって、L-1の活性化関数を微分して、L-2の寄与に適用される重みの偏導関数を見つけることができます。これらの偏導関数は、L-2の重みへの変更がL-1の出力にどのように影響し、それがその後Lcの出力値に影響し、それによって損失関数にどのように影響するかを示しています。
同じ論理で、L-2ニューロンがL-3ニューロンから受け取る寄与を調整することで、L-1ニューロンがL-2ニューロンから受け取る出力値に影響を与えることもできます。そこで、L-3の偏微分を求め、これを入力層に到達するまで再帰的にこのプロセスを繰り返します。完了すると、損失関数の勾配が得られます。これは、ネットワーク内の各重みとバイアス・パラメーターの偏導関数のベクトルです。
これで、単一のトレーニング用サンプルに対するフォワード・パスとバックワード・パスが完了しました。しかし、私たちの目標は、新しい入力に対して適切に一般化できるようにモデルをトレーニングすることです。そのためには、トレーニング後にモデルが予測を行うことになる入力の多様性と範囲を反映した、多数のサンプルでトレーニングを行う必要があります。
ネットワーク内の各重みとバイアス・パラメーターに関する損失関数の勾配が得られたので、勾配降下法を使用してモデル・パラメーターを更新することで、損失関数を最小化し、モデルを最適化できます。
損失関数の勾配が下がっていくと(降順)、損失は減少します。バックプロパゲーション中に計算した勾配には、すべてのモデル・パラメーターの偏導関数が含まれているため、損失を減らすために各パラメーターをどの方向に「ステップさせる」べきかがわかります。
各ステップは、トレーニング用データからのモデルの「学習」を反映します。私たちの目標は、最小勾配に達するまで重みを繰り返し更新することです。勾配降下アルゴリズムの目的は、勾配を最も効率的に下る特定のパラメーター調整を見つけることです。
学習率
各ステップのサイズは、学習率と呼ばれる調整可能なハイパーパラメーターです。効率的かつ効果的なトレーニングには、適切な学習率を選択することが重要です。
ニューラル・ネットワークの活性化関数は非線形であったことを思い出してください。一部の勾配は、ほぼU字型になることがあります。つまり、ある方向に進むと勾配は下に移動しますが、その方向に進むと最終的に勾配は上に移動します。
学習率が低いと、常に正しい方向に進むことが保証されますが、多くの変更を計算するには時間がかかり、計算コストも高くなります。学習率が高いと計算効率は高くなりますが、最小値を超えてしまうリスクがあります。
バッチ・サイズ
勾配降下法におけるもう1つの考慮事項は、重みを更新する頻度です。1 つのオプションは、トレーニング用データ・セット内のすべての例の勾配を計算し、それらの勾配の平均を取得して、それを使用してパラメーターを更新することです。このプロセスは、エラー率が安定するまで、一連のトレーニング・エポックで繰り返し実行されます。この方法はバッチ勾配降下法です。
トレーニング用データ・セットが非常に大きい場合(ディープラーニングでは通常そうなります)、バッチ勾配降下法では処理時間が非常に長くなります。重み更新の反復ごとに数百万のサンプルの勾配を計算するのは非効率的になります。確率的勾配降下法(SGD)では、各エポックで各ステップに1つのトレーニング用サンプルが使用されます。損失はエポックごとに変動する可能性がありますが、多くの更新を通じてすぐに最小値に収束します。
ミニバッチ勾配降下法は中間的なアプローチを表します。トレーニング用サンプルは固定サイズのバッチでランダムにサンプリングされ、その勾配が計算されて平均化されます。これにより、バッチ勾配降下法のメモリー・ストレージ要件が緩和されると同時に、SGDの相対的な不安定性も軽減されます。
基盤モデル、生成AI、機械学習のトレーニング、検証、チューニング、デプロイが容易になり、少量のデータを使用して、短時間でAIアプリケーションを開発できます。
AIの活用方法を新たに創造する:2万人を超えるAI専門家からなるIBMの多様なグローバル・チームは、お客様が迅速かつ自信を持ってAIと自動化を設計し、ビジネス全体に拡張できるよう支援します。独自のIBM watsonxテクノロジーとパートナーのオープン・エコシステムを連携して、倫理と信頼に基づいて、あらゆるクラウド環境にAIモデルを提供します。
IBMの次世代AIとデータのプラットフォームでAIの力を倍増します。
使いやすくなるフレームワークの助けを借りなくても、ニューラル・ネットワークの構築の基礎を学習します。
多層ニューラル・ネットワークを使用して人間の脳の複雑な意思決定能力を模倣する機械学習のサブセットであるディープラーニング(深層学習)について詳細を読む。ディープラーニングは、今日私たちの生活にあるAIアプリケーションのほとんどを動かしています。
予測アルゴリズムの誕生から現代のディープラーニングのマイルストーンに至るまでの簡単な歴史と基本概念など、AIとそのサブフィールドの重要な側面について詳しくご説明します。
¹ 「ディープラーニング」、Goodfellowら、MIT Press、2016年。