機械学習とニューラルネットワーク - ページ 50

 

ディープラーニングとは何ですか? (DL01)



ディープラーニングとは何ですか? (DL01)

ディープラーニングへようこそ!私はブライスです。コンピューター サイエンスのこのホットなトピックについて皆さんが学ぶお手伝いができることをうれしく思います。ディープラーニングは私たちの日常生活のいたるところにあります。ユーザーの顔を認識し、会話を理解し、お気に入りのプラットフォームでコンテンツを推奨するアルゴリズムはすべて深層学習に基づいています。

しかし、ディープラーニングとは一体何なのでしょうか?これには、機械学習のためのニューラル ネットワークと微分可能プログラミングの使用が含まれます。ニューラル ネットワークは、脳内のニューロンの動作にヒントを得た計算モデルです。それらはニューロンを表すノードとそれらの間の接続を表す有向エッジで構成され、各エッジにはその強度を示す重みがあります。ニューロンは、隣接するニューロンからの重み付けされた入力を合計して、ニューロンが活性化するかどうかを判断できます。

機械学習は人工知能とデータ サイエンスの交差点にあり、データから自動的にインテリジェントな推論を行うことを目的としています。アルゴリズムが問題を直接解決するように設計されている従来のコンピューター サイエンスとは異なり、機械学習ではデータの例によって問題の入力と出力を定義できます。次に、データセットから解を推測するアルゴリズムを実装します。

機械学習の問題は、回帰または分類に分類できます。回帰には、線形回帰など、連続入力を連続出力にマッピングする関数の推論が含まれます。一方、分類では、決定境界の推測など、入力ポイントに個別のラベルが割り当てられます。

ディープラーニングを使用すると、回帰と分類の側面を組み合わせた複雑な問題を解決できます。たとえば、オブジェクト認識には、画像を入力として受け取り、画像内のオブジェクトの境界ボックスとラベルを出力する関数の学習が含まれます。

ニューラル ネットワークをトレーニングするには、勾配降下法 (勾配に従って関数を最小化する手法) を使用します。これには、ニューラル ネットワークの活性化を区別する必要があります。ステップ関数のような活性化関数は微分には適していないため、シグモイド関数のような滑らかな近似を使用します。

ニューラル ネットワークのトレーニングと微分可能プログラミングの原理は、深層学習を超えて拡張されます。ニューロンは、重み付けされた合計を実行し、活性化関数を適用する単純なプログラムを計算するものと考えることができます。これは、数学的に演算して微分できる関数を深層学習モデルに組み込むことができる、微分可能プログラミングの概念につながります。

このコースでは、機械学習と確率的勾配降下法の基礎を理解するために、単純なニューラル ネットワークから始めます。徐々に複雑さを加えていき、ディープ ニューラル ネットワークと一般的な微分可能なプログラミングを探索していきます。その過程で、深層学習ライブラリの使用を練習し、制限と欠点について説明し、現実世界の問題に対して深層学習モデルを設計、適用、評価、批判できるように準備します。

学期の終わりまでに、ディープラーニングを使ってエキサイティングな課題に取り組み、その応用と影響を包括的に理解できるようになります。

What is Deep Learning? (DL 01)
What is Deep Learning? (DL 01)
  • 2022.08.24
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

ディープラーニングの前提条件 (DL 02)




ディープラーニングの前提条件 (DL 02)

ディープラーニングのコースを受講するには、コンピューター サイエンスと数学の背景が必要です。具体的には、データ構造、線形代数、多変数微積分のコースを受講している必要があります。これらの各前提条件の重要性をさらに詳しく見てみましょう。

この上級レベルの学部コンピューター サイエンス コースでは、プログラミングの背景を持つことが重要です。データ構造は、十分なプログラミング経験があることを保証するための前提条件として機能します。データ構造で遭遇するアルゴリズムの効率性に関連する概念を理解することも役立ちます。

このコースでは、私のビデオでは主に疑似コードを使用するか、計算を数学的に表現します。ただし、課題には Python と Julia の両方でプログラミングする必要があります。 Python は TensorFlow や PyTorch などの深層学習ライブラリに広く使用されているため、これらのツールを使用して練習することができます。一方、Julia は数学と計算の間のギャップを埋めるのに優れており、ニューラル ネットワークの内部動作を理解しやすくします。

数学的な観点から、線形代数と多変数微積分の概念を利用します。ただし、私たちが焦点を当てる特定の概念は、これらのコースで通常教えられる内容のほんの一部にすぎません。これらのコースのうち 1 つだけを受講したことがある場合は、他のコースから必要な概念を比較的すぐにキャッチアップできるはずです。

線形代数では、行列表記に慣れることが不可欠です。深層学習には、ベクトル、行列、高次元配列 (テンソル) の演算が含まれます。行列とベクトルの積、行列とベクトルへの関数の適用、ドット積やノルムなどの演算に習熟する必要があります。

多変数微積分は、コース全体で使用される重要な概念である勾配を理解するために非常に重要です。積の規則や商の規則など、基本的な微積分で学んだ規則を使用して、勾配を評価したり、偏導関数を取得したりすることに慣れている必要があります。

線形代数や多変数微積分の知識に自信がない場合は、これらのトピックのブラッシュアップに役立つ Grant Sanderson のビデオのプレイリストを提供します。プレイリスト内のハイライトされたビデオは、コースで使用する特定の概念をカバーしています。

これらの前提条件科目のしっかりとした背景を確実に身につけることで、コースの最初の週にアクティビティや課題に取り組み、深い学習を成功させる準備が整います。

