とてもかっこいいですね! Python で人工知能の最適化アルゴリズムを 5 分で理解する

とてもかっこいいですね! Python で人工知能の最適化アルゴリズムを 5 分で理解する

概要

勾配降下法は、ニューラル ネットワークでよく使われる最適化アルゴリズムの 1 つです。一般的に、誤差関数を最小化する重みとバイアスを見つけたいと考えます。勾配降下アルゴリズムは、ネットワーク全体のエラーを最小限に抑えるためにパラメータを繰り返し更新します。

勾配降下法は、最小二乗問題 (線形と非線形の両方) を解決するために使用できる反復法です。機械学習アルゴリズムのモデルパラメータ、つまり制約のない最適化問題を解決する場合、勾配降下法は最もよく使用される方法の 1 つです。もう 1 つのよく使用される方法は、最小二乗法です。損失関数の最小値を解く場合、勾配降下法を使用して段階的に反復し、最小化された損失関数とモデル パラメーター値を取得できます。逆に、損失関数の最大値を見つける必要がある場合は、勾配上昇法を使用して反復する必要があります。機械学習では、基本的な勾配降下法に基づいて、確率的勾配降下法とバッチ勾配降下法という 2 つの勾配降下法が開発されています。

アルゴリズムは、損失関数の勾配に基づいて、最小値に達するまで重みパラメータを繰り返し更新します。言い換えれば、谷に到達するまで損失関数の傾斜を下り坂に沿って進みます。基本的な考え方は図 3.8 に大まかに示されています。偏微分が負の場合、重みは増加します(図の左側)、偏微分が正の場合、重みは減少します(図の右側)42。学習率パラメータは、最小値に到達するために必要なステップ数のサイズを決定します。

図3.8 確率的勾配最小化の基本的な考え方

エラーサーフェス

局所的最小値を避けながら全体的最適値を見つけることは困難な作業です。これは、図 3.9 に示すように、誤差面には多くの山と谷があるためです。エラー サーフェスは、ある方向では大きく湾曲しているが、他の方向では平坦である可能性があります。これにより、最適化プロセスが非常に複雑になります。ネットワークが局所的最小値に陥るのを防ぐために、通常は運動量パラメータが指定されます。

図3.9 典型的な最適化問題の複素誤差面

勾配降下法を使用したバックプロパゲーションは、収束が非常に遅いか、まったく収束しないことが多いことに私は早い段階で気付きました。非常に小さなデータセットを使用して最初のニューラル ネットワークを作成したとき、バックプロパゲーション アルゴリズムを使用しました。ネットワークが解決策に収束するまでに 3 日以上かかりました。幸いなことに、私はプロセスをスピードアップするためにいくつかの措置を講じました。

これは、バックプロパゲーションに関連する学習率は比較的遅いものの、フィードフォワード アルゴリズムとしては、予測または分類の段階では非常に高速であることを示しています。

確率的勾配降下法

従来の勾配降下アルゴリズムでは、データセット全体を使用して、各反復で勾配を計算します。大規模なデータセットの場合、各パラメータの更新の前に非常に類似したサンプルの勾配が再計算されるため、冗長な計算が発生する可能性があります。確率的勾配降下法 (SGD) は、真の勾配の近似値です。各反復で、サンプルをランダムに選択してパラメータを更新し、そのサンプルに関連付けられた勾配に沿って移動します。したがって、最小値に向かう曲がりくねった勾配経路をたどります。部分的には冗長性がないため、従来の勾配降下法よりも速く解に収束する傾向があります。

確率的勾配降下法の非常に優れた理論的特性は、損失関数が凸関数43 である場合、大域的最小値が見つかることが保証されることです。

コーディング練習

理論は十分です。実際のコードに取り掛かりましょう。

1次元の問題

解決する必要のある目的関数は次の通りであると仮定します。

()=2+1f(x)=x2+1

