【機械学習】パーセプトロン(Perceptron)について。

公開日: : 最終更新日:2018/05/13 機械学習 , , ,

パーセプトロンは、教師あり学習の中でも、入出力モデルベース(eager learning:働き者の学習)に分類され、その中で最も単純なモデルとなります。

Contents

パーセプトロンの特徴

パーセプトロンには、以下の特徴があります。

  • 2値クラス分類のみに対応している(多クラス分類には適応できない)。
  • 学習データが線形分離可能(linearly separable)であれば、それらを正しく2値クラスに分離する平面をみつけることができます。線形分離なので、例えば2次元の場合は、直線で分離可能だということになる。
  • 重みベクトルから重要な特徴量(識別に効いている)が推測できる。
  • 線形分離可能でないと性能が落ちる。そのため、パーセプトロンを組み合わせて使うとニューラルネットワークになる。

パーセプトロンで用いる定義について

パーセプトロンで用いる記号をここで定義しておきます。

パーセプトロンは2値クラス分類なので、出力 \(y(x)\)  は正例(+1)もしくは負例(-1)の2種類となります。

$$出力 y(x)=f(w^T\phi(x))$$

$$\phi(x):特徴ベクトル$$

$$w:重みベクトル$$

$$階段関数 f(a)=\{+1, a\geq0\\-1,a<0\}$$

事例 X の 特徴ベクトルを \(\phi(x)\) とします。ただし、特徴ベクトルの要素の1番最初にバイアス要素である \(\phi_0(x)=1\) を追加したものを \(\phi(x)\) とします。ちなみに「\(\phi\)」は Phi と読みます。

出力 \(y(x)\) は、重みベクトル \(w\) と特徴ベクトル \(\phi(x)\) の内積が0以上か0未満かで判定されます。

階段関数は、+1か-1かを出力するために用いられます。

重みベクトルを以下のアルゴリズムで学習していきます。

パーセプトロンの学習アルゴリズム

パーセプトロンの学習アルゴリズムは単純な作業の繰り返しとなります。

  1. 重みベクトルを \(w=(0,0,0,…)\) で初期化する。
  2. 学習データからランダムに事例を選択する。
  3. 分類が間違っていたら以下の式で重みベクトルを更新する。
    • 正例が正解なのに間違っていた場合:\( w ← w + \phi(x) \)
    • 負例が正解なのに間違っていた場合:\( w ← w - \phi(x) \)
  4. 2に戻る。(※全ての事例が正しく分類できるまで繰り返す。)

平均化パーセプトロン(Averaged Perceptron)

通常のパーセプトロンでは、ノイズが含まれる場合、振動して不安定となります。また、学習の最後の方で選んだサンプルに引きずられやすいというデメリットがあります。

それらのデメリットを補うなために、パーセプトロンの学習アルゴリズムを少しだけ変形したものが平均化パーセプトロンです。分類が間違っていたときの重みベクトル更新部分で、重みベクトルをそのまま使うのではなく、全ステップの重みベクトルを平均したものを使います。

そうすることによって、ロバストな挙動を示す、実用的で高性能な機械学習アルゴリズムになります。

関連記事

【Weka】アソシエーション・ルール(association rule)【機械学習】

フリーの機械学習ツール Weka でアソシエーション・ルール(association rule)を使

記事を読む

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用いて転移学習をしてみました。

記事を読む

【TensorFlow】GPUを認識しない時の対処方法【Python】

TensorFlow で GPU を認識させようとしたときにハマってしまったので、その対処方法のメモ

記事を読む

【機械学習】決定木(decision tree)について。

教師あり学習の一つである決定木(desicion tree)について勉強したことを書いていきます。

記事を読む

【PyTorch】ニューラルネットワークを構築する方法【NN】

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築したときのメモです。 フ

記事を読む

【画像認識】 Google画像検索結果を取得する方法 【google image download】

今回は、深層学習(DeepLearning)で画像認識をするための画像データの収集を、Google画

記事を読む

【Chainer】手書き数字認識をしてみた【Deep Learning】

Chainerを用いて、ニューラルネットワークを構築し、手書き数字認識を行ったときのメモです。

記事を読む

【機械学習】モンテカルロ法(Monte Carlo method)について。

モンテカルロ法(Monte Carlo method)とは、シュミレーションや数値計算を乱数を用いて

記事を読む

【深層学習】 TensorFlow と Keras をインストールする【Python】

今回は、Google Colaboratory 上で、深層学習(DeepLearning)フレームワ

記事を読む

【Fashion-MNIST】ファッションアイテムのデータセットを使ってみた【TensorFlow】

今回は、機械学習用に公開されているデータセットの1つである「Fashion-MNIST」について紹介

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

【Cubase】イヤホンから音がでないときの対処方法。

Cubase でイヤホンから音がでなくなったときの対処方法のメモです。

【Cubase】特定のトラックを無効にする方法。

今回は、Cubaseで特定のトラックのみを無効にする方法について紹介し

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用い

【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)

【PyTorch】ニューラルネットワークを構築する方法【NN】

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築

→もっと見る

PAGE TOP ↑