机器学习的练功心法(二)——引入
文章目錄
- 2 引入
- 2.1 模型概述
- 2.1.1 預測房價問題
- 2.1.2 符號
- 2.2 代價函數
- 2.3 代價函數的用處
- 2.4 回到問題
- 2.5 梯度下降
- 2.6 梯度下降知識點總結
- 2.7 線性回歸模型的梯度下降
2 引入
2.1 模型概述
2.1.1 預測房價問題
在我們要開始下面的問題前,我們先來看一些關于房價預測的例子。
假設我們有一個朋友,它想要賣掉房子,而房子的大小是1250平方英尺,你想要告訴它們,你的房子能夠賣多少錢。那你說出這句話的依據請問是什么?是猜測嗎?顯然不是。我們通過某個確定的模型,根據所擁有的數據集來確定一個具體的函數,然后根據這個函數輸入房子的大小,然后輸出房子賣出大概的估價,這也是你對朋友說這話的底氣。
上面的問題實際上是一個有監督學習,因為它有確定的模型來給我們算出對應的函數,而它實際上又是一個回歸問題,這是因為根據算出來的函數,我們可以通過連續地輸入特征值來獲取自己想要的預測值。
還是上面的例子,我們說了我們是通過已有的數據集來訓練模型使其變為確定的函數,那么這部分拿來訓練模型的數據集我們稱之為訓練集。
2.1.2 符號
在機器學習中我們會用到許許多多的符號,我們在這里先挑出幾個比較常見的符號。
我們一般習慣用m來表示訓練集的數目。用xnx_nxn?來表示某一個樣本的某一個特征,而用y來表示樣本對應的輸出,用y^\hat yy^?來代表我們在訓練好的模型上通過輸入獲得相應的預測值。
由于訓練集中有多個樣本,所以我們一般用(xi,yi)(x^{i},y^{i})(xi,yi)來表示第i個樣本的特征和第i個樣本對應的輸出。
在這一講下面的學習中,我們會用到最簡單的模型來開始我們的機器學習之路,即線性回歸模型。
2.2 代價函數
在這一小節中,我們來試著定義代價函數這一名詞。代價函數也叫損失函數,你懂得,這是因為中文的多義性,它英文名實際上為loss function。
我們依舊使用2.1用過的例子來講述我們接下來要探討的問題,假如我們有m為47的樣本數,我們采用的模型是線性模型,其中θ1θ_1θ1?如同我們初中第一次學習一次函數中的k,而θ0θ_0θ0?為b。但是我們后面不會用到k和b了,你要記住這是機器學習,符號的改變并不會影響最基本的思路。
在這個假定的模型中,我們要求的是一個具體的函數,即我們要求出θ0和θ1θ_0和θ_1θ0?和θ1?的值。因為x是特征,y是預測,對吧?
但是這個θ0和θ1θ_0和θ_1θ0?和θ1?并沒有你想象的那么好選擇,試想,如果你的θ0和θ1θ_0和θ_1θ0?和θ1?選出來不能很好地去預測新的輸入,那不就廢了嗎。而這個衡量能不能很好預測的標準就是,我們根據訓練集訓練出來的函數模型預測出來的結果和真實結果偏差應該盡可能的小。即y和y^y和 \hat yy和y^?之間的誤差應該盡可能地小。
我們需要討論一個問題,這個y和y^y和\hat yy和y^?之間的誤差用什么來衡量呢?y?y^y-\hat yy?y^?嗎?顯然不是,因為它們的差值有可能出現負數,這對我們后續的計算可能造成干擾。實際上,誤差有多種衡量方式,由于考慮到我們剛剛入門,所以我們采用最簡單的平方誤差來進行誤差上的衡量。平方誤差的表現形式是:(y^?y)2(\hat y - y)^2(y^??y)2,而我們有多個樣本,所以需要對誤差求總和然后計算平均誤差,即1m(y^?y)2\frac {1}{m}(\hat y - y)^2m1?(y^??y)2。
求最小值怎么求?在高中數學學習的過程中,我們可以總結出幾種求最值的方法:
- 二次函數公式
- 基本不等式
- 求導
- …
在這里我們選擇求導比較方便,而為了便于求導,我們將上面的公式改寫為:12m(y^?y)2\frac {1}{2m}(\hat y - y)^22m1?(y^??y)2,所以為了找出符合我們心中所想的那個函數,我們必須對這個損失函數J(θ0,θ1)=12m(y^?y)2J(θ_0,θ_1) = \frac {1}{2m}(\hat y - y)^2J(θ0?,θ1?)=2m1?(y^??y)2進行最小化。
2.3 代價函數的用處
在上一小節中,我們提到了代價函數的數學形式,在這一小節中,我們會詳細提到代價函數是用來做什么呢。
由于前面我們給定的模型是hθ(x)=θ0+θ1xh_θ(x) = θ_0+θ_1xhθ?(x)=θ0?+θ1?x,參數太多對新手不是很友好,所以我們把這個函數模型再簡化一下變成hθ(x)=θ1xh_θ(x) = θ_1xhθ?(x)=θ1?x。那么這個損失函數J就變為J(θ1)=12m(y^?y)2J(θ_1) = \frac {1}{2m}(\hat y - y)^2J(θ1?)=2m1?(y^??y)2。
當我們θ1θ_1θ1?取0.5時,兩個函數的圖像如下圖所示:
也就是說,通過不同的θ1θ_1θ1?的取值,如果其J(θ1)J(θ_1)J(θ1?)的值越小,那么說明其畫出來的函數直線更夠更好的擬合所有的數據集。
J(θ1)J(θ_1)J(θ1?)什么時候最小?我們可以根據求導來獲取它的極小值。而為什么說是極小值而不是最小值,這是因為該問題的損失函數剛好是一個凸函數,在下一小節中,我們會遇到一個非凸函數。
2.4 回到問題
讓我們回到原來那條損失函數,在上一小節中,我們對損失函數做了一個簡化,在這一小節中,我們要討論那個沒有被簡化的損失函數。
我們初始化θ0和θ1θ_0和θ_1θ0?和θ1?。我們可以設定θ0=50,θ1=0.06θ_0 = 50,θ_1 = 0.06θ0?=50,θ1?=0.06,那么可以得到我們第一條直線;而在損失函數中,由于上一小節我們使用的是簡化版的損失函數,這也就導致了當時是一個二維的情形,現在引入兩個參數,那么這個問題就會上升到三維:
我們的任務就是,找出這個長得像碗的函數的最低點,然后得到它的(θ0,θ1)(θ_0,θ_1)(θ0?,θ1?)坐標,然后帶回線性回歸函數模型中,得到具體的函數,所得的函數即為對訓練集擬合最好的函數。
2.5 梯度下降
我們前面定義的代價函數J,但是我們沒說怎么讓代價降低。我知道你現在肯定有些問題想要知道,以為自己學漏了什么,別擔心,下面我就會告訴你學漏了什么。
我們接下來要一種算法,它可以讓我們的參數緩慢的接近代價函數圖像的極小值點。這種算法不僅被用在線性回歸上,還被廣泛用于機器學習的各種領域。
梯度下降我們可以分為以下的幾個步驟:
我們要做的第一件事就是先給定θ0和θ1θ_0和θ_1θ0?和θ1?的初始值。當然,通常我們初始值為(0,0)。
第二件事就是,我們會通過梯度下降算法不停地一點點改變θ0和θ1θ_0和θ_1θ0?和θ1?。使得J(θ0,θ1)J(θ_0,θ_1)J(θ0?,θ1?)變小,直到我們找到J的最小值。
讓我們來看看在圖像上梯度下降的工作原理吧。如下是一個非凸損失函數,這樣的話我們實際上不知道哪個是最小值,只能知道極小值。
我們要做的就是,站在我們初始化的點所在的位置,然后朝四周看,我們應該走那個方向可以下山,然后朝那個方向邁出既定的一步;然后停下看往四周,重復上述的步驟,直到到達一個自己認為是最低點的位置。
我們來看一下梯度下降算法的數學表示形式吧,實際上,梯度下降的公式是:θj=θj?α??θjJ(θ0,θ1)θ_j = θ_j - \alpha \frac{\partial}{\partial θ_j} J(θ_0,θ_1)θj?=θj??α?θj???J(θ0?,θ1?),我們可以這么理解這個公式:當我們發現損失,就往減少損失的方向走去,不斷更新自身的位置,直到滿意為止,而減少損失的方向在數學上我們叫做梯度,也許這個名詞我換個說法更合適,它實際上就是微積分中的偏導,偏導的前面有一個α\alphaα符號,其代表我們應該往損失的方向邁一個多大的步子,我們把這個參數叫做學習率。
2.6 梯度下降知識點總結
讓我們對上一小節學過的知識進行一個總結吧。上一小節中,我們學到了梯度下降公式,其中α\alphaα稱為學習率,其控制我們以多大的幅度去更新這個參數θj\theta_jθj?。而α\alphaα后面的那一串我們叫做梯度(偏導)。
實際上對于學習率來說,其控制非常難。我們無法確定好一個合適的學習率。如果學習率過大,可能導致步子過大而錯過損失函數的最低點;而如果學習率過小,可能導致步子過小而迭代速度緩慢。所以一般來說根據前人的經驗我們可以選幾個特定的值。也可以用自適應學習率算法(AdaGrad)動態地在迭代過程中不斷更新學習率。
2.7 線性回歸模型的梯度下降
我們上面學過的幾個函數和算法如下所示:
我們使用梯度下降來處理損失函數時,時常會陷入局部最優。而對于線性回歸的損失函數來說,其損失函數往往是一個凸函數,不會有這類擔憂。
如果學過高代(高等線性代數)的同學可能知道一種解法,其可以直接解出損失函數的最低點,而不是像梯度下降一般一步一步迭代直至最低點,在后面我們也會詳細介紹,這種方法叫正規方程,請不必擔心。
總結
以上是生活随笔為你收集整理的机器学习的练功心法(二)——引入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php如何写一个能让外部访问的接口,如何
- 下一篇: “智商平平”学软件