機械学習の目的と手法のまとめ

近年、機械学習とか人工知能がとても盛り上がっていて、どこに行っても人工知能使っています!というフレーズが飛び交っています。しかし、果たして正しい理解の下で議論が行われているのかは定かではありません。大量のデータを回帰モデルにぶち込んで、テキトーに人工知能を謳えばいいだろうみたいなことすらありそう。(想像)

機械学習もディープラーニングも人工知能も統計学も被る領域はあれど、別物であるわけですが、じゃあ機械学習って何?って聞かれて、私はちゃんと答えられるのか。

その答えを得て、本質を理解したうえで正しい方法でデータを扱うために、機械学習の基本を振り返りました。

スポンサーリンク

教師あり学習

データと正解のラベルがあるとき、これで学習したモデルはデータから予測ラベルを導くことができます。最近の例では、英語から日本語に翻訳するとか、写真を見せてガンかどうか判断するとか。

間違いの程度を数値化した損失関数 (Cost function) を最小化することで、最も良いモデルのパラメータを見つけます。

線形回帰

(Linear regression)

売り上げ予測、株価予測など連続値を予測できるときに用いる手法。

予め決めておいた特徴量に対する重みを損失関数を最小化することによってパラメータを求めます。イメージは重回帰分析。

損失関数には、正解ラベルと予測ラベルの誤差を二乗して平均した、二乗誤差関数を使います。

ロジスティック回帰

(Logistic regression)

明日は雨が降るかどうか、診察した患者はガンか否か、といった離散値を予測するときに用いる手法。複数のクラスに分類することと同義です。

上の例の場合は 0, 1 の離散値で予測します。確率的識別モデルとも言われます。

損失関数には、交差エントロピー誤差関数を使います。TensorFlow とか使ってみると最初になんだこれ?ってなるやつです。

ニューラルネットワーク

自分たちで特徴量を設定せず、それも機械にやらせようという、上二つとは性質が異なる手法。

流行りのディープラーニングはニューラルネットワークの多層化から始まりました。(記憶では)

よくクラス分類問題に利用されるため、交差エントロピー誤差関数を用いることが多いです。他は知りません。

サポートベクターマシン

ロジスティック回帰が確率的識別モデルであったのに対し、決定的識別モデルと呼ばれます。

活性化関数にはシグモイド関数ではなく、ヒンジ関数を使っているのが特徴です。微分不可能であるため、解析的に解を導出することはできず、劣勾配などを用います。

マージンを最大化するパラメータを見つけることで、データを分類することができます。外れ値に大きく左右される可能性があるため、正則化項を入れた式で実行することが推奨されます。

教師なし学習

正解ラベルはなく、機械に法則を導かせます。多次元データの解釈は難しいため、これによってデータの中に人間には簡単に見つけられない規則性を見出すことができます。

クラスタリング

有名なのは K-means 法です。

K 個のランドマークを設定して、それぞれのランドマークからの距離を計算し、最も近いランドマークを決めます。次に、同じランドマークを選んだデータの平均から新しいランドマークの位置を決め、再度距離を計算します。

これを繰り返すとランドマークの位置が固定され、K 個のクラスタに分類することができます。

ぱっと見たとき、全く境界線がわからないデータセットでも分類することができますが、いくつのクラスタに分類するかという問題に対して 明瞭な答えはありません。エルボー法などを用いることが多いようです。

 

主成分分析

(Principle Component Analysis)

PCA を行う動機は、必要になるメモリ容量や記憶領域の削減、次元の圧縮、及び高次元特徴量の可視化にあります。

過学習を防ぐために次元を圧縮することを目的として使われる場合があるようですが、使い方としては誤っており、過学習には正則化で対応することが望ましいです。

推薦

多数のユーザーのレーティングと対象商品の性質から、レーティングしていないユーザーのレーティングを予測したいような場合に使う手法です。

もし、このレーティングが予測できればレーティングが高い商品をおすすめとして表示できるでしょう。

これには行列分解、協調フィルタリング (Collaborative filtering) という考え方を用います。また、何もレーティングしていないユーザーに対応するため、平均標準化が使われることがあります。

学習方法

解析解

凸関数であれば大域的最適解が解析的に求まるため、行列計算で一気に解くことができます。次元が低ければ。

勾配降下法

