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

 

アダムオプティマイザー (DL 21)



アダムオプティマイザー (DL 21)

この講義の目的は、確率的勾配降下法 (SGD) の弱点に対処する方法を示し、ニューラル ネットワークのトレーニングに広く使用されている Adam オプティマイザーを紹介することです。

SGD では、学習率の積と、トレーニング対象となる各バッチのその重みに関する損失の偏導関数を減算することで、ニューラル ネットワーク内の各重みを更新します。このプロセスでは、損失の負の勾配の方向にステップを踏み、損失を徐々に最小化します。ただし、SGD は、その有効性を妨げるいくつかの障害モードに遭遇する可能性があります。

これらの問題を説明するために、損失を最小限に抑えることを目的とした 1 次元の例から始めます。この場合、SGD は勾配の方向に従って下り坂を進み、徐々に最小値に近づきます。ただし、SGD が役に立たないシナリオもあります。勾配がゼロである極小値に到達すると、その点から離れることはありません。同様に、損失関数のプラトーにあると、勾配もゼロになり、進歩が妨げられます。異なるバッチでのトレーニングによる確率論は、極小値やプラトーを回避するのに役立つ場合がありますが、これらの問題を完全に解決するわけではありません。

複数の重み次元を使用したニューラル ネットワークのトレーニングなど、高次元の最適化問題では、さらなる課題が発生します。異なる方向に極小値と極大値がある鞍点では、勾配がゼロになり、学習が遅くなる可能性があります。さらに、異なる次元にわたる偏導関数のスケールの不一致により、勾配降下中にジグザグの動作が発生し、オーバーシュートや収束の遅延が発生する可能性があります。

Adam オプティマイザーは、2 つの重要なアイデアでこれらの問題に対処します。 1 つ目は勢いです。これは、同じ方向にいくつかのステップが実行された場合に、同じ方向に進み続けることを好みます。勢いはプラトーを克服するのに役立ち、アルゴリズムを鞍点から遠ざけるように導くことができます。 2 番目のアイデアには、偏導関数と 2 乗偏導関数の移動平均を維持することが含まれます。偏導関数の二次モーメント (分散) を推定することで、各次元で実行されるステップを正規化し、ジグザグやオーバーシュートを減らすことができます。

Adam 更新ルールは、重み更新の偏導関数項を、偏導関数の移動平均 (v) を二乗偏導関数 (s) の移動平均の平方根で割った値と小さな定数 (イプシロン) で置き換えます。ゼロ除算を避けるため。この更新ルールにより、ディメンション全体でよりバランスの取れたステップが保証され、ニューラル ネットワークのトレーニングでは標準の SGD よりも効果的であることが証明されています。

Adam オプティマイザーは、運動量を組み込み、偏導関数の移動平均を維持することにより、SGD の制限に対処します。これらの変更により、ジグザグ動作やオーバーシュートを軽減しながら、極小値、プラトー、鞍点をナビゲートするオプティマイザーの機能が強化されます。その結果、Adam は実際にニューラル ネットワークをトレーニングするための一般的な選択肢となりました。

The Adam Optimizer (DL 21)
The Adam Optimizer (DL 21)
  • 2020.11.05
  • www.youtube.com
Davidson CSC 381: Deep Learning, F'20, F'22
 

敵対的生成ネットワーク (DL 23)



敵対的生成ネットワーク (DL 23)

前回の講義では、生成モデリング アプローチの一種である変分オートエンコーダーについて説明しました。オートエンコーダーの主な目的は、生成分布からのサンプリングに使用できる潜在変数を学習することです。分布からサンプルを生成する別の考え方は、計算乱数発生器を使用することです。

プログラミングでランダム ライブラリを使用する場合、ランダム分布からのサンプルは、ランダムまたは擬似ランダム ビットのシーケンスに基づいて生成されます。乱数発生器は、このビット シーケンスを別の分布からのサンプルに変換する計算を実行します。多くの分布は、これらのジェネレーターの一様分布の上に構築されます。

生成モデリングに対するこの代替アプローチには、ジェネレーター ニューラル ネットワークのトレーニングが含まれます。ジェネレーターはランダム ノイズを入力として受け取り、それをデータ分布からのランダム サンプルに変換します。たとえば、データセットが子犬の画像で構成されている場合、目標は、入力ノイズが与えられた場合に子犬のランダムな画像を生成するようにニューラル ネットワークをトレーニングすることです。

ジェネレーター ネットワークをトレーニングするには、ディスクリミネーターと呼ばれる追加のニューラル ネットワークが使用されます。弁別器は、実際のトレーニング データまたはジェネレーター ネットワークの出力から入力を受け取り、入力が本物か偽物かを判断します。ジェネレーター ネットワークは、ディスクリミネーターを欺くことができるサンプルを生成することを目的としていますが、ディスクリミネーターは本物のデータと偽のデータを区別することを目的としています。これにより、2 つのネットワーク間に敵対関係が生まれます。

トレーニング プロセスには、最初に弁別器のトレーニングが含まれ、実際のデータの分布を学習できるようになります。次に、ジェネレーターは実際のデータに似た出力を生成するようにトレーニングされ、ディスクリミネーターを騙すことができます。トレーニングはディスクリミネーターとジェネレーターの間で交互に行われ、パフォーマンスが向上します。

ジェネレータ ネットワークの損失関数は、弁別器の損失の逆になることも、まったく異なる損失関数になることもあります。勾配は、弁別器を介して生成ネットワークに伝播して戻され、損失関数に基づいて重みを更新できます。これにより、ジェネレーターは目的関数を改善する方法を学習できるようになります。

