2015年1月24日 星期六

機器學習筆記:FTRL-Proximal

1. 簡介

今天介紹的這個演算法,Follow-The-Regularized-Leader (FTRL) Proximal ,是Google於2011年 [1] 提出,2013年 [2] 加入修改並作了針對廣告點擊率 (Click Through Rate) 預測的應用探討的一個機器學習演算法。在Kaggle上面兩次CTR比賽冠軍都使用這個演算法。

這學期人工智慧課程我和阿牧、Tommy參加了Kaggle的CTR比賽。這次資料是由中國的網路行銷公司提供 2014/10/21~30共四千萬筆資料當訓練集,2014/10/31四百萬筆資料當測試,比較各隊的預測值之對數損失(logarithmic loss)。目前我們使用這個演算法達到 0.394 的準確度,在全體排名到達前三分之一。而事實上,前面的參賽者大多是使用FTRL演算法。

這個演算法是基於OGD(online gradient descent),使其更加稀疏(sparsity)的版本。


2. 演算法介紹

FTRL的核心是一種online logistic regression,在原始演算法上加入L1, L2 regularization和 adaptive learning,其演算法如下:


T是每筆資料,I則是feature domain。更新每個變數的權重時,會參考L1的值,因此很能夠達到稀疏性,同時,每個變數的更新速度都跟它先前的表現有關(G1:t)。除了L1,L2也被加進去進一步防止 over-fitting。


3. 演算法實現

這個演算法的 Python code下載地方在此,需要的記憶體很小,用一般CPU跑這次比賽的資料 (四千萬筆資料,21個變數,開一個2^25的feature vector) 大概只要半個小時。提供者是Kaggle世界排名前兩百的 Tinrtgu 大大。

關於這個code的討論和各種修改版本,可以到這裡來看眾神人的討論。

4. Reference

[1] Follow-the-regularized-leader and mirror descent: Equivalence theorems and L1 regularization. In AISTATS, 2011.H. B. McMahan.



一些反思:
事實上我是透過比賽的討論版上,Tingrtu的PO文才知道有這個演算法的。感謝他之餘,也深感學術文化的差異。如果是我的話肯定不會把方法講出來。事實上我認為它如果沒公布這個方法,可能也只有前百名才能達到0.4以下。

後記:
第一次撰寫類似學習筆記這類的文章,如果有寫錯或是寫作技巧可以改進的地方,還請不吝在底下留言指教。事實上這個演算法的論文探討的相當詳細,包括在大量數據下可以怎麼省記憶體同時維持預測率、feature drop-out等等。不過礙於我還是個菜鳥,還需要大量的時間才能讀懂啊(汗)

2015年1月22日 星期四

那隻貓依然在等待

  最初搬進宿舍,舍外有兩隻貓,一隻黑白斑,一隻棕白斑。小棕白在我大三時被兩位女士領養,據說牠後來自己跑走,但並沒有再回來。

  跟曾經把我抓傷過好幾次、經常占據宿舍旁seven內貨架的小棕白不一樣,小黑白很安靜內斂,經常坐在石階上看著來往的人群,像是在等待什麼。小黑白有個令人費解的習慣──牠經常就坐在店門口的腳踏墊上,望著裡面,卻始終不敢踏進去。在一個寒冷的台北冬夜,我嘗試輕輕推牠的背,讓牠進到裡面取暖,但牠前腳才跨過那個界線,便馬上轉身離去。我本以為他會生氣的對我喵喵叫,但他只是回頭看我一眼,便離去。連一聲抗議也沒有。

  小黑白平時是由seven的員工餵食,他們輪流買些貓乾糧,每天在兩個固定時段將牠的食盆裝滿。如果超過時間沒人前來餵食,小黑白便會在店門口外喵喵叫上許久。說起來這大概是他除了叫春以外,唯一會發出聲音的時刻。而平常會讓人摸個夠的牠,此時也會對伸過來的手感到反感。當然,假如你伸過來的手裡有貓飼料的話另當別論。

  前陣子seven因為合約到期,結束在宿舍旁的經營。在工人將裡面的擺設肢解拆掉的過程,我意外的在舍區的另一端看見小黑白,遠遠的望著這裡。

  工人離去。原先明亮的地方此時空盪盪的,沒有一點光照進來。幾天下來,小黑白依然在同樣的地方附近遊蕩,在同樣的石階上靜靜的坐著看著往來的人群,依然在等待著什麼的樣子。

