ヒンジ関数の意味、損失関数として使えることの大雑把な説明

最終更新日 2018/02/05

ヒンジ関数について紹介します。

ヒンジ関数とは

図のように、ある部分までは $0$ で、そこから一定の割合で増加していくような関数をヒンジ関数と言います。
ヒンジ関数の例1

例えば、赤いグラフの関数を式で表すと、
$f(x)=\begin{cases}0&(x\leq a)\\x-a&(x>a)\end{cases}$
のようになります。
2つの式をまとめて
$f(x)=\max(0,x-a)$
と書くこともできます。

ヒンジ関数の例2

別の例として、青いグラフの関数を式で表すと、
$f(x)=\begin{cases}b-x&(x\leq b)\\0&(x>b)\end{cases}$
のようになります。
2つの式をまとめて
$f(x)=\max(0,b-x)$
と書くこともできます。

ヒンジ関数の活用例

ヒンジ関数はソフトマージンSVM(サポートベクタマシン)の損失関数(誤差関数)に表れます。

逆に、これ以外の場面でヒンジ関数が登場することはほとんどないような気がします。

そこで、以下では SVM におけるヒンジ関数の役割について(大雑把なイメージレベルで)説明します。

SVM の問題設定

2クラス分類問題を考えます。クラス1に属するデータには、ラベル $y_i=1$ を付与し、クラス2に属するデータには、ラベル $y_i=-1$ を付与します。
2クラス分類問題

SVMでは、
・クラスを判別するための線形関数 $f(\overrightarrow{x})=\overrightarrow{w}^{\top}\overrightarrow{x}+b$ を求めます($\overrightarrow{x}$ は説明変数です。$\overrightarrow{w}$ と $b$ を求めます)。
・$f(\overrightarrow{x})>0$ ならクラス1と判定し、$f(\overrightarrow{x})<0$ ならクラス2と判定します。

関連:クラス分類とクラスタリングの意味と違い

ヒンジ関数が使えそうであることの説明

SVM では、ヒンジ形の関数の、各データ点についての和
$E=\displaystyle\sum_{i}\max(0,1-y_if(\overrightarrow{x_i}))$
を小さくするような $f$ を探します(※)。

実際、以下の説明1~3から分かるように、$E$ はそれっぽい損失関数になっています($E$ が小さいほど正しく判別できている、とみなせそう)。

ヒンジ関数とSVMの関係
説明1.
点Aのように、正しく判別され、しかも境界面から遠い点の損失は0。

実際、この場合、$y_i$ と $f(\overrightarrow{x_i})$ は同符号です。そして、データは境界面から遠いので、$f(\overrightarrow{x_i})$ の絶対値は大きくなります。よって、$y_if(\overrightarrow{x_i})\geq 1$ となり、ヒンジ関数の値は $0$ になります。

説明2.
点Bのように、正しく判別できても境界面に近い点(ギリギリ判別できたけど危うく間違えそうだった点)では、少しの損失。

実際、この場合、$y_i$ と $f(\overrightarrow{x_i})$ は同符号ですが、データは境界面に近いので、$f(\overrightarrow{x_i})$ の絶対値は小さくなります。よって、$0< y_if(\overrightarrow{x_i})< 1$ となり、ヒンジ関数の値は $0$ に近い正の数になります。

説明3.
点Cのように誤判別してしまったデータでは、1より大きい損失。境界面から遠くなればなるほど、損失の値は大きくなる。

実際、この場合、$y_i$ と $f(\overrightarrow{x_i})$ は異符号です。$y_if(\overrightarrow{x_i})< 0$ となり、ヒンジ関数の値は $1$ より大きくなります。

※より正確には $E+\lambda\|\overrightarrow{w}\|_2$ を最小化するような関数を探します。
(参考文献:パターン認識と機械学習(下),C.M.ビショップ著 7.1節)

次回は 誤差伝播の公式の意味と証明 を解説します。

ページ上部へ戻る