Softmax回歸

1. 基本概念

1.1 Softmax

Softmax回歸與線(xiàn)性回歸差別不大毡琉,對(duì)應(yīng)的是分類(lèi)問(wèn)題邦鲫,主要區(qū)別在于輸出層是否使用了softmax運(yùn)算符。為了方便各類(lèi)別輸出的不定范圍值域進(jìn)行比較妇多,并直接得到概率意義的輸出壳快,使用softmax函數(shù)將不確定范圍的輸出值非線(xiàn)性映射到0-1之間,對(duì)應(yīng)其分為該類(lèi)別的概率贞绵。
\hat{y}_1, \hat{y}_2, \hat{y}_3 = \text{softmax}(o_1, o_2, o_3)
\hat{y}1 = \frac{ \exp(o_1)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}2 = \frac{ \exp(o_2)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}3 = \frac{ \exp(o_3)}{\sum_{i=1}^3 \exp(o_i)}.

容易推導(dǎo)厉萝,softmax操作具有常數(shù)不變性,即softmax(x) = softmax(x+c)榨崩,在計(jì)算softmax概率的時(shí)候谴垫,為了保證數(shù)值穩(wěn)定性(numerical stability),我們可以選擇給輸入項(xiàng)減去一個(gè)常數(shù)母蛛,比如x的每個(gè)元素都要減去一個(gè)x中的最大元素翩剪。當(dāng)輸入項(xiàng)很大的時(shí)候,如果不減這樣一個(gè)常數(shù)彩郊,取指數(shù)之后結(jié)果會(huì)變得非常大前弯,發(fā)生溢出的現(xiàn)象,導(dǎo)致結(jié)果出現(xiàn)inf秫逝。

問(wèn)題:為什么選擇softmax函數(shù)來(lái)壓縮輸出恕出?softmax和sigmoid函數(shù)有什么區(qū)別和聯(lián)系?

來(lái)自討論區(qū)凌云峰的回答:
相同點(diǎn)

  1. 都具有良好的數(shù)據(jù)壓縮能力是實(shí)數(shù)域R→[ 0 , 1 ]的映射函數(shù),可以將雜亂無(wú)序沒(méi)有實(shí)際含義的數(shù)字直接轉(zhuǎn)化為每個(gè)分類(lèi)的可能性概率违帆。
  2. 都具有非常漂亮的導(dǎo)數(shù)形式浙巫,便于反向傳播計(jì)算。
  3. 它們都是 soft version of max ,都可以將數(shù)據(jù)的差異明顯化的畴。
  • 相同的渊抄,他們具有著不同的特點(diǎn),sigmoid函數(shù)可以看成softmax函數(shù)的特例丧裁,softmax函數(shù)也可以看作sigmoid函數(shù)的推廣护桦。

不同點(diǎn)

  1. sigmoid函數(shù)前提假設(shè)是樣本服從伯努利 (Bernoulli) 分布的假設(shè),而softmax則是基于多項(xiàng)式分布渣慕。首先證明多項(xiàng)分布屬于指數(shù)分布族嘶炭,這樣就可以使用廣義線(xiàn)性模型來(lái)擬合這個(gè)多項(xiàng)分布,由廣義線(xiàn)性模型推導(dǎo)出的目標(biāo)函數(shù)即為Softmax回歸的分類(lèi)模型逊桦。
  2. sigmoid函數(shù)用于分辨每一種情況的可能性眨猎,所以用sigmoid函數(shù)實(shí)現(xiàn)多分類(lèi)問(wèn)題的時(shí)候,概率并不是歸一的强经,反映的是每個(gè)情況的發(fā)生概率睡陪,因此非互斥的問(wèn)題使用sigmoid函數(shù)可以獲得比較漂亮的結(jié)果;softmax函數(shù)最初的設(shè)計(jì)思路適用于首先數(shù)字識(shí)別這樣的互斥的多分類(lèi)問(wèn)題匿情,因此進(jìn)行了歸一化操作兰迫,使得最后預(yù)測(cè)的結(jié)果是唯一的。

