視頻講解:

https://www.bilibili.com/video/av53400966?from=search&seid=8917174353134658904?

www.bilibili.com

源碼:

aespresso/a_journey_into_math_of_ml?

github.com
圖標

邏輯回歸是一種被廣泛使用的統計模型分類器, 我們今天用的深度學習的主要組成元素就是線性變換非線性映射, 這兩種計算在邏輯回歸裡面都有, 但邏輯回歸不同於深度學習的"黑盒機制", 我們完全可以搞明白它是怎樣解決問題的. 而對於深度學習, 我們可以明確所有的計算原理, 但並不知道這些神經元是怎樣協作從而解決問題的. 今天講的是邏輯回歸中的二項分類問題, 我們從0推導並用, 並說說激活函數損失函數是怎麼來的.

今天的主題: (一). 二項邏輯回歸的直覺; (二). 邏輯回歸的來歷: oddsprobability ; (三). 邏輯回歸的計算: logit 函數和 sigmoid 函數及它們的特性; (四). 最大似然估計 (maximum  likelihood  estimation) 和損失函數; (五). 量化分類器性能, 困惑度

(一). 二項邏輯回歸的直覺

  1. 二項邏輯回歸是一個功能, 最終輸出的是介於 01 之間的值, 為了解決類似"成功或失敗","有或無"或"通過或拒絕"類似的"非是即否"的問題.
  2. 邏輯回歸是一個把線性回歸模型映射為概率的模型, 即把實數空間的輸出 [-infty,+infty ] 映射到 (0,1) , 從而獲取概率.
  3. 畫個圖, 我們首先定義一個二元線性回歸模型: hat{y} = 	heta_1 x_1 + 	heta_2 x_2 + bias , 其中 hat{y} 的取值範圍在 [-infty,+infty ]
可以看到二元線性回歸模型形成一個無限延伸的平面

上圖可見, z 軸代表的 hat{y} 的取值範圍是 [-infty,+infty ] , 現在我們將 hat{y} 代入 sigmoid 激活函數, 把 hat{y} 映射為概率, 稍後會對這個函數做詳細講解: hat{p}=sigmoid(hat{y}) quad hat{p} in (0,1) , 下圖可見, z 軸代表的 hat{p} 的取值範圍被激活函數映射到了 (0,1 ) , 也就是 01 之間的實數.

可見激活函數將無限延伸的平面拍到0到1之間, 稍後會講到激活函數

(二). 我們來講邏輯回歸是怎麼來的, probabilityodds 的定義

  1. probability 指的是發生的次數/總次數, 如果拋硬幣: p = frac{正面向上的次數}{總次數} , p 的取值範圍為 [0, 1]
  2. odds 則是一種比率, 指的是發生的次數/沒有發生的次數: odds = frac{正面向上次數}{反面向上次數} odds 的取值範圍為 [0, +infty)
  3. 回顧伯努利分布: 如果 X伯努利分布中的隨機變數, X 的取值為 {0,1} , 非 01 , 如拋硬幣的正反面:則: P(X=1)=p quad P(X=0)=1-p , 代入 odds : odds={{p}over{1-p}} quad oddsin[0, +infty)

(三). logit 函數和 sigmoid 函數及它們的特性;

  1. 我們對 oddslog , 擴展 odds 的取值範圍到實數空間 [-infty, +infty] , 這就是 logit 函數: logit(p)=log_e(odds)=log_e(frac{p}{1-p}) quad p in (0, 1) quad logit(p) in [-infty, +infty] 注意: 接下來我們會省略 log 的底 e
  2. 接下來, 我們用線性回歸模型來表示 logit(p) , 因為線性回歸模型logit 函數的輸出有著同樣的取值範圍: 例如: logit(p) = 	heta_1 x_1 + 	heta_2 x_2 + bias
  3. 下面我們來畫一下 logit(p) , 注意 p in (0, 1) , 當 p=0p=1 的時候, logit 函數屬於未定義.
