人工知能は Deep Learning によって成されるのか?
最近は人工知能分野の話題に事欠かないので、IT系に詳しくない人でも、Deep Learning がどうとか、人工知能がどうとかという話題を耳にすることが多いと思います。
猫も杓子も Deep Learning な世の中ですが、そもそも人工知能とか Deep Learning ってなんなんだっけ? という疑問に答えられる人は多くないはずです。
今回は、広く浅く、人工知能と Deep Learning について書きます (この記事をご覧になればわかるように、人工知能 = Deep Learning では決して無いのですが、両者はよく並んで紹介されるので、ここでも同列に書いています)。
最初に結論
Deep Learning は(真の)人工知能ではない。なんでもかんでも人工知能って呼ばない。
「Deep Learning」、「人工知能」ともにバズワード*1になりつつあるので気をつけよう。
- 作者: 五木田和也,青木健太郎
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/27
- メディア: 単行本
- この商品を含むブログを見る
C++ポケットリファレンスを著者の方から頂いたのでレビュー
「C++ポケットリファレンス」を著者の方から頂いた。
レビューを書く約束だったのだがずいぶん長い間放置してしまった。申し訳ない。
- 作者: 高橋晶,安藤敏彦,一戸優介,楠田真矢,道化師,湯朝剛介
- 出版社/メーカー: 技術評論社
- 発売日: 2013/05/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (12件) を見る
はじめに
私は普段あまりC++は使わないのだが、たとえばOpenCVを使うときなどはC++を使っている(Python版はサポートされていない機能があったりするので使っていない)。
ところが、あまりC++のノウハウがないので実際はかなりCに近い書き方で使っている。
絶対もっといいやり方があるんだろうなとは思いつつ、惰性で適当に使っていたところでこの本を頂いたので、ポケットリファレンスとはあるもののとりあえず先頭から読み始めることにした。
ちなみにテレビの取材を受けた時にも私の机の上にバッチリ写っている。
内容について
表紙にも「逆引きだから困ったときにササッとわかります」と書いてあるが、実は2章までは言語仕様の紹介で、C++をまったく触ったことがない人でも十分読める粒度での解説がなされている。変数や配列といったレベルから扱っているので、他の言語をある程度理解している人であればC++の入門書としても使えるものになっている(おまけにC++11の言及もある。そう、C++11に対応しているのだ)。
入門書の場合、豊富なカラーイラストがないとダメだと言う人には少々つらいかもしれない。私は独習CでC言語を学んだクチなのでむしろ読み進めやすいと感じた。
3章は例外、4章は文字列なので実質1/4くらいは入門書として使えるような形で、残りが逆引きリファレンスといった形になっている。
個人的には6章「ユーティリティ」あたりが一番有益で、たとえば乱数を生成するときには random() が信用できなかったので、メルセンヌツイスタのライブラリ http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html を使っていたのだが、実はC++11であれば std::mt19937 というそのままの乱数生成ライブラリが存在する(古き良き線形合同法やその他のアルゴリズムも利用できる)。
さらに便利なことに分布を指定することもでき、以前は自力で実装していた正規分布も `normal_distribution` を使えば極めて簡単に生成可能であることを知った。
たとえば1から100までの乱数を一様分布で生成する場合は以下のように書ける(p290から改変して引用)。
std::mt19937 engine ; std::uniform_int_distribution<int> dist(1, 100) ; std::cout << dist(engine) << std::endl ;
これはかなり便利だ。
複素数の扱いや数学関数についても、一覧にして概要をまとめてくれているので、ポケットリファレンスの名に恥じない、困った時にさっと見られるようなものに仕上がっている。
その他の点
あとはおまけとして巻末にC++を使う上で便利なサードパーティのライブラリが色々紹介されており、「とりあえず王道のものを」と考えている場合にはここを見るだけで十分かと思う。たとえば Google Test や Eigen や Qt などの著名なライブラリが紹介されている(ごく簡単な紹介だけでサンプルコードなどはない)。
さいごに
対象としては、ある程度プログラミングはできて、C++も書いたことはあるが詳しいことはわからないまま非効率なコードを書き続けてるような、つまり私のようなタイプの人間にはぴったりで、逆にまったくプログラミングをしたことがない人には少々難しすぎるので、心当たりのある人であればぜひ手元に置いておくと良いかもしれない。
- 作者: 高橋晶,安藤敏彦,一戸優介,楠田真矢,道化師,湯朝剛介
- 出版社/メーカー: 技術評論社
- 発売日: 2013/05/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (12件) を見る
なぜドレスの色の錯覚はおきたか?-色の恒常性-
ドレスの写真って?
インターネットで見る人によって二通りの色に見えるドレスの画像が話題になっていました。結論からいえばこのドレスは青と黒なのですが、「青と黒に見える」派と「白と金に見える」派に分かれるのです。あなたはどちらに見えますか?
引用元: http://swiked.tumblr.com/image/139988249090
「ディスプレイが違うから」といった説明も見受けられますが、同じディスプレイを見て意見が割れている方もいることから、影響はあるにしても主要因ではなさそうです。
また、「年をとると網膜の細胞が衰えて云々」という意見もありますが、老若男女はあまり関係なく青黒派と白金派がいるので、こちらの影響も少なさそうです*1。
それではこの理由について解説してみます。間違えてたら教えてください。
*1:ただし心的状態が知覚に影響を与えることはあります。たとえば、うつ傾向のある患者はコントラストを低めに感じている可能性が示唆されています。 Bubl E, Kern E, Ebert D, Bach M, Tebartz van Elst L (2010) Seeing gray when feeling blue? Depression can be measured in the eye of the diseased. Biol. Psychiatry 68: 205–208. doi: 10.1016/j.biopsych.2010.02.009
丼丸と海鮮丼、その歴史
これは 丼丸 Advent Calendar 2014 - Adventar の記事です。
丼丸の海鮮丼はとても美味しい。ドクターストップをかけられる人間がいるほどであり、一種の麻薬といっていいほどの魅力がある。
もちろん、この丼丸の海鮮丼が誕生するまでには紆余曲折があり、簡単にポンと登場したものではない。海鮮丼が生まれるまでには長いストーリーがあるのだ。
そこで今回は丼丸の海鮮丼がこの世に誕生するまでの話について簡単ではあるが紹介していきたいと思う。
137億年前 宇宙誕生
宇宙ができた。丼丸や海鮮丼の土台はこの頃には出来上がっていたと言える。
因果論的決定論に従うのであれば、この瞬間に海鮮丼やその構成要素である酢飯やマグロやイカ、そして丼丸の誕生は約束されていたのである。
ただしまだ4つの相互作用が分かれていないため、将来海鮮丼の元になるであろう原子すら存在していない。
宇宙誕生から0.0000000000001秒後頃 電弱相互作用と強い相互作用と重力相互作用が分離する
4つの相互作用が分かれ始めて、ヒッグス粒子やウィークボソンが誕生した。
これで海鮮丼を構成する分子を構成できるようになった。ただしまだ宇宙が約1
穣度(=1000兆×10兆度)くらいあるので原子は存在しない。
宇宙誕生から38万年後 原子ができる
宇宙の温度が下がってきたため、電子と原子核が結合して原子ができるようになった。
ただしまだ宇宙の温度は3000度くらいあるので海鮮丼をつくろうとしても一瞬で炭になると思われる。
129億年前 天の川銀河ができる
海鮮丼を作るためには魚介類が不可欠であり、そのためには生命が生まれなければならず、さらにそのためにアミノ酸類が必要である。ところが宇宙には水素しかないため、炭素や酸素、窒素、鉄などの元素がまだ存在しない。
そのため主に水素が集まって、海鮮丼の原料を生成するために恒星を作り、核融合を開始しはじめた。
我々は普段意識していないが、海鮮丼を生むためには莫大なエネルギーが必要なのだ。
46億年前 太陽が形成され始める
恵みの太陽。海鮮丼を作るための主なエネルギーの供給源はこの太陽である。
炭素や窒素は恒星の核で作られることを考えると、海鮮丼を食べることは星屑を食べることと同じなんだ、きっと。ロマンチックな食べ物である。
45億年前 地球ができる
光があたってるだけの岩作るのに1億年とかずいぶんのんびりしている。
同時に月もできた。月ができなかったら潮の干満がなかったので地球の生態系、ひいては海鮮丼の姿も変わっていたであろう。
27億年前 地球に磁気圏が形成される
地球の核が強い磁気を出すようになり、太陽風を遮るようになった。
まだ紫外線はかなりたくさん降り注いでいるものの、これによって将来の海鮮丼の具を陽子や電子から守ることができるようになった。言うなれば海鮮丼の蓋のようなものである。
海鮮丼のためにこの宇宙の物理法則がうまく働いているといえる。
9億年前 有性生殖が可能に
これによって多様な進化が可能になった。
海鮮丼の具が豊富なのも有性生殖による効率的な進化を促せるようになったためである。
これも海鮮丼の歴史におけるブレークスルーのひとつといって良いだろう。
ただしこいつら(多細胞生物)もまだ食べられないし、おそらく美味しくない。万が一食中毒でも起こったら事である。
なお、私が好きなネタはエビとアジである。
5億年前 いろいろできた(カンブリア紀)
詳細は省くがいろんな生き物が登場した(カンブリア爆発)。
まだサンゴとか三葉虫とか藻とかまずそうなのしかないが、脊椎動物であるミロクンミンギアというキモいヒルみたいな奴が誕生。一応コイツが最初の魚類であるが海鮮丼の具には不適である。彩りも最悪であろう。
4億年前 まともな魚類登場(シルル紀)
この頃昆虫も出現したらしいが海鮮丼の具になりえないため省略する。
動物は陸に上がっていないが、ウロコのある魚類なども誕生したので下地は揃った。
ただし稲はまだ存在していないので酢飯が作れないしそもそも丼丸も存在していない。
2億2500万年前 哺乳類登場(三畳紀)
海鮮丼そのものの本筋からは外れるかもしれないが、この初期の哺乳類が進化してヒトとなり、海鮮丼や丼丸を作ったことを考えると歴史上重要なイベントである。
ジュラ紀や白亜紀の頃は恐竜が闊歩していたため海鮮丼作成にはリスクが大きすぎ、この後しばらくは海鮮丼開発の歴史は停滞する。
6400万年前 恐竜が絶滅(白亜紀)
我が物顔で陸海空を制覇していた恐竜がいなくなり、残った哺乳類と魚類は海鮮丼開発に邁進することになる。
もちろん哺乳類と魚類もただ指をくわえていただけではなく、順当に進化し、いつかくる海鮮丼チャンスを今か今かと待っていたのである。
180万年前 原人誕生
ようやく直立歩行できるようになった。手が使えないと海鮮丼が作れないため、二足歩行は海鮮丼にとっても重要なファクタである。
50万年前頃には火を使えるようになっているが、海鮮丼は火を使わなくても作れるのであまり重要ではない。
30万年前 ホモ・サピエンス誕生
魚類が誕生してから時間がかかりすぎである。
この頃には稲や山葵も自生しているはずなので、これで海鮮丼を作るためのピースはすべて揃ったと思われる。
1万年前 稲作開始
気づくのが遅すぎる。29万年間なにしてたんだ。私が面接官だったら確実に落とすレベルの空白期間の長さである。
7000年前 酢、開発
バビロニアのあたりで開発された。
地味だが海鮮丼を語る上で極めて重要な存在であるが、まだ人類は海鮮丼の可能性に気づいていない。
300年頃 酢が日本に伝わる
この頃はまだ酢漬け程度にしか使われていない。酢飯を開発した人は偉大である。
685年頃 わさび発見
なぜこんなものを食べようと思ったのか理解に苦しむが、これがないと海鮮丼の魅力は落ちてしまう。それにしても紀元後から急速に色々なものが出揃ってきており、収穫加速の法則を感じられずに入られない。海鮮丼に関するムーアの法則が存在しているのだろうか。
700年頃 醤油発明
諸説あるが、この頃に醤油の原型になるものが誕生している。ただし、今で言う醤油が日本に浸透したのは1500年ころである。
1709年 割り箸発明
あの品質の悪い割り箸も丼丸の海鮮丼を構成する一つの重要な要素である。
なお私は会社に常備されている竹箸を利用している。
1820年頃 寿司、海鮮丼発明
やっときた。今まで何してたんだ、137億年もかけるな。
1835年 プラスチックの発明
丼丸のポリスチレン製の容器を作るために不可欠な技術である。寿司とプラスチックの発明時期が15年しか変わらないのに驚く。
プラスチックの発明が早いのか寿司の発明が遅いのかよくわからない。
1979年8月10日 笹舟1号店(株式会社ササフネ)誕生
めでたい。末永く頑張って欲しい。
ただしこの時点では寿司店であって海鮮丼は作っていないし丼丸も存在しない。
1987年4月4日 筆者誕生
この頃には海鮮丼という魅惑の存在を知らなかった。そのほうがよかったかもしれない。
2007年 丼丸1号店誕生
とうとう我らの丼丸が登場。
2012年 丼丸と出会う
会社の社長が病的なまでに勧めてくるため食べたところ非常に美味しくコスパもよいためハマる。
なお社長は海鮮丼の食べ過ぎで医師から魚介類を控えるように警告されている模様。
「なぜなにもないのではなく、なにかがあるのか」という哲学の問題があるが、以上のストーリーを鑑みると、その答えのひとつは「丼丸、そして海鮮丼を生み出すため」といっても過言ではない。
宇宙があって海鮮丼があるのではなく、海鮮丼があるがゆえに宇宙が存在するのかもしれない。
一次視覚野の概要
masawada Advent Calendar 2013 の 12/17 の記事です。
後頭部について書けばよいようなので私は大脳新皮質のうちでも比較的研究が進んでいる一次視覚野について書きます。
一次視覚野について
後頭部といえば、そう、視覚野 (Visual cortex) です。
後頭部には、ブロードマンの脳地図における17野、すなわち一時視覚野(V1)や、そこと接続している V2(18野), V3(19野) などが存在します。
低次視覚野は視覚と密接に結びついていることから実験しやすく、ネコやサルの脳を用いてさまざまな研究がなされています。
構造
光が目に入ると、その信号は視床にある網膜神経節細胞から視神経を通って外側膝状体(LGN) に投射されます。
LGNについては後頭部にないので詳しい説明は省きますが、V1からも同様にLGNへの入力があり、視覚的注意やサッカードなどを制御していると考えられています。
V1は網膜の部位局在を反映していて、たとえば網膜内で隣接している部位からの入力は、V1内でも隣接しています。
これは非常に正確に配置されており、網膜部分もきちんとマップされています。
この構造はヒトに限らず、V1をもつ全ての動物に共通しているため、視覚進化の比較的早い段階で獲得されたものと考えられています。
(Livingstone and Hubel, J. Neurosci. 4, 309-356, 1984)
上の図がV1の概要です。 R と L というのは左右どちらの網膜からの信号を投射しているのかを表しています。
図の右のほうにある、1とか4Aとか書いてある部分(縦方向の構造)は大脳新皮質に共通する6層構造を表現しており、V1への入力は主に第4層から入ってきます。
役割
V1の重要な役割は、エッジの傾きの検出を行うことです。
大脳新皮質は特徴的なカラム構造(柱状配列 columnar organization)をしていますが、それぞれのカラムが別々の角度のエッジに対して強く反応します。
この発見によって、神経生理学は大きく進歩し、その業績が評価され発見者の Torsten Nils Wiesel と David Hunter Hubel は 1981 年にノーベル生理学・医学賞を受賞しました。
(Hubel & Wiesel, J. Physiol. 195, 215,-243, 1968)
柱状配列の構造は後天的に獲得されるもので、たとえば Blackmore と Cooper による実験では、子猫に縦縞模様のみを見せて育てると、横縞の見えないネコになることがわかっています。
Self Organized Maps
また、 Kohonen はこれをヒントにして教師なしクラスタリングである Self Organized Maps を考案しています。
SOM では様々な多次元ベクトルを入力するとそれをもとの空間の位相をなるべく保ったまま低次元空間に写像することができ、実際に様々なエッジを与えるとV1野のようなマッピングができることを示しています。
その他の役割
上記では、主に網膜からの情報を受取ると書きましたが、
An Error Occurred Setting Your User Cookie
によると、目隠しした状態で手で物を触ってどんな形をしているか探ろうとすると、
V1 を含む腹側皮質視覚路が活性化することがわかったそうです。
腹側皮質視覚路というのは、主に目で見たものが何か判定するところで、 What 経路と呼ばれることもあります。
面白いですね。
おわりに
選択的注意とか、高次視覚野からのフィードバック入力とか、他にも書きたいことが色々あるのですが時間が無いのでこのあたりで。
Random Forest とその派生アルゴリズム
はじめに
こんにちは。 Machine Learning Advent Calendar 2013、 12月4日担当のkazoo04です。
最近引っ越しをしまして、家ではインターネットが使えないつらい生活を送っています。
今日は最近気になってるアルゴリズムである Random Forest や、その派生アルゴリズムについて紹介したいと思います。
Random Forest はその使いやすさや性能の高さ、 Kinect による身体部位推定などで利用されていることから近年注目されており、この記事をご覧の方もよくご存知かと思います。
社内でも RF を便利に扱えたり、高速に計算したり、AWS で大量のデータを扱ったりするミドルウェアやライブラリを作ったりしています。
最近はさらに色々な応用例が発表されたり、面白そうな派生アルゴリズムが出てきたので一部ご紹介します。
Random Forest
Random Forest は、Leo Breiman が2001年に提案したアンサンブル学習の一種です。
簡単にいうと、たくさんの決定木を生成して多数決をとるという単純なアルゴリズムです。このようなアプローチのアルゴリズムには、Bagging や Boosting (そういえば Bagging 自体 Breiman の考案でした) に代表されるように、いろいろな手法が存在しますが、 RF は以下のようになかなかよい特徴を持っています。
- 学習・識別が高速
- 多クラス識別が用意
- 回帰にも使える
- 並列化可能
- 特徴のスケールや距離尺度に影響を受けない
- 実装が比較的容易
- ノイズ(誤った教師データ)に対して頑健
- 特徴が名義尺度でもOK
- 欠損値を許容できる
- Cross validation しなくていい
……すばらしいですね!
私は去年の Advent Calendar で SCW を扱いましたが、Random Forest も非常に使い勝手の良いアルゴリズムだと思います。
デメリットとしては、過学習しやすいことやメモリを食うことが挙げられますが、これらについてはいくつかの工夫を行うことによって緩和することが可能です。
基本的なアルゴリズム
まず、データセットから重複を許して T 個のサブセットを作成します。
それらすべてのサブセットに対して弱識別器となる決定木を生成します。
決定木については適当に CART などのアルゴリズムを使いますが、
過学習を防ぐために木が一定以上の深さになったら学習を打ち切ることもあります。
分割関数については、データによって適時変える必要がありますが、基本的には2分決定木でよいようです。もっとたくさんの子に分割する方法も考えられますが、そうしたところであまり精度は上がらないといわれています。
その結果、T個の決定木が生成されることになるので、最後に多数決をとったり単純ベイズ分類器を使ったりして強学習器を作ります。
単純ベイズ分類器を使うよりは Complement Naive Bayes や AODE やその他機械学習アルゴリズムを使ったほうがいいと思いますが、今回の本質とは逸れるので省きます。
派生アルゴリズム
Extremely Randomized Trees
ERT の考え方は簡単です。
RF では 決定木を作るときに分岐させる位置を網羅的に探索し、なんらかの基準でもっとも良い部分を選びますが、 ERT では単にランダムで選択します。
サブセットの抽出をせずに、すべてのデータを用いる方法と、RF同様データをランダムに選んでサブセットを作成する方法が提案されています。
あまりに適当な感じですし、実際ちょっと精度が低下することも多いものの、メリットもあります。
ひとつは学習の高速化が見込めること、もうひとつは教師データが少なくても過学習しにくいことです。
RF は学習データが多くないと特に過学習しやすいので、ここを改善できるのはデータセットによっては大きなメリットです。
Alternating Decision Forests
通常のアルゴリズムとは異なり、幅優先で木を生成していくアルゴリズムです。
普通の RF では、サブセットから決定木を作成し、終わったらまた次のサブセットから決定木を作成していきます。
この手法では、まず深さ1ですべてのサブセットから決定木を生成し、それが終わったら深さ2で木を構築し…と、すべての木の根ノードを全部用意しておいて、一度に1ずつ深くしていくという方法をとります。
このとき、個々の木ではなくて、全体として損失関数を最小化するようにノードを追加していくことで、 RF より性能が向上するらしいです。
Random Ferns
OpenCV の Ferns 特徴量と関係があるのかと思いましたが別物みたいです。
RF というか決定木ではある分割関数をノードにして、2つに分岐させていきますが、 Random Ferns では 決定木の同じ深さのノードでは同じ分割関数を使ってしまうというアルゴリズムです。
ERT と同様、非常に大雑把なアルゴリズムであり、精度も低下してしまいますが、学習がかなり高速になるのと、過学習はしにくくなります…が、あまり詳しいところはまだよくわかっていません…。
色々な使い方
あんまり詳しくないですが以下の様なことにも使えるらしいです。
- 回帰
- 半教師あり学習
Depth 情報を使った姿勢推定
Shotton et al. "Real-Time Human Pose Recognition in Parts from Single Depth Images"
画像の領域セグメンテーション
Perbet et al. "Random Forest Clustering and Application to Video Segmentation"
キーポイントマッチング
Nishimura et al. "2段階のRandomized Treesを用いたキーポイントの分類"
通常の単一カメラでの姿勢推定
Yu et al. "Unconstrained Monocular 3D Human Pose Estimation by Action Detection and Cross-modality Regression Forest"
http://www.youtube.com/watch?v=rrXvzZOU-Ao
CVPR 2013: Unconstrained Monocular 3D Pose ...
おわりに
Random Forest や Extremely Randomized Trees は、 R, scikit-learn, OpenCV などに実装されており、容易に使うことができます。
最初に述べた通り、これらのアルゴリズムは非常に使い勝手が良く、今後も色々な応用例が発表されていくと思います。
これを気に RF 系のアルゴリズムを触ってみるのはいかがでしょうか。
JubatusとOpenCVで一般物体認識
はじめに
先日の Jubatus Casual Talks で、OpenCVを使った一般物体認識の概要と、注意しなければならないポイントについて発表させていただきました。
詳しくは上記のスライドを御覧ください。
一般物体認識とは
要するに、画像を与えた時にそこに何が写っているのかを推定することです。
ゾウの写真ならゾウ、自転車の写真なら自転車だとコンピュータに判断させるのが目的です。
ところが、これがなかなか難しい問題であまりうまくいっていません。
Googleの画像検索は一見この問題を解決しているように見えますが、画像検索の場合はその画像の周辺にあるテキスト情報が利用できるのでちょっと違います。
たとえば、写真のすぐ下に「ウサギかわいい」って書いてあったらたぶんウサギの写真だろうと判断できます。
このような情報が与えられず、画像のみから対象を判断するのが一般物体認識です。
どう難しいか
人間は一般物体認識を簡単に行うことができますが、機械でやるのは非常に困難です。
たとえば、自転車は見る向きによって形状がまったく違いますし、ロードレーサーとママチャリでは形状もかなり異なります。
また、椅子なども一口に椅子といっても様々な形や色のものがあり、一概に「こういう形状のものが椅子である」とは定義できません。
折りたたみ椅子とマッサージチェアは同じ椅子ですが、視覚的な共通点はほとんどありません。
どう解決するか
先日ブログに書いたDeep Learningが最近流行りつつありますが、今まで(そして今後しばらく)の主流は Bag of Features (BoF) という手法です。
これは、文書分類で成功した Bag of Words の応用です。
Bag of Words というのは、文書を分類するとき(わかりやすい例だと迷惑メールフィルタ)、どの単語がどれくらい含まれているかだけを考慮し、各単語の係り受け構造は無視する方法です。
一見上手くいかなさそうですが、下手に文法を解析するより単語の頻度だけを利用したほうが精度が良くなるのです。
一般物体認識の場合は、画像をバラバラな特徴群にして、それらを入力にして機械学習することで結果を得ます。
画像をバラバラにするといっても、単純に画像を分割しただけでは精度が出ないので、そこは非常にうまくやる手法が色々提案されています。