損失函式(loss function)是用來估量模型的**值(我們例子中的output)與真實值(例子中的y_train)的不一致程度,它是乙個非負實值函式,損失函式越小,模型的魯棒性就越好。 我們訓練模型的過程,就是通過不斷的迭代計算,使用梯度下降的優化演算法,使得損失函式越來越小。損失函式越小就表示演算法達到意義上的最優。
多分類用的交叉熵損失函式,logsoftmax和nllloss整合到乙個類中,會呼叫nn.nllloss函式,我們可以理解為crossentropyloss()=log_softmax() + nllloss()
因為使用了nllloss,所以也可以傳入weight引數,這時loss的計算公式變為:
所以一般多分類的情況會使用這個損失函式
在介紹損失函式的時候我們已經說了,梯度下降是乙個使損失函式越來越小的優化演算法,在無求解機器學習演算法的模型引數,即約束優化問題時,梯度下降(gradient descent)是最常採用的方法之一。所以梯度下降是我們目前所說的機器學習的核心,了解了它的含義,也就了解了機器學習演算法的含義。
在微積分裡面,對多元函式的引數求∂偏導數,把求得的各個引數的偏導數以向量的形式寫出來,就是梯度。 例如函式f(x,y), 分別對x,y求偏導數,求得的梯度向量就是(∂f/∂x, ∂f/∂y)t,簡稱grad f(x,y)或者▽f(x,y)。
幾何上講,梯度就是函式變化增加最快的地方,沿著梯度向量的方向,更加容易找到函式的最大值。反過來說,沿著梯度向量相反的方向梯度減少最快,也就是更加容易找到函式的最小值。
我們需要最小化損失函式,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函式,和模型引數值。
隨機梯度下降演算法,帶有動量(momentum)的演算法作為乙個可選引數可以進行設定,樣例如下:
#除了以上的帶有動量momentum梯度下降法外,rmsprop(root mean square prop)也是一種可以加快梯度下降的演算法,利用rmsprop演算法,可以減小某些維度梯度更新波動較大的情況,使其梯度下降的速度變得更快lr引數為學習率,對於sgd來說一般選擇0.1 0.01.0.001,如何設定會在後面實戰的章節中詳細說明
##如果設定了momentum,就是帶有動量的sgd,可以不設定
optimizer = torch.optim.sgd(model.parameters(), lr=0.1, momentum=0.9)
#adam 優化演算法的基本思想就是將 momentum 和 rmsprop 結合起來形成的一種適用於不同深度學習結構的優化演算法我們的課程基本不會使用到rmsprop所以這裡只給乙個例項
optimizer = torch.optim.rmsprop(model.parameters(), lr=0.01, alpha=0.99)
#這裡的lr,betas,還有eps都是用預設值即可,所以adam是乙個使用起來最簡單的優化方法
optimizer = torch.optim.adam(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-08)
損失函式和梯度下降
前提 前向傳播經過若干個神經元,再經過啟用函式,最終得到結果,然後輸出損失函式,根據損失函式再進行反向傳播,及傳遞梯度,調整權重。並不是根據啟用偶函式輸出直接返回梯度值,而是在計算損失函式的基礎上進行反向傳播梯度。更多的是按照小批量的處理,累計梯度求平均值,最後進行梯度下降。損失函式與分類函式 sv...
損失函式與梯度下降
梯度下降演算法會依賴於導數和偏導數 導數定義 所謂導數,就是用來分析函式 變化率 的一種度量。導數越大變化率越大,導數越小變化率越小,其公式為 偏導 的英文本意是 partial derivatives 表示區域性導數 對於多維變數函式而言,當球某個變數的導數時,就是把其他變數視為常量,然後對整個函...
梯度下降解決線性回歸
今天主要是想和大家分享一下使用梯度下降解決線性回歸問題,使用的框架是tensorflow,開發環境在linux ubuntu 首先我們使用numpy的正態分佈函式隨機生成100個點,這些 x,y 對應的線性方程為y 0.1 x 0.2,weigth 0.1,bias 0.2 然後我們使用py去生成1...