【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集
?
3.4.?softmax回歸
回歸可以用于預(yù)測多少的問題。 比如預(yù)測房屋被售出價格,或者棒球隊可能獲得的勝場數(shù),又或者患者住院的天數(shù)。
事實上,我們也對分類問題感興趣:不是問“多少”,而是問“哪一個”:
-
某個電子郵件是否屬于垃圾郵件文件夾?
-
某個用戶可能注冊或不注冊訂閱服務(wù)?
-
某個圖像描繪的是驢、狗、貓、還是雞?
-
某人接下來最有可能看哪部電影?
通常,機器學(xué)習(xí)實踐者用分類這個詞來描述兩個有微妙差別的問題:
1. 我們只對樣本的“硬性”類別感興趣,即屬于哪個類別;
2. 我們希望得到“軟性”類別,即得到屬于每個類別的概率。 這兩者的界限往往很模糊。其中的一個原因是:即使我們只關(guān)心硬類別,我們?nèi)匀皇褂密涱悇e的模型。
3.4.1.?分類問題
我們從一個圖像分類問題開始。 假設(shè)每次輸入是一個2×2的灰度圖像。 我們可以用一個標(biāo)量表示每個像素值,每個圖像對應(yīng)四個特征x1,x2,x3,x4。 此外,假設(shè)每個圖像屬于類別“貓”,“雞”和“狗”中的一個。
接下來,我們要選擇如何表示標(biāo)簽。 我們有兩個明顯的選擇:最直接的想法是選擇y∈{1,2,3}, 其中整數(shù)分別代表{狗,貓,雞}。 這是在計算機上存儲此類信息的有效方法。 如果類別間有一些自然順序, 比如說我們試圖預(yù)測{嬰兒,兒童,青少年,青年人,中年人,老年人}, 那么將這個問題轉(zhuǎn)變?yōu)榛貧w問題,并且保留這種格式是有意義的。
幸運的是,一般的分類問題并不與類別之間的自然順序有關(guān)。 統(tǒng)計學(xué)家很早以前就發(fā)明了一種表示分類數(shù)據(jù)的簡單方法:獨熱編碼(one-hot encoding)。 獨熱編碼是一個向量,它的分量和類別一樣多。類別對應(yīng)的分量設(shè)置為1,其他所有分量設(shè)置為0。
在我們的例子中,標(biāo)簽y將是一個三維向量, 其中(1,0,0)對應(yīng)于“貓”、(0,1,0)對應(yīng)于“雞”、(0,0,1)對應(yīng)于“狗”:
3.4.2.?網(wǎng)絡(luò)架構(gòu)
為了估計所有可能類別的條件概率,我們需要一個有多個輸出的模型,每個類別對應(yīng)一個輸出。 為了解決線性模型的分類問題,我們需要和輸出一樣多的仿射函數(shù)(affine function)。 每個輸出對應(yīng)于它自己的仿射函數(shù)。 在我們的例子中,由于我們有4個特征和3個可能的輸出類別, 我們將需要12個標(biāo)量來表示權(quán)重(帶下標(biāo)的w), 3個標(biāo)量來表示偏置(帶下標(biāo)的b)。 下面我們?yōu)槊總€輸入計算三個未規(guī)范化的預(yù)測(logit):o1、o2和o3。
我們可以用神經(jīng)網(wǎng)絡(luò)圖下來描述這個計算過程。 與線性回歸一樣,softmax回歸也是一個單層神經(jīng)網(wǎng)絡(luò)。 由于計算每個輸出o1、o2和o3取決于 所有輸入x1、x2、x3和x4, 所以softmax回歸的輸出層也是全連接層。
為了更簡潔地表達(dá)模型,我們?nèi)匀皇褂镁€性代數(shù)符號。 通過向量形式表達(dá)為o=Wx+b, 這是一種更適合數(shù)學(xué)和編寫代碼的形式。 由此,我們已經(jīng)將所有權(quán)重放到一個3×4矩陣中。 對于給定數(shù)據(jù)樣本的特征x, 我們的輸出是由權(quán)重與輸入特征進行矩陣-向量乘法再加上偏置b得到的。
3.4.3.?全連接層的參數(shù)開銷
正如我們將在后續(xù)章節(jié)中看到的,在深度學(xué)習(xí)中,全連接層無處不在。全連接層是“完全”連接的,可能有很多可學(xué)習(xí)的參數(shù)。 具體來說,對于任何具有d個輸入和q個輸出的全連接層, 參數(shù)開銷為O(dq),這個數(shù)字在實踐中可能高得令人望而卻步。 幸運的是,將d個輸入轉(zhuǎn)換為q個輸出的成本可以減少到O(dqn), 其中超參數(shù)n可以由我們靈活指定,以在實際應(yīng)用中平衡參數(shù)節(jié)約和模型有效性。
3.4.4.?softmax運算
現(xiàn)在我們將優(yōu)化參數(shù)以最大化觀測數(shù)據(jù)的概率。 為了得到預(yù)測結(jié)果,我們將設(shè)置一個閾值,如選擇具有最大概率的標(biāo)簽。
要將輸出視為概率,我們必須保證在任何數(shù)據(jù)上的輸出都是非負(fù)的且總和為1。 此外,我們需要一個訓(xùn)練目標(biāo),來鼓勵模型精準(zhǔn)地估計概率。 在分類器輸出0.5的所有樣本中,我們希望這些樣本有一半實際上屬于預(yù)測的類。 這個屬性叫做校準(zhǔn)(calibration)。
社會科學(xué)家鄧肯·盧斯于1959年在選擇模型(choice model)的理論基礎(chǔ)上發(fā)明的softmax函數(shù)正是這樣做的: softmax函數(shù)將未規(guī)范化的預(yù)測變換為非負(fù)并且總和為1,同時要求模型保持可導(dǎo)。 我們首先對每個未規(guī)范化的預(yù)測求冪,這樣可以確保輸出非負(fù)。 為了確保最終輸出的總和為1,我們再對每個求冪后的結(jié)果除以它們的總和。如下式:
這里,對于所有的jj總有0≤y^j≤1。 因此,y^可以視為一個正確的概率分布。 softmax運算不會改變未規(guī)范化的預(yù)測o之間的順序,只會確定分配給每個類別的概率。 因此,在預(yù)測過程中,我們?nèi)匀豢梢杂孟率絹磉x擇最有可能的類別。
盡管softmax是一個非線性函數(shù),但softmax回歸的輸出仍然由輸入特征的仿射變換決定。 因此,softmax回歸是一個線性模型(linear model)。
3.4.5.?小批量樣本的矢量化
3.4.6.?損失函數(shù)
我們將使用最大似然估計來度量預(yù)測的效果。
3.4.6.1.?對數(shù)似然
由于y是一個長度為q的獨熱編碼向量, 所以除了一個項以外的所有項j都消失了。 由于所有y^j都是預(yù)測的概率,所以它們的對數(shù)永遠(yuǎn)不會大于0。 因此,如果正確地預(yù)測實際標(biāo)簽,即如果實際標(biāo)簽P(y∣x)=1, 則損失函數(shù)不能進一步最小化。 注意,這往往是不可能的。 例如,數(shù)據(jù)集中可能存在標(biāo)簽噪聲(比如某些樣本可能被誤標(biāo)), 或輸入特征沒有足夠的信息來完美地對每一個樣本分類。
3.4.6.2.?softmax及其導(dǎo)數(shù)
3.4.6.3.?交叉熵?fù)p失
我們觀察到的不僅僅是一個結(jié)果,而是整個結(jié)果分布。 對于標(biāo)簽y,我們可以使用與以前相同的表示形式。 唯一的區(qū)別是,我們現(xiàn)在用一個概率向量表示,如(0.1,0.2,0.7), 而不是僅包含二元項的向量(0,0,1)。 我們使用?(3.4.8)來定義損失l, 它是所有標(biāo)簽分布的預(yù)期損失值。 此損失稱為交叉熵?fù)p失(cross-entropy loss),它是分類問題最常用的損失之一。 本節(jié)我們將通過介紹信息論基礎(chǔ)來理解交叉熵?fù)p失。?
?
3.4.7.?信息論基礎(chǔ)
信息論(information theory)涉及編碼、解碼、發(fā)送以及盡可能簡潔地處理信息或數(shù)據(jù)。
3.4.7.1.?熵
信息論的核心思想是量化數(shù)據(jù)中的信息內(nèi)容,該數(shù)值被稱為分布P的熵(entropy)。可以通過以下方程得到:
3.4.7.2.?驚異
壓縮與預(yù)測有什么關(guān)系呢?舉一個極端的例子,假如數(shù)據(jù)流中的每個數(shù)據(jù)完全相同,這會是一個非常無聊的數(shù)據(jù)流。 由于它們總是相同的,所以很容易被預(yù)測。 所以,為了傳遞數(shù)據(jù)流的內(nèi)容,我們不必傳輸任何信息。 因此,當(dāng)數(shù)據(jù)易于預(yù)測,也就易于壓縮。
但是,如果我們不能完全預(yù)測每一個事件,那么我們有時可能會感到“驚異”。 在觀察一個事件j,并賦予它(主觀)概率P(j)。 當(dāng)我們賦予一個事件較低的概率時,我們的驚異會更大。 在?(3.4.11)中定義的熵, 是當(dāng)分配的概率真正匹配數(shù)據(jù)生成過程時的預(yù)期驚異。
3.4.7.3.?重新審視交叉熵
交叉熵想象為“主觀概率為Q的觀察者在看到根據(jù)概率P生成的數(shù)據(jù)時的預(yù)期驚異”。 當(dāng)P=Q時,交叉熵達(dá)到最低。 在這種情況下,從P到Q的交叉熵是H(P,P)=H(P)。
簡而言之,我們可以從兩方面來考慮交叉熵分類目標(biāo):
(i)最大化觀測數(shù)據(jù)的似然;
(ii)最小化傳達(dá)標(biāo)簽所需的驚異。
3.4.8.?模型預(yù)測和評估
在訓(xùn)練softmax回歸模型后,給出任何樣本特征,我們可以預(yù)測每個輸出類別的概率。 通常我們使用預(yù)測概率最高的類別作為輸出類別。 如果預(yù)測與實際類別(標(biāo)簽)一致,則預(yù)測是正確的。 在接下來的實驗中,我們將使用精度(accuracy)來評估模型的性能。 精度等于正確預(yù)測數(shù)與預(yù)測總數(shù)之間的比率。
3.5.?圖像分類數(shù)據(jù)集
import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' # 可能是由于是MacOS系統(tǒng)的原因def get_dataloader_workers():"""使用4個進程來讀取數(shù)據(jù)"""return 4def load_data_fashion_mnist(batch_size, resize=None):"""下載Fashion-MNIST數(shù)據(jù)集,然后將其加載到內(nèi)存中"""# 通過ToTensor實例將圖像數(shù)據(jù)從PIL類型變換成32位浮點數(shù)格式# 并除以255使得所有像素的數(shù)值均在0到1之間trans = [transforms.ToTensor()]if resize:trans.insert(0, transforms.Resize(resize))trans = transforms.Compose(trans)mnist_train = torchvision.datasets.FashionMNIST(root="../data", train=True, transform=trans, download=True)mnist_test = torchvision.datasets.FashionMNIST(root="../data", train=False, transform=trans, download=True)return (data.DataLoader(mnist_train, batch_size, shuffle=True,num_workers=get_dataloader_workers()),data.DataLoader(mnist_test, batch_size, shuffle=False,num_workers=get_dataloader_workers()))def get_fashion_mnist_labels(labels):"""返回Fashion-MNIST數(shù)據(jù)集的文本標(biāo)簽"""text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat','sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']return [text_labels[int(i)] for i in labels]def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5): #@save"""繪制圖像列表"""figsize = (num_cols * scale, num_rows * scale)_, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)axes = axes.flatten()for i, (ax, img) in enumerate(zip(axes, imgs)):if torch.is_tensor(img):# 圖片張量ax.imshow(img.numpy())else:# PIL圖片ax.imshow(img)ax.axes.get_xaxis().set_visible(False)ax.axes.get_yaxis().set_visible(False)if titles:ax.set_title(titles[i])return axes
3.6.?softmax回歸的從零開始實現(xiàn)
3.4.9.?小結(jié)?
-
softmax運算獲取一個向量并將其映射為概率。
-
softmax回歸適用于分類問題,它使用了softmax運算中輸出類別的概率分布。
-
交叉熵是一個衡量兩個概率分布之間差異的很好的度量,它測量給定模型編碼數(shù)據(jù)所需的比特數(shù)。
一、Softmax 回歸
1.1視頻截圖
?
?
?
?
?
?
?
?
?
?二、損失函數(shù)
?
?
?
?三、圖像分類數(shù)據(jù)集
?
?
?
?
?
?四、從0開始實現(xiàn)sofymax回歸
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?五、softmax回歸的簡潔實現(xiàn)
?
?
?
?QA:
?1.softmax 和 logistic類似
?2.相對熵:是一個對稱的關(guān)系
3.損失圖中:橙色線 表示梯度的絕對值
4.最小化損失就等于最大化似然函數(shù)
總結(jié)
以上是生活随笔為你收集整理的【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PackagesNotFoundErro
- 下一篇: 【Pytorch神经网络理论篇】 08