明らかに、その最小値は =0x=0 であることが一目でわかりますが、ここではそれを実装するために勾配降下法の Python コードを使用する必要があります。

  1. #!/usr/bin/env python
  2. # -*- コーディング: utf-8 -*-
  3. 「」 「
  4. 1D問題に対する勾配降下法の例
  5. 「」 「
  6.  
  7.  
  8. def func_1d(x):
  9. 「」 「
  10. 目的関数
  11. :param x: 独立変数、スカラー
  12. :戻り値: 従属変数、スカラー
  13. 「」 「
  14. x ** 2 + 1を返す
  15.  
  16.  
  17. grad_1d(x)を定義します。
  18. 「」 「
  19. 目的関数の勾配
  20. :param x: 独立変数、スカラー
  21. :戻り値: 従属変数、スカラー
  22. 「」 「
  23. x * 2を返す
  24.  
  25.  
  26. 定義 gradient_descent_1d(grad, cur_x=0.1, 学習率=0.01,精度=0.0001, max_iters=10000):
  27. 「」 「
  28. 1次元問題に対する勾配降下法
  29. :param grad: 目的関数の勾配
  30. :param cur_x: 現在のx値、初期値はパラメータで指定できます
  31. :param learning_rate: 学習率。設定されたステップサイズと同等
  32. :param precision : 収束精度を設定する
  33. :param max_iters: 反復の最大回数
  34. :戻り値: 局所最小値 x*
  35. 「」 「
  36. iが範囲(max_iters)の場合:
  37. grad_cur = grad(cur_x)
  38. abs (grad_cur) <精度の場合:
  39. break # 勾配が0に近づくと収束したとみなされる
  40. cur_x = cur_x - grad_cur * 学習率
  41. print( "" , i, " 反復: x 値は " , cur_x)
  42.  
  43. print( "局所最小値 x =" , cur_x)
  44. cur_xを返す
  45.  
  46.  
  47. __name__ == '__main__'の場合:
  48. 勾配降下法1d(grad_1d、cur_x=10、学習率=0.2、精度=0.000001、最大反復回数=10000)

すごいですね!Python で降下を理解する!

<<:  ハルビン工科大学の修士課程の学生が11の古典的なデータ次元削減アルゴリズムをPythonで実装し、ソースコードライブラリが公開されました。

>>:  [NCTSサミットレビュー] Rong360 Ai Hui: AIモデルテストの秘密を探る

ブログ    
ブログ    

推薦する

CMU と Adob​​e が協力: GAN モデルは事前トレーニングの時代を先導し、トレーニング サンプルのわずか 1% しか必要としません

事前トレーニングの時代に入ってから、視覚認識モデルのパフォーマンスは急速に向上しましたが、生成的敵対...

...

今年は人工知能と5Gの急速な共同開発が見られました

RedMonk は初めて言語人気ランキングで Java に取って代わり、Python が 2 位にな...

...

RPAを成功させる方法

ロボティック プロセス オートメーション (RPA) は、ルールベースのプロセスを使用して、人間より...

東方世界の楊暁:AR開発技術のポイントを探る

[51CTO.comからのオリジナル記事] 市場調査会社Digi-Capitalのデータによると、2...

2025年までに音声認識市場は267億9000万ドルに達する

3月29日、市場調査会社Meticulous Market Researchが発表した最新のレポート...

未来は人工知能の時代であり、さらに Python の時代です。

Python はますます人気が高まっています。近年の Python の人気は、人工知能や機械学習と...

「手を自由にする」は夢ではありません! AI がソフトウェア テストの未来を形作る 5 つの方法...

人工知能は今日最も注目されている流行語であり、その発展により企業や業界は情報に基づいた意思決定を行い...

2Dラベルのみを使用してマルチビュー3D占有モデルをトレーニングするための新しいパラダイム

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

Pika 1.0 はアニメーション業界に完全な革命をもたらします!ドリームワークスの創設者は、3年後にはアニメーションのコストが10分の1に下がると予測

最近、ドリームワークスの創設者ジェフリー・カッツェンバーグ氏は、生成AIの技術がメディアとエンターテ...

...

...