Written by Ryusei

機械学習とは?これだけは押さえておくべき知識【徹底解説】

programming

機械学習を始めようと考えている人「機械学習について知りたい。これから機械学習を頑張りたいけど、難しそう…。頑張りたい気持ちはあるけど、何から手を付けていいか分かりません。まずは何から勉強したらいいですか?機械学習の基礎について教えて下さい。」


こういった疑問に答えます。

 本記事のテーマ

機械学習とは?これだけは押さえておくべき知識【徹底解説します】

 

機械学習についてこれだけは押さえておくべき知識

  • ①機械学習とは?
  • ②データセットの取り扱いについて(データセットの分割方法について)
  • ③Leakage(情報漏洩)について
  • ④機械学習の誤差について
  • ⑤過学習について

 

記事の信頼性

記事を書いている僕は、機械学習や深層学習をはじめて1年半ほど。
これまで、書籍等で独学で勉強し、実際にいくつか画像分類モデル等を作っています。
≫ 参考:Qiitaの記事でいくつか実績紹介

 読者さんへの前置きメッセージ

本記事では「これから機械学習を頑張りたいけど、何から勉強したらいいか分からないよ」という方に向けて書いています。

この記事を読むことで、「機械学習の基礎知識、さらには今後の研究等にも役立つ知識」を学ぶことが出来ると思います。

これから先、AI時代となっていきます。機械学習のスキルを身につけることはかなり自分の価値を上げてくれると思います。特に医療の分野などではAIの知識を持った人材はかなり重宝されると思います。これから先、少しでも機械学習を勉強する上での助けになれるように、記事を執筆します。

それでは、さっそく見ていきましょう。

スポンサードサーチ

①機械学習とは?

いきなりですが、皆様に1つ質問です。
「AIの定義を説明できますか?」

とは言え、いきなり言われても難しいですよね。でも、それでいいんです。実は、AIにはちゃんとした定義はありません。強いてあげるとすれば、一般的には

大量の知識データに対して、 高度な推論を
的確に行うことを目指したもの(一般社団法人 人工知能学会設立趣意書からの抜粋)

の様に説明されることがあります。

こんな風な記述のものが世の中にはとても多く感じます。しかし、ただでさえ難しい分野を難しい言葉で書かれると読むのも疲れてしまいますよね。これから簡単に分かりやすく説明していくので、よろしくお願いします。

機械学習の位置付け

上の図を目にした事がある方も多いのではないでしょうか?
まずは、ざっくりと簡単に機械学習、そして最近よく聞くAIについてそれぞれがどのような位置付けにあるのかを見ていこうと思います。

機械学習の位置付けについてですが、一番広く、大きな枠組みが人工知能いわゆる「AI」になります。実は、最近よく聞くAIとはとても広い意味です。

その中に、機械学習や深層学習(ディープラーニング)と言ったものが含まれているという位置付けになります。

まずは、難しい中身は置いといてAIの中に機械学習やディープラーニングがあるんだなというくらいで覚えておいてくださいね。

機械学習とは

簡単に言うなら…

ある入力に対し、期待する出力を返してくれるような関数のパラメータを求めることだと言えます。

さらに詳しく説明すると、大量のデータからデータに潜むルールパターンプログラム自身が学習して発見し、そのルールやパターンを予測することであると言えます。

例.

画像に alt 属性が指定されていません。ファイル名: inuneko-1.png


例として、犬と猫の画像を分類することを考えてみたいと思います。

上の図のように、犬・猫の画像を入力した時に、正しくイヌ・ネコという出力を返してくれるような関数を求めることであると言えます。

つまり!

機械学習を一言で説明するなら


データから自動で答えを導き出してくれるような関数を作らせること

であると言えます。

こんな風に考えたら、簡単ですよね。さらには、自動で答えを導き出してくれるような関数をプログラム自身に学習させることが出来たらいろいろなことが出来そうで夢が広がりませんか?

機械学習ってすごいんだな!これが分かっていただけたらここまではOKです。

②データセットの取り扱いについて


