2011年10月28日星期五

書釘偶拾:Donald Hill 的香港淪陷日記

1940 年,日本侵華如火如荼,香港亦岌岌可危。時任英國總參謀長的伊士美男爵,認為香港易攻難守,建議撤防。香港總督羅富國爵士認同伊士美的想法,於是去信國會,敦請英國完全棄守,以免將來戰事發生,牽連平民傷亡、城市損毀。

英國的政、軍各方對於應否棄守香港,想法分歧。有些人認為日本根本不會對英、美宣戰;有人認為香港可守;亦有人(例如邱吉爾首相)認為香港難守,但出於政治考慮,不可撤防。最後,如我們所知,英國決定增兵香港,而從加拿大調來的兩營官兵,抵港未夠一個月,就成為大英帝國可憐的棄卒。然而,當時防衛香港的主力,無可否認仍是帝國本土將兵,香港政府官僚亦克盡己任。輔政司詹遜,更是不幸地於戰前一日才來港履新。香港重光後,當受盡監獄折磨的他離港時,仍不忘於電台廣播表示香港應實行政治改革。

今日舊主去,新主來,行新式殖民統治。政府不再紀念香港重光日 (Liberation Day),大概是新的殖民統治者認為,他們才是「解放」香港吧。維基百科上比較中性的「香港主權移交」條目,也給改名成「香港回歸」了。有一個半世紀歷史的香港「回歸」到當時五十歲還未夠的「新中國」,真是奇聞。早幾天中共《國際先驅導報》甚至說「新中國重返聯合國40年」,大概在新的國家,人民也要說「新語」 (Newspeak) 吧。

回說第一次香港淪陷。這段歷史,今日書本紀錄甚詳,但多是參考或整理官方文獻而成,官兵的親身經歷,反而少有記載。戰時由駐港皇家空軍的七校尉之一的 Donald Hill 所寫的密碼日記,就彌足珍貴(喜歡密碼學或數學的讀者,更會喜歡英國 Surrey 大學數學系高級講師 P.J. Aston 所述,如何破解 Hill 密碼日記的故事)。這部日記用密碼紀錄了 Hill 從 1941 年 12 月 7 日到該月尾的經歷,九六年獲破解,重見天日時,本地報章亦有報道,現在重讀,仍覺得值得推薦,例如我們知道日軍來襲時,皇家空軍連一架飛機也起飛不了,但原來就算它們能起飛也沒大用途,原因是它們五架都是輕型轟炸機,沒有戰鬥機,而且它們還要是落後的雙翼機種!

破解後的日記全文,仍載於 Dr Aston 的網址,以下摘譯頭兩日所記。



7/12/41,星期日。人人都談論對日戰爭,但似乎無人認為會有事發生。我們在港的皇家空軍只是很小的一羣人,有七名軍官、六十位士官與五架飛機,包括兩架海象與三架角馬[1]。何利上校乘運兵船尤里西斯號往星加坡,留下蘇利雲中校做司令。我勉強有幸指揮我們唯一一個小隊,和獲得三名軍官加入:格雷中尉,暱稱多利,也是信號員;波格中尉,或稱溫比,是設備員;克羅斯利少尉,暱稱  Junior,紐西蘭人,剛從星加坡來,沒多少飛行經驗。我們的副官是「上校」湯臣中尉,他是義勇軍,六月才從星加坡來到啓德。最後還有軒尼詩中尉,澳洲人,剛從星加坡過來成立作戰指揮室。笑話是,為迎接新戰機,經已萬事俱備,但未來一個月也難望有新機的影子。就憑五架舊飛機與一個機場,前景並不似錦,看來,若戰爭殺到香港,我們最終會被編入陸軍。今天收到的消息愈來愈差,人人留守軍營,做足預防措施。我駕駛一架滿載炸彈的角馬做爬升測試,其間想像那裏才是最佳投彈地點,遇到敵方戰機又有甚麼法子。然而到處都那麼平靜,遠在下方的香港又這麼美麗。我們將海象泊在水上,又分散角馬,但你看,它們變成多麼吸引的目標。皇家蘇格蘭第二營與煞帝利旁遮普兩營已於新界就位,港島正由加拿大兩營新兵防守,而才不過剛剛抵達的中撒克斯營就防守海岸線。最後還有歐洲人、華人、葡人等等的義勇軍四千人。我們的海軍只有一艘驅逐艦,十艘魚雷艇和一些炮艇。兵力毫不強大,尤其是我們完全切斷了外間援助,彈藥只夠用一百日。可是每人看來依然心情開朗。我是值班人員,躊躇是否該睡一下。

