TIM Labs

2016年7月アーカイブ

今年3月、グーグル・ディープマインドの人工知能囲碁プログラムアルファ碁と、世界最強の囲碁棋士イ セドルの対戦が行われた。全5局の対戦で、賞金として百万ドルがかかっていた。
試合前の予想では、イセドルが勝つだろうとの予測が多かったが、結果はアルファ碁の4勝1敗に終わった。

現在のゲームの中では最も難しく、まだ10年くらいは人工知能はトップ棋士には勝てないだろうと言われていた。
それが、多くの人の予想に反して、アルファ碁の圧勝になってしまった。
これを契機に、知的ゲームだけでなく、人間のあらゆる知的な作業が人工知能に取って代わられるのではないかという危機感が急に沸いてきた、あるいは現実味を持ってきたと思った人が激増し、人工知能について考えざるをえない風潮になったと思う。

さて、これだけ有名になってしまった歴史的な試合だったので、インターネット上に多数の情報が存在する。
また、試合のビデオは5試合ともYouTubeに存在する。
Match 1 - Google DeepMind Challenge Match: Lee Sedol vs AlphaGo (第2局以降省略)alha-go (279x400).jpg

技術的なことも含めて、ネット上に大量に情報はあり、さらにNatureに記事も載り、さらに様々なところで取り上げられた。
そんな中、7月28日に、東京創元社から、『アルファ碁 vs イ セドル』という本試合の解説書の翻訳が出た。
帯には人工知能学会の前会長の松原氏の言葉「人工知能ではなく、囲碁棋士を内心応援していました」とあるが、この本、人工知能の解説書ではない。
多数の棋譜があり、アルファ碁の手も、イセドルの手も、さらには解説者の考えた変化などもかなり細かく解説されている。また、プロ棋士たちが、この試合の進行をどのように見ていたかもいろいろ書かれていて興味深い。

対局のレベルは高く、アルファ碁の打った手は良くない手と思っていたら、手が進むに従い非常に良い手だったということが何度も出てくる。もはやプロ棋士も判断に困る程度のレベルになっていることが分かる。

でも、アルファ碁の打った手が全てすばらしいかったかというと、そうではない。私にさえ良くないと分かるような手もときには打つようだ。実際、バグにより評価を間違えて変なところに打ってしまったこともあるようだ。
つまり、まだアルファ碁は発展の途中で、まだ何段階か強くなりそうな印象を受けた。

私も、2020年頃までは、人工知能が勝つのはないだろうと思っていたのだが、グーグル・ディープマインドは膨大なリソースをつぎ込んで、数年の時間を乗り越えた感じである。毎年毎年かなりのペースでCPUやGPUの性能、とくにコア数など並列処理能力の向上が著しいので、そのあたりをお金で数年縮めることは普通にあるだろう。

それに、人工知能は疲れない。対戦相手が人間だと練習が限られるが、対戦相手もコンピュータにしてしまえば、24時間連続で強化学習が可能になる。こうして、一度枠組みができてしまうと、一気に強くする手立ては存在する。

さて、ちょっとハード的な話を書いておこうと思う。情報は色々あるのだが、試合前に出されたアルファ碁の紹介記事
AlphaGo and AI Progress  2/28/2016 には、アルファ碁の強さと、ハードウェア資源についてのグラフなどもあり興味深い。
この記事によると、アルファ碁が非常に手強い相手だということだが、どこまで信じればよいのか不明であった。
アルファ碁は色々なバージョンがあるようで、最大スケールの AlphaGo Distributed では、280GPU、1920CPUで動くようだ。

この試合以降、囲碁ソフトに深層学習を入れたものが増え、ますます強くなったようだ。
UEC杯コンピュータ囲碁大会は毎年電気通信大学で行われており、優勝プログラムが何子か置いてプロに指導碁を打ってもらうという風になっている。来年春の第10回記念大会では大きな変化が起きるかも知れない。


英国の子供(7年生)全員に無償配布さているというBBC提供のmicro:bitがなぜかやってきた。
次に写真のように、しっかりBBCのロゴが印刷されている。その他のチップなどの説明も分かりやすく印刷されていて、とても教育的だ。向こうではBBCが無償配布するんだから、日本ではNHKが子供に無償配布し、連動した番組があったりして欲しいところだ。
左側がCPUで、今話題のARMのチップである。

DSCF4791 (400x300).jpg
上の写真は裏面で、下が表面で、小さなLEDが5x5個並んでいる。そして、両側にボタンがついている。
拡張ボードに挿したりしなければ、基本の入出力はこれだけである。
他に、加速度センサーと磁気センサーがついている。

DSCF4799 (400x300).jpg
詳しいことは、micro:bitのホームページが用意されているので、詳細はそちらで調べて欲しい。
※うまく表示できないときは、新しいタブまたは新しいウィンドウで開いてください。

さて、プログラム開発のほうだが、ホームページに行くと、Create Code があり、4つのプログラミング言語が用意されていて、これらは、全てブラウザ上で動作するので、OSについては気にする必要がないので、Ubuntu/Linuxで試した。

  1. JavaScript
  2. Block Editor
  3. Touch Develop
  4. Python

