通過乙個例子快速上手矩陣求導

2021-08-28 14:36:52 字數 1283 閱讀 4748

第一次遇見矩陣求導,大多數人都是一頭霧水,而搜了維基百科看也還是雲裡霧裡,一堆的名詞和一堆的**到底都是什麼呢?這裡總結了我個人的學習經驗,並且通過乙個例子可以讓你感受如何進行矩陣求導,下次再遇到需要進行矩陣求導的地方就不會措手不及。

前提:若 xx 為向量,則預設 xx 為列向量, xtxt 為行向量

布局簡單地理解就是分子 yy 、分母 xx 是行向量還是列向量。

為了更加深刻地理解兩種布局的特點和區別,下面是從維基百科中布局部分拿來的例子:

∂(y−xw)t(y−xw)∂w∂(y−xw)t(y−xw)∂w

說明:y、wy、w為列向量,xx為矩陣

看到這個例子不要急著去查表求導,先看看它的形式,是u(w)∗v(w)u(w)∗v(w)的形式,這種形式一般求導較為複雜,因此為了簡化運算,我們先把式子展開成下面的樣子(注意:(xw)t=wtxt(xw)t=wtxt):

∂(yty−ytxw−wtxty+wtxtxw)∂w∂(yty−ytxw−wtxty+wtxtxw)∂w

然後就可以寫成四個部分求導的形式如下(累加後求導=求導後累加):

∂yty∂w−∂ytxw∂w−∂wtxty∂w+∂wtxtxw∂w∂yty∂w−∂ytxw∂w−∂wtxty∂w+∂wtxtxw∂w

說明:分子部分為標量,分母部分為向量,找到維基百科中的scalar-by-vector identities**,在**中匹配形式到第1行的位置,因為分母為列向量,因此為分母布局,對應的求導結果就是 00 。

說明:同樣的,在維基百科中的scalar-by-vector identities**,在**中匹配形式到第11行的位置,對應的求導結果就是 xtyxty 。

說明:因為分子為標量,標量的轉置等於本身,所以對分子進行轉置操作,其等價於第二部分。

說明:同樣的,在維基百科中的scalar-by-vector identities**,在**中匹配形式到第13行的位置,矩陣的轉置乘上本身(xtxxtx)為對稱矩陣當做**中的aa ,所以得到求導結果 2xtxw2xtxw 。

把四個部分求導結果進行相應的加減就可以得到最終的結果:

∂yty∂w−∂ytxw∂w−∂wtxty∂w+∂wtxtxw∂w=0−xty−xty+2xtxw=−2xt(y+xw)∂yty∂w−∂ytxw∂w−∂wtxty∂w+∂wtxtxw∂w=0−xty−xty+2xtxw=−2xt(y+xw)

現在你再看看維基百科裡那成堆的**,是不是覺得異常實用了!

通過乙個例子快速上手矩陣求導

第一次遇見矩陣求導,大多數人都是一頭霧水,而搜了維基百科看也還是雲裡霧裡,一堆的名詞和一堆的 到底都是什麼呢?這裡總結了我個人的學習經驗,並且通過乙個例子可以讓你感受如何進行矩陣求導,下次再遇到需要進行矩陣求導的地方就不會措手不及。前提 若 x 為向量,則預設 x為列向量,xt 為行向量 布局簡單地...

LineDDA的乙個例子

unit unit1 inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,extctrls,stdctrls,buttons type tfmmain class tform ...

SQL GROUP CONCAT的乙個例子

我有乙個這樣的資料庫 user info 現在有乙個需求是把這樣 9 條記錄按照 username 來 group 成3條記錄 目標 shu female 201 lee male 202 yuki female 181 如果用select from user info group by usern...