鄧攀的“貪心”演算法:從生物跨界到計算機是什麼體驗?

語言: CN / TW / HK

(本文閱讀時間:15分鐘)

編者按: 科研之路並非繁花似錦,很多時候是在一條沒有腳印的道路上探索未知。科研之路應該怎麼走?如何抓住機遇實現轉彎?微軟亞洲研究院主管研究員鄧攀在以《人生的“貪心”演算法》為題的演講中,分享了自己從本科畢業到現在一路走來的經歷與收穫。從生物跨界到計算機,鄧攀是如何做到“內心有譜,絲毫不慌”的?遇到機會,她又是如何竭盡全力把握住每一個可能的?一起來看鄧攀怎樣編寫了自己人生的“貪心”演算法吧!

點選“閱讀原文”或在以下地址可觀看鄧攀的分享視訊:

https://www.bilibili.com/video/BV1Rv4y1K7AE

大家好,我是鄧攀。我本科就讀於清華大學生命學院,期間進行的是生殖幹細胞相關的研究。博士的研究方向是線粒體,研究細胞的能量中心在各種毒性損傷下的應激反應。現在,我是微軟亞洲研究院的一名研究員。

有時候我自己都會詫異:我一個學生物的,怎麼就來了微軟呢?我來了微軟,怎麼還在做生物呢?我是怎麼做到這麼酷的事情的呢?

話說回來,我現在確實是在做著自己非常喜歡的事情。今天,我將和大家分享我一路走來的經歷與收穫。

我的分享主題是《人生的“貪心”演算法》——回顧自己從本科畢業到現在的十年曆程,“貪心”的思想真是精確描述了我的每一步選擇。

做實驗和寫程式碼,我全都要

故事開始於 2012 年,是我抵達紐約、開始博士學習的第一年。

我們研究生院有“輪轉”制度,每個新入學的博士生在第一年的時候都可以選擇 3-5 個自己感興趣的實驗室,進行 2-3 個月的“短期體驗”,再決定自己想要加入哪個實驗室進行博士階段的研究。

那個時候,計算生物學還是一個挺小眾的方向。出於好奇,我選擇了一個利用計算方法研究微生物群體行為的實驗室。

我在那個實驗室輪轉時進行了一個短期的探索專案。當時,我們發現:一種叫做假單胞桿菌的細菌被新增到培養基上之後,逐漸就會長成這種樹杈狀的分支結構。如果同時放上兩個菌落,狹路相逢的時候,它們還會互不打擾,各退一步。

鄧攀在實驗室輪轉時進行的科研探索專案

我們就很好奇,在一馬平川的培養基上,是什麼讓細菌在擴散時出現這種模式的呢?相隔老遠的細菌又是怎麼知道彼此的存在的呢? 

通過對微生物進行各種定向基因改造,結合很多腦洞大開的實驗,我們找到了影響菌落形態和菌落間通訊的分泌因子,用數學模型解釋了菌落行為的原因,還在 Matlab 裡模擬出了菌落群體的擴散過程。

現在講起來,我還覺得這項研究非常有趣。當時,我也一度考慮過要加入這個實驗室,繼續這個方向的研究。雖然生物和程式設計我都很感興趣,但生物實驗的訓練必須要有場地和環境;而程式設計學起來則自由很多,我可以利用晚上和週末的時間學習。因此,最終我還是選擇了傳統生物學研究方向,利用課餘時間自學程式設計。

不得不說,年輕時候的我真是精力旺盛。但也就是這個想法,才讓我今天站在這裡成為了可能。

不管有沒有用,我全都學

說到做到。在接下來的幾年裡,雖然我主要進行的還是傳統生物學研究,可我把研究生院裡能選的關於計算生物、生物統計的課程全部上了一遍,還在 Coursera 上學習了很多公開課,並認真做了筆記、完成了作業。當時慕課剛剛興起,網上有非常多高質量的公開課程。

鄧攀的線上學習部分摘錄

其實當時我也不知道這些課程對於未來的生物研究有沒有幫助,或者對我未來找工作有沒有幫助,大多時候我的學習純粹出於對知識的好奇。