Block Editor はScratchみたいな感じで、それをもうちょっと普通のエディタっぽくした感じのがTouch Developである。上の3つは、用意されている命令などをツンツンするこでプログラミングをしていく。

Pythonは、普通のエディタを使ってコーディングする感じである。なので、とりあえず、Pythonを使ってみた。
Pythonといっても、標準のPythonではなく、MicroPythonである。当然、あれこれimportして使うなどできない(はず)。microbitを動かすためには、とりあえず、最初に、 import microbit と書き、その後、ごちゃごちゃ書けば良いらしい。

ということで、ちょっとプログラムを作って走らそうとしたが、他のエディタと違って、ブラウザ上ではシミュレートできない。プログラムをパソコンにダウンロード(.hexファイル)し、micro:bitをUSBでパソコンにつないで、.hexファイルをmicro:bitに投げ込むと動き出す。

しかし、当然プログラムをミスして動かないことがある。すると、micro:bit の LEDに想定外のメッセージらしきものが流れるのだ。よく見ると、英語でエラーメッセージが流れていることが分かり、行番号が含まれていることが分かる。
なんと、シンタックスエラーがあっても、エディタ上では何も出ず、micro:bit上で走り始めたときにやっと分かる。したがって、Pythonでプログラミングするときは、エラーフリーで書けるプログラミング能力が要求される。あるいは、英語で流れるエラーメッセージをすばやく読み取れる動体視力と英語力が要求される。

なぜこんなことになっているのかというと、Pythonはコンパイルされず、テキストのままmicro:bitに転送されるのだそうだ。そのとき、つくったPythonのプログラムだけでなく、MicroPythonのインタープリタも転送されるので、.hexファイルが小さなプログラムであるにもかかわらず600キロバイトと巨大な理由らしい。これは、近いうちにmicro:bitの互換機を出すスイッチサイエンスビデオからの情報だ。

ドキュメントはかなりしっかり用意されている(もちろん英語)ので、あまりプログラミングには困らないと思う。とても困るのは、5x5のLEDだけで何か面白いことをしようとすると、プログラミングよりもはるかに頭を使わないといけない。これこそ頭の訓練になりそうだ。





現在、機械学習や深層学習に関する本が非常にたくさん出ている。
どうせ出ているのなら、世界で一番良さそうな教科書的な本はないものかちょっと考えてみた。
今、世界の有名大学が、これらの授業を公開していて、誰でも好きなだけ勉強できる状況にある。
人工知能系の講義ビデオなどについては、別の機会に紹介する。

そんな情報の渦中をさまよっていたら、MIT Press の Deep Learning の本のサイトが見つかった。

著者は、Ian Goodfellow(モントリオール大->Google->OpenAI), Yoshua Bengio(モントリオール大) and Aaron Courville(モントリオール大)ということで、この分野ではモントリオール大、トロント大などカナダが有力である。

この本のサイト、とてもショボイ感じなのだけれど、MIT Press がそんないい加減な本を出すとも思えないと思ってみていくと、800ページもある本になっていて、ほとんど仕上がっているように見える。
Deep Learingで必要となる線型代数、統計学についての説明もあり、学部、院の両方を対象としたDeep Learningの入門書のようだ。

既に、amazonでも予告がされており、それによると、2016年12月9日に発売である。
ハードカバーで$80とある。日本で入手すると、約1万円の本だろう。
これだけ書きあがっていれば、もっと早く出せると思うのだが、表紙などはこれから作るということだろうか。

でも、この本、ネットで読むと、全部無料で読めてしまう。
それも、紙の本が出る前に読めてしまう。
日本語訳が出るかも知れないが、それは早くても2017年であろう。

最後に一言、肝心なことを書いておこうと思う。
この本、Deep Learningの入門書であるのだが、プログラムは全然出てこない。
あくまでも理論的な基礎をきちんと学ぶための本である。
色々プログラムを弄ろうと思っているタイプの人の期待には応えない。




Dockerコンテナでsshdを動かしてはいけない

この記事ではDockerコンテナにAnsibleで接続してプロビジョニングする方法を説明します。

その前に、Dockerコンテナでsshdを動かしてAnsibleで接続しているみなさん、Ansible 2.0からDocker Connection Pluginが導入されてsshは必要なくなったので今すぐsshdを停止してください。

Dockerコンテナでsshdを動かしてはいけない理由は以下を参照してください。

Dockerコンテナ内でsshdを実行してはいけない理由

今回のファイル一式をGitHubに置きました

https://github.com/eyasuyuki/docker-ansible

AnsibleとDockerのインストール

この記事は以下の環境で試しています。

  • OS X 10.11.5
  • Ansible 2.1
  • Docker 1.11.2
  • Docker Machine 0.7.0
  • Docker Compose 1.7.1
  • VirtualBox 5.1.0

これらがインストールされていない場合は以下を実行してインストールしてください。

brew install ansible docker docker-machine docker-compose
brew cask install virtualbox
人工知能ブームは、ますます加速している感じである。
その中で、Pythonというプログラミング言語が使われていることが多いというのは既に述べた。

