📘

Scratch3.0で数値微分+勾配降下法をやってみた

2022/09/08に公開約1,400字

はじめに


今回は、Scratch3.0で数値微分とそれを使って勾配降下法を作ってみたので共有します。

前書き

普段はプログラミングの勉強、ブログで発信しています。ぜひご覧ください!

https://www.chickensblog.com/

作った作品

https://scratch.mit.edu/projects/705543115
  • Xという変数を動かすと、接線が動かせます。
  • スペースキーを押すと勾配降下法が体験できます。

作品の説明

微分というのは、hなどを0に極限まで近づけていく(0として計算)ので、コンピューターでは処理できません。(0で割れないため)
なので、数値微分という方法を使います。hを0に近い値(0.0001)などにして計算します。ただ、人間が手作業で計算したものは0として計算しているので、もちろん誤差が生じます。

詳しいアルゴリズムやプログラムなどはこちらにまとめてみました。

https://www.chickensblog.com/scratch-differential/

今後の予定

  • 三次元に対応させる
    • 簡易的な3Dエンジンを自作する
  • 微分でなく偏微分に対応させる
    • 変数を定数として計算するだけなのでそこまで難しくはない
  • とても複雑な関数を偏微分して勾配降下法を可視化したい
    • 局所解などが視覚的にわかりそう
    • 二次元でもっと複雑な関数を作ってみるのも面白そう
  • 実際のニューラルネットワークの学習に使いたい
    • ニューラルネットワークの重みの勾配を可視化してみると面白そう
    • 学習している最中の勾配を可視化するととても面白そう

今後この作品をどのように発展させていこうかまとめてみました。
今は二次元グラフなので、三次元のグラフにしてさらに可視化し、面白くしたいなと思っています。今は微分ですが、これをほんの少し応用すると偏微分ができます。(実際、偏微分は簡単ですが、三次元グラフを書くプログラムを自作する方が大変💦)

ただ、微分を使った色々な作品に応用できるので、今後が楽しみです!

まとめ

  • Scratch3.0でも数値微分ができた
  • 二次元グラフの描画は簡単だが、三次元グラフを描画するプログラムは難しそう
  • 微分ができてしまえば偏微分はそこまで難しくはない

ここまで読んでいただきありがとうございました!いいねとフォローがとても励みになります。
他にも記事を書いているのでぜひご覧ください。

関連記事

https://zenn.dev/teba_eleven/articles/a0aa439179e4a7

https://www.chickensblog.com/kcc-cat-jump/

https://www.chickensblog.com/scratch-easy-bp/

https://www.chickensblog.com/scratch-electron-app/

https://www.chickensblog.com/scratch-random-list/

https://www.chickensblog.com/scratch-scratch-addons/

Discussion

ログインするとコメントできます