系列博客,原文在筆者所維護的github上:https://aka.ms/beginnerAI,
點擊star加星不要吝嗇,星越多筆者越努力。python
MSE - Mean Square Error。git
該函數就是最直觀的一個損失函數了,計算預測值和真實值之間的歐式距離。預測值和真實值越接近,二者的均方差就越小。github
均方差函數經常使用於線性迴歸(linear regression),即函數擬合(function fitting)。公式以下:算法
\[ loss = {1 \over 2}(z-y)^2 \tag{單樣本} \]函數
\[ J=\frac{1}{2m} \sum_{i=1}^m (z_i-y_i)^2 \tag{多樣本} \]spa
要想獲得預測值a與真實值y的差距,最樸素的想法就是用\(Error=a_i-y_i\)。3d
對於單個樣原本說,這樣作沒問題,可是多個樣本累計時,\(a_i-y_i\)有可能有正有負,偏差求和時就會致使相互抵消,從而失去價值。因此有了絕對值差的想法,即\(Error=|a_i-y_i|\)。這看上去很簡單,而且也很理想,那爲何還要引入均方差損失函數呢?兩種損失函數的比較如表3-1所示。code
表3-1 絕對值損失函數與均方差損失函數的比較blog
樣本標籤值 | 樣本預測值 | 絕對值損失函數 | 均方差損失函數 |
---|---|---|---|
\([1,1,1]\) | \([1,2,3]\) | \((1-1)+(2-1)+(3-1)=3\) | \((1-1)^2+(2-1)^2+(3-1)^2=5\) |
\([1,1,1]\) | \([1,3,3]\) | \((1-1)+(3-1)+(3-1)=4\) | \((1-1)^2+(3-1)^2+(3-1)^2=8\) |
\(4/3=1.33\) | \(8/5=1.6\) |
能夠看到5比3已經大了不少,8比4大了一倍,而8比5也放大了某個樣本的局部損失對全局帶來的影響,用術語說,就是「對某些偏離大的樣本比較敏感」,從而引發監督訓練過程的足夠重視,以便回傳偏差。get
假設有一組數據如圖3-3,咱們想找到一條擬合的直線。
圖3-3 平面上的樣本數據
圖3-4中,前三張顯示了一個逐漸找到最佳擬合直線的過程。
圖3-4 損失函數值與直線位置的關係
第三張圖損失函數值最小的狀況。比較第二張和第四張圖,因爲均方差的損失函數值都是正值,如何判斷是向上移動仍是向下移動呢?
在實際的訓練過程當中,是沒有必要計算損失函數值的,由於損失函數值會體如今反向傳播的過程當中。咱們來看看均方差函數的導數:
\[ \frac{\partial{J}}{\partial{a_i}} = a_i-y_i \]
雖然\((a_i-y_i)^2\)永遠是正數,可是\(a_i-y_i\)卻能夠是正數(直線在點下方時)或者負數(直線在點上方時),這個正數或者負數被反向傳播回到前面的計算過程當中,就會引導訓練過程朝正確的方向嘗試。
在上面的例子中,咱們有兩個變量,一個w,一個b,這兩個值的變化都會影響最終的損失函數值的。
咱們假設該擬合直線的方程是y=2x+3,當咱們固定w=2,把b值從2到4變化時,看看損失函數值的變化如圖3-5所示。
圖3-5 固定W時,b的變化形成的損失值
咱們假設該擬合直線的方程是y=2x+3,當咱們固定b=3,把w值從1到3變化時,看看損失函數值的變化如圖3-6所示。
圖3-6 固定b時,W的變化形成的損失值
橫座標爲W,縱座標爲b,針對每個w和一個b的組合計算出一個損失函數值,用三維圖的高度來表示這個損失函數值。下圖中的底部並不是一個平面,而是一個有些下凹的曲面,只不過曲率較小,如圖3-7。
圖3-7 W和b同時變化時的損失值造成的曲面
在平面地圖中,咱們常常會看到用等高線的方式來表示海拔高度值,下圖就是上圖在平面上的投影,即損失函數值的等高線圖,如圖3-8所示。
圖3-8 損失函數的等高線圖
若是還不能理解的話,咱們用最笨的方法來畫一張圖,代碼以下:
s = 200 W = np.linspace(w-2,w+2,s) B = np.linspace(b-2,b+2,s) LOSS = np.zeros((s,s)) for i in range(len(W)): for j in range(len(B)): z = W[i] * x + B[j] loss = CostFunction(x,y,z,m) LOSS[i,j] = round(loss, 2)
上述代碼針對每一個w和b的組合計算出了一個損失值,保留小數點後2位,放在LOSS矩陣中,以下所示:
[[4.69 4.63 4.57 ... 0.72 0.74 0.76] [4.66 4.6 4.54 ... 0.73 0.75 0.77] [4.62 4.56 4.5 ... 0.73 0.75 0.77] ... [0.7 0.68 0.66 ... 4.57 4.63 4.69] [0.69 0.67 0.65 ... 4.6 4.66 4.72] [0.68 0.66 0.64 ... 4.63 4.69 4.75]]
而後遍歷矩陣中的損失函數值,在具備相同值的位置上繪製相同顏色的點,好比,把全部值爲0.72的點繪製成紅色,把全部值爲0.75的點繪製成藍色......,這樣就能夠獲得圖3-9。
圖3-9 用笨辦法繪製等高線圖
此圖和等高線圖的表達方式等價,但因爲等高線圖比較簡明清晰,因此之後咱們都使用等高線圖來講明問題。
ch03, Level1