冗長性への賛歌

冗長性への賛歌は、人間賛歌。

人工知能、ディープラーニングが冗長性の大切さを教えてくれた

こんばんは。

すみません、どたばたしていてブログをしばらく放置していました... 「ブログ楽しみにしてるよ(更新まだかな?)」とか「ブログ毎日更新チェックしてるよ(けど更新してくれないね...)」とか、とっても嬉しいお言葉*1を頂いたので、がんばって書いていきたいと思います。

書きたいネタは色々あるのですが、今回はとりあえず、最近何かと話題の人工知能機械学習)について、

 人工知能の発展には、冗長性がポジティブに効いているようだ

ということを書いておきたいと思います。

機械学習の目的は、とてもざっくり言うと、

  1. なんらかの事象を上手く説明するモデルを作る
  2. そのモデルを使って未知(未来)の事象の予測を行う

です。人間は1ができれば2は自ずとできる場合が多いですが、コンピュータはなかなかそうは行きません。例えば、文字を見せてこれが「A」かそうでないかを認識させるだけでも、コンピュータにとっては難しい問題です。

コンピュータに学習させるにあたって、「A」にあたる画像と、これは「A」だという正解ラベルのペアをいくつも与えていくのですが、元々の画像データは大抵、ピクセルの集合でしかありません。つまり基本的には、「画像のどの位置に、どの色がある」という情報が並んでいるだけです。

どういった画像が「A」かを答えるのに、ピクセルの情報そのものは役に立ちません。「A」にはこんな感じで、無数に異なる形が考えられるからです。

f:id:iwana_sloth:20160327172151p:plain.....

人間が画像を「A」だと認識するときに、「座標(1,2)に、黒色があって、(1,3)には....」という風に考えるでしょうか。たぶん、違いますよね。

おそらく、こんな風に認識しています。

f:id:iwana_sloth:20160327175128p:plain

「斜め線2つが屋根になって、水平な線が1つあって、屋根のあいだにつながっている」

人間はこのようにざっくり認識していますが、コンピュータにその認識を教えるにはどうしたらいいでしょうか? これらを明確に、ルールベースで教えようとすると、こんな疑問が色々でてきます。

  • 「水平な線」って何でしょうか?どれくらいまっすぐだったらOKで、傾いていたらダメなんでしょうか?
  • それぞれの線は完全につながってないとダメなんでしょうか? ほんのちょっと離れててもOK? どれぐらい離れてたらダメ?

「水平線」とか「つながっている」といった概念は、少ない特徴で文字を捉えるのにとても役立ちますが、冗長性*2を多く含んだ概念で、コンピュータではうまく扱えず、最近まで扱うのが難しい、と考えられていました。

このような「特徴表現」を得るために、これまでは「人間が」いろいろとお膳立てをしてきたと思います。画像認識の専門家ではないですが、主成分分析、エッジ抽出、各種周波数フィルター...etc をたくさん組み合わせて、文字認識のときはこういう特徴量を計算すると良い、顔認識だとこの特徴量を組み合わせて...など、場面ごとにアドホックにやっていた印象はあります。

しかし、最近の人工知能のブレイクスルーを生み出した「ディープラーニング」だと、かなり汎用的に、お膳立てをあまりしなくても「特徴表現」を勝手に学習してくれる印象があります。(自分ではほぼ触っていませんが...)

 

...と、ここまで書いてきた内容は割りと一般的な人工知能機械学習)の話で、かつ「ディープラーニングすごい」くらいしか言ってないので、

どうして「冗長性への賛歌」でこの話題にしたのか、本題に入りたいと思います。

 

最近、松尾豊先生の『人工知能は人間を超えるか - ディープラーニングの先にあるもの -』を読んでいると、

 ディープラーニングが飛躍したカギは『頑健性』

と書かれていました。

 ディープラーニングの基本アイデア*3は昔からあったそうですが、ここまで上手くいったのは、

学習データに色んな「ノイズ」を加たり、すでに学習した機能を一部停止させる*4ことで、様々な状況でも共通して表れる「頑健な」特徴量を取り出せるようになった、からだそうです。

これまでは、「適切な特徴をいかに(きれいに)抽出するか」にフォーカスしていたのですが、意図的に冗長性を加える(ノイズを加える、機能を制限する)ことが、学習にとって本質的に重要だということが分かったのです。

急がば回れ」「かわいい子には旅をさせろ」といった格言が、ただの人生訓としての意味ではなく、こういった先端技術領域で本質的に効いてくるというのは......実に面白い。(ガリレオ風に)

...と私は思うのですが、皆さんはどうお思いでしょうか。

冗長性という視点から人工知能を見るのは、けっこう面白いテーマだと思うので、今後も書いていきたいと思います。

ではでは。

*1:嬉しいが、それなりにプレッシャーのかかるお言葉^^;

