人工智能、機器學習和深度學習

這一年來,AI領域層出不窮的技術和應用,真的有點讓人疲于奔命。其中AIGC領域的diffusion model 和 NLP領域的 ChatGBT 引領了這一輪風潮。AI取代越來越多腦力工作者的趨勢已經不可逆轉,在這經濟下行內卷嚴重的當代,競爭將越發的殘酷。作為走在風口前沿的技術人,用stable diffusion繪制過逼真的畫作,也用ChatGPT生產修改過樣板代碼,AI帶給我的危機感是實實在在的,在ChatGPT風頭正勁的那段時間,焦慮一度讓我夜不能寐。

在AI狂潮告一段落的當下,是時候冷靜下來思考,我們應該怎么看待AI,對待 AI 的正確態度是什么,這篇文章觀點我大體上贊同:

  1. ChatGBT像一個吸收了所有人類知識、但需要別人幫忙才能把這些知識串起來的應屆畢業生。看來我今年的工作是安全的。但是,我需要好好學習 ChatGPT,精通它的使用,讓我明年也是安全的。

  2. AI 會大大增強程序員的生產力,并創造過去不可能的產品。AI 本質是生產力工具,跟高級語言、云服務、開源代碼等是一個性質。寫代碼的門檻會降低,更多的人會進入 IT 行業,軟件市場將變大。

  3. 我們要成為這個過程的一部分,需要讓自己積極主動,不斷更新技能,接受新工具。

是的,我們要成為這個AI落地各行各業過程的一部分,也是我這一年來自學機器學習、深度學習的動力和緣由,也陸陸續續在工作中落地了一些簡單的ai項目,而這個機器學習和深度學習的系列就是我學習過程的一個記錄和總結。

內容大綱

  1. 人工智能、機器學習和深度學習
  2. 機器學習
  3. 欠擬合、過擬合
  4. 機器學習通用流程
  5. 神經網絡

人工智能、機器學習和深度學習

人工智能可以被定義為將通常由人類完成的智力任務自動化。因此,人工智能是一個綜合性的領域,不僅包括機器學習與深度學習,還包括更多不涉及學習的方法。人工智能的真正挑戰在于解決那些對人來說很容易執行、但很難形式化描述的任務,比如識別人們所說的話或圖像中的臉。對于這些問題,我們人類往往可以憑直覺輕易地解決。

那什么是機器學習?機器學習就是自動發現解決復雜問題的規則的過程。計算機通常的工作方式:程序員編寫規則(計算機程序),計算機遵循這些規則將輸入數據轉換為正確的答案。而機器學習卻是把這個過程反過來:機器讀取輸入數據和對應的答案,然后從中找出合適的規則。與統計學不同,機器學習經常要處理復雜的大型數據集(比如包含數百萬張圖片的數據集,每張圖片又包含數萬個像素),用經典的統計分析(比如貝葉斯分析)來處理這種數據集是不切實際的。因此,機器學習(尤其是深度學習)呈現出相對較少的數學理論,從根本上來說是一門工程學科。機器學習是一門非常注重實踐的學科,由經驗發現所驅動,并深深依賴于軟硬件的發展。

深度學習是機器學習的一個分支領域:它是從數據中學習表示的一種新方法,強調從連續的層(layer)中進行學習,這些層對應于越來越有意義的表示。“深度學習”中的“深度”指的并不是利用這種方法所獲取的更深層次的理解,而是指一系列連續的表示層。數據模型中包含多少層,這被稱為模型的深度(depth)。

人工智能、機器學習和深度學習的關系

機器學習

有三種技術力量在推動著機器學習的進步:

  • 硬件

  • 數據

  • 算法

有一句形象的比喻:如果AI的發展是制造火箭,那么算法就是引擎,數據就是燃料,而硬件就是加速器,這三者缺一不可。在機緣巧合的10年前,它們共同推動了一直延續至今的第三波人工智能的浪潮,雖然我們不知道這次還能持續多久,但在各個領域落地開花后仍然足夠改變這個世界。

機器學習的四個分支

  • 監督學習:指用帶標簽的樣例來逐步減小模型輸出誤差的方法,叫作監督式學習(supervised learning)。主要應用于標量回歸,圖像分類,目標檢測,圖形分割等。

  • 無監督學習:指從無標簽的數據中尋找輸入數據的變換,包括聚類和異常檢測,其目的在于數據可視化、數據壓縮、數據去噪或更好地理解數據中的相關性。

  • 自監督學習:在沒有人工標注的標簽的監督學習,你可以將它看作沒有人類參與的監督學習。標簽仍然存在(因為總要有什么東西來監督學習過程),但它們是從輸入數據中生成的,通常是使用啟發式算法生成的。

  • 強化學習:強調智能體通過與環境的直接互動來學習,主要應用在游戲,自動駕駛、機器人等。

