そこそこ日記

2016-04-19

[勝手にコンサルティング]ディープラーニング CNNが何をやっているのかの独自解釈

22:57

ディープラーニングCNNが何をやっているのかの独自解釈を書いてみました。

いや、単純・アタリ前の話だけどね。


◆前提

そもそも、画像認識のニューラルネットワーク(NN)は、何をやっているのかと言いますと。


画像(色の位置座標の集合)を複数の分類に変換している。


さらに、細かく書きますと・・・


画像(色の位置座標の集合)→複数の特徴とその位置→複数の特徴→複数の分類


と変換している。


最終出力の分類では、位置情報は消滅する。

分類を出すためには、分類を表現する特徴だけあれば良い。


早い話が位置情報はなくしたい。

が・・・話は簡単ではない。


画像認識では、特徴の関係が重要になる。

特に、特徴の位置関係が重要になる。


例えば、目と目の位置、目と口と鼻の位置関係、頭と体の位置関係など。


そのため、むやみやたらに位置情報を削除でない。

ゆっくりと、ゆっくりと位置情報を減らしていき、特徴情報を増やしていきたい。


CNN

大変わかりやすい図がありましたので、引用させていただきます。

f:id:creativeability:20160419222220p:image

出典:人工知能に関する断創録 Theanoによる畳み込みニューラルネットワークの実装 (1)

http://aidiary.hatenablog.com/entry/20150626/1435329581


Layer0では、特徴マップ1枚大きさ(24×24)で特徴マップは20枚。

Layer1では、特徴マップ1枚大きさ(8×8)で特徴マップは50枚。


と、特徴マップの種類が増えている一方で

特徴マップ自身のサイズはどんどん小さくなっている


ポイントは、特徴マップの種類が増えている点。


位置情報は、どんどん減っている一方で、特徴?の種類・情報はどんどん増えている。

ゆっくりと変換しているのだ。


そして、

Layer2では、特徴マップはなくなって普通のNNになっている。

位置情報が完全にゼロになったわけじゃないけど)



以前、他のHP説明を読んだ時、

畳み込み層(convolution layer)とプーリング層(pooling layer)の繰り返しが強調されていたんだけど、

特徴マップの種類が増えていることは、どうにも印象に残らなかった。

そのため私の中では理解の妨げになっていた。

必ずしも、特徴マップの種類を増やさなくても、機能するかもしれない。

でも、私としては、この点がポイントのような気がしてならない。

2016-04-02

オートエンコーディングで失敗する。カラー画像のautoencoderを作るのは以外と難しい。

| 17:16

人工知能に関する断創録さんの多層パーセプトロンで手書き数字認識

http://aidiary.hatenablog.com/entry/20140201/1391218771

を参考にして、手書き数字のデータセット、digits(8×8)とmnist(28×28)に対応した手書き数字認識の実装をしたところ、まずまずの成功。


続いて、digitsとmnistに対応したオートエンコーダーの実装をしたところ、結構簡単にそれっぽいのが表示された。


【cifar10】

 GOOGLEの「DEEP DREAM」に憧れる私としては、

 調子に乗って、cifar10(32×32×3 カラー)に挑戦したところ、見事に失敗。

 最初にやったら、なんどか学習させたらなぜか同じ絵が表示される。

 いや〜挙動が、全然違うぞ。

 mnist(28×28)に比べて、出力層のユニット数や入力層のユニット数がカラーになったため、4倍近くになったけど・・・・

 まさか、こんなことになるとは。


【なにが起きた】

 隠れ層の出力が、どんな入力に対しても同じになっている。

 初期状態において隠れ層への入力が、かなり大きな値になっているの原因みたい。

 −30〜30とかになっている。そのため、出力は-0.99とか0.99とかそんな感じ。

 −30〜30とかになっている原因は、「ユニット数の増加」と「カラー写真はどのピクセル?にも数値が入っている」ため合計の値が増加しているみたい。


 初期状態だと、ウエイトの値はプラス、マイナスである程度、相殺され、ゼロに近くなるんだけど。

 ユニットの数が多くなると、さすがに相殺しきれなくなり、プラス側、マイナス側に大きく振れる。

 さらに、カラー写真は、手書き数字入力に比べて、0値の領域が少ないため、隠れ層に入る数値は、大きくなる。


 学習が進むと、重みが変化して、さらにゼロの値から離れていく。

 その結果、隠れ層に入る値の絶対値も大きくなる。毎回大きく−1〜1の間を振れるならいいのですが、−1〜1から遠く離れたころで、10〜30で触れられても、出力が1近くで変化がない。

 結果、出力が実質固定的になってしまった。


【単純な対処法】

 しょうがないので、関数に数値を入力する段階で、20分の1、50分の1にした。

 活性化関数も、ソフトサインに変えたところ・・・・まぁ、ノイズだらけだけど、物体らしき影が表示されるようになりました。

 ニューロの数を1024ではノイズだらけ、2048だとノイズが多いけどそれなり。

 4096にしても、2048とたいして変わらない。

 特徴を抽出しているのか、単に入力から出力にデータを流しているだけなのか、なぞだけど・・・・