舉例來說,聽說一門演算法課教得很好,但是這門課程的語言是 Java,那我就去學習 Java;聽說 C++ 更能培養計算思維,我就去 USACO 上用 C++ 刷題(那時候 LeetCode 剛剛成立);聽說大資料雲端計算特別 fashion,我就去學習了雲端計算的課程……

後來,這些“不功利”的學習經歷都對我起到了非常大的幫助。比如來微軟面試演算法時,我能夠“內心有譜,絲毫不慌”。這段演算法學習經歷也幫我獲得了第一次計算機方向實習的可能。

遇到機會,就全力以赴

這些年來,我有一個觀察:中國學生和歐美學生相比,女生和男生相比,都更容易說一句話:我不行。但真的是自己不行嗎?還是你覺得自己沒有準備好?因為自己沒有十足的把握,害怕失敗,所以不敢嘗試?

由於專業性質的原因,生物學專業的學生一般是不會在在校時到企業實習的。但博四那年春天,我突然聽到兩個訊息:一是實驗室要在那年夏天從紐約搬到麻省的伍斯特,所以暑假的時間 幾乎進行不了實驗;二是有一個名為 Google Summer of Code 的暑期實習專案正在接收申請。

Google Summer of Code 這個專案每年二月份啟動,組織方先篩選一批符合標準的開源專案,再開放學生報名,由開源組織篩選他們心儀的學生。入選的學生會在暑期進行三個月的線上全職實習,為開源專案貢獻程式碼,許多學生也會選擇在實習結束後成為長期的開源貢獻者。

這個專案對於當時只會悶頭寫程式碼的我來說是一個好訊息,恰好那個暑假我也有充裕的時間。問題只有一個:我聽到這個訊息的時候,距離學生申請專案的截止日期只剩兩週。

在這兩個星期的時間裡,我需要從一百多個開源專案中選擇出我想要申請的專案,按照專案的要求完成程式碼任務,並提交申請書。而當時我對於 GitHub 的瞭解程度僅限於:在一堂不到 2 個小時的入門課上,我建立了賬號,並 fork 了一次同學剛剛建立的 repo。

根據我當時可憐的技能和興趣,我很快鎖定了要申請的專案——一個用 C++ 編寫的主要應用於生物醫學研究的機器學習庫。它們的專案主頁上寫著:歡迎女生申請。

當時的我想:我一定要抓住這個機會。

“我是女生,我是生物醫學專業的,我寫過C++ 。”

靠著這點強行給自己找來的優勢,我開始啃起了這個專案的程式碼任務:線上性代數庫裡增加均值計算的功能模組。聽起來很簡單,但對於當時的我來說好像要小學生去解一道微積分的習題。整個程式碼庫有大約 50 萬行程式碼,我需要從裡面找到目標路徑,理解 dependency,參照其它功能的實現形式來完成這個同時支援 CPU 和 GPU 後端的 feature,寫好本地測試,在 Docker 裡跑通,再通過 GitHub 提交這個任務——每一步都需要從頭學起。

不瞞大家說,那兩個星期裡,我是邊哭邊完成這件事情的。看不懂程式碼、配不好環境、編譯會報錯、測試通不過,甚至別人的討論我也看不明白。覺得好難,覺得我什麼都不會,全都是問題,覺得沒有時間了……

但最後,我還是堅持了下來,盡我所能的完成了 feature,並通過了 Pull Request 的所有測試,如願以償拿到了實習的 offer。

那時的我心虛嗎?說實話,我是心虛的。申請時我簡直是靠著一口氣完成了任務,實習期間我又能夠應付的過來嗎?

但我要退縮嗎?我不要。那時候我發了一條朋友圈,到現在我也覺得很有道理: 人生的所有機會都是“趕鴨子上架”。想等到什麼都準備好,可能就來不及了。

鄧攀博士四年級的暑期

那個暑假,我重構了基於 C++11 特性的線性代數庫後端,統一了資料儲存和運算的介面,引入了全新的序列化模組,完成了近 4 萬行程式碼的增刪。後來,我繼續貢獻著程式碼,正式成為了團隊的一員,在第二年擔任了實習專案的mentor,並參加了團隊組織的布達佩斯線下 hackathon。

