バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia4-backnumber/
はじめに
形式ニューロンについての解説。
今回は総当たり法による分類について説明。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
【再掲】形式ニューロンへ至る道
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
まずは、形式ニューロンへ至る道を再掲。
- ヘヴィサイド関数(済)
- 形式ニューロン(済)
- 分類問題のHelloWorld(済)
- 誤差関数(済)
- 決定境界直線(済)
- 決定境界直線の特定方法(済)
- 総当たり法による分類
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
今回は総当たり法による分類について説明する。
総当たり法
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
総当たり法の説明をするが・・・。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
ロードマップの最後だね
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
これはもう名前の通りなんだよね・・・。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
まぁ、そうだろうとは思ったけど・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
・・・。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
・・・
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
・・・。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」11アップ.png)
なんか説明無いの?!
気を付けるところとか!?
総当たり法を実施する条件
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
特に注意点も無いんだよなぁ。
まぁ、今回実施する条件を確認しておこう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
プログラム化するから、何かしらの条件は必要そうだよね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
決めるのは以下。
- 入力とそれに対する期待される結果
- 動かすパラメータ
- 値を振る範囲
- 値の刻み
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
「入力」と「期待される結果」は、ANDゲートの真理値表だよね。
パラメータは\(w_1,w_2,b\)とか?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
そうそう。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
値を振る範囲は-4~4の範囲にしておこう。
値の刻みは細かすぎても時間がかかるだけだらか0.1くらいが良いだろう。
プログラムの流れ
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
これでプログラムを作れる情報はそろったのかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうだね。
あとはフローを記載しておこう。
- 入力データセットの定義
- 出力データセットの定義
- パラメータ変数の定義(重み、バイアス)
- 学習率定義
- 重みとバイアスの総当たり計算(ループ)
- 重みとバイアスを使用して予測値を算出
- 損失の計算
- 損失の更新
- 最も損失が小さいパラメータの記憶
- 学習結果の表示
- 出力結果の確認
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
まあまあ処理することはあるな・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
コード量は大したことないが、
3重ループを形成することになるはずだ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
3重ループってことはfor文が3段ネストするってこと?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうそう。
このネストの数は値を振るパラメータの数に依存する。
今回だと\(w_1,w_2,b\)の3つパラメータの値に対しで全域で振るんで3重ループになる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
そうか。
総当たりで、片っ端から試し打ちするから、そういうことになるのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
というわけで、次回以降はこれをプログラムで実現する話に突入だ。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 総当たり法について解説・・・と思いきや、名前のまんま。
- プログラム化の前提だけ決めた。
- 実際のプログラムのフローを記載。
バックナンバーはこちら。
コメント