実体と情報のはざま

何事にも囚われず。

都立中央図書館でデータサイエンス(SOM)を学習した

 今日は仕事を休んで都立中央図書館へ行ってきました。世間的にはGWだし、混むかな~と思ったけど案外すいてて快適でした。

f:id:myuteru:20170502194527j:plain

ここにはものすごくお世話になっていてほんとその存在に感謝してます。

図書館としての魅力は下記。

・蔵書が多い。

・本の貸出はしていないので、とってもきれい!

・新しい本でもちゃんとある。

・子供だけでは入れないため非常に静か。

 図書館以外の魅力は、立地と周囲の環境です。有栖川宮記念公園の一部にあるため、緑がいっぱい。しかも木々の太さが半端じゃない。古いお寺に生えているような立派な木が沢山生えています。いろんな鳥の声がするし、癒される~。今日も開館前に到着したので外のベンチで本読みながらリラックスしてました。

f:id:myuteru:20170502195243j:plain

公園内には池があり、写真には写っていないけど、亀が気持ちよさそうに泳いでいました。

f:id:myuteru:20170502195757j:plain

ちょっとした公園もあるので、昼過ぎになると外国人の親子がよく遊んでいます。近くに大使館が沢山あるので、そこの職員の方々なんだと思います。

f:id:myuteru:20170502195910j:plain

 一通り、魅力をかたったところで、今日、何しに行ったかというと、SOMを中心にデータサイエンス全般について学んできました。会社休んでデータサイエンスの勉強ですよ。スキルアップとかそういうんじゃなくて、本当に知識欲で。子供たちは今日は普通の平日だから学校だったり幼稚園だったりするし。嫁はママ友たちとどっか行くみたいだし。黙々と勉強するチャンスだったのさ。

 そんなわけで、開館から夕方までみっちり勉強して、充実した一日でした。

では、また。

自己組織化マップ(SOM)って何?インフォグラフィックみたいで美しい!

 人工知能(AI)への興味から統計解析の学び直しを経て、これらに関連するアルゴリズムである自己組織化マップ(以下、SOM)の存在に気が付いた。まだ、ちゃんと理解していないのだけれども、ライフワークとして学ぶべき対象が定まった気がする。

 さっそく、「原点は押さえておかないと!」との思いから、T.コホネン著「自己組織化マップ」を購入した。私にはかなり高額な本で、これからゴールデンウィークだというのに財布が軽くなってしもうた。。手にした本は値段なりに分厚くて頼もしい!ネット上のレビューに翻訳がいまいちみたいなことが書かれていたが、”改訂版”だからか、全然気にならずに読めそう。

 SOMのどこが私の琴線に触れたかというと、ビジュアル。計算結果が視覚的に美しいこと。論文とか文献によってはゴチャゴチャしていて美しくないモノもあるのだが、ちゃんと意識して表示すればかなりきれいになるんじゃないかってやつが沢山ある。ニューラルネットワークを初めて見た時も美しいとは思ったけど、それはニューラルネット自体の美しさであって、結果は渋いですよね。例えば、顔認識がちゃんとできました!ってすごいことだけど、結果は写真に枠が追記されて”ココです”みたいな。それはそれで好きなんだけどさ。やっぱ、結果がバーンと美しいと気持ちがいい。

 昔から、インフォグラフィック(路線図なども含む)に興味があって、仕事のプレゼン資料でなんちゃってインフォグラフィックを使ったりしてる。インフォグラフィックとは意味ある情報をビジュアルを生かして伝えるもの。きれいに描かれたSOMはそれ自体がインフォグラフィックと呼んでもよいものかもしれない。

 SOMのもうひとついいなと思ったところは、まだ発展中であること。2017年にも文献は出ているようだし、専門でやっている日本の大学の研究室もあるようだ。統計解析の手法と組み合わせたりして進化している。

 SOMの基本的な機能としては、高次元のデータを分類(圧縮?)して低次元のマップに表示すること。本の説明によるとニューラルネットワークとのつながりが強調されているが、基礎的なアルゴリズムすらせいぜい2層(入力層と競合層)だし、ちょっと雰囲気が違うかなって思う。

 少しずつでいいからマスターして、自分なりのアルゴリズムで美しいインフォグラフィックが描ければいいな~~。よし、明日は会社休んで図書館で勉強じゃー!

では、また。

統計解析を学び直し!【相関係数/回帰分析】

前回同様、ベクトルで表現してみる。

相関係数

f:id:myuteru:20170430224324p:plain

ベクトルで表現すると、内積であることが視覚的によくわかる。

f:id:myuteru:20170430225122p:plain こうしてまとめると、

f:id:myuteru:20170430225155p:plain こうなる。もう完全にベクトルの内積の式。

ということは、

f:id:myuteru:20170430225409p:plain