這段經歷極大地“膨脹”了我的自信。此後,我也曾在全球 C++ 開發者大會上“厚臉皮”地做過閃電演講,在 San Jose 世界科幻大會上申請擔任 coffee talk 活動的志願者負責人,在剛加入微軟亞洲研究院不久時,在全院活動上主動代表討論小組向全院彙報……我發現,這種經歷會不斷帶來正向的反饋。現在,面對我的確感到有挑戰的任務,我不會說“我不行”,而是說“我沒有把握,但我可以試試”。

人生沒有最優路徑

你們是不是發現一個問題:以我現在的職業發展方向——計算生物學來看,我其實走了一些彎路。

讀博中期那幾年,我也曾十分困擾。在通宵實驗連軸轉卻始終觀察不到我想要的生物現象時;在週日的暴風雪裡開車半小時衝到實驗室卻只看到了陰性結果繼而只能打道回府時;在做了三個月的實驗不知為何失敗卻又沒有辦法設斷點排除故障時……我也曾後悔:為什麼博士一年級的時候我沒有選擇計算生物方向呢?如果當初做出不同的選擇,是不是就不會這麼心力交瘁,也可以有更光明的未來——比如投入畢業就轉碼的大潮中,或者更早就乘上計算生物的這股東風,職業發展更加風生水起呢?

鄧攀演講時分享的照片

但現在我不再這麼認為了。

首先,受限於我當時的視野與能力,我已經做出了當時最合理的選擇。 人生沒有固定答案,我們也沒有辦法規劃出最優路徑。

其次,也許我看上去做了一些“無用功”,但 我認真對待過的每一份經歷,都會形成我的獨特積澱,最終塑造出我的獨特人生。

最後,最重要的是,在這個不停嘗試和探索的過程中,我找到了自己真正熱愛、願意為之奮鬥的領域。

找到自己真正的熱愛

勇敢地走下去

科研其實是一件挺痛苦的事情,你太容易感受到失敗和挫折。現在大家還一個比著一個的“卷”:今年你發了 5 篇論文,明年我就要發 10 篇,同輩壓力令人難以承受。

這個時候,只有找到你自己真正熱愛的領域,你才不會輕易被外界的壓力裹挾,才能不去追逐熱點與 low hanging fruit,而是真正靜下心來,去思考、去推敲、去創造一些真正有價值的成果。

而如果你真的找到了自己的真愛,那就勇敢地走下去,不要輕易地放棄。畢竟,堅持和投入才是成功的訣竅。

在我心中,微軟亞洲研究院一直是一個學術聖殿。準備面試的時候,我和朋友說:我高考恐怕都沒有這麼認真過。但當鐵巖博士在面試中問我,除了計算生物我還對什麼方向感興趣的時候,我大概給出了一個標準的面試錯誤答案。我說:如果不是知道微軟亞洲研究院在做計算生物,我可能就不投簡歷了。

在知道自己到底想要什麼之後,說話就是這麼硬氣。

想想我來研究院已經快兩年了,感覺我還處在和研究院的“蜜月期”。這裡有極大的學術自由,尊重每個人的研究興趣,還有太多優秀、靠譜的同事,可以進行思維的碰撞與跨領域的交流。雖然做研究依然讓我時不時長吁短嘆、抓耳撓腮,但我依然感覺這是在做一件讓自己快樂的事情,我也總是充滿了動力。

最後,用著名英國女作家弗吉尼亞·伍爾夫的一句話作為收尾吧:No need to hurry, no need to sparkle. No need to be anybody but oneself。

科研是一個不停求索的過程,人生也是。希望我今天的分享能夠為年輕的大家帶來一些幫助與啟發。

講者介紹

鄧攀,微軟亞洲研究院主管研究員,清華大學生物系學士,康奈爾大學細胞與分子生物學系博士。曾在 Molecular Cell, Cell Research, Seminars in cancer biology, PNAS 等國際學術期刊發表論文。當前研究方向為計算生物學,包括並不限於深度學習在免疫學、基因組學、表觀遺傳組學和微生物組學中的應用。

你也許還想看