特にデータ分布内の特定のカテゴリのサンプルを生成することが目的の場合、ジェネレータ ネットワークとディスクリミネータ ネットワークにさまざまな損失関数を使用できます。ジェネレーターは、ラベルなどの追加情報を条件にして、ディスクリミネーターを騙して特定のカテゴリーを出力するサンプルを生成できます。

敵対的ネットワークをトレーニングする際、考慮すべき潜在的な障害モードがあります。故障モードの 1 つは、ジェネレータ ネットワークが実際のデータ分布からサンプルを生成するだけであり、その目的関数が最小化されていないことです。ジェネレーターは多様なサンプルを生成する代わりに実際のデータを記憶する可能性があるため、オーバーフィッティングも別の懸念事項です。

過剰適合を回避するには、ジェネレーターが実際のデータにさらされるのを制限し、データを記憶する機会が多すぎないようにすることが重要です。実際のデータセットはジェネレータ ネットワークに直接入力されません。ジェネレーターは実際のデータがディスクリミネーター ネットワークの重みに影響を与える場合、実際のデータから間接的に学習し、ジェネレーターに戻される損失に影響を与えます。

成功すると、トレーニングされたジェネレーター ネットワークは、実際のデータに似ているがそれを超えるサンプルを生成できます。これは、他のニューラル ネットワークをトレーニングする際のデータ拡張や芸術的な目的に役立ちます。講義では、アートやデータの拡張に使用されている敵対的生成ネットワークの例について説明しました。

さらに、トレーニングされたジェネレーター ネットワークは、データ拡張やアートを超えたさまざまなアプリケーションで価値がある可能性があります。そのような応用例の 1 つは、他の重要な問題を解決するためのニューラル ネットワークのトレーニングを改善するための合成データの生成です。

ジェネレーター ネットワークを活用することで、ニューラル ネットワークのトレーニングを強化するために特別に調整されたデータ サンプルを生成できます。たとえば、クラスの不均衡がある分類問題がある場合、ジェネレーターを使用して、過小評価されているクラスの追加サンプルを生成できます。これは、データセットのバランスをとり、少数派クラスを学習するモデルの能力を向上させるのに役立ちます。

さらに、敵対的生成ネットワークには、さまざまなカテゴリまたは機能の組み合わせの間の空間を調査するサンプルを生成する可能性があります。たとえば、犬 0.5 匹と猫 0.5 匹のような機能の組み合わせをジェネレーターに提供すると、犬と猫の両方の特徴を組み合わせたサンプルを生成できます。異なるカテゴリまたは機能間を補間するこの機能により、創造的で斬新な出力の可能性が広がります。

敵対的生成ネットワークは、さまざまなドメインで応用されています。コンピューター ビジョンの分野では、リアルな画像の生成、画質の向上、さらにはディープ フェイクの作成にも使用されています。自然言語処理では、リアルなテキストの生成、言語間の翻訳、さらにはチャットボットの作成にも使用されています。

敵対的生成ネットワークのトレーニングは困難な作業になる可能性があることに注意することが重要です。ハイパーパラメータの慎重な調整、適切な損失関数の選択、生成ネットワークと弁別ネットワーク間のトレードオフの管理が必要です。さらに、トレーニングの安定性を確保し、ジェネレーターが限られたサンプルのセットしか生成しないモード崩壊を回避することも重要な考慮事項です。

これらの課題にもかかわらず、敵対的生成ネットワークは、現実的で多様なサンプルを生成する優れた能力を実証しています。現在進行中の研究により、これらのネットワークのパフォーマンスと信頼性をさらに向上させるための新しいアーキテクチャ、損失関数、トレーニング技術が探求され、この分野が進歩し続けています。

結論として、敵対的生成ネットワークは、生成モデリングのための強力なフレームワークを提供します。ジェネレーターとディスクリミネーターのネットワークを敵対的な方法でトレーニングすることで、実際のデータ分布に似たサンプルを生成する方法を学習できます。これにより、データの拡張、創造的なアプリケーション、さまざまな機械学習タスクのトレーニングの改善における刺激的な可能性が開かれます。

Generative Adversarial Networks (DL 23)
Generative Adversarial Networks (DL 23)
  • 2020.11.15
  • www.youtube.com
Davidson CSC 381: Deep Learning, F'20, F'22
 

オートエンコーダー (DL 22)



オートエンコーダー (DL 22)

多くの深層学習シナリオでは、1 つのデータセットでニューラル ネットワークをトレーニングし、そのネットワークの隠れ層を使用して、他の問題やデータセットに適用できるデータをエンコードするというアイデアによく遭遇します。この概念は転移学習として知られています。たとえば、残差ネットワークの場合、事前トレーニングには、後でさまざまなデータセットに適用できる便利な画像処理技術の学習が含まれます。事前トレーニングされたモデルの出力層を破棄し、新しいタスク用に新しい出力層を追加することにより、基本的に、事前トレーニングされたモデルによって生成されたエンコードされたデータを処理する新しいネットワークを作成します。

単語の埋め込みは、データ エンコードの目的にも役立ちます。その目的は、隠れ層で意味のある情報をキャプチャする表現を学習することです。このアイデアは他のさまざまな状況にも拡張されます。この概念を採用した注目すべきモデルの 1 つはオートエンコーダーです。オートエンコーダーは、入力データと出力データが同じである教師なしデータでトレーニングされます。線形回帰を使用してこの回帰問題を解決するのは簡単なことのように思えるかもしれませんが、オートエンコーダの主な目的は、隠れ層でよりコンパクトな表現を学習することです。

