takahiro_itazuriの公倍数的ブログ

本やWebを通して学習したことをまとめるブログです。最大公約数(つまり、共通部分)的なという表現と対比して、「なるべく包括的にカバーしつつ、更に+αの要素も加えられたらいいな」という意味で公倍数的ブログと名付けました。

『Machine Learning 101』の解説

はじめに

GoogleのSenior Creative EngineerであるJason Mayesさんのスライド『Machine Learning 101』が2017年12月に公開されました。
docs.google.com

Gigazineでも以下の記事で掲載されていました。
gigazine.net

Gigazineの記事を読んだ上で、非常に興味深いと思ったので、自分なりに理解して、適宜情報を付け加えながら、覚書的に記事を書いてみようと思います。

このスライドとは何か?

以下の質問に対する答えを提供するもの。

是非集中して一気に読んで欲しいとのこと。
用語集は以下のリンクにあります。

developers.google.com

人口知能(Artificial Intelligence)、機械学習(Mahine Learning)、深層学習(Deep Learning)とは何か?

人工知能(Artificial Intelligence)

人工知能「人間の知性を再現する機械」と定義されます。
現在の人工知能「narrow AI」と呼ばれ、「ある特定の定義されたタスクに対して、人間と同等もしくはそれ以上の成果を出すシステム」です。
特定のタスクをあらかじめ定義しているという意味で狭義(narrow)な人工知能と呼ぶようです。

ユースケースとしては以下のようなものが挙げられます。

以下のリンクに様々な具体的な例が挙がっています。
experiments.withgoogle.com

機械学習(Machine Learning)

機械学習人工知能の実現するための手法であり、データの集まり(経験)から学習するもの」と定義されます。

機械学習は、人間が特定のルールを与えるプログラミングではなく、データからパターンを認識できるように学び方をコンピュータに与えます。
もう少し難しくいうと、「入力に対して最適な出力をする関数をコンピュータに設計させるもの」と言えます。

機械学習は学習するために使用したデータ以外のデータ、つまり未だ見たことのない入力に対して妥当な判断を行うことを目的としています。
そのような素晴らしいものをデータを与えることだけでコンピュータが自分で学んでくれます。

