勉強中に感じたことのメモ。
内容の真偽については保証できません。
行列演算
ニューラルネットワークの、入力に対して重みを掛ける積和演算を、行列の積で表すことができる。
人間が読みやすくなる。
計算量は変わらない。
Python
Pythonは、行列演算が簡単にできるような仕組みになっている。(ライブラリ?)
配列を投げると、勝手にforeachして、勝手に要素ごとに演算を行い、勝手に元の配列と同じ構造に並べて、返してくれる。
他の言語でfor分3重ループ20行ぐらいの処理が、2~3行で書けたりする。
計算量は変わらない。
ニューラルネットワークの構造を決めるのは人間
ニューラルネットワークの出力ノード数や、中間層の層数やノード数は人間が決める。
例えば、手書きの数字の推論であれば、出力ノード数は10個にする。
ステップ関数/シグモイド関数や、恒常関数/ソフトマックス関数の選択も人間が決める。
構造を決めてからでないと学習ができない。
中間層は何パターンか作って学習させて、正解率が高くなったものを選ぶ?
推論モデルを実装するマシンのリソースや処理時間などの制約を受ける。
シグモイド関数
出力が0~1の間で実数を出力する。
シグマ文字に似ているのでシグモイドと呼ぶ。
DLには学習と推論の2つのフェーズがある
学習
学習は、訓練データ(大量)を入力して、出力値と期待値の誤差を逆伝搬させて、ニューラルネットワークの重み(積和演算の係数)を決定するフェーズ。
超ハイスペックなマシンで学習させる。
訓練データのうち、出力期待値とセットになったものを教師データと呼ぶ。
教師がなくただデータが大量にあるだけの場合も学習する手法はある。
推論
推論は、学習で決定したモデルを使用して、個々の入力データを分析するフェーズ
エッジコンピュータへインプリメントして、実務を行う。
スペックは高いとは限らない。
DLの出力は、分類と回帰の2つの出力方式がある
DLで解く問題には、大きく分けて、分類問題と回帰問題の2つの問題がある。
分類
分類はデジタル値で出力する問題
画像から動物か車かを推論したり、動物の種族を推論するなど
回帰
回帰はアナログ値を出力する問題
例えば画像から体重を推論するなど
ソフトマックス関数
出力ノードすべての合計値が1となるような、比率を出力するように、出力値を補正する関数。
回帰問題の出力段に使用する。
入出力の順位は変わらないので、1位の結果だけ出力する場合には、ソフトマックス関数を通しても通さなくても結果は変わらない。
分類問題の場合はソフトマックス関数を通さずに、1位の結果だけ出力することが多い。
分類問題でも、猫の確率88%犬の確率12%などと出力する場合は使用する。