杭州網(wǎng)站案列互聯(lián)網(wǎng)營銷培訓(xùn)
機器學(xué)習(xí)和深度學(xué)習(xí)
文章目錄
- 機器學(xué)習(xí)和深度學(xué)習(xí)
- 人工智能與機器學(xué)習(xí)和深度學(xué)習(xí)的關(guān)系
- 俠義的機器學(xué)習(xí)
- 深度學(xué)習(xí)的概念
- 常見的神經(jīng)網(wǎng)絡(luò)的輸入形式
- 想要的輸出(任務(wù)類別)
- 深度學(xué)習(xí)的流程
- 線性函數(shù)與多層神經(jīng)元
人工智能與機器學(xué)習(xí)和深度學(xué)習(xí)的關(guān)系
所謂人工智能就是,讓計算機為人類做工作,其中機器學(xué)習(xí)屬于人工智能,深度學(xué)習(xí)屬于機器學(xué)習(xí)。
傳統(tǒng)人工智能系統(tǒng)與機器學(xué)習(xí)的區(qū)別:
- 傳統(tǒng)系統(tǒng)是將輸入數(shù)據(jù)以及處理數(shù)據(jù)的規(guī)則交給計算機,然后讓計算機得出數(shù)據(jù)處理結(jié)果(輸出數(shù)據(jù))。
- 機器學(xué)習(xí)是將輸入數(shù)據(jù)以及數(shù)據(jù)處理結(jié)果(輸出數(shù)據(jù))交給計算機,然后讓計算機得出處理數(shù)據(jù)的規(guī)則。
俠義的機器學(xué)習(xí)
俠義的機器學(xué)習(xí)是指除去深度學(xué)習(xí)的機器學(xué)習(xí)部分,也就是下圖中淺藍色的中間層部分:
具有一般是基于數(shù)學(xué),或者統(tǒng)計學(xué)的方法,具有很強的可解釋性的特點。所謂的可解釋性就像數(shù)學(xué)公式的推導(dǎo)過程一樣,得到的每個結(jié)果都是有邏輯的,令人信服的。
這里簡述幾個經(jīng)典的傳統(tǒng)機器學(xué)習(xí)算法:
- K最近鄰居(K-Nearest Neighbors,簡稱KNN)
舉例如下圖:
小明的周圍都是北大的,因此小明大概率是北大的;小明的周圍大多是清華的,因此小明大概率是清華的;小明周圍清華和北大人數(shù)接近,因此小明是清華還是北大難以判斷;小明周圍有很多川大的,對推斷小明是清華還是北大沒有價值,因此難以判斷。
根據(jù)以上的例子,我們可以體會它的基本思想是通過測量不同數(shù)據(jù)點之間的距離來進行預(yù)測。此外,KNN是一種監(jiān)督學(xué)習(xí)算法,用于分類和回歸問題。
而KNN的工作原理可以概括為以下幾個步驟:
- 距離度量: KNN使用距離度量(通常是歐氏距離)來衡量數(shù)據(jù)點之間的相似性。
- 確定鄰居數(shù)量K
- 投票機制
如下圖,圖中點的位置可以表示點之間的距離,可以選取不同的鄰居數(shù)量,然后根據(jù)選中的鄰居的所在各類的數(shù)量判斷數(shù)據(jù)屬于哪類可能性。
-
決策樹
決策樹是將所有可能情況和相應(yīng)的數(shù)據(jù)給出,舉例判斷郵件是否為垃圾郵件如下圖:
通過輸入的是否認(rèn)識的人和垃圾關(guān)鍵字兩個維度的數(shù)據(jù)去查找決策樹中對應(yīng)的輸出,另外決策樹不善于處理未見過的特征。
-
樸素貝葉斯
基于貝葉斯定理,并假設(shè)特征之間是條件獨立的,舉例如下圖:
以上介紹的機器學(xué)習(xí)的算法,具有數(shù)學(xué)上的可解釋性,但準(zhǔn)確率不是百分百,且不靈活,因此引入了深度學(xué)習(xí)。
深度學(xué)習(xí)的概念
深度學(xué)習(xí)是機器學(xué)習(xí)的子集,讓機器利用多層神經(jīng)網(wǎng)絡(luò)從大量數(shù)據(jù)中自己進行學(xué)習(xí)。
最后學(xué)習(xí)出來的模型,我們直接拿來使用,往后的數(shù)據(jù)都通過這個學(xué)出來的模型得到輸出數(shù)據(jù),由于成功率比較高,因此我們可以拿來使用,但是完全沒有可解釋性,因此深度學(xué)習(xí)是一門實踐性的科目。
實際上,深度學(xué)習(xí)就是找一個函數(shù)f。給到機器的是輸入數(shù)據(jù)X和輸出數(shù)據(jù)Y,讓其使用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí),學(xué)習(xí)得到數(shù)據(jù)處理的規(guī)則,也就是X如何得到Y(jié),這個規(guī)則就是所謂的函數(shù)f。
深度學(xué)習(xí)的意義
在一些復(fù)雜的場景下,比如給到的輸入是一張圖片,輸出是圖中物品的類別,我們要推斷輸入得到輸出的規(guī)則是十分困難的,是人類很難得到,因此采用深度學(xué)習(xí)推斷規(guī)則。
常見的神經(jīng)網(wǎng)絡(luò)的輸入形式
-
向量
一組有序的數(shù)字,可以表示輸入數(shù)據(jù)的每個特征。
-
矩陣/張量
神經(jīng)網(wǎng)絡(luò)處理更高維度數(shù)據(jù)時的常見輸入形式,特別是在涉及到 二維數(shù)據(jù)(如圖像或表格數(shù)據(jù))時,圖像是用矩陣表示的。
-
序列
具有 時間依賴性 或 順序關(guān)系 的數(shù)據(jù)。如一句話和視頻。
蘋果一詞放到不同語境有不同的解釋,視頻是由一幀一幀的圖像組成,并且圖像之間有嚴(yán)格的前后順序。
想要的輸出(任務(wù)類別)
-
回歸任務(wù)
回歸任務(wù)好似一道填空題,輸出的是一個數(shù)在連續(xù)的區(qū)間內(nèi)選出一個。如根據(jù)以前的溫度推測明天的溫度大概有多高。
-
分類任務(wù)
分類任務(wù)好似一道選擇題,輸出只能是給定的離散的數(shù)據(jù)中選出一個。如給出一張圖片,判斷圖中是貓還是狗,即使輸入是一只狼,輸出也只能是貓和狗。
-
生成任務(wù)
生成任務(wù)好似一道簡答題,輸出是具有結(jié)構(gòu)化的數(shù)據(jù)。如一段文字或一張圖片。
分類和回歸是結(jié)構(gòu)化的基礎(chǔ)。 分類時, 是用數(shù)字來表示類別。 有的時候需要多個模態(tài)的數(shù)據(jù), 比如 圖片, 文字, 聲音。
深度學(xué)習(xí)的流程
深度學(xué)習(xí)需要數(shù)據(jù),因為要從數(shù)據(jù)中找到函數(shù)。深度學(xué)習(xí)的流程如下圖:
舉一個例子來理解深度學(xué)習(xí)的流程,假設(shè)有如下數(shù)據(jù):
有6組x和y,x也成為數(shù)據(jù)(feature),y也成為標(biāo)簽(label),x和y實際的函數(shù)關(guān)系是
y = 2 ? x + 1 + ε y=2*x+1+ε y=2?x+1+ε
其中,ε為擾動,因為真實數(shù)據(jù)是不會是完全符合一個特定函數(shù)關(guān)系的,要做的就是找到x和y之間的函數(shù)關(guān)系,然后推測出第7組x對應(yīng)的y。特別注意的是,我們已知的只有x和y,x和y的函數(shù)關(guān)系是未知的,也就是我們深度學(xué)習(xí)要求得的。
關(guān)于這個例子,我們進行深度學(xué)習(xí):
-
定義一個函數(shù)模型
函數(shù)模型的定義是任意的,可以選擇線性模型
y = w ? x + b y=w*x+b y=w?x+b
,也可以選擇二次函數(shù)模型,三次函數(shù)模型甚至更復(fù)雜的函數(shù)模型,不同的函數(shù)模型得到的模型效果有差異,由于實際函數(shù)關(guān)系是未知的,因此模型的選擇是具有猜測性。本例中我們就選擇線性模型
y = 3 ? x + 2 y=3*x+2 y=3?x+2
也就是w選取3,b選取2,其中w稱為權(quán)重(weight),b稱為偏置(bias)。 -
定義一個合理的損失函數(shù)LOSS
損失函數(shù)LOSS的作用判斷我們選擇的這組參數(shù)怎么樣。在我們選取的模型中參數(shù)就是w和b,我們設(shè)計LOSS函數(shù)為
L ( w , b ) = ∣ y ^ ? y ∣ = ∣ w x + b ? y ∣ L(w, b) = |\hat y - y| = | w x+b- y| L(w,b)=∣y^??y∣=∣wx+b?y∣
如果我們設(shè)計的模型和真實函數(shù)關(guān)系十分接近的話,那么用模型求的的
y ^ \hat y y^?
和真實的y差值的絕對值,也會很小,也就是LOSS值會很小,由于不止一組x和y因此求LOSS時要取多個LOSS的平均值
L O S S = 1 N ∑ i = 1 N l LOSS = \frac{1}{N}\sum \limits_{i=1}^N l LOSS=N1?i=1∑N?l
比如第一個x為1,經(jīng)過我們設(shè)定的模型求的
y ^ \hat y y^?
為5,而x對應(yīng)的y為3.1,因此LOSS值為1.9。 -
根據(jù)損失對模型進行優(yōu)化
為了讓設(shè)定的模型更加接近真實的函數(shù)關(guān)系,因此要根據(jù)LOSS值不斷調(diào)整參數(shù),在這里就是w和b,直到LOSS值為我們所能接受的值。下面給出兩個常見的LOSS函數(shù):
M A E : L ( w , b ) = ∣ y ^ ? y ∣ ( 均絕對誤差 ) MAE : L(w, b) = |\hat y - y| (均絕對誤差) MAE:L(w,b)=∣y^??y∣(均絕對誤差)
M S E : L ( w , b ) = ( y ^ ? y ) 2 ( 均方誤差 ) MSE : L(w, b) = (\hat y - y )^2(均方誤差) MSE:L(w,b)=(y^??y)2(均方誤差)
模型優(yōu)化有公式如下:
w ? , b ? = a r g m i n L w^*,b^* = arg \ minL w?,b?=arg?minL
其中 w ? , b ? w^*,b^* w?,b?為L最小時w,b所取的值,根據(jù)LOSS調(diào)整參數(shù)w,b進行的優(yōu)化模型采用的是梯度下降算法。
梯度下降算法的過程如下(以參數(shù)w為例):
-
隨機選取一個 w 0 w^0 w0
在定義函數(shù)模型為線性模型后,設(shè)定的w=3就是所謂的 w 0 w^0 w0(w的第0版)也就是給參數(shù)w設(shè)定的初始值。
-
計算梯度
在選取的LOSS函數(shù)
L ( w , b ) = ∣ y ^ ? y ∣ = ∣ w x + b ? y ∣ L(w, b) = |\hat y - y| = | w x+b- y| L(w,b)=∣y^??y∣=∣wx+b?y∣
中因為要做的是通過改變w和b來改變函數(shù)L的值,因此在這個過程中w,b為自變量,x,y為常數(shù),因為本例要調(diào)整參數(shù)w,因此要計算函數(shù)L對自變量w取檔當(dāng)前值時的梯度
? L ? w ∣ w = w 0 \frac{\partial L}{\partial w}|w=w^0 ?w?L?∣w=w0 -
更新w的值
如果梯度值是大于0的,說明函數(shù)在鄰域內(nèi)左低右高,w減小,L有可能減小;如果梯度值小于0,說明函數(shù)在鄰域內(nèi)左高右低,w增大,L有可能減小。w的更新采用如下公式:
w 1 ← w 0 ? η ? L ? w ∣ w = w 0 w1←w0-η\frac{\partial L}{\partial w}|w=w^0 w1←w0?η?w?L?∣w=w0
采用該公式時,梯度大于0,w會減小;梯度小于0時,w會增大。其中η為學(xué)習(xí)率,η的作用是控制參數(shù)調(diào)整的幅度,學(xué)習(xí)率的設(shè)定和模型的設(shè)定一樣影響最后的效果,并且沒有明確的選取方式。學(xué)習(xí)率設(shè)定的過大或過小都會有問題,學(xué)習(xí)率設(shè)定的過大,會使參數(shù)調(diào)整時參數(shù)的調(diào)整幅度過大,導(dǎo)致不斷偏離最小值,會導(dǎo)致梯度爆炸;學(xué)習(xí)率設(shè)置的過小,調(diào)整的幅度過小,會使得學(xué)習(xí)時間變長。
**特別要注意的是:**η是一個超參數(shù),超參數(shù)在設(shè)定后,是不會隨著深度學(xué)習(xí)而改變的,初次之外,模型也是一種超參數(shù),比如設(shè)定了為線性結(jié)構(gòu),學(xué)習(xí)過程中就不可能再變成其他如二次函數(shù)的結(jié)構(gòu)。
- 在完成1,2,3之后,不斷執(zhí)行2,3調(diào)整參數(shù),直至LOSS函數(shù)值滿足要求,或訓(xùn)練輪次達到。
- 模型中的所有參數(shù)都要采用梯度下降算法進行調(diào)整,采用相同的方法。
- 當(dāng)參數(shù)眾多時,梯度計算過程會很復(fù)雜,可以使用torch提供的框架來完成。
線性函數(shù)與多層神經(jīng)元
研究深度學(xué)習(xí)時,總能看到類似如下圖的神經(jīng)網(wǎng)絡(luò)圖:
單取出一個神經(jīng)元做解釋:
一個神經(jīng)元實際表示的數(shù)據(jù)公式為
y ^ = w ? x + b \hat y=w*x+b y^?=w?x+b
因此在一個神經(jīng)網(wǎng)絡(luò)中,一個結(jié)點要表示的就是一個線性關(guān)系
y = ∑ i = 1 N w i x i + b y=\sum \limits_{i=1}^Nw_ix_i+b y=i=1∑N?wi?xi?+b
b為幾個 x i x_i xi?的偏置值之和,取其中一個結(jié)點舉例,關(guān)系如下圖: