樣本分類控制
前面說了一個很重要的點:可以調控損失來控制網絡訓練。
接下來詳細看看在分類過程中的運用。
Focal Loss
基礎的交叉熵
首先,得記住一點:網絡通過損失函數進行參數的更新,以迭代減少損失值。
也就是說:損失越大,越會更新大幅度更新參數,以取得更大的進步,使損失更小。
損失本身是單一的,只是一個數值,但是網絡的參數是繁雜的,它可以通過參數的互補,在不減少一方面的結果的同時,更好的擬合另一個方面的數據。
以下的辦法都是基於此。
考慮兩種情況
- 預測準確和預測失敗的,是否以相同的權重去更新網絡
- 訓練樣本不均衡,現實場景下,不足的樣本是否也應該較少
綜合下來,不難得出如下結論
- 預測錯誤的,爲了更好的擬合,應該更多的增加損失
- 少量的樣本,應該以質來彌補量的缺失,應該增大權值,更好模擬真實情況
不能忘記的是,大致方向如此,但是權值不能是等同的,應該是每個樣本自適應的,取決於它本身的損失程度。
於是,出現了這樣的損失定義
- : 樣本佔比
- : 預測難易
對於預測的較準的正樣本或者較準的負樣本P,兩者都是不大的數,乘方以後會急速衰減,從而達到減少正確預測的損失更新。
相反,如果是那種模棱兩可的,或者預測很失敗的,就能夠保留極大的權值,刺激網絡更新擬合。
很有意思的一點,邏輯迴歸的時候,把兩類樣本都甩到兩邊,爲了更明晰的分類。
現在,從損失函數上,也可以通過標記來拉開兩者的分類距離,這裏強調的是異類距離的拉開。
Center Loss
分類只在乎不同類別之間的距離?不對,被歸爲一類的事物之間,也必然要有一定的相似度,也就是說,分類也是包含聚類的。
之前做過一個分類,結果不太好,因爲訓練集中包含的數據並不多樣。
換了個底色,或者有些地方掉色,它就歸類錯誤了。
一方面是學習的特徵的數據缺乏,同時,也讓我感受到了:單一類型判斷缺乏可變換。
這也說明,分類如果只是排除法:不歸爲此類,是不行的。
它必須有明確的:它之所以是此類,這種正向的歸類理由。也就是聚類能力。
分類能力似乎不錯,但是在中心處呢,不可爲是分的清除。
肉眼看來,或許分開了,但還是上面所說,沒有所謂的聚類的能力,沒有就是這一類的肯定。
這種呢,哇,恍然大悟。
這次,我們的分類,不僅是它不是哪個類,而是真正的它就是哪個類.
歸根結底,還是在損失上面做文章。
其中是害怕距離中心點的值太大,反而失去類分類的本意而添加的超參數。
中心點的定義
依據這個算法不停迭代,它就會去不停的更新參數,學習到讓每次訓練損失都小的參數,把每個點都轉換到靠近的聚類位置。
思維發散
回顧以下損失函數的意義
- 衡量預測與真實之間的差距
因爲訓練的目標,就是去減少損失函數,也就是說,我們是的某方面的權重較大,它會極力的去擬合某方面的屬性。
從而,我們以權重爲主體,不同的檢測結果,分配不同的權值配比,就可以如願的在樣本分佈、擬合難度上去優化我們的訓練方向。
另一方面,不單純的去放縮原本的損失函數,在原來的基礎之上,我們可以引入另一個新的判斷依據來爲損失函數擴充內容。
雖然損失只是單一的值,但是神經網絡的學習能力還是超乎想象,通過甄別各參數的影響能力,最終去調整,使得損失最小。
不過目前來看,僅在分類上,損失函數有很大的變化空間,因爲分類,是很明確的,且唯一標註的。
對於檢測類的任務,並不那麼明晰,好比人臉標記,它是純粹的主觀,而非刻板的分類。沒有明確的對錯關係。
不過,雖然神經網絡是理論的法外之地,在損失的操作上還是可以融入一些既有的知識。
我們可以通過添加上額外的計算關係限定,額外附加到損失函數之上,順便的,也能夠得到學習。
正如,一個人的臉,總不能是一條直線或者豎線,它的寬高,我們可以設定一定的約束,來精煉我們的參數。
正如分類的效果一直不太好,我就讓預測錯誤的權值增大,以提高擬合能力。
但是,我只是樣本少,基本沒錯誤的,實際情況下,這種辦法也會擬合錯誤樣本,而且過擬合之後缺乏泛化能力。
不過,訓練初期,不妨進行這種大刀闊斧的參數調整,正如各種梯度優化方法,都是先大後小的,我們只是從源頭的損失進行,而不是權值來改變。