MATLAB,Python,Scilab,Julia比較 第4章【バックナンバー】

MATLAB,Python,Scilab,Julia比較 第4章【バックナンバー】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章【バックナンバー】

はじめに

MATLAB,Python,Scilab,Julia比較するシリーズの第4章。

第3章では画像処理、座標変換の話がメインだった。

第4章は分類問題関連の話がメインとなる。
基本的には以下の流れとなる。

  • 形式ニューロン
  • 決定境界線の安定化
  • 単純パーセプトロン(線形分類)
  • 多層パーセプトロン(非線形分類)

細かいところとしては、誤差関数、連鎖律、勾配降下法、誤差逆伝播法などの話も出てくる。

ちなみに、問答方式じゃない方も記事もある。
問答方式に合わせて内容を強化していく予定。

書籍とか

Pythonで動かして学ぶ!あたらしい線形代数の教科書

https://amzn.to/3OE5bVp

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

https://amzn.to/3OBiaax

ゼロからはじめるPID制御

https://amzn.to/3SvzuyR

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]

https://amzn.to/3STAe2i

OpenCVによる画像処理入門

https://amzn.to/498ZUgK

Pythonによる制御工学入門

https://amzn.to/3uskuK5

理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析

https://amzn.to/3UAunQK

その他の章

分類問題とは?

  • 本シリーズは分類問題を扱っていく予定。
  • 機械学習のカテゴリわけを簡単に説明。
    • 分類とクラスタリングは雰囲気似てるけど、違うという扱い。
  • 分類問題について簡単に説明。
  • 分類手法について列挙。
    • この中のパーセプトロンをベースに話を進める。

形式ニューロン

  • 形式ニューロンを把握するためのロードマップを提示。
  • ヘヴィサイド関数を説明。
    • とりあえず、もやっとしたものをYes/Noに変換できるとと思っておけばOK。
  • 形式ニューロンの概念図を説明。
    • よく見るニューロンの概念図と類似。
  • 形式ニューロンの数式を説明。
    • 重みと入力の内積の結果をヘヴィサイド関数に渡して0or1にしている。
  • 分類問題のHelloWorld総統はANDゲート。
  • ANDゲートを形式ニューロンで実現するための構成を説明。
    • 2入力1出力の構成になる。
  • 代表的な誤差関数について説明。
    • MSE:分散と一緒であり、統計的に意味のある数値
    • SSE:シンプルであり、利用しやすい
    • RMSE:標準偏差的位置づけであり、人間から見て意味のある数値になりやすい。
  • 決定境界直線について説明。
    • 分類する上で仕分けを行う境界線。
  • ANDゲートの場合の想定される決定境界直線を図解。
    • 境界線を境にtreu,falseに分かれる。
      • この性質がヘヴィサイド関数と相性が良い。
  • 決定境界直線の必要性について。
    • 推論するだけだったら不要だが、学習済みモデルの性能を評価する際は必要。
  • 決定境界直線の特定方法を説明。
    • ヘヴィサイド関数の出力が0.5であることを仮定して数式を解けばOK。
  • 総当たり法について解説・・・と思いきや、名前のまんま。
    • プログラム化の前提だけ決めた。
  • 実際のプログラムのフローを記載。

MATLAB

  • 形式ニューロンをMATLABで実現。
  • ANDの真理値表と同じ結果が得らえれた。
  • しかし、決定境界線はギリギリな感じ。

Python

  • 形式ニューロンをPython(NumPy)で実現。
  • ANDの真理値表と同じ結果が得らえれた。
  • そして、決定境界線はギリギリな感じはMATLABのときと一緒。

Scilab

  • 形式ニューロンをScilabで実現。
  • ANDの真理値表と同じ結果が得らえれた。
  • そして、決定境界線はギリギリな感じはMATLABのときと一緒。

Julia

  • 形式ニューロンをJuliaで実現。
  • ANDの真理値表と同じ結果が得らえれた。
  • コードレベルでMATLABと近似。

決定境界線の安定化

  • 形式ニューロンのプログラムでは決定境界直線がギリギリのラインに来ていた。
  • 上記を解消するため、どうあるべきか。について説明。
    • この後に、なぜこうなったか、どうすればかいしょうできるかの話が続く予定。
  • 決定境界直線がギリギリなる理由。
    • ヘヴィサイド関数の性質に原因がある。
  • ヘヴィサイド関数の性質は入力0を境に出力0,1が切り替わるのみで勾配が無い。
    • これにより程度の表現ができず、境界直線も適正位置が探せない。
  • 決定境界直線をいい感じのところに持っていくにはヘヴィサイド関数を差し替える必要がある。
  • ヘヴィサイド関数の原点近辺に傾斜を付けたカスタムヘヴィサイド関数(造語)が良さげ。

MATLAB

  • 形式ニューロンの活性化関数をカスタムヘヴィサイド(造語)関数にしたものをMATLABで作成。
  • 狙い通りの位置に決定境界直線が移動。
  • コードはヘヴィサイド関数をカスタムヘヴィサイド関数に変えただけ。

Python

  • 形式ニューロンの活性化関数をカスタムヘヴィサイド(造語)関数にしたものをPython(NumPy)で作成。
  • おおよそMATLABと同じ結果に。
    • 毎度おなじみの表示上の誤差は出る。

Scilab

  • 形式ニューロンの活性化関数をカスタムヘヴィサイド(造語)関数にしたものをScilabで作成。
  • おおよそMATLABと同じコード。
    • 毎度おなじみのグラフ表示部分に差が出る。

Julia

  • 形式ニューロンの活性化関数をカスタムヘヴィサイド(造語)関数にしたものをJuliaで作成。
  • 例に漏れずMATLABコードのコピペがベース。

シグモイドによる決定境界安定化

  • 決定境界直線の一般的な安定化方法がある。
    • シグモイド関数を使用する方法。
  • ヘヴィサイド関数のように0,1を表現することを目的とした関数だが、シグモイド関数は全域で勾配がある。
  • シグモイド関数の定義について説明。
    • 特に理屈はなく、そういうものが存在するって程度。
  • カスタムヘヴィサイドとシグモイドの比較。
    • 総当たり法では効能の差は出ないが、誤差逆伝播法を使い始めるとシグモイドじゃないと都合が悪い。

MATLAB

  • 活性化関数をシグモイド関数にした形式ニューロンをMATLABで実現。
  • 結果はカスタムヘヴィサイドの時と一緒。

Python

  • 活性化関数をシグモイド関数にした形式ニューロンをPython(NumPy)で実現。
  • 結果はカスタムヘヴィサイドの時と一緒。

Scilab

  • 活性化関数をシグモイド関数にした形式ニューロンをScilabで実現。
  • 結果はカスタムヘヴィサイドの時と一緒。

Julia

  • 活性化関数をシグモイド関数にした形式ニューロンをJuliaで実現。
  • 結果はカスタムヘヴィサイドの時と一緒。

連鎖律の前準備

  • 総当たり法では非効率なので最適化アルゴリズムを使用する。
  • 最適化アルゴリズムを使用するには連鎖律が必要。
  • 連鎖律を利用するには損失、活性化関数、各層の入力の導関数を求める必要がある。
  • 連鎖律を把握するための知識を列挙。
    • 恐らく数式ラッシュになる。
  • まずは逆数の微分公式。
    • 途中、式を分解してそれぞれの導関数を求めてから代入で導出できる。

コメント

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