知っていますか?AIや機械学習とは何かを

猫も杓子もAIな最近の世の中。AIとか人口知能って流行っていますよね。長年、業務システムでWebアプリを作ってきたけど、これからの世の中、今後が不安。機械学習とかやってみたいけど、難しすぎてワケが分からん。そんな風に思ったこと、ありませんか?

当ブログでは、長年Javaエンジニアとしてやってきたわたくしが、今更ながらに機械学習に挑戦してみて、学んだことなどをアップしていきたい思います。「AIや機械学習やってみたいけど難しすぎてなんだか分からん」なんて同じような方の、何かしらの参考にでもなりましたら、幸いです。

第一回目の今回は、そもそもAIとか機械学習って何なのかについて、自分なりに学んだことを、アップしてみたいと思います。

機械学習とは何なのか

まずは、機械学習からいってみたいと思います。機械学習というからには、そのものずばり、「機械」が「学習」するのです。ここでいう機械とは、いわゆる計算機というかコンピュータというか、WindowsとかMacとかLinuxとかの、あれです。以降、コンピュータで、表記を統一しようと思います(多分)。では、「学習」とは、一体何を学習するのでしょう?

比較として、まずは機械学習ではない、従来のシステムについて、簡単に図示してみたいと思います。

従来のシステム

f:id:tatsu_mk2:20190317144839p:plain
図1 従来のシステム

従来のシステムは、上記の通り、事前に人間がJavaなりなんなりのプログラミング言語で関数(プログラム)を作成しておき、そのプログラムに対して、何かしらの入力データを与えます。コンピュータは、与えられた関数と入力データに従い、計算して、計算結果を出力します。

別の言い方をすれば、人間が事前に設定した計算式に従って、答えを出すのが、従来のシステムと、言えるかと思います。

簡単な例で例えると・・・

  • 人間が「3」という入力値を用意する
  • 人間が、「入力値を3倍する」という関数を、プログラミングする
    • 数式で書くと、「y = 3x」という、1次関数ですね。
  • コンピュータが、「9」という計算結果を、出す。

一度プログラムを組んでしまえば、高速で、飽きたり疲れたり文句言ったりせず、ミスせず、処理し続けてくれるのが、コンピュータのいいところです。

でも、全て人間が事前に設定した計算式に従って計算しているので、あまり知能チックなところは、ありません。まさに、「機械的に」、計算しているだけですね。

機械学習なシステム

これが機械学習だと、こういうイメージになります*1

f:id:tatsu_mk2:20190317161521p:plain
図2 機械学習なシステム

結論から言うと、機械(コンピュータ)が学習するのは、関数です。より正確に、先ほどの例でいうと、「y = 3x」の、「3」の部分です。人間が事前に用意する部分は、以下です。

  • 求めるべき関数の形を、決める。
    • 先ほどの例の場合、「y = ?x」という、1次関数だと、決めることになります。
  • ?の計算方法

このあたり、個人的に、用語の理解がふにゃっとしているのですが・・・関数の形(y = ?x)がモデル、学習すべき「?」がパラメータ、?が求まった形(y = 3x)が学習済みモデル、? の計算方法がアルゴリズムと思っておけば、あたらずとも遠からずな、気がしています*2

ちょっぴり現実の例でいうと・・・例えば、自動的にエアコンをつけるシステムが、あったとします。従来のシステムだと、「25度以上になったら冷房をつける」「15度以下になったら暖房をつける」とか、事前に人間が設定する必要があります。

対して、機械学習なシステムだと、日々人間が何度以上になったら冷房をつけ、何度以下になったら暖房をつけるのかを、センサーなどを通して記録して・・・コンピュータが、何度になったら冷房をつける/暖房をつけるべきかを、学習していきます。

・・・なんだか、知能が備わったような、気がしてきませんか?

AIとは何なのか

機械学習が分かったところで(?)、AIにいってみたいと思います。AI = Artificial Intelligenceの略、日本語では一般的に人工知能と訳されます。「知能の明確な定義がないので、人工知能の定義なんてムリ」とか、身も蓋もないことをおっしゃる、えらい学者さんもいるらしいですが・・・

先ほども触れました通り、従来のシステムに比べると、機械学習なシステムは、なんだかちょっぴり知能が備わったような気がしてくる、代物では、あります。

しかし、「AI」と聞いて一般にイメージされる、いわゆるドラえもんとか、映画ターミネーターに出てくるスカイネットとかと比べると、程遠い代物でも、あります。

ここから考えるに、以下が言えると思います。

  1. 機械学習を使って、知能っぽいものを実現することは、できる
  2. 知能っぽいもの=AI/人工知能
  3. 現在の機械学習で実現できる知能っぽいものは、SFの世界に出てくるAIに比べると、程遠い

3番目のものを「強いAI」、1番目のものを「弱いAI」とか言うそうです。つまり、機械学習とAIの関係は、以下になるかと思います。

  • 現在の機械学習技術を使って、弱いAIを作ることならば、できる
  • つまり、機械学習は、AIを作るための技術(の、一つ)
  • ただし、機械学習は、AIを作るためだけの技術では、ない(?)

・・・ような気が、するのですが・・・分かりやすさからかインパクトからかセールス上の理由からか、機械学習≒AI=とりあえずAIと言っとけ的な、雰囲気も、感じたりしたりしなかったり。

個人的には、AIというと誤解を招きそうなので、「機械学習」と言う方が、好きです。

まとめ

ということで、まとめると、以下になるかと、思います。

  • 機械学習とは、コンピュータが、関数を学習する、ものである。
  • これにより、「ちょっとした知能があるっぽい」と人間が感じなくもない程度のものは、作れる。
  • つまり、機械学習により、AIっぽいものは、作れる。

機械学習でやりたいこと

というわけで、機械学習を勉強して、個人的にやりたいことですが・・・結論から言うと、データサイエンスっぽいことに、挑戦できれば、なんて思っています。

機械学習で流行っていることというと、画像認識だったり、Siriみたいな音声認識・文字認識だったり、AlphaGoみたいな、ボードゲームで人間のプロに勝ったりだったりしますが・・・

私みたいな今まで業務システムをやってきた日本のSIerさんからすると、相対しているお客さん含め、活用方法にピンとこない方も、多いような気がします。

それよりは、データ分析系とでも申しましょうか。融資審査の合否の判断を学習させたりとか、需要予測をしたりとか、そういうのから始めた方が、ピンとくるような、気がしています。

そんなわけで、これから、データ分析っぽいものを中心に、機械学習を勉強していきたいと思います。

参考資料

プログラマのための ディープラーニングのしくみがわかる数学入門

プログラマのための ディープラーニングのしくみがわかる数学入門

*1:教師なし機械学習だとまた微妙にイメージが違うと思いますが、「関数を学習する」という点については、同様かと思います。

*2:モデルとアルゴリズムが、ごっちゃになることも、あるような、ないような・・・