バックナンバーはこちら。
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()
処理結果
フクさん
処理結果は以下。
optimal solution:
1.936047911053309
optimal value:
1.6214487071489236
まとめ
フクさん
まとめだよ。
- 勾配降下法の実験をJuliaで実施。
- 予想通り局所最適解に陥った。
- 局所最適解の回避方法としては学習率を状況に応じて変更する様々は最適化アルゴリズムがある。
- モーメンタム、AdaGrad、Adamなどなど。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
Amazon.co.jp
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
Amazon.co.jp
ゼロからはじめるPID制御
https://amzn.to/3SvzuyR
OpenCVによる画像処理入門
https://amzn.to/498ZUgK
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Amazon.co.jp
Pythonによる制御工学入門
Amazon.co.jp
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
https://amzn.to/3UAunQK
コメント