ナンクル力学系

学んだ事を書き連ねていこう。

Archive for October 2008

悲しいバグ

leave a comment »

ニューラルネットワークのアクティベーション(sigmoid関数やtanh関数など)は、ニューロンの出力からその微分値を計算出きるので、バックプロパゲーションをするプログラムではその関係式を使う。例えば、

u = \tanh (x)

du/dx = d \tanh (x) / dx = 1 - (\tanh x)^2 = 1-u^2

という関係。

自分で計算する時にはニューロンの出力はu、内部値はxと置くんだけど、ボスは逆。今書いてるプログラムはボスに合わせて書いているので、自分の記法では無い。そのせいでプログラムにバグが混入してた。微分値計算の関数に、xではなく慣れてる方のuを入れてしまっていた。気をつけてるつもりだったのに!

気づけてよかったけど何か悲しいし悔しい。

Written by tkf

October 31, 2008 at 3:08 am

Posted in 研究日誌, programming

Tagged with ,

A<B + ε (∀ε>0) ⇒ A ≦ B

leave a comment »

が証明で使われたけど、これって自明なのかな?どう証明すればいいかな。とか昨日ベッドの中で考えてた。背理法で一発だった。

最近寝つき悪い。

Written by tkf

October 31, 2008 at 12:25 am

Posted in 数学

距離空間上のコンパクト性とか復習した

with one comment

「ルベーグ積分30構」を読んでて、コンパクト性を用いる証明が出てきたので昔(一回だけ)読んだ「位相への30構」を部分的に復習した。(ここで30構シリーズ売り込んでるわけではないよw 読みやすいけどね。)

ちょっと気になったのが有限被覆性の定義の部分。

有限被覆性:可算開被覆 \{O_1,O_2,\cdots,O_n,\cdots\} によって、X

X = O_1 \bigcup O_2 \bigcup \cdots O_n \bigcup \cdots

と蔽われているならば、この中からとった適当な有限個の \{O_{i_1} ,O_{i_2},\cdots,O_{i_s} \} によって、すでにXは蔽われている:

X = O_{i_1} \bigcup O_{i_2} \bigcup \cdots \bigcup O_{i_s}

位相への30構(志賀浩二)、p123

と定義されてる。そしてこの後、平面は可算無限個の被覆が必要だから有限被覆性は成り立たないよ、というお話に続く。

そこで、「あれ?O_i として平面自体をとれば、開集合なんだから有限被覆性成り立ってしまうんじゃないか?」という疑問にぶちあたる。

続きを読むと、どうやら

有限被覆性“どんな”可算開被覆 \{O_1,O_2,\cdots,O_n,\cdots\} “をとっても”X

X = O_1 \bigcup O_2 \bigcup \cdots O_n \bigcup \cdots

と蔽われているならば、この中からとった適当な有限個の \{O_{i_1} ,O_{i_2},\cdots,O_{i_s} \} によって、すでにXは蔽われている:

X = O_{i_1} \bigcup O_{i_2} \bigcup \cdots \bigcup O_{i_s}

“斜体部”を変更

ということっぽい。つまり、可算開被覆としてとれる集合のセット(集合族)すべてについて、そのセットから有限個の被覆を選ぶことが出来ることを保証されてなくてはいけない。それが有限被覆性。

こう書くと、ひとつ反例上げただけじゃ意味ないよね、ってのはすぐ分かる。

上のような変更を加えなくても定義の意味は同じだけど(だよね?)、「どんな〜でも」って書いてくれたほうが勘違いしなくて済んだと思う。なんか、数学やってると普通に出てくるあたりまえな話。ちょっと数学勉強した気分になったw

位相への30構は講義が結構独立してるので、部分的に復習するのは楽しい。

Written by tkf

October 30, 2008 at 11:30 pm

Posted in 数学

Tagged with ,

コマンドからSVNのリビジョン番号を取得

leave a comment »

頭悪いかもしれないけど:

svn info --xml | grep -m 1 -F 'revision' | grep "[0-9]*" -o

これ使ってシェルでリビジョン番号をヘッダーファイルに埋め込んでCのマクロに渡す、みたいなことやってたら、ボスにそれSubversionのキーワード展開使えば出来るよ、って言われた。

あちゃw

Written by tkf

October 29, 2008 at 10:58 pm

Posted in programming

Tagged with ,

Emacsでシェルコマンドの標準出力を文字列として受け取る

leave a comment »

