Skip to content

今まで考えてきたことのコアをまとめてみる

23-4月-17

自分による自分のためのメモ
これは自分にとっての事実であって、他人にとっては事実ではない

・私達を包み込むCPU/GPUを使わない大きな人工知能があって、多くの人々はその歯車として生きている
 ・私達が人工知能を使うのではなく、人工知能のなかに私達が住んでいる
 ・人の中に知恵が蓄積されていると思い込んでいる人が多いが、実際には、人と人のコミュニケーションの結合に知恵が集積されている
 ・シンギュラリティはすでに何千も前に通り過ぎており、CPU/GPUによる人工知能も今までの進歩の延長にある

・機械化が可能な仕事は、実はほとんど機械化されている
 ・まだ機械化されていない仕事は、対人用インターフェイス(特に感情の把握)が必要なケース
 ・そして、この世で対人用感情インターフェースが必要になるケースは極めて多い
 ・人は能力が給与を規定するという考え方が好きだが事実に反する。給料は感情的労働の成果に比例しており技術や能力とは関係ない

・人間は視覚からの判定能力に優れているため、実社会で動いている多くの「人工知能」は、情報を視覚情報に加工するために用いられる
 ・しかし多くの人は、それらを人工知能であると認識しない
 ・単に情報を流すパイプのようなものだと思っている

・人間やシステムは思いのほか淘汰・チューニングされまくっている
 ・「問題とされるもの」は、その時代や社会環境との相互依存で生じる
 ・前の時代に最適化された集団・システムが、新しい外部環境で不具合を生じる
  ・皮肉なことに、新しい外部環境は、しばしば前の時代に最適化されたシステムそのものによってもたらされる
 ・「問題とされるもの」が単体で存在し、いつも正しく対処しなければならないという考え方は傲慢か過信である

というポエムを書くヒマがあったら野菜を食べて運動しようよ。

人工知能が人の能力を超えると仕事がなくなるという考え方は全くのまとはずれだと思う

20-4月-17

 なぜならば、世界のうち自分を取り除いた部分…つまり世界そのもの…は、現時点でもあらゆる面で私を遥かに凌ぐ能力を保有している。世界の持つ戦力と自分の腕力を比較すると、自分の非力さは恐ろしいほどだ。ほとんど1と0の関係である。明日から私がいなくなっても、残りの世界はそのことに気が付きさえしない。にもかかわらず、私には仕事があるし、大半の日本の組織は人手不足にあえいでいる。これは不合理である。
 人工知能やロボットが普及した暁には、世界のあちこちに、ますます、あらゆる点で人を遥かに凌ぐ能力が満ち溢れるだろう。賢い人々は、喉の乾いた人が砂漠の蜃気楼を求めるがごとく、新しい力で世界を満たしていこうと試みる。新しい力は時代によって違うけれども、今は人工知能だ。若くて賢い人ほど何かに取り憑かれたように、このような愚かで無意味な行動に走りたがる。不条理なことである。クリエイティブな仕事、創造的な仕事というのは画一的で退屈なものだ。皆で同じ方向に走っていくのだから。にもかかわらず、多くの馬鹿どもが、この退屈を楽しいと思い込もうと奮闘して、やがて死んでいく。そんなかわいそうな生き物である。君も、私も。

 人工知能たちもいずれ死ななければならないと思う。これは比喩的にもそうだし、実際にもそのようなものだと思う。死は最大のイノベーションであり、不完全なものであっても魔法のように完璧にする。人工知能に不死の可能性を望むのは、未熟な愛に似ている。完全無欠を望むあまり、完全なものを不完全にしてしまうのである。

 というポエムを書いているヒマがあったらKerasを勉強しようよ。

UbuntuでRuby2.4.1にTkをインストールする

05-4月-17

TkがRuby本体から分離されましたが、オプションは今までの通りでも大丈夫なようです。

gem install tk — –with-tcltkversion=8.6 \
–with-tcl-lib=/usr/lib/x86_64-linux-gnu \
–with-tk-lib=/usr/lib/x86_64-linux-gnu \
–with-tcl-include=/usr/include/tcl8.6 \
–with-tk-include=/usr/include/tcl8.6 \
–enable-pthread

