Shint’s blog

ピアノ調律からデータサイエンスまで

MENU

機械学習の概要

機械学習の概要

機械学習の定義

機械学習の定義は以下の2つが有名です。

1つ目は、Arthur Samuel(ア-サー・サミュエル) による定義で次のようなものです。

The field of study that gives computers the ability to learn without being explicitly programmed.
(訳:明示的にプログラムしなくても、学習する能力をコンピュータに与える研究分野)

2つ目は、Tom Mitchell(トム・ミッチェル)の著書 『Machine Learning』(1997) の序文にあるもので、次のような見解です。

A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.
(訳:コンピュータプログラムは、タスクTとパフォーマンス測定Pに関連する経験Eから学習すると言われています。タスクTでパフォーマンスをした場合、パフォーマンス測定Pによって達成度が測定され、経験Eによって改善されていきます。)

タスクTとは、「どのように課題を実行するか」であり、学習済みモデルが与えるソリューションを指します。 その内容(=機械学習でできること)は、回帰、分類、主成分分析、クラスタリング、異常検知、機械翻訳、転写、ノイズ除去などがあげられます。 あくまで、モデルが期待される機能に関することであって、 学習中に得られることとは切り離された概念です。 例えば、「アヤメの画像から種類を分類する」というモデルを作る際には、 分類自体がタスクTなのであって、 エッジ検出などは含まれません。

性能指標Pとは、「性能をどう評価するか」を指します。 これにより、学習を行う指針を得ることができます(例:モデルが分類した結果が、どのくらい正確であったか)。

経験Eとは、データ・特徴量との関連を得られているかを指します。 正解ラベルの有無(教師あり学習教師なし学習)、画像、上の例のアヤメであれば、さらに茎の長さ、葉の大きさ、発芽時期、開花時期などが考えられるでしょう。

パラメトリックモデルとノンパラメトリックモデル

機械学習のモデルは、背景にある分布などを仮定するかどうかにより、次の二つに分類することができます。

パラメトリックモデル:あらかじめデータの背景にある確率分布を仮定し、パラメータだけを学習します。 例えば、物理学や化学などの知見から「予測値は〇〇関数に従う」ということや、統計学の知見から「予測値は〇〇分布に従う」ということが予測できた場合、その関数に対してフィッティングを行うことなどがあります。このような前提を置くことにより、少ないデータで精度よく計算することができるようになります。一方、ある特定の条件だけに使用できる機械学習のモデルになってしまうデメリットもあります。

ノンパラメトリックモデル:データの背景にある分布や関数そのものを推定する方法です。物理学や化学、統計学の深い洞察が無くとも使用することができ、多くの事例に機械学習のモデルを適用できる可能性があります(高い汎用性)。しかし、パラメトリックモデルよりも多くのデータが必要となるデメリットもあります。運用面では機械の予測が「ブラックボックス化」してしまうと、せっかく構築したモデルが採用されないこともあるかもしれません。

というように分けられます。

教師あり学習教師なし学習

教師あり学習(Surpervised Learning)とは、人間が正解データを作り、これを訓練データとして機械に教え込むこむ方法です。 機械がある値を予測する際に、そのターゲットとなる値を目的変数と言います。 それが他のデータ(説明変数)にどのように依存しているかを探ることが機械の役割になります。

教師なし学習(Unsupervised Learning)とは、人間が正解データを作るのではなく、機械自身がデータの背景にあるパターンや示唆を見つけてゆく手法です。 データには「目的変数」はありません。機械は、データをいくつかのグループに分類したり(クラスタリング)、 データの情報を失わないようにより小さい次元に縮約する主成分分析(Principle Component Analysis, PCA)などの手法があります。

強化学習