8 日,星期一。我大清早就被人叫醒,原因是輔政司來電,說和日本的戰事一觸即發。該死,不能睡了,於是我叫醒其他軍官。吃早餐時,我們獲悉我方正和日本開戰。我們衝下樓到機隊處,剛好聽到不祥的飛機轟鳴,超過三十架戰機護送着九架轟炸機,正朝我們飛來。除了派人到防守崗位之外,已無暇做其他事情了。轟炸機從頭上經過,但戰鬥機就撲向我們,朝我們的飛機洒下濃密的彈幕。我們用盡我們微薄的力量來對付他們。有些印度兵發慌衝進掩體,由於太過亢奮,不停開機關槍。一陣瘋狂求生,神奇地無人中槍。廿分鐘戰機密集攻擊過後,已上彈那架角馬湧出黑煙,兩架海象亦浴火下沉。最後他們匆匆離去 ── 希望並非完璧吧 ── 而我們亦檢查損失。兩架海象都沒了,一架角馬在燃燒,另一架嚴重損壞,只剩一架無事。我們試着滅火,祈願炸彈不要爆炸。火勢太猛了,角馬燒乾燒淨,遺骸中只有兩顆燒得通紅的大炸彈。只餘一架飛機,但沒有人員傷亡。有八架民航機完全燒毀,包括美國的「快船」(Clipper)。到下午,轟炸機又回來轟炸船塢與九龍,有一根棒落在機場上。據報前線有激烈戰鬥,說日本仔用一個師攻擊,另一師作預留兵力。

譯註:
[1] 兩種都是雙翼輕型轟炸機。

2011年10月19日星期三

SEE

前文提到史丹福大學設立了三個免費、公開但無學分的網上課程,其實它還有其他課程,雖不公開報讀,但課程的材料是公開的,例如有一科 iPhone Application Development,有志開發 iPhone Apps 的朋友不妨一看。校方稱它的公開課程計劃為 Stanford Engineering Everywhere (SEE),目的是為了與 MIT OpenCourseware 競爭。

AI and ML

無心寫文章,吹吹其他水。

月前於《小城科學》blog 及電鋸處看到史丹福大學開了 database, artificial intelligencemachine learning 三科免費、公開但無學分的網上課程,儘管我全部都有興趣,但是 database 方面,總覺得若無實際問題在手,齋聽書還是讀不通;況且現今資料庫的應用,十居八九都與網絡有關,可是自己對網絡一竅不通,所以還是作罷。其餘兩科,本來只報其一,時間上比較鬆動,但心癢之下,還是兩科都報讀了。

根據校方數字,最後每科都有幾萬人報讀。面向如此大的群體,又除了聲譽之外沒有實利,課程自然較本科生所念的淺,許多材料會被 heavily dumbed down。例如看 AI 課的學生論壇,AI 的本科課程 CS221 於頭兩週過後,就要學生用課堂中所教的 A* search 做一個 project,寫一個類似用於 Pac-Man 遊戲的算則。參加 AI 網上網程的學生,不但毋須做 project,功課也大多只是網上選擇題,難度低很多。(後記:出乎意料,原來 AI 課的功課與考試與給予正規學生的相同,但 ML 的網上功課就和正規生的有別。)