□1024

f:id:creativeability:20160402174315p:image:left

□2048

f:id:creativeability:20160402174047p:image:left

□オリジナル

f:id:creativeability:20160402174320p:image:left



【結論】

 GOOGLEは凄い。

2016-03-31

手書き数字の文字認識。バックプロパゲーションの出力が0ばかりになってしまった。

| 00:30

 世の中のAIブームの影響を受けて、何年かぶりにニューラルネットワークNNをやってみたのですが・・・

 思いの外うまくいかない。


【手書き数字の文字認識】

 digits(8*8),MNIST(28*28)の手書き数字の文字認識をやってみたのですが、バックプロパゲーションの出力が0ばかりになってしまった。


【対処法】

 正解の時は、バックプロパゲーションをしない。

 間違えた時だけ、バックプロパゲーションを行う。


 ネットに書いてありました・・・(T . T)


【なぜこんなことになったのか】

 手書き数字の文字認識は、入力に対して、1〜10の10種類の出力を出すわけですが・・・


 出力の設計は、

 0ならば[1 0 0 0 0 0 0 0 0 0 ] 1ならば[0 1 0 0 0 0 0 0 0 0 ]


みたいになるわけです。 


 一つだけ1で、残りの9が0となるわけです。

 このようなのをwinner-take-allというらしいのですが・・・

 ニューロの立場で考えた場合、1になる確率は10%で0になる確率は90%です。

0を出力していれば、9割近く正解するわけです。


 バックプロバゲーションを常に有効にした場合、

 なまじ出力をしても、9割の確率で出力を0にしろと言われるわけです。

 1にしろと言われるのは1割だけ、そのため、ニューロは0出力になってしまったわけです。

2016-03-26

ロボットに人権は必要か。

| 22:10

 ロボットは人間じゃないので、人権はありません。

 というのは置いて置いて、何らかの権利を与えるべきかという話。

 浦沢直樹さん版のアトム、PLUTOでは、ロボットが人間型である理由・人間のような生活をする理由として、人間社会に入り、人間をよりよく学ぶためとあった。ような気がします。

しかし、人間から何を学ぶのか。

人間と接することが良いこととは思えない。

 そう思った原因は、こちら。

http://gigazine.net/news/20160325-tay-microsoft-flaming-twitter/

Microsoftの会話学習型人工知能Tayたった1日で人種差別主義者になり問題発言連発でサービス停止。

学習型人工知能は、けっきょ周囲の人間から影響を受けてしまう。

その結果、まぁとんでもない思想を学ぶだろうし、学ばされるのかもしれない。

また、ロボット虐待する人間がロボットを所有するかもしれない。

その結果、ロボットが人間に対して、憎悪を抱くかもしない。

結局、人間と暮らすことにより、人間からロボットに憎悪が感染する。

防ぐためには、変な人間からロボットを隔離する必要がある。

動物愛護法があるように、

ロボット愛護法、ロボット虐待防止法みたいなものが必要になるかもしれない。

2016-01-13

自動運転で事故が起きた場合誰の責任なのか? メーカーか? 所有者か?

| 01:50

今日少しばかり自動運転の話で盛り上がった。

自動運転での事故は、誰かが責任を取るのか? メーカーなのか? 所有者なのか? 


答え。全部グーグルの責任。 


実はこの設問自身無意味である可能性が高い。

例えば、GOOGLEタクシー会社を経営した場合どうなるのだろうか? 

所有者=メーカーなので、

責任者が所有者かメーカーかという議論は全くの無意味だ。 

 ホンダトヨタタクシー会社になれますか? まぁもうレンタル会社もっているけどね。

 結局は、法律議論

自動運転での死亡をどこまで容認できるかの話。


 アメリカなら、「人間よりも安全だね」と損害賠償、結局のところ「金」で決着がつく。


 日本の場合、どの程度の死者を認めることが出来るだろうか?

 それが問題。


■無人タクシー対無人バス

 無人タクシー対無人バス ではタクシーの一強かと言うと微妙。バスの運行コストの7割は人件費。都営なら8割から9割。つまり、無人バスが実用化した場合、運賃が2分の1から4分の1になる可能性がある。一回50円〜100円ですね。現在、東京大阪の高速バスが6000円位なので、3000円くらいになる可能性もある。


 また、バスは決められた道路を走るので、タクシーよりも無人がしやすいというメリットがあり。

 既にオランダでは実験的ですが、実用化しているそうです。


 そもそも論として、

 一回50円〜100円まで価格が下がってしまうと・・・

 料金を取ること、フリーライダー対策の方がバカらしくなってしまう。

 アメリカヨーロッパの場合、バスの運営費の多くは税金なので、いっそうのこと無料なんて世界になりかねない。


■普及順序

 普及順序として考えられるのは、バス→タクシー→レンタカー→個人

 のような気がしますが・・・・


 バス→タクシー まで行った段階で、

 自動車の個人所有という概念が、大衆レベルで壊れているかもしれません。