1. 程式人生 > 其它 >李巨集毅機器學習筆記:從0到寫AI

李巨集毅機器學習筆記:從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

當然了線性的模型當然是比較簡單的,但是現實肯定不可能處處都有線性的模型