*2:水平線という概念は、様々な形のバリエーションを含んでおり、かつそれらを統合して「水平線」という安定した(ちょっと形が揺らいでもやはり水平線だ、と言えるような)概念を作り上げています。この意味で、冗長性を含んでいる、という言い方をしています。

*3:階層的なニューラルネットを使って、プリミティブな特徴抽出から始まり、段階的に高次な特徴を学習していくアイデア。オリジナルではないですが、例えばジェフ・ホーキンスは『考える脳 考えるコンピュータ』(2005年)で、人間の脳(大脳新皮質)をモデル化する、というアイデアを熱く語っていました。

*4:ニューラルネットワークの隠れ層ニューロンをランダムに欠落させるようなテクニック(ドロップアウト)がよく使われています。

文京区さんぽ編  -「不連続統一体」との出会い -

管理人は文京区に引っ越して10ヶ月ほどになるのですが、せっかく近所にある名所旧跡をあまり巡っていなかったので、最近は「文京区さんぽ」を開催しています。

先日、三菱財閥3代目の岩崎久弥さんが作った旧岩崎邸庭園に行ってきました。壁という壁に手の込んだ金唐革紙を貼っていたり、柱一つ一つの装飾にまでこだわりが感じられ、素敵な洋館でした。岩崎さんグッジョブ。

概要 | 旧岩崎邸庭園 | 庭園へ行こう。

さて旧岩崎邸庭園の隣には、旧岩崎邸の洋館や和館の雰囲気とはうって変わって、怪しげなコンクリートの塊*1がありました。庭園から直接、しかも無料で入れるということでなんとなく足を踏み入れたところ、こんな面白い展示をやっていました。(まだやってます)

みなでつくる方法―吉阪隆正+U研究室の建築|文化庁 国立近現代建築資料館

図面や模型とともに、各所に吉阪隆正さんの言葉が散りばめられていて、建築についての知識が全く無い私でも考えさせられるものが多くありました。中でもこのブログで紹介したいのは、吉阪さんが提唱した「不連続統一体 (discontinuity unity)」という概念です。彼の言葉を引用すると、このようなものだそうです。

集めることと弘めること
独立を損なわずに統一を与えること
停滞に陥らない安定性
不安に導かれない可動性
二つの矛盾した力、それをそのまま認めつつ
しかも協調を見出すこと。ここに二〇世紀后半の課題を解く鍵がある。

この文章は「冗長性」について考える上で、色々な示唆を与えてくれます。

私たちが暮らす社会には、至るところにルール・法則・型といったものが存在します。法律や校則のように、国や組織の中で明示的に決められたルールから、小さな日々のコミュニケーションで登場するような、暗黙的な作法や型もあります。様々なルール・法則・型を意識的・無意識的に自らに課すことで、私たちは複雑な世界をよりシンプルに把握し、物事の成り行きを予測しやすい状態を作り上げています。予測のしやすい(物事が安定している)状態は、前回や前々回の記事でも書きましたが、冗長性が高い状態に対応します。この安定性は、停滞としばしば紙一重になります。

一方、個々人の独立性を高めて裁量を与えたり、より柔軟なルールで組織を運用していくことは、多くの場合、生産性(効率性)を高めることにつながりますが、可動性が高いので不安と隣り合わせになります。

「二つの矛盾した力(効率性 <-> 冗長性)、それをそのまま認めつつしかも協調を見出す」こと、これはまさに本ブログの大きなテーマです。「ここに二〇世紀后半の課題を解く鍵がある」とありますが、二十ー世紀でもたぶん鍵になるんじゃないかと思います。このテーマは、抽象的に考えると大きすぎるテーマなので、日々の中で「2つの力」がうまく統一されてる場面を見つけたり、実践していけたらなと思ってます。

吉阪さんは建築というフィールドを通して、U研究室や多くの学生たちを巻き込みながら「不連続統一体」を実践されていたみたいです*2。こんな標語も作られていました。

D=どれも
I =いちにんまえに
S=それぞれの
C=コースを
O=おなじ
N=なかまとして
T=ちからをあわそう。
これがDISCONT(不連続統一体)。

  

最後に、書きながらうすうす気付いていたのですが、「文京区さんぽ」と銘打ちながら旧岩崎邸庭園の住所は台東区池之端でしたでも、文京区が発行してるガイドマップにもしれっと載ってるし、なんとなく文京区っぽい名所なのでOKということで、「文京区さんぽ」だったことにします。

冗長性を大切に。

*1:怪しい建物ではなく、国立近現代建築資料館というところでした。

*2:展示自体はざっとしか見ていないので、吉阪さんの活動についてはアバウトです...時間あるときに著作も紐解いてみたいです。有形学も面白そう。

パスワードに名前や生年月日を使っちゃいけない理由 - 情報の効率と冗長性 -

 

最近こんな事件が起きましたね....

公開されている名前や生年月日から、アイドルのSNSのIDやパスワードを類推し、不正にアクセスした岐阜県職員が逮捕されました。

「名前や生年月日をパスワードに使うなど言語道断!!」

