日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

李宏毅 || 机器学习笔记一

發(fā)布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 李宏毅 || 机器学习笔记一 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

李宏毅 || 機器學習筆記一

這是李宏毅老師的2021春季機器學習課程筆記。現(xiàn)在開始第一節(jié) Introduction 的學習

首先簡單介紹一下機器學習

1.什么是機器學習呢?

事實上,機器學習概括來說可以用一句話來描述機器學習這件事,機器學習就是讓機器具備找一個函式的能力

2.機器學習三大任務

  • Regression,回歸問題,輸出是一個連續(xù)的數(shù)值、標量,比如PM2.5預測。
  • Classification,分類問題(輸出為離散數(shù)值),二分類(Binary Classification)的輸出就是0或1、Yes或No。多分類(Multi-Category Classification)的輸出就是[1,2,3,…,N],比如圖像分類里判斷一張圖片是貓還是狗還是杯子。
  • Structured learning,結構學習(輸出為一個有結構的內(nèi)容,如一張圖畫、一段文字)

3.機器學習步驟

Function with unknown parameters(寫出一個帶有未知參數(shù)的函數(shù))
(Ex. Linear Model y=wx+b. 這里y即是一個model,w、b為待訓練的參數(shù))

Define loss fun from training data(定義loss函數(shù))

Optimization(優(yōu)化的方法為Gradient decent)

舉例

機器學習找這個函式的過程,分成三個步驟,那我們就用Youtube頻道,點閱人數(shù)預測這件事情,來跟大家說明這三個步驟,是怎么運作的。

Step 1. Function with Unknown Parameters

