そこそこ日記

2016-07-10

2016年、参院選挙の興味深かった点

| 00:26

今回の選挙の面白かった点。昼のワイドショーを見ると、参院選よりも、都知事選挙のネタの方が時間が遥かに多かった。


18歳選挙が注目されたけど、18歳が判断するための情報・材料があまり提示されなかった。


公平な報道を重視したためか、なんか全般的にボヤけた感じだった。


自民党HPの教師密告制度なんか、かなり興味深いものだったけど。

《党文部科学部会では学校教育における政治的中立性の徹底的な確保等を求める提言を取りまとめ、不偏不党の教育を求めているところですが、教育現場の中には「教育の政治的中立はありえない」、あるいは「子供たちを戦場に送るな」と主張し中立性を逸脱した教育を行う先生方がいることも事実です。

学校現場における主権者教育が重要な意味を持つ中、偏向した教育が行われることで、生徒の多面的多角的な視点を失わせてしまう恐れがあり、高校等で行われる模擬投票等で意図的に政治色の強い偏向教育を行うことで、特定のイデオロギーに染まった結論が導き出されることをわが党は危惧しております。》

なぜか、全くテレビなどでは取り上げられず。


バングラティッシュテロも微妙だったな。

2015年10月に日本人がバングラデシュで日本人という理由で殺された。

(日本は有志連合に参加しているから)

2016年のテロの祭に、上記の事件との関連性を上げた日本人評論家は、ほとんどいなかった。

私が読んだ限りでは、読売新聞で外国人評論家が、指摘したぐらい。

ワイドショーなどでも取り上げず。


日本のマスメディア自殺しているのを象徴した選挙に見えた。

2016-06-12

 どうでも良いところで、デバッグの際、USB接続のandroidの実機が認識できない。

| 20:30

 windows環境からmacへ移行。

 その際、開発環境をeclipseからandroid studioに変えたんだけど・・・

 USB接続のandroidが認識されない。

 なぜだ?

 マックは自動的に認識されるのではないのか?

 実は、どうでも良いところでミスをしていた。

 USBケーブルが痛んでいたので、近くにあったのに変えたのだが、これが悪かった。

 電源の充電は出来るけど、データ転送ができないUSBケーブルだったのだ。

 ケーブルから得た認識された。

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出力になってしまったわけです。