訓練和推斷

以監督學習為例,機器學習的工作流程由兩個階段構成:訓練階段和推斷階段。

  • 訓練階段:機器自動發現數據與對應答案之間的規則,這個過程中發現的規則會封裝在訓練好的模型中。它們是訓練階段的成果,并且為推斷階段奠定基礎。根據訓練數據的多少、模型架構的復雜度和硬件的快慢,訓練階段會持續幾毫秒到幾天不等。

  • 推斷階段:運用習得的模型為新的數據獲取答案。

欠擬合與過擬合

如果模型不能很好地捕捉數據中的模式,那么就稱該現象為欠擬合(underfit);反之,如果模型過度學習這些模式,以至于它不能將所學到規則的泛化到新數據上,那么就稱該現象為過擬合(overfit)

當模型出現過擬合時,可以通過正則化(regularization)這樣的應對措施將其拉回正軌。

要想應對欠擬合,我們通常會通過加大模型的規模來增加模型的表示能力。一般的應對策略是給模型添加更多使用非線性激活函數的層,并增加各層的尺寸(比如增加密集層中的單元數)。

模型能力的增強會帶來一個副作用:它會使模型對訓練集的擬合能力遠超出對驗證集的擬合能力,而后者包含模型訓練時未曾見過的數據。這個現象就是過擬合。這種情況下,模型“過度關注”數據集中不相關的細節,以至于它的預測能力不能很好地泛化到未見過的數據上。

機器學習的根本問題在于優化與泛化之間的矛盾。優化(optimization)是指調節模型使其在訓練數據上得到最佳性能的過程(對應機器學習中的學習),泛化(generalization)則是指訓練好的模型在前所未見的數據上的性能。機器學習的目標是得到良好的泛化,但你無法控制泛化,只能讓模型對訓練數據進行擬合。如果擬合得太好,就會出現過擬合,從而影響泛化。

為了實現完美的擬合,你必須首先實現過擬合。由于事先并不知道界線在哪里,因此你必須穿過界線才能找到它。在開始處理一個問題時,你的初始目標是構建一個具有一定泛化能力并且能夠過擬合的模型。得到這樣一個模型之后,你的重點將是通過降低過擬合來提高泛化能力。

降低或提高學習率。學習率過大,可能會導致權重更新大大超出正常擬合的范圍,就像前面的例子一樣。學習率過小,則可能導致訓練過于緩慢,以至于幾乎停止。增加批量大小。如果批量包含更多樣本,那么梯度將包含更多信息且噪聲更少(方差更小)。最終,你會找到一個能夠開始訓練的配置。

機器學習通用流程

  1. 確定機器學習是否是合適的解決方案

  2. 定義機器學習問題和數據預測的目標。

  3. 定義一種能夠可靠地評估模型訓練成功與否的度量指標。對于簡單的任務,使用預測準確率、精確率、召回率、ROC曲線和AUC值就足夠了

  4. 為模型性能評估做準備。設計用于模型評估的驗證過程。具體而言,應該將數據劃分成3個分布一致但互無重疊的數據集:訓練集、驗證集和測試集。驗證集和測試集的數據一定不能和訓練集重疊。

  5. 向量化數據。將數據轉換為張量,或者說多維數組。張量中的值應該縮放到較小且居中的范圍,例如在[-1, 1]或[0, 1]區間中。

  6. 配置最后一層的激活函數:它能對模型的輸出實現有效的約束。激活函數的選擇應該和當前的問題類型匹配。

  7. 配置損失函數:和最后一層的激活函數類似,損失函數也應該和當前的問題類型匹配。例如,對于二分類問題應該使用binaryCrossentropy;對于多分類問題應該使用categoricalCrossentropy;對于回歸問題,則應該使用meanSquaredError。

  8. 配置優化器:優化器負責驅動神經網絡的權重更新。

  9. 開發容量充足的模型并刻意地過擬合數據集。通過手動改變超參數,可以逐漸擴展模型的架構,最終達到一個剛好過擬合訓練集的模型。之前介紹過,監督式機器學習的一個共通且核心的問題是如何在優化(即擬合訓練時見到的數據)和泛化(即針對未見過的數據進行預測)之間取得平衡。在理想情況下,模型應該介于欠擬合和過擬合之間。也就是說,模型的容量應該在容量過低和容量過高之間取得平衡。但只有先跨過平衡的臨界點,才能找到這個臨界點在哪里。

通過以下方法開發過擬合的模型:

  • 添加更多層;

  • 增加每層的尺寸;

  • 使用更多的訓練輪次。

  • 應該時常用可視化手段監測訓練和驗證集上的損失,以及其他你所關心的度量指標(例如AUC)的性能。當你發現模型在驗證集上的準確率開始下降時,就說明模型開始過擬合了。