AI 第一週所教的,大多與其他大學課程有重疊,例如用 BFS, DFS 搜索樹形圖等等,這些也是運籌學 (Operational Research) 的標準內容,不過學習一下 CS 佬的觀點也不是壞事。然而,不知是教授本身還是 CS 佬的慣例,課堂中好些語彙的用法,似乎都大大偏離學界常規。例如科學上,當我們說 discrete problem 與 continuous problem 的時候,discrete 的可以是 finite,也可以是 countably infinite,總之就是 countable。只有有 uncountably infinitely many states 的問題,才稱為 continuous problem。可是根據教授的說法,discrete problem 就是有 finitely many states 的問題,其餘的一律稱為 continuous problems。路徑的長度是另一個例子。教授稱 BFS 為 shortest first search,他又說 BFS 與 uniform cost search 都能夠找出 optimal path。然而 uniform cost search 尋求的,是最低代價 (cost) 的路徑,而 BFS 所得到的,只是一條最少節點的路徑,而完全不理會路徑的代價。要說 BFS 保證找到 optimal path 也可以,只不過這個 "optimal",指的是節點或層級的數目,而非路徑的代價。在其他學科中,例如圖論或運籌學,arc cost 歸 arc cost,no. of arcs 歸 no. of arcs,兩者決不輕易混為一談。

教授於 lectures, quizzes 跟 homework 的遣詞用字,亦常常過於含糊。這並非我獨有的印象,也是學生論壇裏的主流意見。甚至有些 quizzes,連教授到底想問甚麼,我也搞不清楚。感覺上,AI 兩位教授不是很 well prepared,有點急就章,不過他們的 lectures 很有啟發性,例如有一處談到 A* search,教授問,A* search 行得通,當中的 intelligence 究竟從何而來?要留意,並非人人也將 search method 當是 AI 的,例如早年深藍擊敗國際棋王卡斯巴洛夫,後來負責設計算則的許峰雄來港,就提及他的算則不過是 brute-force search,算不上是 AI。然而教授的問題,為何 A* search 行得通,就真的令我不禁要停下來,想一想,而他的答案,也令我有恍然大悟之感。

相比之下,ML 的教授較注重包裝,無論是 presentation 抑或 website 的設計都很講究。ML 的教授 Andrew Ng 風格有點「執手教」,即是連很顯淺的東西也唯恐你不明白,所以解釋得很仔細。要解釋詳盡但不冗贅,並非人人都做得到,華人尤其傾向太注重技術細節,令人失去 big picture,沒有 motivation,而 Andrew Ng 是罕見的例外。不過和 AI 課相比,我還是覺得 AI 課較能刺激思考,不知是否西人與華人的治學方式始終有別。只是現在始終開課不久,日後也許會有所不同。

儘管 Andrew Ng 的 presentation 很好,但也有些我不喜歡的地方,尤其是他有時舉一些很不設實際的例,很容易「教壞人」。譬如他解說 linear regression,以樓價與樓面面積的關係作例子。樓價的研究確實有用得上 linear regression 的地方,但是實際做法是有成例的,例如樓價幾乎一定要 take logarithm,而且,由於樓面面積幾乎一定不是決定樓價的唯一主要因素,若不考慮其他因素(例如地區、座向、層數、交通等等),regression 得出來的結果差不多肯定沒用,但是引入其他因素的話,又幾乎必定牽涉 hedonic regression 的概念。實例可以淺化,但不能偏離正軌,「老作」一個例子,然後硬套入現實場景,很容易誤導學生,令他們以為隨隨便便放幾個變數,就可以做 linear regression。其實隨便抽一本計量經濟學 (Econometrics) 的書,也可以找到許多實例,若無實例在手,還是只講抽象例子為妙。