2013年11月15日 星期五

如果小明


如果有一天小明
從這裡跳下,如果
小明正走過底下
小明也會在經過的
路上詢問事發經過如果
        小明
在電視機前目睹這一切
如果昨天,如果明天

如果今早的雨
別那麼令人絕望,如果昨天
小明不曾經過那房間
    如果有明天
如果小明沒接好
爆碎的骨架,喧囂的血肉
兩人在路中央曬成明日頭條
如果小明不前去一探究竟
如果小明不從電視機前起身,推門
看見雨洗這個城市的凡俗

頭條一日之後
人們紛紛給了解釋,滿意地睡著
──如果小明別跳下,如果
小明別經過,小明別多問
如果小明在電視機前冷冷扒著飯
藏著了什麼的那房間啊
上個世紀傳到下一個
人人傳誦著:
如果小明別從這裡跳下去
小明別從這裡跳下去……

如果小明真的就這麼
從這裡跳下去
就由小華

把這笑話演下去

2013_11_15

  入冬了,永福橋下的河濱透著一種水泥的無奈,飛鳥來來去去,風在水面形成冬日少見的勞動。除此之外,頭頂上的隆隆聲來自城市裡,所有平凡的路人的車輪,把長長的長長的夏日,碾成靜的可以的冬日。 

   我在河濱欄杆旁,看水面。就這樣倚著欄杆,上半身懸空前傾,盯著水面,靠刺骨的風平衡整個身體。看著看著,就在那一剎那,原本皺著的水面突然平滑了起來,成為一面鏡子。風停了。我伸手向前,有個模糊的身影就在這面鏡子之後,越發清晰,向水面浮來,而此時河對岸的城市突然開始高速向後退,永福橋向高空飛離,而我所在的這個岸,則緩緩沉到水裡。此時我懸空弓著身,右手還是扶著欄杆的姿勢,左手不斷伸向前,而在這近乎凝滯的大氣時空裡,所有的動作都窒息地困難。同時那水裡的景象益發清晰……   

   是爸。爸看起來十足建康地,是國小時他在運動會上背著我向前跑的那種壯碩,而臉上掛著平靜,馬勒九號的終止式般的笑容。他也緩緩身出手向我。美極了這瞬間。廣闊的湖面沒有一點波瀾,大氣靜止而似乎有拉絃聲,遠處是已經看不清的城市,更遠處是山……    

  突然爸手用力向前推,把我的左手推回去,而此時有股巨大的力量將我向後扯。爸的手露出水面一部分,皮膚光潔古銅,一切病痛都退去了。我更用力的伸出右手,嘗試握住老爸的手,但強大的力量已經把我越拉越遠,遠方的城市快速回歸,永福橋墜落,而此岸浮現。 

  「你在幹什麼?」是一位腳踏車騎士。他用力的把我往後拉之後跟著一起跌坐到地上。 

  「……」我想著剛才的身影,眼神沒有聚焦地看向河面。

   騎士起身,看了我一眼,安靜了幾秒。像是幾乎看清我的企圖似的說:「別做傻事,別把人當做一種手段……

   「人是你一輩子的目標。」說罷,他拍了一下有點詫異的我的肩「活著,然後追求真理吧!」

   他快速騎走。那是康德的話。出自《實踐理性批判》,一本關於道德,以及自由的書。而那句話正是道德守則的關鍵。惟有把人當做目的,活著才是自由的。而透過這樣實踐道德、理性、去接近所謂「物自身」,也就是真理的一種形式。雖然我從不相信有真理,但這不與「去追求真理」有所矛盾。後面這句命令,並不保證真理的存在,但這是我們唯一能做且該做的。湖面底下的老爸應該也是基於這樣的理由把我推開,將一個脆弱而敏感的少年從星空之中明顯定位,使之運行不歇,似乎有什麼目的,而其實根本沒有什麼目的。就像我總是相信人的一生大多在追求愛,但愛不一定存在。

2012年12月31日 星期一

夢開始之前

──寫給蕭邦二四十首前奏曲op.28的意象練習


1 闊步

早起,踏無意的步伐出門
陽光碎滿地(施工中)
扎傷了憂鬱(速限六十)
而我微笑療傷

2 烏雲

遠遠就看到了

蹲坐湖心的旅人
乾燥的失眠
天是不忍的表情

當寂寞也蒸發
那旅人見我便別開臉
且冬雨無聲

於是……

3 刪節號