行列の次元が高い場合、逆行列計算のコストが非常に高くなるため、一般的なコンピュータでは性能が足りません。

そこで、損失関数の偏微分を計算し、その分パラメータを小さくしていくという方法が採られます。全データで勾配を計算します。(バッチ学習)

最も急な方向へ勾配を減少させるため、最急降下法とも呼ばれます。(?)

非凸関数もこの方法を用いて解を求めます。ただし、非凸関数の場合は局所的最適解に落ち着く可能性があります。

確率的勾配降下法

勾配降下法では逆行列計算は必要ありませんが、データ数に応じて 1 ステップ当たりの計算量が増えます。そこで、ランダムにとってきた一つのデータに関して勾配降下法を適用することで、計算コストをかなり小さくすることができます。

運が良ければ勾配降下法よりも早く最適解に辿り着けますが、運が悪ければいつまで経っても適した答えを導けません。

また、非凸関数は通常の勾配降下法では局所的最適解が得られた時点で処理が終わってしまいますが、確率的勾配降下法では場合によっては山を越えて大域的最適解に落ち着いてくれるのではないかと、僅かな希望があります。

ミニバッチ学習

勾配降下法では時間がかかりすぎ、確率的勾配降下法では一つ一つのデータにかなり揺さぶられることになるので、ランダムで選んだ複数データを使うというのがミニバッチ学習です。

バッチサイズは数十から数百が一般的なようです。

予測精度を上げる手法

正則化

(Regularization)

訓練データに対して予測モデルの過学習を防ぐために損失関数に正則化項を加えたモデルにすることで、汎化誤差が最小になることが期待されます。

正則化項にはノルムが使われ、多くは L1 か L2 が使われる。線形回帰において前者を採用したものをリッジ回帰 (Ridge Regression)、後者を採用したものをラッソ回帰 (Lasso Regression) と呼びます。

正則化の重みを決める正則化パラメータの大きさは、k-fold交差検証や、交差検証データの最小化を利用することで見つけるのが一般的です。

k-fold交差検証

データを k 個に分割し、1 個をテストデータ、他を訓練データとして訓練する、というのを k 回繰り返したときの平均損失が最小となるパラメータを見つける手法。

特徴量の追加・削除

予測モデルは特徴量が少ないとバイアスが大きくなり、多すぎると分散が大きくなります。特徴量の数は学習曲線の動きを見るなどして決めます。

特徴量の拡張

データの次元が低い場合、特徴量が足りなくなることがあります。そのときは特徴量の二乗をとるなど、データの拡張が行われます。

画像データに対しては左右反転や明度の変更、音声データに対してはノイズの追加などがあります。

データの分割

データを訓練データ、交差検証データ (Cross validation data)、テストデータのようにわけ、訓練データで訓練した予測モデルを交差検証データを用いてパラメータを調整し、最終的な評価はテストデータで行うことで、汎化誤差を小さくする狙いがあります。

6:2:2 の割合くらいで分割するのが望ましいようです。

学習曲線

(Learning curves)

データ数に応じた訓練誤差 (Training error) と交差検証誤差 (Cross validation error) を曲線にすると、モデルのバイアスが大きい (High bias) のか分散が大きい (High variance) のか知ることができ、特徴量選択をする上でヒントになります。

データの分布

データの範囲がばらばらであるとき、一部の特徴量の重みが偏ってしまうため、一様に合わせる必要があります。(feature scaling)

また、データが正規分布 (Gaussian distribution) に従っていなくても正しく計算できるため、結果を導くことはできますが、正規分布に従うように前処理を行うと少し精度が向上するといわれています。

ソース

  • 大学の授業
  • オンライン学習 Coursera

スタンフォード大学が始めた Coursera というオンライン学習サービスで、同大学の開設している Machine Learning という講義が結構おすすめです。

サービスの利用は無料、お金を払うと大学名と教員名が入った修了証が発行されます。アメリカでは履歴書に使うことができるらしい…

全 11 週で機械学習の基本を学ぶコースです。数学的な証明は除かれているので、数式を展開していくのはちょっと…という方でも何とかできる。(?)

最後に

まさか 1 ページで全手法の詳細について言及できるはずもなく、それぞれの詳しい説明を気が向いたら別記事で書いてリンクします。

スポンサーリンク

コメント・質問する