1. 程式人生 > 實用技巧 >機器學習數學知識

機器學習數學知識

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

1.矩陣的乘法

1.1點積:普通矩運算

1.2內積:矩陣矩陣的Hadamard積記為。其元素定義為兩個矩陣對應元素的乘積m×n矩陣

1.3外積:Kronecker積是兩個任意大小的矩陣間的運算,表示為。克羅內克積也成為直積張量積

1.4元素積:

224349_SQK1_2643893.png224405_Dt5z_2643893.png

224844_XU6q_2643893.png

2.softmax在神經網路簡化計算的相關推導

softmax相關求導

當我們對分類的Loss進行改進的時候,我們要通過梯度下降,每次優化一個step大小的梯度,這個時候我們就要求Loss對每個權重矩陣的偏導,然後應用鏈式法則。那麼這個過程的第一步,就是對softmax求導傳回去,不用著急,我後面會舉例子非常詳細的說明。在這個過程中,你會發現用了softmax函式之後,梯度求導過程非常非常方便!

下面我們舉出一個簡單例子,原理一樣,目的是為了幫助大家容易理解!

20134515_fm2z.jpg

我們能得到下面公式:

z4 = w41*o1+w42*o2+w43*o3

z5 = w51*o1+w52*o2+w53*o3

z6 = w61*o1+w62*o2+w63*o3

z4,z5,z6分別代表結點4,5,6的輸出,01,02,03代表是結點1,2,3往後傳的輸入.

那麼我們可以經過softmax函式得到


好了,我們的重頭戲來了,怎麼根據求梯度,然後利用梯度下降方法更新梯度!

要使用梯度下降,肯定需要一個損失函式,這裡我們使用交叉熵作為我們的損失函式,為什麼使用交叉熵損失函式,不是這篇文章重點,後面有時間會單獨寫一下為什麼要用到交叉熵函式(這裡我們預設選取它作為損失函式)

交叉熵函式形式如下:

其中y代表我們的真實值,a代表我們softmax求出的值。i代表的是輸出結點的標號!在上面例子,i就可以取值為4,5,6三個結點(當然我這裡只是為了簡單,真實應用中可能有很多結點

現在看起來是不是感覺複雜了,居然還有累和,然後還要求導,每一個a都是softmax之後的形式!

但是實際上不是這樣的,我們往往在真實中,如果只預測一個結果,那麼在目標中只有一個結點的值為1,比如我認為在該狀態下,我想要輸出的是第四個動作(第四個結點),那麼訓練資料的輸出就是a4 = 1,a5=0,a6=0,哎呀,這太好了,除了一個為1,其它都是0,那麼所謂的求和符合,就是一個幌子,我可以去掉啦!

為了形式化說明,我這裡認為訓練資料的真實輸出為第j個為1,其它均為0!

那麼Loss就變成了,累和已經去掉了,太好了。現在我們要開始求導數了!

我們在整理一下上面公式,為了更加明白的看出相關變數的關係:

其中,那麼形式變為

那麼形式越來越簡單了,求導分析如下:

引數的形式在該例子中,總共分為w41,w42,w43,w51,w52,w53,w61,w62,w63.這些,那麼比如我要求出w41,w42,w43的偏導,就需要將Loss函式求偏導傳到結點4,然後再利用鏈式法則繼續求導即可,舉個例子此時求w41的偏導為:

20134515_kzm6.jpg

w51.....w63等引數的偏導同理可以求出,那麼我們的關鍵就在於Loss函式對於結點4,5,6的偏導怎麼求,如下:

這裡分為倆種情況:

20134515_96kG.jpg

j=i對應例子裡就是如下圖所示:

比如我選定了j為4,那麼就是說我現在求導傳到4結點這!

20134516_aZja.jpg

那麼由上面求導結果再乘以交叉熵損失函式求導

,它的導數為,與上面相乘為(形式非常簡單,這說明我只要正向求一次得出結果,然後反向傳梯度的時候,只需要將它結果減1即可,後面還會舉例子!)那麼我們可以得到Loss對於4結點的偏導就求出了了(這裡假定4是我們的預計輸出

第二種情況為:

20134516_UR47.jpg

這裡對應我的例子圖如下,我這時對的是j不等於i,往前傳:

20134516_cwN6.jpg

那麼由上面求導結果再乘以交叉熵損失函式求導

,它的導數為,與上面相乘為(形式非常簡單,這說明我只要正向求一次得出結果,然後反向傳梯度的時候,只需要將它結果儲存即可,後續例子會講到這裡就求出了除4之外的其它所有結點的偏導,然後利用鏈式法則繼續傳遞過去即可!我們的問題也就解決了!

下面我舉個例子來說明為什麼計算會比較方便,給大家一個直觀的理解

舉個例子,通過若干層的計算,最後得到的某個訓練樣本的向量的分數是[ 2, 3, 4 ],
那麼經過softmax函式作用後概率分別就是=[
,,] = [0.0903,0.2447,0.665],如果這個樣本正確的分類是第二個的話,那麼計算出來的偏導就是[0.0903,0.2447-1,0.665]=[0.0903,-0.7553,0.665],是不是非常簡單!!然後再根據這個進行back propagation就可以了

轉載於:https://my.oschina.net/flzxsqc/blog/1589457