Lesson 7(12)神经网络的诞生与发展机器学习基本概念
歡迎來到《2021?PyTorch深度學習實戰》課程的第二周!在今天的課程之前,我們已經介紹了GPU硬件、進行了深度學習框架PyTorch的部署與安裝,并且學習了深度學習基本數據結構Tensor(張量)與關鍵庫autograd的用法。本周我們將正式進入神經網絡以及其他深度學習關鍵概念的學習。??
作為0基礎課程,我們假設你對機器學習、深度學習、人工智能等概念并沒有深入的了解。即便你已經學習過一些相關概念,我依然建議你學習本課程的第一部分,作知識參考與補充用。在本周學習開始之前,請確保你已經安裝可以正常運行的PyTorch,并對Tensor概念有了一定的認識。全部課程將會在Jupyter上運行,請盡量與老師使用的工具保持一致。
目錄
一、深度學習、機器學習、人工智能與神經網絡
二、深度學習前沿研究成果及酷炫應用展示?
三、機器學習中的基本概念?
1?樣本、特征、標簽
2?分類與回歸?
3?有監督算法與無監督算法
4?如何判斷我的模型是一個好模型
一、深度學習、機器學習、人工智能與神經網絡
這是一個人人都熟悉“人工智能”一詞的時代。學習這門課程的你,應該早就聽說過深度學習、機器學習、人工智能這些專業名詞。許多人是在研究過這些概念,并且深思熟慮之后才確定了方向、開始進行學習,但也有許多人可能是因學業或事業要求,需要完成一些深度學習相關的任務,在明確了解深度學習等概念之前就開始了學習。如果你是前者,那你非常具有前瞻性,如果你是后者,那你非常幸運,因為你將學習的技能可能是本世紀最重要、最有商業價值的技能之一。無論你是出于什么目的進行學習,你都需要對相關的專業名詞有深入的理解。在這一節,我就帶你了解一下神經網絡是怎么誕生的,以及機器學習、深度學習、人工智能這些概念,究竟彼此之間有什么關系。
你可以在許多地方找到這些概念的定義,但是這些定義恐怕很難讓你產生對這些概念的進一步認識。在技術的領域里,這些概念之間是有著復雜的歷史關系的,所有的一切,都是圍繞著人類最初的”預測未來?“的渴望展開。
人們總是希望能夠提前得知未來會發生的事,如果我能知道明天會下雨,我就會帶傘,如果我們知道哪支股票明天會漲,我就會在今天買入——提前預測短時間內的未來,會給我們的生活帶來巨大的便利。??如果這種短時間預測能夠規模化,就會產生巨大的商業價值——1930年代的數學家,喬治蓋洛普就曾經做到過,他在沒有計算機、沒有數據庫的情況下,靠人力手算、正確預測了《亂世佳人》電影的票房,準確率達到94%,直接就讓好萊塢制片人都跪下來叫爸爸,求著他做電影數據運營。
實際上,這種短時預測很多時候都可以被實現。比如,常常在海上航行的船員,看到云的流動、感受風的方向,就知道會不會下雨。有經驗的股票經紀人、銀行經紀人,在深入研究某個公司的狀況之后,就能夠判斷這個公司的股票會不會漲……你可能已經發現了,這種預測和判斷,需要的是在某個領域深入的?“知識和經驗”。但是,經驗和知識是無法在一夜之間獲得的,在商業價值極高的領域(例如電影、金融)就更是如此。即便學習相同的知識,每個人能夠達到的水平也是不一致的。如果從“培養精尖人才”?開始考慮預測的規模化問題,那成本就高得離譜了。
所以,預測的規模化非常難以實現。為了解決這個問題,許多學科的尖端人才都在“預測未來”這個領域努力過。以喬治蓋洛普為代表的數學家、統計學家們一馬當先,先提出了“用數學模型代替人類進行學習”的概念。依靠概率計算、模式擬合(pattern fit)等方法、數學家們創造了許多數學模型(最典型的就是線性回歸、貝葉斯模型等),這些模型能夠根據歷史數據學習出某種規律,并依賴這些規律實現預測。比如最典型的線性回歸,就是假設輸入與輸出數據之間是直線關系,通過歷史數據擬合出直線后,再給出新的輸入數據,線性回歸模型就可以根據已經得出的直線,推斷出輸出。這些模型的學習方式與人類并不相似,但是他們確實擁有“從過去學習,并用學到的東西去進行預測”的能力。后來,數學家們將能夠根據歷史數據實現預測或得出某種結果的計算步驟或計算方法稱之為算法。
當算法出現之后,計算機科學家們也發現了機會。算法是數學方法,即便實現了學習和預測的過程,還是需要人為進行計算,沒有規模化的可能。而計算機天生擁有規模化的能力,只要編好特定的程序,計算機可以在很短的時間內給出大量的預測結果,時效性很強。因此,計算機與數學的結合可謂是歷史的必然,用計算機實現數學家們提出的算法,可以瞬間提升”學習“和”預測“的效率。從這一瞬間開始,預測的規模化真正成為了可能。現在唯一的問題,就是數學家們提出的算法,如何才能進行更準確的預測了。
當計算機科學家與數學家都一門心思在搞數學,各種研究算法時,從全新角度提出全新思想、并且從此讓人工智能走上歷史舞臺的人們是——哲學家與心理學家們!
哲學家相信,人類的思考是一種自然現象,與地球自轉、春秋更替一樣,大腦的思考也是具有規律和機制的。只要有機制,就可以模仿,只要有規律,就可以復現,模仿其結構,復現其規律,就很有可能模擬出它的功能,實現像人類一樣的學習和預測。具腦神經科學家研究,人腦中具有300億個神經元,這些神經元通過叫做”軸突“的結構鏈接在一起。在人類進行學習或思考時,電信號會在神經元上傳入、傳出,并逐漸被大腦所理解。
1943年,在哲學、數學、心理學以及腦神經科學的相互碰撞下,模擬人腦結構、復現人腦思考規律、以制造和人相似的智慧為目的的算法——人工神經網絡(ANN)誕生了。它用一個簡單的圖形模擬了人腦的學習方式——我們使用圓來表示神經元,使用線來模擬”軸突“,數據就是電信號。我們從神經元左側輸入數據,讓神經元處理數據,并從右側輸出預測結果,看起來就和人類學習的方式非常相似。
一時之間,模擬人類智力的研究領域人聲鼎沸,相關研究遍地開花,好不熱鬧。?
二戰結束后,計算機科學與算法發展迅速,研究者們普遍接受了使用計算機來規模化算法學習和預測的過程。1950年,“圖靈測試”被定義,如果一臺計算機能夠與人類展開對話而沒有被辨別出其機器身份,?那么這臺機器就具有智能。1956年,“人工智能”概念也被提出,指代模擬人類智慧的各項相關研究。同年,“機器學習”概念被定義,用以表示使用計算機實現算法,使得計算機能夠學習數據、獲得經驗、并實現預測的過程,同時,許多經典的預測模型、包括神經網絡,也都被統稱為"機器學習算法"。也因此,神經網絡算法的許多思想,都與傳統機器學習算法是共通的。
就在各個學科都迅猛發展、熱鬧非凡的時候,神經網絡——它撲街了。
發生了什么呢?人們發現,神經網絡的設計理念——模擬人類大腦——確實非常先進,但是神經網絡算法本身有幾個致命的弱點:
- 預測效果差
人工神經網絡算法本身存在著許多缺陷和局限,這讓它的效果在許多實際數據上都很糟糕(最初的神經網絡不能實現非線性預測、還存在嚴重的過擬合問題)
- 數據需求大
神經網絡需要大量的數據去喂養,在缺乏數據的情況下,它的效果常常不如其他機器學習算法
- 計算時間長
大量的數據需要大量的時間進行計算,而神經網絡的計算機制本身也很復雜。計算時間過長不僅占用資源、不利于調優,還大大削弱了預測的時效性。
而最致命的弱點是:
- 根本無法達到人類智力水平
無論如何訓練,神經網絡都不能達到人類的智力水平,短時間內也看不到其他商業應用場景。投資者們的幻想破滅,政府和金融機構都撤出投資。
沒有資本,一切都停止了轉動。很快,無論是學術界還是工業界,都發現神經網絡是一條走不通的道路。同時期,邏輯回歸、KNN、決策樹等算法被逐漸發明出來,機器學習中的其他算法開始繁榮發展,?神經網絡卻無人問津。在此之后,使用神經網絡算法的學術論文有很大可能無法被發表,相關的學術項目也無法拉到經費,這又進一步壓榨了神經網絡研究者們的生存空間。十年之后,其他機器學習算法的性能也逐漸遇到了瓶頸,雖然不像神經網絡一樣處處都是致命的缺陷,但經典機器學習算法的預測效果也沒有達到能夠實現商業價值的程度,整體來說預測效果依然不佳。整個人工智能及機器學習研究都進入到寒冬期,三十年間,人工智能成了冷門的研究領域。
寒冬一直持續到2000年。與1970年代不同,新世紀到來時,神經網絡算法被大規模應用的各項條件已經成熟:
- 神經網絡算法有了長足的進步
在寒冬期間,堅信神經網絡潛力的科學家們做出了許多的努力來改良神經網絡。他們一面提升神經網絡的預測效果、一面減少神經網絡的訓練時間,發明了反向傳播等至今都十分關鍵的技術,在算法層面讓神經網絡上了一個臺階。這些改良的技術,我們都會在后續的課程《優化神經網絡》的部分學到。
- 全球數據量激增
互聯網的誕生、計算機的推廣讓全球數據量激增,并且讓巨量數據的儲存和使用成為了可能。訓練神經網絡所需的數據量不再成為問題。
- 芯片、云技術迅猛發展,人類獲得了前所未有的巨大算力
比起1970年代,??2000年之后的計算資源價格大幅下跌,同樣價格可以購買到的計算資源越來越強大。當計算資源變得越來越容易獲取,神經網絡的計算速度得到提升,能夠使用的數據量也變得更大。
算法、數據與算力的進步,完全釋放了神經網絡的潛力。當數據量夠大、神經網絡夠復雜時,神經網絡的性能會遠遠超出其他機器學習算法,甚至超越人類。這為預測算法的商業化應用打下了基礎。
而最為關鍵的是,大家發現,我們之前弄錯技能點了!??在大部分的商業應用場景,我們根本不需要人類級別的智力!我們只需要一個能夠將大規模任務完成得很好的機器。??比如如火車站、飛機場的人臉識別,我們根本不需要使用神經網絡創造出一個檢票員,我們只需要一塊屏幕,以及能夠識別此人與其身份證照片數據的工具就可以了。
2006年時,神經網絡的資深研究者Hinton提議,為神經網絡的相關研究取一個單獨的名字。這個名字,聽起來得比機器學習厲害、比機器學習更有希望,它必須代表了神經網絡越大、越深、效果就會越好的特性,這個名字將會成為人工智能實現的基礎,并且在21世紀剩下的幾十年中、成為非常關鍵的技術。這個名字就是今天我們都很熟悉的深度學習。
說到這里,相信你已經對神經網絡的相關事實有了深刻的印象,并且對深度學習相關概念有了清楚的認識。從歷史發展的脈絡來看,人工智能是模擬人類智慧的各項相關研究,它包括了模擬人類學習和預測能力的機器學習算法。機器學習算法賦予計算機學習的能力,而神經網絡是機器學習中最強大、效果最優的算法。深度學習,是專門研究神經網絡的學科,因此它是機器學習的子集。現在,我們說到的人工智能技術,一般泛指深度學習與機器學習技術,人工智能也是深度學習與機器學習實際應用的表現。?
還有一些說法認為,機器學習與人工智能是交叉學科,即部分機器學習算法是為人工智能技術服務,而人工智能技術中也只有一部分是機器學習。現在,這種說法也被越來越多的人所接受,但無論如何,機器學習和深度學習對于人工智能的實現是有巨大影響的。
如今的商業環境中,規模化應用的算法基本都是深度學習,或機器學習與深度學習的結合。我們如果想在算法領域深入下去,就必須學習深度學習。從今天的情況來看,深度學習算法還有極大的潛力,隨著算法、數據與算力三個方向的不斷發展,神經網絡具備完全替代部分技巧性工作的可能性。即便神經網絡的發展在今天就停止,它也已經極大地改變了我們的生活方式——現在,許多自媒體平臺都有使用以深度學習為基礎的推薦系統,如抖音、快手,同時,美團對外賣騎手的統籌、淘寶京東的”猜你喜歡“欄目,也都是深度學習應用的實際場景。
二、深度學習前沿研究成果及酷炫應用展示?
在這里,我給大家總結了一些2021年酷炫的AI應用。其中許多視頻來自油管,需要科學上網,注意,科學上網后不能上B站,如果你需要看B站的視頻,可以先關閉科學上網工具。如果你對英文不熟悉,油管播放器的右下角可以自動調出字幕,你可以選擇中文字幕。順便一說,作為深度學習技術集大成的Google的是視頻平臺,油管的字幕是語音捕捉后自動翻譯的,無論是捕捉還是翻譯過程,都由深度學習算法完成,你可以盡情地體驗油管帶來的感受。
三、機器學習中的基本概念?
我們現在已經了解了神經網絡是如何誕生的、了解了它與人工智能、機器學習、深度學習都有什么關系。接下來,我們需要了解機器學習中的許多通用概念,并將其推廣到神經網絡之中,來幫助我們理解神經網絡算法的方方面面。注意,雖然許多概念在深度學習和機器學習中有同樣的含義,但因應用場景不同,這些概念的相關知識也會有所區別。在這里,我們只會講解與深度學習相關的部分。
1?樣本、特征、標簽
在使用機器學習或深度學習算法之前,我們往往被賦予了需要完成的任務。在傳統機器學習中,我們的入門級任務一般是這樣的:我希望算法為我判斷,一朵花是什么類型的花。于是我們收集了以下的數據:
在機器學習中,我們使用的數據一般都是m行n列的二維數據表。這些表格通常是規則儲存的數字或者文字,通常表示為NumPy中的array或者Pandas中的DataFrame(熟悉Python的你應該能夠看出來,上圖是一個DataFrame)。
在這個數據表中,橫向的每一行就是“樣本”(samples),是我們收集到的一條條數據。比如說現在展現的這個數據集,每條樣本就是一朵花。
每一行前的數字是樣本的索引(Index),也就是每一朵花的編號,這個編號對于每一個樣本而言是獨一無二的。
數據表中的列,則表示每個樣本的一些屬性,在機器學習中我們稱其為“特征”(features),也叫做“字段”或“維度”,注意,這里的維度與二維表的維度可不是相同的含義,前者指的是n的大小,后者指的是.shape后返回的數字的個數。
展示的最后的一列是“標簽”(label),也叫做目標變量(target,或者target?variable)。標簽也是樣本的一種屬性,不過通常來說,它是我們希望算法進行預測、判斷的問題的正確答案。比如現在的問題是“一朵花是什么類型的花??”,而這個數據表中的標簽就是“是哪一種花”。
在經典機器學習中,因為數據表總是由一個個的特征組成,所以我們一般把數據表(不包括標簽的部分)稱之為特征矩陣,往往使用大寫且加粗X的來表示,同樣的,我們使用字母x表示每個特征.
在深度學習的世界中,我們接到的任務往往是這樣的:辨別下面的圖片中,是貓還是狗。
在這種預測要求下,數據就不再是二維表了,而是語音、圖像、視頻這些非結構化數據。對于深度學習而言,我們使用的基本數據結構是張量Tensor,單一的圖像數據就需要三維Tensor來進行表示,語音和視頻數據維度則更高,所以我們的入門數據集的結構往往看起來是這樣的:?
?或者是這樣的:
在第一個例子中,我們的Tensor結構為[32,1,28,28],這里的32就是索引,代表圖像上的32張圖,其中每張圖都需要一個三維張量來表示。而在第二個例子中,因為只有一張圖,所以沒有索引,其結構也只有三維。1是顏色通道,28、28是像素點。
在高維張量的操作中,我們一般不會再區分”行列“,而是認為每個索引對應的對象就是一個樣本。比如結構[32,1,28,28],實際上就是32個三維Tensor所組成的四維Tensor,這32個三維Tensor就是32張圖片,也就是32個樣本,而這些三維Tensor所包含的內容,也就是32個樣本分別對應的特征。由于我們所使用的張量往往是高于兩個維度的,因此我們不能稱其為“矩陣”,因此對于深度學習,我們一般稱特征所在的張量叫做特征張量。同樣的,我們還是用大寫且加粗的X來表示特征張量。
由于數據是非結構化的,所以標簽也不會”位于數據的最后一列“之列的。在深度學習中,標簽幾乎100%是和數據集分開的,不過這些標簽看起來都很普通,和機器學習中的標簽差不多:
2?分類與回歸?
標簽是機器學習中非常重要的一個概念,不同的標簽指向了不同的問題。機器學習可以解決現實中廣泛存在的各種問題,但是應用最廣泛的問題主要是兩類:分類與回歸。
當機器學習在判斷“有無”、“是否”、“是A還是B還是C”時,它預測出的答案會是某種類別,這就是分類問題,比如剛才我們假設的,判斷一朵花是哪一種花。當機器學習在預測“是多少”,“增長多少”這些問題時,它給出的答案就是某個具體的數字,這就是回歸問題。最典型的,預測某支股票會不會漲,是分類問題,預測某支股票會漲/跌多大幅度,是回歸問題。你可能注意到,分類與回歸的區別就在于預測目標的不同,在具體數據中,也就表現為標簽的不同。
在分類問題中,標簽是類別,表現為離散型變量(Categorical),往往是整數,如0、??1、??2等。
而在回歸問題中,標簽是具體數字,表現為連續型變量(Continuous),往往是連續的浮點數。?
在機器學習中,標簽是會隨算法的任務的變化而變化的——比如,判斷是哪一種花,標簽就是“是哪種花”這一列,假設我們想預測的是花瓣的長度,那標簽就是“花瓣長“這一列了。所以在許多經典機器學習的應用案例中,第一步是根據業務問題”定義標簽“。幸運的是,在深度學習中,這種情況非常非常少。但在實際應用時,我們也可能會遇見需要抉擇標簽的時候,知道”標簽“是可以變化的,是人為規定的,這一點非常重要。
當然,除了分類與回歸之外,算法還有許多應用場景,但在最初學習深度學習的時候,我們會接觸到的幾乎都是分類或回歸任務。我們會在未來的課程中慢慢給大家講解更多的應用。
3?有監督算法與無監督算法
既然標簽是人為規定的,那是否可以選擇沒有標簽的算法呢?當然可以。對于有標簽的任務,我們稱其為“有監督學習”,包括眾人耳熟能詳的眾多算法:??KNN,決策樹,支持向量機,線性回歸,邏輯回歸等等,自然也包括大部分神經網絡。對于沒有標簽的任務,被稱為“無監督學習”,包括了聚類分析,協同過濾(推薦系統中的核心算法之一),以及變分自編碼器等深度學習算法。
有監督學習非常符合人工智能誕生之初人們對于算法的要求:從我們已知的歷史數據中進行學習,然后去預測我們渴望了解的東西。無論是從過去的股價預測未來的股價,還是從過去的天氣預測未來的天氣,“歷史數據”都帶有“正確答案”,也就是有標簽。現代大部分應用廣泛的算法都是有監督學習,這些算法能夠將可觀察到、可記錄到、并且已知答案的輸入數據,轉變為需要邏輯分析才能夠得出的有價值的輸出。在之后的課程中,我們將廣泛體會到有監督學習的力量。
無監督學習,相對的,由于沒有標簽,所以我們沒有給算法提供任何的正確答案。大多數時候,我們只是告訴無監督算法說:好了,這些是數據,你去學學看,然后告訴我你得到了什么。在深度學習中,無監督算法在許多時候都被我們用來作為輔助算法,以增強有監督算法的學習效果。
在實際使用中,還存在著半監督學習算法、強化學習等更加深入的領域。在所有這些領域,都有著大量的算法供我們學習和使用,在后續的課程中我們也會提到其中常用和經典的部分。
4?如何判斷我的模型是一個好模型
現代機器學習算法大約有幾十個,每年還有許多新的算法在被提出,從中選出效果優秀、符合需求的模型也是機器學習中的重要課題。為此,我們需要模型的評價機制。如何判斷模型是一個好模型呢?在這里,我們提出模型的評估三角:
- 模型預測效果
在機器學習能夠落地的場景,模型進行判斷/預測的效果一定是我們追求的核心目標。在工業場景,如人臉識別中,如果模型效果不能達到幾乎100%準確,那我們就無法使用算法代替人工檢查,因為沒有人可以承擔算法判斷失敗之后的責任。因為相似的理由,深度學習在醫療領域的應用永遠只能處于“輔助醫務人員進行判斷”的地位。在一些其他場景,如推薦系統,雖然模型的效果可能不需要達到近乎100%的準確,但優秀的推薦系統所帶來的效應是非常強大的,而效果不夠好的算法則是又昂貴又失敗的代碼罷了。
對于不同類型的算法,我們有不同的模型評估指標,我們依據這些評估指標來衡量模型的判斷/預測效果。在之前的課程中,你應該已經接觸了線性回歸的評估指標之一:SSE,也就是真實值與預測值的差異的平方和。在之后的學習中,我們會展開來談不同算法的評估指標。當課程結束時,你將會了解如何評估有監督、無監督、強化學習模型的效果。
- 運算速度
能夠同時處理大量數據、可以在超短時間內極速學習、可以實時進行預測,是機器學習的重要優勢。如果機器學習的判斷速度不能接近/超越人類,那規模化預測就沒有了根基。如果算法的運算速度太慢,也不利于調優和實驗。同時,運算緩慢的算法可能需要占用更多的計算和儲存資源,對企業來說成本會變得更高。事實上,現代神經網絡做出的許多改進,以及算法工程師崗位對于數據結構方面的知識要求,都是為了提升神經網絡的運算速度而存在的的。在模型效果不錯的情況下保障運算速度較快,是機器學習中重要的一環。
- 可解釋性
機器學習是一門技術,是一門有門檻的技術,曲高客寡,大眾注定不太可能在3、5分鐘之內就理解機器學習甚至深度學習算法的計算原理。但是技術人員肩負著要向老板,客戶,同事,甚至親朋好友解釋機器學習在做什么的職責,否則算法的預測結果很可能不被利益相關人員所接受。尤其是在算法做出一些涉及到道德層面的判斷時,可解釋性就變得更加重要——例如前段時間鬧得沸沸揚揚的UBER算法解雇UBER司機事件,UBER算法在司機們違規之前就預測他們會違約,因而解雇了他們,從算法的角度來看沒什么問題,但由于UBER無法向司機們解釋算法具體的運行規則,司機們自然也不會輕易接受自己被解雇的事實。幸運的是,隨著人工智能相關知識的普及,人們已經不太在意深度學習領域的可解釋性了(因為神經網絡在預測效果方面的優勢已經全面壓倒了它在其他方面的劣勢)。但在機器學習的其他領域,可解釋性依然是非常關鍵的問題。
- 服務于業務
只有服務于業務,或服務于推動人類認知的研究,算法才會具有商業價值。一個能100%預測你明天午飯內容的算法,或許對個人而言非常有用(解決了人生三大難題之一:午飯吃什么),但不會有公司為它投資,也不會有人希望將它規模化。機器學習算法的落地成本很高,因此企業會希望看到算法落地后確定的商業價值。只有資金流動,技術才能持續發展,算法才能繼續發光發熱。
在傳統機器學習領域,評估三角的因素缺一不可,但在深度學習領域,沒有什么比效果好、速度快更加重要。如果還能有一部分可解釋性,那就是錦上添花了。當我們在訓練深度學習模型時,我們會最優先考慮模型效果的優化,同時加快模型的運算速度。每時每刻,我們都是為了模型效果或預算速度而行動的。記住這一點,它會成為日后我們學習任何新知識時的動力。
總結
以上是生活随笔為你收集整理的Lesson 7(12)神经网络的诞生与发展机器学习基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lesson 6.动态计算图与梯度下降入
- 下一篇: Lesson 7 (3) 深入理解PyT