Latest Entries »

一個人

日本的房子很多都只有一人一間
今天下雨天,也無法騎腳踏車出去
自己一人待在房間裡,也沒啥好做的
頗令人崩潰

太陽 5:30 就下山了,只好來睡覺了嗎…

廣告

回憶 UCLA 的宿舍生活

今年六月,終於從 UCLA 物理系 PhD 畢業,在 LA 待了 6 年,比國中、高中、大學任何一段都還要長。也熟悉起這個環境。

剛入學的時候,很幸運的跟系上要到 Rose Apartment 的宿舍。這棟宿舍離學校有點遠,算是 University Apartment。之後就在這裡待了六年,認識了很多朋友 (大多是台灣人XD)。

前兩年,雖然知道有不少台灣人住在這棟,但是因為研究生新生都住在 Weyburn Terrace,所以幾乎沒有認識太多台灣人。生活頗孤單。後來意外的因為噪音問題,想要住到頂樓,一位同事物理系的學長畢業後,把房間讓給我。我就搬到了 4 樓的 401 號房。那裡我認識了我的好朋友 Sky。之後也認識了比較多的台灣人。

住在學校宿舍的好處是朋友就在附近,出門就會遇到。想要出去玩、一起吃飯、買東西,大家招呼一下就來,很方便。我們也常常辦 party,大家聚再一起聊天、玩桌遊、打電動。一起吃飯、看電影、看 NBA。那時因為 Sky 認識的人有不少打籃球的人,因此常常會在 401 看 NBA。起初我不怎麼關心籃球,但是想說大家都來了,也跟大家 social 一下,來看看。習慣以後,自己吃飯不知道看什麼也會打開電視來看看 NBA。

美國學校的研究生宿舍不像台灣和日本,只一間小房間給你睡覺。美國學校的宿舍基本上就是一間功能完整的家。有客廳,有正常的廚房、餐廳,完整的衛浴,每人獨立的臥室。我們的 Apartment 房子雖然舊,但是客廳很大,辦聚會很適合,也很舒服。因此我們的朋友 Charles 就常常來這光顧,為 401 增添不少人氣。

是說這種跟許多朋友住在同一棟房子,平常出門就能遇到,這樣的生活大概在出社會後就不可能在遇到了。說真的,非常懷念這樣的生活。也讓我不捨得離開這裡。

我的室友 Sky 也是非常有趣的人,跟我的 tone 也很合。他和我一樣都是做理論的,平常我們喜歡為一些小東西爭論或討論。討論的時候,我們大多只會在理論上說服對方,別人看起來也許像是在吵架,但對我們來說,就只是在探討答案或正確的解釋。我們家的入口處有塊前人留下來的白板,我們就常在上頭討論物理、數學或 CS 的問題。想必這塊白板以前也是這樣運作的吧。

我和 Sky 也都很怕噪音,晚上睡覺只要有點吵或有點光線就會睡不著。因此我們協定在晚上12點前必須洗好澡,不然廁所抽風機的噪音會干擾睡眠XD

Unit test in Physics?

在 CS 領域,寫程式常常會需要寫 unit test,來確保程式區塊的運作正常,這對後續維護程式碼相當方便。如果修改過後的程式碼無法通過 unit test,就代表該修改可能會不相容。由於 unit test 的範圍通常是一小段function,因此可以很快就找出有問題的 function。另外,寫 unit test 也有助於對該段程式碼的了解,如果根據你所預期的結果,對某段程式寫了 unit test 卻沒通過,代表你對該段程式碼的理解有誤,或是該段程式碼有 bug。

也許在理論物理也應該要建立這樣的 unit test,
在眾多的理論中,可以快速檢查各種新理論是否與實驗或已知現象或結論是否相符合。

有時候部分 Windows 7 的圖示,像是開始功能表列或桌面的程式圖示會消失

這是因為 Windows 有對這些程式圖示做快取,但快取資料庫可能被某些新安裝的程式弄亂了

下面方法方法可以重建圖示快取資料庫:

  1. 關閉所有的檔案總管 (Windows Explorer) 視窗
  2. 按 Ctrl + Shift + Esc 啟動 Windows 工作管理員 (Task Manager)
  3. 在「處理程序」頁面,找到 explorer.exe,在其上按右鍵
  4. 點選 「結束處理程序(E)」。 (這時工作列會消失,因為工作列就是 explorer.exe 的一部分。)
  5. 從工作管理員左上角的「檔案(F)」選單,點選「新工作 (執行…) (N)」
  6. 輸入 cmd 後按「確定」,以打開命令提示字元 (Command Prompt)
  7. 在 cmd 視窗內,依序輸入下列指令並按 Enter:
    cd /d %userprofile%\AppData\Local
    del IconCache.db /a
    exit
    (這步驟基本上刪除圖示快取檔,explorer.exe 重開後就會重建)
  8. 在工作管理員,點「檔案(F)」>「新工作 (執行…) (N)」
  9. 輸入 explorer 後按「確定」,工作列就會出現

