はじめに MATLAB,Python,Scilab,Julia比較するシリーズの第4章。 第3章では画像処理、座標変換の話がメインだった。 第4章は分類問題関連の話がメインとなる。基本的には以下の流れとなる。 形式ニューロン 決定境界線の安
シミュレーションで実物を扱わなくても仕事ができる環境を目指す。つまり家に引きこもって外に出なくてもOKな世界。
「ブログリーダー」を活用して、KEIさんをフォローしませんか?
はじめに MATLAB,Python,Scilab,Julia比較するシリーズの第4章。 第3章では画像処理、座標変換の話がメインだった。 第4章は分類問題関連の話がメインとなる。基本的には以下の流れとなる。 形式ニューロン 決定境界線の安
勾配降下法の実験をMATLABで実施。 予想通り局所最適解に陥った。 局所最適解の回避方法としては学習率を状況に応じて変更する様々は最適化アルゴリズムがある。 モーメンタム、AdaGrad、Adamなどなど。
勾配降下法に概念レベルの説明。 勾配降下法をプログラム的に確認する方法としてニューラルネットワークではなく、任意の関数に試す方法がある。 勾配降下法プログラムのフローで分かりにくいところを説明。
勾配降下法プログラムのフローで分かりにくいところを説明。 入力初期値は学習のスタート地点。 ハイパーパラメータは学習アルゴリズムの設定値。 グラフへのプロットは履歴付きで。 プログラムの振る舞いをアニメーションgifで確認。
勾配降下法をプログラム的に確認する方法としてニューラルネットワークではなく、任意の関数に試す方法がある。 三角関数と二次関数を合成したもので試す。 プログラムのフローを記載。
勾配降下法に概念レベルの説明。 連鎖律含めた一連の流れを誤差逆伝播法と言う。 ただし、単純パーセプトロンの段階では逆伝播という言葉にしておく。 まずは勾配降下法のみの実験をやってみる。
多変数関数の連鎖律について説明。 ニューラルネットワークを想定した場合の多変量関数の連鎖律について説明。 ニューラルネットワークの学習を想定した場合、暗黙的に追加される関数として入力群がある。
多変数関数の連鎖律に突入したが、これを理解するのに必要な知識があるため、それらを列挙。 合成関数について説明。 合計関数の微分(連鎖律)について説明。 合成関数の微分(連鎖律)の証明を実施。
ニューラルネットワークの学習を想定した場合、暗黙的に追加される関数として入力群がある。 イメージ的に1層増える感じになる。 これはバッチ学習、ミニバッチ学習時の起きる現象。 と言っても、微分すると重みが消えるので足し算に化ける。
ニューラルネットワークを想定した場合の多変量関数の連鎖律について説明。 入力から見た際の関数の伝達ルートが複数になる。 変化させたいのは入力ではなく重み。
多変数関数の連鎖律について説明。 数が増えるだけで普通の連鎖律と変わらない。 図示&数式があると分かり易い。
合成関数の微分(連鎖律)の証明を実施。 途中、いろいろトリッキーなことをする。 結果としては、中間変数を微分、中間変数での微分の組み合わせで表現しなおせるというもの。
合計関数の微分(連鎖律)について説明。 まずは1入力1出力な合成関数。 合計関数の微分をするための公式はあるが、一応証明もしてみる予定。
多変数関数の連鎖律に突入したが、これを理解するのに必要な知識があるため、それらを列挙。 合成関数につい説明。 単純パーセプトロンも入力層の内積、活性化関数、誤差関数の組み合わせが合成関数と言える。
シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分をJuliaで算出。 グラフで比較し、導出した導関数は正しいと言える結果となった。
シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分をScilabで算出。 グラフで比較し、導出した導関数は正しいと言える結果となった。
シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分をPythonで算出。 グラフで比較し、導出した導関数は正しいと言える結果となった。
シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分をMATLABで算出。 グラフで比較し、導出した導関数は正しいと言える結果となった。
シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分をJuliaで算出。 グラフで比較し、導出した導関数は正しいと言える結果となった。
シグモイド関数、シグモイド関数の導関数、シグモイド関数のオイラー法での微分をScilabで算出。 グラフで比較し、導出した導関数は正しいと言える結果となった。
共分散について簡単に説明。 2種類のデータの相関性を評価できる。 相関性について簡単に説明。 正の相関、負の相関。 強い相関、弱い相関。 共分散の式を変形した。
分散の定義及び変形式の確認。 複雑な変形を経た上でシンプルな変形式になる。 展開のルールと、分配のルールが使える。 Excelの表をイメージすると分かりやすいかも?
総和の定義を確認。 単に足すだけ。 係数×要素数をΣを使って表現するパターンもある。 平均値の定義と変形。 総和を要素数でわればOK。 要素数を右辺から左辺に持ってきた変形式が重要。
1次関数最小二乗法の途中過程の連立方程式を再確認。 平均値、分散、共分散の関連性の雰囲気で把握。 これを仮説としていろいろ確認していく。
1次関数最小二乗法の別の算出方法がある。 平均、分散、共分散を利用したもの。 上記の内容を一個ずつ説明していく予定。
1次関数最小二乗法の係数算出の式を元にJuliaで実装。 fit関数と同じと解釈できる結果が得られた。 純粋なベクトル、行列の演算に関してはMATLABとほぼ同じ書き方になる。
1次関数最小二乗法の係数算出の式を元にScilabで実装。 lsq関数と同じと解釈できる結果が得られた。 純粋なベクトル、行列の演算に関してはMATLABと同じ書き方になる。
1次関数最小二乗法の係数算出の式を元にPython(Numpy)で実装。 np.polyfitと同じと解釈できる結果が得られた。
1次関数最小二乗法の係数算出の式を元にMATLABで実装。 polyfitと同じと解釈できる結果が得られた。
1次関数最小二乗法の係数算出の式を元にJuliaで実装。 fit関数と同じと解釈できる結果が得られた。 純粋なベクトル、行列の演算に関してはMATLABとほぼ同じ書き方になる。
1次関数最小二乗法の係数算出の式を元にScilabで実装。 lsq関数と同じと解釈できる結果が得られた。 純粋なベクトル、行列の演算に関してはMATLABと同じ書き方になる。
1次関数最小二乗法の係数算出の式を元にPython(Numpy)で実装。 np.polyfitと同じと解釈できる結果が得られた。
1次関数最小二乗法の係数算出の式を元にMATLABで実装。 polyfitと同じと解釈できる結果が得られた。
Juliaにて1次関数の最小二乗法を実施。 Polynomialsパッケージのfit関数を使用。 他のツール、言語と異なり、係数ではなく、関数が取得される。 配列としてアクセスすれば、係数単体の値と取得できる。
Scilabによる1次関数の最小二乗法を実施。 MATLABと一緒と思いきや、実はコンセプトレベルで違う。 正規方程式の仕様が丸見えになってるイメージ。 正規方程式については追々説明していく予定。
Pythonによる最小二乗法はNumpyのpolyfitで実施可能。 実際にコードを作成し、動作させてみた。 ほぼ同一の係数が算出で来た。 (表示精度の都合、見た目上は違う値にはなってる。)
各種ツール、言語を使うと最小二乗法が一撃で解ける。 ライブラリ的な機能を使うことになる。 後日、ライブラリ未使用もやってみる予定。 今回はMATLABのpolyfitを使って最小二乗法を実施。
Juliaにて1次関数の最小二乗法を実施。 Polynomialsパッケージのfit関数を使用。 他のツール、言語と異なり、係数ではなく、関数が取得される。 配列としてアクセスすれば、係数単体の値と取得できる。
Scilabによる1次関数の最小二乗法を実施。 MATLABと一緒と思いきや、実はコンセプトレベルで違う。 正規方程式の仕様が丸見えになってるイメージ。 正規方程式については追々説明していく予定。
Pythonによる最小二乗法はNumpyのpolyfitで実施可能。 実際にコードを作成し、動作させてみた。 ほぼ同一の係数が算出で来た。 (表示精度の都合、見た目上は違う値にはなってる。)