host name別で読み込む設定ファイルを変えてやろうと思ってEmacs Lispでホスト名を知りたい,に書かれてあった方法を試してみたらなぜか(getenv “HOSTNAME”)でhost nameが取れない.仕方ないからシェルコマンドからhost nameを取得しようと思ったら,文字列として受け取る(変数の中に格納する)方法で行こうかと思ったけど,いい方法が見つからなかった...ので作ってみた.

(defun get-stdout-shell-command (command)
  (interactive)
  (set-buffer "*Shell Command Output*")
  (erase-buffer)
  (call-process command nil "*Shell Command Output*" nil)
  (delete-char -1); delete line break
  (buffer-string))

(defun get-stdout-shell-command-arg (command arg)
  (interactive)
  (set-buffer "*Shell Command Output*")
  (erase-buffer)
  (call-process command nil "*Shell Command Output*" nil arg)
  (delete-char -1); delete line break
  (buffer-string))

(get-buffer-create "*Shell Command Output*")

(setq hostname (get-stdout-shell-command "hostname"))

これで,変数hostnameにhost nameが入ってるはず.初めは(shell-command  “hostname” “*Shell Command Output*”)とかやってたけど,バッファが開いてしまうのでcall-processを使うことにした.elisp初心者なので頭の悪いことしているかもしれない.

(getenv “HOSTNAME”)動いてくれたほうが嬉しいなあ.なんで動かないんだろう?

Written by tkf

October 26, 2008 at 2:15 pm

Posted in programming

Tagged with

gitで既にあるリポジトリからcloneして編集してpushするまで

with one comment

Subversionだとsvn checkoutして編集してsvn commitする.

gitだと,こんな流れ:

git-clone "url" "directory(省略化)" # 省略するとリポジトリ名に
# 編集する
git commit -a -s -m "何かメッセージを"
git push origin master

とっても簡単!

...なはずが,githubで作ったリポジトリでこれをやると

*********'
You can't push to git://github.com/user/repo.git
Use git@github.com:user/repo.git
*********'

と怒られ続け,何かgitの使い方おかしいんだろうか?と悩んでしまった.(今エラーメッセージ読むと,そのまんまなんだけどね)

実はgithubのurlは二つあって,リポジトリのページに行くと

Public Clone URL: git://github.com/”user”/”repo”.git
Your Clone URL: git@github.com:”user”/”repo”.git

と書いてある.つまり,Your Clone URLの方を使わなくちゃいけない.なんで気づかなかったんだw

しかも,このURLって書いてる部分はクリックできて,そこをクリックするとちゃんとメッセージが出て後者を押すとちゃんと使うコマンドまで表示できる.

でも普通気づかない...よね?

追記

cloneした後は,git commit -aとしないとcloneしたファイルでもファイルがバージョン管理下に置かれないみたい.なぜ??

Written by tkf

October 26, 2008 at 2:01 am

Posted in PC

Tagged with

確率って無次元数じゃないよ!

leave a comment »

いや,無次元数だけどねw

例えば全体でN個ある中からN_i個あるiを選ぶ確率は,

P_i = \frac{N_i}{N} [num/num] (ここでnumは個数ね)

だから,P_i [num/num] = P_i [\ ]で無次元のはず.

でも,ここiので符号長(情報量)を考えると,

l_i [bit] = - \log_2 P_i [bit] = \log_2 N - log_2 N_i [bit]

と書くことが出来る.つまりl_i [bit] = l_i [\log_2 num]って言っても良いよね.

あれ?でも上式の最初の式変形(l_i [bit] = - \log_2 P_i [bit])をみてるとP_iの次元はP_i [2^{bit}] = P_i [num]なんじゃないかって思えてくるよね?なんで?

種明かし.

悪さをしているのは\log_2 .なんせ,積(商)を和(差)に変えてしまうヤツなんで,割って無次元化した変数を見事に次元のある変数に変えてくれる.これは危険だ!

っていうネタを考えたんだけど,どうかなwww みたいなw

まあ,ここで考えている個数なんて量は物理的には無次元数なので結局意味の無い話なのかもしれない.だけど,\log, \sin, \cos, \expの中に入る量は無次元数じゃなきゃ駄目だ,っていう基本を忘れちゃいけないという話に似てる(気もする).特に\logは無次元数を「ばらせる」から危険だよ.そういう話ということで.

結論.次元考える時は\log を差に変えちゃだめ!

Written by tkf

October 25, 2008 at 10:04 pm

Posted in 数学

Tagged with