深層学習(Deep Learning

深層学習とは機械学習を実装するためのテクニック・技術の一つ」と定義されます。
深層学習の一つとしてディープニューラルネットワーク(Deep Neural Network: DNN)は非常によく知られています。
ディープニューラルネットワークは人間の脳のニューロンを大雑把に模倣したものです。

まとめ

人工知能機械学習と深層学習には以下のような包含関係があります。

人工知能$\subset$機械学習$\subset$深層学習
歴史的には人工知能が1950年代、機械学習が1980年代、深層学習が2010年頃から一般的になってきました。

データの選び方

機械学習システムを学習するためには「特徴量(Features)」を利用します。

例えば、「みかん」ならば、「重さが100gである」や「色がオレンジ色である」などの対象を表現したものが特徴量と言えます。さらに、ここでタスクとして分類(Classification)を例に挙げます。分類とは、入力を事前に定義されたクラスに分類するタスクのことを指します。ここでは、「重さが100gである」「色がオレンジ色である」という特徴量が与えられた時にそれが「みかん」であると判断するタスクのことです。このようなタスクは当たられた特徴量の数を空間の次元数とした特徴量空間を考えた時に、特徴量空間の特定の1点に対してクラスを出力するタスクとして捉えることができます。したがって、空間としては「同じクラスほど特徴量空間中でまとまっていて、異なるクラスほど特徴量空間中で離れて位置している」方が分類しやすいです。よって、分類がしやすくなるように特徴量を上手く選ぶ必要があります。実際の機械学習では、より多くの特徴量、つまり高次元な特徴量空間を利用します。

特徴量空間の次元数が大きい方がタスク自体は容易になりますが、次元数が大きすぎると学習するためのデータ(学習データ)に特化しすぎたシステムになってしまいます。このことは過学習(Overfitting)」と呼ばれています。過学習が発生すると、「新しい入力に対して妥当な判断をする」という機械学習の目的が果たされなくなってしまいます。逆に学習データを上手く(バイアスがないように)選ぶことができれば、過学習を起こしていても過学習が発生しても大丈夫です。したがって、学習データを工夫する方法としては、「データ拡張(Data Augumentation)」という技術が用いられたりします。データ拡張は学習データの量を増やすこともできます。

また、機械学習システムは学習していないことに対しては予測できません。動物の分類をするタスクに対して、特徴量として「足の本数・色・重さ」を選択し、犬とニワトリの学習データを与えて学習したとします。この機械学習システムに「足の本数:4・色:黒・重さ:200kg」という牛のデータを入力すると、犬であると間違って判断してしまいます。

以下の動画は上記のことを学ぶためには非常に良い資料です。
www.youtube.com

学習方法

機械学習は以下の3つに分類されます。

  • 教師あり学習(Supervised Learning)
  • 教師なし学習(Unsupervised Learning)
  • 強化学習(Reinforcement Learning

教師あり学習(Supervised Learning)

教師あり学習とは、「正解の情報も含まれているデータを学習データとして利用する方法」です。最も一般的に用いられている方法です。

先程の動物の分類の例でいうと、「足の本数・色・重さ」という特徴量に加えて、それが「何の動物なのか」という正解がついているデータを学習データとして用います。

教師なし学習(Unsupervised Learning)

教師なし学習とは特徴量のみが含まれたデータを学習データとして利用する方法」です。

教師あり学習とは異なり、「何の動物なのか」という正解の情報は含まれていないデータを学習データとします。重要なのは、コンピュータにはいくつのクラスがあるのかを事前に与えずに、いくつに分類するかも学習させます。

強化学習(Reinforcement Learning

強化学習とは「試行とその結果(try and error)を繰り返して、正解を見つける方法」です。人間も普段からとりあえず行動してみて、その結果から何かを学んでいます。

最近では、碁の人工知能としてAlpha Goがよく知られるようになりましたが、Alpha Goはこの強化学習を用いています。ゲームのようなゴールが決まっていて、また環境も現実世界よりも単純なものに対して用いられているような印象があります。

どのように動いているのか

機械学習には様々な手法がありますが、ここでは単純な例をいくつか挙げて説明します。

例1

「入力として値$X$が与えられた時に、最適な値$Y$を出力する方法」を回帰(Regression)と呼びます。これは関数$Y=f(X)$と考えることができ、この関数(曲線)$f$を学習するタスクです。

例2

次の例は、「二つのクラスを分類するための境界線を学習する方法」です。学習された境界より上にあるものをクラス1、下にあるものをクラス2と判別します。外れ値(Outliers)と呼ばれる例外のような入力に対しては必ずしも正しい答えを出さなくても、多くの場合において正しい答えを出すものが良いとされます。

例3

最後の例は、「入力の近くにあるデータがどのクラスであるかを見て答えを出す方法」です。k-近傍探索(k-Nearest Neighbor Search)とも呼ばれ、入力の近傍にあるk個のサンプルのうち最も多いクラスを出力します。

ニューラルネットワーク(Neural Networks)

ニューラルネットワークは1000万個レベルの大量なニューロンで構成されており、各々が接続されています。各ニューロンは入力の刺激を受け取り、他のニューロンへ出力を行います。この構造は人間の脳から着想を得ています。

入力の刺激は複数のニューロンの出力の重みづけ和で定義されます。
数式で表すと以下のようになります。
$i$番目のニューロンへの入力を$Input_i$、$j$番目のニューロンの出力を$Output_j$、また$j$番目のニューロンの出力の$i$番目のニューロンに対する重みを$Weight_{ij}$とすると、以下のようになります。
\begin{align}
Input_i = \sum_{j} Weight_{ij} Output_{j}
\end{align}
このような入力に対して、$i$番目のニューロンはある関数$f$を通して出力します。
\begin{align}
Output_i = f(Input_i)
\end{align}
この関数は「活性化関数(Activation Function)」と呼ばれます。

上記ニューロンを複数個持つ層を複数層持ったものを「多層パーセプトロン(Multiple Layered Perceptrons: MLP)」と呼びます。多層パーセプトロンの層の数が多いものを「ディープニューラルネットワーク(Deep Neural Network)」と呼びます。
以下の動画はディープニューラルネットワークの理解を助ける良い資料です。

youtu.be

畳み込みニューラルネットワーク(Convolutional Neural Network)

畳み込みニューラルネットワーク「重みづけを画像フィルタリングのように特定の範囲に対して行うニューラルネットワークです。

以下の動画は畳み込みニューラルネットワークの理解を助ける良い資料です。

youtu.be

機械学習アルゴリズムの種類

回帰(Regression)

回帰モデルが推測した値と正解の値のエラーを利用して、反復的にモデルを更新することで最適なモデルを得る方法です。
直線をフィッティングする場合を、線形回帰(Linear Regression)と呼びます。

例示ベース(Instance-Based)

入力データに対して類似したデータを学習データから選び出し、選んだデータから推測を行います。
k近傍探索はこの方法の一つです。

決定木(Decision Tree)

木構造でルートノードに対して枝は分岐するための条件を表し、分岐した先は子ノードとなる。さらにその子ノードから分岐を繰り返す方法です。クラス分類問題や回帰問題に用いられる。

ベイジアン(Bayesian)

クラス分類問題や回帰問題に対してベイズの定理を利用する手法です。最尤推定法(Most Likelihood Estimation)はこの方法の一つです。スパムメール検出などに使用されています。

クラスタリング(Clustering)

データの固有の構造やデータの共通性に着目して分類し、評価関数を最大化するような最適化問題を解きます。k平均法(k-Means)はこの方法の一つです。

相関ルール(Association Rules)

相関ルール法は、変数間の関係を最もよく説明するルールを抽出します。多次元データにおいて、重要で有用な関連を発見することができます。

人口ニューラルネットワーク(Artifiial Neural Networks)

既に説明したパーセプトロンのことを指します。パーセプトロンは人間の脳のニューロンを模倣しています。

ディープラーニングDeep Learning

こちらもすでに説明しました多層パーセプトロンや畳み込みニューラルネットワークがこの方法の例です。

次元圧縮(Dimensionality Reduction)

余計な情報が多い多次元データから、固有の構造に着目して事前を減らします。データを要約したり、簡単な形で記述するために使用されます。主成分分析(Principal Component Analysis: PCA)はこの方法の一つです。

アンサンブル学習(Ensemble Learning)

アンサンブル学習は、独立して訓練した複数の弱識別器を組み合わせることで全体的な予測を行うモデルです。どの弱識別器を採用するかを判断します。

様々な応用

Alpha Goのような碁をするシステムや、画像からその画像を説明するキャプションを生成するシステム、様々な動きができるロボットなど様々なものに応用されています。
他にも多くの例がありますが、それは元々のスライドを参照してみてください。