であることは明らか。正体は”cosθ”ですから。

 線形の相関しか表現できないのだけれど、応用範囲はかなり広い。私の場合は画像処理の仕事で大変お世話になっている。画像Aと画像Bが似ているかどうかを見極める”パターンマッチング”というアルゴリズム。古典的だけどとっても扱いやすい。

 あと、Webサイトで商品の”レコメンド”に使われているらしい。似たような購入パターンの人を見定めて、次に買いそうなモノをおススメするやつ。数式だけならただのベクトルの内積なのに役に立ちますね~。

*今、TVで情熱大陸見ながら書いてるんだけど、アートディレクターの吉田ユニってすごい。俺もピンですごい作品つくりたいな。アルゴリズムとかで。

 次、回帰分析。教科書的には色々こまかいことあるけれど、ざっくり直線近似って考えればいい。

【回帰分析】

 今は、もっとも単純な線形単回帰分析についてベクトル表現でまとめてみる。予測と実データの残差Qを最小化することで式を得る。残差は、実測データxとy、未知係数をaとbとした一次式で考える。すると、下記のように記述できる。

f:id:myuteru:20170430235233p:plain 

この残差の極値を考えると、次のような式が得られる。

f:id:myuteru:20170501000610p:plain

整理すると、

f:id:myuteru:20170501000717p:plain

これが解くべき連立方程式。ちょっと計算していくと、

f:id:myuteru:20170501000758p:plain こうなって、

下の式を冷静に見つめてみると、前回やった平均が見えてくるので、

f:id:myuteru:20170501000820p:plainとなる。最後の式は重心を通ることを意味する。

先の式より、

f:id:myuteru:20170501001159p:plainが得られ、近似式はこのaとbで語られる。

ベクトル表現だと、すっごいすっきりする。

 ちょっと前の記事で、ニューラルネットワークを使って回帰分析と同じことをやった。無論、バックプロパゲーションを用いるのでそれなりに手間はかかるが、解法としてあっちの方がしっくりくるのはなぜだろう。問題の状況設定を構図に落とし込んで解くからイメージしやすいのかな。信頼性は回帰分析の方が上なんだけどね。

 では、また。

統計解析を学び直し!【平均/分散/標準偏差】

 最近、AIをゼロから理解したいと思い、ニューラルネットワークを勉強中。さらに、関連する統計解析も学びたいと思ってページを開いたが…全然頭に入ってこない。基礎の基礎から自分が腑に落ちる形で学びなおしたい!

というわけで、まずはほんとの基礎量に関する表現の話。

【平均】

f:id:myuteru:20170429215417p:plain

 ふつうはこう表現する。しかし、シグマ記号がスッと入ってこない。ちっちゃい"i"とか"n"を見ていると脳が若干停止する。

 そこで、データをベクトルで表現する。まずは、ベクトルを用意する。

f:id:myuteru:20170429215939p:plainこれがデータ。f:id:myuteru:20170429221039p:plain単位ベクトルの足し合わせ。

これらを用いると、平均はこう表現できる。

f:id:myuteru:20170429221135p:plain

あ~、すっきり。イメージしやすい。

 ついでに思いついたことは、uの成分にnを入れると”期待値”として見えること。

f:id:myuteru:20170429222702p:plainとすると、こうなる。

f:id:myuteru:20170429223119p:plain

これって、【期待値=データ×確率】 って解釈できる。

次、いってみよう。

【分散】

f:id:myuteru:20170429223822p:plain

ふつうはこう表現する。平均と同様に書くとどうなるか?

f:id:myuteru:20170429224250p:plain

すっきり。ただし、基本的な注意点として、nで割っているところは、(n-1)にすることもある。使い分けとしては、nで割る場合はデータが”母集団”である場合で、(n-1)は”標本”とみなす場合。

 標準偏差はこのルートをとるだけ。

標準偏差

f:id:myuteru:20170429225011p:plain

 ベクトルで表現しているほうが、視覚的に的で扱いやすい。

次に、具体的な計算の例。ベクトルとか関係ないけど。

”年齢別の人口”なんてのはどうでしょう。いきなり計算結果。

男 平均=各年齢に60.4万人、分散=738.8、標準偏差=27.2

女 平均=各年齢に64.0万人、分散=597.3、標準偏差=24.4

f:id:myuteru:20170429234230p:plain

出典 総務省統計局「日本の統計 2017」*数値データを加工しグラフ化

ただし、100歳以上は100歳として計算しました。

特に、これといった発見はないですね。。平均とか分散とか関係なく、少子高齢化が見て取れるくらいかな。あと、男が短命ってこと・・・。

では、また。

