質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

875閲覧

al勾配降下法のプログラムについて Python

pomiw0000

総合スコア19

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/07/16 06:20

編集2021/07/16 06:46

質問

勾配降下法のプログラムについて質問です。

①このプログラムを動作したら処理結果が
1.0
1.0
と出力されたのですがこの数値は正しい最小値という認識でいいのでしょうか。

②また学習率αは増加するにつれて収束は早くなりますか?

③極小値が複数存在する関数を求める場合パラメータを複数変更して複数回処理を行うか、
パラメータを変更しなくても複数個の極小値を同時に求めることはできますか?

どなたかご回答お願いいたします。

該当のソースコード

Python3

1from matplotlib import pyplot 2 3x=1.0 4alpha=1.0 5eps=0.001 6y=x**2 7y_dash=2*x 8#データをとっておく用の配列 9array_x=[] 10array_y=[] 11 12while y_dash>eps: 13 y=x**2 14 y_dash=2*x 15 16 array_x.append(x) 17 array_y.append(y) 18 19 x=x-alpha*y_dash 20 21print(len(array_x)) 22pyplot.scatter(array_x,array_y) 23pyplot.show() 24print(x) 25print(y)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2021/07/16 06:44 編集

> ①このプログラムを動作したら処理結果が 1.0 1.0 と出力されたのですが こちらで試しましたがそうはなりませんでした。 もう一度ご確認ください
pomiw0000

2021/07/16 06:45

すみません失礼いたしました。 学習率αがalpha=1.0 でした。 申し訳ございません。
jbpb0

2021/07/16 11:50

> 1.0 1.0 と出力されたのですがこの数値は正しい最小値 y=x**2 の最小値はx=0の時のy=0
guest

回答2

0

①このプログラムを動作したら処理結果が1.0 この数値は正しい最小値という認識でいいのでしょうか。

jeanbiegoさんの図でわかるように0なので間違っています。

②また学習率αは増加するにつれて収束は早くなりますか?

いいえ。学習率の設定は化学や技術の話ではなくARTの世界です。

③極小値が複数存在する関数を求める場合パラメータを複数変更して複数回処理を行うか、
パラメータを変更しなくても複数個の極小値を同時に求めることはできますか?

できません。勾配法の一般論として、初期値から出発して近くの極値を一個求めるだけです。
複数の極小値を求めたいという場合はほとんどなく、最小値を求めたいが極小値で止まってしまうのをどう回避するかということが問題になる場合が多いです。

投稿2021/07/16 13:40

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

alphaが大きすぎて反復横跳びみたいになってるのと、while abs(y_dash)>eps:のようにy'は絶対値とらないと負になったらダメなのではないでしょうか。
そこを変えてみたら、それっぽくなりましたが。(勾配降下法について詳しいわけではないので、ご参考まで)

python3

1from matplotlib import pyplot 2 3x=1.0 4alpha=0.1 5eps=0.001 6y=x**2 7y_dash=2*x 8#データをとっておく用の配列 9array_x=[] 10array_y=[] 11 12while abs(y_dash)>eps: 13 y=x**2 14 y_dash=2*x 15 16 array_x.append(x) 17 array_y.append(y) 18 19 x=x-alpha*y_dash 20 21print(len(array_x)) 22pyplot.scatter(array_x,array_y) 23pyplot.show() 24print(x) 25print(y)

イメージ説明

投稿2021/07/16 07:23

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問