我的人工智慧之旅——梯度下降vs正規方程法
本文將涉及以下知識點
(1)特徵縮放
(2)均值歸一化
(3)正規方程
優化梯度下降演算法
在上一篇博文中,我們瞭解了梯度下降演算法,它為解決線性迴歸問題提供了思路。但梯度下降的迭代推算過程,較為耗時。簡單地說,整個演算法是一個不斷嘗試收斂的過程。如果能夠降低演算法的嘗試次數,以及每次迭代的演算法複雜度,那麼,便能更高效的解決線性迴歸問題。
影響梯度下降演算法收斂速度的因素很多,例如樣本集合大小,特種向量中某一元素的取值範圍遠大於其它元素,學習速率等。
樣本集合越大,演算法推算出的假設函式越精確。因此,不能通過減少樣本來提高演算法的運算速度,這將付出降低精確度的代價。
所以,只能在其它干擾因素上找突破口。
特徵縮放
還以房價預估為例,假設特徵向量由面積,樓層,房齡,房間數量組成。取值範圍依次為,面積:30~200,樓層:1~35層,房齡:1~70年,房間數量:1~6間。由於面積的取值範圍較其三者都大,因此,在相同學習速率下,對面積做偏導數的次數遠高於其它三者。同樣的問題,對於樓層和房齡也存在。
為了使得迭代次數(求偏導數的次數)更加均衡,提出了特徵縮放(feature scaling)的概念。即,用替代原有。
在特徵縮放的過程中,為了讓特徵的取值範圍更加規範化,即規定在-0.5~0.5內,進而提出了均值歸一化(mean normalization)的概念,即用
學習率
在代價函式中,學習率也是一個重要的引數。學習率的大小,影響迭代幅度。學習率偏小時,迭代次數多。學習率偏大時,迭代次數少,但有可能造成不收斂的情況。那麼如何選擇一個合適的學習率呢?其實,也是通過多次嘗試獲取最佳學習率。
通常,我們選定一個學習率後,會畫出代價函式與迭代次數n的關係圖。一個較為合適的學習率,對應的代價函式與迭代次數的關係圖應該是收斂的。如下圖。
若所畫關係圖未出現收斂,則說明學習率偏大。可以在保證收斂的前提下,儘量提升學習率,以減少迭代次數。
綜上,雖然可以通過運用特徵縮放和調節學習率的方式,提高梯度下降方法的收斂速度。但梯度下降方法還是擺脫不了“迭代”、“嘗試”的口實。那麼有沒有方法,可以一次性得到代價函式的最小值呢?
正規方程法
我們還是以房價預估為例。預設為1,分別代表樓層,房齡,房間數量。房價為y,且假設房價與特徵向量間存線上性關係,。
若,樣本集合大小為m,則
設,,,
則,
此時,為方陣,存在逆矩陣(注:也可能不存在,但MATLAB或OCTAVE會算出偽逆矩陣,因此,此處暫時認為,方陣都存在逆矩陣)。
因此,
,其中E為單位矩陣
因此,。
有了這個推算結果,我們可以在MATLAB或OCTAVE中呼叫演算法,得出相應的A。
對比與選擇
與梯度下降演算法相比,正規方程法不需要選擇學習率,不需要迭代,更不需要畫代價函式與迭代次數n的關係圖,證明學習率對於收斂的影響。這使得正規方程法似乎有著壓倒性的優勢。但正規方程法,也存在缺陷。
當特徵向量中的特徵數量較大時(即X的列數n較大時),正規方程的時間複雜度為,因此,會非常耗時,速度不一定比梯度下降快。那麼n多大算大呢?推薦值為10000,但仁者見仁,還得看硬體效能。