とあちこちで言っているので、あえて強調する必要はないと思いますが、先日「とくダネ!」で放送していたダメな理由が本質的だったので、ここで紹介します。 

パスワードが類推される 岐阜県職員が芸能人のメールのぞき見

上の記事で、危険なパスワードの第3位として、個人情報が入っているパスワードと挙げていますが、その理由を

 簡単に推測できる、1文字と変わらない

と表現しています。

1文字と変わらない、という言い方が本質を突いています。

「個人情報」として1人の人間が持つ名前は、2文字の名前でも、100文字の名前でも、1種類しかありません。同様に、生年月日も1人1種類です。

 もしパスワードに個人情報をそのまま使った場合、パスワードのバリエーションは個人情報の種類数(たかだか数十程度)しかありません。

結局、

 Xさんの名前   -> A

 Xさんの誕生日  -> B

 ...

という風に、1文字と対応づけることが出来てしまいます。

 

ここで、情報理論の概念として用いられる 効率」と「冗長性」について、簡単に書いておきます。

ある情報(=文字列 )は前述のように、より短い文字列で表現できることがあります。 情報理論では、ある文字列 S の「効率」を、

[ S を(特定可能な範囲で)最も効率的に(短い文字数で)表現した時の文字数 ] ÷  [ 元々の S の文字数 ]

と考えます。*1

例えば、「iwana_sloth」というパスワード*2は11文字ですが、これが特定の人の個人情報だと分かったとすると、前述のように1文字で表現できるため、効率は 1/11 ≒ 0.091 となります。

一方、パスワード作成ツールでランダムに生成した「czU6a(34HBM」という11文字のパスワードは、これ以上圧縮して表現しようがありませんので、効率は 11/11 = 1 となります。*3

ここで「iwana_sloth」のうち、効率的に表現できてない文字の割合 (1 - 10/11 ≒ 0.91) が「冗長性」となります。

 

情報理論ではこのように、定量的に冗長性という概念を捉えています。以前の記事で、「推測が容易な場面では冗長性が多く含まれている」といったことを書きましたが、

 冗長性を大切に - そのまえに冗長性って何? - - 冗長性への賛歌

今回はパスワードの例から、推測が容易な情報には冗長性が多く含まれていることが定量的に分かりました。

*「冗長性を大切にしよう!」というコンセプトのブログですが、今回は冗長性があると良くない例でした^^;

*1:ちゃんとした定義は他を参照してください^^;

*2:もちろん使っていません

*3:パスワードに使える文字の種類は増やせないものとします。もしパスワード生成ツールの生成確率分布に偏りがあるなら、生成確率が大きい文字列はより短い文字列と対応させて、平均的に文字数を減らすことは可能ですが、そんなに大きな偏りはないと考えて大丈夫でしょう(あったら困ります)

冗長性を大切に - そのまえに冗長性って何? -

みなさんは 冗長性 (redundancy) という言葉を聞いたことがありますか?

日常で何かが「冗長」だという時は、話が無駄に長いとか、だらだらしている状態を指したりしますね。

しかし、ITの文脈で「冗長性」というと、予備のサーバーやハードディスクを用意するといったように、システムの信頼性を高めるために大切な概念として扱われています。

ascii.jp

ITだけでなく、例えば、電力や鉄道などの社会インフラをストップさせないためにバックアップの仕組みを用意することも、良い意味での冗長性です。

エンジニアリングで意識される冗長性は意図的に構築するものですが、私たちの日常のコミュニケーションにも冗長性は深く埋め込まれています。

例えば、「ありがとうございました」と言う場面をひとつとってみても、多くの冗長性が隠されています。

周りがうるさくて「あ...ざ...した」という感じにしか聞こえなくても、お礼を言われたんだ、ということは分かりますよね。全く何も聞こえなくても、レジでお金を払った後相手が笑顔で自分の方を向いて頭を下げていたら、状況的にお礼をされたことが伝わります。

ありがとうございました」と発するのに、2秒くらいかかりますが、よく使う言葉だから2秒もかけるのはもったいない、と思ったとしましょう。(そんなに短気な人はいないと思いますが...あくまで一例です)さらに、頭を下げる動作もめんどくさいし、笑顔を作るのも正直疲れるから、

 「あ」と言葉を発するだけで、感謝の意を表す

と決めると、メッセージを伝えるには最も効率的です。ですが、「あ」という声が聞こえないと全く意味が伝わりません。もし「ば」と聞こえてしまって、さらに「ば」が「バカじゃないの?」という意味を表していたら、大変なことになります。

このように、メッセージの伝達からすると余分な情報(=冗長性)が「ありがとうございました」と言う場面に多く含まれていて、それがいろんな状況でお礼を正しく伝えられる、という信頼性を担保しています。

 

このブログでは、そんな冗長性にまつわることや、効率性だけでは語れないけど世界を豊かにしていくものについて、なんとなく書いていきたいと思います。