それならば、Pythonを使いながら人工知能を学習できるような本がないかと考えるのが普通であろう。
人工知能といっても幅がある、何をやりたいかで方向性が違うのだが、最近巷でも流行っている用語は、機械学習と深層学習が多いように思う。
PythonMachineLearning (236x300).jpg
そういうこともあってか、6月末に出版されたばかりの『Python機械学習プログラミング』が、発売以来売れ続けているようで、amazonでは、人工知能分野でトップはもちろんのこと、科学・テクノロジー分野でトップ争いをしている。Amazon全体で100位台をさまよっていて、これは書店の入り口に大量に平積みされている本と同じくらいである。つまり、多くの日本人がPythonでの機械学習プログラミングを始めたと考えてもよい。(ありえないか)

本書は、ミシガン州立大学の院生のSebastian Raschkaが2015年9月に出版したものの翻訳である。なので、Python3に準拠になっていて、Pythonのバージョンの違いに悩まされることがなく、非常に助かっている。

本書の中のコード、図、テキスト入力、テキスト出力など、つまり文章での説明部分以外はThe "Python Machine Learning" book code repository and info resource(rasbt/python-machine-learning-book)の題名でGitHubで公開されている。
そのため、本書を開き、ブラウザでGitHubのcodeをコピペしながらどんどん動作確認できるので、キーボードから延々とコードを打ち込む手間が不要だ。(便利すぎる!)

本は、400ページあまりで、日本語版には若干の付録が追加されている。全体は、簡単な理論的な説明と、それに基づいた実行例を示しながら進むのだが、たった400ページによく収めたものだと思う。

本書を読むには、若干の前提知識、経験が必要である。
  • Pythonおよびいくつかのパッケージ(Numpy,SciPy,matplotlibなど)。
  • 数学。大学初年級程度の常識的知識は欲しい。
  • パソコンを普通に使えること。

Pythonがはじめての人は、何か別の本で勉強してから本書を読み始めるのが無難だと思う。
さらに、パッケージについても、ある程度慣れてから本書に手をつけないと、厳しいと思う。

理論をしっか説明している本ではないので、数学については何も恐れる必要は無いと思う。本書は、あくまでも、機械学習について、広く、Pythonのコード、既に用意されているパッケージなどを利用して、機械学習を体験してみるような感じになっている。

と書いてきたが、まだ130ページあまりしか読んでいないので、以上は速報であり、また書くかもしれない。

最近は、猫も杓子も「人工知能」と「小学生からプログラミング」を話題にするようだ。
それで、「子供+人工知能」について考えてみた。子供向けプログラミング言語としては、MITのメディアラボが作って提供しているScratchが非常に有名であるので、これで何かAI的なものを作ってみようというのが普通の考えだろう。

Scratchのサイトに行くと、いろいろ公開されているアプリを見ることができる。簡単なゲームなどが多数あり、そのなかにはSUDOKU(ナンプレ、数独はニコリの®)というパズルを解くものも多数ある。ナンプレを解くくらいは簡単に動くだろうと思われるが、それではAIというには情けない。もっと頑張ったものを作ってみないとダメだ。

ということで、実は3年前に、ナンプレの問題を自動生成するプログラムを組んでみた。いや、正しくは、インターンシップに来た学生に作ってもらい、Scratchの評価をしたのだった。

Scratch-sudoku.jpg
Scratchで子供だましのプログラムを作って、これで小学生がプログラムを学習だけではいけないのだ。
将来のプログラミングは、Scrachの遣り方が主流になるかも知れないではないか。
このようにつまんでくっつける遣り方だと、文法エラーになる場合は、そもそもくっつかないので、文法エラーになるコードが作れない。

実際の動きをぜひ確認してみよう。http://scratch.mit.edu/projects/25661093/
この中にある旗をクリックすると、問題を自動生成し始める。 数字の個数(ヒント数)は25個に固定。でも、配置は、90度回転対称の配置を自動的に決めて、問題を作り始める。

旗を押すと盤面の上のバーが進んでいくが、右端まで到達しそうになっても消えてしまって、左端からやり直しに なることがある。これは、自動生成に失敗したことを示しているようだ。

生成時間は、運と、コンピュータの性能に依存するが、数分以内でできるはず。幸運な場合には1分以内。
Scratchはとても遅い言語で、普通にCなどで組むのに比べれば、数百倍遅くなってしまうが、これでも、ナンプレ雑誌、ナンプレ問題集に載っている普通の問題程度なら楽々できることが確認できた。

実際に自動生成された問題を解いてみよう。 ヒント数が25個だが、十分に易しい問題が出来る。 これは、自動生成から呼び出すナンプレソルバー(問題を解くプログラム)に組み込まれている手筋が、基本的なものだけになっているためだ。 インターンシップ期間が短いこともあって、手筋は基本的なものだけになった。

以上が、インターンシップの前半(1週間)で行われたのだった。


このアーカイブについて

このページには、2016年7月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2016年6月です。

次のアーカイブは2016年8月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。