人工知能(AI)を勉強したいけど機械学習との関係が知りたい。
機械学習には具体的にどのようなものがあるのかが知りたい。
実際に機械学習が使用されている例を知りたい。
今回のテーマは「機械学習とは」ですが、機械学習についての概要についての内容となります。
本記事の学習目標
- 機械学習とは何か説明できる様になる
- 機械学習のアルゴリズムについて把握する
それでは早速みていきましょう。
機械学習とは
まずは機械学習とはどういうものかについて学びましょう。機械学習に関わる色々な用語について紹介していきます。
機械学習とは何を意味するのでしょうか。人工知能との違いは何でしょうか。
以下の記事でも人工知能と機械学習の違いについて解説しましたが、この項ではより深掘りして解説していきます。
【初心者向け】人工知能、機械学習、ディープラーニングの違いとは
続きを見る
人工知能と一概に言っても、機械学習や、ニューラルネットワーク、機械学習と様々な関連用語が出て来ます。
ここで一度、人工知能や機械学習、ディープラーニングなどの相関図をで確認しておきましょう。
上の相関図を確認すると、人工知能(AI)の中に機械学習、また機械学習の中にニューラルネットワークやディープラーニングが含まれている事が分かります。
ここで登場してくる、人工知能について、またディープラーニングと機械学習についての違いについて一つずつ解説していきます。
AI(人工知能)
AI(Artificial intelligence:人工知能)を支える根幹の技術が機械学習です。
最近はAIという言葉が巷にあふれていますが、機械学習のことをAIという場合もあり、AIを意味する事がごちゃ混ぜになっている印象があります。
AI(人工知能)とはまず何か把握しておきましょう。
「言語の理解や推論、問題解決などの知的行動を人間に代わってコンピューターに行わせる技術」
ひと昔前だとAIといえば映画の世界ですが、現在では日常のあらゆるシーンでAIが多様されています。
»【引用】松尾 豊(2015) 「人工知能は人間を超えるか ディープラーニングの先にあるもの」
また上図にもある様に、現在はAIの第3次ブームに入っています。
AIの技術そのものも急成長していますし、さらにはAIが日常生活品でも多様される事が多くなってきた事もあり、一般の方への認知度も上がってきました。
参議院常任委員会調査室・特別調査室が出した「第3次ブームを迎えたAIの現状及び今後 」という調査結果がありますが、この調査結果にもある様に政府も認めているほど非常に注目されている分野でもあります。
シンギュラリティ(技術的特異点)とは
AI技術の発展は非常に目覚ましいものがありますが、ここでシンギュラリティ(技術的特異点)という問題があります。
では、シンギュラリティ(技術的特異点)とはどの様な事をいうのでしょうか。
シンギュラリティ(技術的特異点)とは、人工知能が発達し、人間の知性を超えることによって、人間の生活に大きな変化が起こるという概念を指します。
シンギュラリティという概念は、人工知能の権威であるレイ・カーツワイル博士により提唱された「未来予測の概念」でもあります。
映画「ターミネーター」でも描かれていた様に、人工知能が人間を支配するという世界が将来現実になると考えたら少し怖いですね。
とはいえ、現実的にシンギュラリティは問題になっていまして、それが実現するのが2045年とも言われています(2045年問題)
»【日本経済新聞】人工知能「2045年問題」コンピューターは人間超えるか
このようにAIの技術を進化と共に、人間がAIをどのようにコントロールしていくかも考えていかなければいけません。
機械学習
AI技術の根幹にあるのが 機械学習(machine learning) です。
機会学習とは「機械」が「学習」するという言葉のとおり、PCがビッグデータを学習し、それを基にしてPCが判断を行うというものです。
ここでいう「判断」とは、以下のような内容を指します。
機械学習が行う判断
の具体例
- 人間が写真を見て「これはネコの写真だ」というように、答えが決まっている事に対してそれを学習し正確に判断すること
- 「現時点では分かっていない」ことに対して学習から「将来はこうなるのではないか」と予測を立てること
- 失敗を繰り返すことによってさらに良質な行動ができる様になるのと同じ様に、過去に学習した内容から、その時点・瞬間に最良の判断を下す事ができること
深層学習(ディープラーニング)とニューラルネットワークの違い
機械学習とは別に 深層学習(ディープラーニング:deep learning) という言葉を聞いた事がある方も多いと思います。
では機械学習と深層学習は何が違うのでしょうか。
その関係を見ていく前に ニューラルネットワーク(neural network) という言葉について説明します。
上図の様に機械学習の中には単回帰分析や深層学習など色々なものが存在します。
ニューラルネットワークは簡単に言うと、人間の脳(神経回路)の構造を基にプログラムで再現した構造です。
人間の脳は多数の神経回路(ニューロン:neuron)で構成されており、ニューロンとニューロンが繋がることで、大量のデータを蓄積する事が出来る神経回路を形成しています。
人間が外部から学習した情報を電気信号として神経回路の中を流れる仕組みが出来上がっており、新しいニューロンが繋がることで人間は新しいことを学習する事ができます。
人間の脳(神経回路)の仕組みをコンピュータプログラム上で模しているので「ニューラル」という言葉をつけて「ニューラルネットワーク」と呼んでいます。
ニューラルネットワークを利用してコンピュータに学習させるのが「深層学習」です。
つまり、上図の関係でもある様に深層学習は機械学習の一部だと思ってください。
ニューラルネットワークや深層学習の仕組みを理解するのは非常に難しく労力もかかるため、機械学習を行うためだけであれば、今はスルーしてOKです。
しかし、既に開発された深層学習を行うだけであれば「scikit-learn」や「TensorFlow」、「Keras」などのPythonのライブラリを使用することで比較的簡単に行う事ができます。
機械学習で使用される言語とは
機械学習では様々な言語が使用されていますが、これから機械学習を行う為に使用したい言語を探しているという方にはPythonがダントツでおすすめです。
C系の言語(C##, Object-C)やJava, R などを使用することもありますが、Pythonが最も学習するためのコストパフォーマンスが良いかと。
これからAI・機械学習を勉強するのであればなるべくPythonを使用しましょう。
機械学習の3つの種類とは
教師あり学習と教師なし学習
教師あり学習と教師なし学習についてはこちらの記事でも詳しく記載していますので、是非ご参照ください。
【初心者向け】人工知能、機械学習、ディープラーニングの違いとは
続きを見る
この項では更に詳しく深掘りしていきます。
機械学習では、一つの判断を下すために利用する大量のデータをどのように使って学習するのでしょうか。
その方法は2つあります。教師あり学習 と 教師なし学習 です。
2つの違いは、簡単に言えば「答えがあるか無いか」です。
学習に使うデータに答えがある場合が「教師あり学習」、答えの無い場合が「教師なし学習」となります。
写真をみて「これは○○の写真だ」と判断出来る場合には教師あり学習を使います。
一方で、将来の予測を行う際には教師なし学習を使います。
教師なし学習で行う事
過去のデータを学習した上でデータの推移の傾向を分析し、その分析結果を基に「今までの蓄積されたデータの値はがこの様であれば、将来のデータは○○ではないか」と予測を立てます。
強化学習
強化学習とは、教師あり学習や教師なし学習とは異なります。
コンピュータ自体が試行錯誤を繰り返す中で「より良い行動をしたら良いデータを得られる」というルールで学習を続けていき、その瞬間瞬間での最良な判断を繰り返していく手法が 強化学習 です。
AlphaGO というAIの強化学習でできた囲碁をご存知でしょうか。
AlphaGo(アルファ碁、アルファご)は、Google DeepMindによって開発されたコンピュータ囲碁プログラムであり、2015年10月に、人間のプロ囲碁棋士を互先(ハンディキャップなし)で破った初のコンピュータ囲碁プログラムとなったAIの囲碁です。
このAlphaGoは最初のデータは、インターネット上に存在する大量の将棋・囲碁の手の内を「教師あり学習」で学習させます。
ある程度学習を行ったらAI同士で対局させて、その中で強化学習を行う(より良い手を打ったら報酬を与える)ことで、AIとしての能力を自力で向上させます。
ゲームでも活用している動画がYouTubeに落ちていたりしますね。
私自身はこの強化学習に関する研究を行っているのですが、この強化学習こそ今後の医療の発展には必要不可欠なのではないかと考えています。
機械学習アルゴリズムとマップ
学習したAIから得られるデータ(又は、データを分析する方法)のうち、機械あり学習は 分類 と 回帰 の2つに分ける事ができます。
機械あり学習の分類と機械あり学習の回帰の各々について学習していきましょう。
教師あり学習のうち分類には、ランダムフォレスト、ロジスティック回帰、サポートベクターマシン(SVM)がああります。
教師あり学習のうち回帰には、線形回帰、Ridge回帰、Lasso回帰、Elastic Net回帰、サポートベクター回帰があります。
教師あり学習、教師なし学習の各々について、分類して学習していきましょう。
教師あり学習:分類
機械学習のうち教師あり学習の分類には「カテゴリーを予測する」という性質があります。
「これは○○の写真だ」とコンピュータが判断するのは、この分類に該当します。
「解答が与えられていない画像から、正解の画像を正確に予測し抽出する」のが分類だと理解してください。
とらえたデータをもとに解析して、特徴を把握した上で「これは○○だ」と分類するわけです。
教師あり学習の分類には、以下の3種類があります。
教師あり学習の "分類"3つ
- ランダムフォレスト
- ロジスティック回帰
- サポートベクターマシーン
各々について、順を追って解説していきます。
ランダムフォレスト
ランダムフォレストは決定木をいくつも用意して、その結果の平均を取る方法(アンサンブル)です。
分類だけでなく、回帰でも使用されます。
1人の意見より、たくさんの人の意見を聞くイメージになります。
それぞれの決定木には同じデータにならないように、元のデータから抜き取ったデータを使います。
回帰木・決定木に関しては以下の記事で詳しく解説しています。
【機械学習】回帰木・決定木で予測モデルを作成する【手順あり】
続きを見る
random forest については以下の記事で詳しく解説しています。
【機械学習】ランダムフォレストとは【特徴の解説から実装まで】
続きを見る
ロジスティック回帰
ロジスティック回帰は良い(positive)または、悪い(negative)などの2値分類になります。
sigmoid関数と呼ばれる0〜1の値を取る関数を使います。
- 0.5未満:良い、positive
- 0.5以上:悪い、negative
シグモイド曲線のイメージとしては、以下の様な図になります。
サポートベクターマシーン(SVM)
サポートベクターマシーン(SVM)も良い、または、悪いなどの2値分類になります。
2値分類するとき、positiveとnegativeがどこで分けれるか、境界線を見つけます。
例えば、以下の図の様な赤線のような境界線はどうでしょう?
分けれてはいますが、分類を行うのに良さそうな境界線ではありませんね。
黒線はどうでしょう?やや理想とする分類をするための境界線に近いのではないでしょうか?
SVMは青点、赤点のちょうど良い距離(マージン)の境界線を引いてくれるので、精度の良い分類ができます。
教師あり学習:回帰」
回帰とは
画像、時系列データ、表データなどの入力データから数値を予測することです。
機械学習モデルは入力データと数値の規則性を学習することで、未知のデータから数値を予測します。
例えば、画像、時系列データ、表データなどの入力データから「数値を予測する」ことです。
具体的には、「病気の発症率」や「家賃の価格」など、連続的な数値について予測します。
単回帰分析や重回帰分析などがありますが、回帰では統計学の知識や計算を使います。
機械学習モデルは入力データと数値の規則性を学習することで、未知のデータから数値を予測する事ができます。
線形回帰
ある値 $x$ から $y$ を予測する方法です。
例えば、$x$ を家の面積、$y$ を家の価格として、面積から家の価格を予測するなどです。
新しい家を購入するときに、販売価格が高いのか安いのか知りたいとおもいます。
そのとき、線形回帰を使って販売価格が予測できれば、安い家を買うことができるということです。
面積だけでは予測精度が足りないのは明らかなので、部屋数、土地の面積を追加して予測精度を向上させます。
1つの変数から予測する回帰を単回帰、複数の変数から予測することを重回帰と言います。
回帰の種類
- 単回帰: $f(x)=w_{0}+w_{1} x_{1}$
- 重回帰: $f(x)=w_{0}+w_{1} x_{1}+\ldots+w_{m} x_{m}$
Ridge回帰、Lasso回帰、Elastic Net回帰
重回帰の汎化性能(未知データの予測精度)を上げるための方法になります。
変数 $x_{1}, x_{2} \ldots x_{m}$ と複数あるとき、それぞれの変数で影響度(寄与度、重要度)が違います。
この影響度も考慮されれば、より精度の良い予測ができそうです。
どうやって、変数の影響度を調整するのでしょうか?
重回帰の最適化計算では、実際の値 $y$ と予測値 $y$ ハットの二乗誤差のloss値を計算し、lossが小さくなるように調整します。
lossの計算式に正則化項をつけることで、影響度も計算します。
この正則化の式の違いがそれぞれ、Ridge回帰、Lasso回帰、Elastic Net回帰になります。
Ridge、Lasso、Elastic Netの各々の式
- Lasso:$\text {loss}=\sum_{i=1}^{n}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2}+\lambda \sum_{j=1}^{m}\left|w_{j}\right|$
- Ridge:$\operatorname{loss}=\sum_{i=1}^{n}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2}+\lambda \sum_{j=1}^{m} w_{j}^{2}$
- Elastic:$\text {loss}=\sum_{i=1}^{n}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2}+\lambda_{1} \sum_{j=1}^{m} w_{j}^{2}-\lambda_{2} \sum_{j=1}^{m}\left|w_{j}\right|$
$n$ :サンプル数
$i$ :サンプルの $i $ 番目のデータ
$m$ :変数数
$j$ :変数の $j $ 番目の重み $w$
$λ$ :定数で正則化の強さ調整
サポートベクター回帰(SVR)
サポートベクターマシン(SVM)の回帰が、このサポートベクター回帰(SVR)です。
SVR回帰式に対して、マージン(誤差の不感帯)が設けられ、その領域の誤差を0とします。
よって、誤差が0になるように最適化するので、飛び値(ノイズ)に強くなります。
教師なし学習:クラスタリング
階層クラスター分析
ユークリッド距離などで、似たような(類似度の高い)データをクラスターにしていく方法です。
距離の近いデータを①、②、③などでクラスターに分けます。
クラスター同士も近ければ④のように①、②のクラスターとします。これが階層状になります。
クラスター同士の距離の比較の違いでいくつか方法があります。
- 最短距離法
- 最長距離法
- Ward法
- 群平均法
Ward法
クラスター同士の距離の比較としてWard(ウォード)法というものがあります。
この方法では、各クラスタの散らばり具合(重心と各データの2乗和)を計算して、値の小さいクラスターを結合します。
クラスターC1、C2があったときの計算は以下にようになります。
1 | L(C1 U C2) - L(C1) - L(C2) |
$L(C)$ が重心と各データとの距離の2乗和になります。
群平均
クラスター同士の距離の比較として群平均法というものがあります。
2つのクラスター間で可能な全ての組み合わせにおける距離の平均から、クラスターを結合します。
非階層クラスター分析
階層クラスターと違い、クラスターの数を人が決めます。
あとは統計的に、そのクラスター数に別れるように処理をします。
k-means法
非階層クラスター分析の代表的な方法です。
k-meansでは以下の2つのステップを繰り返します。
- 各クラスタの重心計算、重心移動(最初はランダムな位置)
- 重心と各データの距離を比較して、クラスタリング
この繰り返しによって、指定したクラス多数のデータに分けることができます。
教師なし学習:次元削減
次元削減とは
次元削減は、2次元のデータを1次元へと次元数を減らすことです。
下記のような相関の高いデータは1次元に減らしても良いでしょうという考え方です。
機械学習では多次元(変量)のデータを取り扱うことが多いです。
しかし次元数が多ければ多いほど、モデルは複雑になり、精度が落ちることもあります。
また、次元が多いと過学習しやすい傾向にあります。
他にも、人がデータを把握するために、多次元から2次元にすることもあります。
主成分分析(PCA)
主成分分析は、与えられたN次元のデータに対して$ N > K $次元となる主成分(軸)を探すことになります。
2次元で考えると、各点に一番フィットする直線のことです。
一番フィットするのは、見た目で決める!というわけにはいきません。
正確には、各点が直線に垂直に射影したときの赤線がの合計が一番小さくなることです。
主成分を探すというのは具体的には、「体重」、「身長」というデータがあったときに、「体格」(主成分)という軸ができるイメージです。
異常検知
異常検知とは
異常検知では、異常データが無い若しくは少なく、逆に正常データばかりあるような場合に使う方法です。
例えば、車のエンジンの異常を検知をする場合、異常データがたくさん集めれたとしたらどうでしょうか?
そんな車には乗りたく無いですね。
通常は正常データしか収集できないですが、車のエンジンが異常となったときにはしっかりと検知したいということになります。
k近傍法
k近傍では、対象データからk個の含まれる距離(円の半径)を求めます。
この距離がある距離を超えたときに異常データとします。
$k$を何個にするか?どれくらいの距離を異常とするか?は人が考えます。
主成分分析(PCA)
主成分分析で新しい主成分(軸)をみつけます。
正常データは新しい軸付近に集まっていますが、異常データは大きく離れます。
この大きく離れているものがあれば異常として検知できます。
OneClassSVM
SVMではクラス間でマージンをとるように最適化します、
しかし、OneClassSVMでは原点と正常データのマージンが最大化になるように最適化します。
得られた境界線の内側外側で異常検知を行います。イメージとしては以下になります。
イメージとしては、こちらのYouTubeの映像が分かりやすいです。
実際に機械学習が使用されている例
メールのスパムフィルター
gmailではgoogleが99.9%でスパムメールをブロックしてくれているようです。
スパムメールの検知にも機械学習が使われます。
メールのデータは文章なので、方法としては単語に分割して、単語の出現頻度によりスパムメールなのかどうかで判断します。
ECの商品レコメンド
私たちがよく使う、ECサイトでは日々大量のデータが蓄積されています。
ユーザーの購買履歴、閲覧履歴、お気に入り、商品レビューなど。
これらのデータを使って機械学習では様々なことができますが、身近な例では商品レコメンドでは無いでしょうか?
例えば、顧客のクラスタリングを行い、同じクラスターの顧客が購買した商品をレコメンドすると買ってくれる確率は非常に高くなります。
医療への活用
CT画像や診断結果は医者(人)がみることにより、病気かどうか判断をしていますが、これでは、医者によって判断が異なる場合が出てきます。
もし、AIが医者より精度よく判断が出来たらどうでしょう?診断してもらう患者、診断する医者両方にメリットがあるのでは無いでしょうか。
活用事例では、例えば
- 癌の検知
- 新型肺炎の検知
今後も医療+AIの活用は進んでいくでしょう。
がんの未知なる特徴をAIが発見 | 理化学研究所
続きを見る
顔認識
すでに実用レベルになっており、生活に浸透していますね。
スマートフォン、パソコンの認証から、出国時の顔認証ゲートまで、今後はいろいろなところで当たり前のように顔認証が使われています。
顔認識には2つあります。
- 顔のパーツ(目鼻など)の検出
- 顔(本人)認証
顔のパーツ位置がわかれば、顔の加工や他人の顔に変換することもできます。
顔認証があれば、RFIDなどなくても顔で入出制限や、決済などができるようになります。
顔検知は下記のように画像さえあれば、簡単に顔の位置を検出してくれるライブラリも多くあるので色々試してみると面白いですね。
自動運転
自動運転はすでに実現してきていますね。
自動運転で使われる技術はいくつかありますが、重要な技術の1つが周辺の情報を正しく検知できることでは無いでしょうか?
そのために、カメラを始めミリ波レーダーなどが搭載されています。
カメラでは車、歩行者、標識などを検知するのに、セマンティックセグメンテーションや物体検知などの機械学習が活躍しています。
まとめ:機械学習とは何か→まずは概要を捉える事が重要
機械学習についての概要についてまとめました。
「機械学習とは何か」という事が大まかに掴む事ができたかと思います。
人気記事 【入門から上級レベルまで】人工知能・機械学習の独学におすすめの本25選
人気記事 無料あり:機械学習エンジニアの僕がおすすめするAI(機械学習)特化型プログラミングスクール3社