LoginSignup
6
9

More than 5 years have passed since last update.

機械学習 理解とイメージを掴むための、まとめと、メモ

Last updated at Posted at 2017-06-03

はじめに

この記事は、私個人の、機械学習に対しての理解と、イメージを掴むためのメモ/勉強の記録として、記載します。勉強したこと等を、メモしているだけなので、一度は勉強したけど、つまづいて立ち止まった人向けかつ、シンプルなところから、勉強したい人向けで、何かしら、ご参考、お役に立てればです。

機械学習に必要な数学

・因数分解
・展開
・微分
・導関数の微分
・偏微分
・逆数の微分法
・指数関数の微分
・商の微分方程式
・内積
・線形代数

よく見かける、機械学習のHello Worldブログは、高校数学の知識で〇〇な、シリーズが多いいですが、この辺りの記事を見ても、イメージが掴みづらかったのは、中学校で学ぶ、数学も、一部忘れたため、中高で学ぶ数学を一旦、復習しました。
内積と、線形代数は、2,3次元ベクトル/行列を仕事でよく扱うため薄く理解していた感じです。
復習方法は、googleで、ひたすら、公式/例題等を探して、ローカルにメモ書き/手書き計算、もしくは、youtube、で上記のキーワードを入力すれば、意外と、動画での説明もあり、すぐ復習できます。

※n'とか、良く見かけますが、この「'」の部分は、微分しろという意味です。

順伝播計算が、わかりやすかった資料

・深層学習の非常に簡単な説明
https://www.slideshare.net/SeiichiUchida/ss-71479583
このスライドが、今のところ、内積を理解していれば、誰でも理解できてしまいそうな、内容です。
ものすごくわかりやすかったです。
内積は、3Dだと、ライトベクトルから、光の当たり具合を算出(面の色味を調整)する際に、良く使われたりしますよね。3Dプログラム得意な人は、これ見たら、すぐ、理解してしまうのではないでしょうか?

このスライドでは、ニューロンは、内積とあります、以下のように、

入力(ベクトル)
x1
xi
xd

重み(ベクトル)
w1
w2
wk

この2つのベクトルの内積が、類似度を表現し、

x1*w1+xi*w2+xd*wk = 類似度
1に近いほど、類似度が高い。

というのは、非常に、わかりやすかったです。
この後の、類似度の精度を出すための、線形変換のところの説明は、わかりずらかったので、一旦、ここまで、理解しました。

・高校数学で理解・実装するニューラルネットワーク
http://qiita.com/perrying/items/6b782a21e0b105ea875c#重みとバイアスの更新
非線形関数をかます、やり方が非常にわかりやすい、記事です。
例は、シグモイド関数を使った説明ですが、上記の、内積で、類似度を表すところを当てはめると、

\frac{1}{1+exp(-内積)} = \frac{1}{1+exp(-(x1*w1+xi*w2+xd*wk))}

というやり方で、非線形関数をかますことができます。

シグモイド関数の微分

誤差逆伝播を理解するにあたって、この、シグモイド関数の微分の理解が必要そうだったので、メモです。

・指数関数の微分

(e^-x)'\\
= e^-x(-x)'\\
= e^-x*-1\\
= -e^-x

・商の微分方程式

(\frac{f(x)}{g(x)})' = \frac{f'(x)g(x)-f(x)g(x)'}{g(x)^2}

・実際のシグモイド関数の微分

f(x)' = \frac{1}{1+e^-x}\\
「1」の分子が、商の微分方程式によると、f(x)\\
「1+e^-x」の分母が、g(x)\\
商の微分方程式に当てはめると\\
= \frac{1'*(1+e^-x)-1*(1+e^-x)'}{(1+e^-x)^2} \\
= \frac{0*(1+e^-x)-1*-e^-x}{(1+e^-x)^2}\\
= \frac{e^-x}{(1+e^-x)^2}\\
= \frac{1}{1+e^-x}\frac{e^-x}{1+e^-x}\\
\frac{1}{1+e^-x}このパートは、f(x)に置き換えられるので、以下のようになる\\
= f(x)*\frac{e^-x}{1+e^-x}\\
さらに、\frac{e^-x}{1+e^-x}について、式を展開し、\\
\frac{e^-x}{1+e^-x} = \frac{1+e^-x}{1+e^-x}-\frac{1}{1+e^-x}\\
= 1 - \frac{1}{1+e^-x}\\
= 1 - f(x)\\
となり、\\
f(x)' = f(x)*(1 - f(x))\\
が、シグモイド関数の微分になる。

誤差逆伝播

・ニューラルネットワークの順伝播,逆伝播,確率的勾配降下法を手計算する
http://qiita.com/sz_dr/items/800d043f8ff92f49c18c#comment-0ee03e7d6ad7fb178328
この記事の参考にしたところは、手計算で、重みの更新の計算をしているところです、実際に、この記事見ながら、ノートに、同じく、手計算して、やってみることで、重みの更新方法を理解しました。

二乗和誤差の微分は、

E'=\frac{1}{2}(y-t)^2\\
=\frac{1}{2}(y-t)(y-t)\\
=\frac{1}{2}(y^2-2yt-t^2)\\
=\frac{1}{2}(2y-2t)\\
= y - t

その他メモ

・Nature of code:Neural Networks
http://natureofcode.com/book/chapter-10-neural-networks/
https://www.youtube.com/user/shiffman
これは、Processingもしくは、p5jsを使って、モデル、学習過程を、ヴィジュアライズし、教師あり学習の基本的なところをわかりやすく説明してくれている、チュートリアルです。
さらに、基本を深く学べたのでオススメです。

TODO

ここまでは、理解できたので、これらを、tensorflow使わず、pythonで、実際にやってみて、理解してみる。
良い、リソース見つけたら、時間ができたら、更新。

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9