しんさんのブログ

科学や技術のこと読書のことなど

現代思想12月号 人工知能特集を読みました

現代思想 2015年12月号 特集=人工知能 -ポスト・シンギュラリティ-

現代思想 2015年12月号 特集=人工知能 -ポスト・シンギュラリティ-

現代思想12月号び人工知能特集をお正月休みに読みました。
NIIの新井先生と小島先生の「東ロボくんから見えてきた、社会と人類の未来」という対談が面白かったです。
ちなみに東ロボくんというのは人工知能を使って東大入試が突破できるかというNIIのプロジェクトで、新井先生がリーダーになって数年前から実施されています。時々偏差値いくつを取ったというような報道で話題になることもあり、研究者だけでなく一般の人も知っている人が結構いると思います。
対談ではこの東ロボくんを題材にして、人工知能とはどういう物かそれがもっと発達すると社会に何が起きるかについて結構熱く語り合っています。
お二人のスタンスが違っていて、新井先生は人工知能に対して警鐘を鳴らす立場で小島先生はどちらかというと楽観的であるように思えました。
お二人が自分の立場から一歩も譲らずに論を戦わせているのは読んでいてひやひやもしましたが、人工知能というものが今こういう立場にあるのだなということを客観的にわからせてもくれました。
2人の論争の中で、人工知能が社会や経済にどういうインパクトを与えるか、という議論がありました。
今の失われた20年で疲弊し将来に対しても悲観的な論調が多い日本にる研究者と、景気が回復して今は将来に不安が少ないアメリカの研究者では人工知能に対する考え方も違うんじゃないかな、などど考えました。
人間の職業を奪ってしまうととるか、人工知能が人間の労働の肩代わりをして生産性をあげてくれると取るのか、人工知能の将来とは別に今おかれている社会によってその評価が変わってしまうように思えました。
この対談については、小島先生が自身のブログに書いておられます。
d.hatena.ne.jp
この対談の他にも、人工知能に関する興味深い記事が多く読み応えのある内容でした。

機械学習を勉強してみる:「ITエンジニアのための機械学習理論入門」: 1章を読んでみた結果データサイエンスが何でサイエンスというかが分かった

1章は導入なのでデータサイエンスと機械学習についての関係やそれぞれがどういう意味を持っているかを解説しています。
そもそも、何でデータサイエンスとかデータサイエンティストとか"サイエンス"という言葉を使うのかについて、以前から謎でした。
単にサイエンスとつければ信頼感があるからかな、などと思って深く考えていませんでしたが、この本ではその理由が明確に述べられていていました。
「科学」と名付けらているからには、科学の要件を満たさなければいけいないというと逆説的ですが、科学と名乗るからには何らかの仮説を立て、データからそのモデルを検証することが必要です。さらに、検証されたモデルを、一般化して未知の現象の説明、未来の予想を行うことができる必要があります。
単にデータを解析してデータに含まれる事実を抽出するだけなら、それでは科学とは呼べません。
仮説が反証できて、客観的である必要がありそれを論理的に言葉(数式)で説明できなければサイエンスにはならないのです。

1章ではさらに機械学習でも用いられるいくつかの手法が大まかに解説されていますが、これらはそれぞれ後の章でくわしく述べられています。
さらに、サンプルコードを実行するための解析ツールのPC上での環境設定の仕方が詳しく解説されています。
この分析ツールの準備の項の最初に、「本書で解説するアルゴリズムは当然のことながらプログラムのコードとして実装して、実行することが可能です」というくだりがあるのですが、素晴らしいです。このさりげない一文に著者の自信のようなものがにじみ出ています。
というのも、機械学習の解説や記事を読むとこの部分がすっぽり抜け落ちていたり、既存の機械学習ライブラリをブラックボックスとして使っているだけだったりします。
そういう解説をいくら読んでも、結局本質的な理解に至らないと感じていました。
本書は、まえがきに"機械学習の基礎となるアルゴリズムを根本から、ごまかさずに解説してある"と述べているようにきちんとコードに落として明確に解説してあります。

ところで、1章の最後の実行環境のセットアップは、本の中に含まなくてもWebもサポートページか何かで解説すればよかったのかなと思います。
この部分だけ、他に比べて不釣り合いに詳しすぎるしこういう内容はすぐに陳腐化しますから、本文になくてもよかったのになと思います。

機械学習を勉強してみる:「ITエンジニアのための機械学習理論入門」のサンプルコードを実行してみる

先日紹介した、「ITエンジニアのための機械学習理論入門」を使って機械学習を手を動かして勉強しています。
まずは、この本に載っているサンプルの実行を行ってみます。
出版社のページに、サンプルのダウンロードサイトへのリンクがありますので、そこからサンプルをダウンロードしました。gihyo.jp

