1. 程式人生 > 實用技巧 >傻子都能看懂的——梯度下降與損失函式

傻子都能看懂的——梯度下降與損失函式

目錄

前言

問題一:梯度是個啥?

問題二:梯度下降有啥用?

那麼什麼是損失函式(誤差函式)?

問題三:梯度為啥要下降?

綜上所述


前言

剛接觸機器學習的同學避不開的一個專業名詞就是梯度下降。頓時心裡萬馬奔騰,其實很簡單的,你先得理解概念才能看到那些公式不慫。(當然本文全程無公式,書寫用時2小時,閱讀估計10分鐘)

本文主要解決三個問題:

1. 梯度到底是啥?2. 梯度下降有啥用?3. 為啥要下降?

問題一:梯度是個啥?

其實“ 梯度”你 Ctr+H替換成“ 導數”就可以了,梯度就是目標函式的導數。以後你在書上遇到這個詞就替換成“導數”就容易理解多了。
至於Gradient為啥翻譯成梯度,我也不知道,知道的朋友告訴下我漲下姿勢。 >_>

問題二:梯度下降有啥用?

用問題一的解決方案,替換“梯度”為“導數”。問題變成了: 導數下降幹嘛的?我暫時把答案寫上稍後解釋: 梯度下降就是用來求某個函式最小值時自變數對應取值。這個函式名字叫做損失函式(cost/loss function),直白點就是誤差函式。一個演算法不同引數會產生不同擬合曲線,也意味著有不同的誤差。 損失函式就是一個自變數為演算法的引數,函式值為誤差值的函式。梯度下降就是找讓誤差值最小時候演算法取的引數。(看到這裡肯定也是一臉懵逼,馬的好不容易知道梯度是啥現在又tmd多了個損失函式,不急看完損失函式是啥再回頭看就懂了梯度下降幹嘛的了)

那麼什麼是損失函式(誤差函式)?

機器學習演算法中 有一類演算法就是產生一條曲線來擬合現有的資料,這樣子就可以實現預測未來的資料,這個專業術語叫做迴歸(見到迴歸就替換成擬合就好了~^~)。 還有另外一種類似也是產生一條曲線,但是這個曲線時用來將點分隔成兩塊,實現分類,在這個曲線一側為一類另外一側算一類。 但是我怎麼知道這個演算法產生的擬合曲線效果好不好呢?這個東東叫做誤差,預測值減去真實值最後取絕對值,沒錯就是這麼簡單粗暴~~
產生的擬合曲線並不是完全和現有的點重合,擬合曲線和真實值之間有一個誤差。一個演算法不同引數會產生不同擬合曲線,也意味著有不同的誤差。 損失函式就是一個自變數為演算法的引數,函式值為誤差值的函式。梯度下降就是找讓誤差值最小時候這個演算法對應的引數。
(是不是突然感覺好像知道了梯度下降幹嘛的了,今日宜贊、收藏(要贊不要臉->-))

問題三:梯度為啥要下降?

你如果能回答這個問題基本看書上梯度下降一些公式就清楚很多了。

解:依題意可得

  1. 翻譯問題。☞按照問題一的解決方法可知:我們將“梯度為啥要下降?”這個問題翻譯為:找誤差函式最小值所對應的自變數,為啥要讓導數的絕對值變小。我們看下圖這個二次函式對應曲線就是誤差函式(也就是損失函式,一般是叫損失函式,誤差函式是我為了好理解說的),自變數是演算法的引數函式值是該引數下所產生擬合曲線與真實值之間的誤差值。注意了,注意了,注意了:一般你看到梯度下降的公式最好想到下面這個圖,對就假設誤差函式就這麼特殊,都是開口朝上,都是平滑的,都是隻有一個導數為0的點,都是彎一下而不是彎很多下。

  1. 平常我們怎麼求損失函式(誤差函式)最小值?☞我們目標是求這個損失函式(誤差函式)最小值時候對應自變數的值,也就是求曲線最低點自變數x的取值。用高中知識怎求最小值?老師說了求最值不要慫,上來求個導,然後讓導函式為0時候取最值。告訴你還真就可以這麼幹的,簡單粗暴。不過這個方法不是梯度下降,它有個很高階大氣上檔次的名字叫做正規方程(Normal Equation),嚇到了吧這麼簡單的原理居然名字這麼高階,所以嘛梯度下降也差不多就名字嚇人而已。但是為啥這麼簡單粗暴容易理解,為啥還要用梯度下降呢?因為一般來說越簡單粗暴的方法效率越低~,正規方程在資料量大時候太慢了,就像氣泡排序那麼簡單為啥排序演算法一般不用氣泡排序一樣敲重點了>>>梯度下降和這個原理類似見下面
  2. 梯度下降怎麼求損失函式(誤差函式)最小值?☞假如你拿著手機地圖不用導航去找一個目的地怎麼走?我一般是往某個方向走一段路程,然後發現好像離目的地近了,然後產生一個想法“這個方向能使得我離目的地距離更小”,然後我繼續沿著這個方向走。(你就會疑問該不會梯度下降就這麼做的吧,沒錯就是這麼做的)。

注意了,注意了,注意了:一般你看到梯度下降的公式最好想到下面那個圖,對就假設誤差函式就這麼特殊,都是開口朝上,都是平滑的,都是隻有一個導數為0的點,都是彎一下而不是彎很多下。(哈哈怕你記不得,複製貼上一遍)

想象下:

按照上面那個圖的特點,假設這個圖放大1萬倍,大到你不能一眼看到最小值。那麼要你找最小值對應的自變數x,你怎麼找??記住我們目的是為了找自變數x,記住我們目的是為了找x

你將可能會在電腦螢幕看到原先那個圖的區域性,按照它們單調性來分主要有這三種情況

當你遇到情況1:單調下降,導數為負(梯度為負),要想找到函式的最小值所對應的自變數的值(曲線最低點對應x的值)怎麼走?當然是水平向右滑啦,也就是讓x增大,此時隨著x增大,導數(梯度)的絕對值是減小的(梯度下降含義懂了吧哈哈就這個意思)

當你遇到情況2:單調上升,導數為正(梯度為正),要想找到函式的自變數的值(曲線最低點對應x的值)怎麼走?當然是水平向左滑啦,也就是讓x減小,此時隨著x減小,導數(梯度)的絕對值是減小的(也就是梯度下降)。

初學者學習交流機器學習資料分享Q群(718566626)

綜上所述

  1. 梯度就是導數
  2. 梯度下降作用是找到函式的最小值所對應的自變數的值(曲線最低點對應x的值)。記住我們目的是為了找x.
  3. 梯度下降含義(具體操作)是:改變x的值使得導數的絕對值變小,當導數小於0時候(情況1),我們要讓目前x值大一點點,再看它導數值。當導數大於0時候(情況2),我們要讓目前x值減小一點點,再看它導數值。當導數接近0時候,我們就得到想要的自變數x了。也就是說找到這個演算法最佳引數,使得擬合曲線與真實值誤差最小。(理解這段話,就不用硬背公式啦