スポンサーリンク

【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のブロックをネコにする方法を解説!【S...
Scratchのブロックをネコにする!今回は、エイプリルフールネタでS...
【なぜ】誤差逆伝播法が数値微分より高速な理由について「完全に...
はじめに今回は、「ゼロから作るDeep Learning」という本を読...

コメント

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