第一個步驟是我們要寫出一個,帶有未知參數(shù)的函式,舉例來說,我們這邊先做一個最初步的猜測,我們寫成這個樣子 y=b+w*x? 這邊的每一個數(shù)值是什么呢。

  • y是我們準備要預測的東西,我們準備要預測的是今天(2月26號)這個頻道總共觀看的人;
  • x?是這個頻道前一天總共觀看的人數(shù),y跟x?都是數(shù)值,叫做特征(Feature
  • **b(**Bias)跟w(weight)是未知的參數(shù)(Parameter),它是準備要通過資料去找出來的,我們還不知道w跟b應該是多少,我們只是隱約的猜測;

這個猜測往往就來自于,你對這個問題本質上的了解,也就是Domain knowledge,這是一個猜測,它不一定是對的,之后會再來修正這個猜測。

Step 2. Define Loss from Training Data

定義Loss Function,這個Function的輸入是Parameter,即Model里面的參數(shù)b跟w;輸出的值代表這筆數(shù)值好還是不好。那這個Loss怎么計算呢?

函式預估的結果跟真正的結果(這個真實的值叫做Label)的差距有多大。估測的值用y來表示,真實的值用?來表示,計算y跟?之間的差距e?、

計算差距其實不只一種方式

  • 算y跟?之間,絕對值的差距,這一種計算差距的方法,得到的這個大L,得到的Loss叫 mean absolute error(MAE)
  • 如果e是用相減y平方算出來的,這個叫mean square error(MSE)
  • 如果y和?它都是機率分布的話,可能會選擇Cross-entropy

接下來我們把每一天的誤差加起來然后取得平均,N代表訓驗資料的個數(shù),算出一個L,是每一筆訓練資料的誤差,就是Loss。L越大,代表現(xiàn)在這一組參數(shù)越不好,L越小,代表現(xiàn)在這一組參數(shù)越好。

估測的值跟實際的值之間的差距。

Error Surface:

對所計算出來的結果,那我們可以調整不同的w,我們可以調整不同的b,組合起來以后,都去計算它的Loss,然后就可以畫出下面的這個等高線圖。

如上圖所示,越偏紅色系,代表計算出來的Loss越大,就代表這一組w跟b越差,如果越偏藍色系,就代表Loss越小,就代表這一組w跟b越好。那像這樣子的一個等高線圖,就是試著試了不同的參數(shù),然后計算它的Loss,畫出來的這個等高線圖,叫做Error Surface,那這個是機器學習的第二步。

Step 3. Optimization

解一個最佳化的問題。把未知的參數(shù)w跟b,找一個數(shù)值出來,代入L,讓Loss的值最小,那個就是我們要找的w跟b。

在這一門課里面唯一會用到的Optimization的方法,叫做梯度下降法(Gradient Descent)。先假設未知的參數(shù)只有一個,只有w這個未知的參數(shù)。

那當w代不同的數(shù)值的時候,就會得到不同的Loss,這一條曲線就是error surface

那怎么樣找一個w,去讓這個loss的值最小呢?

首先隨機選取一個初始的點w?,
那接下來你就要計算,在w等于w0的時候,w這個參數(shù)對loss的微分L/?w |(w=w^0 ),計算在w?這個位置的error surface的切線斜率。
這一步的步伐的大小取決于兩件事情:

  • 第一件事情是這個地方的斜率有多大,這個地方的斜率大,這個步伐就跨大一點,斜率小步伐就跨小一點。
  • 另外一個東西會影響步伐大小,這個η叫做學習速率(learning rate),它是你自己設定的。如果η設大一點,那你每次參數(shù)update就會量大。

這種你在做機器學習需要自己設定的東西叫做hyperparameters。

為什么loss可以是負的呢?

Loss這個函數(shù)是自己定義的,決定一個loss function,就是絕對值再減100,那你可能就有負的,所以我這邊這一個curve并不是一個真實的loss,

那我們說我們要把w?往右移一步,那這個新的位置就叫做w1,然后再繼續(xù)反覆做同樣的操作,不斷的把w移動位置,最后你會停下來。

什么時候會停下來呢?往往有兩種狀況:

  • 第一種狀況開始的設定,最多計算幾次。
  • 那還有另外一種理想上的,微分的值正好是0的時候,如果這一項正好算出來是0,0乘上learning rate η還是0,

Gradient Descent 這個方法,有一個巨大的問題,在這個例子里面,從W0當作隨機初始的位置,很有可能走到WT這里,你的訓練就停住了,你就沒有辦法再移動w的位置。那右側紅點這一個位置,這個真的可以讓loss最小的地方,叫做全局最小值(global minima),而W^T這個地方叫做局部最小值(local minima)

那有兩個參數(shù)的情況下,怎么用Gradient Descent呢?

我們現(xiàn)在有兩個參數(shù),都給它隨機的初始的值,就是w?跟b?
你要計算w跟loss的微分和b對loss的微分,計算是在w等于w?的位置,b等于b?的位置,你要計算w對L的微分,計算b對L的微分,
計算完以后,就根據(jù)之前一個參數(shù)的時候的做法去更新w跟b,把w?減掉learning rate乘上微分的結果得到w1,把b?減掉learning rate乘上微分的結果得到b1

Linear Model

這三個步驟合起來叫做訓練。我們現(xiàn)在是在知道答案的資料上去計算loss。

但是我們真正要在意的是未來的觀看的次數(shù)是多少,所以接下來拿這個函式來真的預測一下未來的觀看次數(shù)。

能不能夠做得更好呢,在做得更好之前,我們先來分析一下結果:

  • 橫軸是代表的是時間,所以0(最左邊的點),代表的是2021年1月1號,最右邊點代表的是2021年2月14號
  • 縱軸就是觀看的人次,這邊是用千人當作單位;
  • 紅色的線是真實的觀看人次
  • 藍色的線是機器用這一個函式,預測出來的觀看人次

這藍色的線沒什么神奇的地方,因為我們覺得,可以拿前一天的觀看人次去預測隔天的觀看人次。但是仔細觀察這個圖,它是有周期性的,它每隔七天就會有兩天特別低,所以既然我們已經(jīng)知道每隔七天是一個循環(huán),那這一個model顯然很爛,因為它只能夠看前一天。

每隔七天它一個循環(huán),如果我們一個模型,它是參考前七天的資料,把七天前的資料,直接復制到拿來當作預測的結果,也許預測的會更準也說不定,所以我們就要修改一下我們的模型。通常一個模型的修改,往往來自于你對這個問題的理解,就是Domain Knowledge。

所以一開始,我們對問題完全不理解的時候,我們就胡亂寫一個 y=b+wx_1 ,效果并沒有特別好。接下來我們觀察了真實的數(shù)據(jù)以后,得到一個結論是,每隔七天有一個循環(huán),所以我們應該要把,前七天的觀看人次都列入考慮,所以寫了一個新的模型。

x?的下標j代表是幾天前,然后這個j等于1到7,那七天前的資料,乘上不同的weight,再加上bias,得到預測的結果。如果這個是我們的model,

那這邊每一個w跟b,我們都會用Gradient Descent,算出它的最佳值,它的最佳值長什么樣子呢,這邊show出來。

本來是考慮前七天,然后考慮28天會怎么樣呢,28天就一個月,考慮前一個月每一天的觀看人次,去預測隔天的觀看人次,預測出來結果怎樣呢,訓練資料上是0.33k,那在2021年的資料上,在沒有看過的資料上是0.46k,那接下來考慮56天會怎么樣呢?是0.32k,在沒看過的資料上還是0.46k,看起來,考慮更多天沒有辦法再更進步了,也許已經(jīng)到了一個極限。

這邊這些模型輸入x(feature),把feature乘上一個weight,再加上一個bias就得到預測的結果,這樣的模型有一個共同的名字,叫做Linear model,那我們接下來會看,怎么把Linear model做得更好。

Regression

1.擬合一條分段折線

Piecewise Linear Curves

對于下面這條紅線(piecewise linear curve),你永遠不能用Linear Model來很好的擬合它。所以我們需要一個更加有彈性的,有未知參數(shù)的Function。

如上圖,仔細觀察紅色的這一條曲線,它可以看作是一個常數(shù),再加上一群藍色的這樣子的 Function。事實上,

  • 任何piecewise linear curve(分段線性線段)都可以看作是一個常數(shù),再加上一堆藍色的Function。
  • 任何連續(xù)曲線,你只要取足夠多的轉折點,你都能用piecewise linear curve去逼近他
  • 為什么不用分段函數(shù)呢,因為在斷點處,分段函數(shù)不可以求導

如果你今天點取的夠多或取的位置適當?shù)脑?#xff0c;這個 Piecewise Linear 的 Curves,就可以逼近這一個連續(xù)的這一個曲線。