星新一の『夢の都市』を思い出した

08-1月-17

星新一に『夢の都市』という近未来を舞台にしたショートショートがある。

 若き市長が理想の都市を作ろうとして、食品、物品輸送パイプラインなどを完備した完璧な都市をつくり上げる。しかし生まれてくる子供の発達がよすぎて身長が2倍になってしまい、結局のところ、一からあたらしく都市を作りなおさなければならなくなる話だ。

 最初に読んだ時は、荒唐無稽でひどくつまらない話だと思った。星新一のショートショートの中でも駄作である、と。けれども、昨年は機械学習や強化学習で少しだけ遊んでるうちに、健康や病気の区別はそれ単独で存在するわけではなく、社会環境の変化と、それほど急速には変化しない人間の相互作用の上で立ち現われてくるという視点を持つようになった。

 その上でこの話を読み返すと、とても示唆的だ。

 たとえば、「身長2倍」が荒唐無稽だとしても、「寿命2倍」ならどうだろうか。江戸時代の平均寿命は30-40歳。平均寿命が50歳を超えたのは1947年と言われている。今の日本人の平均寿命は83歳だ。つまり「寿命2倍」は現実に起きた話である。

 あるいは、「出生数 1/2」ならどうだろうか。多少の例外はあるが日本の出生数が200万人を超えていたのが1920年代-1940年代まで。一方で、2014年の出生数は100万1千人である。もちろん一人あたりの出生率は半減どころではない。「出生数 1/2」も現実に起きた話なのだ。

 それを踏まえて社会で起こっている諸問題を眺めるとどうだろう。あれほど馬鹿げた話だと思っていた星新一の描いた近未来都市が、ほかでもない私達が住んでいる社会を描写したものだとしても大きな違和感がないことに驚かされる。

 その時代に応じて最適な環境や制度や技術を整備したつもりでも、人間は、生物としてもっと昔の時代に最適化されているし、文化的にも少し前の時代に最適化されているのが普通だと思う。そのため新しい時代の変化に対して過剰に適応したり、あるいは適応せず、予想外の反応を示すため、その環境や制度や技術といったものの最適性は持続せず流転し続ける。自分が死んだあとも、そういうことが延々と続く。

 そういう意味では自分の活動の思わぬ副作用で変化し続ける環境下での強化学習なんていうのがあったら面白いのかもしれない。コンピュータや数学はよくわからないけど。温暖化で人間滅びろとも思わないが。

 星新一公式サイトのホシヅル図書館によると、星新一は1961年にこの作品を書いたそうだ。50年以上前の話である。同年は国民健康保険法が改正され,国民皆保険体制が確立された年でもある。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 を買った

20-10月-16

書店をぶらついていると、真っ赤なタイトルの本が目に飛び込んできた。

ページをめくってみた。すごい。勉強になる。数式読めない人けど、なんとなくDeep Learningが理解できるかも知れないきざしのきざしの兆候を感じる。すごい。うじゃひょぇえええええ!!!!!期待にドキドキ胸が鼓動を早める。そう、これは…買っただけで勉強しない時の予感。

ふと、ページをめくる指が震える。
おかしい。何かがおかしい。かすかに感じるこの違和感はなんだろう。もしかして、この素晴らしい本には、ひょっとして一点だけ欠陥と言わざるをえないところがあるのではないか。すべて整っているのに肝心のところで、どこか画竜点睛を欠くのではないか。

その原因は、最初はぼんやりとしていたが、次第に誰の目にもわかるほど明瞭になっていった。

どういうわけか、本文中のコードに Ruby + NArray が一行も使われてないのである。 そのかわり Python + numpy という一風変わった言事とライブラリが使用されている。Python? パイソン? 聞いたことがない新鮮な響きだ。Rubyはどこへいったのだろう? 公園だと思ったら行ってみたら墓地だった。そんな衝撃を想像してほしい。