於是……
沒寫完作文就跑出去
迎接一整個盛夏的未完
文思就是哈哈手痠了老師握才不告訴逆雷
棍子一提就衝了出來。隱隱作痛的青春
那時整座盛夏,剩下的
就是……

4 故人

「然後……」
沒有然後了,妳說
自此永恆的放逐在e小調
贖罪的獨逕,大千之下
那是長長的長長的一生

我還在遠走他鄉
止步,在時間稻黃的岔路上
大地又吹起了季風

5 死線

死拖硬拖終於快要來不及
平行處理加速省時,作業企劃結婚老去然後
呦呦我們一生都在趕死線喔揪咪

6 絕望的型態

單音的雨點落著
早晨輕輕扎著醒的雨下著
路面,車頂,永不可及的遠方下著雨
雨下在同樣的步伐裡

打在鐵灰色的往事裡的雨飄著
酒瓶咖啡杯之上
乾涸的雨
雨下在層層疊疊的苟活裡

7 短的回憶

街角遇到妳。

簡訊。

山徑,葉緣,寶藍色的雨。

今日停課。

雨在心裡下。

午後詩從窗口滲入的身形。

8 逃家

逆風的音色如血,月落
鋼筋似阿爸的棍在路中央
全世界都結了霜。關於家
女人的哭聲在遠遠的遙遠的背後
路在夜的迴圈裡

遠遠的看見樂園,盛開
在一朵將死的花上

9 莊嚴1

革命那麼多次,青銅質
的膜拜那麼神經質
剛剛那個衛兵的鬍渣沒刮,讓我
起來走動走動
刮刮
台北市糾結的鬍渣

10 偷窺盛世

(浮~)藍藍的水面
我偷看你翻看我一臉XD

11 下坡

看妳狠狠接住我的表情。

12 階

啊啊鬧鐘又被我=口=
反射性按掉了那個=口=
勒?隨便啦前面的人=口=
擋我者死啦今天的紅燈=口=
特別多欲速則不達屁話啦=口=
如果不快點就(自行填入)=口=
              冏
              冏
              冏
              冏
              冏。痛。

13 夏冬之交的午後

一陣暴雨來了又停了
氤氳啊蒸發之後又飄散
成為雪
佔據熾熱的鐵窗
整個城市都結凍了
思念如雪落

把妳想在心裡(融雪)
並且推窗吸一口
純潔的廢氣
「秋天呢?」妳問
「結霜的時候我正在遠方。」

14 逃1

烈日下萬千行人默不作聲回頭看著我

15 長的回憶

門的聲音
握把清脆的旋轉的聲音
腳步、衣料和皮膚廝磨
秋天瞌睡的聲音
樹葉進行最後一次光合作用的聲音

是寂靜的歌。靦腆的走廊
長長延伸向懸空的花園
當我撐傘飛向妳
雨會撥弄葉間的豎琴
講一個好聽簡單的睡前故事

作夢的聲音
銀河躡手躡腳繞過
愛人般黑洞的聲音
仰望的聲音
月光的長拉弦

然而這些都是微不足道的,當我回想
浴室的深處點滴在窒息之上
拖著濁黃的回音。午後
一陣暴雨來了又走了
人們仍在趕死線

門縫的聲音,寂寞蒸發的聲音
教室拆掉了,小草傳述故事的聲音
地球高速自轉的合奏
我落後的c小調獨語,醒時
追趕無言的樂隊

午後,這是城市噤聲的瞬間
雨就下了。

16 逃2

於是醒。

鋼筋漫天而落,地下水噴湧
平凡無奇的災難降臨
城市裡,逃,是唯一的去路了
神不知去向

太平凡了以至於我們幾乎忘了
在逃跑之前仍愛著什麼?
車陣飛起,暴雨,大火如歌聲瀰漫
地基雄姿挺拔

快,放逐我們到電腦深處
或者愛情裏頭
如果逃亡的洞口堵塞如果已堵塞
請讓我如往常地因厭倦而睡著

並永遠永遠地


17 列車

那列車就這樣走遠了但車廂始終在我眼前。旅人想必是徒留了甚麼啊鳴笛聲依舊爬滿了樂譜,風起,的時候,車輪聲依舊充滿著陽光;設想遠方有人或者,甚麼都沒有。我有一整箱行李的月台,卻忘了放進目的地。列車開呀開就這麼越開越越遠,然而車廂依舊沒有把我載走。遠方是家長長的延伸。

18 自殘