logit函數x軸取值在0到1之間
  • logit(p) = 	heta_1 x_1 + 	heta_2 x_2 + bias 得出 log(frac{p}{1-p})=	heta_1 x_1 + 	heta_2 x_2 + bias ,
  • 	heta_1 x_1 + 	heta_2 x_2 + bias=z , 得出:
  • log(frac{p}{1-p})=z , 等式兩邊取 e :
  • frac{p}{1-p}=e^z
  • p=e^z(1-p)=e^z-e^zp
  • p(1+e^z)=e^z
  • p=frac{e^z}{1+e^z}
  • 分子分母同除 e^z , 得出: p=frac{1}{1+e^{-z}} quad p in (0,1)
  • 由上面推導, 我們得出了 sigmoid 函數, 終於可以把線性回歸模型輸出的的實數空間取值映射成為概率了.
  • sigmoid(z)=frac{1}{1+e^{-z}} quad p in (0,1)
  • 我們來畫一下 sigmoid 函數, 注意 sigmoid(z) 的取值範圍:
sigmoid函數相當於將Logit函數x, y軸翻轉

(四). 最大似然估計 (maximum  likelihood  estimation) 和損失函數;

  • 最大似然估計請看這裡的詳細講解和可視化, 如果你不明白極大似然估計, 一定要看, 不然之後的都搞不明白:

espresso:極大似然估計(MLE)推導與3D可視化?

zhuanlan.zhihu.com圖標

  • 引入假設函數 h_{	heta}(X) ,設 	heta^TX線性回歸模型: 	heta^TX 中, 	hetaX 均為列向量, 例如:

	heta^T=  left[  egin{matrix}    bias & 	heta_1 & 	heta_2    end{matrix}   
ight] quad X=  left[  egin{matrix}    1  \    x_1  \    x_2    end{matrix}   
ight]

  • 矩陣點積, 得出:

	heta^TX = bias * 1 + 	heta_1 * x_1 + 	heta_2 * x_2 = 	heta_1x_1 + 	heta_2x_2 + bias

  • 	heta^TX = z 則有假設函數:

h_	heta(X)=frac{1}{1+e^{-z}}=P(Y=1 mid X;	heta) , 代表了 Y=1 的概率;

P(Y=0 mid X;	heta)=1-h_	heta(X) , 代表了 Y=0 的概率, 注意 Y in {0, 1}01

  • 回顧伯努利分布 (Bernoulli  distribution) :

f(k;p)={egin{cases}p&{	ext{if }}k=1,\q=1-p&{	ext{if }}k=0.end{cases}}

f(k;p)=p^{k}(1-p)^{1-k}quad {	ext{for }}kin {0,1} (這就是伯努利分布的概率質量函數), 注意 f(k;p) 表示的是 k01 的概率, 也就是 P(k)

  • 明白了極大似然估計之後, 我們定義似然函數 (likelihood function) , 將h_{	heta}(X)代入到伯努利分布的概率質量函數中:
  • {egin{aligned}L(	heta mid x)&=P(Ymid X;	heta )\&=prod _{i}^{m}P(y_{i}mid x_{i};	heta )\&=prod _{i}^{m}h_{	heta }(x_{i})^{y_{i}}(1-h_{	heta }(x_{i}))^{(1-y_{i})}end{aligned}}
  • 其中 i 為每個數據樣本, 共有 m 個數據樣本, 最大似然估計的目的就是讓上式的從輸出值儘可能大;
  • 對上式取 log , 以方便計算, 因為取 log 可以把乘積轉換為加法,而且不影響我們的優化目標:
  • L(	heta mid x) = log(P({Y}mid{h_{	heta }(X})) = sum_{i=1}^{m} y_i log(h_{	heta}({x}_i)) + (1-y_i) log(1 - h_{	heta}({x}_i))
  • 我們只要在式子前面加一個負號,即可把求最大轉換為求最小, 設 h_{	heta}(X)=hat{Y} , 得出損失函數 J(	heta) , 我們只要最小化這個函數, 就可得出我們想要的 	heta :
  • J(	heta)=-sum_{i}^{m} Y log(hat{Y}) - (1-Y) log(1-hat{Y})
  • 順便提一句, 在深度學習中說到的交叉熵, 和上式其實是一回事, 只不過上式是交叉上中的二項分類問題, 對於多項分類:
  • CrossEntropy(Y, hat{Y})=- frac{1}{m}sum_{i}^{m} sum_{c}^{N_c} Y log (hat{Y})
  • 其中 c 為分類編號, N_c 為所有的分類數量, 如果你對上式不理解, 沒有關係, 在接下來的課程裡面會涉及到.

我們現在明白了損失函數是什麼, 是怎麼推導出來的, 那麼我們怎樣量化分類器的性能呢, 那就需要引入一個實用知識, "困惑度", 請看這裡:

espresso:語言模型中困惑度(perplexity)的推導?

zhuanlan.zhihu.com
圖標

推薦閱讀:
相关文章