ADALINEの学習アルゴリズムについて

ADALINE とは

ADAptive LInear NEuron の略。以前、パーセプトロンについての簡単な記事を書きましたが、ADALINEはこちらを改良した分類アルゴリズムになります。

rikiya-umehara.hatenablog.com

ADALINEの学習アルゴリズム

基本的な考え方はパーセプトロンと同じです。

大きく異なるところは、パーセプトロンがステップ関数に基づいて重みの学習・予測を行なっていたのに対し、ADALINEでは「線形活性化関数」に基づいて重みの学習を行うことです。なお、予測についてはADALINEでもステップ関数を用います。

それでは、具体的に重みの更新アルゴリズムを説明していきます。

ADALINEでは、以下のようなコスト関数を最小化することを目標に重み$ \boldsymbol{w}$を更新します。

\begin{align} \boldsymbol{J}(\boldsymbol{w}) = \frac{1}{2} \sum_{i} \left( y^{(i)} - \phi (z^{(i)}) \right)^2 \end{align}

ここで、$ y^{(i)}$は$i$番目の訓練データに対する教師ラベル、$ \phi$ は先ほど述べた線形活性化関数で、ADALINEの場合は恒等関数$ \phi (z^{(i)}) = z^{(i)}$です。$ z^{(i)}$は重みベクトルと$i$番目の訓練データによる総入力$ \boldsymbol{w}^{T} \boldsymbol{x}^{(i)}$です。

このコスト関数の最小化を目標に重みを更新する具体的アルゴリズムとして、勾配降下法(Gradient Descent)と呼ばれる方法があります。 簡単に言うと、「コスト関数の勾配の反対方向に重み更新したらコスト関数小さくなるやろ。だって、勾配ってその関数の値が大きくなる方向だし」です。

つまり、以下のように重みを更新していきます。

\begin{align} \boldsymbol{w}^{(new)} &= \boldsymbol{w}^{(old)} + \Delta \boldsymbol{w} \\\ \Delta \boldsymbol{w} &= - \xi \nabla \boldsymbol{J}(\boldsymbol{w}) \\\ &= \xi \sum_{i} \left( y^{(i)} - \phi (z^{(i)}) \right) \boldsymbol{x}^{(i)} \end{align}

ここで、$ \xi$は学習率と呼ばれる定数であり、学習の際に事前に決めておく定数です。勾配の逆方向にどの程度進んでいくかを決める定数であると理解できると思います。

上の重みの更新式において注意しておくべきなのは、$i$についての総和をとっていること、すなわち「一度の重みの更新のために、全ての入力データについて和を計算しなければいけない」ということです。 機械学習では何百万という入力データを扱うことも珍しくないため、これでは計算コストがかかってしまうことが容易に想像できます。このアルゴリズムを改良したものが、確率的勾配降下法と呼ばれるものですが、それはまた別の記事に回します。

ADALINE の実装

至ってシンプルな実装かと思います。 バイアス項の重みだけ少々更新式が見かけ上異なるので、そこだけ注意いただければと思います。

ADALINE implementation by Gradient Descent

参考文献