ハイパーパラメータを管理したい
機械学習・ディープラーニングを実験していると、どうしても避けられないのがハイパーパラメータ周りの処理。
ちゃんとグローバル変数とかを書いて処理したいものの、Pythonは変数の名前空間が比較的ふわふわしているので、そのあたりをサポートする関数を用意しました。
概略としては、グローバル変数として持っておきたいものをYAMLまたはJSON形式で準備し、そのファイルを読み込み、グローバルな辞書型の変数として持っておくことで、プログラム中のどこからでも呼び出せるようにするというものです。デフォルトの値はload_params関数の中で直接定義できるようにしていて、もしこれらと同じ名前の変数がyaml/jsonで与えられた場合には、デフォルト値を上書き更新するようになっています。つまり、yaml/jsonファイル自体が実験条件の履歴になります。(なお、yamlファイルはコメントアウトが可能なので、jsonよりもyaml推奨です。)
自分は、実行日時をパラメータとして辞書型変数に格納しておくようにして、main関数の一番最後でパラメータを格納した辞書変数をjson/yamlでファイルに出力するようにしています。こうしておけば、いつ、どのパラメータで実験を実行したか後から見返すことができるようになるので。
Qiita: 湧源クラブ Advent Calendar 1日目
こちらは Qiita: 湧源クラブ Advent Calendar 2019
1日目の記事です!
ここ10年ほどで、湧源クラブ員にもプロ・アマ問わず情報系の人々が爆発的に増加してきた気がしています。 最近は大定例会で自己紹介しながら競プロしている子がいたり、 セミナーに来る高校生も、プログラミング経験者の割合が増えてきている感覚があります。
そんなこんなで、そろそろアドベントカレンダーやってもいいんじゃね、ということで今回企画してみました。
25枠分まだ埋まっていなくてスカスカ具合が少し気にはなりますが、きっと色々なバックグラウンド・興味関心をもった仲間が様々な取り組みの記事を書いてくれることでしょう!(期待しています。)
投稿者の方へ!(12/2追記)
投稿者の方は、記事の冒頭あたりにAdvent Calendarのトップページへのリンクを貼っておいてください。
URLはこちらです → https://qiita.com/advent-calendar/2019/yugen
情報幾何学の初学者向け参考書とそのレビュー
情報幾何学を”非”数学者
が学習する上で参考になりそうな書籍についてレビューする。特に、ニューラルネットワークなどの統計的学習理論を勉強している物理系/情報系/工学系の人間が読む前提で考えている。書籍は日本語に限り、3冊ピックアップした。
※ここに記載されていない本は私が読んでいないだけで、読んだうえで本記事への掲載を取捨選択したわけではないことに注意をしていただきたい。紹介していない有用な参考文献も世の中にはまだまだあると思うし、もしおすすめがあればコメント欄から推薦してほしい。
紹介文献リスト
各書籍の目次比較
コンテンツとしてどのようなものが含まれているか、目次をもとに列挙する。あくまでコンテンツを確認することが目的なので、以下の箇条書きリストが目次と一致しているわけではない。
情報幾何の方法(甘利俊一・長岡浩司、岩波書店)
- 微分幾何の基礎知識
- 統計的モデルの幾何学的構造
- 統計的モデル
- Fisher情報行列とRiemann計量
- α-接続
- 双対接続の理論
- 統計的推論の微分幾何
- 統計的推論と指数型分布族
- 指数型分布族における統計的推論
- 曲指数型分布族における推論
- 推定の高次漸近理論
- 情報量の分解定理
- 検定の高次漸近理論
- 推定関数の理論とファイバーバンドル
- 局所指数族バンドル
- Hilbertバンドルと推定関数
- 時系列と線形システムの幾何
- システムと時系列の空間
- システム空間の計量と接続
- 有限次元モデルの幾何学
- 安定システムと安定フィードバック
- 多元情報理論と統計的推論
- 多元情報の統計的推論
- 0レートの検定理論
- 0レートの推定理論
- 一般の多元情報の推論問題
- 情報幾何のこれからの話題
情報幾何学の基礎(藤原彰夫、牧野書店)
- 準備
- Euclid平面の幾何
- Euclid空間
- 座標系
- 接ベクトル
- ベクトル場の微分
- 局面から多様体へ
- 多様体のアファイン接続
- 双対アファイン接続の幾何
- 双対アファイン接続
- 双対平坦な多様体の幾何
- 確率分布空間の幾何構造
- 統計物理学への応用
- 最大エントロピー原理
- 平均場近似
- 統計的推論への応用
- 統計的パラメータ推定
- 大偏差原理
- 統計的仮説検定
- 補足:Cramerの定理
- 量子状態空間の幾何構造
- 状態と測定
- 有限量子状態空間の双対構造
- 量子統計的パラメータ推定問題
- 補足:作用素単調関数
代数幾何と学習理論(渡辺澄夫、森北出版)
- 特異点
- 代数幾何
- 超関数
- 超関数論の基礎
- 超関数とゼータ関数
- メリン変換
- 漸近展開
- 一般形の漸近展開
- 経験過程
- 測度空間・確率空間
- 法則収束
- 関数空間に値をとる解析関数
- 経験過程
- 対数尤度比とカルバック情報量
- 学習理論
- 確率的複雑さの漸近挙動
- 汎化誤差の漸近挙動
- 学習係数
- 学習理論と諸科学
各書籍に対するコメント
情報幾何の方法(甘利俊一・長岡浩司、岩波書店)
この分野の先駆者、甘利先生が書かれた本。1993年に出版されてから版は変わっていないようだ。分量も130ページそこそこしかなく、とてもコンパクトにまとまっている印象。エッセンスだけ詰まっている感じなので、分かる人は分かるが言葉が足りないと感じる人もいるかもしれない。情報幾何で使われる基本的な概念、定理などをずらずらと定義していくスタイルなので、発見的学習を後押ししてくれるような示唆に富むタイプの教科書ではない。初学者向けというよりも、すでにある程度知っている人が原理原則を確認するために戻る用のハンドブック
という立ち位置にある本だと思う。
情報幾何学の基礎(藤原彰夫、牧野書店)
甘利先生の本の第1~4章をより詳しく解説している感じ。数学を本分としない工学系や情報系の学生向けに書かれているとあってなかなかに読みやすい。大学1回生レベルの数学知識のみを前提としているのも優しい。個人的に嬉しいのは統計物理学との接点について解説してあるところ。たとえば、情報幾何では汎化誤差に関連する指標として「確率的複雑さ」という量が導入されているが、これは「対数周辺尤度」あるいは「自由エネルギー」と呼ばれている。この異名についてはこの後紹介する「代数幾何と学習理論」の中でも触れられているのだが、どこがどう自由エネルギー(ヘルムホルツの方)と関連しているのかということは「代数幾何と学習理論」には書かれていない。他にも最後の章では量子統計との関連から量子計算にも情報幾何が使えるのではないかといったこと(解説ではなく問題提起)が書かれていたりと、物理屋さんには興味のそそられる内容になっていると感じた。
代数幾何と学習理論(渡辺澄夫、森北出版)
この本はとてもユニークであると感じた。まず、情報幾何を特異点や超関数の観点を含めて丁寧に解説している本は他に見たことがない。(学会誌レベルの解説記事では存在する。)そして、数学的な議論を粛々と積み重ねて学問としての情報幾何
を解説する王道的な教科書ではない。確かに、大学1回生レベルの線形代数と微積分を前提にしているという点では上述の2冊と同じスタートラインから解説を始めるのだが、「(統計的)学習理論」に数学的枠組みを与えるために情報幾何では何を明らかにしようとしているのか、というゴールをはっきりさせたうえで、そこに向かって必要な数学的知識を整理しているとこが新しい。個人的には一番読みやすいと感じた。やはり私のような工学系の人間にとっては、漠然と定理や補題を証明していく数学の本よりは、何のためにこの定理を知る/証明するのかあらかじめはっきりさせておいてくれるこうした本の方がスッキリと読めるような気がする。
まとめ
以上の3冊を使って勉強をするには、「情報幾何学の基礎」で数学的知識を物理学的観点も含めて身につけつつ、「代数幾何と学習理論」で情報幾何学が持っている問題意識と、これまでにどのような知見が得られてきたのかを確認していく、というプロセスをたどるのが良いのではないかと思う。
とりあえず私もざっと読んだだけなので、これから腰を据えてじっくり読み込んでいこうと思っている。
Anaconda Navigatorも含めて諸々アップデートする方法
Anaconda Navigatorの標準機能を利用してパッケージなどのアップデートをかけようとしても失敗する(アップデートが終わらない)場合の対処法について述べる。
失敗するケース
- Anaconda Navigatorを起動
Environments > base (root)
と仮想環境を選ぶ- 右側のパッケージ一覧で
Updatable
を選択する - ポップアップウィンドウが出て「アップデートしますか?」的な質問が出るのでYes的なボタンを押す
- アップデート開始
- ご臨終(シークバーが進まない/いつまで経っても終わらない)
対処法
- Anaconda Navigatorを終了させる(起動してなければ次へ)
スタートメニュー > Anaconda Prompt
を右クリックして「管理者として実行」を選択- コンソール画面で
conda update --all
を入力しEnter
- アップデート内容の確認メッセージに
Y
と入力してEnter
- アップデート開始
- アップデート終了(のはず)
とりあえず私の環境(Windows10, Python3.6.1, Anaconda4.5.1)ではうまくいった。
というか、もう素直にLinuxを使えばいいと思う。
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でもこの問題について触れられていました。
今のところnumbaのjitがtry-catch構文に対応する様子はなさそうなので、『try-catchを使いたい場合は@jit
を使わない』というのが唯一の対策なのでしょう。(回避策ご存知の方はコメント欄までお願いいたします。)
これまで全体像を把握しきったデータをハンドリングすることしかしてこなかったので、try-catchをあまり使ってこなかった(単にif文だけ使っていた)のだが、思わぬ落とし穴でした。
同じように困っている人のために記録として残しておきます。 ではでは。
■Qiitaにも要約が載っています。念のため。
iPhoneでホテルなどの認証付き公共Wifiにログインしたいのに認証画面が出ない場合の対処法
現代においてwifiの確保は基本的人権に含まれると言ってもいいでしょう。
特に海外ではなおさらです。
空港、ホテル、レストランなどなどあらゆる場所で無料のwifiが利用できるようになってきています。
ところが……なぜかiOS端末(iPhoneやiPad)はこれらの公共wifiとひたすら相性がわるい!!セキュリティが確保されていない(不特定多数がつなげてくる)アクセスポイントへの接続には何らかの制限がかかっているんでしょうか……教えてくわしいひと!
さて、この手のwifiは基本的にオープン(wifi接続画面で鍵のマークがついていない)のですが、いざログインしようとするとユーザー名やパスワード(たいていはその両方)の入力を求められることになります。PC(MacbookとかMacbookAirとか)ではこのログイン画面がデスクトップ上にポップアップで出現するので、ホテルの人などから聞いたログイン情報を打ち込めば接続できるようになります。
問題はiOS端末(iPhoneやiPad)のケースです。ログイン情報を入力するためのポップアップ画面がいつまで経っても出てきません。SafariなどのWebブラウザでGoogleのトップページなどを表示しようとするとたまーに入力画面が出現しますが、かなり稀です。
では、どうしたらよいか。答えはひとつ!
これだけ。ですが注意点が一つ。通常のAppleのトップページはhttpsで始まりますが、httpで始まるURLにアクセスしましょう。そうするとリダイレクトされてhttpsで始まるAppleの公式サイトが表示されるか、ログイン情報を入力するためのページがSafariで表示されるようになります。
念のため、アクセスすべきURLをベタ打ちで貼っておきます。
以上のテクニック、古いですがソースはこれです。2018年5月現在、うまくいっています。
https://discussions.apple.com/thread/4507909
そのほか、タウンWiFiというアプリを使うと日本国内限定ですが公衆WiFiに自動で繋げてくれます。WiFi接続を前提に格安SIMを使っている人や、通信容量を節約したい人向けです。
ではでは。