息子が熱出した。。扁桃腺!?

 本日、中学生の長男が発熱しましてね。子供が熱出すとほんとに大変。辛そうな表情は見ているだけでこっちも疲れてくるし、いろんなスケジュールが一気に変わるし。

 まず、親が思うことは「原因は何か?」ってことですよね。でも考える前に、まずは「うつるやつかもしれないから感染経路を絶たなければ!」ってことで家族全員マスク装着。寝室も隔離。

 でも今回はうつるやつじゃなかった。医師によると、疲労(たぶん部活)とストレス(たぶん塾)が原因で免疫機能が低下して引き起こされた扁桃腺のハレとのこと。いわば、軽い単独事故みたいなもん。やれやれ。普段から免疫アップしそうな食べ物を食べさせているつもりなんだけどな~。ビタミンCとか乳酸菌飲料とかを飲ませたほうがいいのかな。

 ちょっと気になったので調べたこと。医師の数。お医者さんってひとくくりに言っても、色々な専門分野があってよくわからんけど、ざっくりどれくらいいるんだろうか?ウチの近くには比較的病院の数が多くて助かるんだけど、それでも仕事から帰ってきてから息子を連れて病院となると選択肢がほとんどない。医者の数がもっと多ければ競争原理で(?)遅くまでやってくれるかもな~なんて思ったりして。

 さっそく、大好きな、総務省統計局「日本の統計」をのぞいてみた。

f:id:myuteru:20170426225144p:plain

出典 総務省統計局「日本の統計 2017」

*10万人あたりを1000人あたりに換算しグラフ化。年号を西暦に変更。

 大体、大都市の小学校って1000人/校くらいですよね。それくらいの人数を2~3人で診ているんですね。内科/外科/小児科とか分野別に考えると、小数点以下になるんでしょうか。まあ、実際には地域差とか大きそうだけど。結局、多いか少ないかよくわからないけど、小学校の保健の先生が各校に1人ってことを考えると適切なような気もする。

 ただ、最近のデータはなかったけど2014年までは右肩上がりなんですね!なんと頼もしい。高齢化社会ですからね。必要なんでしょうね。

 じゃあ、世界はどうなんだろ。同じく人口1000人当たりの医師数をランキングっぽく並べてみた。

f:id:myuteru:20170427000726p:plain

出典 総務省統計局「世界の統計 2017」*順番を変えてグラフ化

赤いやつが日本。多くもなく少なくもなく。異様に多い国もあればゼロの国もあるようだ。さらに詳細をしらべたら何かドラマが待っている気がする。

 だけど、大切なことは、お医者様の数とかではなく、病気を未然に防ぐことだと思う。我が息子よ、自助努力お願いします。風呂出たら、早く髪の毛を乾かさんかい! ・・・早期の回復を祈る。

 では、また。

 エクセルVBAを使って、ニューラルネットワークで関数近似

 この一週間、通勤電車の中でAIの本、特にDNNとかCNNとか呼ばれる深層学習ものを中心に読んだ。で、腑に落ちた文言がこれ。

ニューラルネットワーク関数近似器」

 多くのパラメーターを層状に重ねるのは関数を近似するためだったんだね。世界が量子力学相対性理論で記述できるとすれば、物事全て関数でできているとも考えられる。それらを近似できそうなところに魅力を感じるのかな。

 と、いうわけで、まずは、”囲碁で勝つ”とか高度なことは考えないで、関数の近似から始めようと思う。チリもツモれば山となるかも。

 本から学んだことから、私なりに手順を考えた。

  1. 近似したい対象にマッチしたネットワークを描く。
  2. 活性化関数を決める。(こいつがあると非線形にも対応可。)
  3. 誤差関数を決める。(二乗のやつとかエントロピーとか。)
  4. 更新の仕方を決める。(バッチとかミニバッチとか。)
  5. 全体の数式を整理。
  6. レッツ、プログラミング。(苦手ですが。。)

じゃあ、1から。

【近似したい対象にマッチしたネットワークを描く。】

 今回はニューラルネットワーク関数近似っぷりを実感できればいいので、簡単に。ニューロンみたいなやつ一本だけ。近似できるのは一次関数だけだろうな。

f:id:myuteru:20170419233026p:plain

xは入力データ、wは重み、bはバイアス、f()は活性化関数、uは出力、Eは誤差関数、tは教師データ。一本でも基本要素はちゃんとね。

【活性化関数を決める。】

今回はなし。yからuへ、スルーパス

【誤差関数を決める。】

直観的で分かりやすいから二乗誤差を採用だ。

【パラメーターの更新の仕方を決める。】

今回は、逐一更新する。過学習とか関係ないし。

データ入力から誤差逆伝播までの数式を整理。

縦書きの方が直観的でプログラミングに自然に移れる気がする。