資料來源 (英文):http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/icons-missing-their-specialized-image/3f1f7108-2984-4071-afd8-5bec9cceda38?auth=1

最近開始使用 Spyder 的 python IDE,其中包含 editor、IPython、變數檢視器、檔案檢視器和各種 documentation,對於需要不斷改 code 並實驗各種參數非常好用。

Spyder IDE 的 Github: https://github.com/spyder-ide/spyder
Spyder 官方網站: http://pythonhosted.org/spyder/index.html

由於我沒有安裝 Anaconda,這裡提供使用 pip 安裝的方法:

Spyder IDE 需要藉由 PyQt 來顯示圖形介面,因此需先安裝 PyQt。在 cmd 輸入:

pip install PyQt5

安裝完成後,接著輸入:

pip install spyder

來安裝 Spyder。如果沒問題就安裝好了。最新的 Spyder 版本是 3.2.0,但我在安裝 Spyder 3.2.0 遇到一些 unicode 的問題,所以目前我還是安裝舊版的 3.1.4

pip install spyder==3.1.4

如果以後 bug 修復了,可以再透過下列指令更新 Spyder

pip install -U spyder

 

Windows 上安裝完後,要啟動 Spyder IDE ,可以在 cmd 輸入:

spyder3

Spyder 的程式執行檔 “spyder3.exe" 是放在 Python 安裝位置下的 Scripts 資料夾 (Python 的其他 cmd 指令像是 pip 也都在此)。如果嫌麻煩,可以建立一個捷徑連結到 “spyder3.exe"。

註:一般 Python 3 的預設安裝位置是

C:\Program Files (x86)\Python 3.x (所有使用者安裝 32 位元)
C:\Program Files      \Python 3.x (所有使用者安裝 64 位元)
C:\Users\<user name>\AppData\Local\Programs\Python\Python3x-32 (個別使用者安裝 32 位元)
C:\Users\<user name>\AppData\Local\Programs\Python\Python3x    (個別使用者安裝 64 位元)

而 Python 2 的預設安裝位置是

C:\Python2x

 

See you later alligator

今天聽到英文一種奇妙的方法說再見:

A: See you later alligator.

Urban dictionary 上寫對方聽到這句,必須要回答:

B: In a while crocodile.

搞笑的是 alligator 和 crocodile 都是鱷魚

美國人的梗真是難懂 ~~

Defense! Defense! Defense!

周二就要做 PhD dissertation 的 defense 了
極度緊張,但是卻又沒有非常有效率的在準備
這種心理狀態到底是怎麼樣的一個機制呢?
還是無法理解如何讓自己最有效率的在時間內做完一件事情
現在暫時把 Facebook 封鎖起來,希望有幫助

如果使用的是 MiKTeX 2.9

可以在
C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base
找到 LaTeX 的原始檔

LaTeX 一般也會包含說明檔 source2e,但我的 source2e 無法編譯,所以在網路上找到了編譯好的版本:
https://www.tug.org/texlive/Contents/live/texmf-dist/doc/latex/base/source2e.pdf

另外,你可能不會直接看到 source2e.pdf 所提到的原始檔 (例如:lt….dtx 檔),因為他們已經被包裝到 latex.ltx 和 latexa.ltx 檔內了。

去年有幸第一次受邀到不同的系所給正式的 seminar talk,

雖然不是很成功,但學到了一些寶貴的經驗。

 

在學術界,一位來訪者到一個系所給 talk,不單單只是 talk 本身而已。

禮貌上,來訪者還需要拜訪該系所同領域內的各個教授、postdoc 或學生。

如果自己正在尋找 postdoc 或教職,將來有打算申請該學校的職缺,與當地教授面談就更為重要。

一般 (歐美) 教授都會預期來訪者在 talk 前後找自己談話,所以不用太害羞或覺得打擾到人家。

當然談話的內容也不能太空洞,所以在拜訪前一天,應該先做好功課,

了解該系所有哪些教授,研究領域是什麼,做過哪些重要的題目。

而更重要的一點是! 要記得系所裡的人名和長相 (這對我來說相當困難 XD)。

這樣在見面的時候,可以很有禮貌的認出對方並叫出名字XD

 

談話時,因為事前有做過功課,就可以根據對方做的研究發問,討論討論有時就會有意想不到的 idea 出現。

