1. 程式人生 > >深度學習基礎學習筆記-1人工智慧定義

深度學習基礎學習筆記-1人工智慧定義

 

人工智慧定義

人工智慧 = 大資料+機器學習。 
我理解的現階段的人工智慧是使用機器學習演算法在大量的歷史資料下進行訓練,從歷史資料中找到一定的規律並對未來做出的預測行為。比如我們曾經給銀行做過反欺詐專案。 以前在銀行裡有一群專家,他們的工作就是根據經驗向系統中輸入一些規則。例如某一張卡在一個城市有了一筆交易,之後1小時內在另一個城市又有了一筆交易。這些專家根據以前的經驗判斷這種情況是有盜刷的風險的。他們在系統中輸入了幾千條這樣的規則,組成了一個專家系統。 這個專家系統是建立在人類對過往的資料所總結出的經驗下建立的。 後來我們引入了機器學習演算法,對過往所有的歷史資料進行訓練,最後在25億個特徵中抽取出8000萬條有效特徵,我們可以把這些特徵就暫且當成是專家系統中的規則。當時對第一版模型上線後的資料做統計,反欺詐效果提升了7倍, 這就是二分類演算法典型的業務場景。 為什麼叫機器學習呢,因為它給人一種感覺,機器能像人類一樣從過去的資料中學習到經驗,只不過機器的能力更強。 如果想再稍微深究一下機器學習訓練出來的模型到底是什麼,我覺得可以暫且理解為一個二分類的模型主要是就是一個key,value的資料庫。key就是在資料中抽取出來的特徵,value就是這個特徵的權重。 當我們想要預測一個使用者的行為的時候,就會從使用者的資料中提取特徵並在模型中查詢對應的權重。 最後根據這些特徵的權重算出一個分,也可以說是一個概率。 如果大家看過最強大腦這個節目的話。應該記得第一次人機大戰專案是人臉識別,第三回合的時候機器給出了兩個答案。因為當時做人臉識別專案的志願者中有一對雙胞胎。所以機器計算出的這兩個人的概率只差了0.1%,最後為了謹慎起見機器輸出兩個答案出來。以至於吳恩達先生也很糾結到底該選哪一個答案。再之後的人機對戰專案裡我們也能看到雖然小度一路高歌,毫無敗績。但是其中是有選錯過幾次的。所以大家可以看到我們得到的答案其實是一個概率,是一個根據以往的資料進行總結並作出預測的一個行為。並不是100%準確的。

二分類

 

目前工業界最能產生價值的是機器學習中的監督學習, 場景有推薦系統,反欺系統詐等等。其中二分類演算法應用的尤其之多。例如上面的影象識別場景, 我們希望判斷圖片中是否有貓,於是我們為模型輸入一張圖片,得出一個預測值y。 y的取值為1或者0. 0 代表是,1代表否。

邏輯迴歸

線性迴歸

邏輯迴歸是二分類演算法中最典型的一個。 再說邏輯迴歸之前我們先說說線性迴歸。 我們用預測房價這個例子說起。 如下圖:

 

為了方便理解假設影響房價的因素只有面積這一個特徵,上面是一個房價隨著面積變化的趨勢圖。我們希望有一個函式, 在輸入房價後能得到一個預測的房價數值。也就是y= wx +b。我們輸入x(也就是面積), 得到y(也就是預測值)。而機器學習要訓練並學習的就是引數w和b。根據梯度下降的原理。 演算法在迭代訓練中會不停的改變w和b的指,將得到y(預測房價)值於訓練資料中實際的值(實際的房價)進行對比。 最後找到最優解(於實際值差距最小的w和b)。所以我們再看y=wx + b這個函式,在我們的例子裡只有面積這一個特徵,所以x是一個一維的特徵向量(或者說特徵矩陣),在實際中影響房價的可能有多個因素,例如地點,朝向等等。 所以我們的x就是多維的特徵向量。 我們函式也變成了下面的樣子。 