隠れ層のサイズを徐々に小さくすることで、オートエンコーダーはネットワークに入力データの圧縮表現を強制的に学習させます。ネットワークがこの圧縮表現から元の入力を一貫して再現できれば、ネットワークはデータ圧縮を効率的に学習できます。たとえば、200x200 ピクセルの画像を入力として使用し、それを 1000 個のニューロンの隠れ層に縮小し、元の画像に近い近似を再現するために元の画像に拡張できる場合、20:1 の圧縮率が達成されます。

ただし、より効率的な非学習ベースの圧縮アルゴリズムが利用できるため、データ圧縮のみにニューラル ネットワークを使用することは特に有用ではありません。代わりに、オートエンコーダーの価値は、ネットワークの前半を他の深層学習タスクでの転移学習用の表現を生成するために使用するか、後半をデコーダーとして使用して入力セットからデータ例を生成することにあります。

転移学習のためのオートエンコーダーの最初の応用は、深層学習の初期に顕著でした。ただし、その後、転移学習に対するより良いアプローチが開発されています。一方、ネットワークのデコーダ部分を利用してデータ サンプルを生成することは、他の多くの深層学習アルゴリズムの基礎となりました。

最も単純なアプローチには、隠れ層のサイズを最小限に抑えて可能な限り最大の圧縮を達成することが含まれます。このシナリオでは、デコーダに与えられた適切な入力ベクトルは、入力データの分布に似たデータを生成する必要があります。ただし、隠れ層の最適なサイズを決定するのは困難です。小さすぎて入力を正確に再現できなかったり、大きすぎて元のデータセットに似ていない非現実的なデータが生成されたりする可能性があります。

この問題に対処するには、アーキテクチャを変更して、オートエンコーダーがランダムにサンプリングされたベクトルに似た表現を学習できるようにすることができます。この変更により、変分オートエンコーダが得られます。変分オートエンコーダでは、中央の隠れベクトルが平均と分散を表す 2 つのベクトルに置き換えられます。トレーニング プロセスには、正規分布を使用してランダム ベクトルを生成することが含まれます。その後、これが隠れたエンコード ベクトルと結合されて、デコーダへの入力が作成されます。さらに、エンコーダ ネットワークの損失には、平均と分散が正規分布に近くなるように促す発散項が含まれています。これにより、空間の中心付近で表現がクラスタリングされ、ランダム サンプリングの信頼性が高まります。したがって、変分オートエンコーダーを使用すると、ネットワークによって学習されたデータ分布によく似たサンプルを生成できます。

要約すると、ニューラル ネットワークの隠れ層をデータ エンコーディングとして使用するという概念は、学習された確率分布からサンプリングする機能に進化しました。これにより、敵対的生成ネットワークと、多様で興味深いデータの生成への扉が開かれます。

Auto-Encoders (DL 22)
Auto-Encoders (DL 22)
  • 2022.11.12
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

AlphaGo & AlphaGo Zero (DL 24)



AlphaGo & AlphaGo Zero (DL 24)

AlphaGo と AlphaGo Zero は、Google 子会社の DeepMind によって開発された 2 つの囲碁エージェントです。これらのシステムは、ディープ畳み込みニューラル ネットワークとセルフプレイ強化学習を組み合わせて、囲碁アルゴリズムの大幅な進歩を実現します。 2016 年、AlphaGo は人間の世界チャンピオンを破った初の囲碁 AI となりました。このビデオでは、DeepMind がこれらのシステムをどのように作成したかを探り、AlphaGo と AlphaGo Zero の両方について発表された研究論文からの重要な発見について説明します。

囲碁は、シンプルなルールの 2 人用ゲームです。プレーヤーは、ボードの空いている交差点に黒と白の石を順番に配置します。相手の駒に囲まれた石または石のグループが捕獲され、ボードから削除されます。両方のプレイヤーがパスするとゲームは終了し、スコアは周囲にある石と空の交差点の数によって決まります。

囲碁用の AI アルゴリズムを開発するには、複数の手を事前に計画する必要があります。 Deep Blue のようなチェス エンジンは、考えられるすべての動きのシーケンスを考慮し、その結果生じる盤面の位置を評価することでこれを実現しました。ただし、ゲームの複雑さと分岐要素の多さにより、碁盤上の位置の品質を評価することはより困難です。探索スペースを有望な手だけに制限することと盤面の位置の品質を決定することは、AlphaGo が深層学習を使用して対処した重要な問題でした。

AlphaGo は、ディープ ニューラル ネットワークをトレーニングして盤面の状態と政策を推定することで、これらの問題を解決しました。バリュー ネットワークは特定の状態から勝つ確率を予測し、ポリシー ネットワークは手の質を推定します。これらのモデルは、有望な動きに注目を限定し、質の高い見積もりを提供することで、計画アルゴリズムをガイドします。

AlphaGo と AlphaGo Zero のアーキテクチャは異なります。オリジナルの AlphaGo は個別のポリシーと値のネットワークを使用していましたが、AlphaGo Zero はポリシーと値の出力に個別のヘッドを持つ単一のネットワークを採用していました。どちらのアーキテクチャにも、重要なボード状態情報を抽出するために残余ブロックが組み込まれています。 AlphaGo のトレーニング データにはハイレベルのアマチュアによる対局が含まれていましたが、AlphaGo Zero では自己対局のデータのみが使用されました。

