前面我們已經說了logistic回歸,訓練樣本是
,
(且這里的
是d維,下面模型公式的x是d+1維,其中多出來的一維是截距橫為1,這里的y=±1也可以寫成其他的值,這個無所謂不影響模型,只要是兩類問題就可以),訓練好這個模型中
參數θ以后(或者是
這個模型,這倆是一個模型),然后給入一個新的
,我們就可以根據模型來預測
對應label=1或0的概率了。
前面處理的是兩類問題,我們想把這個兩類問題擴展,即根據訓練好的模型,給入一個新的,我們就可以根據模型來預測
對應label=1,2,…k等多個值的概率。我們首先也是最重要的部分是確定這個新的模型是什么。對於一個x,新的模型
(j=1,2..k)要加起來等於1.
我們假設新模型為:
……………………………………..……………………………………………………………………(1)
其中 是模型的參數在實現Softmax回歸時,將
用一個
的矩陣來表示會很方便,該矩陣是將
按行羅列起來得到的,如下所示:
這里說一個問題:在logistic回歸中,是兩類問題,我們只用了一個θ,這里我們是不是也可以只用k-1個θk就可以表示所有的模型呢?具體就是我們只需要把置為0.所以
=1,這樣帶入公式(1)中就可以少使用一個
,我們驗證一下,如果k=2即兩類問題時,這個模型就退化成logistic回歸,我們令θ2=0,那么我們得到:
,
,得證。所以說我們的
參數矩陣確實存在參數冗余,這個問題,下面還會繼續說。
接下來我們要做的是求cost function:
我們知道logistic的cost function(不加約束項)為,即把每個樣本
帶入其label
對應的模型公式里(
的label
是1,就把
代入
,是0就代入
),然后把所有樣本
帶入模型得到的結果相乘再取對數log(對數運算也就是每個樣本
帶入模型得到的結果再相加),取平均。我們這里同樣這樣做,只是因為這里類別計較多,我們使用一個”示性函數‘’來使公式表達整潔:
是示性函數,其取值規則為:
值為真的表達式
,
值為假的表達式
。
舉例來說,表達式 的值為1 ,
的值為 0。
我們的代價函數為(不加約束項):
我們知道對logistic回歸模型的cost function 最小化,這里以梯度下降法進行說明:
這里的θ是一個k*(n+1)的矩陣,對應着模型里面的所有參數,我們現在有一個θ參數矩陣值
,那么我們通過梯度下降法得到的新的θ’參數矩陣值是多少呢,怎么求?是這樣的,比如我們更新θ(1,1)這個參數目前對應的值,
求導得到的是一個數(即把所有
和目前的θ參數矩陣值帶入左邊這個公式得到的結果即是,而不是還需要θ的第一個元素增加一個增量什么的,因為這里已經對θ(1,1)求導了)。有的地方是按梯度更新的,梯度是一個向量,但梯度也是分別對每一個參數求導得到的數,然后組成的向量。這里這么寫是為了便於理解(在程序中還是以矩陣運算進行的,所以跟這個公式會有出入,但是核心思想是一樣的)。然后新的θ’參數矩陣值的第一個元素θ’(1,1)=θ(1,1)-a。然后利用同樣的方法
得到新的參數矩陣值θ’的其他元素θ’(v,u)。我們得到θ’后,我們按這種方法再次迭代得到新的參數矩陣值θ”…..最后得到使
收斂的模型參數。
這時候我們討論一下前面提到的參數冗余問題:
現在我們模型的參數矩陣θ求好了,那么我們有一個樣本,我們想求下這個樣本對應的label等於各個i(i=1,2…k)的概率即利用
。
這時候我們讓矩陣θ的每一行 都變成
(
)。那么對任意的j,j∈
,有
也就是說參數矩陣θ的每一行都減去減去某一個常向量
得到新的參數矩陣θ’,那么這兩個參數矩陣是等價的,即一個樣本
對應的label等於各個i(i=1,2…k)的概率在兩個參數矩陣下是一樣的。這時候我們假設如果參數
是代價函數
的極小值點,那么
同樣也是它的極小值點,其中
可以為任意向量。因此使
最小化的解不是唯一的。(有趣的是,由於
仍然是一個凸函數,如果是只是用梯度下降法的話,不會遇到局部最優解的問題。但是 Hessian 矩陣是奇異的/不可逆的,這會直接導致采用牛頓法優化就遇到數值計算的問題,所以我們還是要尋找在使用梯度下降、牛頓法或其他算法時都可以解決參數冗余所帶來的數值問題的辦法)
這時候我們可以考慮這個等於某一個
,那么這個
就變成了0向量,這樣新的參數矩陣就少了一組變量,只需要k-1組
,我們就可以構建模型,這樣我們的cost function的優化結果只有唯一解。並且在logistic公式中我們也是這么做的,前面已經證明了。
在實際應用中,為了使算法實現更簡單清楚,往往保留所有參數 ,而不任意地將某一參數設置為 0。但此時我們需要對代價函數做一個改動:加入權重衰減。權重衰減可以解決 softmax 回歸的參數冗余所帶來的數值問題。
我們通過添加一個權重衰減項 來修改代價函數,這個衰減項會懲罰過大的參數值,現在我們的代價函數變為:
-
- 那為什么加入這個權重衰減項也就是L2正則項后,就可以解決參數冗余所帶來的數值問題? 有了這個權重衰減項以后 (
-
),代價函數就變成了嚴格的凸函數,這樣就可以保證得到唯一的解了。 此時的 Hessian矩陣變為可逆矩陣,並且因為
-
是凸函數,梯度下降法和 L-BFGS 等算法可以保證收斂到全局最優解。
在優化參數每次迭代得到新的θ‘時,與前面的相比,我們這里只要需要改變上面的a,即上面的a還要加上一個數。你要更新θ元素的某個元素θ(v,u),就是把對應的a變成:a加上正則項權重lamuda倍的原參數矩陣對應的元素θ(v,u),從而得到a’,然后更新θ’(v,u)=θ(v,u)-迭代速率α倍的a’。