2.怎么表示這個藍色折線呢?

那么如何來表示這個藍色的折線呢(即Hard Sigmoid)?這里用了Sigmoid函數(shù),它可以逼近Hard Sigmoid。

Back to ML_Step 1 :function with unknown

用一條曲線來理解它,用一個Sigmoid 的 Function來逼近這個藍色的Function,Sigmoid Function表達式為:

輸入的 x1,我們先乘上一個 w,再加上一個b,再取一個負號,再取 Exponential,再加 1,這一串被放在分母的地方。當然,前面可以乘上一個 Constant 叫做 c。

如果輸入的這個 x1 的值,趨近于無窮大的時候,那 e^{-(b+wx_1)}這一項就會消失,那當 x1 非常大的時候,這一條這邊就會收斂在這個高度是 c 的地方。
那如果 x1 負的非常大的時候,分母的地方就會非常大,那 y 的值就會趨近于 0。

如上圖所示,我們再回到這個藍色的 Function,比較常見的名字就叫做Hard Sigmoid。我們要組出各種不同的曲線,就需要各式各樣合適的藍色的 Function,而這個合適的藍色的 Function 怎么制造出來呢?

如上圖所示,修改不同的參數(shù)會得到不同的效果:

如果你改 w ,會改變斜率(斜坡的坡度)
如果你改 b ,Sigmoid Function 可以左右移動
如果你改 c ,可以改變它的高度(曲線和y軸的交點)

因此,你只要有不同的 w 、b 和 c,你就可以制造出不同的Sigmoid Function,把不同的 Sigmoid Function 疊起來以后,你就可以去逼近各種不同的Piecewise Linear 的 Function,然后 Piecewise Linear 的 Function可以近似各種不同的 Continuous 的 Function。

我們知道說紅色這條線就是 0+1+2+3,它們都是藍色的 Function,函式有一個固定的樣子(b+wx_1),去做 Sigmoid 再乘上 c1。只是 1 跟 2 跟 3的 w 不一樣,它們的 b 不一樣,它們的c 不一樣。如果是第一個藍色 Function,它就是 w1、b1、c1,第二個藍色 Function是 w2、b2、 c2,第三個藍色 Function是 w3、b3、c3。加起來以后,我們得到的函式為 :

這個 Function里面的 b 跟 w 跟 c是未知的,都是我們未知的參數(shù)。

如上圖,我們不是只用一個 Feature X_1,我們可以用多個 Feature。

  • i來表示不同的sigmoid函數(shù)
  • j來表示Feature的編號。

x1 :前一天的觀看人數(shù),x2:兩天前觀看人數(shù),x3:三天前的觀看人數(shù)
每一個i 就代表了一個藍色的 Function,只是我們現(xiàn)在每一個藍色的 Function,都用一個 Sigmoid Function 來比近似它

我們現(xiàn)在為了簡化起見,把括號里面的數(shù)字,用一個比較簡單的符號r來表示。分別簡記為: r1, r2,r3。可以表示為

如上圖公式,把 x1 x2 x3 拼在一起變成一個向量,把這邊所有的 w 統(tǒng)統(tǒng)放在一起變成一個矩陣,把 b1 b2 b3 拼起來變成一個向量,把 r1 r2 r3 拼起來變成一個向量。

如上圖最后一行,最后簡寫成,向量 x 乘以矩陣W(9 個數(shù)值就是9 個 權重Weight),再加上 b 就得到 r 這個向量。那這邊做的事情跟上邊做的事情是一模一樣的,只是表示的方式不一樣。

上面描述的是括號里的運算,把 x 乘上 W 加上 b 等于 r。那接下來 r 要分別通過 Sigmoid Function得到a。以r1為例:

然后同樣的方法由 r2 去得到 a2,把 r3 透過 Sigmoid Function 得到 a3。

因此,上圖藍色的虛線框完成了x到a。首先通過虛線框中的括號運算從 x1 x2 x3 得到了 r1 r2 r3。接下來通過Sigmoid Function,然后得到 a1 a2 a3。

