スポンサーリンク

【Scratch】微分するプログラムを作ってみた【勾配降下法も】

Scratch

はじめに

今回は、Scratch3.0で微分(数値微分)をやってみたので、仕組みなどを共有していきたいと思います。

※コード(プログラム)が汚いですが、試作品なので見逃してください^^;

作成したプログラム

  • 調整用変数
    • グラフの大きさ変更
  • 変数x
    • 微分する位置
  • スペースキー
    • 勾配降下法が実験できます

数値微分とは

$$\lim _{h\rightarrow 0}\frac{f( x+h) -f( x)}{h}$$

これは普通の微分の公式です。

ただし、hを0にするとコンピューターでは計算できなくなってしまうので、0に近いかなり小さい数字を代入してあげます。これを、数値微分と呼びます。

微分される関数

$$f( x) =( x+4)( x+1)( x-1)( x-3)$$

今回はこちらの関数を数値微分してみます。

プログラム解説

メインループ

グラフの描画→自分のスプライトのxy座標設定→関数の微分→微分係数を角度に変換

グラフの描画をするプログラム

x座標-240から240まで、変数xを変えながらグラフをペンで描画する定義です。調整用変数というものは、グラフのサイズを変えるためなので、別に難しいことをしているわけではないです。

微分される関数

xを入れると、出力を計算して、戻り値という変数に入れてくれます。

微分するプログラム

微分をする関数です。微分される関数に極小な値を入れたhを加算したものを入れて、微分しています。公式をプログラムで書いただけですね。

勾配降下法のプログラム

微分係数と変化率をかけて、0を引いて符号を逆転させています。こんなに簡単に勾配降下法が作れちゃうのは面白いですね。

まとめ

  • Scratchでも数値微分、勾配降下法ができた
  • 意外と簡単に作れて、視覚的にわかりやすいので、面白い
  • Scratchの定義は戻り値がないので、戻り値を担う変数を作らなければならない

今後について

  • 他変数の微分(偏微分)を作成したい
    • 数値微分とほぼ変わらないので、簡単
    • それより、グラフを3Dで描画する方が難しい
  • 2変数1出力の関数(2乗和)などを3Dで表示して、勾配を求めて視覚化してみたい
  • ニューラルネットワークなどに使ってみたい

最後に

記事のSNSシェア、共有よろしくお願いします!

他にも記事を書いているので、ぜひご覧ください!

Scratchの作品をMacやWindowsで動くようにアプ...
はじめに今回は、Scratchで作った作品(ゲームなど)をMacやWi...
【Scratch】迷路を自動で作ってくれるプログラム&迷路探...
はじめに今回は、Scratchで迷路を自動で生成するプログラムを作って...
【Scratch】簡単なアクションゲームの作り方!リアルにジ...
はじめに 今回は、Scratchで猫をリアルにジャンプさせる方法につい...
Scratchのブロックをネコにする方法を解説!【Scrat...
Scratchのブロックをネコにする! 今回は、エイプリルフールネタで...
【なぜ】誤差逆伝播法が数値微分より高速な理由について「完全に...
はじめに今回は、「ゼロから作るDeep Learning」という本を読...

コメント

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