SoftMax 回歸(與Logistic 回歸的聯系與區別)
SoftMax 試圖解決的問題
SoftMax回歸模型是Logistic回歸模型在多分類問題上的推廣,即在多分類問題中,類標簽y可以取兩個以上的值
對於Logistic回歸的假設函數\(h_\theta(x) = \frac{1}{1 + \exp(-x)}\),它的輸出結果將被投影到\([0,1]\)區間上,根據假設函數的輸出值的大小,我們預測該輸入值是否屬於某一個類別,其結果只會是是或不是,即Logistic回歸只能解決二分類問題.
SoftMax實現多分類的思路很簡單: 對於每一個分類,輸出一個假設值,用於判定當前輸入值對應該類的概率,最終根據各個類的概率大小判定該輸入值對應的分類. 可以看出,SoftMax的思想有點類似於獨熱編碼
SoftMax回歸的假設函數,代價函數及正則化
SoftMax的假設函數如下:
\[h_\theta(x^{(i)}) = \left[ \begin{matrix} & p(y^{(1)}| x^{(i)};\theta_1)\\ & p(y^{(2)}|x^{(i)};\theta_2)\\ &:\\ &p(y^{(k)}|x^{(i)};\theta_k) \end{matrix} \right] = \frac{1}{\sum_{j=1}^{k}e^{\theta_j^T}x^{(i)}} \left[ \begin{matrix} & e^{\theta_1^Tx^{(i)}}\\ & e^{\theta_2^Tx^{(i)}}\\ &:\\ & e^{\theta_k^Tx^{(i)}} \end{matrix} \right] \]
其中\(\theta_1,\theta_2,...,\theta_k \in \R^{n+1}\)是訓練模型的參數,右式分母意義在於歸一化至\([0,1]\)區間,使得所有概率和為一
轉化為矩陣運算,我們用
\[\Theta = \left[ \begin{matrix} &\theta_1^T \\ &\theta_2^T \\ &:\\ &\theta_k^T \end{matrix} \right] \]
來表示所有的參數. 顯然,\(\Theta\)是一個\(k*(n+1)\)的矩陣
代價函數為
K-Logistic 與 SoftMax 的選擇
Update: 部分代碼節選
下面簡單介紹利用softmax訓練模型時,所需實現的求解損失函數、梯度的代碼
function [cost,grad] = softMaxCost(theta,n,k,X,oneHoty,lambda)
% 參數介紹
% theta 傳入為一個向量
% n為輸入維度
% k為最終分類樹
% X為n*m的輸入樣本,每一列代表一個樣本
% lambda為正則項
% - - - - - - - - - - - - - - - - - - - - - - - - - - - -
theta = reshape(theta,k,n); % 規模k*n
m = size(X,2); % 樣本數
groudTruth = oneHoty; % 真實值
% - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cost = 0;
thetagrad = zeros(size(theta));
% - - - - - - - - - - - - - - - - - - - - - - - - - - - -
temp = theta * X;
temp = exp(temp);
H = bsxfun(@rdivide,temp,sum(temp));
temp = log(H);
temp = groudTruth .* temp;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cost = -1/m * sum(sum(temp)) + lambda/2*sum(sum(theta.^2));
thetagrad = -1/m * (groundTruth-H)*X' + lambda * theta;
grad = [thetagrad(:)];
end