給模型添加正則化并調整超參數

給模型添加正則化并調整超參數,從而盡可能接近介于欠擬合和過擬合之間的理想模型。在這一步中,你會需要不斷地修改模型,訓練它,在驗證集上評估它(這一步還不需要在測試集上評估)。然后再重復這一過程,直到模型足夠接近其理想狀態。就正則化而言,可以嘗試以下步驟。

  • 添加使用不同丟棄率的dropout層。

  • 嘗試L1或L2正則化。

  • 嘗試不同的模型架構,比如對層數稍加調整。

  • 調整其他超參數(例如密集層的單元數)。

神經網絡

神經網絡就是函數的級聯。神經網絡的每一層都可以看作一個函數,將這些層疊加在一起就意味著級聯這些函數,這樣得到的更復雜的函數就是神經網絡。在深度學習的語境下,將輸入特征映射到輸出目標上的函數叫作模型(model),模型還可以叫作網絡(network)。

構建多層神經網絡時注意要在隱藏層中添加非線性激活函數,最常用的是relu函數。引入了非線性(nonlinearity)目的是增強神經網絡的表示能力,使用得當可以提高各種預測任務的準確率。

神經網絡的核心組成部分是層(layer),它是一個數據處理模塊,可以看作張量之間的一個可調函數。

從本質上講,密集層就是執行每組輸入與輸出之間的可調的乘積累加(multiply-add)運算。因為只有一個輸入和一個輸出,所以這個模型就是簡單的線性方程:y = m * x + b。在密集層中,m叫作核(kernel),b叫作偏差(bias)。

為了得到較好的預測值,必須讓模型從數據中學習,自動為核與偏差尋找恰當的數值。這個尋找的過程就是訓練過程(training process)。
訓練神經網絡主要圍繞以下四個方面。

  • 層,多個層組合成網絡(或模型)。
  • 輸入數據和相應的目標。
  • 損失函數,即用于學習的反饋信號。
  • 優化器,決定學習過程如何進行。
Neural Networks Architecture

你可以將深度網絡看作多級信息蒸餾操作:信息穿過連續的過濾器,其純度越來越高(即對任務的幫助越來越大)。

神經網絡的數據表示

  • 張量(tensor)是一個數據容器。它包含的數據幾乎總是數值數據。我們很熟悉的矩陣就是二維張量。張量是將矩陣概念泛化到任意維度的結果。
  • 標量(0D張量):僅包含一個數字的張量叫作標量(scalar,也叫標量張量、零維張量、0D張量)。標量張量有0個軸(ndim==0)。張量軸的個數也叫作階(rank)。
  • 向量(1D張量):數字組成的數組叫作向量(vector)或一維張量(1D張量)。一維張量只有一個軸。
  • 矩陣(2D張量):向量組成的數組叫作矩陣(matrix)或二維張量(2D張量)。矩陣有2個軸(通常叫作行和列)。你可以將矩陣直觀地理解為數字組成的矩形網格。第一個軸上的元素叫作行(row),第二個軸上的元素叫作列(column)。
  • 3D張量與更高維張量:將多個矩陣組合成一個新的數組,可以得到一個3D張量,可以將其直觀地理解為數字組成的立方體。將多個3D張量組合成一個數組,可以創建一個4D張量,以此類推。深度學習處理的一般是0D到4D的張量,但處理視頻數據時可能會遇到5D張量。
  • 梯度:梯度(gradient)是張量運算的導數。它是導數這一概念向多元函數導數的推廣。多元函數是以張量作為輸入的函數。
  • 隨機梯度下降:給定一個可微函數,理論上可以用解析法找到它的最小值(函數的最小值是導數為0的點),因此你只需找到所有導數為0的點,然后計算函數在其中哪個點具有最小值。將這一方法應用于神經網絡,就是用解析法求出最小損失函數對應的所有權重值。可以通過對方程gradient(f)(W)=0求解W來實現。

總結

在深度學習中,一切都是向量,一切都是幾何空間中的點。首先將模型的輸入(文本、圖像等)和目標向量化,即將其轉換為初始輸入向量空間和目標向量空間。深度學習模型的每一層都對通過該層的數據做簡單的幾何變換。模型中的一連串層共同構成了一個非常復雜的幾何變換,它可以分解為一系列簡單的幾何變換。這個復雜的幾何變換試圖將輸入空間逐點映射到目標空間。它由層的權重來參數化,權重是根據模型當前的表現來迭代更新的。深度學習的神奇之處:將意義轉化為向量,再轉化為幾何空間,然后逐步學習將一個空間映射到另一個空間的復雜幾何變換。你需要的只是維度足夠大的空間,以便捕捉到原始數據中的所有關系。

參考資料
《Python深度學習》
《Javascript深度學習》

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容