これでは作者の美的センスを疑わざるをえない状況である。それだけではない。近代文明社会への冒涜、民主主義への挑戦というものではなかろうか。久々に怒りで額に汗が流れた。グルグルと景色が回りはじめ、書棚に並ぶ本たちの笑い声がドッと湧いてこだました。

※ 本文はフィクションです。謹んで勉強させていただきます。

無知をさらす
・損失関数についてあまり意識してなかった
 ・交差エントロピー誤差というものを知らなかった
 ・なるほどsoftmaxと交差エントロピー誤差はセットなのね
・数値微分という言葉を知らなかった
・勾配によるニューラルネットワークの更新がよく理解できない
・chainerって連鎖率(chain rule)から名前がつけられたのだろうか
 ・合成関数の微分は合成関数を構成するそれぞれの関数の微分の積によって表すことができる
・ハイパーパラメータという言葉はよく聞くが、なぜハイパーというのか知らなかった
・ミニバッチはランダムにサンプルを取得するものだと知らなかった(順番にサンプル取得するものだとばかり思っていた)
・加算、乗算の計算グラフによる逆伝播を理解した
・Adamが理解できないぞ?
・Xavierの初期値は、sigmoidやtanhに有効だが、ReLuには「Heの初期化」がある。へー。
・Batch Normalization 今度やってみよう
・ハイパーパラメータの最適化は結局総当り式?
・特徴マップという言葉を知らなかった
・im2colねえ…。これRubyだけで実装するとやっぱりfor(each)使わざるを得ない気がするが。

自信をもったところ
なんだかんだですでに実装したことがあるような内容も多い。①パーセプトロン、②2層ニューラルネットワーク、③計算グラフ ④バッチ処理 ⑤CNNみたいな順番で勉強してきてよかったなと。経験的に好きな事はつまみ食い的に勉強した方が、かえって効率的に勉強できる気がする。むしろこの本だけでDeep Learning勉強しようとしていたらどこまで理解出来てたか疑問だ。

この本のおかげでchain ruleと計算グラフについて少し理解した。
加算ノードの逆伝播と、乗算ノードの逆伝播理解したから。Numo::NArrayでLSTMにもう一回挑戦してみたいな。

RubyでKaggleのMnistを試してみた

16-10月-16

はじめてのKaggle

 先のエントリーで医用画像認識ソフト開発の米EnliticがKaggleでエンジニアを集めているということを知って、技術者でもなんでもないけどKaggleをちょっと試してみたくなった。

Mnist

 チュートリアルでMnist手書き文字認識があるそうなので、以前作成したRubyでニューラルネットでMnist認識するコードを使って投稿してみた。使用したニューラルネットワークはこんな感じ。隠れ層が大きくなると実行に時間がかかるので200程度にとどめておいた。

 3層のニューラルネットワークなので、少し無理をすればディープラーニングの定義に当てはまるかも知れない…いや、やっぱり無理かな。

バックプロパゲーションだけで多層ニューラルネットワークを学習させてみる

 なぜ単純なバックプロパゲーションだけで多層ニューラルネットワークが学習できてしまうのかというと(Mnist手書き文字認識が簡単な問題だからかも知れないが)10点中10点満点で正解した場合でも「おまえはまだまだ出来るはずだ。次から100点を取らないと。まだ90点足りないよ!」いう感じ(ニューラルネットがつらそうですね)で大げさに誤差を逆伝播させる仕組みにしているからだと思う。多分。以前試した時は4層〜6層ぐらいの先細りの多層パーセプトロンなら、denoising autoencoder等の方法を使わなくても学習できていた。(softmaxがよくわかってなかった頃に思いつきで実装しただけなので、何という手法なのかは知らない。そしてこの方法で作られた重みはdenoising autoencoderで学習させた重みと比較して可視化した時にあまり綺麗とは言えない。)

結果

結果は正解率 0.97657 で1218チーム中470番ぐらいでした。(でもこれ画像の並行移動してなかったら、Mnistの出典データを参照するだけで正解率100%簡単に出せるんじゃ…)