Deep Learning Prerequisites (DL 02)
Deep Learning Prerequisites (DL 02)
  • 2022.08.24
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022Suggested linear algebra playlist: https://www.youtube.com/watch?v=fNk_zzaMoSs&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE...
 

単一のニューロンは何を計算できるのでしょうか? (DL03)



単一のニューロンは何を計算できるのでしょうか? (DL03)

ニューラル ネットワークは、膨大な数の接続を持つ多数のノードで構成されます。それらをより深く理解するために、個々のニューロンに焦点を当て、その機能、ニューロンが表現できるモデルの種類、およびこれらのモデルをトレーニングする方法を調べてみましょう。

ニューラル ネットワーク内のノードは入力を受け取り、単純な計算を実行して数値出力を生成します。この計算には 2 つの段階が含まれます。まず、入力に対応する重みを乗算して合計します。次に、重み付けされた入力の合計がアクティベーション関数に渡されて、出力が生成されます。

数学的には、出力は、重み付けされた入力の合計に活性化関数 (f で示される) を適用することによって取得されます。したがって、出力は、各重みに対応する入力とバイアス項を乗算した合計にアクティベーション関数を適用した結果になります。

バイアスにより、すべての入力がゼロであっても合計をゼロ以外にすることができます。バイアスを別の重みとみなして、ノードに入る追加の矢印で表すことができます。すべてのニューロンは入力に対して重み付けされた合計を実行しますが、異なるニューロンは異なる活性化関数を持つ可能性があります。

単一ニューロン モデルの場合、2 つの注目すべき活性化関数は線形関数とステップ関数です。線形活性化関数を使用するとニューロンは回帰を実行でき、ステップ関数を使用すると分類を実行できます。

単一入力を持つニューロンの場合、入力の重み付き合計は、入力に重みを乗算し、バイアスを加算することによって計算されます。選択した線形活性化関数 y = x により、重み (w1) パラメーターとバイアス (b) パラメーターを使用して x1 の任意の線形関数を表現できます。したがって、このニューロンは、1 次元の入力 (x1) と 1 次元の出力 (y) を使用して任意の線形関数を計算できます。

ニューロンにさらに多くの入力がある場合、マッピングは多次元入力に拡張されますが、回帰に適した線形関数のままになります。ただし、入力次元が増加するにつれて、関数の視覚化は困難になります。

2 つの入力を持つニューロンの場合、活性化としてステップ関数が使用されます。入力の重み付き合計は引き続き計算され、合計が正になるとアクティベーションが 0 から 1 に遷移します。活性化は区分関数を使用して説明でき、0 または 1 の出力をもたらす入力間の決定境界は、入力の加重合計が 0 に等しい場所になります。この設定は、ニューロンの出力に基づいて入力が 0 または 1 としてラベル付けされる分類タスクに適しています。

単一ニューロンを使用して回帰または分類を実行するには、入出力ペアで構成されるデータセットが必要です。選択される活性化関数は、出力がバイナリ (0 または 1) であるか連続であるかによって異なります。入力例の次元によって、単一ニューロン モデルの入力数と重みが決まります。

ニューラル ネットワークまたは単一ニューロンのトレーニングには、データからのモデルの偏差を定量化する損失関数の定義が含まれます。回帰タスクでは二乗誤差の合計を使用できますが、バイナリ出力を使用する分類タスクでは他の適切な損失関数を使用できます。

トレーニングの目標は、損失を最小限に抑え、モデルの精度を向上させる方法でパラメーター (重みとバイアス) を更新することです。勾配降下法は、パラメーターを更新して損失を減らすために使用される一般的な最適化手法です。

次のビデオでは、勾配降下法の概念と、それがパラメータの更新を容易にしてモデルのパフォーマンスを向上させる方法について詳しく説明します。

What can a single neuron compute? (DL 03)
What can a single neuron compute? (DL 03)
  • 2022.09.02
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

ニューロンをトレーニングする方法 (DL 04)



ニューロンをトレーニングする方法 (DL 04)

前回のビデオでは、単一ニューロンの計算について説明しました。ニューロンは、入力の重み付き合計を取得し、バイアスを追加し、活性化関数を適用することによって計算することを学びました。アクティベーションにステップ関数を使用するとバイナリ分類器が得られ、線形関数ではリグレッサーが得られます。

また、二乗誤差の合計を使用してデータセット上のモデルの損失を測定し、損失関数の勾配を使用してモデルをトレーニングすることについても説明しました。損失関数は、モデルのパラメーター、つまり重みとバイアスによって異なります。平均二乗誤差は、計算における損失関数としてよく使用されます。

損失関数がパラメーターにどのように依存するか、また損失を減らすためにパラメーターをどのように変更できるかを理解するために、小さな回帰データセットで損失を計算しました。正しい出力と予測された出力の差の二乗を合計することで、損失値が得られます。

次に、損失関数の勾配を見つけることに焦点を当てました。各パラメータに関する損失の偏導関数を導出しました。これらの偏導関数は勾配を形成し、これが損失の減少に役立ちます。勾配の反対方向にパラメーターを更新することで、損失を最小限に抑え、モデルによるデータセットの表現を改善できます。

私たちは損失関数をパラメータ空間の曲面として視覚化し、勾配が損失の最も急激な増加の方向をどのように示すかについて議論しました。勾配の反対方向に小さなステップを踏むことで、損失を繰り返し減少させ、モデルを改良することができます。

