Coffee Break Script

いわゆる息抜き。

情報幾何学の初学者向け参考書とそのレビュー

情報幾何学”非”数学者が学習する上で参考になりそうな書籍についてレビューする。特に、ニューラルネットワークなどの統計的学習理論を勉強している物理系/情報系/工学系の人間が読む前提で考えている。書籍は日本語に限り、3冊ピックアップした。

※ここに記載されていない本は私が読んでいないだけで、読んだうえで本記事への掲載を取捨選択したわけではないことに注意をしていただきたい。紹介していない有用な参考文献も世の中にはまだまだあると思うし、もしおすすめがあればコメント欄から推薦してほしい。

紹介文献リスト

  1. 情報幾何の方法(甘利俊一・長岡浩司、岩波書店
  2. 情報幾何学の基礎(藤原彰夫、牧野書店)
  3. 代数幾何と学習理論(渡辺澄夫、森北出版)

各書籍の目次比較

コンテンツとしてどのようなものが含まれているか、目次をもとに列挙する。あくまでコンテンツを確認することが目的なので、以下の箇条書きリストが目次と一致しているわけではない。

情報幾何の方法(甘利俊一・長岡浩司、岩波書店

  1. 微分幾何の基礎知識
    1. 微分可能多様体
    2. 接ベクトルと接空間
    3. ベクトル場とテンソル
    4. 部分多様体
    5. Riemann計量
    6. アファイン接続と共変微分
    7. 平坦性
    8. 自己平行な部分多様体
    9. 接続の射影と埋め込み曲率
    10. Riemann接続
  2. 統計的モデルの幾何学的構造
    1. 統計的モデル
    2. Fisher情報行列とRiemann計量
    3. α-接続
  3. 双対接続の理論
    1. 接続の双対性
    2. 双対平坦空間
    3. ダイバージェンス
    4. α-アファイン多様体とα-分布族
    5. 直行双対葉層化
  4. 統計的推論の微分幾何
    1. 統計的推論と指数型分布族
    2. 指数型分布族における統計的推論
    3. 曲指数型分布族における推論
    4. 推定の高次漸近理論
    5. 情報量の分解定理
    6. 検定の高次漸近理論
    7. 推定関数の理論とファイバーバンドル
      1. 局所指数族バンドル
      2. Hilbertバンドルと推定関数
  5. 時系列と線形システムの幾何
    1. システムと時系列の空間
    2. システム空間の計量と接続
    3. 有限次元モデルの幾何学
    4. 安定システムと安定フィードバック
  6. 多元情報理論と統計的推論
    1. 多元情報の統計的推論
    2. 0レートの検定理論
    3. 0レートの推定理論
    4. 一般の多元情報の推論問題
  7. 情報幾何のこれからの話題
    1. 凸解析と線形計画の内点法幾何学
    2. ニューロ多様体非線形システム
    3. Lie群と情報幾何
    4. 量子観測の情報幾何
    5. 情報幾何が提起する数学上の問題

情報幾何学の基礎(藤原彰夫、牧野書店)

  1. 準備
    1. 写像定理
    2. 双対空間
    3. テンソル
  2. Euclid平面の幾何
    1. Euclid空間
    2. 座標系
    3. 接ベクトル
    4. ベクトル場の微分
  3. 局面から多様体
    1. 曲面
    2. 多様体
    3. 接ベクトル空間
    4. ベクトル場
    5. テンソル
  4. 多様体のアファイン接続
    1. ベクトル場の共変微分
    2. アファイン接続
    3. 曲率
    4. 捩率
    5. 平坦な多様体とアファイン座標系
    6. Riemann接続
    7. 部分多様体
  5. 双対アファイン接続の幾何
    1. 双対アファイン接続
    2. 双対平坦な多様体の幾何
  6. 確率分布空間の幾何構造
    1. Chentsovの定理
    2. Fisher軽量とα-接続
    3. 指数型接続と混合型接続
    4. Sn-1の双対微分幾何
    5. 自己平行部分多様体
    6. 双対葉層構造
  7. 統計物理学への応用
    1. 最大エントロピー原理
    2. 平均場近似
  8. 統計的推論への応用
    1. 統計的パラメータ推定
    2. 大偏差原理
    3. 統計的仮説検定
    4. 補足:Cramerの定理
  9. 量子状態空間の幾何構造
    1. 状態と測定
    2. 有限量子状態空間の双対構造
    3. 量子統計的パラメータ推定問題
    4. 補足:作用素単調関数

代数幾何と学習理論(渡辺澄夫、森北出版)

  1. 特異点
    1. 多項式と解析関数
    2. 代数的集合と解析的集合
    3. 臨界点と特異点
    4. 特異点解消定理
    5. 正規交差特異点
    6. 特異点解消定理の応用
    7. 多様体
  2. 代数幾何
    1. ブローアップ
    2. 多項式環イデアル
    3. 代数的集合とイデアル
    4. 射影空間
    5. 代数的集合の特異点
    6. 特異点解消のアルゴリズム
  3. 超関数
    1. 超関数論の基礎
    2. 超関数とゼータ関数
    3. メリン変換
    4. 漸近展開
    5. 一般形の漸近展開
  4. 経験過程
    1. 測度空間・確率空間
    2. 法則収束
    3. 関数空間に値をとる解析関数
    4. 経験過程
    5. 対数尤度比とカルバック情報量
  5. 学習理論
    1. 確率的複雑さの漸近挙動
    2. 汎化誤差の漸近挙動
    3. 学習係数
  6. 学習理論と諸科学
    1. 学習と情報科学
    2. 学習と脳科学
    3. 学習と統計科学

各書籍に対するコメント

情報幾何の方法(甘利俊一・長岡浩司、岩波書店

この分野の先駆者、甘利先生が書かれた本。1993年に出版されてから版は変わっていないようだ。分量も130ページそこそこしかなく、とてもコンパクトにまとまっている印象。エッセンスだけ詰まっている感じなので、分かる人は分かるが言葉が足りないと感じる人もいるかもしれない。情報幾何で使われる基本的な概念、定理などをずらずらと定義していくスタイルなので、発見的学習を後押ししてくれるような示唆に富むタイプの教科書ではない。初学者向けというよりも、すでにある程度知っている人が原理原則を確認するために戻る用のハンドブックという立ち位置にある本だと思う。

情報幾何学の基礎(藤原彰夫、牧野書店)

甘利先生の本の第1~4章をより詳しく解説している感じ。数学を本分としない工学系や情報系の学生向けに書かれているとあってなかなかに読みやすい。大学1回生レベルの数学知識のみを前提としているのも優しい。個人的に嬉しいのは統計物理学との接点について解説してあるところ。たとえば、情報幾何では汎化誤差に関連する指標として「確率的複雑さ」という量が導入されているが、これは「対数周辺尤度」あるいは「自由エネルギー」と呼ばれている。この異名についてはこの後紹介する「代数幾何と学習理論」の中でも触れられているのだが、どこがどう自由エネルギー(ヘルムホルツの方)と関連しているのかということは「代数幾何と学習理論」には書かれていない。他にも最後の章では量子統計との関連から量子計算にも情報幾何が使えるのではないかといったこと(解説ではなく問題提起)が書かれていたりと、物理屋さんには興味のそそられる内容になっていると感じた。

代数幾何と学習理論(渡辺澄夫、森北出版)

この本はとてもユニークであると感じた。まず、情報幾何を特異点や超関数の観点を含めて丁寧に解説している本は他に見たことがない。(学会誌レベルの解説記事では存在する。)そして、数学的な議論を粛々と積み重ねて学問としての情報幾何を解説する王道的な教科書ではない。確かに、大学1回生レベルの線形代数微積分を前提にしているという点では上述の2冊と同じスタートラインから解説を始めるのだが、「(統計的)学習理論」に数学的枠組みを与えるために情報幾何では何を明らかにしようとしているのか、というゴールをはっきりさせたうえで、そこに向かって必要な数学的知識を整理しているとこが新しい。個人的には一番読みやすいと感じた。やはり私のような工学系の人間にとっては、漠然と定理や補題を証明していく数学の本よりは、何のためにこの定理を知る/証明するのかあらかじめはっきりさせておいてくれるこうした本の方がスッキリと読めるような気がする。

まとめ

以上の3冊を使って勉強をするには、「情報幾何学の基礎」で数学的知識を物理学的観点も含めて身につけつつ、「代数幾何と学習理論」で情報幾何学が持っている問題意識と、これまでにどのような知見が得られてきたのかを確認していく、というプロセスをたどるのが良いのではないかと思う。

とりあえず私もざっと読んだだけなので、これから腰を据えてじっくり読み込んでいこうと思っている。

Anaconda Navigatorも含めて諸々アップデートする方法

Anaconda Navigatorの標準機能を利用してパッケージなどのアップデートをかけようとしても失敗する(アップデートが終わらない)場合の対処法について述べる。

失敗するケース

  1. Anaconda Navigatorを起動
  2. Environments > base (root)と仮想環境を選ぶ
  3. 右側のパッケージ一覧でUpdatableを選択する
  4. ポップアップウィンドウが出て「アップデートしますか?」的な質問が出るのでYes的なボタンを押す
  5. アップデート開始
  6. ご臨終(シークバーが進まない/いつまで経っても終わらない)

対処法

  1. Anaconda Navigatorを終了させる(起動してなければ次へ)
  2. スタートメニュー > Anaconda Promptを右クリックして「管理者として実行」を選択
  3. コンソール画面でconda update --allを入力しEnter
  4. アップデート内容の確認メッセージにYと入力してEnter
  5. アップデート開始
  6. アップデート終了(のはず)

とりあえず私の環境(Windows10, Python3.6.1, Anaconda4.5.1)ではうまくいきました。

numba ( @jit ) と try-catch は一緒に使えない

インタープリタ言語であるPythonを高速化させるための、最も手っ取り早い手段がnumbaを使うことです。

from numba import jit

@jit
def function_name(input_args):
    hoge
    hogehoge ...

    return hoge

というコードを書くと、とりあえずそれだけで多少高速化してくれるという優れもの。 どのくらい高速になるのかという検証は他のブログに譲るとして、僕のように「とりあえず動くものが書ければOK」という使い方をしている人間にとってこの@jitは高速化の”おまじない”に等しい。

ところが、このおまじないには一つ弱点がある。try-catchの例外処理が使えないのである。

たとえば、次のようなコードを動かすと…

from numba import jit

@jit
def function_name(input_args):
    hoge ...
    try:
        hoge1
    exception ERROR:
        hoge2

    return hoge

こんな感じのエラーが出ます。(最後の4行だけ抜粋)

    (前略)
  File "C:\ProgramData\Anaconda3\lib\site-packages\numba\controlflow.py", line 515, in run
    assert not inst.is_jump, inst
AssertionError: Failed at object (analyzing bytecode)
SETUP_EXCEPT(arg=XXX, lineno=XXX)

※arg=とlineno=の後のXXXには本来なら数字が入ります。

numbaのcontrolflow.pyでエラーが起きているので、try-catch節を評価して内部状態を遷移させることがそもそもできない仕様になっていると思われます。実際にstackoverflowでもこの問題について触れられていました。

stackoverflow.com

今のところnumbaのjitがtry-catch構文に対応する様子はなさそうなので、『try-catchを使いたい場合は@jitを使わない』というのが唯一の対策なのでしょう。(回避策ご存知の方はコメント欄までお願いいたします。)

これまで全体像を把握しきったデータをハンドリングすることしかしてこなかったので、try-catchをあまり使ってこなかった(単にif文だけ使っていた)のだが、思わぬ落とし穴でした。

同じように困っている人のために記録として残しておきます。 ではでは。

■Qiitaにも要約が載っています。念のため。

qiita.com

iPhoneでホテルなどの認証付き公共Wifiにログインしたいのに認証画面が出ない場合の対処法

現代においてwifiの確保は基本的人権に含まれると言ってもいいでしょう。

特に海外ではなおさらです。

空港、ホテル、レストランなどなどあらゆる場所で無料のwifiが利用できるようになってきています。

ところが……なぜかiOS端末(iPhoneiPad)はこれらの公共wifiとひたすら相性がわるい!!セキュリティが確保されていない(不特定多数がつなげてくる)アクセスポイントへの接続には何らかの制限がかかっているんでしょうか……教えてくわしいひと!

さて、この手のwifiは基本的にオープン(wifi接続画面で鍵のマークがついていない)のですが、いざログインしようとするとユーザー名やパスワード(たいていはその両方)の入力を求められることになります。PC(MacbookとかMacbookAirとか)ではこのログイン画面がデスクトップ上にポップアップで出現するので、ホテルの人などから聞いたログイン情報を打ち込めば接続できるようになります。

問題はiOS端末(iPhoneiPad)のケースです。ログイン情報を入力するためのポップアップ画面がいつまで経っても出てきません。SafariなどのWebブラウザでGoogleのトップページなどを表示しようとするとたまーに入力画面が出現しますが、かなり稀です。

では、どうしたらよいか。答えはひとつ!

SafariAppleのトップページをひらけ!

これだけ。ですが注意点が一つ。通常のAppleのトップページはhttpsで始まりますが、httpで始まるURLにアクセスしましょう。そうするとリダイレクトされてhttpsで始まるAppleの公式サイトが表示されるか、ログイン情報を入力するためのページがSafariで表示されるようになります。

念のため、アクセスすべきURLをベタ打ちで貼っておきます。

http://www.apple.com

以上のテクニック、古いですがソースはこれです。2018年5月現在、うまくいっています。

https://discussions.apple.com/thread/4507909

そのほか、タウンWiFiというアプリを使うと日本国内限定ですが公衆WiFiに自動で繋げてくれます。WiFi接続を前提に格安SIMを使っている人や、通信容量を節約したい人向けです。

タウンWiFi 話題のギガ節約アプリ

タウンWiFi 話題のギガ節約アプリ

  • TownWiFi Inc.
  • ユーティリティ
  • 無料

ではでは。

TeXに行番号をつけるTips

久しぶりの更新ですね。

ところでみなさん、論文やレポートは何で書いてるんでしょうか。

Wordでしょうか? マカーはPagesとか使う人もいそうですね。

そういう人はこの記事を読まないでください。

さ、というわけで()TeXのTips紹介です。

共著者に論文をチェックしてもらったり、ジャーナルに投稿して査読してもらう段階(final camera ready原稿ではない段階)では、論文に行番号を入れて「何行目のここが〜」とかチェック/議論しやすくしておく、というのがデキる投稿者の気遣いらしいです。

TeXのよくあるディストリビューション(奥村先生の美文書本の付属CDとか)を入れている人は、おそらくlineno.styというパッケージが入っているはずで、これを使えば基本的にOK。

しかし、数式の入った段落では不具合が生じるらしく(追記参照)、プリアンブルにおまじないが必要になるとのこと。 ということで、

% line numbers
\usepackage{lineno}
\newcommand*\patchAmsMathEnvironmentForLineno[1]{
  \expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname
  \expandafter\let\csname oldend#1\expandafter\endcsname\csname end#1\endcsname
  \renewenvironment{#1}
     {\linenomath\csname old#1\endcsname}
     {\csname oldend#1\endcsname\endlinenomath}}
\newcommand*\patchBothAmsMathEnvironmentsForLineno[1]{
  \patchAmsMathEnvironmentForLineno{#1}
  \patchAmsMathEnvironmentForLineno{#1*}}
\AtBeginDocument{
\patchBothAmsMathEnvironmentsForLineno{equation}
\patchBothAmsMathEnvironmentsForLineno{align}
\patchBothAmsMathEnvironmentsForLineno{flalign}
\patchBothAmsMathEnvironmentsForLineno{alignat}
\patchBothAmsMathEnvironmentsForLineno{gather}
\patchBothAmsMathEnvironmentsForLineno{multline}
}
\linenumbers

をプリアンブルにコピペしましょう。こうすれば万事解決です。

ではでは。

■追記(2018/5/23)

不都合というのは「数式に行番号が振られない」ということです。通常は数式には別途数式番号が振られているはずなので、地の文はlineo.styによって振った行番号、数式は数式番号をそれぞれ使えば指示箇所を一意に定めることができるはずです。

ですので、特に不都合ではないよという人は下記のようにシンプルなプリアンブルで事足ります。

% line numbers
\usepackage{lineno}
\linenumbers

追記以上。

wing 37

今日はガッツリ内輪の話。 wingとかtsubasaでピンとくる人にしか伝わらないことです。

今年のwingでは、運営にはほぼまったく関与せず、3日目の途中からお手伝い・雑用・ドライバーという形で参加しました。 数年前の参加者だった子たちが運営側で戻っているという、その時点ですでに嬉しい回だったわけだけど、自分にとってもtsubasa歴ちょうど10年目という節目のwingだったので、そこに多少なりとも関われたというのは、また別の感動がありました。

さて、運営状況については…多少、というか直前になるまでバタバタしていて、細かいところまでフォローされてなかったなぁという感じなのですが。それについて、実行委員長のおっさんから「お前からビシッと言ってくれ、俺は怒るだけの体力がもうない」とかいう卑怯で姑息な圧力がかかったので、泣いて馬謖を斬る思いで、スタッフの子に小言を言いました。

でも、例年よりもスタッフ陣がピンピンしていて、夜ゼミに参加したりと楽しんでいたのが印象的でした。あれはかなりいいと思います。というか、「当日は重要項目を再確認・再点検するだけでもうほとんど準備することがなく、スタッフ陣も班長たち並みにふらっと講義とか夜ゼミに参加しにいける」っていうのが理想だと思うんです。 そういう意味では、今回のスタッフの雰囲気はなかなかいいものだったと(外野から見ている限りは)思いました。

ということで、やっと雑感を書くことができました。 もう1ヶ月以上、優に過ぎているけど。

来年のwing38の運営陣募集もかかりましたね。 wing40くらいまではなんとか続くといいけどなぁ。

「Pythonからはじめる数学入門」買ってみた

スペイン語の入門書を探していたのに、いつの間にかPython本を買っていました。 どうもosaKBです。

その名も Pythonからはじめる数学入門

Pythonからはじめる数学入門

Pythonからはじめる数学入門

純粋なオライリー本ではなく、オライリー・ジャパンが独自に日本語訳版を出版してくれています。 こういう本はあまり見ないので感謝ですね。

ざっと目次だけ紹介すると、

  1. 数を扱う
  2. データをグラフで可視化する
  3. データを統計量で記述する
  4. SymPyで代数と式を計算する
  5. 集合と確率を操作する
  6. 幾何図形とフラクタルを描画する
  7. 初等解析問題を解く

となっています。 普段Pythonを使う時はNumpyばっかりでSymPyはほとんど使わないし、そういう状況ではだいたいMathematicaを使ってしまうので←

これを機に勉強してみよう、と。

せっかくなので、章末問題を解いたらここにアップしていこうかな、とか思ったり思わなかったり。

ざっと目を通した感じ、ほとんどがインタラクティブシェル(Python対話型シェル・IDLE)を例に説明されているので、あまり慣れていない人にも取り組みやすいと思います。 (個人的には、JetBrains社のPyCarmかIntelliJ IDEAの使用をオススメします。まじでいいよ。)