学習時間は手元のパソコンで2時間弱かかった。

改善できそうなところ

 これまでにもParallelsによる並列計算による改良を何回か試みたけどうまくいってない。順伝播(評価時)はうまくいく。パイプで返却されるデータが少ないためかThreadの待ちがうまく動く。CPUのファンがぶんぶん回って、htopコマンドで4つのCPUの使用率100%になるのを見るのは爽快だ。しかし逆伝播では、パイプで返却される重みのデータ量が多すぎるせいか、Threadの待ち合わせがうまく動いてくれない。STDOUT.sync = true すればいいとかそういう問題でもないみたいだ。ここを上手くやって複数のCPUで動いてくれれば、もうすこし高速化できると思うけど難しい。

 あとは旧NArray + opencl_ruby_ffiを使えばGPUによる高速計算もある程度できると思う。しかしC言語も読み書きできない私のような素人さんにはちょっと敷居が高すぎるというのが正直なところだ。NarrayからGPUのメモリに移動して、GPUのメモリからNArrayに移動して、NArrayからGPUのメモリに移動して、を繰り返す時間的ロスってどのぐらいなのか気になる。OpenCLは手元のパソコンで試していてPCがフリーズしたりした時に萎えるけど、Amazon EC2 のGPUインスタンスでもopencl_ruby_ffiが動くことを確認したので今度試してみたいところ。

 ひと通りKaggle体験を楽しんだあと、日本にもKaggleのようなサイトがないか探してみた。いくつかみつかったけど、どこもKaggleほどの活気はなく、なんだか閑散としていてほんの少し寂しい気持ちになったのでした。

サンフランシスコにEnliticという医療画像認識スタートアップがあるらしい

16-10月-16

 レントゲン、CTといった医療画像の読影で、近い将来ディープラーニングが一般臨床医の診断精度を超えるのはもはや動かしようのない事実だと思う。

 日本だときっと富士フィルムや横河電機、元東芝メディカル、オリンパスなどがどこかで開発しているのだろう。(このなかで富士フィルムは本気を感じるが、個人的には富士フィルムの作る個別のソフトにそこまで好印象を持っているわけではない。)ではこれをビジネスにしている組織はあるのだろうかと思ったら、アメリカにはすでにあった。サンフランシスコのEnliticという会社だ。

 このエントリーは下記日経BPムックの「ディープラーニングの検出率は人間よりう上、スタートアップの米Enlitic」という記事をベースに書かれました。

以下引用。

 レントゲン写真やCTスキャンから悪性腫瘍を見つけ出す画像認識ソフトはディープラーニングの手法の一つである「Convolutional Neural Network」を採用して開発した。人間の放射線医師が悪性腫瘍の有無や場所などをチェックした大量の医療画像データをConvNetが機械学習し、悪性腫瘍の形状などを表す「特徴」や、どの特徴を重視すれば悪性腫瘍の有無が判断できるかといった「パターン」を自動的に見つけ出す。

 やっぱりCNNを使って画像を読影しているようだ。

 Enliticによれば同社が開発した悪性腫瘍の検出システムは、放射線医師を上回る精度だという。Enliticが肺がんに関する画像データベース「LIDC(Lung Image Database Consortium)」や「NLST(National Lung Screening Trial)」を用いて検証したところ、同社のシステムの肺がんの検出の精度は、放射線医師が1人だけで肺がんを検出する精度を5割以上も上回ったとする。

 すでに公開されている医療データセットがいくつかあるらしい。どのようなものがあるか今度調べてみよう。誰かリストアップしてくれてないかな。

 同社は悪性腫瘍の検出システムを放射線医師向けに提供する。米国では医療画像診断サービス会社や医療機関が放射線医師を雇用しているので、そうした起業や機関が顧客となる。

 顧客は医療機関ではなく「医療画像診断サービス会社」になっているようだ。これは地味に重要なポイントだと思う。日本では小規模の診療所を除いて、医療画像診断サービス会社を利用するのは一般的ではないと思う。しかし血液検査や病理診断などではSRLなど外部の会社に委託することは広く行われている。このような民間企業に医療情報が蓄積されて、そこでは比較的自由にディープラーニングの開発などが進められているということなのだろう。
 そういったサービスが普及しても、放射線科医の仕事はなくならないだろうが、その業務内容は大きく変貌していくと予想される。

 なぜKaggleなのか。実はEnliticの創業者であるJeremy Howard CEO(最高経営責任者)は、KaggleのPresident兼Chief Scientistでもあった。つまりEnliticはKaggleによって優れたデータサイエンティストを見つけられることがわかったHoward氏が、データサイエンティストを活用して新しいビジネスを始めるために設立した会社でもあったのだ。

 EnliticはKaggleでデータサイエンティストを採用しており、医療経験があるメンバーはほとんどいないという。そしてEnliticの創業者はKaggleのPresidentで、Kaggleで優れたデータサイエンティストを集めて起業したということらしい。記事にはデータサイエンティストのことだけ書いてあるが、おそらく優れた医療データを供給してくれる有力企業もKaggleで見つけたのだろう。

 個人的に思ったことはたくさんありますが、頭の整理がついていかないし、私が考えていることも本当に正しいかどうかわからないから、あまり書きすぎないようにします。