除了聊對方的題目,對方也一定會問自己最在做什麼研究。

這時因為 talk 上的題目已經在 talk 中討論得相當詳細了,繼續討論它也沒什麼好說。

所以很重要的一點是,必須準備一個 talk 之外自己正在做的題目來介紹。

技巧上,talk 上所講的題目應該是已經做完、發表過東西。而自己正在做的題目,可以保留在個別談話的過程中提及。

尤其是正在做的研究,有很多不確定性和未完全了解的部分,若把它放在 talk 上講,容易出錯或被問到不懂的部分。

而在個別的訪談中,可以以比較輕鬆的方式講解。若對方有不同的看法或認為你的了解有誤,也可以私下跟你說並跟你討論。

一方面比較不尷尬,另一方面可以學到的東西也比較多。

 

我第一次拜訪時,並不知道這些,而把正在做的題目放在 talk 的後半部講。

結果因為對它不熟悉,讓 Talk 收尾的相當差,而訪談時也沒有別的話題可以聊。

後來前輩告訴我這些技巧,第二次有特別準備,拜訪的經驗就好上許多。

第一次練習用 Python 寫 logistic regression。

Logistic regression 雖然已經有很多寫好的 package 可以用,不過我還是嘗試自己寫了一下,

讓自己熟悉 logistic regression 到底做了什麼,還有各個參數的特性。

 

Logistic regression 顧名思義就是用 logistic function:

h(z) = 1/(1 + exp(-z)).

為 fitting function 來 fit data 或說是做分類,logistic function 本人長這樣:

logistic-function

它的特性是,連續的從 0 到 1 遞增,當輸入 z < 0 時輸出 h < 0.5,當輸入 z > 0 時輸出 h > 0.5。

所以當你的 data 分布是大約以 z = 0 為分界,以上為 True (1),以下為 False (0),就可以用 logistic function fit 或分類出來。

如果分界點不剛好在 z = 0,或是 T 和 F 的區域相反,可以藉由不同的 fitting function 像是 z(x) = t_0 + t_1*x 輸入到 h(z) 來達到。

依此類推,你也可以 fit 更高維的 data,然後考慮 z(x1, x2, x3, …) = t_0 + t_1*x1 + t_2*x2 + t_3*x3 …。

或是更高次方的 fitting function,像是 z = t_0 + t_1*x + t_11*x^2 + t_111*x^3 …,等。

 

下圖的 2 維 data  點是由室友提供,藍點代表 1 (True),黃點代表 0 (False)。

可以看出來點的分布像是個歪斜的橢圓形,所以我使用一個 2 次的 function 來 fit 它:

z(x,y) = t_0 + t_1*x + t_2*y + t_11*x^2 + t_22*y^2 + t_12*x*y.

在給定 t_0 … t_12 後, 對於每一個 data 點代入 z (x, y) 再代入 logistic function, h(z), 並以 h(z) = 0.5 為分界

就可以預測每一點 (x,y) 大約是 T 或是 F

a-result

圖中紅色曲線代表 h(z) = 0.5 的曲線,就是這個 model 分類 T 和 F 的界線。

 

當然,真正 regression 的部分在於找到 model 的參數 t_0, t_1, …, t_12,讓 model 最符合 data。

對於一組參數 t_0, t_1, …, t_12,可以計算出 model 的 prediction ( h(z(x,y)) )與 實際 data 的誤差,

每一組 data 都可以算出誤差,這些誤差之合稱為 cost function (就像是高中學過的 X^2 一樣)。

Regression 的目的就是找到一組參數 t_0, t_1, …, t_12 使得 cost function 最低。

也就是說 regression 就是一個找最小值的問題。

 

要找到一個 function 的最小值,最簡單的般法就是 gradient descent。

先計算 cost function 在該點的梯度,然後讓參數 t_0, t_1, …, t_12, 往 cost function 減少最快的方向前進一段距離。

再重新計算梯度,再前進。

重複夠多次之後,就會逼近最小值,找到 model 的參數。

 

上圖為 gradient descent 前進 1000 次的結果,

可以看的出來,還不是 fit 得很好,因為我使用的方法相當簡單,每次前進的步伐是固定的

較為進階的演算法,會每一步調整最佳的前近距離,收斂的就會更快更有效率。

 

總之,logistic regression 是個相當有趣的 python 練習,另外也是做 data scientist 和 neural network 的第一步。

 

My code and data: http://github.com/louis925/Logistic-Regression-Oval

Coursera 上關於 Machine Learning 的線上開放課程 (由 Stanford University 教授上課): http://www.coursera.org/learn/machine-learning/home/welcome