【深度学习】sigmoid - 二次代价函数 - 交叉熵 - logistic回归 - softmax
1. sigmoid函數:σ(z) = 1/(1+e^(-z))
sigmoid函數有個性質:σ'(z) =σ(z) * ( 1 - σ(z) )?
sigmoid函數一般是作為每層的激活函數,而下邊的幾種是代價函數。
2. 所有樣本的二次代價函數:C=1/2 *Σ (y - a)^2,這里的激活函數也使用了sigmoid函數
二次代價函數存在當結果明顯錯誤時,學習卻很慢的問題,如,當輸出趨近于1,而標簽為0時候,即出現明顯錯誤時,其導數卻趨近于0,使得學習反而很慢。注意:sigmoid函數的輸出在(0,1),而輸入卻在(負無窮,正無窮)。
3. ?交叉熵適用于二分類和多分類的代價函數,它改進了二次代價函數的缺點。交叉熵對梯度的更新不需要對sigmoid函數求導,權重的學習速度只受到 σ(z)-y 的控制,即輸出與標簽的誤差的控制,而與sigmoid函數的導數無關。
?
logistic成本函數:J(w,b)=-1/m *Σ[y(i)log(a(i))+(1-y(i))log(1-a(i))],即對m個樣本求和后再平均,Σ是求和符號 ,i是第i個樣本?
softmax成本函數:J(w,b)=-1/m *ΣΣ1{ y^(i)} *log exp(z)/Σexp(z),其中第一個求和符是對(i=1~m),第二個求和符是對(j=1~k),
最后一個分母上的求和符是對k輸出神經元的exp(z)求和。
https://blog.csdn.net/u014313009/article/details/51045303
- 交叉熵中的a激活值必須是由sigmoid函數得到的,因為1- a,所以a必須在0~1之間,一般只有sigmoid函數才會得到(0,1)之間的值。別想tanh,tanh的范圍在(-1,1)之間。
- 單輸出神經元的所有樣本的代價函數:C = -1/n*Σ[y * lna + ( 1 - y)*ln( 1 - a ) ) ]
4. logistic回歸的代價函數就是交叉熵
P( Y=1|x ) =?e^(wx+b)/(1+e^-(wx+b) )????? ? -----定義
????????????????=1/(1+e^-(wx+b) ),即sigmoid函數。
P( Y=0|x ) =?1/(1+e^(wx+b) )
其中,P( Y=1|x )+P( Y=0|x )=0;并且P( Y=1|x )表示給定輸入特征x,求Y=1時的概率。至于到底這兩個式子可否交換,我個人覺得是不可以的,因為0和1是標簽,這里涉及到使用交叉熵的問題,因為交叉熵會用到標簽0和1,如果交換的話交叉熵式子也需要變化一下,所以就別亂寫了,按照規定的寫就行。
logistic回歸【比較】這兩個條件概率值的大小,將給定的輸入實例(或輸入特征)分到概率值較大的那一類。
?
- 講解logistic回歸時候,用到了似然函數推出交叉熵。
- 統計學中,似然函數是一種關于統計模型參數的函數。給定輸出x時,關于參數θ的似然函數L(θ|x)(在數值上)等于給定參數θ后變量X的概率:L(θ|x)=P(X=x|θ)??床欢迫缓瘮稻吞^吧,真混亂。
- 因此,似然函數為L(x|y)=P(Y=y|x),似然函數就是分類為1和分類為0的各個樣本的概率之積??煽凑n本統計學習方法P79。
5. softmax函數是用于多分類,且該函數一般用在最后一層,即輸出層,并且不是使用sigmoid函數來獲得輸出。前面的激活函數用不用sigmoid函數不作要求。
a=e^(z) / ( Σ?e^(z) )
輸出的激活值加起來正好為1。
對于多分類問題,例如我們的年齡分為5類,并且人工編碼為0、1、2、3、4,因為輸出值是5維的特征,因此我們需要人工做onehot encoding分別編碼為00001、00010、00100、01000、10000,才可以作為這個函數的輸入。理論上我們不做onehot encoding也可以,做成和為1的概率分布也可以,但需要保證是和為1。
6.重點來了
cs231n講的softmax的交叉熵損失函數是: 一個樣本的loss = -?log(p),其中p是預測的正確類別的概率。那么所有樣本的
loss = -1/m*Σlog(p),? 對所有樣本求和后取平均。
這和第3條講的一個道理,不沖突。
下面再重新復述以便第三條:
【【【
softmax成本函數:
J(w,b)=-1/m *ΣΣ1{ y^(i)} *log exp(z)/Σexp(z),其中第一個求和符是對(i=1~m),第二個求和符是對(j=1~k),
最后一個分母上的求和符是對k輸出神經元的exp(z)求和。
】】】
解析:Σ1{ y^(i)} *log exp(z)/Σexp(z)就是log(p),其中p是預測的正確類別的概率。因為樣本正確類別的標簽為1,不正確類別的標簽都為0,說到底就是Σ1{ y^(i)} *log exp(z)/Σexp(z)只有一項不為0,其余各項都為0,因為正確類別只有一個。
因此softmax的交叉熵損失函數可以寫作:loss = -1/m*Σlog(p),? 對所有樣本求和后取平均,p是預測的正確類別的概率,簡單明了
?
下面再說說logistic的交叉熵損失函數:J(w,b)=-1/m *Σ[y(i)log(a(i))+(1-y(i))log(1-a(i))],i是第i個樣本?
我覺得寫成J(w,b)=-1/m *Σ[y(i)log(p(i))+(1-y(i))log(1-p(i))]更合適,i是第i個樣本 ,y(i)表示第i個樣本的標簽,是標簽,不是預測值。
其實logistic和softmax的交叉熵損失函數一個原理:可想象成logistic的輸出有兩個神經元(因為是二分類)。對于某個樣本,其logistic交叉熵損失函數為 - y*log(p),p表示正確類別的概率。
因為二分類只有兩個類別,所以兩個標簽分別為1和0,但是并不表示正確類別的標簽為1,錯誤類別的標簽為0,因為每個樣本的標簽也可以是1,也可以是0。
假如正確類別為0(即標簽為0),預測為0(即預測正確)的概率為p,則損失為-log(p),而在logistic中規定了p(y=1|x)為p(i),
p(y=0|x) 為1-p(i),這里的1-p(i)就是預測正確的概率p.
假如正確類別為1(即標簽為1),預測為1(即預測正確)的概率為p,則損失為-log(p),而在logistic中規定了p(y=1|x)為p(i),
p(y=0|x) 為1-p(i),這里的p(i)就是預測正確的概率p.
因此logistci的交叉熵損失函數J(w,b)=-1/m *Σ[y(i)log(p(i)) + (1-y(i))log(1-p(i))]? ?和softmax的交叉熵損失函數?loss= -1/m*Σlog(p)都是一個原理,即 - log(正確類別的概率)?
?
softmax和logistic的用法上的不同在于:
logistic相當于只有輸入層、單隱層神經元,和兩個神經元的輸出層,即結構特別簡單,輸入直接和權重相乘之后,加上偏置,再進行sigmoid激活函數激活,就得到了輸出層的兩個概率值,分別表示兩個類別的概率。
而softmax通常用在多層神經網絡的的最后一層,中間經過了多次運算和激活,最后的類別不止兩類。
?
總結
以上是生活随笔為你收集整理的【深度学习】sigmoid - 二次代价函数 - 交叉熵 - logistic回归 - softmax的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】全连接层的作用
- 下一篇: 【深度学习】单位高斯化