1.2 損失函數(shù)

平方損失(\boldsymbol{y}^{(i)}\in\{0,1\}
\begin{aligned}Loss = |\boldsymbol{\hat y}^{(i)}-\boldsymbol{y}^{(i)}|^2/2\end{aligned}
交叉熵(cross entropy)損失
H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \log \hat y_j^{(i)},
在分類(lèi)任務(wù)中炬称,平方損失過(guò)于嚴(yán)格汁果,且不適用于多分類(lèi)任務(wù);交叉熵只關(guān)心正確分類(lèi)的預(yù)測(cè)概率玲躯,只要其值足夠大据德,就可以確保分類(lèi)結(jié)果正確。

2. 重要代碼

2.1 從零開(kāi)始實(shí)現(xiàn)

主要包括的步驟:

  1. 獲取訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)
  2. 定義模型參數(shù)
  3. 定義softmax操作
  4. 構(gòu)建softmax回歸模型
  5. 定義損失函數(shù)
  6. 定義準(zhǔn)確率
  7. 訓(xùn)練模型
  8. 模型預(yù)測(cè)
def train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size,
              params=None, lr=None, optimizer=None):
    for epoch in range(num_epochs):
        train_l_sum, train_acc_sum, n = 0.0, 0.0, 0
        for X, y in train_iter:
            y_hat = net(X)
            l = loss(y_hat, y).sum()
            
            # 梯度清零
            if optimizer is not None:
                optimizer.zero_grad()
            elif params is not None and params[0].grad is not None:
                for param in params:
                    param.grad.data.zero_()
            
            l.backward()
            if optimizer is None:
                d2l.sgd(params, lr, batch_size)
            else:
                optimizer.step() 
            
            
            train_l_sum += l.item()
            train_acc_sum += (y_hat.argmax(dim=1) == y).sum().item()
            n += y.shape[0]
        test_acc = evaluate_accuracy(test_iter, net)
        print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f'
              % (epoch + 1, train_l_sum / n, train_acc_sum / n, test_acc))

train_ch3(net, train_iter, test_iter, cross_entropy, num_epochs, batch_size, [W, b], lr)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末跷车,一起剝皮案震驚了整個(gè)濱河市棘利,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朽缴,老刑警劉巖善玫,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異密强,居然都是意外死亡茅郎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)或渤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)只洒,“玉大人,你說(shuō)我怎么就攤上這事劳坑。” “怎么了成畦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵距芬,是天一觀的道長(zhǎng)涝开。 經(jīng)常有香客問(wèn)我,道長(zhǎng)框仔,這世上最難降的妖魔是什么舀武? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮离斩,結(jié)果婚禮上银舱,老公的妹妹穿的比我還像新娘。我一直安慰自己跛梗,他們只是感情好寻馏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著核偿,像睡著了一般诚欠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漾岳,一...
    開(kāi)封第一講書(shū)人閱讀 51,215評(píng)論 1 299
  • 那天轰绵,我揣著相機(jī)與錄音,去河邊找鬼尼荆。 笑死左腔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捅儒。 我是一名探鬼主播液样,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼野芒!你這毒婦竟也來(lái)了蓄愁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狞悲,失蹤者是張志新(化名)和其女友劉穎撮抓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體摇锋,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丹拯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荸恕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乖酬。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖融求,靈堂內(nèi)的尸體忽然破棺而出咬像,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布县昂,位于F島的核電站肮柜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏倒彰。R本人自食惡果不足惜审洞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望待讳。 院中可真熱鬧芒澜,春花似錦、人聲如沸创淡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辩昆。三九已至阅酪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汁针,已是汗流浹背术辐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留施无,地道東北人辉词。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像猾骡,于是被迫代替她去往敵國(guó)和親瑞躺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容