強化学習Reinforcement Learningとは、機械の行動(の戦略や結果)に対して報酬を与えることで、 機械にベストプラクティスを見つけさせようとする手法です。 強化学習は、「行動」に対する「報酬」(≒正解)があるという点では、教師あり学習に似ているといえます。 逆に教師あり学習と異なる点は、部分ではなく全体で最適化を行うということです。 例えば将棋で言えば、強化学習は「次の行一手」ではなく、数手先、あるいは勝負がつくまで計算を行い最適な行動を選択します。

マルチタスク学習

マルチタスク学習とは、単一のモデルで複数の課題を解く手法を指します。 例えば、画像認識では領域の判定(セグメンテーション)とクラス分類、自然言語処理では品詞の分類、分節の判定、係り受けなどを同時に行うという事です。

バッチ学習とオンライン学習

機械学習のシステムはデータからモデル内にあるパラメータを適切に更新してゆくタイミングによっても分類できます。

バッチ学習では、全てのデータを利用して学習します。扱うデータ量にもよりますがそれなりに計算コストがかかるため、計算資源と時間(とお金)が必要になります。新しいデータがある場合は、ゼロから学習しなおし古いモデルと差し替えることになります。

オンライン学習データが追加されるたびに、パラメータの更新を行います。1データの学習のみなので、計算コストがかからず、その場ですぐにデータの学習をすますことができます。株価のように断続的にデータを受け取り、素早く変化に対応しなけれならないシステムに有効です。オンライン学習の弱点はデータにノイズなどがのってしまった場合、影響が大きく性能が下がってしまう事です。

ミニバッチ学習は、バッチ学習とオンライン学習の合いの子で、ある程度まとまったデータごとにパラメータの更新を行います。変化にそれなりに対応でき、ノイズにそれなりに強く、計算コストと時間(とお金)をそれなりに抑えることができます。


学習と検証

独立同分布仮定

機械学習のモデルには、未知のデータに対しても適切な結果を与えられることが求められます(汎化性能)。 逆に、学習時に使用したデータでの(性能指標Pによる)性能は高いけれど、 それ以外での性能が低い状態のことを過学習といいます。

そのため、通常、収集したデータを「訓練データ」と「テストデータ」に分け、 「訓練データ」を用いて学習を行ったあとに「テストデータ」を用いて性能を評価するということを行います(ホールドアウト法)。

f:id:Shint:20210131212353p:plain

経験Eとなるデータに対して、 - 各データが互いに独立 - 訓練データとテストデータが同一の確率分布に従う という性質を独立同分布(Independent and Identically Distributed; IID)仮定と言います。

さらに、交差検証の中でもよく利用されるk分割交差検証法(Cross-Validation, CV)では、 データをk個に分割して、そのうち1つをテストデータ、それ以外を訓練データとして性能を評価します。

f:id:Shint:20210131223749p:plain

過学習

学習を進めてゆくと「訓練データでは性能が高かったが、それ以外のデータではむしろ性能が低かった」ということが起こります。これを過学習といいます。訓練データに特化してチューニングを進めてしまったがために、未知のデータに関してはむしろ誤った答えを推測するという現象です。

下図のようなモデルでは、与えられた点に関しては精度よく再現していますが、少しでもパラメータ \, x_i \, の値が異なると、途端にモデルの精度が下がるはずです。

f:id:Shint:20210214164542p:plain

正則化

過学習は、訓練データの量やノイズに対してモデルの方が複雑すぎるときに起こります。 そこで、モデルに制約を加え、モデルを単純化することを正則化(regularization)といいます。


具体的なアルゴリズム

線形回帰

単純な回帰のモデルとして線形回帰があります。予測する値 \, y \, が、入力するn個の特徴量 \, \{ x_1, x_2, \cdots, x_n \} \, の一次関数で与えられると考えます。

 
    f(x_1, x_2, \cdots, x_n) = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b \\

とします。 \, \{  w_1, w_2, \cdots, w_n \} \, は特徴量の係数で重みといい、また、 \, b \,は定数項でバイアスといいます。