假設有n個特徵,函式就變成了: y = w1*x1 + w2*x2 +w3*x3 ......... wn*xn + b。 之前說暫且將模型理解為是一個是key,value的資料庫。 key是特徵,value是權重。 那麼這個公式中的w和b就相當於權重。我們將每個特徵和權重進行計算並累加,最後就是我們的預測值。

之所以叫線性迴歸,因為函式是線性函式。在圖中是一條直線。 如下:

 

迴歸與分類

迴歸演算法是用來預測一個具體的值,就像上面我們說的預測房價,也就是y=wx+b。 而分類演算法是在一群實體中將物品進行分類,例如二分類演算法中,預測值只有0和1.邏輯迴歸演算法是一個二分類演算法,同樣用了線性迴歸公式,也就是y=wx+b。 但是我們的期望值是0或者1。 所以我們需要一個額外的啟用函式來把我們的預測值變換成0和1. 這就是為什麼邏輯迴歸雖然叫回歸但卻是二分類演算法的原因(它多了一個啟用函式把預測值變換成0或者1的數值)。

啟用函式

啟用函式不是真的要去啟用什麼。在神經網路中,啟用函式的作用是能夠給神經網路加入一些非線性因素,使得神經網路可以更好地解決較為複雜的問題。例如我們給邏輯迴歸用的Sigmoid函式:

 

其他啟用函式還有tanh, ReLU等。

邏輯迴歸與損失函式

根據剛才學習到的,邏輯迴歸是一個線性迴歸加上一個sigmoid函式。那麼我們的公式就變成了下面的樣子:

 


我們之前說的根據梯度下降的原理演算法會不停的改變w和b的值以找到合適的w和b的值讓預測的y值跟實際的y值差距最小。那麼我們就需要一個損失函式來橫向我們演算法的執行情況。

 

上面是一個可用的損失函式的定義。計算預測值於實際值得方差來量化演算法執行質量。 但在邏輯迴歸中並不會這麼做,因為他是一個非凸函式。 就像上圖中右邊畫的一樣。 它有多個低谷,也就導致了有多個區域性最優解。 我們希望損失函式是凸函式,就像下面的圖一樣,只有一個最優解

 


這樣我們就有下面的損失函式。

這是計算一個樣本的損失函式,但我們的訓練資料集是很大的,我們註定了有數百萬,數千萬甚至數億的樣本。 所以我們需要一個全域性的損失函式,也叫作我們的成本函式,如下:

 

邏輯迴歸與梯度下降演算法

 

 


根據上面說的,我們有了邏輯迴歸演算法的公式(上圖1), 有了全域性成本函式來評價演算法執行的情況(上圖2)。 現在我們需要一個方法來迭代式的訓練學習到w和b的值,並用成本函式來判斷哪個w和b是我們的最優解(可以理解為學習特徵權重)。也就是說我們要不停的變換w和b的值並用成本函式計算預測值和實際值,找到差距最小的,也就是成本函式值最小的那一組w和b。這就是梯度下降演算法要做的。

上面是成本函式的圖, 可以看到成本函式是一個凸函式,它只有一個最優解。我們要做的就是隨便初始化一個w和b的值(通常是0), 也就是圖中最上面的那個紅點。 然後接下來要做的就是一輪又一輪的迭代,每一次迭代都減少w和b的值讓紅點向下走,一直到最下面的那個小紅點,或者最接近那個小紅點的地方。這也就是我們找到全域性最優解的地方。在這裡成本函式的值最小。也就是說我們的預測值是最接近實際值的。這樣我們的訓練過程就結束了,也就是我們學習到了最適合的w和b的值。
在梯度下降演算法中,我們不停的減少w和b的值來一次次的迭代,那麼減少多少是合適的呢? 我們用下面的公式來做。

 

假設我們要算w的值,我們每一次都用w自身減去α(學習率)和成本函式J對w的導數(也就是斜率)。 其中學習率是演算法的引數,需要人工設定。

結尾

這就是我理解的機器學習中的分類演算法中的二分類演算法--邏輯迴歸的原理。這也是構建深度學習中的神經網路的基礎演算法。

 作者:孫高飛