從零實(shí)現(xiàn)深度學(xué)習(xí)框架(十四)Softmax回歸簡(jiǎn)介

引言
本著“凡我不能創(chuàng)造的,我就不能理解”的思想,本系列文章會(huì)基于純Python以及NumPy從零創(chuàng)建自己的深度學(xué)習(xí)框架,該框架類似PyTorch能實(shí)現(xiàn)自動(dòng)求導(dǎo)。
要深入理解深度學(xué)習(xí),從零開始創(chuàng)建的經(jīng)驗(yàn)非常重要,從自己可以理解的角度出發(fā),盡量不適用外部完備的框架前提下,實(shí)現(xiàn)我們想要的模型。本系列文章的宗旨就是通過這樣的過程,讓大家切實(shí)掌握深度學(xué)習(xí)底層實(shí)現(xiàn),而不是僅做一個(gè)調(diào)包俠。
邏輯回歸只能處理二分類問題,但是很多時(shí)候我們遇到的是多分類問題。此時(shí)就需要用到多元邏輯回歸(multinomial logistic regression),也稱為softmax回歸。本文就來了解下softmax回歸。
多元邏輯回歸
在softmax回歸中,我們希望為每個(gè)樣本從個(gè)類別中標(biāo)記一個(gè)類別,假設(shè)只有一個(gè)類別是正確的。
我們使用下面的表示:每個(gè)輸入對(duì)應(yīng)的輸出是一個(gè)長(zhǎng)度為的向量。如果類是正確的類別,我們?cè)O(shè),然后設(shè)置向量中所有其他元素為。即同時(shí),這種叫作獨(dú)熱向量(ont-hot vector)。分類器需要輸出一個(gè)估計(jì)向量。對(duì)于每個(gè)類,的值就是分類器對(duì)于概率的估計(jì)。
Softmax回歸中使用Sigmoid函數(shù)的推廣版——Softmax函數(shù),來計(jì)算。
輸入一個(gè)向量,其中元素可以是任意值,映射它為一個(gè)概率分布,即每個(gè)元素的值被映射到之間,同時(shí)所有映射值總和為。
對(duì)于維度為的向量,softmax定義為:


輸入向量經(jīng)過softmax后得到向量:

該向量?jī)?nèi)所有元素總和為,分母用于將所有的值標(biāo)準(zhǔn)化成概率。
應(yīng)用Softmax
類似邏輯回歸,輸入是一個(gè)權(quán)重向量和一個(gè)輸入向量之間的點(diǎn)積,加上偏差。但不同的是,這里我們要為每個(gè)類提供獨(dú)立的權(quán)重向量和偏差。這樣,我們的每個(gè)輸出類的概率可以計(jì)算為:


上圖是公式的可視化,Softmax有個(gè)權(quán)重和偏差(上圖沒有體現(xiàn)出來)。
公式形式看起來似乎會(huì)分別計(jì)算每個(gè)輸出。相反,更常見的做法是通過向量化利用GPU來更有效地計(jì)算。我們將通過將個(gè)權(quán)向量的集合表示為權(quán)矩陣和偏差向量。的第行對(duì)應(yīng)于的權(quán)重向量。因此,有形狀,是輸出類的數(shù)量,是輸入特征的數(shù)量。偏差向量對(duì)每個(gè)輸出類都有一個(gè)值。如果我們用這種方式表示權(quán)值,我們可以通過一個(gè)優(yōu)雅的方程來計(jì)算,一次計(jì)算個(gè)類的輸出概率:
多元邏輯回歸的損失函數(shù)
多元邏輯回歸的損失函數(shù)是將邏輯回歸的損失函數(shù)從類推廣到類?;仡櫼幌拢壿嫽貧w的交叉熵是:

多元邏輯回歸的損失函數(shù)推廣了上式中的這兩項(xiàng)(當(dāng)時(shí)的和時(shí)的)。對(duì)于多元邏輯回歸,和會(huì)被表示成向量。真實(shí)標(biāo)簽是一個(gè)帶有個(gè)元素的向量,每個(gè)元素都對(duì)應(yīng)一個(gè)類,假設(shè)正確的類是,則,的所有其他元素都是。模型也將生成一個(gè)帶有個(gè)元素的估計(jì)向量,其中每個(gè)元素代表估計(jì)概率。
對(duì)于單個(gè)樣本的損失函數(shù),從邏輯回歸推廣,是個(gè)輸出的對(duì)數(shù)和,每個(gè)乘上對(duì)應(yīng)的,見下。這正好變成了正確類別的負(fù)對(duì)數(shù)概率:

從到是怎么轉(zhuǎn)換的呢?因?yàn)橹挥幸粋€(gè)類,假設(shè)記為,是正確類別,向量只有其對(duì)應(yīng)的元素為,比如同時(shí)。這意味著中的求和項(xiàng)都是,除了正確類對(duì)應(yīng)的那項(xiàng)。就變成了。因此交叉熵?fù)p失簡(jiǎn)單的變成了正確類別的輸出概率的對(duì)數(shù),因此稱為負(fù)對(duì)數(shù)似然損失。
多元邏輯回歸的梯度
當(dāng)然,對(duì)于梯度下降,我們不需要損失,我們需要它的梯度。單個(gè)樣本的梯度與我們?cè)谇拔闹锌吹降倪壿嫽貧w的梯度非常相似。讓我們考慮一下梯度的一部分,即單個(gè)權(quán)重的導(dǎo)數(shù)。對(duì)于每個(gè)類,輸入的第個(gè)元素的權(quán)重是,假設(shè)共有個(gè)特征。與有關(guān)的損失的偏導(dǎo)數(shù)是多少?因?yàn)?span style="cursor:pointer;">被占用了,因此我們用新的符號(hào)。
由于分母中包含,因此我們推導(dǎo)如下:

其中去掉偏導(dǎo)符號(hào)的等式拿出來展開,第一項(xiàng):

因?yàn)橹挥?span style="cursor:pointer;">項(xiàng)與有關(guān),其他的偏導(dǎo)數(shù)都是,所以上面進(jìn)行了簡(jiǎn)化。
同理,第二項(xiàng):
到是因?yàn)?span style="cursor:pointer;"> 與無關(guān),因此可以提到求和符號(hào)左邊。而,因此變成了。
聯(lián)立公式就得到了最后的公式。
事實(shí)證明,這個(gè)導(dǎo)數(shù)只是類的真實(shí)值(即1或0)和類分類器輸出的概率之間的差額。
多元邏輯回歸與邏輯回歸的關(guān)系
邏輯回歸處理二分類問題,而多元邏輯回歸可以處理多分類問題。那么它們之間有什么關(guān)系呢?
多元邏輯回歸具有參數(shù)冗余的特點(diǎn),即參數(shù)中有些是沒有用的,比如從參數(shù)向量()中減去某個(gè)向量,為了方便描述,我們將偏置項(xiàng)增廣到中,變成:

可以看到,從參數(shù)向量中減去對(duì)預(yù)測(cè)結(jié)果沒有任何影響,即在模型中存在多組最優(yōu)解。
假設(shè)一個(gè)樣本只屬于一個(gè)類別,使用多元邏輯回歸來進(jìn)行分類:
當(dāng)類別數(shù)為2時(shí),

利用參數(shù)冗余的特點(diǎn),我們將參數(shù)減去,變成了

又令,得上式,整理后的式子與邏輯回歸一致。
因此,多元邏輯回歸實(shí)際上是邏輯回歸在多分類下的一種推廣。
最后一句:BUG,走你!


Markdown筆記神器Typora配置Gitee圖床
不會(huì)真有人覺得聊天機(jī)器人難吧(一)
Spring Cloud學(xué)習(xí)筆記(一)
沒有人比我更懂Spring Boot(一)
入門人工智能必備的線性代數(shù)基礎(chǔ)
1.看到這里了就點(diǎn)個(gè)在看支持下吧,你的在看是我創(chuàng)作的動(dòng)力。
2.關(guān)注公眾號(hào),每天為您分享原創(chuàng)或精選文章!
3.特殊階段,帶好口罩,做好個(gè)人防護(hù)。