ここで、 \, \boldsymbol{w} = (w_1, w_2, \cdots, w_n) \, および \, \boldsymbol{x} = (x_1, x_2, \cdots, x_n) \, と定義して、

 
    f(\boldsymbol{x}) = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n +b = \boldsymbol{w} \cdot \boldsymbol{x} + b\\

のように表すと便利です。



あるコンビニのアイスクリームの販売個数 \, y \, を予測するタスクを考える。 アイスクリームは暑い日になれば売れると考えれば「気温」や「湿度」が特徴量になると考えられる。 これらの変数を \, x_1, x_2 \, と表記する \, (n=2) \,

次に、販売個数 \, y \,  \, x_1, x_2 \, の一次関数であると仮定する。 その際、「気温が1℃上昇」することと「湿度が1%上昇」することの売り上げに対する影響度は異なる。 それゆえ、その影響度を個別に調整する重み  \, w_1, w_2  \, を導入して、
 
    y = w_1 x_1 + w_2 x_2 + b \\
とする。ただし、 \, b \, は定数項である。


さて、モデルが学習するというのは、この重み \,  \{ w_1, w_2, \cdots, w_n \} \, が手元にあるデータを再現するように調整するということです。予測値があるデータに近いかどうかを表す指標として平均二乗誤差(Root Means Square Error:RMSE)が一般的です。

 \displaystyle
\begin{eqnarray*}
   RMSE &=& \sqrt{\dfrac{1}{m} \sum_{i=1}^{m} (f(\boldsymbol{x}_i) - y_i) } \\
             &=& \sqrt{\dfrac{1}{m} \sum_{i=1}^{m} [ ( \boldsymbol{w} \cdot \boldsymbol{x}_i+b) - y_i ] } \\
\end{eqnarray*}

 \, \{ y_1, y_2, \cdots, y_m \} \, は実際のデータで、 \, m \, はデータの個数です。 要は、この差を最小にするように重み \{ w_1, w_2, \cdots, w_n \} を調整すればよいということになります。

