とてもかっこいいですね! 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モデルテストの秘密を探る

ブログ    
ブログ    

推薦する

...

Tongyi Qianwenが再びオープンソース化、Qwen1.5は6つのボリュームモデルを導入、そのパフォーマンスはGPT3.5を上回る

春節の直前に、同義千文モデル(Qwen)バージョン1.5がリリースされました。今朝、新バージョンのニ...

...

AIの将来にとって人間の関与が重要な理由

人工知能技術の進歩は、自動化と革新の新しい時代の到来を告げるものとなるでしょう。しかし、機械知能の進...

LiDARは自動運転以外にも様々な用途があります!

近年、スマートカーの継続的な発展に伴い、LIDARはますます注目を集めており、特にテスラと他の自動車...

ネイチャー長文記事:AIのブラックボックスを破るための「長期戦」

2020年2月、COVID-19が世界中で急速に広がり、抗原検査の入手が困難になったため、一部の医...

Google X 中国博士がロボットシミュレーターSimGANをリリース、ICLR2021が出版

[[407004]]工学部の学生は、さまざまなシミュレーターから切り離すことはできません。シミュレー...

この世界規模の問題に対して、ドローンはどれほどの助けとなるのでしょうか?

火事を起こすのは簡単ですが、消すのは難しいです。これは世界的な問題ですが、これを効果的に予防し、迅速...

...

...

...

...

ハイリアンと手を携えてデジタル変革の道を議論する

モバイルインターネットの発展に伴い、企業の生産・運営プロセスで生成されるデータは、これまでにない爆発...

アマゾンがホームロボット「Vesta」を開発、2019年に販売開始

海外メディアの報道によると、アマゾンのハードウェア研究開発部門Lab126は、「Vesta」(ヴェス...

3分レビュー! 2021年1月のロボット工学分野の重要な動向の概要

ポスト疫病時代において、国内ロボット市場は急速に発展しました。同時に、国際ロボット分野は前向きな発展...