上一次講到,如果我們有乙個權重矩陣w,我們就可以得到各個類的分數,我們如何定義這個分數的好壞呢?
我們可能覺得,只要真實分類的分數比其他都高就是好的。比如下圖中的第一列,貓的得分比青蛙的得分高,但比車的得分少,這就不太好;第二列中車的得分比其他兩個類的得分都高,這就很好;第三列中青蛙的得分比其他兩個都小,所以很不好。
我們想要定義乙個函式來自動計算得分的好壞(即損失函式)。通用的損失函式定義如下:
我們可以定義乙個多分類的svm損失函式如下:
其中yi是真實分類,sy_i是真實分類的得分,比如第一列的貓的得分是3.2。sj是其他分類的得分,比如車的得分5.1和青蛙的得分-1.7。加1是因為我們希望真實分類的得分要比其他分類的得分大一定的範圍,這樣才有較好的魯棒性。
所以貓這張的損失就是:
max(0,5.1-3.2+1) + max(0,-1.7-3.2+1)
=max(0,2.9) + max(0,-3.9)
=2.9。
同樣計算出車和青蛙的損失,分別為0和12.9。所以對於三個影象的測試集和三個類別,我們得到總的損失函式為:
因為多分類的svm損失函式的影象,它也叫hinge loss。
對於固定的sj,隨著sy_i的值(x軸)的增大,損失函式(y軸)減小,最後變為0。
q1:如果第二列的車的得分稍微變化一點點,車這張的損失會改變嗎?
a:不會,因為車的得分已經比其他得分高很多了,稍微改變一點點不會影響這幅影象的損失,依舊是0。
q2:可能的損失的最大最小值是多少?
a:最小值是0(當真實分類的得分足夠大的時候),最大值是正無窮,從hinge loss的影象可以看出來。
q3:初始化時w隨機化為0左右,所以所有得分都約等於0。這時候該影象的損失為多少?
a:n-1,其中n是類別的個數。可以直接假設所有得分為0,所以乙個影象的損失就是(n-1)*max(0,0-0+1)=n-1。
這可以用來檢驗你的損失函式有沒有寫對(在第一次迭代的時候,損失要是n-1才是正確的)。
q4:如果我們把正確分類的得分也拿去計算損失,會怎麼樣呢?
a:損失會加一。因為max(0,sy_i-sy_i+1)=1。所以我們一般不計算正確分類的損失,如果我們計算正確分類的損失,那麼總的損失的最小值就會是1,而不是0。
q5:如果我們把∑li換為mean(li),損失函式會變化嗎?
a:不會,損失函式只是縮小了乙個倍數而已。
q6:如果我們把max(0,sj-sy_i+1)換為max(0,sj-sy_i+1)2,損失函式會變化嗎?
a:損失函式會變化,從而導致得到的分類器不同。
使用平方損失函式(max(0,sj-sy_i+1)2)會放大錯誤分類,而線性損失(max(0,sj-sy_i+1))則沒有那麼在意錯誤的大小,選擇哪種損失函式其實得根據實際情況來。
q7:如果你找到來乙個w使得l=0,那麼這個w是唯一的嗎?
a:不是。比如2w也能使l=0,事實上w的非零倍數都可以。
我們如何在這些w上選擇呢?事實上我們剛才算的都是訓練資料集上的損失,但我們實際關心的是測試資料集上的損失,如果我們只關心訓練資料集上的損失,就有可能導致過擬合,下圖的藍色曲線完美擬合所有的訓練資料(藍色)。但是對於測試資料(綠色)就不符合了。
所以我們要加上正則項,使該模型傾向於選擇乙個簡單的w。
現在損失函式有兩項了,乙個是資料損失,乙個是正則項,還有超引數lambda用來平衡兩項。
我們可以使用各種方法計算正則項,比如l2正則項、l1正則項、l1和l2的結合、dropout、批量歸一化、隨機深度等等。
剛才的多分類svm分類損失函式並沒有解釋分數之間的關係,它只是說真實分類的得分比其他得分高就好了。而softmax函式能把所有的分數都轉化為正數,並且歸一化為0-1之間,可以解釋為某個類的概率。所有概率加起來為1。
得到概率後,我們使用下面的li計算損失:
實際計算例子:
q8:li的最大最小值分別為多少?
a:最大值為正無窮(真實類的概率為0的時候),最小值為0(真實類的概率為1時)。
q9:如果初始化w約等於零,導致所有得分都約等於零,這時li為多少?
a:log(n),n是類的個數。因為所有得分都很類似,約等於零。所以經過softmax函式後,所有概率都為1/n,然後-log(1/n)=log(n)。
這也是乙個檢查機制,在第一次迭代中,你的損失函式應該是log(n)才對。
兩個損失函式的區別:svm損失函式在真實分類的得分大於某個閾值後就不再關心那個資料點了;而softmax總是在不斷提高分類的準確率,使其正確分類的概率為1。
我們有一些資料集;
我們有乙個計算的得分的函式;
我們有乙個計算損失的函式(softmax、svm、加正則項等)。
cs231n筆記總結
cs231n的課程以及作業都完成的差不多了,後續的課程更多的涉及到卷積神經網路的各個子方向了,比如語義分割 目標檢測 定位 視覺化 遷移學習 模型壓縮等等。assignment3有涉及到這些中的一部分,但需要深入了解的話還是得看 了。所以在看 前把之前已學的知識,筆記和作業 一起做個整理。部落格裡主...
CS231n理解筆記
linear classification notes 該方法的組成 乙個是評分函式 原始影象資料到類別分值的對映 乙個是損失函式 用來量化 分類標籤的得分和真實標籤之間的一致性。影象分類的任務是從已有的固定分類標籤中選擇乙個並分配一張影象,我們介紹了knn分類器,該分類器的基本思想是通過將測試影象...
cs231n 學習 前言
吐槽 我為啥學這個 學這門課之前,到官網 要科學上網哦 查了下相關資訊,有部分需求 要求1,得會 python 且熟悉 c c 其實我是不會 python 的,但語言只是一種工具,不該成為鴻溝,且這麼流行的語言上手也不應該難吧 盲目自信一把 要求2,微積分和線性代數,嗯,這個不是問題。要求3,概率統...