機械学習に使われる数学

<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC">機械学習</a>に使われる数学

機械学習に使われる数学

ディープラーニング入門:Chainer チュートリアル
3. 機械学習に使われる数学 — ディープラーニング入門:Chainer チュートリアル

機械学習とは

  • 与えられたデータを元に
    • 未知のデータに対して当てはまる規則やパターンを抽出
    • それらを元に未知のデータを分類予測
  • 応用範囲
    • 画像認識
    • 音声認識
    • 文書分類
    • 医療診断
    • 迷惑メール検知
    • 商品推薦

教師あり学習

  • supervised learning
  • 問題に対してあらかじめ答えを用意
    • 予想された答えと実際の答えの違いが小さくなるように訓練
  • 与えられたデータから関係性を予想
    • 未知のデータに対しても筋の良い見通しを立てることが教師あり学習の代表的な目標の1つ

直線による近似

f(x)=wx+bf(x)=wx+b

  • 1つの入力xを与えると1つの出力を返す関数f
    • 傾きwと切片bの2つのパラメータで特徴づけられる
    • wとbの値をうまく決定して点の集まりにうまく沿うような直線を見つけることができれば新しいxが与えられた時に、tの値がどのような値になりそうかを予測できる
    • 未知のデータに対しても精度よく予測ができることを汎化性能(generalizability)が高いという
    • パラメータを使って何らかの計算を行うことで与えられたデータの特徴や関係性を表すものをモデル(model)と呼ぶ
  • xとtの関係をよく表すモデルのパラメータwとbはどうやって決定すれば良いか
    • 点がもし3次元空間や、4次元、5次元といった人間には想像することが難しい高次元空間に散らばっていたら、目で見ることもできないため困難
    • コンピューターにこれらの点のデータを与えて、自動的に最適なwとbを探させようというのが、機械学習で行われる代表的な処理の一つ

目的関数

  • コンピューターに良いパラメータを自動的に見つけてもらうためには、何が良いパラメータなのかという指標を定義する必要がある
    • 指標を表す関数を目的関数(objective function)と呼ぶ
    • xを入力変数(input variable), yを出力変数(output variable)と呼ぶ
    • 与えられた具体的なxの値を入力値(input value)と呼ぶ
    • 実際の点のもつtの値は、この式が予測したい目標の値なので、目標値(target value)と呼ぶ

二乗誤差関数

  • x1=100x_{1}=100, t1=40t_{1}=40のように置いてみる
    • 別な点も取り出してきて、同じように座標値(x,t)(x,t)(x2,y2)(x_{2},y_{2})と書くことにする
    • 同様に200個点を取り出してきたとすると、200個のxの値x1,x2,...,x200x_{1},x_{2},...,x_{200}t1,t2,...,t200t_{1},t_{2},...,t_{200}が得られる
    • このx1,x2,...,x200x_{1},x_{2},...,x_{200}からt1,t2,...,t200t_{1},t_{2},...,t_{200}を予想するのが目標
      • x1,x2,...,x200x_{1},x_{2},...,x_{200}が入力値
      • t1,t2,...,t200t_{1},t_{2},...,t_{200}が目標値
    • 式により得られた予測値yをy1,y2,...,y200y_{1},y_{2},...,y_{200}とする
    • これらの予測値の正確さを、対応する目標値との差の二乗によって測るのが、二乗誤差関数(squared error function)
  • nn個目の予測値をyny_{n}、目標値をtnt_{n}とすると、以下のような関数

l=(tnyn)2l=(t_{n}-y_{n})^2

  • nn個目のデータに対する予測値と目標値の差異を表す
    • ある1つのデータに対してだけ予測がうまくいっていたとしても、それ以外のえー他に対して全くうまく予測できないのであれば、そのモデルが新しい値に対して正確な予測を行うことは困難
    • 200個のデータすべてにわたって、この二乗誤差を足し合わせ、データ数の200で割って平均を取ったものを考える

L=1200n=1200(tnyn)2L=\frac{1}{200}\sum_{n=1}^{200}(t_{n}-y_{n})^2

  • \sumは総和を表す
    • (tnyn)2(t_{n}-y_{n})^2の値を、n=1n=1から順番にn=2,n=3,...,n=200n=2,n=3,...,n=200まで計算
    • 全てを足し合わせて200で割る
  • 平均二乗誤差(mean squared error)
    • 連続値を予測する回帰問題などでよく用いられる
    • 予測値と目標値が全てのnnに置いて完全一致するときだけ0になる
    • それ以外では必ず正の値をとる
    • この目的関数の値を最小にするwとbが、求めたい最適なパラメータ

目的関数の最適化

  • ある関数を最小にする入力変数の値を求めることを最適化という
  • 最適化をコンピュータで自動的に行うにはどうするか
  • 関数に適当な値をまず入力してみて、得られた値を使ってその値が小さくなりそうな方向に入力を少し動かす、ということを繰り返していって、関数が最小値をとる入力値を探索する、という方法がある

機械学習で使われる数学

  • このような最適化を行うのに必要になるのが微分(differential)
    • 入力をどちらに動かせば出力が小さな値になりそうか、ということを知るためには、対象の関数を微分する必要がある
  • 1つの値を入力して1つの値が出力される関数を考えてきたが、複数の値を同時に扱いときに必要になるのが、線形代数(linear algebra)
  • 点がもし本当は直線上にぴったり沿うようなデータであったのに、観測時に何らかの理由でノイズが乗ってしまったがために直線の周辺にバラついて出てきているのだとしたら、そのノイズがどの程度の範囲で値のずれを発生させるものなのか、見当をつけておきたくなる
    • そういったときに必要になるのが、確率(probability)・統計(statistics)の知識

その他

Markdown All in One - Visual Studio Marketplace

が便利すぎてなぜ今まで入れていなかったのかと。これで Haroopad から文句なく移行できる。