<label id="qqrfm"><meter id="qqrfm"></meter></label>
      <span id="qqrfm"></span><label id="qqrfm"><meter id="qqrfm"></meter></label>

        要做好深度學習任務,不妨先在損失函數上「做好文章」

        損失函數對于機器學習而言,是最基礎也最重要的環節之一,因此在損失函數上「做好文章」,是一個機器學習項目順利進行的前提之一。Deep Learning Demystified 編輯、數據科學家 Harsha Bommana 以淺顯易懂的文字介紹了在不同的深度學習任務中如何設置損失函數,以期大家能夠對損失函數有一個更加清晰的認識。雷鋒網 AI 科技評論編譯如下。

        在所有的機器學習項目中,損失函數的設置是確保模型以預期的方式工作的最重要的步驟之一。損失函數能夠給神經網絡的實際應用帶來很大的靈活性,并且能夠明確該神經網絡的輸出究竟如何與其他的網絡連接。

        從預測連續值如月度支出到劃分離散類如對貓和狗進行分類等,都是神經網絡能夠執行的任務。各不相同的任務需要不同類別的損失,因為這些任務的輸出格式各不相同。對于非常特定的任務而言,我們需要明確希望如何定義這一損失。

        簡單而言,損失函數(J)可以被定義為包含兩個參數的函數:
        • 1. 預測的輸出
        • 2. 實際的輸出

        神經網絡損失可視化

        該函數通過比較模型預測的值與其應該輸出的實際值來計算出模型表現的糟糕程度。如果 Y_pred 與 Y 相差很大,損失值就會很高;如果兩個值幾乎一樣,損失值就會很低。因此,我們需要讓損失函數在數據集上訓練時,始終能夠有效地對模型進行懲罰。

        如果損失非常大,損失值在模型訓練期間會傳遞到整個網絡中,同時,權重的變化會比平時要大很多。如果損失較小,權重的變化就不會這么大了,因為網絡已經能夠很好地執行任務了。

        這一情況某種程度上跟考生準備考試差不多,如果考生考出的成績很糟,我們就可以說損失非常大,那這位考生就需要對自己為下次考試所做的準備工作進行大改,以便在下次考試中取得更好的成績。然而,如果考生的考試成績還不錯的話,他們就不會過多調整已經為下次考試所做的準備工作。

        現在,讓我們以分類任務為例,來了解損失函數在該示例中到底是如何表現的。

        分類損失

        當神經網絡試圖預測一個離散值時,我們可以將其視作一個分類模型。該網絡會預測出圖像呈現的是什么動物類別,或郵件是否是垃圾郵件。首先,讓我們看下分類任務中神經網絡如何表示輸出。
        要做好深度學習任務,不妨先在損失函數上「做好文章」
        分類神經網絡輸出格式

        輸出層的節點數量取決于用數據表示的類的數量。每一個節點都代表一個單類。每個輸出節點的值基本上都表示模型將類分類正確的概率。

        Pr(Class 1) = Probability of Class 1 being the correct class

        一旦我們得到了所有不同類的概率,我們將概率最高的類視為該示例中預測的類。讓我們從探索二元分類如何實現開始。

        二元分類(Binary Classification)

        在二元分類中,即便我們在兩個類之間進行預測,輸出層中也僅有唯一的一個節點。為了得到概率格式的輸出,我們需要應用一個激活函數。由于概率值在 0 和 1 之間,我們使用能夠將任意實際值壓縮為 0 到 1 之間的值的 Sigmoid 函數。
        要做好深度學習任務,不妨先在損失函數上「做好文章」
         Sigmoid 函數圖可視化

        當 Sigmoid 函數中的輸入變大并趨向于正無窮時,該函數的輸出值會趨近于 1。與此同時,當輸入趨向于負無窮時,該函數的輸出值會趨近于 0。現在我們就總能夠得到一個在 0 到 1 之間的值,而這恰恰就是我們所需要的取值范圍,因為我們要用到概率。

        如果輸出值大于 0.5(50% 的概率),我們將類視為從屬于正類 (Positive class);如果輸出值低于 0.5,則將類視為從屬于負類(negative class)。例如,假如我們訓練一個網絡來對貓和狗進行分類,我們可以將狗分為正類,這樣的話,狗在數據集中的輸出值就是 1;同樣地,我們將貓分為負類,貓的輸出值就是 0。

        我們為二元分類使用的損失函數叫做二元交叉熵(Binary Cross Entropy,BCE)。該函數能夠對二元分類任務的神經網絡進行有效地懲罰。下圖為該函數的表現形式:

        要做好深度學習任務,不妨先在損失函數上「做好文章」

        二元交叉熵損失圖

        我們可以看到,它有兩個分離的函數,它們各自表示 Y 的取值。當我們需要預測正類(Y=1)時,我們使用:
        Loss = -log(Y_pred)

        當我們需要預測負類(Y-=0)時,我們使用:

        Loss = -log(1-Y_pred)

        如圖所示,在第一個函數中,當 Y_pred 等于 1 時,損失值就等于 0,這就能夠起到作用,因為 Y_pred 恰好與 Y 相等。當 Y_pred 的值趨近于 0 時,我們可以看到損失值會一路增加到一個非常高的概率,并且當 Y_pred 變成 0 時,損失值會變成無窮大。這是因為從分類的角度而言,0 和 1 就是兩個極端——因為它們各自表示完全不同的類。因此當 Y_pred 等于 0、Y 等于 1 時,損失值就變得非常高,從而讓網絡更加有效地學習它的錯誤。

        要做好深度學習任務,不妨先在損失函數上「做好文章」
        二元分類損失對比

        我們可以用數學的方式,將整個損失函數表示為如下方程式:
        要做好深度學習任務,不妨先在損失函數上「做好文章」
        二元交叉熵方程式

        該損失函數也叫做對數損失(Log Loss),以上就是該損失函數者針對二元分類神經網絡任務的執行方式。接下來讓我們來看看多類分類網絡中如何定義損失。

        多類分類(Multiclass Classification)

        當我們每次都需要讓模型預測出一個可能的類別時,多類分類是比較合適的方式。由于我們依舊需要處理概率問題,所以對所有輸出的節點使用 Sigmoid 函數會比較有用,這樣的話所有的輸出就都在 0 到 1 之間取值,不過,這種方法也存在一個問題:當我們考慮多個類別的概率時,我們需要確保所有單個類別的概率的總值等于 1,這也是由概率的屬性所決定的。然而,使用 Sigmoid 函數并不能確保總值都等于 1,因此我們需要用到另外的激活函數。
        在該示例中,我們使用的激活函數是 Softmax 函數。該函數能夠確保所有的輸出節點的取值都在 0 到 1 之間,并且所有輸出節點的總值都等于 1。Softmax 的公式如下:
        要做好深度學習任務,不妨先在損失函數上「做好文章」
        Softmax 公式

        我們不妨用一個示例將 Softmax 可視化:
        要做好深度學習任務,不妨先在損失函數上「做好文章」
        Softmax 示例可視化

        如上圖所示,我們可以簡單將所有的取值變成一個指數函數。之后,為了確保所有取值都在 0 到 1 的范圍內以及所有輸出值的總值等于 1,我們還需要用所有指數的總和來除以單個指數。

        所以為什么我們在將每個值正則化之前,要先將每個值指數化?為什么不能僅僅正則化值本身?這是因為,Softmax 函數的目標是確保一個輸出值足夠大(趨近于 1)而另外所有的輸出值足夠小(趨近于 0)。Softmax 函數采用指數的方式,就是為了確保能夠做到這一點。而之后我們對值進行正則化處理則是因為我們需要用到概率。

        既然現在輸出都能夠以合適的格式表示出來了,下面我們來看看如何針對該格式設置損失函數。好的一面是,這里用到的損失函數基本上與二元分類中用到的損失函數差不多。我們僅僅需要根據每個輸出節點對應的目標值在每個輸出節點上使用損失函數,然后我們就能夠得到所有輸出節點的對數損失總值。
        要做好深度學習任務,不妨先在損失函數上「做好文章」
        多分類交叉熵可視化

        該損失就叫做多分類交叉熵(Categorical Cross Entropy)。后續我們再來看看分類任務中的一個特例——多標簽分類。

        多標簽分類(Multilabel Classification)

        當你的模型需要預測多類別作為輸出時,就要用到多標簽法分類。例如,假設你在訓練一個神經網絡來預測一張食物圖片上顯示的食材,這時,網絡就需要預測多種食材,因而 Y 中就可能出現多個取值為 1 的輸出。

        對此,我們僅靠使用 Softmax 函數是無法完成該分類任務的,因為 Softmax 函數往往只能讓一個類別輸出為 1,而其他的所有類別都輸出為 0。所以,在這個任務上,我們僅僅繼續對所有輸出節點值使用 Softmax 函數,因為我們依舊還需要預測出每個類別的單個概率。

        而針對該分類任務的損失,我們可以直接對每個輸出節點使用對數損失函數并取總值,這跟我們在多類分類任務中的工作一樣。

        做好分類以后,我們下面要做的是回歸。

        回歸損失

        在回歸中,我們的模型嘗試預測一個連續值。一些回歸模型的示例有:
        • 房價預測
        • 人的年齡預測
        • ......
           
        在回歸模型中,神經網絡會針對模型需要預測的每個連續值輸出一個節點,之后直接通過比較輸出值和實際值來計算回歸損失。

        回歸模型中最常用的損失函數是均方誤差(Mean-Square Erro)損失函數。我們通過使用該函數,僅需要計算出 Y_pred 和 Y 的方差,然后再將所有取值得到的方差平均即可。我們假設有 n 個取值點:

        要做好深度學習任務,不妨先在損失函數上「做好文章」

        均方誤差損失函數

        這里的 Y_i 和 Y_pred_i 指的是數據集中的第 i 個 Y 值和神經網絡對同一個取值所得出的對應的 Y_pred。

        以上是本文的全部內容。希望各位讀者通過閱讀此文,能夠對深度學習的不同任務如何設置損失函數有一個更加清晰的認識。 

        來源 | 雷鋒網

        上一篇:2019 年度 CAAI Fellow 增選名單出爐,沈向洋、黃鐵軍、宗成慶等 11 位科學家入選
        下一篇:Facebook 發布 Detectron2:基于 PyTorch 的新一代目標檢測工具

        主站蜘蛛池模板: 国产亚洲精彩视频| 国产成人亚洲综合网站不卡| 美女啪啪网站又黄又免费| 性色av免费观看| 亚洲熟妇无码八V在线播放| 57PAO成人国产永久免费视频| 亚洲精品自产拍在线观看动漫| 精品国产一区二区三区免费| 亚洲国产无套无码av电影| 在线看片免费人成视频福利| 亚洲视频在线视频| 亚洲成人免费网址| 亚洲精品美女网站| 免费国产a国产片高清网站| 看免费毛片天天看| 亚洲一区精品无码| 99久久久国产精品免费牛牛| 色播亚洲视频在线观看| 成年女性特黄午夜视频免费看| 亚洲欧洲日本国产| 美女视频黄的全免费视频| 中文日韩亚洲欧美制服| 日韩在线看片免费人成视频播放| 国产成人亚洲综合无| 爱情岛论坛网亚洲品质自拍| 国产在线精品免费aaa片| 亚洲欧洲国产经精品香蕉网| 最近中文字幕mv免费高清视频7 | 四虎影视在线影院在线观看免费视频| 亚洲国产成人久久精品动漫| 在线观看免费高清视频| 美女被免费网站在线视频免费 | 亚洲三级中文字幕| 国产成人啪精品视频免费网| 成全视成人免费观看在线看| 亚洲视频日韩视频| 国产黄色片在线免费观看| 青青操免费在线视频| 精品丝袜国产自在线拍亚洲| 亚洲一区无码精品色| 久久午夜免费视频|