たいさブログ

taisa's engineer blog

機械学習

パーセプトロン – 機械学習におけるアルゴリズム

投稿日:2018年5月17日 更新日:

Pocket

機械学習におけるアルゴリズムの一つであるパーセプトロンについて、仕事ではじめる機械学習を元に学習していく。

そもそもどのアルゴリズムを選ぶべきか

機械学習にはどんな種類があるか

  • 分類(Classification):正解となる離散的なカテゴリ(クラス)と入力データの組み合わせで学習し、未知のデータからクラスを予測する
  • 回帰:正解となる数値と入力データの組み合わせで学習し、未知のデータから連続値を予測する
  • クラスタリング:データを何かしらの基準でグルーピングする
  • 次元削減:高次元のデータを可視化や計算量削減などのために低次元マッピングする
  • その他
    • 推薦:ユーザーが好みそうなアイテムや、閲覧しているアイテムに類似しているアイテムを提示する
    • 異常検知:不審なアクセスなど、普段とは違う挙動を検知する
    • 頻出パターンマイニング:データ中に高頻度に出現するパターンを抽出する
    • 強化学習:囲碁や将棋のような局所的には正解が不明確な環境で、とるべき行動の方針を学習する

アルゴリズムを選定する、scikit-learnのフローチャート
※その他(推薦、異常検知、頻出パターンマイニング、強化学習)は覗く

Choosing the right estimator – scikit-learn 0.19.1 documentation

Often the hardest part of solving a machine learning problem can be finding the right estimator for the job.

分類

  • 教師あり学習の1つ
  • 予測対象はカテゴリなどの離散的な値を予測する
  • メールがスパムかどうかや画像が映っているのがどういった物体かなど
  • クラスの数が2の場合を二値分類、3以上の場合を多値分類という

分類については以下のようなアルゴリズムが存在する

  • パーセプトロン
  • ロジスティック回帰
  • SVM (サポートベクターマシン)
  • ニューラルネットワーク
  • k-NN (k近傍方、k-Nearest Neighbor Method)
  • 決定木
  • ランダムフォレスト
  • GBDT (Gradient Boosted Decision Tree)
  • ナイーブベイズ
  • HMM (Hidden Markov Model)

本記事ではパーセプトロンについて記載する

パーセプトロン

  • 様々なアルゴリズムに影響を与えた、歴史的に重要なアルゴリズム
  • パーセプトロンを多層に重ねたものがニューラルネットワークになる

数式

  • 入力ベクトル(x)と学習した重みベクトル(w)を掛け合わせた値を足して、その値が0以上の時はクラス1、0未満のときはクラス2と分類するシンプルなアルゴリズム
  • 図では入力が2つになっているがいくつでも構わない

パーセプトロンの特徴

  • オンライン学習で学習する
  • 予測性能はそこそこで、学習は早い
  • 過学習しやすい
  • 線形分離可能な問題のみ解ける
オンライン学習とバッチ学習

オンライン学習はデータを1つずつ入力して最適化し、バッチ学習は全部を入れて最適化する

過学習

学習に使ったデータに対してはきちんと正解できるが、知らないデータに対してはまったく正解でないという状態になっているモデル
※ 伝統的なパーセプトロンに科学集を抑える仕組みは組み込まれていない

線形分離可能
  • パーセプトロンは線形分離可能な問題のみ解くことができる
  • 線形分離可能とは、データをある直線で切りよく2つに分けられるデータのことを言う

パーセプトロンの決定境界

パーセプトロンの決定境界(線形分離可能)

パーセプトロンの決定境界(線形分離不可能)

パーセプトロンの仕組み

計算方法 : sum = x1w1 + x2w2 + x3w3

  • x:入力ベクトル
  • w:重みベクトル
  • t:正解ラベル(1か-1)

パーセプトロンの予測コード

SPAMを例にすると、SPAMの場合は1、非SPAMの場合は-1のようになる

どうやって適切な重みベクトルを推定するか
  • 「ある教師データを読み込ませたときの出力がどれくらい期待外れだったか」といった真の値と予測値のズレを表す関数を用いる(損失関数)
  • 今学習している予測モデルがどれくらい良いものかを測る

例) 損失関数=(真の値-予測値)²

パーセプトロンの損失関数は、max(0, -twx)というヒンジ損失を使う。ヒンジ損失を使うと、0以下の値を取る時(ご分類されたとき)に損失が大きくなり、正解した時の損失は0となる。予測値が大きく間違えば間違うほど、損失も線形に増えていくのが特徴

パーセプトロンのヒンジ損失関数を使い、全データに対して和を取るコードは以下となる

パーセプトロンのヒンジ損失

目的関数
損失関数をもう少し一般化してどれくらいモデルがデータに合っているのかというのを表す関数(目的関数=損失関数の全データでの和)

  • パラメータである重みベクトルwを推定するには、確率的勾配降下法がよく使われる
  • 目的関数が最も小さいところにたどり着けば、そのパラメータが最適な値となる

確率的勾配法

学習率
どれくらいの幅でパラメータを修正するかを決めるハイパーパラメータで、修正する幅は学習率×山の傾きで決まる

ステップ関数
二値分類では、以下のような関数で、入力の値を+1または-1にしてくれる

ステップ関数

活性化関数
パーセプトロンにおけるステップ関数のような、出力値を非線形変換する関数

実践

参考

Pocket

-機械学習
-,

執筆者:

関連記事

「AIPyハンズオン#1」開催レポート

第1回AIPyハンズオン勉強会を開催したのでその開催レポート AIPy (アイパイ) ハンズオン #1 (2018/04/12 19:30〜) この勉強会について 仕事で機械学習などを活用したいけど何 …

「Chainerで学習した対話用のボットSlackで使用Twitterから学習データを取得してファインチューニング」を試してみる

本記事は以下の勉強会用に作成した記事で現時点では最後まで動作確認できていない箇所があるのでご注意ください。問題解決したら更新します。 AIPy (アイパイ) ハンズオン #4 (2018/09/20 …

「仕事ではじめる機械学習」の「映画の推薦システムをつくる」を実践してみる

「仕事ではじめる機械学習」の映画の推薦システムをつくるを実践してみる 本書のソースコートは以下にあがっている。本記事はchap07が対象。 https://github.com/oreilly-jap …

機械学習におけるアルゴリズム

前回のパーセプトロンに引き続きこの勉強会用に仕事ではじめる機械学習を元に機械学習におけるアルゴリズムをまとめる。 AIPy (アイパイ) ハンズオン #3 (2018/07/19 19:30〜) この …