実際に、自分のオリジナルのデータで機械学習をやってみたい。そんな時に、気を付けておくべきこと、さらにこれだけは知っておいた方がいい事をこれからお話ししていきますね。

これから機械学習を勉強していく上でも、まずはこれらの知識から勉強していきましょう。

それではさっそく見ていきましょう。

データセットの取り扱いについて

まずはデータセットの取り扱いについて、例としてがんの良悪性鑑別のデータセット10万枚で考えていきたいと思います。

例.がんの良悪性鑑別モデル
  (10万枚の画像データセット)

画像に alt 属性が指定されていません。ファイル名: databunkatu.png


上の図のように元のデータセットを学習させる際には、訓練用のデータとテスト用のデータの2つに分割する必要があります。

当たり前な事ですが、重要なことなので覚えておく必要があります。

画像に alt 属性が指定されていません。ファイル名: sindata.png


さらに大前提として、「モデルの学習には、テストデータについての情報を一切知らない」ことが望ましいとされています。

つまりは、モデルを作るためにデータセットを仮テストデータ(検証用:validation)真のテストデータに分けるとさらに良いという事になります。


今回のデータセットの取り扱いの話については次の1文だけは覚えてください。

つまり、実際には訓練用、検証用、テスト用の3つにデータを分けるといい!という事になります。

データセットの分割についてはご理解いただけたでしょうか?

自分でモデルを作成する際に役立ててみてください。

スポンサードサーチ

③Leakage(情報漏洩)について


データを扱う上では、Leakage(情報漏洩)については最も重要と言っても過言ではありません。あまり聞きなれない言葉かもしれませんが、情報漏洩についての知識がないとせっかくの研究や成果が全く意味のないものになってしまう場合もあるので気を付けましょう。

それでは、内容を見ていきましょう。

Leakage(情報漏洩)について

先程、大前提として、「モデルの学習には、テストデータについての情報を一切知らない」ことが望ましいと説明しましたが、どういう事なのか説明していきますね。

一言で言うと、学習する段階で、テストデータを一切知らせてはいけない!ということ

画像に alt 属性が指定されていません。ファイル名: leakage.png


具体的に説明していくと、上の図のように訓練用データの中に、仮テストデータやテストデータが含まれてはいけないということです!

訓練データの中に、テストデータが含まれるということは、答えを知っている。

つまり、カンニングし放題の状態であるという事になります。

これは大問題ですよね!

もちろん、わざとLeakageをおこす人はいないですが、

気づかないうちに、情報が漏洩している(=訓練データにテストデータが含まれる)場合があります。

よくある事例

画像に alt 属性が指定されていません。ファイル名: dataaugmentation.png


上の図のように、元画像100枚の画像に対して、回転、反転、ノイズなどのデータの水増し(Data Augmentation)を行うことにより、500枚に増やし、その後、シャッフルして訓練データ400枚、仮テストデータ50枚、テストデータ50枚にデータセットを分割しました。

データの水増しは、画像を増やしたと考えてください!

何が問題でしょうか?

画像に alt 属性が指定されていません。ファイル名: augmentation_leakage.png


⇒訓練データにテストデータの一部が混入してしまう

これが問題ですね!1枚の画像から複数枚が生成されているので、画像全部を増やしてシャッフルしてから訓練用、仮テスト用、テスト用に分割してしまうと上の図からも分かるように訓練データの中に混入してしまう可能性があります。

改善するには

水増しするのは、訓練データのみにする!これが解決策であり、必ず守るようにしてください!

画像に alt 属性が指定されていません。ファイル名: kunren_augmentation.png


上の図のようにすることで、Leakageを防ぐことが出来ます。

Leakageの危険性

改めて、Leakageとは訓練データにテストデータの情報が混入してしまう事でしたよね。


Leakageについてしっかりと知っていないと上の図のような悲劇が起きてしまいます。

せっかくの努力や実績が無駄になってしまう事もあるので、Leakageについてしっかりと理解をし、これから研究や開発をしていく上で、Leakageに気をつけていきましょう。

詳しくはこちらの記事にもまとめていますので、参考にしてみてください。