北野坂備忘録

主にインストールやプログラミングのメモを載せています。

『パターン認識と機械学習』(黄色本)再読

 PRML(『パターン認識機械学習』)の上巻に再度手を伸ばしました。

パターン認識と機械学習 上
 去年の5月ぐらいに読んだときは全く理解できなかった内容が「これも分かる!あれも分かる!」となり、まるで『グラップラー刃牙』の序盤で山籠もりの結果勇次郎の攻撃を見切れるようになった公園本部のような感動を味わっています。
(そして直後に一撃喰らわされて終わるところまでがテンプレ)

Ubuntu15.04 に Caffeをインストールした際のメモ

hdf5関係でコンパイル失敗。2箇所でひっかかる。

./include/caffe/data_layers.hpp:9:18: fatal error: hdf5.h: no such file or directory
/usr/bin/ld: cannot find -lhdf5_hl
/usr/bin/ld: cannot find -lhdf5

Makefile.configの以下の2行を変更。

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

軽量言語からJavaに移って苦労している人はデザインパターンの本を読むと良い

 デザインパターンの本は何冊か読みましたが、当時はいまひとつピンときませんでした。
 行番号付きBASICからはじまってC言語Ruby、R、Pythonとクソコードを書き散らしてきましたが、あまりデザインパターンの必要性を感じなかった。
 話が変わったのがJavaに触れてからです。
 interface、extends、implementsという拡張のさせかたがしっくりと来ず、リストリクト過ぎてどうすれば自分の思った通りのことが実現できるのか分からない。
 そんな時に出会ったのがこの本です。

Javaデザインパターン徹底攻略 (標準プログラマーズライブラリ)
 私が参考になったのはこの本でいう7番の「Bridgeパターン」でした。2つのクラスはそのまま残しておかないといけなくて、しかしながらそいつらを組み合わせたクラスを作らないといけない。RubyとかPythonならまあ予想はつくんですが、Javaでどうすればいいか頭を抱えていたところこの本を読んで「おお、こうするのか!」と呻きました。
 そのとき初めてデザインパターンの威力を実感しました。というか今でもJavaでしか実感したことがない。
 このように、Ruby、R、Pythonといった軽量言語(この言葉もあまり一般的ではないですが)から極めて制限の強いJavaに移って「もどかしさ」を感じられておられる方は、デザインパターンを勉強すれば若干苦しみが減ると思います。

VMWare上のUbuntuのネットワークが不安定(メモ)

 ひっさしぶりに立ち上げたVMWare上のUbuntuのネットワークが不安定。
 しばらくすると切れるけども、また接続される。
 これでは仕事にならない。

 VMWareの「仮想マシン設定」を確認。
 ネットワークアダプタがNATになってる……?
 別件で別のVMの「仮想マシン設定」のネットワークアダプタが「ブリッジ(自動)」になっていたことを思い出す。
 ネットワークアダプタを「ブリッジ(自動)」に変更。
 しばらくpingを飛ばし続けたが、さきほどと違ってときどき4pingほど失敗することがなくなり、安定しました。
 いったい過去の自分は何の目的があってNATにしたのか……?

正規方程式とは何か

 数学の得意な人間はだいたいにおいてそうでない人間から見るとたいへん冷たいです。
「正規方程式とは何か?」という文系からの問いに、「最小二乗法を勉強すれば分かるでしょう?」という、木で鼻をくくったような回答をします。
 そもそも文系からすると「この『正規』という単語はどこから湧いて来たのか。どういう意味なのか」をまず知りたいのです。英語でいうとNormal Equationです。このNormalが何を指しているのかをまず知りたい。
 しかしながらポンと数式を出して「これが正規方程式です」で終わる。
 しかもその正規方程式が書籍やサイトによってまるで違う!(ように見える)

 『はじめてのパターン認識』だとこうです。

(1) {
\hat{w}=({X}^{T}X)^{-1}{X}^{T}t
}

 Wikipediaだとこうです。

(2) {
{G}^{T}Ga={G}^{T}y
}

 そして一番分かりやすいであろう「高校数学の美しい物語」ではこうです。

(3) {
{A}^{T}Ax={A}^{T}b
}

 文系にはこれが全く違う式に見えます。せいぜい「(2)と(3)がなんか似てるかな……?」と思うぐらい。

 「正規方程式とは、条件さえ合えば解析的に最小二乗法が解ける式だけれども、大規模な疎行列のように特徴(変数)が多くなってくるとコストがかかるので勾配法で解いた方が良い」というのが文系が求める機械学習的な回答かと思います。

VMWare追加ネットワークアダプタ設定の罠

 ネットワークアダプタ2を追加する。
f:id:kenichia:20160706224958p:plain
 ネットワークアダプタ(無印)側の「アダプタの設定」を変更する。
f:id:kenichia:20160706225002p:plain

これを
f:id:kenichia:20160706225004p:plain
こうすると……
f:id:kenichia:20160706225006p:plain

 「ネットワークアダプタ2」の設定まで勝手に連動して変わってる!
f:id:kenichia:20160706225008p:plain
 ネットワークアダプタ追加する意味がないだろ!
※昔のVMWareでは専用のブリッジ設定ソフトが付属していてそれぞれ別の設定が可能だったとのこと。

パチンコ配分モデル

 トピックモデル本を読んでいると、

トピックモデル (機械学習プロフェッショナルシリーズ)
 「パチンコ配分モデル」というパワーワードに突き当たりました。
 名前だけでイメージするとまるで「パチンコ玉を配分するようなモデル」に思えますが、実際にはパチンコ玉が上から下に落ちていくときの「通過した上の位置に対応して下の位置が制限される状態」をイメージしたモデルです。
 この名称だと日本人以外には分からないし、日本人だとしてもパチンコをやったことのない人にはイメージできないでしょう。
 モデルのネーミング担当者はラリッていたのではないか。ボブは訝しんだ。
.