這時,應該選用甚麼刀最好?
濕透的仰望,雷電
剪開大氣防護衣
宇宙射線如帥哥美女成群衝進來
突變我的愛情

19 光的型態

頭髮掉光或塗滿防曬油那種
該去上課的那種
遠行的那種,仰望的那種
肢解成彩虹那種
佳節不愉快走在路上快瞎了的那種
(註:从从从从从从从从
   从从从从从从从从
   从从从从从从从从
   从从从閃从从从从
   从从从从从从从从
   从从从从从从从从)
救贖的那種

還有那種一出教室就雨停的
樹影間如夢中情人輕輕躡過來
在雨滴折射裡
和你演一段親吻大地的皮影戲

20 莊嚴2

革命是突然的
塗藍的且徒然的

整座城市活在憂鬱的後革命時代
路人全都忘記刮鬍渣

午後,城市依然寧靜地喧囂
雨下在層層疊疊的夢裡

21 蒸氣的型態

雨的預言無端升起~…~~~~~
大霧中,前世來生齊聚一旁~~~
討論夢與時間的可能~~…~~~
莊嚴的光之下,永無可逃離~~~
關於絕望的死線我們~~…~~~
斟酒,斟咖啡,對坐~~~~…~
看未來是否長胖了一些,愛情~~
凋萎成平凡的樣子了沒……~~~

22 末日

億萬路人騎著殞石暴力降落有夢的中生代大地
原始爬蟲類紛紛逃到不能再逃惹變成化石繼續想像的文明

23 想像

想像的文明中我們想像地愛著想像世界和平一切安好然後想像地想像著在想像的文明中……

24 
  在二十三首歌裡,我夢見七個自己。
  第一個自己在曠野上,寂寂響遠的大陸型氣候,不遠處堆積著小小的樹林,山脈,雲層。近晚。我無聊的走著,心裡毫無情感,手裡擒著三顆剛才械鬥中喪生的人的頭。兩顆敵人的,猙獰的面容仍未褪去,死盯著地面,像是要瞪出甚麼血色的花朵。另一顆是愛人的。
  太陽上升下降不知幾回了。山腳下終於碰到溪流,我口渴啊飢餓啊拿水洗我愛人的臉緊接著喝一口清涼的水。族人已散,不知近處那咕嚕咕嚕叫的是何方野獸?然而我已是不願逃避的。這時語言還沒誕生,我還逃不進詩裡。
  第二個自己念著經文,在小小的小小的村莊裡。升起的火堆熊熊點亮了愚昧的夜晚,照我裸露而不堪的信仰。身穿教袍,眼神空無的盯著前方木架。村里因為突來的疾病已死去一半的新生兒,信徒們近乎瘋狂地想把所有可能是巫女的十七歲女性通通抓起來,一把火燒了。想當然耳他們沒放過R。而此刻我眼前R已失去意識,火就要燒到她的腳了。我仍在念誦經文,祈禱文,祈禱這可怕的世界末日趕緊來臨。第三個自己在馬車上,路途遙遠,乘著城市興起,我一介旅行商人純真追求利益。而此刻我輕輕唱著北方寒冷老家鄉的歌,給我懷裡的愛人,一隻寂寞的異教神。我們的歲月是如此的天壤,然而只要此刻,當手緊緊把此刻牽住,把此刻牽住……
  第四個自己策劃一次屠城行動。第五個自己則同時在逃跑。第六個自己親眼看見深愛著的妓女Y背叛自己,在尼羅河岸,生與死與愛恆久發生之處。我甚麼都做不了,於焉我就地,睡。夢裡我把Y狠狠地拋棄,神智清醒地打算在醒後再愛一次。然而我是再也沒醒過來。我是沙漠中風化最嚴重的人面獅。
  第七個自己在電腦前趕死線。他已經感受到所有的背叛、愛、詩,或是一些悖論。他在資本主義和自由主義下穩穩行進,是社會一致認同的一種好學生,準時交作業,考好試,行為端正有禮貌,對金錢有健康概念,對健康也有健康概念。唯獨那揮之不去的自殺念頭深深藏在海底,忙碌的城市裡永遠不會被察覺到的一種,近乎平凡且無聊的絕望。嗜古典樂中那些深沉的悲哀的,還有咖啡,靜止的畫作,抽象概念的文字。他不曉得自己所持的核心概念:愛,是如此的脆弱以至於,他總是一步步,走向前六個自己。
  在二十三首歌裡,他夢見七個自己。