1. 程式人生 > >我的人工智慧之旅——梯度下降vs正規方程法

我的人工智慧之旅——梯度下降vs正規方程法

本文將涉及以下知識點

(1)特徵縮放

(2)均值歸一化

(3)正規方程

優化梯度下降演算法

在上一篇博文中,我們瞭解了梯度下降演算法,它為解決線性迴歸問題提供了思路。但梯度下降的迭代推算過程,較為耗時。簡單地說,整個演算法是一個不斷嘗試收斂的過程。如果能夠降低演算法的嘗試次數,以及每次迭代的演算法複雜度,那麼,便能更高效的解決線性迴歸問題。

影響梯度下降演算法收斂速度的因素很多,例如樣本集合大小,特種向量中某一元素的取值範圍遠大於其它元素,學習速率等。

樣本集合越大,演算法推算出的假設函式越精確。因此,不能通過減少樣本來提高演算法的運算速度,這將付出降低精確度的代價。

所以,只能在其它干擾因素上找突破口。

特徵縮放

還以房價預估為例,假設特徵向量由面積x_1,樓層x_2,房齡x_3,房間數量x_4組成。取值範圍依次為,面積x_1:30~200m^2,樓層x_2:1~35層,房齡x_3:1~70年,房間數量x_4:1~6間。由於面積x_1的取值範圍較其三者都大,因此,在相同學習速率下,對面積x_1做偏導數的次數遠高於其它三者。同樣的問題,對於樓層x_2和房齡x_3也存在。

為了使得迭代次數(求偏導數的次數)更加均衡,提出了特徵縮放(feature scaling)的概念。即,用\frac{x_i}{x_i_{max}-x_i_{min}}替代原有x_i

在特徵縮放的過程中,為了讓特徵的取值範圍更加規範化,即規定在-0.5~0.5內,進而提出了均值歸一化(mean normalization)的概念,即用\frac{x_i-\bar{x}}{x_i_{max}-x_i_{min}}

替代\frac{x_i}{x_i_{max}-x_i_{min}}

學習率

在代價函式中,學習率也是一個重要的引數。學習率的大小,影響迭代幅度。學習率偏小時,迭代次數多。學習率偏大時,迭代次數少,但有可能造成不收斂的情況。那麼如何選擇一個合適的學習率呢?其實,也是通過多次嘗試獲取最佳學習率。

通常,我們選定一個學習率後,會畫出代價函式J(A^T)與迭代次數n的關係圖。一個較為合適的學習率,對應的代價函式與迭代次數的關係圖應該是收斂的。如下圖。

若所畫關係圖未出現收斂,則說明學習率偏大。可以在保證收斂的前提下,儘量提升學習率,以減少迭代次數。

綜上,雖然可以通過運用特徵縮放和調節學習率的方式,提高梯度下降方法的收斂速度。但梯度下降方法還是擺脫不了“迭代”、“嘗試”的口實。那麼有沒有方法,可以一次性得到代價函式的最小值呢?

正規方程法

我們還是以房價預估為例。x_0預設為1,x_1,x_2,x_3分別代表樓層,房齡,房間數量。房價為y,且假設房價與特徵向量間存線上性關係,a_0+a_1x_1+a_2x_2+a_3x_3=y

若,樣本集合大小為m,則

\begin{bmatrix} 1&x_1_1&x_1_2&x_1_3\\ 1&x_2_1&x_2_2&x_2_3\\ ..&..&..&..\\ 1&x_m_1&x_m_2&x_m_3 \end{bmatrix} \begin{bmatrix} a_0\\ a_1\\ a_2\\ a_3 \end{bmatrix} =\begin{bmatrix} y_1\\ y_2\\ ..\\ y_m\\ \end{bmatrix}

X=\begin{bmatrix} 1&x_1_1&x_1_2&x_1_3\\ 1&x_2_1&x_2_2&x_2_3\\ ..&..&..&..\\ 1&x_m_1&x_m_2&x_m_3 \end{bmatrix}A=\begin{bmatrix} a_0\\ a_1\\ a_2\\ a_3 \end{bmatrix}Y=\begin{bmatrix} y_1\\ y_2\\ ..\\ y_m\\ \end{bmatrix}

XA=Y

X^{T}XA=X^{T}Y

此時,X^{T}X為方陣,存在逆矩陣(注:也可能不存在,但MATLAB或OCTAVE會算出偽逆矩陣,因此,此處暫時認為,方陣都存在逆矩陣)。

因此,(X^{T}X)^{-1}X^{T}XA=(X^{T}X)^{-1}X^{T}Y

EA=(X^{T}X)^{-1}X^{T}Y,其中E為單位矩陣

因此,A=(X^{T}X)^{-1}X^{T}Y

有了這個推算結果,我們可以在MATLAB或OCTAVE中呼叫演算法,得出相應的A。

對比與選擇

與梯度下降演算法相比,正規方程法不需要選擇學習率,不需要迭代,更不需要畫代價函式J(A^T)與迭代次數n的關係圖,證明學習率對於收斂的影響。這使得正規方程法似乎有著壓倒性的優勢。但正規方程法,也存在缺陷。

當特徵向量中的特徵數量較大時(即X的列數n較大時),正規方程的時間複雜度為O(n^3),因此,會非常耗時,速度不一定比梯度下降快。那麼n多大算大呢?推薦值為10000,但仁者見仁,還得看硬體效能。