まずは、02-square_error.pyを実行しようとしてソースをよく見るとPython2系のコードです。
私の環境はPython3ですので、さっそくAnacondaでPython2.7をインストールしました。
Python3用にコードを書き換えてもいいのですが、そこで時間を使うこともないのでさくっと2.7をインストールしました。
私はWindows上でConEmuというターミナルを使っていますので、そこからIPythonを立ち上げ
%run 02-square_error.py
で実行しました。
f:id:wshinya:20151202160022p:plain
上のような図が表示されましたが、
C:\Anaconda2\lib\site-packages\matplotlib\collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in t
he future will perform elementwise comparison
というようなwarningが表示されました。matplotlib関係なので、まあ無視してもよさそうです。

Processing3.01でOpenGLサンプルが動かないときの解決法

Processing3.0にバージョンアップ後、いくつかのサンプルが動かなくなっています。
多くは、先日書いたsetup関数の問題なのですが、OpenGLサンプルも動かなくなっていることに気づきました。wshinya.hatenablog.com

これは、vertex buffer objectの設定の仕方に変更があったためのようです。
以下の記事を読めば解決すると思います。github.com

ディープラーニングについてのもやもやしたもの

最近あちこちで機械学習とかディープラーニングという言葉をよく聞きます。
あたかも夢の手法のようにディープラーニングを使って認識率が上がりましたとか使われているのをあちこちで聞いて、そんなにすごい技術なのかという疑問とともに何がどうすごいのかという疑問がわいてきました。
ディープラーニングという言葉をよく使っている人に聞いても、意外と技術の本質についての答えは返ってこないことが多いです。
いろんなライブラリやツールが出回っていて、学習するデータさえ用意すればブラックボックスのように使うことができて、それなりに何か結果ががでるのでその段階でディープラーニングや機械学習というものが語られてしまっていることが原因のようです。
このように、魔法のキーワードのように使っているだけの人が多い中で以下のブログで紹介されている書籍では、私の感じているもやもやしたものを”はじめに”でズバリと語ってくださっています。enakai00.hatenablog.com
ブログを読んでいてふと気づいたのですが、この著者の方、遠い昔の学生時代にお会いたりお見かけしたことがある方です。(一方的に私が知っているだけです)
そうか、彼(と言っては失礼かもしれませんが)の書いた本ならごまかしも、あやふやなぼやかしもないだろうしきちんと技術を第1原理から説明してくれているだろうという信頼感もあり、さっそく購入しました。
多忙にかまけてまだ読めていませんが、ぼちぼちと読み進めていきたいと思います。

著者がslide shareにこの書籍に関するプレゼン資料をあげていますので、リンクしておきます。

www.slideshare.net

WindowsのターミナルをConEmuに変更 [2017年6月11日に編集]

Windows上のターミナルを以前はMinGW+minttyを使用していましたが、タブが使えるConEmuの方が便利で使いやすいと知ったので、乗り換えました。

MinGWでの開発環境の設定については以下のサイトを参考にしました。
PENGUINITIS - MinGW 64 bit 版 のセットアップ

設定が細かくできるようですが、とりあえず上のサイトで紹介されている設定を流用させていただきました。
起動も速く、軽くて快適です。

2016年8月16日追加情報です。
"MSYS2で快適なターミナル生活"というmsys2の紹介ページがありましたので、こちらも参考にするといいです。
qiita.com

2017年6月12日 リンク先がなくなっていたので削除し、minGWでの開発環境設定のページへのリンクを追加しました。

Processing3.0の正式版とOpenCV for Processingの導入

ついにProcessing3.0の正式版がリリースされましたので早速導入しました。
以前からのバージョンと同じで、インストーラーなどは必要なく解凍して実行ファイルを実行するだけです。
ただし、前から使っていた方は以前の環境設定ファイルを読み込んでくれます。

前にも書きましたがちょっとした実験やrapid prototypingにProcessingを使おうと思っていますので、私が今興味のある画像処理関係について簡単に触れるようにするためにOpenCVを追加で導入することにしました。
Processingの Tools -> Add toolでLibrariesやModes, Toolsなどが簡単にインストールできますが、Librariesの中にあるOpenCVはここからはインストールできなかったので(2015/10/3時点)手動でインストールしました。
やり方は以下のブログをみました。tkitao.hatenablog.com
ブログに書いてある通りに解凍して、ファイルをコピーするだけですので、簡単ですね。
導入したOpenCV for Processing のバージョンは0.5.2です。
さらにWEBカメラの映像をリアルタイム処理したいので、Videoライブラリーもインストールしました。
こちらは、Tools -> Add tool-> Librariesでvideoで検索して出てきた"GStreamer-based video library for Processing."をインストールしました。

さっそくOpneCVのサンプルを動かしてみます。
まずは、BackgroundSubtractionサンプルです。
このサンプルは、BackgroundSubtraction.pdeをダブルクリックしてProcessingを起動後、実行するとdataフォルダーの中にある動画street.movにフレーム間差分処理をした結果が表示されます。
OpenCVを使用しているのは、ソースコードは非常に短いですが処理の大部分がブラックボックスになってしまっています。

さらに、WEBカメラを使用しているサンプルを動かしてみます。
LiveCamTestというサンプルがそれっぽいので、起動するとWEBカメラからの映像が表示され、顔のエリアに緑色の枠が表示されます。

faces = opencv.detect();

の部分がおそらく顔認識なのでしょう。