分類タスクでは、ステップ関数の活性化の導関数を取得するときに課題に遭遇しました。これを克服するために、ステップ関数をシグモイド関数と呼ばれる滑らかな近似に置き換えました。シグモイド関数の動作と、0 と 1 の間の確率的な出力を生成する機能について説明しました。

シグモイド関数を分類例に適用し、新しい活性化を使用して損失と勾配を計算する方法を示しました。パラメーターを更新してモデルを改善するプロセスは回帰の場合と同じです。

最後に、同じ公式を複数の重みとデータポイントに適用することで、議論した概念をより高い次元に拡張できることを強調しました。損失の計算、勾配の計算、パラメーターの更新の一般原則は、入力の次元に関係なく適用されます。

全体として、単一ニューロンの計算、損失関数、勾配を理解することは、ニューラル ネットワークをトレーニングし、パフォーマンスを向上させるための基礎となります。

How to train your neuron (DL 04)
How to train your neuron (DL 04)
  • 2022.09.03
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

データ分析パイプライン (DL 05)



データ分析パイプライン (DL 05)

ディープラーニングのクラスでは、ニューラル ネットワークの研究を深く掘り下げていきます。ただし、ニューラル ネットワークや機械学習モデルは、より大きなシステムの一部にすぎないことを覚えておくことが重要です。データをニューラル ネットワークにフィードする前に、データを収集し、ネットワークが理解できる形式に処理する必要があります。同様に、ニューラル ネットワークの出力には、後処理やさらなる分析が必要になることがよくあります。

学期を通して、データ分析パイプラインの比喩を覚えておくと役立ちます。この例えは、機械学習の目標は世界の観察を世界の予測に変換することであり、ニューラル ネットワークはこのプロセスの 1 ステップにすぎないことを強調しています。パイプラインは、データが通過する段階と、各段階が次の段階にどのように寄与するかを考慮することを思い出させます。

問題が異なれば、パイプラインの異なる段階が必要になります。標準化またはシミュレートされたデータセットを使用すると、特定の段階をスキップできる場合がありますが、ディープラーニングを実際に応用するには、データ分析の実践的な側面を考慮する必要があります。

データ分析パイプラインのいくつかの重要な側面について詳しく説明しましょう。最初の段階はデータ収集です。場合によっては既存のデータセットを使用できますが、ディープ ラーニングで新しい問題を解決したい場合は、どのデータがモデルのトレーニングに適しているかを判断する必要があります。データを収集するときは、ディープ ラーニングの最近の成功が大規模なデータセットに依存していることを考慮して、十分な量を確保する必要があります。ただし、特に計算リソースが限られている場合には、データが多すぎることもあります。場合によっては、特に調査や問題の発見の際に、限られた量のデータを操作することが有益な場合があります。トレーニングに使用するデータセットが、解決しようとしている問題を確実に表していることを確認することが重要です。これには、分類タスクにおけるすべての必要なクラスの表現などの要素を考慮することや、モデルが認識すべき重要な外れ値を見逃さないことが含まれます。

もう 1 つの課題は、データセット内の系統的な偏りを特定することです。晴れた日に撮影された画像が過剰に表現されるなど、さまざまな方法でバイアスが発生する可能性があり、曇りの状況では画像分類器が困難になります。バイアスは健康や教育に関連する予測にも影響を及ぼし、個々の要因がより広範な社会構造に起因する可能性があります。データ収集中に潜在的なバイアスに留意することが重要です。ただし、バイアスに対処して修正することは複雑な問題であり、深層学習の継続的な研究が必要です。

データを収集した後、機械学習やその他の処理技術を適用する前にデータをクリーンアップする必要があることがよくあります。このステップには、欠損データの処理、データのどの次元が関連するかの決定、およびサンプル間のさまざまな次元の処理が含まれます。データの適切なラベル付けは教師あり学習にとって非常に重要です。適切なラベルを取得することは、特に手話の文字起こしや音声とテキストの不一致に対処する場合に困難になることがあります。ラベルは、モデルに学習させたいデータの側面を正確に表す必要があります。

次に、データをニューラル ネットワークまたは機械学習モデルのトレーニングに適した数値形式に変換する必要があります。ニューラル ネットワークは、ベクトルまたは行列の形式で数値入力を期待します。数値符号化のプロセスは問題によって難易度が異なります。たとえば、コンピューターですでに使用されているピクセルベースの表現により、画像データの処理は比較的簡単です。ただし、ASCII 形式でエンコードされたテキスト データを処理するには、別の表現が必要です。問題が複雑になるにつれて、データ表現、さらには次元の変換がますます重要になります。

さらに、特にニューラル ネットワークが 0 から 1 の範囲の値を出力する傾向がある場合、データを正規化すると有益な場合があります。正規化には、データ値の範囲をスケーリングして、ニューラル ネットワークへの入力が互いに近づくようにすることが含まれます。ニューラル ネットワークの出力後、後処理ステップを実行する必要がある場合があります。これには、ネットワークの出力を目的の予測形式にデコードすること、予測の信頼性を伝えること、モデルの予測を使用するアプリケーションやアルゴリズムを検討することが含まれます。

データを処理してニューラル ネットワークをトレーニングしたら、評価と調整の段階に進むことができます。ここでモデルのパフォーマンスを評価し、改善を加えます。評価には、前に用意したテスト セットの使用が含まれます。トレーニング済みのニューラル ネットワークをこの目に見えないデータに適用することで、それが新しい例にどの程度一般化されるかを測定できます。通常、精度、適合率、再現率、F1 スコアなどの指標を使用してモデルのパフォーマンスを評価します。これらのメトリクスは、ニューラル ネットワークがどの程度効果的に予測を行っているかについての洞察を提供します。