バリュー ネットワークのトレーニングは、ボードの状態表現と勝敗ラベルを使用することで比較的簡単です。ポリシー ネットワークのトレーニングは、移動の品質を予測する必要があるため、より複雑になります。 AlphaGo Zero は、ロールアウト中に検索アルゴリズムによって生成された移動品質の推定値に基づいてポリシー ネットワークをトレーニングすることで、この点を改善しました。時間の経過とともに、ポリシー ネットワークは数ステップ先の移動品質を推定することを学習します。

AlphaGo と AlphaGo Zero は両方とも、計画アルゴリズムとしてモンテカルロ ツリー検索 (MCTS) を使用します。 MCTS は、ロールアウトを実行して、移動シーケンスの値と不確実性に関する情報を収集します。検索アルゴリズムは、ポリシー ネットワークとバリュー ネットワークを使用してボードの状態を評価し、手の質を推定します。どちらのシステムもセルフプレイの強化学習を通じて、ネットワークの品質推定値を向上させ、より強力な囲碁プレーヤーになります。

全体として、AlphaGo と AlphaGo Zero の開発は、囲碁 AI における重要なマイルストーンとなります。これらのシステムは、深層学習と強化学習および計画アルゴリズムを組み合わせて、囲碁ゲームで優れたパフォーマンスと戦略的なプレイを実現します。

AlphaGo & AlphaGo Zero (DL 24)
AlphaGo & AlphaGo Zero (DL 24)
  • 2022.11.20
  • www.youtube.com
Davidson CSC 381: Deep Learning, Fall 2022
 

計算グラフ (DL 25)



計算グラフ (DL 25)

この講義では、プログラム内のデータ フローと一連の計算を視覚的に表現する計算グラフに焦点を当てます。計算グラフはニューラル ネットワークにおける順方向伝播と逆方向伝播を理解するためによく使用されますが、どのようなプログラムにも適用できます。ニューラル ネットワークの暗黙的な操作を明示的にすることで、計算グラフにより、関係する計算がより明確に理解できるようになります。

計算グラフでは、各ノードは、アクティベーションによる重みの乗算、重み付けされた入力の合計、アクティベーション関数の計算、損失の計算などの計算を表します。ノード間の接続は、プログラム内の変数間の依存関係を表します。グラフ内の任意のノードの導関数を取得する方法を知ることで、ニューラル ネットワークで順伝播ステップと逆伝播ステップの両方を表すことができます。

ニューラル ネットワークの勾配降下に必要な偏導関数を計算するには、連鎖則を使用してネットワークを通じて導関数を逆方向に伝播します。各ステップで、現在の操作の導関数と前のノードの導関数を乗算します。ノードに複数の出力がある場合、各出力からの導関数を合計します。

計算グラフを使用すると、ニューラル ネットワークの出力を計算し、各重みに関する損失の偏導関数を計算できます。グラフのトポロジカルなソートを逆方向に進めて導関数を伝播することにより、ネットワーク内の任意のパラメーターの偏導関数を決定できます。

この講義では、中間値と導関数がどのように計算されるかを説明する計算グラフの例も提供します。関数を小さな計算に分割し、中間値に名前を割り当てることで、計算グラフを使用して関数の出力とその偏導関数の両方を計算できます。

さらに、計算グラフはスカラー変数だけでなく、ベクトル、行列、またはテンソルを表す変数も扱うことができます。活性化ベクトルや重み行列などの高次元オブジェクトに対応する変数を使用することで、計算グラフを高密度に接続されたニューラル ネットワークやその他の複雑な計算に適用できます。

密に接続されたニューラル ネットワークの計算グラフを拡張するには、活性化のベクトルまたは重みの行列に対応する変数を導入できます。ネットワークのこの層全体におけるアクティベーションのベクトルに、ベクトル ハット記号 (^) で示される「a1」という名前を付けます。同様に、重みを行列 W1 として表すことができます。

この拡張グラフでは、層内の各ノードへの入力は、アクティベーション ベクトル (a1) と対応する重み行列 (W1) のドット積です。この演算は行列の乗算、a1 * W1 として表すことができます。

さらに、層内の各ノードに関連付けられたバイアス ベクトル (b1) を導入できます。バイアス項は、活性化関数を適用する前に、活性化と重みの内積に要素ごとに追加されます。

次に、結果のベクトルに要素ごとに活性化関数 (シグモイドや ReLU など) を適用します。このベクトルを「a2」(ハット記号付き)として示し、次の層の活性化を表します。

ニューラル ネットワークの後続の層に対してこのプロセスを繰り返し、ノードをエッジに接続し、グラフを通じてアクティベーションと重みを伝播します。

この拡張された計算グラフで前方パスを計算するには、入力値 (画像のピクセル強度など) から開始し、各ノードで行列の乗算、要素ごとの加算、および活性化関数を適用して、それらをグラフ全体に前方に伝播させます。最終出力が得られるまで。

逆伝播の場合、目標は、ネットワーク内の各重みに関する損失関数の偏導関数を計算することです。計算グラフを拡張することにより、ネットワークを通じて勾配の流れを逆方向に追跡することができ、連鎖則を使用してこれらの偏導関数を効率的に計算できるようになります。

逆伝播中、最終出力に関する損失関数の導関数から開始し、連鎖規則を使用してそれをグラフ全体に逆伝播させます。各ノードでは、入力に対する対応する演算 (アクティベーション関数、行列乗算など) の導関数を入力導関数に乗算します。

このプロセスに従うことで、ネットワーク内の各重みの勾配を計算できるため、勾配降下法やその変形などの最適化アルゴリズムを使用して重みを更新できます。

