▼検索ワード
「機械学習 ディープラーニング 違い」
「機械学習 ディープラーニング 使い分け」
▼検索結果
ディープラーニングは機械学習の一種で大きな違いは「特徴量を人が与えるか、特徴量を自動で抽出するか」だ。
▼ボク
うん、雰囲気はわかった。
で、具体的に言うとどういうこと?
特徴量を人が与えるって具体的にどういうことを指す?
▼おそらく
この思考に陥る人は、機械学習もしくはディープラーニングのどちらからしかまだ勉強していないのではないかと思います。もしくは何も考えずに使い分けているか。。
後者であればあまりこの記事は必要ないかもしません、前者であればこの記事を読むとモヤモヤが解消できる!(かも)
ちなみにボクはディープラーニングをはじめに勉強して、この疑問にぶち当たりました。
▼結果的に
この記事を読んで理解できれば結局「特徴量を人が与えるか、特徴量を自動で抽出するか」だよね。ってなると思います。
2021.06.26
実際のコードも解説してほしい!という声を多数いただきましたのでこちらで公開しています。
今回のシナリオ
今からこの記事を読んでみようかなと思ってる人は、散々、概念的な説明は見てきたと思います。
なので、今回は「犬・猫」を分類するモデルを作成しながら説明していきます。
もちろん、ディープラーニングと機械学習のそれぞれでモデル構築します。
質問
早速ですが、あなたは犬と猫を判別できますか?
どつかれそうですが、至って真面目な質問です。
ほぼ100%の人が「できるわい!」と言うでしょうが、では、写真を使わずに犬と猫を見分ける方法を文章に起こすことはできますか?
ほぼ100%の人が一瞬固まったのではないでしょうか。
犬は比較的フワフワしてて、、いや、違うな。。猫は目が縦長で、、じゃないときもあるな。。
意外と難しくないですか?
これを機械学習とディープラーニングで解決していきます。
機械学習でモデル構築
犬には目や耳、手足、胴体、おしり・・・様々な部位がありまね。もちろん猫にもあります。
今回はそんな様々な情報から犬・猫の判別に使えそうな情報をピックアップしました。
あっ、言い忘れましたが、あくまでも仮定の話ですので事実とは異なります。
目的は「機械学習 ディープラーニング 違い」を説明することなので。
判別するためにピックアップした情報
いろんな情報をみていくと「体高、体長、ヒゲ、体重」あたりが犬・猫を判別するために有効そうな情報です。
犬の「体高、体長、ヒゲ、体重」
犬の「体高(height)、体長(length)、ヒゲ(beard)、体重(weight)」はこんな感じです。
あくまでも今回用のサンプルなので事実とは異なります(2回目)
ちなみにanimalは「犬・猫」を識別する区分で、0を犬、1を猫にしてます。
猫の「体高、体長、ヒゲ、体重」
猫の「体高(height)、体長(length)、ヒゲ(beard)、体重(weight)」はこんな感じです。
さて、あなたならどれを選ぶ?
さて、犬と猫の体高(height)、体長(length)、ヒゲ(beard)、体重(weight)が目の前にあります。
この中から2つの情報だけを使って、犬・猫が判別できるならどの項目にします?
また、その項目で何がどうだったら「犬」と判定します?はたまた「猫」と判定します?
ん-・・・体長(length)は明らかに猫が長そうだから使えそうだな・・・あとは。。。
いやー、数値だけみても実際、難しいですよね。
可視化してみよう
数字だけ眺めてみてもどの項目を使ったらいいかの判断が難しいので、可視化しちゃいましょう。
体高とひげ
まずは体高とひげを可視化です。青が犬、オレンジが猫です。
がっつり重なってますね。見ての通り「体高とひげ」では犬と猫の境界線を引くのは難しそうです。
体高と体長
次は体高と体長を可視化です。
おー、さっきよりいい感じに固まってますね。ちょっと重なってますけど。
体長と体重
次は体長と体重を可視化です。
おっ!体長と体重なら綺麗に境界線を引けそうですよ!
実際に学習させてみよう
今回利用するのは「LinearSVC」という線形カーネルの場合に特化したSVMを利用します。
体長と体重で学習してみる
おっ!予測正解率が97%になりました!
ちなみに体高とひげでも学習してみた
可視化したときにどうみても境界線がひけなさそうな体高とひげについても学習してみました。
あら。49%ですね。やっぱり低い。
やったことを振り返ってみよう
犬・猫を判別するために「体高(height)、体長(length)、ヒゲ(beard)、体重(weight)」の中から、どれが判別に向いているのか可視化しながら、選択しました。
もうお分かりかと思いますが、モデルに学習させるときに「体長(length)と体重(weight)」という特徴を選び、それをモデルの学習に使いました。
ディープラーニングは機械学習の一種で大きな違いは「(数ある情報の中から)特徴量を人が与えるか、特徴量を自動で抽出するか」だ。
はい、これでわかりましたね。
いろいろ情報はあるけど、その中から判別するのにベストな情報が何か?を自分で選択しなければなりません。
逆に特徴を選び間違えると体高(height)、ヒゲ(beard)のときのように精度が悪いモデルが出来上がります。
今回は簡単な内容でしたが、当りがつけられないものを機械学習で解決しようとしたときは難易度がぐっと上がることが容易にわかりますね。
ディープラーニングでモデル構築
次はディープラーニングです。
設定は先ほどと一緒です。犬と猫を判別するモデルをつくっていきます。
ディープラーニングの特徴ってなんでしたっけ?
ディープラーニングは機械学習の一種で大きな違いは「特徴量を人が与えるか、特徴量を自動で抽出するか」だ。
あー、でしたね。機械学習では自分で「体長(length)と体重(weight)」という特徴を選びましたもんね。
では、ディープラーニングではどうするのか?
犬と猫の画像をモデルに入れるだけです。
さっきみたいに「これが特徴だから、これを学習してね」なんてことはしません。
画像データをポイっと放り込みさえすれば、いい感じの特徴をみつけてモデルをつくってくれます。
判別するためにピックアップした情報
先ほどの機会学習のときのようないろんな情報を可視化したり、判別にどれが使えそうか?という特徴も一切与えません。
モデル学習に利用するのは画像データのみです。
今回は犬・猫の画像を400枚ずつくらい準備したかったので、頑張って撮影しました。
・・・
・・・
なんてね。しょーもない、小ウソをついてしまいました。
今回は「CIFAR-10」という無料公開されているデータセットを利用させていただきました。データセットの中には犬・猫のほかに飛行機や鳥、鹿など6万枚のカラー写真が保存されており、ディープラーニング等で幅広く用されているものです。
さっそくみてみましょう。
まぁ、かわいい!
・・
・・
いや、その前にこ画質の粗さよ。もうドットじゃん。ファミコンのドラクエじゃん。
違うのもみてみましょうか。
いや、もうわからん。
猫っぽいですけど、いま、犬と猫の画像だよって言われてるからなんとなくわかるけど、何も言われずにこれ見せられたら「キノコかな」って言っちゃいます。
ちなみにこれは猫です。
なぜ言い切れるのかというと、CIFAR-10で提供されている画像1枚1枚にこれは犬だよ、猫だよという情報が付加されているからです。(←俗にいう正解ラベルというやつです)
少し脱線しましたが、CIFAR-10から犬と猫の画像を抽出して、学習させていきます。
実際に学習させてみよう
では、やっていきます。
見ての通り、ニューラルネットワークを何層にも重ねた、いわゆる、ディープラーニングという手法でモデルを学習させました。
何がどうなんだよ、というのは今回の説明対象外なので、詳しく知りたいという方はお声がけください。
学習させた結果
モデルを学習させた結果の精度はこんな感じになりました。
数値にすると、70%前後の正答率になるモデルです。
今回は精度は二の次ですので、ヨシとします。
作ったモデルに新たな画像を放り込み、その画像が犬・猫を予測させてみます。
粗くても、かわいい。
はい、モデルの予測結果と正解ラベルともdogですね。
えっ?True label(正解ラベル)、Predicted label(予測ラベル)を英語にしたんだって?
かっこつけたかったからです 笑
やったことを振り返ってみよう
ディープラーニングでは、画像をネットから広い、それをモデルにぶち込みました。(もちろん、正解ラベルも一緒に)
機械学習のときのように判別するための情報を人が特に選ぶこともなく、ただただ画像を放り込んで、自動的に特徴を抽出し、モデルを構築しています。
どうやって特徴を抽出しているのか?という疑問に次はブチ当たると思いますが、今回はそこまで言及すると混乱するので、また別の機会で書いていきたいと思います。
まとめ
いかがでしたでしょうか。
今回は、機械学習とディープラーニングの違いを明確に理解してらもらうために、ロジック自体の説明は割愛していますが、当初のもやもやは解消されましたでしょうか。
この記事で少しでも理解が進んだなら幸いです。
コメント