評価結果に基づいて、モデルのパフォーマンスが低下している領域や限界を示している領域を特定できます。この情報は、必要な調整や改善を行う際に役立ちます。モデル アーキテクチャ、ハイパーパラメータを反復処理したり、必要に応じて追加データを収集したりすることもできます。目標は、モデルのパフォーマンスを改良し、必要な精度と信頼性を確実に達成することです。

チューニング プロセスでは、モデルのパフォーマンスを最適化するために、さまざまな構成や設定を試します。これには、学習率、バッチ サイズ、正則化手法などのハイパーパラメータの調整が含まれます。体系的な探索と実験を通じて、ニューラル ネットワークの効果を最大化する最適な設定の組み合わせを見つけることを目指しています。

モデル自体を微調整することに加えて、そのアプリケーションのより広範なコンテキストも考慮します。私たちは、解決しようとしている特定の問題と、モデルの予測が現実世界に与える影響を考慮します。これには、モデルを実際に展開する際の社会的、倫理的、法的側面を調査することが含まれます。モデルが公平で偏りがなく、問題領域の価値観や要件と一致していることを確認することが重要です。

ディープラーニングの実践者としての私たちの責任は、正確なモデルの開発だけにとどまりません。私たちは、潜在的なバイアスや制限を考慮して、結果を批判的に分析して解釈する必要があります。長期にわたりモデルの有効性を維持するには、モデルのパフォーマンスを定期的に再検討して再評価することが必要です。

ディープ ラーニング クラスでニューラル ネットワークを学習するには、ニューラル ネットワークがより大きなシステムの一部であることを理解する必要があります。データ収集から前処理、トレーニング、評価に至るデータ分析パイプラインには、慎重な検討が必要な複数の段階が含まれます。プロセス全体に注意を払い、モデルを継続的に改善することで、深層学習の力を効果的に活用して、正確な予測を行い、現実世界の問題を解決することができます。

The Data Analysis Pipeline (DL 05)
The Data Analysis Pipeline (DL 05)
  • 2022.09.09
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

サンプル外検証 (DL 06)



サンプル外検証 (DL 06)

機械学習では、モデルの評価には、新しい予測を作成し、それを目に見えないデータでテストすることが含まれます。このディスカッションでは、データを効果的に使用して機械学習モデルを検証および改善する方法を検討します。

モデル選択のプロセスは、特定の問題を解決するために利用可能なオプションを特定することから始まります。これは、モデルが表現できる関数のタイプを定義するモデルの仮説空間の概念につながります。仮説空間は、選択された入力表現や必要な出力タイプなどの要因によって制約されます。

特定のモデルまたは機械学習アルゴリズムを選択したら、モデルのさまざまな側面を調整できます。これには、データを使用してトレーニングされる重みやバイアスなどのモデルのパラメーターの調整が含まれます。さらに、学習率や反復回数などの他の側面も、モデルのパフォーマンスに影響を与えるハイパーパラメーターと見なすことができます。

さまざまなオプションを効果的に探索およびテストするために、実験による検証に頼っています。これには、データセットをトレーニング セットとテスト セットに分割することが含まれます。トレーニング セットはモデルをトレーニングするために使用され、テスト セットは目に見えないデータでのパフォーマンスを評価するために使用されます。テスト セットのさまざまなモデルまたはハイパーパラメータを比較することで、新しいデータへの一般化においてどれがより効果的であるかを判断できます。

私たちの目標は、新しい未知のデータを正確に予測できるモデルを開発することであるため、一般化は機械学習の重要な側面です。モデルがトレーニング データに特化しすぎるオーバーフィッティングは、適切な一般化を達成する上での一般的な課題です。サンプル外検証のためにデータの一部を分離することで、モデルが過剰適合しているか、または正常に一般化しているかを評価できます。

複数のハイパーパラメータを調査する場合、それらの値を系統的に変更したり、妥当な範囲からランダムにサンプリングしたりできます。ランダム化により、より広範囲の値を効率的に探索できるようになります。ただし、広範な実験によりテスト セットが過剰適合する場合は、データをトレーニング、検証、テスト セットにさらに分離するか、相互検証の使用が必要になる場合があります。

相互検証には、データを複数のサブセットに分割し、これらのサブセットのさまざまな組み合わせでモデルのトレーニングとテストを繰り返し行うことが含まれます。このアプローチにより、モデルのパフォーマンスと汎化能力のより堅牢な推定が可能になります。

機械学習の重要なアイデアは、トレーニング データとテスト データを分離してモデルを実験的に検証することです。これにより、まだ見たことのない例でパフォーマンスを評価し、モデルの選択とハイパーパラメーターの調整について情報に基づいた意思決定を行うことができます。

Out-of-Sample Validation (DL 06)
Out-of-Sample Validation (DL 06)
  • 2022.09.09
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

フィードフォワード ニューラル ネットワーク (DL 07)



フィードフォワード ニューラル ネットワーク (DL 07)

ニューラル ネットワークは、単一のニューロンとは異なり、複数の層で構成され、ノードを通じて計算を実行します。各ノードは入力の加重合計を計算し、活性化関数を適用します。ニューラル ネットワークでは、ノードの入力は以前のノードのアクティブ化から得られ、その計算されたアクティブ化は後のノードに渡すことができます。

たとえば、ネットワーク内のニューロン 8 は、ニューロン 5、6、および 7 から入力を受け取ります。ニューロン 8 によって実行される入力の重み付き合計は、それらのニューロンの活性化に対応する重みを乗じた合計にバイアスを加えたものです。次に、活性化関数が加重和に適用されます。ニューロン 8 からの出力は、ノード 11 および 12 の入力として使用されます。ニューラル ネットワークでは、双曲線正接や整流線形単位 (ReLU) などのさまざまな活性化関数を使用できます。

