一文祛魅 AI 核心概念(全)
在並不算漫長的 AI(人工智能)發展史,各種行業背景的專家助力了 AI 極大的發展,也帶來了很多專業術語、概念。術語對於專業研究者是比較清晰及嚴謹,但對於初學者可能就有理解層面的困擾。
特別的,很多概念、術語說來說去可能基本上就是一個意思,很多複雜的概念背後的思想也可以很樸素的!
「在此本文致力於對 AI 的核心概念的系統地祛魅,簡化理解。」
一、基本概念
人工智能算法,現如今基本上指的就是【機器學習】,而機器學習基本也就是【歸納學習(也就是小學三年級學的歸納法)】或【統計學習】。
注:補充一句,機器學習與統計學習並不等同,但兩者是很相似的。如 Rob Tibshirani 教授曾總結統計學習、機器學習對應的 “術語表”。
兩者主要區別就是機器學習應用目的在於預測,而統計學習的主要目的在於分析及解釋。
把機器學習不嚴謹地替換成歸納學習,想必大家對這個概念就清晰了很多——機器學習也就是學習歸納出數據規律,並加以應用規律預測的過程。
比如,收入的迴歸預測。如下圖我們可以發現收入與教育程度的情況存在着某種線性規律,根據初中數學的基礎,我們大概瞄一下,兩者關係可能是 收入 約等於 3 倍的受教育的年限(Y = 3X ),依據這條不嚴謹的規律我們可以預估不同教育程度的人相應的收入狀況。
比如,好西瓜的分類預測。如下一大堆西瓜特徵的數據中,我們稍加觀察可能會發現西瓜紋理如果清晰,則它大概率是一個好瓜。
可見,人工智能的基本概念其實並不複雜, 人工智能、機器學習的核心就在於,「如何從數據中發現足夠正確及適用的客觀統計規律,並應用於實際工程中,對未知情況做出預判。」
這裏,也給想從事人工智能的愛好者先提個醒,使用人工智能技術(即 調包 -- 見文末)也挺容易的,但人工智能技術原理、工程實現確實 難 !實際場景中還需結合業務提供更準確及效率預測有各種考量,如教育程度 - 收入迴歸預測簡單的例子中:
-
如何選擇合適的迴歸模型?(線性迴歸、神經網絡迴歸、樹迴歸模型...)
-
如何高效地學習確認線性迴歸係數 / 模型權重?(最小二乘法、梯度下降..)
-
如何設定合適的學習目標,更好地減少模型預測與實際值的差異?(均方誤差 ..)
-
是否可以引入其他數據變量更好地預測收入?(數據選擇、特徵工程..)
-
如何在一大堆數據中更快地學習及預測?(大數據,代碼效率)
-
如何保證學習的規律在 未知數據是適用的?(過擬合、正則化、泛化原理..)
-
。。。等等
這些問題本文沒有給答案,交給讀者自己學習瞭解。在此軟推本人的技術博客 github.com/aialgorithm,有相關項目代碼 / 資料 / 技術原理等分享,可供學習瞭解。概念及原理,首推 李航老師的統計學習方法,周老師的西瓜書,深度學習的花書,非常建議有基本概念後就可以參照一些經典 kaggle 數據競賽、sklearn、tensorflow 的項目先練練手,實踐先行,再鑽研原理可以循序深入地掌握人工智能技術,具體可見【學習路線】
二、機器學習中各種學習的概念
機器學習按不同的學習場景可以劃分出很多類別,但常見的學習概念其實也就幾個大類,基本的關係是,機器學習是一個大大類,包含了深度學習。
-
機器學習:通過模型從數據中學習規律,用於處理任務。機器學習常見的任務有分類任務(如通過邏輯迴歸模型判斷郵件是否爲垃圾郵件類)、迴歸預測任務(如線性迴歸模型預測收入)等等。
-
深度學習:是機器學習的一個子方向,它通過深層的神經網絡模型學習以處理任務。
而深度學習、機器學習下再按照學習數據經驗的不同(即訓練數據的標籤信息的差異),還可以細分爲監督學習(supervised learning)、非監督學習(unsupervised learning)、半監督學習(semi- supervised learning)和強化學習(reinforcement learning)
2.1 監督學習
監督學習是機器學習中應用最廣泛及成熟的,它是從有標籤的數據樣本(x,y)中,學習如何關聯 x 到正確的 y。模型在給定特徵 x,參考着標籤 y 學習,藉助標籤 y 的監督糾正,模型 f(x; w) 通過優化算法調整自身參數 w,以降低模型預測值與目標值 y 的誤差。
監督學習過程,就像上小學三年級的時候,老師給了幾道練習題,並告知學生每一道題目都是獨立的,也都是在課綱範圍內,讓學生從中學習相關知識。當老師給了題目的答案,學生參考着答案去反推得到解題的知識。
2.2 無監督學習(自監督學習)
非監督學習也是機器學習中應用較廣泛的,是從無標註的數據(x)中,學習數據的內在規律。這個過程就像模型在沒有人提供參考答案(y),完全通過自己琢磨題目的知識點,對知識點進行歸納、總結。按照應用場景,非監督學習可以分爲聚類,特徵降維和關聯分析等方法。
非監督學習過程,就像上小學六年級的時候,老師沒給題目答案,學生僅從題目本身可以分析題目考覈的知識重點、題目的相似程度等知識點,並對知識點進行歸納。
2.3 半監督學習
半監督學習是介於傳統監督學習和無監督學習之間,其思想是在有標籤樣本數量較少的情況下,以一定的假設前提在模型訓練中引入無標籤樣本,以充分捕捉數據整體潛在分佈,改善如傳統無監督學習過程盲目性、監督學習在訓練樣本不足導致的學習效果不佳的問題。
2.4 強化學習
強化學習從某種程度可以看作是有延遲標籤信息的監督學習 ,其主要思想是基於智能體(Agent)和環境(Environment)的交互學習。智能體環環境中採取一種行爲(action),環境將其轉換爲一次回報(reward)和一種狀態表示(state),反饋給智能體。基於正確的行爲會得到獎勵,做出錯誤的行爲就會受到懲罰的反饋機制,智能體優化行爲的學習過程。
其他還有很多概念 各種場景的學習,對比學習、元學習、多任務學習、小樣本學習以及不學習..,入行時間久都有機會接觸的,在此就不展開了。
三、機器學習的組成
3.1 機器學習的大致過程
模型學習也可以稱爲擬合或訓練或建模等,這個過程一般可以概括爲:計算機程序基於給定的、有限的學習數據出發(常基於每條數據樣本是獨立同分布的假設),選擇某個的模型方法(即假設要學習的模型屬於某個函數的集合,也稱爲假設空間),通過算法更新模型的參數值(經驗),以優化處理任務的指標表現,最終學習出較優的模型,並運用模型對數據進行分析與預測以完成任務。更爲具體的建模方法及項目實踐可以見:【機器學習建模】
由此可見,機器學習方法有四個要素:數據,模型,優化算法,學習目標。通過把機器學習拆分成這四個要素組成,我們可以發現複雜多樣的機器學習方法的共性所在,從而加深系統的理解。如下展開介紹。
3.2 數據
數據(或稱數據集)中隱含着經驗知識,是機器學習方法的原料。它由一條條的樣本(或稱記錄)組成,每條樣本由描述其各個方面維度信息的特徵及標籤 [僅有在監督學習中有目標值標籤] 組成。常見的數據集類型有三種:
-
記錄數據集:樣本的各個方面維度信息的特徵間是無順序之分的。如交易額度、次數及間隔時長的記錄數據,可用於學習預測每筆交易記錄是否有欺詐嫌疑;
-
序列數據集:樣本的各個方面維度信息的特徵間具有涉及時間或空間順序的關係。如體育、經濟類新聞的文本,其文字內容是存在順序關係的,可用於學習預測每一條新聞應該歸屬的話題類型。
-
圖片數據集:數據集組成的樣本是圖片的形式。如貓、狗的圖片,可用於學習預測圖片裏面是否有小貓;
如圖所示癌細胞分類任務的數據集:
3.3 模型
學習到 “好” 的模型是機器學習的直接目的。機器學習模型簡單來說,即是學習數據特徵與標籤的關係或者學習數據特徵內部的規律的一個函數。
機器學習模型可以看作是:首先選擇某個的模型方法,再從數據樣本(x,(y))中學習,優化模型參數 w 以調整各特徵的有效表達,最終獲得對應的決策函數 f( x; w )。該函數將輸入變量 x 在參數 w 作用下映射到輸出預測 Y,即 Y= f(x; w)。
3.4 學習目標
學習到 “好” 的模型,“好”即是模型的學習目標。“好”對於模型也就是預測值與實際值之間的誤差儘可能的低。具體衡量這種誤差的函數稱爲代價函數 (Cost Function)或者損失函數(Loss Function),我們即通過以**「極大化降低損失函數爲目標」**去學習模型。
對於不同的任務目標,往往也需要用不同損失函數衡量,經典的損失函數如:迴歸任務的均方誤差損失函數(RMSE)及分類任務的交叉熵損失函數(CrossEntropy)等。
3.5 優化算法
有了極大化降低損失函數爲目標去學習 “好” 模型,而如何達到這目標?我們第一反應可能是直接求解損失函數最小值的解析解,獲得最優的模型參數。
遺憾的是,機器學習模型的損失函數通常較複雜,很難直接求最優解。幸運的是,我們可以通過優化算法(如梯度下降算法、牛頓法等)有限次迭代優化模型參數,以儘可能降低損失函數的值,得到較優的參數值(數值解)。
四、機器學習的實踐 -- 調包是什麼?
前面原理概念說了很多,再說說技術上如何建模預測的。
這裏就要先科普下什麼叫調包?調包這個詞,在軟件開發的時候也很經常被提及。調包就是直接調用現成框架的工具包、算法包以完成開發應用,比如熟知的 import pandas as pd
。
通過調包進行項目開發,大致的過程怎麼樣的呢?
大概就是,利用導入的各種框架 / 工具包,把數據處理好(這個很很費時間),就可以扔進模型訓練,訓練完預測出結果。完。
不說廢話的也就幾句代碼:
-
1、首先是熟練的導入需要的庫,如 pandas、numpy、sklearn、tensorflow、pytorch,如導入邏輯迴歸模型只要:from sklearn.linear_model import LogisticRegression
-
2、初始化下模型參數:model = LogisticRegression(超參數)
-
3、訓練數據扔進模型學習訓練:model.fit(已知數據)
-
4、模型預測新數據的結果:model.predit(未知數據)
寥寥幾行代碼就掌握了算法開發的精髓了 hha..
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/KQ99CN1w1z3RhTMQZ-Sj1g