MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 第4章 その48【勾配降下法⑥】
を書き直したもの。
勾配降下法をプログラム的に確認する。
今回はScilab。
【再掲】勾配降下法の確認プログラムのフロー
とりあえず、勾配降下法の確認プログラムのフローを再掲
- 目的関数の定義
- 目的関数の導関数の定義
- 入力初期値設定
- ハイパーパラメータの設定
- 勾配降下法の実装
- 結果表示
- グラフへのプロット
これをScilabで実施する。
Scilabコード
Scilabコードは以下。
// 目的関数の定義(例: f(x) = sin(5x) + 0.5x^2)
function y = f(x)
y = sin(5*x) + 0.5*x^2;
endfunction
// 目的関数の微分(例: df(x)/dx = 5cos(5x) + x)
function y = df(x)
y = 5*cos(5*x) + x;
endfunction
// 初期値の設定
x = 2.9; // 初期値
// ハイパーパラメータの設定
learning_rate = 0.1; // 学習率
max_iterations = 100; // 最大イテレーション数
// 学習過程を保存するための変数
x_history = zeros(1, max_iterations);
f_history = zeros(1, max_iterations);
// 勾配降下法の実装
for i = 1:max_iterations
// 勾配の計算
gradient = df(x);
// パラメータの更新
x = x - learning_rate * gradient;
// 学習過程の保存
x_history(i) = x;
f_history(i) = f(x);
end
// 結果の表示
printf('optimal solution:');
disp(x);
printf('optimal value:');
disp(f(x));
// グラフのプロット
clf(); // プロットをクリア
subplot(2, 1, 1);
x_vals = linspace(-3, 3, 100);
f_vals = f(x_vals);
plot(x_vals, f_vals);
scatter(x_history, f_history, 100, 'r'); // サイズ指定の追加
xlabel('x');
ylabel('f(x)');
title('Objective Function');
xgrid; // グリッドの表示
subplot(2, 1, 2);
plot(1:max_iterations, f_history);
xlabel('Iteration');
ylabel('f(x)');
title('Learning Process');
xgrid; // グリッドの表示
処理結果
処理結果は以下。
optimal solution:
1.9360479
optimal value:
1.6214487
まとめ
- 勾配降下法の実験をScilabで実施。
- 予想通り局所最適解に陥った。
- 局所最適解の回避方法としては学習率を状況に応じて変更する様々は最適化アルゴリズムがある。
- モーメンタム、AdaGrad、Adamなどなど。
MATLAB、Python、Scilab、Julia比較ページはこちら
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
コメント