此外,ML 課的內容也不時有錯。ML 要用到其他學科的技巧,而教授不是那些科目的專家,所以犯錯也情有可原,但是向學生胡亂解釋,就會造成真正問題。例如課堂中有處(大意)指,若要 minimize $\|X\theta-y\|^2$,其中 $X$ 是 $m\times n$,而 $n$ 遠大於 $m$(亦即 $X$ 是闊闊的矩陣),就應該用 gradient descent 而非 normal equation 來解決,原因是在 normal equation 之中,要計算 $(X^\top X)^{-1}X^\top$ 的話,由於 $n$ 很大,會很花時間云云。問題是,由於 $n>m$,$X^\top X$ 並不滿秩 (rank-deficient),所以它根本就不能反逆!最奇怪的,是 Andrew Ng 於 lecture 中有提及 pseudoinverse,可見他應該知道,當 $n>m$ 的時候,我們要計算的,應該是 $X^+$ 而不是 $(X^\top X)^{-1}X^\top$。為何仍有上述錯誤,真是木宰羊。(又後記:先前我跳過了許多我本身懂得的內容,現在打開來看,才發現教授並不真正熟悉 multiple regression ── 在 "normal equation" 的 video 約 10:23,他說用 Octave 解 normal equation 的時候,應該用 $\theta=\textrm{pinv}(X'\ast X)\ast X'\ast y$。技術上這沒有錯,但一般通用、等價而且較簡單的答案,其實是 $\theta=\textrm{pinv}(X)\ast y$,實際計算上,我們更罕會先算 $\textrm{pinv}(X)$,再算 $\theta=\textrm{pinv}(X)\ast y$,而是用諸如 QR factorisation 等等的數值方法尋求方程式 $X\theta=y$ 的解。Andrew Ng 取 $(X^\top X)^+X^\top$ 而捨 $X^+$,令人愕然。)

課堂中有關 feature normalization 的討論,更是完全錯誤。教授說 feature normalization 的目的,是為了令 gradient descent 加快收斂,但這兩件事,其實風馬牛不相及。試想像,若 features variables 未 normalized 之前,objective function 的 contour plot 本身已是同心圓狀,那麼,經過 feature normalization,contour plot 變成橢圓形,gradient descent method 豈非收斂得更慢,而不是更快?真正要改良 gradient descent,化橢圓為正圓,應該用 conjugate gradient method。Feature normalization 其實只是單純地從按每個 feature 的數值範圍 ── 而非 objective function landscape ── 去改變該 feature 的 learning rate,與加快/減慢 gradient descent method 的收斂,關係不大。

ML 的功課也設計得很奇怪。第一週的功課有兩部份,首部份是 ordinary linear regression,必答;第二部份是 multiple regression,是 bonus part。教授大概想弄得愈淺愈好,結果所謂功課,不過是在每個教授預先寫好的 script file 中加入一行指令。然而 multiple regression 部份要求加入的程式指令,其實與 ordinary linear regression 部份的完全相同,因此只要 OLS 部份答對,就等於懂得 bonus part,根本沒有額外挑戰。

另外,教授聲稱可以用 Matlab 或 Octave 來做功課,但是 submit 功課的 script file 其實呼叫了 Octave 的 urlread() function,所以 Octave 其實是不裝不行。然而我電腦 (Windows XP) 上的 Octave 又好像很 buggy,只要呼喚任何 plotting functions 就會 crash(後記,問題已解決;詳見此),令我不得不先用 Matlab 做好功課,再用 Octave 提交,但校方提供的 Octave script file,又時不時與 Matlab 不相容。例如 Matlab 的 function 應該用 "return" 來結束,但 ML 的 Octave script file 就用 "end";向量的長度,在 Matlab 是 length(),但是 ML 課的 script 就用 Octave 的 numel()。結果我要先修改那些聲稱與 Matlab 相容的 Octave script files,才可以做功課,十分麻煩。

2011年10月14日星期五

亞里士多德的師公

【明報】特首斥黃毓民爛仔答問全文
曾蔭權:無論是孔子或是亞里士多德,或是現在的政治家,現在的政治體制,都不會認為講粗口、粗暴語言、粗暴動作是市民合適的政治倫理,就是這麼簡單。
亞里士多德嘛,他的師公蘇格拉底,是因為批評雅典權貴,批評社會不公而遭逮捕處死的。當然,蘇格拉底的罪狀上所寫的,絕非「批評權貴」或「批評社會不公」,而是「腐蝕雅典青年思想」啦,令人不信神之類。羅織道德罪名,從來都是當權者的好戲,否則又如何將公眾焦點從官方的失誤之中錯開呢?

書釘偶拾之英國文官制度 (I)

John Greenway, Celebrating Northcote/Trevelyan: Dispelling the Myths, Public Policy and Administration, 19(1):1-14, 2004.

昨日行政長官曾蔭權發表任內最後一份施政報告,回想他上任之初,不少市民都寄望甚殷,誰知七年下來,政治敗壞,威人威威,官商勾結,貧富懸殊,本應遠比腳痛公熟諳民情與政治的曾蔭權,竟落得比前任更灰頭土臉的下場。繼「商人治港」,「公務員治港」似乎亦告失敗,中共港澳辦主任王光亞甚至指香港「成也英國,敗也英國」,不過坊間一直對於「公務員治港」是否失敗,或政府管治失效的原因,看法十分分歧,例如陶傑 (2005, 2008a, 2008b)、林行止 (2011) 與王岸然 (2011),就各有獨到見解。

英國統治了香港一百五十多年,香港的基本法制與文官制度皆師承英國,但英國現代文官制度之設,實在比香港還晚,歷史未如一般人所想悠久。昔日英國並無統一文官制度,各部門皆採取酬庸 (patronage) 方式,由大臣或部長延攬及任命下級官員,令裙帶關係與貪污充斥。一八五三年,財相葛雷斯東 (William Ewart Gladstone,日後成為英國首相) 制訂預算案時,發現他那班往日由其他政客安插的手下,根本無力提出任何有用的建言,於是決心改革,委任前私人秘書羅富國爵士 (Sir Stafford Northcote,第二十任香港總督羅富國的祖父) 與財政部長查維仁爵士 (Sir Charles Trevelyan) 研究改革方案。兩人於十一月底提交建議初稿,次年一月定稿,這份後世稱為 Northcote-Trevelyan Report 的報告書,掀起了英國文官體制改革的序幕。

根據一般教科書的說法,羅/查報告書是現代英國文官體制的基石,許多我們現在習以為常的文官制度特色,皆源於羅查報告書。例如:
  • 公開考選 (open competition) ── 公務員乃公開招聘,以考試選出。
  • 分層 ── 將公務員分為兩層,前者由具有寬闊視野的通才擔任,負責制訂各部門政策,亦可隨時掌管其他部門,而後者負責日常的流水作業。香港政府的政務官 (AO) 即屬前者,而行政主任 (EO)、技術官僚與其他文員或低級公務員,即屬後者。
  • 以功績論升遷 (promotion by merits) ── 公務員的升遷,應以工作表現而非年資作準。
  • 常任 (permanence) ── 公務員乃長期供職,並不因政權更替而解任。
  • 政治中立 (political neutrality) ── 公務員不應因自己或服務對象的政見而有所偏私。
  • 匿名 (anonymity/facelessness) ── 公務員就像無名公僕,只須忠實地為政府首長或大臣制訂或執行政策,毋須負上政治責任。
然而,根據文首提及的 Greenway (2004) 所述,現代英國文官制度的部份特色,其實並非源於羅/查報告書,而是由其他複雜或獨特政治因素產生。羅/查報告書的部份本意,亦遭不少教科書作者誤解,不過羅/查報告無疑對日後英國的行政改革造成深遠影響。

羅/查報告發表後,獲英國統治階層廣泛傳閱。剛好克里米亞戰爭 (1854-1856) 爆發(以前香港小學生熟知的「提燈女郎」南丁格爾,就是因此戰成名),英軍指揮官與後勤部門顢頇無能,造成己方大量傷亡,暴露了軍人買賣官職之禍害,激起民間大肆批評,紛紛要求改革。可是,由於既得利益者的重重阻力,報告書的建議,要到一八七○年葛雷斯東擔任首相之後,才開始認真施行。因此英國本土的行政改革,起步得比她兩個屬地 ── 印度與香港 ── 還遲。實際上,初期香港設立的公務員制度,才是大英帝國各地效法的對象。

首位意識到港府需要作行政改革的,是第四任港督寶靈 (John Bowring)。寶靈是史上少見的語言通,懂得約二百種語言,並會說其中一百種,但他在任期間,港府通曉中文的官員,除他以外,就只得時任總登記官 (Registrar General,日後改稱華民政務司) 兼撫華道 (Protector of Chinese Inhabitants) 的高和爾 (Daniel Caldwell) 一個,而高和爾本身又涉嫌勾結海盜黃墨洲。有見及此,寶靈主張從英國招聘受過良好教育的青年官學生 (Cadets) 來港,學習中文然後成為公僕,令政府有可靠的官民溝通渠道。

寶靈是最後一位兼任全權公使駐華商務總監 (Her Majesty′s Plenipotentiary and Chief Superintendent of British Trade in China) 的港督。除了於港府之中,他還打算於駐華使團內實踐他的主張,只是後者的官學生所學的,是中國官話而非廣州話。寶靈成功說服外相卡靈頓伯爵 (Earl of Clarendon),取得外交部撥款推行計劃 (Eitel 1895, p.300),相比之下,港府的開支要先經英國財政部批准,結果就沒那麼幸運。寶靈上任之前,歷屆港府皆入不敷支,要由英國財政部每年資助(鄧樹雄 2003)。儘管寶靈履新之後一年(即一八五五年),港府即首次錄得財政盈餘,但不知英國財政部是否見慣港府「大花筒」而充滿戒心,寶靈始終不能於任內「成功爭取」撥款,在香港推行官學生計劃。

寶靈的構思,由他的繼任人羅便臣 (Sir Hercules Robinson,任期為 1859-65 年,勿與第十一任總督羅便臣 Sir William Robinson 混淆) 實踐。羅便臣乃海軍出身,一八五九年就任香港總督時,年方三十五。他上任後,九龍因第二次鴉片戰爭而併入香港版圖。霎時間,香港華人數目暴增,但高和爾又因為瀆職而遭解僱,令解決香港官民之間的溝通問題更形迫切 (Tsang 2007, ch.2)。銳氣十足的羅便臣向殖民地部提交了官學生計劃,建議從至少三間英國學院安排公開考試,選取三名官學生。羅便臣表示,此舉既可為港府羅致傳譯,亦可讓港府揀選通曉中文的人出任高官。也許有見於港府自寶靈開始,一直審慎理財,庫房不斷累積盈餘吧,羅便臣的計劃最終獲得批准推行。時任殖民地大臣的紐卡素公爵 (Duke of Newcastle) 更對羅便臣的計劃大加讚賞,令此計劃日後成為錫蘭、海峽殖民地、馬來亞,以至許多英國在非洲的殖民地的公務員招聘制度的範本 (Tsang 2007, ch.2)。第二次世界大戰之後,「官學生」(Cadet) 易名而成「政務官」(Administrative Officers),也就是現在我們所稱的 AO。

羅便臣只革新了公務員的招聘制度,令年輕人也有機會迅速晉身高官行列。羅/查報告或現代香港文官制度的其他部份,他並未觸及。日後香港的文官制度發展,實在受英國影響殊深(例如公務員政治中立),但就當時而言,除了印度例外,香港實在領先整個大英帝國,包括英國本土。

眨下眼又「狗噏」了這麼多。下篇,水繼續吹(但多數爛尾)。

伸延閱讀