予測を行うためにニューラル ネットワークを使用して計算を実行するには、入力データに基づいて入力層ノードのアクティブ化を設定することから始めます。入力層ノードは単に入力ベクトルの値を格納します。入力層と出力層のサイズは、データの次元と必要な予測によって異なります。ネットワーク内の隠れたニューロンは層に編成され、入力と出力の間で計算を実行します。各層のアクティベーションを計算することで、前のアクティベーションを参照して入力を次の層に渡すことができます。これらのアクティベーションは、重みの更新中の勾配降下にも必要です。ニューラル ネットワークに隠れ層が存在すると、非線形活性化関数を使用できるようになります。線形アクティベーションは、マルチレイヤ ネットワークでは何の利点もありません。シグモイド関数などの非線形活性化関数を使用すると、さまざまな関数を表現できます。

AND、OR、NOT などの論理演算を表すニューロンは、ステップ関数分類子を使用して構築できます。シグモイド アクティベーションを使用してこれらの論理演算を近似することにより、ニューラル ネットワークは任意のブール関数を表現できます。ニューラル ネットワークをトレーニングするには、勾配降下法を使用して重みとバイアスを更新します。ネットワークのパラメーターには、ネットワーク全体のすべての重みとバイアスが含まれます。複数の出力ニューロンを持つネットワークの損失関数は、すべての出力ニューロンを合計した平均二乗誤差になります。目標は、パラメータを繰り返し更新することで損失を減らすことです。

勾配降下法は、パラメータに関する損失の勾配を計算し、勾配の反対方向にステップを踏んで損失を最小限に抑えることによって実行されます。このプロセスはバックプロパゲーションとして知られており、ネットワークが学習して予測を改善できるようになります。次のビデオでは、ニューラル ネットワーク上で勾配降下法更新を実行するために使用されるバックプロパゲーション アルゴリズムの詳細を詳しく説明します。バックプロパゲーションにより、ネットワークのパラメータに関する損失の勾配を効率的に計算できます。

このプロセスは、出力の活性化に関する損失関数の勾配を計算することから始まります。この勾配は、出力活性化の変化に対する損失の感度を表します。損失は活性化関数による出力活性化と目標値との差の二乗に依存するため、連鎖則を適用することで求めることができます。出力の活性化に関する損失の勾配が計算されると、それはネットワークを通じて逆方向に伝播されます。各層で、入力の加重和に対する活性化関数の微分値が勾配に乗算されます。この導関数は、加重合計の変化に対するアクティベーションの感度を捕捉します。

勾配を逆方向に伝播することにより、前の層の活性化に関する損失の勾配を計算できます。これらの勾配は、前の層の各アクティベーションが損失にどの程度寄与しているかを示します。アクティベーションに関する損失の勾配を使用して、各層の重みとバイアスに関する損失の勾配を計算できます。これらの勾配は、前の層の活性化に活性化関数の対応する勾配を乗算することによって取得されます。最後に、パラメーターに関する損失の勾配を使用して、勾配降下法アルゴリズムを使用して重みとバイアスを更新できます。勾配とは逆の方向にステップを実行することで、ネットワークのパラメータを徐々に最適化し、損失を最小限に抑えます。

この順方向伝播、逆方向伝播、およびパラメータ更新の反復プロセスは、特定のエポック数の間、または損失が満足のいく値に収束するまで繰り返されます。このトレーニング プロセスを通じて、ニューラル ネットワークは、提供されたトレーニング データに基づいて重みとバイアスを調整することで、より適切な予測を行う方法を学習します。

ニューラル ネットワークは、複数の層と非線形活性化関数を利用して、複雑な計算を実行し、予測を行います。バックプロパゲーション アルゴリズムと勾配降下法を採用することで、ニューラル ネットワークはデータから学習し、パラメーターを最適化して予測能力を向上させることができます。

Feed-Forward Neural Networks (DL 07)
Feed-Forward Neural Networks (DL 07)
  • 2022.09.16
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

ニューラル ネットワーク逆伝播 (DL 08)



ニューラル ネットワーク逆伝播 (DL 08)

このビデオでは、確率的勾配降下法のステップを通じてニューラル ネットワークをトレーニングするために使用される逆伝播アルゴリズムを導出します。アルゴリズムは 3 つの主要なステップで構成されます。

まず、フィードフォワード パスを実行して、データ ポイントに対して予測を行います。これらの予測によって損失が決まります。損失は、予測された出力と実際の出力の間の誤差を表します。次に、逆方向パスを実行して、損失の偏導関数を計算します。出力層と隠れ層の各ニューロンについて「デルタ」と呼ばれる量を計算します。デルタは、そのニューロンでの入力の加重和に関する損失の偏導関数を表します。連鎖ルールを適用すると、損失への影響を考慮して各ニューロンのデルタを計算できます。

出力層ニューロンのデルタを計算するには、活性化関数の導関数とターゲットと活性化の差を使用します。この計算では、損失と入力の加重合計との関係が考慮されます。隠れ層ニューロンの場合、次の層のニューロンへの影響を考慮し、次の層のノードからの寄与を合計し、重みと活性化導関数を乗算することでデルタを再帰的に計算します。すべてのニューロンのデルタを計算したら、それらを使用して重みとバイアスの偏導関数を計算できます。

