スポンサーリンク

【Scratch】簡単な誤差逆伝播法を作ってみた【ゼロから作るDeep Learning】

当サイトではアフィリエイト広告を利用して商品を紹介しています。

AI

はじめに

今回は、「ゼロから作るDeep Learning❶」という本を読んで、その中でも簡単な誤差逆伝播法をScratch3.0で再現してみました。

これをもとに、今後、バッチ版Affineレイヤの誤差逆伝播法もScratch3.0で再現してみようと思います。

他にも、Scratchで作品を作っています↓

【Scratch】微分するプログラムを作ってみた【勾配降下法...
はじめに今回は、Scratch3.0で微分(数値微分)をやってみたので...
Scratchで拡張機能などを一切使わずにニューラルネットワ...
外部ライブラリなどを使わずにニューラルネットワークを作ってみました。P...
Scratchでモンテカルロ法を使ったリバーシを作ってみた【...
今回は、自分がScratchで作った、モンテカルロ法を使ったリバーシに...
Scratchの作品をMacやWindowsで動くようにアプ...
はじめに今回は、Scratchで作った作品(ゲームなど)をMacやWi...

作成したプログラム

作品説明

  • apple、apple_num、taxの値を変更可能
  • 赤色の矢印が順伝播
  • 青色の矢印が逆伝播
  • appleなどの変数がどの部分にどれだけ影響を与えているかが計算されて表示されています

誤差逆伝播法とは

誤差逆伝播法というのは、ニューラルネットワークのパラメーターの勾配の値を効率的に求める効率的なアルゴリズムです。

誤差逆伝播法について詳しく

バックプロパゲーション - Wikipedia

なぜ誤差逆伝播法が早いのかについて↓

【なぜ】誤差逆伝播法が数値微分より高速な理由について「完全に...
はじめに今回は、「ゼロから作るDeep Learning」という本を読...

プログラム解説

メインループ

  • 各変数の初期化
  • mul_apple_layer(順伝播)&mul_tax_layer(順伝播)の実行
  • back_1(逆伝播)&back_2(逆伝播)の実行
    • back_1=mul_tax_layer
    • back_2=mul_apple_layer

※順伝播は

  • mul_apple_layer→mul_tax_layerだが

逆伝播は

  • mul_tax_layer→mul_apple_layer

なので、順伝播とは処理の順番が逆になる。

mul_apple_layer(りんごの個数から価格を計算するレイヤ)

  • mul foward 関数
    • 順伝播の処理
  • backward 関数
    • 逆伝播の処理
  • 順伝播→単純にx*yの計算&xとyの値を保持しておく
  • 逆伝播→保持したxとyと後ろから伝わってきた誤差を掛ける(xとyは反転させる)

mul_tax_layer(消費税の計算レイヤ)

  • mul_tax_layerとほぼ同じ
    • 伝播していく変数が違うだけなので、使っている関数などは同じ。

まとめ

  • Scratchでも誤差逆伝播法は再現できた
  • 簡単な誤差逆伝播法だと少ないブロックでも作れた
  • 変数をいじることができて、リアルタイムかつ視覚的にわかるので面白い

今後について

  • Affineレイヤの誤差逆伝播の実装、バッチ版Affineレイヤの誤差逆伝播の実装
  • レイヤのプログラムをどうやって綺麗に書くか課題
    • Pythonのようなオブジェクト指向ではないため
    • 今回のプログラムはPythonのオブジェクト指向のコードに似せたが、なかなかオブジェクト指向っぽく書くのが難しい…
  • PythonのNumPyのような演算ライブラリの自作について
    • ベクトルや行列の演算はできているが、少し使いづらい部分や、冗長化している部分があるので、どうにか綺麗にしたい
  • とにかくコードを綺麗にしたい
    • (大規模なニューラルネットワークになるともうぐちゃぐちゃになっちゃうので)

最後に

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

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

Scratchの作品をMacやWindowsで動くようにアプ...
はじめに今回は、Scratchで作った作品(ゲームなど)をMacやWi...
【Scratch】簡単なアクションゲームの作り方!リアルにジ...
はじめに 今回は、Scratchで猫をリアルにジャンプさせる方法につい...
【Scratch】迷路を自動で作ってくれるプログラム&迷路探...
はじめに今回は、Scratchで迷路を自動で生成するプログラムを作って...
【MathJax LaTeX】文章中に数式を入れる方法【Wo...
やりたいこと関数fをxで偏微分すると、\(\frac{\partial...
Google Colabを使ってYOLOv5が動く環境を作る...
はじめに今回は、Google ColabでYOLOv5の開発環境を構築...

コメント

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