問題タブ [gradient-descent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
artificial-intelligence - 活性化関数と初期の重みの選択は、ニューラルネットワークが極小値でスタックするかどうかに関係がありますか?
私は昨日、ニューラルネットワーク(確率的勾配降下法を使用したバックプロパゲーションを介してトレーニングしている)が極小値でスタックしていないかどうかを尋ねるこの質問を投稿しました。次の論文では、XORニューラルネットワークの極小値の問題について説明しています。最初の論文では極小値の問題はないと述べていますが、次の論文(1年後に書かれた)では、2-3-1 XORニューラルネットワークに極小値の問題があると述べています(余談ですが、私は3-3-1を使用しています。つまり、入力層と非表示層にバイアスをかけています)。これらは両方とも要約です(私は完全な論文にアクセスできないので、それを読むことができません):
- XORには極小値がありません:ニューラルネットワークのエラー表面分析のケーススタディ。 ハミーLGによる。オーストラリア、シドニー、マッコーリー大学コンピューティング学部
- 2-3-1XORネットワークの極小値。 Sprinkhuizen-Kuyper IG、BoersEWによる。
最も単純なXORネットワークの極小値はないという別の論文[PDF]もありますが、2-3-1ネットワークについて話しているようには見えません。
さて、私の実際の質問に移ります。活性化関数の選択、初期の重み、そしてこれがニューラルネットワークが極小値でスタックするかどうかにどのような影響を与えるかについて議論するものは何も見つかりませんでした。私がこの質問をしている理由は、私のコードで標準のシグモイド活性化関数と双曲線正接活性化関数を使用しようとしたためです。前者の場合、私は約20%の時間しかスタックしないのに対し、後者の場合、私ははるかに頻繁にスタックする傾向があることに気づきました。また、最初にネットワークを初期化するたびに重みをランダム化しているので、特定のランダムな重みのセットがニューラルネットワークを「スタック」させるためにもっと配置されているのではないかと思います。
活性化関数に関して言えば、エラーは最終的には活性化関数によって生成される出力に関連しているので、効果がある(つまり、エラーの表面が変化する)と思います。ただし、これは単に直感に基づいているため、具体的な答えをお勧めします(両方の点で、初期の重みと活性化関数の選択)。
matlab - matlabでニューラルネットワークの勾配降下コードを書く方法は?
MATLAB で「確率的勾配降下法」を実装しようとしています。私はアルゴリズムに正確に従いましたが、予測/フィッティング関数に対して非常に大きな w (係数) を取得しています。アルゴリズムに誤りがありますか?
ニューラル ネットワークの勾配降下法を作成しようとしています。
私は最終的なネットワークの出力を (net2) として出力し、(d) として出力したかったので、この 2 つのパラメーターを式に入れました: E=0.5*(d^2-net2) で、E を取得しました。
だから私の問題は、どのようにEを使用できるかということです? どうすれば私のタラをmatlabで書くことができますか? また、重みを W として更新するにはどうすればよいですか? 助けてください。ありがとう。
java - 逆伝播アルゴリズム
エラーを逆伝播して重みを調整するメソッドを含むオンラインの例を見つけました。これが正確にどのように機能し、どの重み更新アルゴリズムが使用されているのか疑問に思っていました。勾配降下でしょうか?
machine-learning - 勾配降下は失敗するようです
画像の品質が良いかどうかを判断するための仮説を得るために、コスト関数を最小化する勾配降下アルゴリズムを実装しました。私は Octave でそれを行いました。このアイデアは、Andrew Ng による機械学習クラスのアルゴリズムに何らかの形で基づいています。
したがって、0.5 から ~12 までの値を含む 880 の値 "y" があります。また、「X」には 50 から 300 までの 880 の値があり、画像の品質を予測する必要があります。
悲しいことに、アルゴリズムは失敗したようです。いくつかの反復の後、theta の値が非常に小さいため、theta0 と theta1 が「NaN」になります。そして、私の線形回帰曲線は奇妙な値を持っています...
勾配降下アルゴリズムのコードは次のとおりです: ( theta = zeros(2, 1);
, alpha= 0.01, iterations=1500)
そして、コスト関数の計算は次のとおりです。
matlab - 線形回帰を解くための最急降下法と正規方程式法は、さまざまな解を与えます
私は機械学習の問題に取り組んでおり、学習アルゴリズムとして線形回帰を使用したいと考えています。線形回帰モデルのパラメーターを見つけるためにtheta
、最急降下法と法線方程式の2つの異なる方法を実装しました。同じデータで、両方ともほぼ等しいtheta
ベクトルを与える必要があります。しかし、そうではありません。
両方のtheta
ベクトルは、最初の要素を除いてすべての要素で非常に似ています。これは、データに追加された1つすべてのベクトルを乗算するために使用されるものです。
sは次のようになります(最初の列は最theta
急降下法の出力、2番目の列は正規方程式の出力です):
通常の方程式によって返されるtheta(1, 1)
ものと比較して、勾配降下によって返されるものに違いが生じる原因は何ですか?theta(1, 1)
コードにバグがありますか?
Matlabでの正規方程式の実装は次のとおりです。
最急降下法のコードは次のとおりです。
まったく同じデータを両方の関数に渡しX
ますy
(正規化しませんX
)。
編集1:
回答とコメントに基づいて、コードをいくつかチェックし、いくつかのテストを実行しました。
まず、 @ user1489497の回答で示唆されているように、Xビーイングが特異点に近いことが問題の原因であるかどうかを確認したいと思います。だから私はpinvをinvに置き換えました-そしてそれを実行すると本当に警告が出Matrix is close to singular or badly scaled.
ました。それが問題ではないことを確認するために、私ははるかに大きなデータセットを取得し、この新しいデータセットでテストを実行しました。今回は警告と使用をinv(X)
表示せず、同じ結果になりました。だから私はそれがもう特異に近くないことを願っています。pinv
inv
X
次に、 woodchipsが提案するようにコードを変更normalEque
したので、次のようになります。
しかし、問題はまだあります。normalEque
特異に近くない新しいデータの新しい関数は、theta
として異なるものを与えますgradientDesc
。
どのアルゴリズムにバグがあるかを調べるために、同じデータに対してデータマイニングソフトウェアWekaの線形回帰アルゴリズムを実行しました。Wekaは、の出力と非常によく似ていますnormalEque
が、の出力とは異なるシータを計算しましたgradientDesc
。normalEque
ですから、それは正しく、にバグがあるgradientDesc
と思います。
theta
これがWekaによって計算されたsのnormalEque
比較ですGradientDesc
。
Justin Peelの回答で示唆されているように、エラーも計算しました。の出力でnormalEque
は、二乗誤差はわずかに少なくなりますが、差はわずかです。さらに、関数を使用するコストの勾配(で使用されるものと同じ)を計算すると、ゼロに近い勾配が得theta
cost
gradientDesc
られました。の出力で同じことを行うと、gradientDesc
ゼロに近い勾配は得られません。これが私が意味することです:
これは、最急降下法が単に大域的最小値に収束しなかったことを示唆します...しかし、私が何千回も繰り返し実行しているので、それはほとんど当てはまりません。では、バグはどこにありますか?
c++ - C ++ライブラリでの最急降下法の高速実装?
変数のインスタンス化のコストを最小限に抑えるために、最急降下法の最適化を実行しようとしています。私のプログラムは非常に計算コストが高いので、GDの高速実装を備えた人気のあるライブラリを探しています。推奨されるライブラリ/リファレンスは何ですか?
c++ - C++ ライブラリでの高速勾配降下の実装?
重複の可能性:
C++ ライブラリでの高速勾配降下の実装?
変数のインスタンス化のコストを最小限に抑えるために、勾配降下最適化を実行しようとしています。私のプログラムは非常に計算コストが高いので、GD を高速に実装した人気のあるライブラリを探しています。推奨されるライブラリ/リファレンスは何ですか?
machine-learning - 最急降下法とニュートンの最急降下法の違いは何ですか?
最急降下法が何をするのか理解しています。基本的には、曲線をゆっくりと下に移動することにより、局所的な最適解に向かって移動しようとします。計画勾配降下法とニュートン法の実際の違いは何ですか?
ウィキペディアから、私はこの短い行を読みました。「ニュートン法は曲率情報を使用して、より直接的なルートを取ります。」これは直感的にどういう意味ですか?
machine-learning - 制約付き勾配降下 (ラグランジュ乗数)
勾配降下法を使用して、N 個のパラメーターで関数の最小値を見つけようとしています。ただし、パラメーターの絶対値の合計を 1 (または <= 1 は関係ありません) に制限しながら、それを行いたいと考えています。このため、ラグランジュ乗数の方法を使用しているため、関数が f(x) の場合、f(x) + ラムダ * (g(x)-1) を最小化します。ここで、g(x) は滑らかな近似値です。パラメータの絶対値の合計。
私が理解しているように、この関数の勾配は g(x)=1 の場合にのみ 0 になるため、局所的最小値を見つけるメソッドは、条件も満たされる関数の最小値を見つける必要があります。問題は、この関数の追加が制限されていないため、Gradient Descent がますます大きなパラメーター (絶対値) を持つますます大きなラムダを単純に見つけ、決して収束しないことです。
現時点では、Python (scipy) による CG の実装を使用しているため、自分で CG コードを書き直したり微調整したりする必要はなく、既存の方法を使用する提案を希望します。
machine-learning - 最急降下法とfminunc
最急降下法を実行しようとしていますが、まったく同じデータを使用すると、オクターブ組み込みのfminuncと同じ結果を得ることができません。
私のコードは
ここで、costFunctionは、例(X、y)とparameters(theta)が与えられたときに、コストと勾配を計算します。
組み込みのオクターブ関数fminuncもcostFunctionを呼び出し、同じデータを使用すると、はるかに少ない反復ではるかに優れた答えが見つかります。
オクターブが同じコスト関数を使用しているとすると、costFunctionが正しいと思います。
極小値に達して反復回数を増やす場合に備えて、学習率を下げてみましたが、コストが下がらなくなったので、最小値を見つけたようですが、最終的なシータのコストはまだはるかに高く、正確に近いところはありません
fminuncがより優れたアルゴリズムを使用している場合でも、最急降下法は、十分な反復とより小さな学習率で最終的に同じ答えを見つけることができますか?
または誰かが私が何か間違っているかどうかを見ることができますか?
助けてくれてありがとう。