各重みの偏導関数は、対応するデルタと前の層のニューロンの活性化の積です。同様に、各バイアスの偏導関数は、対応するデルタに等しくなります。

勾配降下法を実行するには、バッチと呼ばれるデータ ポイントのサブセットにわたって偏導関数を平均します。このアプローチは確率的勾配降下法として知られています。平均偏導関数に学習率を乗算して重みとバイアスを更新することで、損失を最小化する方向にパラメータを移動します。

実際には、すべてのデータ ポイントのデルタと偏導関数を計算する代わりに、ランダムなバッチを使用した確率的勾配降下法を使用することがよくあります。データのサブセットをランダムにサンプリングし、そのサブセットの平均損失とその勾配を計算し、それに応じてパラメーターの更新を実行します。これにより、特に大規模なデータセットの場合、トレーニング プロセスが高速化されます。

バックプロパゲーション アルゴリズムは、順方向パスと逆方向パスを組み合わせてデルタと偏導関数を計算し、それらは確率的勾配降下法の更新に使用されます。パラメーターを繰り返し更新することで、ニューラル ネットワークは損失を最小限に抑え、予測を改善することを学習します。

Neural Network Backpropagation (DL 08)
Neural Network Backpropagation (DL 08)
  • 2022.09.20
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022Re-upload, because I got sloppy with notation at the end and gave an incorrect formula for the bias update!
 

分類の活性化と損失の改善: ソフトマックスとカテゴリカルクロスエントロピー (DL 09)



分類の活性化と損失の改善: ソフトマックスとカテゴリカルクロスエントロピー (DL 09)

シグモイド ニューロンを含むニューラル ネットワークを使用してマルチクラス分類を実行する場合、特定の制限が発生します。以前は、2 つのクラスのみを扱う場合、1 つのニューロンは 0 または 1 を出力できました。しかし、手書きの数字を 0 から 9 に分類する場合など、複数のラベルが関係する場合は、別の表現が必要になります。

一般的なアプローチの 1 つは、ラベルをワンホット ベクトルとしてエンコードすることです。この場合、各ラベルは独自の次元を持ち、一度に 1 つの次元だけがアクティブになります。たとえば、5 次元ベクトルは 5 つの可能なラベルを示し、次元 4 がアクティブになって 4 番目のラベルを表す場合があります。シグモイド ニューロン ベースの出力層はこのタイプの出力を生成できる可能性がありますが、実際上問題があります。

最初の問題は、シグモイド層が複数のラベルに対して比較的大きな値を出力する可能性があり、予測の解釈が困難になる可能性があることです。理想的には、出力層が 0 と 1、またはさまざまな可能なラベルの信頼性を反映するものを生成するようにしたいと考えます。 2 番目の問題は、シグモイド出力層のトレーニング中に発生します。ターゲットがワンホット ベクターの場合、勾配降下法を使用して、正しいラベルの場合は 1 に向かって、その他のラベルの場合は 0 に向かってアクティベーションをプッシュします。ただし、シグモイド関数の性質により、誤差が大きいニューロンのデルタは小さくなる可能性があるため、間違った予測を自信を持って修正することが困難になります。

勾配消失問題として知られる同様の問題は、隠れニューロンにシグモイド活性化を使用する場合にも発生します。ただし、このビデオでは、これらの問題に対処するために、出力アクティベーションと損失関数の別の組み合わせに焦点を当てます。シグモイド アクティベーションの代わりに、出力層にソフトマックス アクティベーションを導入します。ソフトマックス アクティベーションはレイヤー全体で計算され、入力間の差異が拡大され、アクティベーションの合計が 1 になるように正規化されます。これにより、予測としてより解釈しやすい出力が得られ、考えられる各ラベルに対するネットワークの信頼度として見ることができます。

ソフトマックスアクティベーションを効果的に使用するために、ソフトマックスアクティベーションをカテゴリカルクロスエントロピー損失関数と組み合わせます。クロス エントロピー ロスは、ターゲット ニューロンの活性化の負の対数を計算します。ワンホット ベクトルを使用する場合、これは活性化の対数に単純化されます。この組み合わせにより、効果的な勾配降下法更新が可能になります。出力層のデルタを計算するには、アクティベーションに関する損失の偏導関数を導出します。ターゲット ニューロンの場合、導関数は -1 を活性化で割ったものになります。他のニューロンの導関数はゼロです。ソフトマックス活性化の相互依存性により、ターゲット ニューロンのみが非ゼロ導関数を持つ場合でも、すべての入力に対して非ゼロ デルタが取得されます。

これらの式を使用すると、ターゲット ニューロンと出力層内の他のニューロンの両方のデルタを計算できます。ターゲット ニューロンのデルタは、活性化から 1 を引いたものであるため、簡単に計算できます。他のニューロンのデルタは、負の活性化そのものに単純化されます。

ソフトマックス活性化とカテゴリカルクロスエントロピー損失のこの組み合わせにより、分類問題に対して意味のある出力が得られ、正しい予測に向けて出力を効率的に推進する勾配が得られます。ソフトマックス アクティベーションとカテゴリカル クロス エントロピー損失を使用すると、マルチクラス分類のための強力なフレームワークが得られます。これらのコンポーネントがどのように連携してニューラル ネットワークの効果的なトレーニングを可能にするのかをさらに詳しく見てみましょう。

出力層のデルタを計算したら、これらのデルタは逆伝播の開始点として機能し、誤差勾配をネットワークを通じて逆方向に伝播して重みを更新します。出力層を前の層に接続する重みを更新するには、デルタ値を使用し、勾配降下法アルゴリズムを適用します。重みの更新は、各出力ニューロンのデルタに対応する重みの入力活性化を乗算し、重みを学習率で調整することによって決定されます。