要約すると、計算グラフを拡張して密に接続されたニューラル ネットワークを表現すると、順方向および逆方向の伝播ステップを視覚化して計算できるようになります。これにより、勾配の効率的な計算が可能になり、重みの更新を通じてネットワークの最適化が容易になります。

Computation Graphs (DL 25)
Computation Graphs (DL 25)
  • 2020.09.29
  • www.youtube.com
Davidson CSC 381: Deep Learning, F'20, F'22
 

自動微分 (DL 26)



自動微分 (DL 26)

逆モード自動微分 (AD) は、関数の勾配を計算するために使用される手法です。 Julia では、Zygote ライブラリにより自動微分機能が提供されます。 Julia で大規模な機械学習プロジェクトに取り組む場合、Zygote 上に構築された Flux 深層学習ライブラリが一般的に使用されます。

Zygote は、別の関数と入力引数を受け取る「勾配」関数を提供し、それらのポイントで勾配を自動的に計算します。たとえば、関数と入力 (1, 2, -1) が与えられた場合、Zygote は勾配を (22, 4, -12) として計算できます。この機能は便利ですが、Project Zero で実装したものと似ています。

自動微分の威力は、より複雑な関数の勾配を計算できることにあります。たとえば、フィボナッチ数列の n 番目の要素を計算する関数を考えてみましょう。 Zygote の勾配関数を使用すると、このフィボナッチ関数の勾配を計算できます。入力 (0、1、12) では、「a」に関する偏導関数は 89、「b」に関する偏導関数は 144 です。ただし、「n」に関する偏導関数は連続ではないため、存在しません。この関数の変数。

Zygote がそのような関数の勾配をどのように計算するかを理解するには、逆モードの自動微分を調べることができます。リバース モード AD では、関数の実行時に計算グラフが構築され、偏導関数がグラフを通じて逆伝播されます。これを実現するために、変数の数値は、値と微分計算のための追加情報の両方を格納するオブジェクトに置き換えられます。

これらのオブジェクトには 2 種類の情報を保存できます: (1) 変数の値と各入力に関するその偏導関数 (順方向モード AD)、または (2) 変数の値と計算における先行変数およびその値を計算するために使用される関数 (リバース モード AD)。深層学習の場合、リバース モード AD は、入力 (ニューラル ネットワークの重みパラメーターなど) よりも出力の数 (通常は 1 つ) でより適切に拡張できるため、より便利です。

これらのリバース モードの auto-diff オブジェクトを作成し、関数の評価中に計算グラフを構築することで、後でバックプロパゲーションを実行できます。中間変数には計算結果が格納され、オブジェクト内の親エッジはグラフ内のノード間の依存関係を示します。関数ノードと依存関係を含む計算グラフは暗黙的に構築されます。連鎖ルールを各ノードに適用すると、導関数をグラフ内で逆方向に伝播できます。

この逆モード自動差分オブジェクトのコレクションは、その値、親、関数とともに、通常、グラデーション テープに保存されます。このアプローチでは、コンポーネントの導関数がわかっている限り、より複雑な中間計算を含む関数でも区別できます。これらの変数の値はスカラー、ベクトル、行列、またはテンソルにすることができ、さまざまなデータ型で関数を微分することができます。

要約すると、Julia の Zygote などのライブラリでサポートされている逆モード自動微分により、関数の勾配を効率的に計算できます。計算グラフを構築し、それを通じて導関数を伝播することで、勾配を計算するプロセスを自動化し、深層学習やその他の複雑なアプリケーションに適したものにすることができます。

Automatic Differentiation (DL 26)
Automatic Differentiation (DL 26)
  • 2020.10.29
  • www.youtube.com
Davidson CSC 381: Deep Learning, F'20, F'22
 

Coursera 機械学習のためのニューラル ネットワーク — ジェフリー ヒントン - 講義 1.1 — なぜ機械学習が必要なのか



講義 1.1 — なぜ機械学習が必要なのか [機械学習のためのニューラル ネットワーク]

機械学習用のニューラル ネットワークに関する Coursera コースへようこそ!このコースでは、ニューラル ネットワークとその機械学習への応用という興味深い分野を探求します。ニューラル ネットワーク学習アルゴリズムの複雑さに入る前に、機械学習の重要性とその用途について説明し、その機能を説明するためにいくつかの例を示します。

機械学習は、従来のプログラミング アプローチでは対処することが困難な複雑な問題を解決するために必要です。たとえば、さまざまな照明条件の下、雑然としたシーンで、さまざまな視点から 3 次元オブジェクトを認識するのは困難な作業です。複雑さは、私たちの脳がそのような認識をどのように実行するかを完全に理解していないという事実にあり、これらの問題を解決するための明示的なプログラムを作成することが困難になっています。たとえ基礎となるプログラムを発見したとしても、効果的に実装するのは非常に複雑になる可能性があります。

別の例は、不正なクレジット カード取引の検出です。従来のルールベースのシステムでは、時間の経過とともに常に変化する信頼性の低い多数のルールを組み合わせる必要があるため、複雑な不正パターンを捉えるのが困難です。機械学習は、特定の入力に対して正しい出力を指定する多数の例を活用することで、代替アプローチを提供します。学習アルゴリズムはこれらの例を処理して、タスクに効果的に取り組むプログラムを生成します。結果として得られるプログラムは、従来の手作りのプログラムとは異なって見える可能性があり、数百万もの重み付けされた数値が含まれる可能性があります。ただし、正しく実装されていれば、新しいケースにうまく一般化し、更新された情報で再トレーニングすることでデータの変化に適応できます。