なお、RMSEは標準偏差と似ていますが、RMSEは各データと推定値との差です(次のサイトが参考になります:二乗平均平方根などの統計量について



この3日間の気温、湿度、アイスクリームの売り上げデータがあり、 これらから明日のアイスクリームの販売個数を予想するタスクでは、
  • データ数: m=3
  • 実際の販売個数: y_1, \, y_2, \, y_3
  • 予測販売個数: \displaystyle \, \boldsymbol{w} \cdot \boldsymbol{x}_1 +b, \,  \boldsymbol{w} \cdot \boldsymbol{x}_2 + b,  \, \boldsymbol{w} \cdot \boldsymbol{x}_3  +b \,


RMSEを最小化する重み \,  \{ w_1, w_2, \cdots, w_n \} \, を考える際には、平方根を中身だけを考えればよいので、 平均二乗誤差(Means Square Error:MSE)を扱うことが機械学習では一般的です。このように、学習を進めるにあたり最小化したい関数をコスト関数といいます。

 \displaystyle
\begin{eqnarray*}
   MSE &=& \dfrac{1}{m} \sum_{i=1}^{m} (f(\boldsymbol{x}_i) - y_i)  \\
             &=& \dfrac{1}{m} \sum_{i=1}^{m} [ ( \boldsymbol{w} \cdot \boldsymbol{x}_i+b) - y_i ] \\
\end{eqnarray*}

リッジ回帰

過学習は、訓練データの量やノイズに対してモデルの方が複雑すぎるときに起こり、モデルに制約を加えることで過学習を抑制するのでした(正則化)。

リッジ回帰(Ridge Regression)は線形回帰の正則化で、コスト関数に \, \alpha/2 \sum_{i=1}^{n} w_i^{2} \, という正則化を加えます。リッジ回帰のコスト関数を \, J(\boldsymbol{w}) \, とすると、

 \displaystyle
\begin{eqnarray*}
   J(\boldsymbol{w}) &=& \dfrac{1}{m} \sum_{i=1}^{m} (f(\boldsymbol{x}_i) - y_i)  + \dfrac{\alpha}{2} \sum_{i=1}^{n} w_i^{2}\\
             &=& \dfrac{1}{m} \sum_{i=1}^{m} [ ( \boldsymbol{w} \cdot \boldsymbol{x}_i+b) - y_i ] + \dfrac{\alpha}{2} \sum_{i=1}^{n} w_i^{2} \\
\end{eqnarray*}

このようにすることで、学習モデルは訓練データを再現するだけでなく、重み \,  \{ w_1, w_2, \cdots, w_n \} \, できる限り小さく保つという束縛条件が一つ加わることになります。

ここで、 \, \alpha \, は人間が設定する値(ハイパーパラメータ)です。 \, \alpha =0 \, とすればモデルはただの線形回帰となり、 \, \alpha \, を大きな値にすれば、重み \,  \{ w_1, w_2, \cdots, w_n \} \, はすべてがほとんどゼロになり、モデルの予測値はほぼ定数となります。

数学的には、正則化項としてベクトルの大きさを表すノルムを加えていることになります。リッジ回帰の場合は \, L^{2} \, ノルムとなります。


参考
 \, n \, 次元のベクトル \, \boldsymbol{x} = (x_1, x_2, \cdots, x_n) \, および、 \, p ( 1\leq p \leq \infty ) \, に対して、
 \,  
    \sqrt[p]{|x_1|^p+|x_2|^p+\cdots+|x_n|^p}
 \, \boldsymbol{x} \,  \, L^p \, ノルムといい、 \,|| \boldsymbol{x}||_p \, と表す。


ラッソ回帰

ラッソ回帰(Least Absolute Shrinkage and Selection Operator Regressio: Lasso Regression)はリッジ回帰と同様に、コスト関数に正則化項を加えますが、 \, L^{2} \, ノルムではなく、 \, L^{1} \, ノルムを使います。

 \displaystyle
\begin{eqnarray*}
   J(\boldsymbol{w}) &=& \frac{1}{m} \sum_{i=1}^{m} (f(\boldsymbol{x}_i) - y_i)  + \alpha \sum_{i=1}^{n} |w_i| \\
             &=& \frac{1}{m} \sum_{i=1}^{m} [ ( \boldsymbol{w} \cdot \boldsymbol{x}_i+b) - y_i ] + \alpha \sum_{i=1}^{n} |w_i| \\
\end{eqnarray*}

ラッソ回帰は重要性の低い特徴量の重みを0にする傾向があります。言い換えれば、自動的に必要な特徴量を選択し疎なモデルとなるということです。

しかし、ラッソ回帰は特徴量の数が多い時や特徴量の間に強い相関があるときには挙動が不規則になることがあることが注意点です。

Elastic Net

ラッソ回帰の弱点を克服しようとするのがErasitc Netです。考え方は、リッジ回帰とラッソ回帰の合いの子です。

 \displaystyle
\begin{eqnarray*}
   J(\boldsymbol{w}) &=& \dfrac{1}{m} \sum_{i=1}^{m} (f(\boldsymbol{x}_i) - y_i)  
                                         + r \alpha{2} \sum_{i=1}^{n} |w_i|
                                         + \dfrac{1-r}{2} \alpha \sum_{i=1}^{n} |w_i|^{2} \\
 \end{eqnarray*}

 \, r=0 \, でリッジ回帰、 \, r=1 \, でラッソ回帰と等しくなります。

リッジ回帰で試した際に意味がある特徴量が疑われる際には、ラッソ回帰の代わりにElastic Netを使用する方が良いとされています。

ロジスティック回帰

ロジスティック回帰(Logistic Regression)は、回帰という名前がついていますが、分類の用途で使われます。

確率 \, p \, であるカテゴリに属すことの起こりやすさを表す量として、オッズ比  \,  p/(1-p) \, があります。 そして、この対数をとった関数をロジット関数   \, L(p) \, といいます。

 
    L(p) := \log \dfrac{p}{1-p} \\

 \, L(p) \, は定義域 \, 0 \leq p \leq 1 \, で値域 \, -\infty \,  \, \infty \, となる関数です。 ここで、ロジット関数の値は、特徴量 \, \{ x_1, x_2, \cdots, x_n \} \, の線形結合で与えられると仮定します。

まず、特徴量の線形関係を(線形回帰の時と同様に)

 
\begin{eqnarray*}
    z &=& w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b \\
       &=& \boldsymbol{w} \cdot \boldsymbol{x} + b \\
\end{eqnarray*}

としますロジット関数がこのような特徴量の1次関数 \, z \, で記載されているとすると、

 
   \log \dfrac{p}{1-p} = z \\

これを \, p \, について解くと、

 
   p = \frac{1}{1+e^{-z}} \\

と、シグモイド関数となります。

f:id:Shint:20210205102639p:plain

実装としては、特徴量 \, \{ x_1, x_2, \cdots, x_n \} \, の線形結合をシグモイド関数に代入すればよいわけですから、 以下のようになります。

import numpy as np

def input(x, w, b):
    z = np.dot(x,w) + b
    y = 1/(1+np.exp(-z))
    return y

ロジスティック回帰の学習とは線形回帰同様に、重み \, \boldsymbol{w} \, 、バイアス \, b \,を適切に調整してゆくという事になります。それでは、コスト関数はどう考えるかというと、ここで確率統計で学んだ最尤法を用いてゆきます (確率統計を参照してください)。

シグモイド関数の形からわかるように、 \, p \geq 0.5 \, ならば「あるカテゴリに属す」、 \, p \lt 0.5 \, ならば「あるカテゴリに属さない」という分類ができます。 つまり、二値分類となりますので、


  t_i =\begin{cases}
    1 & (p \geq  0.5) \\
    0 & (p \lt 0.5) \\
  \end{cases}

となる \, t_i (i=1,2,\cdots, n) \,を導入すると、i番目の \, t_i \,  \, 1 \, \, 0 \,になる確率は、  \, p^{t_i} (1-p)^{1-t_i} \,とまとめてかけるので、n個分類した時に実現する同時確率 \,  L(\boldsymbol{w},b)  \,

 \displaystyle
   L(\boldsymbol{w},b) = \prod_{i=1}^{n} p_i^{t_i} (1-p_i)^{1-t_i} \\

となります。この対数をとったものが対数尤度となります。ここでは、(最大問題を最小問題として扱うため)マイナスをかけた値をとり、

 \displaystyle
   \log L( \boldsymbol{w}, b ) = - \sum_{i=1}^{n} \{ t_i \log p_i + (1-t_i) \log (1-p_i) \} \\

とします。この形の関数を交差エントロピー誤差(Cross Entropy Loss)関数と言います。

# クロスエントロピー誤差
def closs_entropy(p, t):
    loss = -np.sum( (t * np.log(p) + (1 - t) * np.log(1 - p)), axis=0)
    return loss

この関数を最小にするような \, p \, が「もっともらしい」値となります。

ソフトマックス回帰(多項ロジスティック回帰)

ロジスティック回帰は2つのカテゴリへの分類でした。 3つ以上の分類ができるように、シグモイド関数ソフトマックス関数に差し替えたモデルを、 ソフトマックス回帰といいます。

 \displaystyle
    p_i := \dfrac{e^{z_i}}{\sum_{j=1}^{n} e^{z_j} }  \quad where \quad z_i =  \boldsymbol{w_i} \cdot \boldsymbol{x} +b_i \\
# ソフトマックス回帰
def softmax(x, w, b):
    z = np.dot(w, x) + b
    p = np.exp(z) / np.sum(np.exp(z))
    return p

k近傍法

k近傍法(k-Nearest Neighbors: k-NN)とは、既知のグループが複数ある時に、どのグループに属するかわからない新たなデータが、どのグループに属するのかを推定する手法です。

f:id:Shint:20210215230723p:plain

上図はk近傍法のイメージです。赤と青で示したデータがあった際に、新しいサンプルがどちらのグループに属するかを考えます。データの空間において新しいサンプルから近いデータを3つ選ぶと \, (k=3) \, 、多数決により新しいサンプルは青のグループに分類されます。

k近傍法のハイパーパラメタは次の2つです。

  • 距離
    • 数学的に「距離の公理」を満たす定義は多数あります(ユークリッド距離、マハラノビス距離など)。
  • 新しいサンプルの近傍点の個数 \, k \,
    • 上の図で \, k=3 \, では青に分類されますが、 \, k=7 \, では赤に分類されるように結果が異なり得ます。

上の例は分類問題の例でしたが、回帰にも使えます。

  • 分類問題の場合:近傍k個のサンプルのうち最も多いクラスを予測クラスとする
  • 回帰問題の場合:予測値として近傍k個のサンプルの平均値をとる

k近傍法の特徴としては、

  • ノンパラメトリックモデル
  • オンライン学習が容易:パラメータの更新がないため、新しいデータを加えるだけで予測が可能です

サポートベクトルマシン

サポートベクトルマシン(Support Vector Machineの考え方を以下に示します。

f:id:Shint:20210222154524p:plain

二つのクラスに対し境界線を与える際に、サポートベクトルマシンは境界線と隣接する点の距離(マージン)が最大となるように境界線を決定します。この隣接するデータ点のことをサポートベクトルと言います(あるデータ点 \, (x_0, x_1, \cdots, x_n) \,は一つのn次元ベクトルとしてみることができるため「ベクトル」です)。

線形分離可能なデータに関して:ハードマージン

下図のように線形分離可能な場合の定式化をハードマージンといい、 以下、2次元の例を用いてマージンはどのように最大化されるか詳しく見てゆきます(n次元でも大筋は同様です)。

赤のサポートベクトルで示される点 \, S_{+} \,の位置を表すベクトルを \, \boldsymbol{X}_{S+} = ( X_{1S+},  X_{2S+})^{t} \,、そこから境界線 \, l \,におろした垂線の足 \, H_{+} \,の位置を表すベクトル \, \boldsymbol{X}_{H+} = (X_{1H+}, X_{2H+})^{t} \,とします。

まず、境界線 \, l \,

 
\begin{eqnarray*}
   w_1x_{1}+w_2x_{2} + b =0 \qquad \cdots \quad (1)  \\
\end{eqnarray*}


とすると、 \, H_{+} \, に対しては、

 
\begin{eqnarray*}
   w_1X_{1H+}+w_2X_{2H+} + b =0 \qquad \cdots \quad (2)  \\
\end{eqnarray*}


という関係が成り立ちます。

次に、境界線 \, l \, に対する直行するベクトルを考えます。 オレンジには、境界線 \, l \, の係数を成分とするベクトル \, \boldsymbol{w} \, を示しました。一方、 境界線 \, l \, は、 x_{1} \,  \, w_{2} \, だけ進むと、  x_{2} \,  \, w_{1} \, だけ減少する関係を示したものですから(図中の水色)、 図を見比べると、 \, \boldsymbol{w} \, は境界線 \, l \, と直行するベクトルということがわかります(大学の数学的には、これは(1)の左辺のgradientをとることでも容易に得られます)。

今、 \, \vec{H_+S_+} \,  \, \boldsymbol{w} \, は平行であるため、

 
    \begin{pmatrix}
        X_{1S+} - X_{1H+} \\
        X_{2S+} - X_{2H+}
    \end{pmatrix}
   =
   t
    \begin{pmatrix}
        w_1\\
        w_2
    \end{pmatrix}
   \qquad \cdots \quad (3) \\

ただし、tはゼロでない定数です。 以下、 \, \vec{H_+S_+} \, の大きさを求めるために、 \, t \, を計算します。

式(3)の両辺で \, \boldsymbol{w} \, との内積をとり

 
   w_1(X_{1S+}-X_{1H+})+w_2(X_{2S+}-X_{2H+}) =t(w_1^2+w_2^2)  \\

展開して、

 
\begin{eqnarray*}
   w_1X_{1S+}+w_2X_{1S+} + b \\
   - (w_1X_{1H+}+w_2X_{2H+} + b)
\end{eqnarray*}
 =t(w_1^2+w_2^2)  \\

左辺のカッコ内は式 \, (2) \, より0となるため、

 \
   t = \dfrac{w_1X_{1S+}+w_2X_{2S+} + b}{w_1^2+w_2^2} 
     = \dfrac{ \boldsymbol{w} \cdot \boldsymbol{X}_{S+} + b }{|\boldsymbol{w}|^2} \\

よって、

 
   \vec{H_+S_+} = \dfrac{ \boldsymbol{w} \cdot \boldsymbol{X}_{S+} + b }{|\boldsymbol{w}|}
    \begin{pmatrix}
        w_1/|\boldsymbol{w}| \\
        w_2/|\boldsymbol{w}|
    \end{pmatrix} \\

 \, \vec{H_+S_+} \, の大きさがサポートベクトルマシンにおけるマージンで、それを \, M \, とします。 また、Class赤に分類されるサポートベクトル以外のデータ点と境界線 \, l \, の距離は \, M \, より大きくなければいけませんから、 \, x_{i'} \, をClass赤に分類されるデータ点として、

 
    \dfrac{ \boldsymbol{w} \cdot \boldsymbol{X}_{i'} + b }{|\boldsymbol{w}|} \geq M \\

が成立します。等号はサポートベクトルの点において成立します。 この関係性を保ちながら \, M \, を最大化することが、今、得たい結果となります。 境界式 \, l \, を動かす際のパラメタは、式(1)で表されるように \, \{  w_1, w_2, b \} \, または \, \{ \boldsymbol{w}, b \} \, となりますので、

 \displaystyle
   \dfrac{ \boldsymbol{w} \cdot \boldsymbol{X}_{i'} + b }{|\boldsymbol{w}|} \geq M,
   \quad \max_{\boldsymbol{w},b } M
   \qquad \cdots \quad (4) \\

f:id:Shint:20210223170847p:plain

一方、クラス青に分類されるサポートベクトル \, S_- \, から境界線 \, l \, におろした垂線の足 \, H_- (X_{1H-}, X_{2H-}) \, とで得られるベクトル \, \vec{H_{-}S_{-}} \, は、境界線 \, l \, と反平行になりますので、 符号が逆になります。

 \displaystyle
    - \dfrac{ \boldsymbol{w} \cdot \boldsymbol{X}_{i''} + b }{|\boldsymbol{w}|} \geq M,
   \quad \max_{\boldsymbol{w},b } M
   \qquad \cdots \quad (5)  \\

ここに、 \, x_{i''} \, はClass青に分類されるデータ点です。

Class赤では正、Class青では負の符号を表す \, y_i \, を導入すると、式(4)(5)はまとめて次のように書くことができます。

 \displaystyle
   y_i \dfrac{ \boldsymbol{w} \cdot \boldsymbol{X}_{i} + b }{|\boldsymbol{w}|} \geq M,
   \quad  \max_{\boldsymbol{w},b } M
   \qquad \cdots \quad (6) \\

ここで、 \, x_i \, は任意のデータ点です。

境界線 \, l \, の両辺を定数倍しても結果は変わらないため、 計算しやすいように、以下のような変換を行います。

 \displaystyle
   \tilde {\boldsymbol{w}} = \dfrac{\boldsymbol{w}}{M | w | },
   \quad
   \tilde {b} = \dfrac{b}{M | w | } \\

この変換の式。および、変換後のベクトルの大きさ \, | \tilde{w} | = 1/M  \, より、

 \displaystyle
   y_i ( \tilde{ \boldsymbol{w} } \cdot \boldsymbol{X}_{i} + \tilde{b} ) \geq 1,
   \quad  \max_{ \tilde{ \boldsymbol{ w }}, b } \dfrac{1}{ | \tilde{w} | } \\

2つめの条件について、最大値をとることは逆数の最小値をとることと等価ですから、

 \displaystyle
   y_i ( \tilde{ \boldsymbol{w} } \cdot \boldsymbol{X}_{i} + \tilde{b} ) \geq 1,
   \quad  \min_{ \tilde{ \boldsymbol{ w }}, b } \dfrac{ | \tilde{w} |^2 }{2} \\

というようにして、計算をします(2乗にしたり、1/2を掛けたりするのは、 最適化計算をしやすくしているだけなので、気にしないでOKです)。

これらの関数を最適化してゆくアルゴリズムに受け渡すことで 学習が進みます。

線形分離不可能なデータに関して:ソフトマージン

これまでの例は線形分離可能な場合を扱ってきましたが、 そうでない場合(線形分離不可能な場合)の定式化をソフトマージンといいます。

f:id:Shint:20210301211219p:plain

図のように、境界線から片側のマージン分だけ離れたところにできる境界を超平面といいます(ここでの例は「直線」ですが、3次元に一般化すると「平面」、3次元以上では「超平面」と呼びます)。 今は、Class 赤側を正(Class 青側を負)としていました。

線形分離不可能な場合、各超平面を超えたデータ(分離できないデータ)に対してペナルティ(損失)を与えます。

損失の与え方は幾通りも考えられますが、一番自然なのは上の図のように「超平面を超えたデータに対して、超平面からの距離を損失としてあたえる」かと思います。

具体的に考えると、

  • あるデータ \, X_i \, が超平面を超えない場合(  \, y_i (\boldsymbol{w} \cdot \boldsymbol{X}_i + b) \leq M \, )、ペナルティは0
  • あるデータ \, X_i \, が超平面を超える場合( \, y_i (\boldsymbol{w} \cdot \boldsymbol{X}_i + b) \gt M \, )、ペナルティは超平面からの距離

f:id:Shint:20210301210907p:plain
図.Class 赤に対するペナルティの与え方の例

となるので、まとめて、

 \displaystyle
   \xi_i = \max \left\{ 0, \, M - \dfrac{y_i (\boldsymbol{w} \cdot \boldsymbol{X}_i + b)}{||w||} \, \right\} \\

のように書けます。結局、ソフトマージンSVMの行うことは、「マージン \, M \, を最大にしつつペナルティ合計を最小化するような境界線 \, l \, を与える」ということになります。

「最大」と「最小」が混在していますので、少々めんどくさいですね。 これは、ハードマージンの時と同じように変数変換をすれば、最小化問題に集約できます。 つまり、変数変換後のペナルティ \, \tilde{\xi}_i \,

 \displaystyle
   \tilde{\xi}_i = \max \left\{ 0, \, 1 - y_i (\boldsymbol{w} \cdot \boldsymbol{X}_i + b) \, \right\} \\

として、

 \displaystyle
   y_i ( \tilde{ \boldsymbol{w} } \cdot \boldsymbol{X}_{i} + \tilde{b} ) \geq 1 -  \tilde{ \xi}_i, \quad   \min_{ \tilde{ \boldsymbol{ w }}, b }  \left\{ \dfrac{ | \tilde{w} |^2 }{2} +  C \sum_{i=1}^{n} \tilde{\xi}_i  \right\} \\

となります。ここであらたに登場した \, C (\leq 0)\, は、ハイパーパラメタで二つの量のバランスを調整します。

以上の議論に出てきたペナルティ項をスラック変数といいます。