接下來我們這個Sigmoid 的輸出a,還要乘上 ci 然后還要再加上 b。用向量來表示的話,a1 a2 a3 拼起來叫這個向量 a,c1 c2 c3 拼起來叫一個向量 c( 這里c 作 Transpose),那 a 乘上 c 的 Transpose 再加上 b,就得到了 y。

如上面公式,總結一下,它整體而言做的事情是輸入Feature x 這個向量,x 乘上矩陣 w 加上向量 b 得到向量 r,向量 r 通過 Sigmoid Function得到向量 a,再把向量 a 跟乘上 c 的 Transpose 加上 b 就得到 y。

那我們把這些未知參數(shù)通通拉直,拼成一個很長的向量。用一個符號叫做 θ來表示它。θ是一個很長的向量,里面的第一個數(shù)值我們叫 θ1,第二個叫 θ2…,它統(tǒng)稱我們所有的未知的參數(shù)。

Back to ML_Step 2 :define loss from training data

那接下來進入第二步:從訓練數(shù)據(jù)定義loss函數(shù)。 Loss Function 變成 L( θ )。

  • 先給定某一組 W、b、c^T跟 b的初始值
  • 然后把一種 Feature x 帶進去,然后看看你估測出來的 y 是多少
  • 再計算一下跟真實的 Label 之間的差距,你得到一個 e
  • 把所有的誤差通通加起來,你就得到你的 Loss

Back to ML_Step 3: Optimization

接下來下一步就是優(yōu)化(Optimization),

現(xiàn)在的 θ 它是一個很長的向量,要找一組 θ讓我們的 Loss 越小越好,可以讓 Loss 最小的那一組 θ,我們叫做 θ Star,θ^*,具體步驟如下:

(1)我們一開始要隨機選一個初始的數(shù)值θ_0。
(2)接下來要計算微分,你要對每一個未知的參數(shù),去計算對 L 的微分以后,集合起來它就是一個向量
(3)算出這個 g 以后,接下來呢我們Update參數(shù)。

Batch

實際上在做 Gradient的時會這么做:會把這大 N 筆資料分成一個一個的 Batch(一包一包的東西,一組一組的),隨機分就好,所以每個 Batch 里面有大B 筆資料,所以本來全部有大 N 筆資料,現(xiàn)在大B筆資料一組,一組叫做 Batch。

根據(jù)這個 L1 來算 Gradient,用這個 Gradient 來更新參數(shù),接下來再選下一個 Batch 算出 L2,根據(jù) L2 算出Gradient,叫做一個 Epoch,每一次更新參數(shù)叫做一次 Update, Update 跟 Epoch 是不一樣的東西(每次更新一次參數(shù)叫做一次 Update,把所有的 Batch 都看過一遍,叫做一個 Epoch)。

全部batch叫做一個 Epoch,每一次更新參數(shù)叫做一次 Update, Update 跟 Epoch 是不一樣的東西(每次更新一次參數(shù)叫做一次 Update,把所有的 Batch 都看過一遍,叫做一個 Epoch)。

補充:所謂 HyperParameter 就是你自己決定的東西,人所設的東西不是機器自己找出來的,叫做 HyperParameter,我們今天已經(jīng)聽到了,幾個 Sigmoid 也是一個 HyperParameters,Batch Size 也是一個 HyperParameter。

模型變型

那我們其實還可以對模型做更多的變形.這個 Hard Sigmoid 不好嗎,為什么我們一定要把它換成 Soft 的Sigmoid?

你確實可以不一定要換成 Soft 的 Sigmoid,有其他的做法。舉例來說這個 Hard 的 Sigmoid,它可以看作是兩個 Rectified Linear Unit 的加總,所謂 Rectified Linear Unit (ReLU)它就是長這個樣。

如上圖,每條不同的 w 不同的 b 不同的 c,你就可以挪動它的位置,你就可以改變這條線的斜率,在機器學習里面,這條線我們叫做 Rectified Linear Unit,它的縮寫叫做ReLU。

把兩個 ReLU 疊起來就可以變成 Hard 的 Sigmoid。

那本來這邊只有 i 個Sigmoid,你要 2 個ReLU,才能夠合成一個 Hard Sigmoid ,所以這邊有 i 個 Sigmoid,那如果ReLU 要做到一樣的事情,那你可能需要 2 倍的 ReLU,所以我們把 Sigmoid 換成 ReLU。這邊就是把一個式子換了,因為要表示一個 Hard 的 Sigmoid,表示那個藍色的 Function 不是只有一種做法,你完全可以用其他的做法。那這個 Sigmoid或是 ReLU,他們在機器學習里面,我們就叫Activation Function。

總結

以上是生活随笔為你收集整理的李宏毅 || 机器学习笔记一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。