機械学習は、実際のシーン内のオブジェクト、顔の表情、話し言葉などのパターンの認識に優れています。また、異常なシーケンスのクレジット カード取引や原子力発電所の異常なセンサー読み取り値などの異常を特定するのにも強力です。さらに、機械学習は、株価の予測や、過去の選択や他の人の行動に基づいたユーザーの好みの予測などの予測タスクでも役立ちます。

このコース全体を通じて、手書き数字の MNIST データベースを標準的な例として使用し、多くの機械学習アルゴリズムを説明します。このデータベースは広く使用されており、さまざまな方法を効果的に比較できます。このようなタスクを使用することで、機械学習の基礎となる概念と原則をよりよく理解できるようになります。

これらの例は、機械学習とニューラル ネットワークの注目すべき機能の表面をなぞっただけです。技術の進歩とすぐに利用できる計算リソースにより、複雑な機械学習モデルを効率的にトレーニングして展開できるようになります。これらのモデルは、ますます複雑化するタスクに取り組み、機械学習で達成できる限界を押し上げる可能性を秘めています。

このコースでは、ニューラル ネットワークの複雑さを掘り下げ、そのアーキテクチャ、トレーニング アルゴリズム、および実際の実装テクニックについて説明します。コースの終わりまでに、ニューラル ネットワークの強力な基礎が身につき、それを幅広い問題に適用できるようになります。

機械学習のためのニューラル ネットワークの世界へのこのエキサイティングな旅に参加してください。知識を広げ、スキルを向上させ、この革新的なテクノロジーの可能性を解き放つ準備をしましょう。

