MATLAB,Python,Scilab,Julia比較 第4章 その49【勾配降下法⑦】

MATLAB,Python,Scilab,Julia比較 第4章 その49【勾配降下法⑦】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章 その49【勾配降下法⑦】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia4-backnumber/

はじめに

勾配降下法をプログラム的に確認する。
今回はJulia。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

【再掲】勾配降下法の確認プログラムのフロー

太郎くん
太郎くん

とりあえず、勾配降下法の確認プログラムのフローを再掲

  • 目的関数の定義
  • 目的関数の導関数の定義
  • 入力初期値設定
  • ハイパーパラメータの設定
  • 勾配降下法の実装
  • 結果表示
  • グラフへのプロット
フクさん
フクさん

これをJuliaで実施する。

Juliaコード

フクさん
フクさん

Juliaコードは以下。

using PyPlot

# 目的関数の定義(例: f(x) = sin(5x) + 0.5x^2)
function f(x)
    return sin(5*x) + 0.5*x^2
end

# 目的関数の微分(例: df(x)/dx = 5cos(5x) + x)
function df(x)
    return 5*cos(5*x) + x
end

function GradientDescent()
	# 初期値の設定
	x = 2.9  # 初期値

	# ハイパーパラメータの設定
	learning_rate = 0.1  # 学習率
	max_iterations = 100  # 最大イテレーション数

	# 学習過程を保存するための変数
	x_history = zeros(max_iterations)
	f_history = zeros(max_iterations)

	# 勾配降下法の実装
	for i in 1:max_iterations
	    # 勾配の計算
	    gradient = df(x)

	    # パラメータの更新
	    x = x - learning_rate * gradient

	    # 学習過程の保存
	    x_history[i] = x
	    f_history[i] = f(x)
	end

	# 結果の表示
	println("optimal solution:")
	println(x)
	println("optimal value:")
	println(f(x))

	# グラフのプロット
	figure(figsize=(8, 10))

	subplot(2, 1, 1)
	x_vals = LinRange(-3, 3, 100)
	f_vals = f.(x_vals)
	plot(x_vals, f_vals)
	scatter(x_history, f_history, color="r")
	xlabel("x")
	ylabel("f(x)")
	title("Objective Function")
	grid(true)

	subplot(2, 1, 2)
	plot(1:max_iterations, f_history)
	xlabel("Iteration")
	ylabel("f(x)")
	title("Learning Process")
	grid(true)

	tight_layout()
	show()
end

GradientDescent()

処理結果

フクさん
フクさん

処理結果は以下。

勾配降下法(Julia)
optimal solution:
1.936047911053309
optimal value:
1.6214487071489236

まとめ

フクさん
フクさん

まとめだよ。

  • 勾配降下法の実験をJuliaで実施。
  • 予想通り局所最適解に陥った。
  • 局所最適解の回避方法としては学習率を状況に応じて変更する様々は最適化アルゴリズムがある。
    • モーメンタム、AdaGrad、Adamなどなど。

バックナンバーはこちら。

Pythonで動かして学ぶ!あたらしい線形代数の教科書

https://amzn.to/3OE5bVp

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

https://amzn.to/3OBiaax

ゼロからはじめるPID制御

https://amzn.to/3SvzuyR

OpenCVによる画像処理入門

OpenCVによる画像処理入門 改訂第3版 (KS情報科学専門書)
◆◆3言語(C言語、C++、Python)対応で、「画像処理の基本」が身につくと、大好評のテキストの改訂版!◆◆ ・OpenCV4.5に対応し、さらにパワーアップ! ・基本アルゴリズムとサンプルプログラムが豊富で、いますぐできる! ・理論と...

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]

https://amzn.to/3STAe2i

Pythonによる制御工学入門

https://amzn.to/3uskuK5

理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析

https://amzn.to/3UAunQK

コメント

タイトルとURLをコピーしました