MIS.W 公式ブログ

早稲田大学公認、情報系創作サークル「早稲田大学経営情報学会」(MIS.W)の公式ブログです!

愛について【カウントダウンカレンダー2016冬13日目】

メリークリスマス。どうも、51代むさしんです。

所属はCG研究会とプログラミング研究会です。

他にも、ケモノ研究会としてケモノの良さを語ったりしてます。

ケモノは、いいぞ。

普段はこんな感じの絵を書いています。↓

ケモノの魅力を十二分に語りたいところですが、クリスマスイブなので愛について語ります。AIです。

難しい数学とかはとりあえず放っておいて概念的な話をゆるゆるふわふわしますのでご安心ください。

最近流行りの人工知能ですが、皆さんはどのようなものを想像しますか?

僕はこんな感じでした↓

ai_character

一般に世間で言われる人工知能というものは、AGI(汎用人工知能)のことを指します。これは人間と全く同じように何でも自分で覚え、考え、実行することができるものです。

しかし、現在広く使われている人工知能は、特定の問題解決に特化した「特化型人工知能」と呼ばれるものです。

人工知能とは、人間の脳が行っている知的な作業をコンピュータで模倣したソフトウェアシステム。具体的には、人間の使う自然言語を理解したり、論理的な推論を行ったり、経験から学習したりするコンピュータプログラムなどのことをいう。人工知能の応用例としては、専門家の問題解決技法を模倣するエキスパートシステムや、翻訳を自動的に行う機械翻訳システム、画像や音声の意味を理解する画像理解システム、音声理解システムなどがある。人工知能を記述するのに適したプログラミング言語としてLispPrologなどが知られている。 【出典】http://e-words.jp/w/人工知能.html

例えば、先日話題となったAlphaGoですが、これは「ゲームをクリアする」という課題を解決するために最適化されたものです。そのため、AlphaGoが突然某アイドルマ○ターの魅力に気づき、Amazonにアクセスし円盤を買い占めてしまう、ということはありえません。

ai_study_kikaigakusyu

もともと「人工知能」という考え方の原点は「機械学習」という統計の分野の一部から生まれました。この機械学習では、主に物事の境界線を機械に覚えさせること(分類問題)を目的としています。

機械学習とは、開発者が予めすべての動作を決めておく従来型のプログラムとは異なり、与えられた情報を元に学習し、自律的に法則やルールを見つけ出す手法やプログラムのことです。 【出典】https://clonos.jp/knowledge/detail09/

例えば、顔認識システムも、言い方を変えれば「顔とそうじゃない部分の境界線(輪郭)を指定せよ」という分類問題を解いてることになります。

しかし、AlphaGoなどの多くの人工知能が用いているのは、「深層学習」とよばれる手法です。いわゆるディープラーニングですね。名前がかっこいいですね。エモいです。

深層学習とは、機械学習の一種でニューラルネットと呼ばれる、主に生物の神経系の挙動を模して学習できるようにデザインされたものです。 【出典】https://clonos.jp/knowledge/detail09/

それでは、簡単なディープラーニングのプログラムを組んでみましょう。今回はよく例として挙げられる手書き文字認識をやってみたいと思います。

現代では、Pythonという言語を使って、数弱の私でも簡単にディープラーニングの学習プログラムが書けます。

現在の環境に入れないでうまいことやるには、

  1. Dockerを入れます。 →https://docs.docker.com/docker-for-mac/
  2. TensorflowのDockerコンテナをダウンロードして実行します。 →コマンドラインで「docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow」を実行
  3. 「The Jupyter Notebook is running at:」のあとに書いてあるアドレスにアクセス

こうすると、Jupyter Notebookというものが開きます。これは、TensorFlowというフレームワークを使うための便利なサービスです。

とりあえず指定のURLにアクセスすると、以下のようなページが出ると思います。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-12-24-3-03-12

右上のNewからPython 2をクリック。すると、ノートが新規作成されます。

あとは、以下のソースをコピペするだけ。

こんな感じのプログラム↓

実行するには、Shift+Enterを押してください。実行結果は挿入したコードの下にでます。

Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
100 times   accuracy: 40.7499998808 %
200 times   accuracy: 89.4800007343 %
300 times   accuracy: 90.3100013733 %
400 times   accuracy: 90.7400012016 %
500 times   accuracy: 90.3699994087 %
600 times   accuracy: 91.2500023842 %
700 times   accuracy: 91.2999987602 %
800 times   accuracy: 91.4900004864 %
900 times   accuracy: 91.8600022793 %
1000 times  accuracy: 91.9399976730 %

だいたい92%くらいの確率で0~9までの手書きの数字が認識できるようになりました。

GPUゴリゴリ積まなくてもある程度の学習は可能になっています。

更に、このコードにちょっと工夫を加えれば、48人同じ顔に見えるような某秋葉原発アイドルグループの全員の顔をコンピューターに識別させることができます。

筆者は全員同じ顔にしか見えないのでコンピューターとの格の違いを感じています。無念也。

 

いかがでしたでしょうか。ちょっと今のトレンドに足を突っ込めたという点ではかなりアドだと思います。

Tensorflowというライブラリは、基本的に環境に合わせて自動的に計算のスケーリングをしてくれるので、クソ低スペPCでもちゃんと動きます。そのため、スマホなどにも搭載可能です。活用の幅が一層広がりますね。

これを機会に、機械学習、始めて見てはいかがでしょうか。

 

P.S.

ケモノ研究会もよろしくお願いします。

ケモノは、いいぞ。

ケモノは…いいぞ。