ネットワークを通じてデルタを逆伝播することにより、隠れ層の重みの勾配も計算できます。これにより、それに応じて隠れ層の重みを更新し、ネットワークのパフォーマンスをさらに改善することができます。ソフトマックス アクティベーションとカテゴリカル クロスエントロピー損失を使用する場合、ソフトマックスが出力層にのみ適用されるようにする必要があることに注意することが重要です。隠れ層の場合は、ReLU (Rectified Linear Unit) や Tanh などの活性化関数を使用することをお勧めします。 Softmax アクティベーションにより、各クラスの確率または信頼スコアとして解釈可能な出力を取得できます。出力ベクトルの値の合計は 1 になり、ネットワークの予測の信頼度を測定できるようになります。値が大きいほど、特定のクラスの信頼度が高いことを示します。

カテゴリカルなクロスエントロピー損失は、予測された確率と真のラベル間の不一致を効果的に測定することにより、ソフトマックスの活性化を補完します。これにより、ネットワークが予測確率とワンホット エンコードされたターゲット ベクトルの差を最小限に抑えることが奨励され、ネットワークがより正確な予測に向けて推進されます。

ソフトマックスの活性化とカテゴリカルクロスエントロピー損失を組み合わせることで、いくつかの利点が得られます。意味のある解釈可能な出力が得られ、さまざまなクラスに対するネットワークの予測と信頼レベルを理解できるようになります。カテゴリカルなクロスエントロピー損失から導出された勾配は、より効果的な学習と精度の向上につながる方法で重みの更新をガイドします。他にも活性化関数と損失関数があり、それぞれがさまざまな種類の問題に適していることに注意してください。ただし、カテゴリカルクロスエントロピー損失を伴うソフトマックスアクティベーションは、マルチクラス分類タスクの組み合わせとして成功し、解釈可能性と効果的なトレーニングダイナミクスの両方を提供することが証明されています。

要約すると、マルチクラス分類ニューラル ネットワークでソフトマックス アクティベーションとカテゴリカル クロスエントロピー損失を使用すると、意味のある予測を取得し、信頼水準を解釈し、効率的な勾配降下法更新を実行できるようになります。この組み合わせは、さまざまな分類タスクで正確で信頼性の高い結果を達成する上で重要な役割を果たします。

Better Activation & Loss for Classification: Softmax & Categorical Crossentropy (DL 09)
Better Activation & Loss for Classification: Softmax & Categorical Crossentropy (DL 09)
  • 2022.09.23
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

ベクトル化によるニューラル ネットワークの高速化 (DL 10)



ベクトル化によるニューラル ネットワークの高速化 (DL 10)

ニューラル ネットワークの内部動作を理解するには、個々のニューロンのレベルを詳しく調べ、ニューロン間の接続を考慮することが有益です。アクティベーションを計算する前方パスとデルタを計算する後方パス中に、ノードとエッジの観点から考えると、直感を構築するのに役立ちます。ただし、ディープラーニングは実際にはこのようには機能しません。効率的にトレーニングできる大規模なニューラル ネットワークを構築するには、より高い抽象レベルに移行し、ベクトル、行列、テンソルの観点から考える必要があります。

このより高いレベルの抽象化に向けた最初のステップは、レイヤーのアクティベーションをベクトルとして表すことです。ニューラル ネットワークがレイヤーに編成されている場合、レイヤーのアクティベーションをベクトルに収集できます。たとえば、ベクトル A^l は、層 l のすべてのアクティベーションを、その層に存在するノードと同じ数のエントリとともに格納します。同様に、バックプロパゲーション中にレイヤーのデルタをベクトルに収集できます。ベクトルを使用して、レイヤーのバイアスまたは入力を表すこともできます。

このベクトル化された表記で計算を表現するために、まずノードが入力の重み付き合計を計算する方法を考えてみましょう。ノード 5 のアクティベーション関数に入力される入力 X^5 は、前の層のアクティベーションにバイアスを加えた加重合計として計算されます。前の層のアクティベーションをベクトル A^K に収集し、重みのベクトルをノード 5 に入力することにより、入力の重み付き合計をこれら 2 つのベクトルの内積として表すことができます。ドット積を記述するもう 1 つの方法は、最初のベクトルを転置し、行ベクトルと列ベクトルの間で行列の乗算を実行することです。したがって、ノード 5 への入力は、ノード 5 に入力される重みベクトル (転置) に、前の層のアクティベーション ベクトルとノード 5 のバイアスを乗算したものとして表現できます。

このベクトル化された表記法はさらに進化し、層 l への入力のベクトル全体を一度に計算できるようになります。ノード 5 の重みの行ベクトルをその層の他のニューロンの重みの行ベクトルと組み合わせることで、層 K から層 l までのすべての重みを含む行列が得られます。この重み行列には、層 l のノードと同じ数の行 (各行は層 l ニューロンの 1 つへの重みのベクトルを表します) と、前の層 K のノードと同じ数の列があります (各列は重みのベクトルを表します)重みは層 K ノードの 1 つから得られます)。この重み行列に層 K のアクティベーション ベクトルを乗算すると、各要素が層 l ノードの 1 つの入力の重み付き合計を表すベクトルが得られます。活性化関数の入力を取得するには、ベクトルに収集されたこのベクトルにバイアスを追加します。

