統計機器學習演算法由模型、策略和演算法三個要素構成,當選擇了一種演算法模型後,下一步就要考慮選擇什麼樣的策略或準則來最優化模型
損失函式是機器學習中用於衡量模型一次**結果好壞的目標函式
常用的損失函式有:
1、0-1損失函式:非凸函式,只關心**值和真實值是否相同,沒有關係他們之間的距離或誤差,有很多不足
2、平方損失函式:線性回歸模型常用的最優化目標函式,l(y,f(x))=(y-f(x))^2
3、對數損失函式:分類模型常用的最優化目標函式,l(y,f(x))=-lnp(y|x)
4、hinge損失函式:最大間隔目標函式,是svm採用的最優化目標函式,l(y,f(x))=max(0,1-y*f(x))
對於任意給定的損失函式,可以求得平均意義下的期望損失函式,期望損失函式也稱為期望風險函式
rexp(f)=e(l(y,f(x)))=∫l(y,f(x))p(x,y)dxdy
機器學習的目標就是使期望風險函式最小,但由於聯合分布函式p(x,y)是不知道的,因此在實際應用中,通常的優化目標是經驗風險最小化。
例如,給定訓練資料集:t=
模型f(x)關於訓練資料集t的經驗風險函式為:remp(f)=1/n*∑l(yi,f(xi))
由大數定理可知,當n趨於無窮大時,有lim remp(f)=rexp(f)
為防止過擬合,通常會引入正則項,這樣經驗風險函式就變為結構風險函式,記為:rstruct(f)=1/n*∑l(yi,f(xi))+λ*π(θ)
因此,神經網路的最優化目標就是將結構風險函式最小化
對於多分類模型,損失函式一般採用對數損失,即為:l(yi,f(xi))=-lnp(yi|xi)=-lnf(xi)*yi
故該多分類模型最優化目標為:min -1/n*∑lnf(xi)yi+λπ(w,b)
1、欠擬合——梯度消失
梯度為何會消失?——啟用函式的原因。若啟用函式為sigmoid,值域在[0,1],其導數為f』(x)=f(x)*(1-f(x)),值域在[0,1/4],意味著下一層的網路值都要比上一層減少1/4,可以想象梯度的值隨著網路的加深呈指數級的遞減趨勢。當網路到達一定程度的深度之後,梯度可能消失,即網路中的引數不再得到更新。
為了防止梯度消失,通常採用以下方法:
1)採用更加合理的啟用函式,如relu、maxout來代替傳統的sigmiod
來詳細談談maxout啟用函式。
2)batch normalization:是google在2023年提出來的一種改進sgd演算法的優化策略,使得預輸出的每乙個維度先服從均值為0標準差為1的標準正態分佈,再經過scale和shift操作,使得新的輸出具有任意的均值和方差,這樣梯度消失和非線性啟用不再是一組矛盾的關係。
bn公式:f*(x*w+b)=α+β,其中μ是均值,α是標準差
2、過擬合
過擬合是指模型訓練時引數過多,導致模型對訓練資料的**很好而對測試資料的**很差。
為了防止過擬合,通常採用以下方法:
1)正則化:l1正則化、l2正則化
2)dropout:是hinton在2023年提出,詳細參見下下章。
pytorch梯度累加反向傳播
傳統的訓練函式,乙個batch是這麼訓練的 for i,images,target in enumerate train loader 1.input output images images.cuda non blocking true target torch.from numpy np.arr...
深度學習 梯度下降和反向傳播
引用知乎上的乙個回答 那麼導數的本質是什麼?就是變化率唄,例如小王今年賣了100頭豬,去年90頭,前年80頭,也就是說每年增加10頭,這就是變化率,完整點就是說10頭 年,是有單位的,也就是說導數為10,說白點就是自變數單位變化量的基礎上因變數的變化量,自變數就是年份,單位為年,因變數為豬的數量,年...
AI入門 反向傳播和梯度下降
上一節中提到,分類函式是神經網路正向傳播的最後一層。但是如果要進行訓練,我們只有 結果是不夠的,我們需要拿 結果跟真實值進行對比,根據對比結果判斷我們的神經網路是不是夠好。也就是說我們需要在分類函式後面增加一層 計算損失值。計算損失值這一層才是神經網路真正的最後一層。有了損失值之後,我們反過來優化每...