f:id:myuteru:20170422051818p:plain

 pは学習係数。こんな単純な構造なのに、誤差逆伝播(Back Propagation)法の部分は煩雑。深層学習ともなればごちゃごちゃしそうだわ。

レッツ、プログラミング

  関数近似する対象は、総務省統計局が発行している「日本の統計」から引用したいと思う。これ、ほんと好きで手元にあるとなんかいい。あ、これ面白い。「年齢別 体力・運動能力(平成27年)」。”握力”。でもニューロン一本じゃぴったりいかないと思うけど。まあいいか。

出典 総務省統計局「日本の統計 2017」 *引用した数値をグラフ化

f:id:myuteru:20170420002359p:plain

思春期あたりでグンと伸びるのね。自分のことは昔すぎて忘れたわ。

プログラムはエクセルのVBAを使用。ソースコードはこんな感じ。記号そのまんま。さっき描いた図を順番にコーディングしたようなもの。

f:id:myuteru:20170420003737p:plain

 で、結果はこんな感じ。

f:id:myuteru:20170420004116p:plain

あ~、なんか、うまくいった気がする。wとpの初期値適当だけど。。

 このときの誤差と因子の変化がこれ↓。あんまり考えないでやったけどちゃんと収束していく様子が分かる。大したことしてないけど面白い~。

f:id:myuteru:20170420004137p:plain

 誤差が残るのはあたりまえ。線形関数で非線形関数を近似しているようなものだから。これって単回帰分析だよね。

 

 もひとつ、誤差関数をクロスエントロピーにしてみる。使い分けとかよくわからんし。えい!

f:id:myuteru:20170426232612p:plain f:id:myuteru:20170426232826p:plain

 あれ?なにこれ?あー、エクセルの数値確認したら誤差がマイナスになっておる。右のグラフは縦軸にlog使ってるから表示されてないんだ。。

 理由はすぐわかった。クロスエントロピーって、1以下の値が入力されないとだめなのね。頭にマイナスついてるから。そっか、だから画像認識とかでは使われるんだ。「この画像は猫です。」とかいう判定は、出力を0~1に規格化して出力するもんだものね。

f:id:myuteru:20170426233405p:plain

ようけ学んだ。

今日はここまで。では、また。

岸根公園にお出かけ。桜満開?

 今日は幼稚園児の息子と2人で、横浜市岸根公園に行ってきました。近場で広くて気持ちがよい公園なので時々利用します。

 岸根公園は[ぴあMOOK「こどもとおでかけ365日」]という本にも紹介されており、そこそこ名の知られた公園です。

 私の場合、上記のような本を参考にして週末の予定や旅行先の遊び場を模索します。ネットの時代ですが本の見やすさや扱いやすさってデジタルにはない素晴らしさがあると思います。同じようなコンテンツを読む場合でも、紙の本のほうがイメージが膨らむというか頭が働きやすいというか。ネットの場合はクリックしてから表示されるまでのほんのわずかなタイムラグが思考の興奮を冷やしてしまうのだと勝手に思っています。

 話がそれました。。起きた時間が遅かったため午前10:30頃に家を出ました。いつもは車で行くのですが、今日は初めて電車を利用しました。普通の土日でさえ昼前には駐車場が満車になる盛況ぶりなので、きっとお花見シーズンの今は入れないだろうと。

 地下鉄ブルーライン岸根公園駅で降り、出口を出て右方向へ数歩進むと、右手に見えるのが岸根公園でした。1分で到着です。お昼ご飯を持っていなかったのでその場であたりを見回したところ、道路を挟んで向かい側にコンビニが二軒とお弁当屋さんがありました。なんて便利なのでしょう!車で来るときは荷物の量を気にしないためお弁当は持参していたので、気づきませんでした。

 公園に入ってすぐのところに大きな池があり、大きな亀たちが甲羅干しをしていました。すこし奥に進むと期待していたよりは控えめに桜が咲いていました。しかし、その下にはお花見の人たちのなんと多いこと!まだ冷たい春風にのってお酒の匂いが漂ってきました。

 私と息子はお花見グループに気を使いつつ、きれいに咲いている桜と写真を撮った後、かなり奥にある遊具へと向かいました。いつもの土日より明らかに混んでいましたが、特にトラブルもなく遊具で遊んだり、かくれんぼ、鬼ごっこなどを1時間半ほど楽しみました。

 近場の公園の存在って、子供の成長にとってありがたいなといつも思います。運動して丈夫な体をつくるだけではなく、良いイメージの記憶がある場所というのは何かの時の心の支えになると思います。自分にとってのパワースポットみたいな。私にもそういう場所があり、忙しかった父親との数少ない思い出が詰まっています。いつか息子が成長してこんな感じで振り返ってくれたらと思います。横浜市の公園管理関係者のみなさま、これからも公園の存続をよろしくお願いします。

 では、また。