Latest Entries »

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

SO(3) 是各種 3維旋轉 所構成的群,任何 3 維的旋轉都可以由兩樣東西表示:

1. 旋轉軸的方向 v (一個三維的單位向量)

2. 旋轉的角度 θ (介於 -π 和 π 之間)

 

要圖像化 SO(3) 的結構,我們可以想像一個半徑為 r = π 的三維實心球

球裡的每一點代表一種旋轉,該點的徑向向量就是旋轉軸 v

而點到球心的距離 r 就代表旋轉的角度 θ,其範圍可以從 r = -π 到 π

這是合理的,因為對某方向 v 旋轉 -θ 角,就跟對 –v 方向旋轉 θ 角是一樣的。

此外,因為旋轉 θ = π 和 -π 也是一樣的,所以這顆球的表面上的一點 (r = π) 和其相對的點 (antipodal, r = -π) 是一樣的。也就是說北半球的表面跟南半球的表面視為相同的,並且互相連通。

所以 SO(3) 可以看做是一顆實心球,但南北半球的表面互相連通。

 

就是因為這樣的連通,所以 SO(3) 不是 simply connected (單連通) 的。

簡單的說,一個 simply connected 的拓撲空間,其內部通過任意兩點的一條 closed loop (封閉路徑),必定可以連續的變形收縮到一個點。

像是 R^2 空間或是實心球體就是 simply connected 的。

而以甜甜圈為例,一條繞過中間洞口的封閉路徑,就無法連續變形到一個點,所以甜甜圈不是 simply connected 的。

 

SO(3) 雖然長得像實心球,但是它的南北半球表面互通。

如果考慮一條從南極出發,經過球心,再到達北極跟南極相連的封閉路徑,

這條路徑無法連續收縮到一點,所以 SO(3) 不是 simply connected。

 

此外,長得跟 SO(3) 很像的 SU(2),實際上是 simply connected 的。

 

References:
[1] https://zh.wikipedia.org/wiki/單連通
[2] Matthew D. Schwartz, “Quantum Field Theory and the Standard Model", Sec. 10.5.1.

雖然已經發了數篇 paper,但這還是人生中第一次自己 submit paper 到 journal 上

在 APS 的 Physical Review D (PRD) 系列發表是可以選擇免費或是付費的

如果選擇免費的話,paper 的版權會是出版社的。但讀者要看的時候,就必須要付錢才能看。

如果要讓你的 paper 免費給大家看 (open access) 的話,那你就要付錢,費用大概是 USD $1900 ,還蠻貴的。

我想一般人都是選擇免費發吧?

另外,投稿 PRD 的時候,會讓你選擇該 paper 的 keywords,

據我老闆說,期刊會根據這來挑 referee 的人選。所以建議選適合的領域的 keywords 比較好。

最後,PRD 還會要你直接建議幾個 referee,據說一般 editor 會從你建議的名單挑選一位,其他的幾位再由 editor 決定。

 

Numpy 是 Python 中處理數學相關的一個強大 package,要使用 Numpy 前請先安裝 Python