Lecture 1.1 — Why do we need machine learning [Neural Networks for Machine Learning]
Lecture 1.1 — Why do we need machine learning [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
For more cool AI stuff, follow me at https://twitter.com/iamvriad.Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton ...
 

講義 1.2 — ニューラル ネットワークとは



講義 1.2 — ニューラル ネットワークとは [機械学習のためのニューラル ネットワーク]

このビデオでは、このコースで検討する人工ニューラル ネットワークの基礎として機能する、脳内の実際のニューロンについて説明します。コースの大部分では実際のニューロンにはあまり焦点を当てませんが、最初に簡単な概要を説明したいと思います。

ニューロンのネットワークがどのように計算できるかを研究する理由はいくつかあります。まず、脳の機能を理解するのに役立ちます。脳に直接実験を行うことは論理的であるように思えますが、脳は複雑で繊細な器官であり、操作に十分耐えることはできません。したがって、コンピュータシミュレーションは経験的発見を理解するために不可欠です。

第 2 に、ニューラル ネットワークを研究すると、比較的遅いニューロンの広大なネットワークを通じて計算する脳の能力にヒントを得た並列計算の概念を理解できるようになります。このスタイルの並列計算を理解することは、従来のシリアル プロセッサとは大きく異なる並列コンピュータの進歩につながる可能性があります。これは視覚など脳が得意とするタスクには特に有効ですが、掛け算のようなタスクにはあまり向いていません。

3 番目の理由は、このコースに関連しており、脳からインスピレーションを得た革新的な学習アルゴリズムを使用して実践的な問題を解決することが含まれます。これらのアルゴリズムは、たとえ脳の動作を正確に模倣していなかったとしても、非常に価値のあるものになる可能性があります。したがって、脳がどのように機能するかについては深く掘り下げませんが、ニューロンの大規模な並列ネットワークが複雑な計算を実行できることを示すインスピレーションの源として機能します。

このビデオでは、脳の働きについてさらに詳しく説明します。典型的な皮質ニューロンは、細胞体、他のニューロンにメッセージを送信するための軸索、および他のニューロンからメッセージを受信するための樹状木で構成されています。 1 つのニューロンの軸索が別のニューロンの樹状突起と接続する点で、シナプスが見つかります。活動のスパイクが軸索に沿って伝わると、シナプス後ニューロンに電荷が注入されます。

ニューロンは、樹状突起ツリーで受け取った電荷が軸索丘と呼ばれる領域を脱分極させるとスパイクを生成します。脱分極すると、ニューロンはその軸索に沿ってスパイクを送信します。これは本質的に脱分極の波です。

シナプス自体は興味深い構造をしています。それらには、伝達物質の化学物質で満たされた小胞が含まれています。スパイクが軸索に到達すると、これらの小胞のシナプス間隙への移動と放出が引き起こされます。伝達物質分子はシナプス間隙を通って拡散し、シナプス後ニューロンの膜上の受容体分子に結合します。この結合により分子の形状が変化し、膜に穴が形成され、特定のイオンがシナプス後ニューロンに出入りできるようになり、その結果、脱分極状態が変化します。

シナプスはコンピュータのメモリに比べて比較的遅いですが、コンピュータのランダム アクセス メモリよりも優れた利点を持っています。小型、低消費電力、そして適応性があります。適応性は、ローカルで利用可能な信号を利用してシナプスの強度を変更できるため、非常に重要です。この適応性により、学習が容易になり、複雑な計算を実行する能力が向上します。

そこで疑問が生じます: シナプスはその強さをどのように変更するかをどのように決定するのでしょうか?それらの適応のためのルールは何ですか?これらは重要な考慮事項です。

要約すると、脳は他のニューロンから入力を受け取るニューロンを通じて機能します。感覚受容器から入力を受け取るニューロンはほんの一部です。ニューロンは、活動のスパイクを送信することによって皮質内で通信します。ニューロンに対する入力の影響は、そのシナプスの重みに依存し、正または負の値になります。これらのシナプスの重みが適応することで、ネットワーク全体が物体認識、言語理解、計画、運動制御などのさまざまな計算を学習して実行できるようになります。

脳は約 10^11 個のニューロンで構成されており、それぞれのニューロンは約 10^4 のシナプス重みを持ちます。その結果、脳には膨大な数のシナプス重みが含まれており、その多くはミリ秒以内の進行中の計算に寄与しています。これにより、現代のワークステーションと比較して、知識を保存するための優れた帯域幅が脳に提供されます。

脳のもう 1 つの興味深い側面は、そのモジュール性です。皮質の異なる領域は、最終的に異なる機能に特化します。感覚からの入力は遺伝的に特定の領域に向けられ、最終的な機能に影響を与えます。脳への局所的な損傷は、言語理解や物体認識の喪失などの特定の影響をもたらします。脳の柔軟性は、初期の損傷に反応して機能が脳の他の部分に再配置できるという事実からも明らかです。これは、皮質には経験に基づいて特定のタスクに適応できる柔軟で普遍的な学習アルゴリズムが含まれていることを示唆しています。

結論として、脳は一度学習すると、驚くべき柔軟性と併せて高速な並列計算を実行します。これは FPGA に似ており、標準の並列ハードウェアが構築され、後続の情報によって実行される特定の並列計算が決定されます。従来のコンピュータは逐次プログラミングによって柔軟性を実現しますが、そのためにはプログラム行にアクセスし、長時間の逐次計算を実行する高速な中央プロセスが必要になります。

Lecture 1.2 — What are neural networks [Neural Networks for Machine Learning]
Lecture 1.2 — What are neural networks [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
For cool updates on AI research, follow me at https://twitter.com/iamvriad.Lecture from the course Neural Networks for Machine Learning, as taught by Geoffre...
 

講義 1.3 — ニューロンのいくつかの簡単なモデル



講義 1.3 — ニューロンのいくつかの単純なモデル [機械学習のためのニューラル ネットワーク]

線形ニューロン、閾値ニューロン、より複雑なモデルなど、ニューロンの単純なモデルをいくつか説明します。これらのモデルは実際のニューロンよりも単純ですが、それでも機械学習用のニューラル ネットワークを作成できます。複雑なシステムを理解するときは、その仕組みを理解するためにシステムを単純化して理想化する必要があります。これには、重要でない詳細を削除し、数学と類推を適用することが含まれます。本質的な特性を見落とさないことは重要ですが、間違っていることがわかっていても実際には役立つモデルを研究することは有益です。たとえば、実際の皮質ニューロンは異なる動作をしますが、ニューラル ネットワークでは、離散スパイクではなく実際の値を伝達するニューロンがよく使用されます。

最も単純なタイプのニューロンは線形ニューロンです。これには計算上の制限がありますが、より複雑なニューロンについての洞察が得られます。その出力は、バイアスと入力アクティビティの加重合計によって決定されます。バイアスと重み付けされたアクティビティのプロットは直線を形成します。対照的に、McCulloch と Pitts によって導入されたバイナリ閾値ニューロンは、加重合計が閾値を超えると活動のスパイクを送信します。これらのスパイクは、ニューロンが結合して独自の真理値を生成する真理値を表します。かつては論理が心を理解するための主要なパラダイムとみなされていましたが、現在では脳はさまざまな信頼性の低い証拠ソースを組み合わせているため、論理はあまり適切ではないと考えられています。

バイナリ閾値ニューロンは、2 つの等価な方程式で説明できます。合計入力は、入力アクティビティの合計に重みを掛けたもので、合計入力がしきい値を超えている場合、出力は 1 になります。あるいは、合計入力にはバイアス項が含まれており、合計入力がゼロより大きい場合、出力は 1 になります。修正された線形ニューロンは、線形ニューロンとバイナリ閾値ニューロンの特性を組み合わせたものです。線形加重合計を計算しますが、出力を決定するために非線形関数を適用します。合計がゼロより小さい場合、出力はゼロになり、ゼロより大きい場合は合計と等しくなります。その結果、ゼロより大きい出力は非線形ですが線形になります。

シグモイド ニューロンは人工ニューラル ネットワークでよく使用されます。これらは、合計入力の滑らかで制限された関数である実数値の出力を提供します。ロジスティック関数がよく使用されます。この関数では、出力は入力合計の負の指数を 1 で割ったものになります。大きな正の入力の場合、出力は 1 ですが、大きな負の入力の場合、出力は 0 です。シグモイド関数には滑らかな導関数があり、ニューラル ネットワークでの学習が容易になります。

確率的バイナリ ニューロンはロジスティック単位と同じ方程式を使用しますが、確率を実数として出力する代わりに、確率的な決定を行って 1 または 0 を出力します。確率はスパイクが生成される可能性を表します。入力が非常に正の場合は 1 が生成される可能性が高く、非常に負の入力の場合は 0 が生成される可能性が高くなります。修正された線形ユニットも同様の原理に従いますが、スパイクの生成にランダム性が導入されます。整流された線形ユニットの出力はスパイクの生成率を表し、実際のスパイク時間はユニット内のランダムなポアソン プロセスによって決定されます。

バイナリ ニューロンおよび修正された線形単位におけるこれらの確率的動作により、ニューラル ネットワークに固有のランダム性が導入されます。スパイクの生成速度は決定的ですが、スパイクの実際のタイミングはランダムなプロセスになります。このランダム性により、システムに変動性と確率性が追加されます。

これらのさまざまなニューロン モデルを理解することで、さまざまな計算能力が得られます。線形ニューロンは計算能力に限界がありますが、より複雑なシステムへの洞察を提供できます。バイナリ閾値ニューロンにより、閾値の比較に基づいた意思決定が可能になります。整流された線形ニューロンは線形性と非線形性を組み合わせ、意思決定と線形処理を同時に可能にします。シグモイド ニューロンは滑らかで境界のある出力を提供し、微分可能な性質のためニューラル ネットワークで一般的に使用されます。確率的バイナリ ニューロンと修正線形ユニットによりシステムにランダム性が導入され、確率的な意思決定が可能になり、変動性が導入されます。

ニューラル ネットワークでさまざまな種類のニューロンを組み合わせることで、機械学習タスク用の強力なモデルを作成できます。これらのネットワークはデータから学習し、データの重みとバイアスを適応させ、学習したパターンに基づいて予測や分類を行うことができます。これらのニューロン モデルの原理と動作を理解することは、効果的なニューラル ネットワークを設計してトレーニングするのに役立ちます。

ただし、これらのニューロン モデルは脳内の実際のニューロンを単純化して抽象化したものであることを覚えておくことが重要です。脳は信じられないほど複雑で動的なシステムであり、これらのモデルは神経処理の特定の側面を捉えるための近似として機能します。これらは実際のニューロンの複雑さを完全には捉えていないかもしれませんが、計算モデルを構築し、優れた機械学習機能を実現するための便利なツールを提供します。

線形ニューロン、閾値ニューロン、修正線形ニューロン、シグモイド ニューロン、確率的バイナリ ニューロンなど、さまざまなニューロン モデルを研究することで、さまざまな計算特性と動作を理解できるようになります。これらのモデルはニューラル ネットワークを構築するための基盤を形成し、さまざまな機械学習タスクを実行できるようになります。単純化されていますが、神経システムの機能についての貴重な洞察を提供します。

Lecture 1.3 — Some simple models of neurons [Neural Networks for Machine Learning]
Lecture 1.3 — Some simple models of neurons [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
For cool updates on AI research, follow me at https://twitter.com/iamvriad.Lecture from the course Neural Networks for Machine Learning, as taught by Geoffre...
 

講義 1.4 — 学習の簡単な例



講義 1.4 — 簡単な学習例 [機械学習のためのニューラル ネットワーク]

この機械学習の例では、数字の認識を学習する単純なニューラル ネットワークを検討します。プロセス全体を通じて、基本的な学習アルゴリズムを使用して重みが進化するのを目撃します。

私たちは、手書きの形状を識別するための簡単なネットワークをトレーニングすることに重点を置いています。ネットワークは、ピクセル強度を表す入力ニューロンとクラスを表す出力ニューロンの 2 つの層で構成されます。目的は、特定の形状が提示されたときに、その形状に対応する出力ニューロンがアクティブになるようにすることです。

各アクティブ ピクセルは、そのピクセルが属する形状に対して「投票」し、これらの投票の強度は異なります。出力ユニット間で競争があると仮定すると、最も多くの票を獲得した図形が勝ちます。この競争的な側面については、後の講義で詳しく説明します。

重量を視覚化するには、数千の重量を表示できるディスプレイが必要です。入力ユニットと出力ユニットの間の個々の接続に重みを記述する代わりに、出力ユニットごとに小さなマップを作成します。これらのマップは、黒と白のブロブを使用して入力ピクセルからの接続の強さを表します。各ブロブの面積は大きさを示し、色は接続の符号を表します。

最初に、重みには小さなランダムな値が割り当てられます。重みを改善するには、ネットワークにデータを提示し、それに応じて重みを調整するようにネットワークをトレーニングします。画像が表示されると、アクティブなピクセルから正しいクラスまで重みが増分されます。ただし、重みが過度に大きくなるのを防ぐために、アクティブ ピクセルからネットワークが推測するクラスまで重みを減分します。このトレーニング アプローチは、ネットワークが最初の傾向に固執するのではなく、正しい決定を下せるように導きます。

ネットワークに数百のトレーニング例を表示した後、重みを再度観察します。それらは規則的なパターンを形成し始めます。さらにトレーニング例を増やすと、重みは変化し続け、最終的には安定します。この時点で、ウェイトはシェイプのテンプレートに似ています。たとえば、「1」単位に含まれる重みは、単位を識別するためのテンプレートとして機能します。同様に、「9」ユニットに入る重みは、特定の特徴の有無に基づいて 9 と 7 を区別することに重点を置いています。

この学習アルゴリズムは、ネットワークが単純であるため、形状を識別する能力が限られているだけであることに注意してください。学習された重みはテンプレートとして効果的に機能し、ネットワークはテンプレートとインクの重複に基づいて勝者を決定します。しかし、手書き数字のバリエーションの複雑さに直面すると、このアプローチは不十分です。これに対処するには、形状全体の単純なテンプレート マッチングでは問題を適切に解決できないため、特徴を抽出し、その配置を分析する必要があります。

要約すると、この例は、数字を認識するための単純なニューラル ネットワークのトレーニングを示しています。ネットワークの重みは進化し、形状のテンプレートに似ていますが、手書きの数字の複雑な変化に直面すると、このアプローチの限界が明らかになります。

Lecture 1.4 — A simple example of learning [Neural Networks for Machine Learning]
Lecture 1.4 — A simple example of learning [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
For cool updates on AI research, follow me at https://twitter.com/iamvriad.Lecture from the course Neural Networks for Machine Learning, as taught by Geoffre...