背景介紹
現在在學校做的事情一直跟deep learning有著關系,也非常慶幸自己可以能夠做著自己感興趣的事情。從去年4月份開始,作為一個即將從數學系畢業的本科生,由于自己的方向也不是統計,做著和machine learning、deep learning完全無關的事情,但是一直對deep learning略有耳聞,對人工智能也有著深深的興趣,特別是在Alpha Go大戰李世石取得大勝之后,更是對人工智能充滿了敬畏,本來認為這些都是那些計算機天才,黑客才能做的事情,也很遺憾自己沒能選擇這一專業,不能投身與這場巨大的變革,也不能參與到人類的又一次浪潮,遂轉身繼續開始看數學專業書。
然后一切卻又是那么奇妙,感謝我們現在身在這樣一個互聯網發達的時代,也感謝各大名校教育家們的無私奉獻,將他們的課程都曬到了網上,使得我們能夠這么輕易的接觸到世界上頂級名校的各種課程。一切的起源都來自于一個mooc網站,coursera。無意中知道了coursera,開始瀏覽里面的課程,同事也了解到了coursera的兄弟網站,edx。于是在感慨如此多可以學的知識的同時,開始投身在mooc的海洋當中,開始在coursera上學課程,非常欣喜的發現了華盛頓大學開的一個機器學習系列課程(沒錯,我在coursera上學的第一門竟然不是鼎鼎大名的Andrew ng的machine learning課程),從這么課中,我了解到了一個我現在都覺得無比優雅的語言,python。
大家肯定都對大一進校開始學習的c語言還歷歷在目,同時可能感到陣陣惡心。我也是這樣,進入大學就開始學習繁瑣的c語言,并沒有機會感受到編程的美的時候,就開始迷失在了c語言繁瑣的語法中,從而導致了我長時間對編程有著抵觸心理。因為一個好朋友對我的開導,才使得我重新對編程有了一點興趣,但是對c語言也是很抵觸的,后面我開始學著數學系學生該學的mathematics和matlab,感受到了一點點編程的樂趣,這都是后話了。
繼續把目光集中到去年4月份,這個時候我對python還是抱有抵觸的心理,抱著試一試的心態,我了解了一下python,發現這個語言既有著編程語言該有的特性,也有著科學計算語言的方便,于是開始投身于這門語言的學習,從edx中的mit開設的Introduction to Computer Science and Programming Using Python。很感謝這門課,由淺入深的帶我進入了編程領域,讓我對編程重拾信心,這也使得我得意進入machine learning這個領域。
接著我在一邊做著畢業設計,一遍開始在coursera上學習machine learning,同時還了解了大量新鮮的事物,比如markdown(就是我現在正在寫的),github,jupyter notebook等。我開始對這個領域感興趣,并且感覺這個領域的一些東西也需要一些數學基礎,接著我遍開始投身于在網上學這些課程,直到后面我開始去一些名校的網站上面看這些教授的課程和handout。
正在我學得起勁的時候,又有一個網站進入了我的視線,udacity。這個網站4月份才開始創辦進入中國,并且提供免費學習納米學位。學習過程中是通過完成一個又一個項目來完成的,在學習這個的過程中,我感受到了深深的成就感,慢慢對機器學習越來越感興趣。這個學位是收費的,一個月1000吧,有點貴,而且現在還開通了各種新的課程,比如無人駕駛汽車,人工智能等,按學期收費,每個學期5000多,比我的大學學費還貴,有沒有。因為這是美國的網站,所以是按美元來收費的,當然是很貴。我們也可以鉆空子,去github上搜索udacity,就可以免費下載他的所有項目,但是這樣就無法使用udacity獨特的review服務,就是你把你寫的項目代碼提交上去,會有專門的評審來審核你的代碼,并且給你提供修改方案。
現在我仍然在網上學習著一些新鮮的課程,而且現在很多大學已經將課程放在了網絡上,同時github上也有著越來越多優秀的深度學習項目,所以只要想學就可以在網上找到無數的資源。
經過
轉眼我到了研一開學,本以為我要開始學習數學課程,所以我想同時繼續在網上開始學習機器學習。但是機遇就是這么突然,我突然發現在數學系下面居然有做應用的老師現在開始涉足深度學習這個領域。所以我毅然決定去投靠這個導師。也很慶幸我能夠成為他的弟子,開始了我的深度學習之旅。同時開始了解到了大量的cnn,rnn,以及一些框架的知識。我終于可以開始學習自己感興趣的東西了,雖然感覺每天都充滿著挑戰,但是也感覺自己充滿了干勁。
這個時候,我發現了知識的薄弱,我開始上cs231n的課程,stanford的計算機視覺大牛李飛飛開的課程,深入淺出的講解了cnn網絡,讓我深刻的了解到了卷積神經網絡,具體的可以看我之前寫的文章。
剛開始我使用tensorflow,畢竟google是業界大拿,然后發現tensorflow用著有點臃腫,于是在社區上找到了keras,一個第三方插件,以tensorflow作為backend,使用起來非常簡單,現在google已經將keras作為了官方的插件,具體的keras內容也可以看我之前的文章。
接著我發現了pytorch,torch的python版本,我重新找打了當初寫python那種簡潔與美感,于是不管不顧,也不管它是否才發行一兩個月,果斷開始學pytorch,花了60分鐘就感覺基本入門了,實在是比tensorflow簡單太多。如果你既想使用底層框架,不想使用第三方封裝的插件,因為這樣會妨礙你實現一些自己想實現的功能,同時你對內部的不可控不能接受的話,可以試試pytorch,既比tensorflow簡潔,同時又是一個第三方的底層框架,能夠讓你對內部完全把控。具體pytorch的內容也可以看我之前的文章。
就在這個時候,我開始了學校的一個新項目,我這才發現我這個半路出家的deep learner的代碼能力實在是有著太多的短板了。看著一篇論文在github上的開源代碼實現,我基本照搬過來實現我的項目就看得我頭大,我覺得我在工程實現能力上有著太多的缺陷。所以我決定開始這個系列,手擼神經網絡,并且每周用pytorch實現一些小項目,分享出來,提高我的代碼能力。我的基本想法是先看一遍項目的代碼實現,然后自己背著再實現一遍,哪里遇到了障礙就回頭去看看源碼是怎么寫的,讓自己的代碼能力越來越高。
結語
希望通過我每周的一個小項目,我能夠快速的提高我的工程能力,如果各位有興趣也可以照著我這個方法去試試,可以自己去github上找一些高質量的項目,代碼就是要多寫才會寫得越來越好,就是要模仿那些大牛寫的代碼我們的代碼能力才能夠不斷地提高,與大家共勉,希望大家都能夠成為牛逼的工程師,程序員,進入心儀的公司,能夠完成自己的夢想,能夠在這個歷史的變革成為一個有影響力的人。