下面提供在 Windows 上已安裝好 Python 後,要加入 Numpy package 的方法

  1. 開啟命令提示字元
  2. 執行 python -m pip install -U pip setuptools
    (如果命令提示字元不認得 ‘python’,請先把 python 資料夾 C:\Python27 和 C:\Python27\Scripts 加入到 Windows 的 path 環境變數內)
    (舉的例子為 python 2.7 版)
    (如果 pip 無法更新,請試試看重新安裝新版的 Python 2.7 或 3.6)
  3. 執行 python -m pip install wheel
  4. 到 Laboratory for Fluorescence Dynamics ( http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy ),下載  NumPy 的 Wheel 安裝 package (.whl 檔),請依python 版本和電腦系統版本做選擇。(例如:我裝的 Python 是 2.7 版 32 位元,我就下載 “numpy-1.12.0+mkl-cp27-cp27m-win32.whl")
  5. 到剛剛下載的資料夾啟動命令提示字元 (檔案總管,在資料夾空白處,按 shift + 右鍵 > 在此處開啟命令視窗(W))
  6. 執行 pip install numpy-1.12.0+mkl-cp27-cp27m-win32.whl (這裡 numpy-1.12.0+mkl-cp27-cp27m-win32.whl 是剛剛下載的 Wheel 檔)
  7. 安裝完成後,到 Python IDLE,執行看看 import numpy as np ,如果沒有出現問題就是安裝成功了

Mathematica 10 似乎有個 bug

安裝 Mathematica 10 並使用一陣子之後,就會發生在開新的 Notebook 並鍵入任意兩個字元後,Mathematica 就 Lag 一陣子

這狀況會隨著使用的時間越長,持續惡化

原因似乎是 Autocomplete 的 bug

Windows 7 下的解決辦法是到下列目錄

C:\Users\[Your User Name]\AppData\Roaming\Mathematica\SystemFiles\FrontEnd\SystemResources\FunctionalFrequency\

把 CodeAssistHistory10.*.m 開頭為檔名的紀錄檔刪掉。

這檔案不會影響 Mathematica 的運作

mathematica-10-bug-file

通常發生問題的時候,這個檔案都會有數 100 MB 大。

References:

http://mathematica.stackexchange.com/questions/120803/mathematica-10-4-freezing-after-typing-in-new-notebook?noredirect=1&lq=1

http://mathematica.stackexchange.com/questions/109005/segmentation-fault-on-auto-complete

Windows 7 SP1 在某次更新之後或全新安裝的情況下,

會發生 Windows Update 在檢查更新時,CPU 使用量會非常高,且掃描更新時間過長或卡住的狀況。

下面提供解決辦法:

  1. 關閉 Windows Update 服務 (若不關閉,更新包有可能無法安裝)
    (控制台 > 系統及安全性 > Windows Updates > 變更設定 > 選 “永遠不檢查更新",後按確定。)
  2. 重新開機
  3. 手動下載並安裝 Windows 7 和 Windows Server 2008 R2 的 2015 四月更新包 (KB3020369)
    1. 32 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=46827
    2. 64 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=46817
  4. 手動下載並安裝 Windows 7 和 Windows Server 2008 R2 的 2016 七月更新包 (KB3172605)
    1. 32 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=53335
    2. 64 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=53332
  5. 重開機後,恢復 Windows Update 服務並檢查更新

資料來源 (英文):

http://superuser.com/questions/951960/windows-7-sp1-windows-update-stuck-checking-for-updates
http://support.microsoft.com/en-us/kb/3200747

相關資料 (英文):

April 2015 servicing stack update for Windows 7 and Windows Server 2008 R2 – http://support.microsoft.com/en-us/kb/3020369
July 2016 update rollup for Windows 7 SP1 and Windows Server 2008 R2 SP1 – http://support.microsoft.com/en-us/kb/3172605

這問題也困擾我一年多了。但不知為何,這些消息都只有英文的網頁,台灣微軟都沒有翻譯這些問題和解決方案,因此只好幫他們翻譯一下。

據說這是因為舊版 Windows Update 使用 AddSupersedenceInfoIfNeeded 方法,非常之慢。更新之後會快許多。

Here comes the 2017 HEP Postdoc Rumor Mill:

https://sites.google.com/site/postdocrumor/2017-rumors

美國找高能理論博士後研究的人,如果自己接到 offer 都會放在這個網站上。
所以當你看到別人收到某學校的 offer 但自己沒收到,就可以知道大概自己沒有上這樣。

想走高能理論的人,可以看一下大約每年的 Postdoc 的職缺數,和申請的人數,心裡有個底。另外,也可以看一下前幾年,哪些人有找到 Postdoc 的職位,和最後去了哪裡。