はじめに
今回は、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」という本を読...
コメント