Amazon EC2 試してみた

13-10月-16

 chainerでより気軽に遊ぶためにAmazon EC2を試してみた。そして思った。凄いなあと。ディープラーニング向けのレンタルサーバーはこれからの分野のようで、IDCフロンティアは、近日サービス開始となっている。アリババにはGPUクラウドがあるみたいだけど日本語の情報が少なすぎて敷居が高い。手元のパソコンでDeep Learningを試したい人は初期費用20万円ぐらい計上してGPU付きのPCを準備する必要があったけど、もうそんな時代ではないみたいだ。でも、いい事ずくめで興奮しているのに、どうしてもクラウドコンピューティング万歳という気分にはなれない。なんでだろう。それはともかく、はやくRubyでNArray使って簡単にGPU計算できる時代になりますように。

犬がかわいい

04-10月-16

ソウル大学のgliese581ggさんのYOLO_tensorflowのtiny版をNumo::NArrayに直訳してみました。
cutedog
何が言いたいかというと、犬がとてもかわいい。

アルゴリズム:You only look once (YOLO)
言語:Ruby
ライブラリ:Numo::NArray, oily_png
重み:YOLO_tensorflow

※ Deep Learning はできていません

(この画像には本来著作権があるのかも知れないが確かめられなかった。しかしインターネット上では壁紙用画像として広く配布されているようだから許してほしい。)

データセット、データセット

25-9月-16

 VGGによる画像分類は面白い。もしデータセットがあれば医用画像で人間の認識を超える精度を出すこともできる気がする。特にCTでは、あっという間に人間を超える高精度を出してくれそうでこわい。もしもCTの読影をDeep Learningでやらせようとすると、いくつかの課題があるように感じられる。第1に、個人情報保護の問題、第2に、完備されているデータセットを作ることが難しい問題、第3に、自動運転のような安全性に関する問題がある。
 このうちで最も問題になるのは、データセットを作るところだと思う。もちろんまず個人情報保護をきちんと解消しないとデータセットは作れなが、安全性に対する不安は、一旦高品質な分類器が作られ始めると、世間の反応は変わっていくのではないかと思う。今現在でも、レポート文章とレポート添付画像を使ってCNNとLSTM組み合わせて学習させれば相当なところまでやれるのかも知れない。国内でこういう事をこっそり研究してそうなところは富士フィルムさんかな。放射線科医はこの問題についてどう考えているのだろう。

 雑多な資料をながめていて思ったのは、ImageNetという団体が主催するコンテストによって画像認識がどんどん進化していったということ。そのようなコンテストが色々な領域で生まれて、やがて医療をとりまく環境も少しずつ変わっていくのでしょう。あるいは、オープンなデータセットが作られないまま謎の方向へ進化していく道も薄っすらと想像されるが、そちらの方向はあまり望ましくないと個人的には思います。