機械学習のための数学のおさらい
- 7. x, y に使える色々な『数』の種類がある
● 数の種類:数学での呼び方と、プログラムでの呼び方(例)
7
数学 プログラム 例(Python/numpy)
スカラー(scalar) 数値定数、数値変数 0 ; 500 ; x ; y
ベクトル(vector) 1次元配列 v = np.array([1, 4, 5])
行列(matrix) 2次元配列 m = np.array([[3, 7, 11], [1, 8, 2]])
テンソル(tensor) 3次元(以上の)配列 m = np.array([
[[1,2], [3,4]],
[[5,6], [7,8]],
[[9,10], [11, 12]],
])
備考:
*テンソルは、他の数のクラス(スカラ・ベクトル・行列)をまとめて表せる概念です。
テンソル観点で、その数クラスを表すときの配列の次元数のことを『階数』といいます。
スカラー=階数0のテンソル;ベクトル=階数1のテンソル;行列=階数2のテンソル
関数の入力・出力は、上記のどんな組み合わせを用いても良い
- 22. 微分法による関数の極大・極小値の求め方概略
■ ある関数* f について、『微分』という操作を加えると、
『導関数**』と呼ばれる別の関数を作ることができる。
■ 元の関数 f が極値(極大値or極小値)となる位置では、
導関数の値はゼロとなる。
➢ つまり:導関数の値がゼロになる位置を見つければ、
そこは f の最大(極大)値か最小(極小)値となっている
22
なぜそうなる?
*微分可能な関数
**導関数の別名:微分係数、微分
- 36. 一番シンプルな機械学習:最小二乗法
■ gの最小値の求め方
■ g を a, bについて微分(偏微分)して、最小値を求める
36
←gは、変数a, b の関数(2変数関数)と見立てる
この連立方程式をとけば良い
#Pythonでは scikitの LinearRegressionクラスで
最小二乗法による関数当てはめができます。
- 40. 解析的な微分と、数値微分
■ 解析的な微分
➢ 数学の世界:数式で関数を書けるもの。
➢ 手計算できる。
➢ 極大・極小がイッパツで見つかる。(微分=0を解くだけ)
■ 数値微分
➢ 微分を差分に置き換えて数値計算し、微分を『近似』したもの。
• コンピュータでは、極限(無限小)を直接扱えない。
• MLなど現実的な問題では、関数の形は非常に複雑になり、
解析的な数式では表現できない。
➢ 注意点
• 極大・極小は、探索処理で見つける必要がある。
• 厳密に見ると誤差がある。
✓ 実用的に十分な誤差範囲を設定し、そこで計算を打ち切る。
40
- 41. 数値微分の実装
■ df/dx を ⊿f/⊿x で近似する
■ 十分に小さい ⊿x を決める
➢ 例えば、ディープラーニングでは、1/10000 = 0.0001が使われる
■ 以下を計算する
41
x=a
f(a)
f(a+⊿x
)
x=a+⊿x