1. 程式人生 > >演算法工程師之路——Deeplearning.ai神經網路與深度學習篇Week1

演算法工程師之路——Deeplearning.ai神經網路與深度學習篇Week1

寫在前面——一點碎碎念

天將降大任於是人也,必先苦其心志,勞其筋骨,餓其體膚,空乏其身,行拂亂其所為。——《孟子•告子下》

      塵埃落定,在好好學(wan)習(shua)三年之後,我成功僥倖收穫了的UESTC MSE的Offer,心裡萬分激動,想著Bright Future應該是在向著自己招手了,hhhh。興奮勁兒已過,迴歸現實,需要好好做下未來的學習生活規劃。其實在未來選擇無非兩種:繼續攻讀PhD或是工作。無論是哪一種,如果不犧牲大量的腦細胞,怕是不咋現實。早做安排,早做規劃,從來都是一件需要認真對待的事情。於是乎,我大量瀏覽了全國最大程式設計師社交平臺(知乎),得出了一點自己小小的見解:

  1. BAT、網易、華為等大廠演算法崗位供大於求,幾乎是30:1、40:1甚至100:1的中獎率,恐怖如斯。
  2. DeepLearning是當今人工智慧最火領域(似乎有點老生常談,前幾年已是如此)。
  3. 沒有收到Offer或是被拒掉不一定是你不行,也可能是你不適合,這意味著比起全面瞭解、熟悉各項AI技術,公司更希望你能夠在特定領域中解決實際業務遇到的問題,即對口性
  4. 工程能力科研能力同等重要。很好理解,這個世界需要工程師與科學家共同協作,缺一不可。

      隨便翻看大廠對演算法工程師AI工程師大資料工程師的要求,你會發現壓力甚大,比如這樣的: 騰訊校招       額,挺恐怖的對吧?又比如,這樣的: 阿里校招        程式設計師高薪那不是說說就得到的,Pay attention to your hair,哈哈哈。我覺得在我的本科四年裡,其實一直並沒有受到過很嚴格的工程訓練,也並沒有太多品嚐過熬夜看paper的滋味(好吧,除了數學建模!)。我非常希望自己能夠早日找到適合自己研究的那一個領域和點,持續努力並體會到掌控知識的快樂,向大佬們看齊。還是那句話:

                                       縱有疾風起,人生不言棄!

Deeplearning.ai神經網路與深度學習(Week1)

      嗯哼,既然說了這麼多,那就馬上開始行動。在開始部落格撰寫之前我便學習過Andrew Ng大牛的Machine Learning課程,但我今天不打算整理這節課的資料,我將在後期的部落格中進行整理。當前的目標是同樣出自吳恩達老師之手的神經網路與深度學習課程,在此多謝網易雲課堂與吳大佬的合作使我們能夠如此早的看到有準確中文翻譯的課程視訊,要不然只能去死磕Coursera上有點尬的中文翻譯了,手動狗頭。廢話不多說,進入正題:       在第一週的學習中,主要是對神經網路以及深度學習的概念、興起的原因、應用進行了大致的闡述。在解釋神經網路時提到到了較為經典的房價預測模型

      網上有許多詳細講解神經網路概念的文章,我就不再贅述。圖中的含義即房價與房子的size、bedroom、zip code、wealth有關,我們需要找到其中的某種規律,建立一種函式對映關係,對蒐集到的以上四種指標的資料進行處理輸出對應的房價,有許多方法可以達到這種效果,如多元線性迴歸。在這裡我們使用神經網路演算法,將四種指標的資料作為Input layer(輸入層),然後傳入Hidden layer(隱藏層)中的Hidden unit(隱藏單元)進行函式處理,最終得到結果即預測的房價,從Output layer(輸出層)輸出。        整個神經網路的處理過程較容易理解,關鍵在於神經網路架構的設計、內建函式的選取以及輸入指標的規定,針對於不同場景的業務,我們可以構建出完全不同的神經網路結構進行問題處理。CNN、RNN等深度學習演算法,其基礎便是最基本的神經網路架構,因此,搞懂、領悟神經網路是學好深度學習的第一步。       在搞懂神經網路的原理之後,我們再來談談為什麼深度學習會在近些年突然爆發,得到大量的關注?原因很簡單,Scale drives deep learning progress,即規模推動深度學習。此處的規模不僅僅是指資料量規模,同時也指問題規模。針對一個簡單問題,我們也許只需要特別少量的資料、特別簡單的神經網路模型,便可以在1分鐘內獲得我們想要的結果,但會不會覺得如果我們只把神經網路應用在類似於1+1=2這樣的問題上,實屬大材小用呢?對於複雜問題的處理,我們就不能僅僅指望於一層或兩層神經網路模型可以幫我們很好的完成任務,我們需要改進神經網路模型才能處理海量資料,並在較短時間內得到更加精確的結果,這便是深度學習的意義。

      對於人工智慧領域,甚至其他領域的學習,我們都可以採用上圖的方式:當你有了一個不錯的idea,你需要使用手邊的程式設計工具進行code,產生輸出,並放在實際執行環境下進行experiment,它會給出反饋,以便於你去調整自己的idea,迴圈往復。在今後的學習中,小夥伴們不妨多運用這樣的思路,會對自己有個不錯的提升。       Supervise Learning(監督學習)是神經網路應用較為廣泛的一類問題,主要分為Regression(迴歸)和Classification(分類)兩種,上文提到的多元線性迴歸便是Regression的一種情況。迴歸與分類有共同點但又不盡相同,在此引用李航老師《統計學習方法》中的描述:

輸入變數與輸出變數均為連續變數的預測問題是迴歸問題; 輸出變數為有限個離散變數的預測問題成為分類問題; 輸入變數與輸出變數均為變數序列的預測問題成為標註問題。

       所以,區別迴歸與分類,最直觀的方式便是看輸出結果連續與否。在後續的學習中,我們也將會看到許多經典的迴歸、分類問題,並使用神經網路模型進行解決,這裡便不再贅述。       還有一點需要特別強調的是,在資訊化時代的今天,我們所接觸的資料不一定是簡單的整數、浮點數資料、表格資料等,即結構化資料,也可能遇到影象、語音、文字等較為特別的資料,即非結構化資料,在語音識別、影象處理等領域,我們會廣泛應用到非結構化資料,這是需要我們關注的。

      第一週的學習雖然內容不多,但也起到了一定的引導作用,下一週將重點學習神經網路的基礎知識部分。