共著
前説
こんにちは、こちらの記事ではちょっと遅いかもしれませんが、Courseraの人気機械学習コースを社内の勉強会として、学習を行ったのでその記録をつけていきたいと思います。
内容が深いものになるのかは分かりませんが、もし何か読んでくださった皆様の気づきなどに貢献できましたら幸いです。
シラバス
- Introduction
- Linear Regression with Multiple Variables
- Logistic Regression
- Neural Networks: Representation
- Neural Networks: Learning
- Advice for Applying Machine Learning
- Support Vector Machine
- Anomaly Detection
- Large Scale Machine Learning
- Application Example: Photo OCR
リンク
1. Introduction (2018/4/22)
- Machine Learningとは
E → Experience
T → Task
P → Probability
ある課題Tについて、ある性能基準Pに基づいて、Tについての性能基準Pで測定して経験Eと共に改善されている場合に、経験Eから学習していると言える。(トム・ミッシェル)
例:チェッカーゲーム
E → 無数のプレイ経験
T → チェッカーのプレイ
P → 次のプレイで勝つ確率
- 教師あり学習
データセットの全てのサンプルに「正しい答え(ラベル)」が与えられ、アルゴリズムにその答えを予測させるもの。
大別して
1. 回帰問題(Regression):連続値の予測(e.g. 住宅の価格)
2. 分類問題(Classification):離散値の予測(e.g. 腫瘍が悪性か良性か)
の2つがある。
- 教師なし学習
「正しい答え(ラベル)」が与えられていないデータセットに対し、構造分け(クラスタリング・アルゴリズム)をしたり、1つの音声データを2つに分離(カクテルパーティ・アルゴリズム)したりすること。
- 機械学習を進める上で
Octave環境を使い始めることが最も効率的に学習を進める方法。
まずは施策をOctave環境で行い、それが実際に機能するようになったらC++やJavaなどに移植する、といったやり方を採ることが最も速く試作できるようになる。
2. Linear Regression with Multiple Variables (2018/5/1)
線形回帰
教師あり学習アルゴリズムの仕事は、ある関数を出力することでありこれはh(hypothethis)で表現される。
例えば、単回帰(変数が一つの線形回帰)であれば $ h_θ(x)=θ_0+θ_1x $ で表現する。
入力されたxという値に対応してyという値を返す関数と言い換えることができる。目的関数(Cost Function)
データに対し、どのように最適な直線を当てはめるかを算出するための関数。
式は以下のように表される。
minimize_{θ_0θ_1} \space J(θ_0,θ_1)= minimize_{θ_0θ_1} \space \frac{1}{2m} \sum_{i=1}^{n} (h_θ(x^{(i)}-y(i))^2\\
この式の意味することは「$θ_0$と$θ_1$の値を、右の式が最小になるように求める」ということ。
最終的なゴールは
minimize_{θ_0θ_1} J(θ_0,θ_1)
を自動的に求めるソフトウェアを作成することとなる。
- 最急降下法(Gradient Descent)
minimize_{θ_0θ_1} J(θ_0,θ_1)
を求めるときに、「$θ_0,θ_1$に対して0を代入して、値を少しずつ変えることでコスト関数の最小値を求めるやり方」
式は以下の通り。
θ_j := θ_j - a\frac{d}{dθ}J(θ_0,θ_1) \qquad (for \quad j=0 \quad and \quad j=1)
各項目については下記参照。
導関数項
「関数に対する接線の勾配は何か」を表す。学習率
$\alpha$の部分。
接線を求める点から点への移動距離。
局所に近づけば近づくほど相対的に距離は短くなる。
また、今回は扱わなかったが、勾配法の類される最適化アルゴリズムのメンバーにはほかにも多くのものがある、
こちらのサイトにきれいにまとめてあるので、参照されたい。
https://postd.cc/optimizing-gradient-descent/
https://qiita.com/tomitomi3/items/d4318bf7afbc1c835dda
Python実装のSGD: https://qiita.com/kenmatsu4/items/d282054ddedbd68fecb0
3.Linear Algebra Review
・行列(Matrix)
長方形型に並んだ数字の配列のこと。
行(rows)と列(columns)の数で表す。
特定の要素を表す際には
A_ij \qquad(i=row\: number,j=column\:number)
で表す。
・ベクトル(Vector)
行列のうち、列1のもの。
n次元ベクトルとは、要素がn個のベクトルを指す。(n×1行列)
・行列の足し算
\begin{pmatrix}
1 & 0 \\
2 & 5 \\
3 & 1
\end{pmatrix}
+
\begin{pmatrix}
4 & 0.5 \\
2 & 5 \\
0 & 1
\end{pmatrix}
=
\begin{pmatrix}
5 & 0.5 \\
4 & 10 \\
3 & 2
\end{pmatrix}
となる。
足し算は次元の同じ行列でしかできない。
・行列の乗算
3×
\begin{pmatrix}
1 & 0 \\
2 & 5 \\
3 & 1
\end{pmatrix}
=
\begin{pmatrix}
3 & 0 \\
6 & 15 \\
9 & 3
\end{pmatrix}
となる。
割り算についても、分数の掛け算とみなし同様の計算が可能。
・行列×ベクトル
\begin{pmatrix}
1 & 3 \\
4 & 0 \\
2 & 1
\end{pmatrix}
\begin{pmatrix}
1 \\
5
\end{pmatrix}
=
\begin{pmatrix}
16\\
4\\
7
\end{pmatrix}
となる。
公式は
A(m×n \:matrix)×x(n\:dimensional\:vector)=y(m\:dimensional\:vector)
であり、各要素を
y_i=A_{i1}×x_1+A_{i2}×x_2 \cdots+A_{in}×x_n
で求める。
・行列×行列
\begin{pmatrix}
1 & 3 & 2 \\
4 & 0 & 1
\end{pmatrix}
×
\begin{pmatrix}
1 & 3 \\
0 & 1 \\
5 & 2
\end{pmatrix}
=
\begin{pmatrix}
11 & 10 \\
9 & 14
\end{pmatrix}
となる。公式は
A(m×n \:matrix)×B(n×o \:matrix)=C(m×o \:matrix)
であり、各要素を
\begin{pmatrix}
1 & 3 & 2 \\
4 & 0 & 1
\end{pmatrix}
×
\begin{pmatrix}
1 \\
0 \\
5
\end{pmatrix}
=
\begin{pmatrix}
11 \\
9
\end{pmatrix}
\begin{pmatrix}
1 & 3 & 2 \\
4 & 0 & 1
\end{pmatrix}
×
\begin{pmatrix}
3 \\
1 \\
2
\end{pmatrix}
=
\begin{pmatrix}
10 \\14
\end{pmatrix}
上記のように求める。
行列×行列は回帰分析に応用が可能で、
例えば
2104
1416
1534
852
これらのデータセットに対して、
$ h_θ(x)=-40+0.25x$
$ h_θ(x)=200+0.1x$
$ h_θ(x)=-150+0.4x$
上記3つの仮設を検証したいときに
\begin{pmatrix}
1 & 2104 \\
1 & 1416 \\
1 & 1534 \\
1 & 852
\end{pmatrix}
×
\begin{pmatrix}
-40 & 200 & -150 \\
0.25 & 0.1 & 0.4
\end{pmatrix}
ですべての結果を得ることができる。
・行列×行列での注意点
A×B≠B×A
となるため、順番の入れ替えは不可。
また、
A×B×C
D=B×C \quad A×D
E=A×B \quad E×C
が可能。
・単位行列(Identity Matrix)
$I_{(n×n)}$で表される行列。
\begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix}
\begin{pmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & 1 & 0\\
0 & 0 & 0 & 1
\end{pmatrix}
などの正方行列(m×mの行列)であり、
A×I=I×A=A
となる。
・行列の逆数
A=m×mのマトリックスの場合、$A^{-1}$を逆行列と呼び、
AA^{-1}=A^{-1}A=I
となる。
逆行列を持つことができるのは正方行列だけである。
・Multiple Features(多変量線形回帰)
変数が複数になった線形回帰。仮説は
h_θ(x)=θ_0+θ_1x_1+θ_2x_2…θ_nx_n
となり、これに$x_0=1$を加えると
X=
\begin{pmatrix}
x_0 \\
x_1 \\
x_2 \\
・\\
・\\
x_n
\end{pmatrix}
θ=
\begin{pmatrix}
θ_0 \\
θ_1 \\
θ_2 \\
・\\
・\\
θ_n
\end{pmatrix}
となり、
h_θ(x)=θ_0x_0+θ_1x_1+θ_2x_2…θ_nx_n\\
\space =θ^T×X
となる。
・FeatureScaling
多変量線形回帰において、各変数(Feature)が同じスケールであることを保証する。
例えば、$x_1$を土地の広さ(大体0~2000)、$x_2$を部屋の数(大体0~4)と置いた時に
x_1 := \frac{x_1}{2000}
x_2 := \frac{x_2}{4}
とすることで、$x_1$,$X_2$ともに値の範囲を0~1に直せる。
こうすることで最急降下法の施行スピードを速めることができる。
・Mean Normalization
Feature Scalingの一種で
X1 := \frac{X_1-μ_1}{S1}
で各変数を最適化する。
・正規方程式(Normal Equation)
最急降下法と比べてθを解析的に解く、つまり最適値を一度に解く方法。
式は
θ=(X^TX)^{-1}X^Ty
で表す。
Octaveで上記の式を書く際には
pinv(X'*X)*X'*y
で表す。