李巨集毅機器學習筆記:從0到寫AI
part1.基本介紹
1.機器學習的三個任務
一般情況下,我們在機器學習中有三個基本任務,分別是Regression Classification和Structured
Regression是計算數值解
而Classification則是求離散解(分類),也就是做選擇題
Structured則是找一個結構,這種結構除了資料結構,還包括文字、繪畫等廣義的結構或者說某種意義上,讓機器學習了之後創造一種東西出來
2.找函式三步驟
2.1寫出一個帶有為止引數的函式
也就是面對一些我們位置的問題,仙寫出一個帶有未知引數的函式,也就是先猜測一下我們要如何求這個問題的解,比如一下這個簡單的線性函式:
這個猜測來自於作者對問題本質的瞭解,我們管這種帶未知引數的函式為模型,也就是數學模型
2.2 定義Loss
第二部要定義一個Loss
這個所謂的Loss其實就是一個Function,輸入的值就是我們定義的未知引數,在上述就是我們給定的b和w(引數,變數是x),這個Loss輸出的值代表 現在如果我們把這一組未知的引數設定為某個值的時候,這個數值好還是差。
就像我們在計算一組資料的線性迴歸方程的時候,是不是會有一部分和實際上的值偏差?某種意義上來說,這個Loss函式就是在對這個偏差值的情況做出評價
這裡我們可以把每個離散值的誤差加起來然後求個平均(原文中引用的視訊播放量作為參考,但我覺得這個比較好理解,就隨便放張圖了)
這種就是絕對差值叫MAE Mean Absolute error 還有就是把這個插值的平方算出來的,就叫Mean Square error,或者MSE,作業利用的MAR比較多
計算出來得到一個Error surface
2.3 優化
當然了,第三步就是優化問題,最佳化問題的結果,其實也就是我們要去找最好的w和b,讓loss最小化
在這們課程裡我們會用到的優化方式就只有梯度下降,現在我們簡化一下,假設我們的未知引數只有一個,就是w
那當我們有不同的w,就會有不同的 loss,這時候我們的error surface就是一條曲線,如下圖:
那我們要怎麼去找這麼一個w呢?
看著複雜,其實也就是跟著這條曲線的斜率變化去做調整:斜率為負,則向右找;斜率為正,就向左找
那每次走多少呢?這就涉及到一個調參了:
注:loss是自己定義的,所以可以是負的
當然這裡老師也注意到了局部最優解的問題,其實我也想到了,就是如果只根據這個逼近“極小值”的方法,其實是找不到最小值的,這個確實是梯度下降方法的一個問題。下面是老師的一段那話:
現在我們回到之前的有兩個引數的模型,也就是有w和b的那個,這時候我們如何梯度下降呢?
這個η就是我們定義的步長,或者說叫learning rate
其實由上可以看出,整個loss的收斂方向其實是朝著 多個維度進行的,並不是單指一個方向,當多個維度下的資料都有不同的方向時,其效應就像帶有引力的洞一樣,會將我們的點向最深不見底的洞吸引過去。
什麼時候停下來?兩種情況
1.一開始就設定好最多迭代多少次,設定好迭代次數
2.最好的情況就是直接找到了極小值 w' = 0,當然這個...
線性模型
以上三個步驟:定義模型,寫出loss,優化引數這三個步驟合起來就被我們稱作訓練,當然了,這個訓練是在我們知道答案的基礎上進行的,但是這並不是我們想要的,某種意義上來說這只是對過去規律的總結,真正對於我們重要的是未來的發展,預知未來。
那我們來拿著資料來預測一下試試看
然後我們發現,真實的資料和我們預測的資料 還是有很大的差距的,實際的資料有一定的週期,週末看的人多,工作日看的人少,然後七天一個迴圈
那我們假設給定它一個這樣的引數列表:
我們之前只考慮了一天,那我們最低的loss是0.58k的誤差,其實這裡計算出來的誤差是0.33k,這兩個資料至今的差距,就不言而喻了。
那我們考慮一個月,甚至考慮一年,又怎麼樣呢?我們管這種模型稱作線性模型,之後會淺談怎麼把線性模型做得更好。
part2.基本介紹p2
當然了線性的模型當然是比較簡單的,但是現實肯定不可能處處都有線性的模型