ここで、行列とベクトルの乗算、ベクトル加算、および要素ごとの関数を使用して、層へのすべての入力を計算する演算を表現できます。以前は、これらの計算には入れ子になったループが必要でしたが、現在はベクトル化された方法で効率的に実行できるようになりました。

今後は、このベクトル化されたアプローチを後方パスにも拡張できます。一度に 1 つのニューロンを考慮する代わりに、層 K のノードのデルタを、次の層のすべてのデルタの加重和にそのノードの活性化関数の導関数を乗算して計算できます。繰り返しますが、この加重合計を内積として表すことができます。ノード 3 から出力される重みの行ベクトルに層 l のデルタのベクトルを乗算し、さらに活性化導関数を乗算することで、層 K のデルタ ベクトルを計算できます。層のすべての重みを収集する重み行列を使用することにより、 l 個のニューロンとそれに層 l のデルタのベクトルを乗算すると、次元が重み行列と一致する行列を取得できます。

行列演算を活用することで、フィードフォワードの高密度接続ニューラル ネットワークのコンピューティングで大幅なパフォーマンスの向上を達成できます。これは、行列演算をグラフィックス プロセッサ (GPU) などの特殊なハードウェアで効率的に実行でき、これらの計算を大幅に高速化できるため、特に有利です。

行列を使用してニューラル ネットワークの計算を表すと、前方パス、後方パス、および重みの更新を非常に効率的かつ並列化された方法で実行できます。主要な手順を要約してみましょう。

  1. フォワード パス: 行列ベクトルの乗算と要素ごとの活性化関数の適用を実行することで、データのバッチ全体の各層の活性化を計算できます。アクティベーションをマトリックスに編成し、各列が異なるデータ ポイントのアクティベーションを表すことで、バッチ全体のアクティベーションを効率的に計算できます。

  2. バックワードパス: 同様に、ベクトル化された方法で各レイヤーのデルタ (誤差勾配) を計算できます。デルタを行列として表し、各列が特定のデータ ポイントのデルタに対応することで、行列とベクトルの乗算と活性化導関数を使用した要素ごとの乗算を実行して、バッチ全体のデルタを効率的に計算できます。

  3. 重みの更新: 重みとバイアスを更新するには、行列演算を使用して、デルタの行列と重み行列の転置の間の内積を計算します。この操作により、重み更新の行列が生成されます。各エントリは、特定の重みの更新を表します。ドット積をバッチ サイズで割ることで平均更新を取得し、学習率と平均更新を乗算した値を減算することで重みを更新できます。バイアスの更新は、列全体のデルタ ベクトルの平均を取得し、その平均を乗算した学習率をバイアスから減算することによって計算されます。

これらの計算をベクトル化し、行列演算を活用することで、大幅な計算効率を達成し、並列処理にハードウェア アクセラレーションを活用できます。このアプローチにより、大規模なニューラル ネットワークを効率的にトレーニングできるようになり、幅広いタスクやデータセットでディープ ラーニングを実行できるようになります。

本文では行列演算のベクトル化と活用について概要を説明しましたが、実際の実装の詳細は使用するプログラミング言語やフレームワークによって異なる場合があることに注意してください。さまざまな言語やフレームワークには、行列演算用に独自に最適化された関数やライブラリがあり、パフォーマンスがさらに向上する場合があります。

ディープ ラーニングで行列演算を活用すると、パフォーマンス上の利点に加えて、次のような利点もあります。

  1. 単純さとコードの読みやすさ: 行列演算を使用することで、ニューラル ネットワーク計算のコードがより簡潔になり、理解しやすくなります。個々のデータ ポイントに対して明示的なループを記述する代わりに、行列演算を使用して、よりコンパクトで直感的な形式で計算を表現できます。

  2. ソフトウェアの互換性: TensorFlow や PyTorch などの多くの一般的な深層学習フレームワークやライブラリは、行列演算の効率的な実装を提供します。これらのフレームワークは、多くの場合、BLAS (基本線形代数サブプログラム) や cuBLAS (CUDA 基本線形代数サブプログラム) などの最適化された線形代数ライブラリを利用して、CPU または GPU での行列計算を高速化します。これらのフレームワークを活用することで、最適化された実装の恩恵を受け、深層学習パイプラインの他のコンポーネントとの互換性を確保できます。

  3. 他の層タイプへの一般化: 行列演算は、密に接続された層だけでなく、畳み込み層や再帰層などの他の層タイプにも適用できます。計算を行列形式で表現することにより、異なる層タイプにわたって同じ効率的な行列演算と最適化を利用でき、実装が簡素化され、全体的なパフォーマンスが向上します。

  4. ハードウェア アクセラレーションとの統合: GPU やテンソル プロセッシング ユニット (TPU) などの特殊なハードウェアは、行列計算を高速化するように設計されています。これらのハードウェア アクセラレータは、大規模な並列行列演算の実行に優れており、ディープ ラーニング ワークロードに最適です。行列演算を利用することで、これらのハードウェア アクセラレータとシームレスに統合し、その機能を最大限に活用することができ、トレーニングと推論時間の大幅な高速化につながります。

要約すると、ディープ ラーニングで行列演算を活用すると、パフォーマンス上の利点、コードの簡素化、ソフトウェアの互換性、ハードウェア アクセラレータとの統合が得られます。ニューラル ネットワークの計算を行列形式で表現し、最適化された行列演算を利用することで、さまざまなタスクやプラットフォーム上で深層学習モデルを効率的にトレーニングし、展開することができます。

Making Neural Networks Fast with Vectorization (DL 10)
Making Neural Networks Fast with Vectorization (DL 10)
  • 2022.09.23
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022