吴恩达斯坦福大学机器学习 CS229 课程学习笔记(二)
終于要開始正式的學習了。看了第一節課最大的印象是Ng老師的優雅,儒雅,偏英式的發音(突然意識到他從小在倫敦長大)。配著字幕看的視頻,但還是希望能鍛煉一下自己的聽力,也只有在自己看過一遍印象才深刻,別人的讀書筆記再好那也是二手資料。公共課是300人的大課程,感覺和國內的上課氛圍也差不多,也是三人一個小組完成project,只不過Ng最后給了一些自己學生的作品確實很具有吸引力。恭維一個西電的圖像說斯坦福課程和他們差不多,沒想到同學還開始喘了,說西電可是中國斯坦福。
這節課就要用到大量的線性代數的知識linear algebra。
Ng首先展示了一個視頻,利用監督學習實現汽車的自動駕駛,作者把他的算法稱之為神經網絡,其核心算法就是梯度下降法。稱作監督是因為有司機為它展示了如何行駛在正確的道路上,屏幕上分別顯示了司機選擇的方向和機器的輸出,在短短兩分鐘的學習之后,機器輸出就近似了司機的方向,切換到自動駕駛,汽車Alvin就可以自己行駛了。要知道這比Ng的公開課還要早15年,即1992年,天哪,在我還沒出生的時候就已經有人在實驗汽車的自動駕駛了。這也是一個回歸問題,已知當前的傳感器捕捉的路況和對應的司機的正確駕駛的操作,在出現新的路況時機器自主選擇駕駛路線。
這樣我們可以得到一個假設h,當再輸入其他特征值時就可以輸出預測值。線性回歸時,h就是一個線性函數如h=b+ax1,當特征不僅僅是房屋面積時,可能還有臥室數目,h=b+ax1+cx2.
我們的目標是使這個函數最小化。求最小值的問題有多種不同的算法。第一種是搜索算法。
給參數向量初始化為0,之后改變參數向量使J減小。一個方法就是Gradient Descent梯度下降法。在一個三維的坐標系中,J函數的值代表高度,隨機選擇一組參數初始值,對應的J值就就可以想象成所在在山坡高度,目的就好比是找到一條高度下降最快的路線,即最陡的路線,那就可以在當前點求梯度,達到小一點的時候繼續求梯度方向,迭代直至找到最優解。當換取另外一個初始值時,找到的最佳路徑可能不同,說明找到的都是局部最優解。
在梯度下降的過程中,我們需要時刻更新參數值
偏導前面的系數 稱作learningrate,表示了每次迭代時的步長。事實上,J函數是二次函數,它是一個碗狀的二次曲面,可以看到它只有一個最小值。J函數的等高線的投影則是橢圓形,下降最快的路徑就是通過等高線最密的路徑。收斂時梯度變為0,得到的就是最小二乘擬合。
上面的式子針對了一個樣本,當有許多樣本時還需要加上求和符號。所以說這種算法叫Batch Gradient Descent,每次迭代需要遍歷整個訓練樣本。所以在訓練樣本很大時,考慮采用Stactastic Gradient descent隨機梯度下降法,也叫增量梯度下降法,incrementalgradient descent。每次更新只利用一組樣本,即把一組樣本看成多個單個的樣本進行計算。這樣調整參數的速度會快很多。對海量訓練數據,隨機梯度下降會快很多,但不會精確收斂到全局最小值。從等高線看,這種算法不是直接收斂到最小值,而是徘徊到最小值附近。
用矩陣計算會更加簡潔,先看幾個定理:
具體推導過程可以看:https://blog.csdn.net/xiaocainiaodeboke/article/details/50371986
求解出解析表達式就不需要迭代求解了,正規方程直接得到最優解,而且正規方程不需要選擇學習速率,但是正規方程只適用于線性模型,像邏輯回歸就不適用了。且特征數量大于10000時運算量過大。
以上結果其實也可以通過線性代數直接解出:
$Y = X * \theta $
$\begin{array}{l}
{X^T}Y = {X^T}X * \theta \\
{({X^T}X)^{ - 1}}{X^T}Y = {({X^T}X)^{ - 1}}({X^T}X) * \theta
\end{array}$
在這個例子中,各項特征是4x4的,但是假設函數有一個偏置項,所以矩陣X有一列全1
統計學和機器學習中,設計矩陣是一組觀測結果中的所有解釋變量的值構成的矩陣,常用X表示。設計矩陣常用于一些統計模型,如一般線性模型,方差分析中。
正規方程的解涉及X’X的求逆,在公開課就有人問會不會遇到不可逆的情況,其實確實會遇到X’X是奇異矩陣的情況,原因可能是兩個特征值成比例,或者訓練樣本比參數少很多。前一種情況可以刪除一種特征,后一種可以刪除多余的特征或者正則化方法。實在不行還可以求偽逆。
參考:https://blog.csdn.net/u012790625/article/details/76906315
得知面對多維特征的時候,將特征值歸一化成相近的尺度有利于加快收斂。比如房屋預測問題中,面積范圍在0~2000平方英尺,而臥室數目在1~5,歸一化后,等高線更近似為一個圓而不是橢圓,收斂更快。(為什么???)
關于迭代次數,當下降幅度小于一個閾值如?時就可以認為已經收斂了
關于學習率,太小的話容易迭代次數過多收斂過慢,太大的話容易找不到最小值
在選取學習率的時候,我們通常都需要設置多個學習率進行測試,學習率之間的倍數通常是3倍和10倍,通過測試,我們就可以找到最好的那一個學習率
學習線性回歸的原因不僅僅是因為它是最簡單的擬合方法,當我們用高次函數去擬合訓練數據時,就是多項式回歸,多項式回歸其實也可以用線性回歸來表示,方法就是把非一次項用變量代換。具體是使用多少項,用幾次項,就需要我們對訓練數據有深刻的認識了。
Reference:
1.https://blog.csdn.net/u012790625/article/details/76906315
2.https://blog.csdn.net/xiaocainiaodeboke/article/details/50371986
總結
以上是生活随笔為你收集整理的吴恩达斯坦福大学机器学习 CS229 课程学习笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 近代数字信号处理实验-DFT分析信号的频
- 下一篇: 《Python 黑科技》10万粉丝头像千