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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习中的规则化范数(L0, L1, L2, 核范数)

發(fā)布時(shí)間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习中的规则化范数(L0, L1, L2, 核范数) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天我們聊聊機(jī)器學(xué)習(xí)中出現(xiàn)的非常頻繁的問題:過擬合與規(guī)則化。我們先簡單的來理解下常用的L0、L1、L2和核范數(shù)規(guī)則化。最后聊下規(guī)則化項(xiàng)參數(shù)的選擇問題。這里因?yàn)槠容^龐大,為了不嚇到大家,我將這個(gè)五個(gè)部分分成兩篇博文。知識(shí)有限,以下都是我一些淺顯的看法,如果理解存在錯(cuò)誤,希望大家不吝指正。謝謝。

?

? ? ? ?監(jiān)督機(jī)器學(xué)習(xí)問題無非就是“minimizeyour error while regularizing your parameters”,也就是在規(guī)則化參數(shù)的同時(shí)最小化誤差。最小化誤差是為了讓我們的模型擬合我們的訓(xùn)練數(shù)據(jù),而規(guī)則化參數(shù)是防止我們的模型過分?jǐn)M合我們的訓(xùn)練數(shù)據(jù)。多么簡約的哲學(xué)啊!因?yàn)閰?shù)太多,會(huì)導(dǎo)致我們的模型復(fù)雜度上升,容易過擬合,也就是我們的訓(xùn)練誤差會(huì)很小。但訓(xùn)練誤差小并不是我們的最終目標(biāo),我們的目標(biāo)是希望模型的測試誤差小,也就是能準(zhǔn)確的預(yù)測新的樣本。所以,我們需要保證模型“簡單”的基礎(chǔ)上最小化訓(xùn)練誤差,這樣得到的參數(shù)才具有好的泛化性能(也就是測試誤差也小),而模型“簡單”就是通過規(guī)則函數(shù)來實(shí)現(xiàn)的。另外,規(guī)則項(xiàng)的使用還可以約束我們的模型的特性。這樣就可以將人對這個(gè)模型的先驗(yàn)知識(shí)融入到模型的學(xué)習(xí)當(dāng)中,強(qiáng)行地讓學(xué)習(xí)到的模型具有人想要的特性,例如稀疏、低秩、平滑等等。要知道,有時(shí)候人的先驗(yàn)是非常重要的。前人的經(jīng)驗(yàn)會(huì)讓你少走很多彎路,這就是為什么我們平時(shí)學(xué)習(xí)最好找個(gè)大牛帶帶的原因。一句點(diǎn)撥可以為我們撥開眼前烏云,還我們一片晴空萬里,醍醐灌頂。對機(jī)器學(xué)習(xí)也是一樣,如果被我們?nèi)松晕Ⅻc(diǎn)撥一下,它肯定能更快的學(xué)習(xí)相應(yīng)的任務(wù)。只是由于人和機(jī)器的交流目前還沒有那么直接的方法,目前這個(gè)媒介只能由規(guī)則項(xiàng)來擔(dān)當(dāng)了。

? ? ? ?還有幾種角度來看待規(guī)則化的。規(guī)則化符合奧卡姆剃刀(Occam's razor)原理。這名字好霸氣,razor!不過它的思想很平易近人:在所有可能選擇的模型中,我們應(yīng)該選擇能夠很好地解釋已知數(shù)據(jù)并且十分簡單的模型。從貝葉斯估計(jì)的角度來看,規(guī)則化項(xiàng)對應(yīng)于模型的先驗(yàn)概率。民間還有個(gè)說法就是,規(guī)則化是結(jié)構(gòu)風(fēng)險(xiǎn)最小化策略的實(shí)現(xiàn),是在經(jīng)驗(yàn)風(fēng)險(xiǎn)上加一個(gè)正則化項(xiàng)(regularizer)或懲罰項(xiàng)(penalty term)。

? ? ? ?一般來說,監(jiān)督學(xué)習(xí)可以看做最小化下面的目標(biāo)函數(shù):

? ? ? ?其中,第一項(xiàng)L(yi,f(xi;w)) 衡量我們的模型(分類或者回歸)對第i個(gè)樣本的預(yù)測值f(xi;w)和真實(shí)的標(biāo)簽yi之前的誤差。因?yàn)槲覀兊哪P褪且獢M合我們的訓(xùn)練樣本的嘛,所以我們要求這一項(xiàng)最小,也就是要求我們的模型盡量的擬合我們的訓(xùn)練數(shù)據(jù)。但正如上面說言,我們不僅要保證訓(xùn)練誤差最小,我們更希望我們的模型測試誤差小,所以我們需要加上第二項(xiàng),也就是對參數(shù)w的規(guī)則化函數(shù)Ω(w)去約束我們的模型盡量的簡單。

?

OK,到這里,如果你在機(jī)器學(xué)習(xí)浴血奮戰(zhàn)多年,你會(huì)發(fā)現(xiàn),哎喲喲,機(jī)器學(xué)習(xí)的大部分帶參模型都和這個(gè)不但形似,而且神似。是的,其實(shí)大部分無非就是變換這兩項(xiàng)而已。對于第一項(xiàng)Loss函數(shù),如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression了;還有等等。不同的loss函數(shù),具有不同的擬合特性,這個(gè)也得就具體問題具體分析的。但這里,我們先不究loss函數(shù)的問題,我們把目光轉(zhuǎn)向“規(guī)則項(xiàng)Ω(w)”。

? ? ? ?規(guī)則化函數(shù)Ω(w)也有很多種選擇,一般是模型復(fù)雜度的單調(diào)遞增函數(shù),模型越復(fù)雜,規(guī)則化值就越大。比如,規(guī)則化項(xiàng)可以是模型參數(shù)向量的范數(shù)。然而,不同的選擇對參數(shù)w的約束不同,取得的效果也不同,但我們在論文中常見的都聚集在:零范數(shù)、一范數(shù)、二范數(shù)、跡范數(shù)、Frobenius范數(shù)和核范數(shù)等等。這么多范數(shù),到底它們表達(dá)啥意思?具有啥能力?什么時(shí)候才能用?什么時(shí)候需要用呢?不急不急,下面我們挑幾個(gè)常見的娓娓道來。

?

一、L0范數(shù)與L1范數(shù)

? ? ? ?L0范數(shù)是指向量中非0的元素的個(gè)數(shù)。如果我們用L0范數(shù)來規(guī)則化一個(gè)參數(shù)矩陣W的話,就是希望W的大部分元素都是0。這太直觀了,太露骨了吧,換句話說,讓參數(shù)W是稀疏的。OK,看到了“稀疏”二字,大家都應(yīng)該從當(dāng)下風(fēng)風(fēng)火火的“壓縮感知”和“稀疏編碼”中醒悟過來,原來用的漫山遍野的“稀疏”就是通過這玩意來實(shí)現(xiàn)的。但你又開始懷疑了,是這樣嗎?看到的papers世界中,稀疏不是都通過L1范數(shù)來實(shí)現(xiàn)嗎?腦海里是不是到處都是||W||1影子呀!幾乎是抬頭不見低頭見。沒錯(cuò),這就是這節(jié)的題目把L0和L1放在一起的原因,因?yàn)樗麄冇兄撤N不尋常的關(guān)系。那我們再來看看L1范數(shù)是什么?它為什么可以實(shí)現(xiàn)稀疏?為什么大家都用L1范數(shù)去實(shí)現(xiàn)稀疏,而不是L0范數(shù)呢?

? ? ? ?L1范數(shù)是指向量中各個(gè)元素絕對值之和,也有個(gè)美稱叫“稀疏規(guī)則算子”(Lasso regularization)。現(xiàn)在我們來分析下這個(gè)價(jià)值一個(gè)億的問題:為什么L1范數(shù)會(huì)使權(quán)值稀疏?有人可能會(huì)這樣給你回答“它是L0范數(shù)的最優(yōu)凸近似”。實(shí)際上,還存在一個(gè)更美的回答:任何的規(guī)則化算子,如果他在Wi=0的地方不可微,并且可以分解為一個(gè)“求和”的形式,那么這個(gè)規(guī)則化算子就可以實(shí)現(xiàn)稀疏。這說是這么說,W的L1范數(shù)是絕對值,|w|在w=0處是不可微,但這還是不夠直觀。這里因?yàn)槲覀冃枰蚅2范數(shù)進(jìn)行對比分析。所以關(guān)于L1范數(shù)的直觀理解,請待會(huì)看看第二節(jié)。

? ? ? ?對了,上面還有一個(gè)問題:既然L0可以實(shí)現(xiàn)稀疏,為什么不用L0,而要用L1呢?個(gè)人理解一是因?yàn)長0范數(shù)很難優(yōu)化求解(NP難問題),二是L1范數(shù)是L0范數(shù)的最優(yōu)凸近似,而且它比L0范數(shù)要容易優(yōu)化求解。所以大家才把目光和萬千寵愛轉(zhuǎn)于L1范數(shù)。

? ? ? ?OK,來個(gè)一句話總結(jié):L1范數(shù)和L0范數(shù)可以實(shí)現(xiàn)稀疏,L1因具有比L0更好的優(yōu)化求解特性而被廣泛應(yīng)用。

? ? ? ?好,到這里,我們大概知道了L1可以實(shí)現(xiàn)稀疏,但我們會(huì)想呀,為什么要稀疏?讓我們的參數(shù)稀疏有什么好處呢?這里扯兩點(diǎn):

1)特征選擇(Feature Selection):

? ? ? ?大家對稀疏規(guī)則化趨之若鶩的一個(gè)關(guān)鍵原因在于它能實(shí)現(xiàn)特征的自動(dòng)選擇。一般來說,xi的大部分元素(也就是特征)都是和最終的輸出yi沒有關(guān)系或者不提供任何信息的,在最小化目標(biāo)函數(shù)的時(shí)候考慮xi這些額外的特征,雖然可以獲得更小的訓(xùn)練誤差,但在預(yù)測新的樣本時(shí),這些沒用的信息反而會(huì)被考慮,從而干擾了對正確yi的預(yù)測。稀疏規(guī)則化算子的引入就是為了完成特征自動(dòng)選擇的光榮使命,它會(huì)學(xué)習(xí)地去掉這些沒有信息的特征,也就是把這些特征對應(yīng)的權(quán)重置為0。

2)可解釋性(Interpretability):

? ? ? ?另一個(gè)青睞于稀疏的理由是,模型更容易解釋。例如患某種病的概率是y,然后我們收集到的數(shù)據(jù)x是1000維的,也就是我們需要尋找這1000種因素到底是怎么影響患上這種病的概率的。假設(shè)我們這個(gè)是個(gè)回歸模型:y=w1*x1+w2*x2+…+w1000*x1000+b(當(dāng)然了,為了讓y限定在[0,1]的范圍,一般還得加個(gè)Logistic函數(shù))。通過學(xué)習(xí),如果最后學(xué)習(xí)到的w*就只有很少的非零元素,例如只有5個(gè)非零的wi,那么我們就有理由相信,這些對應(yīng)的特征在患病分析上面提供的信息是巨大的,決策性的。也就是說,患不患這種病只和這5個(gè)因素有關(guān),那醫(yī)生就好分析多了。但如果1000個(gè)wi都非0,醫(yī)生面對這1000種因素,累覺不愛。

?

二、L2范數(shù)

? ? ? ?除了L1范數(shù),還有一種更受寵幸的規(guī)則化范數(shù)是L2范數(shù): ||W||2。它也不遜于L1范數(shù),它有兩個(gè)美稱,在回歸里面,有人把有它的回歸叫“嶺回歸”(Ridge Regression),有人也叫它“權(quán)值衰減weight decay”。這用的很多吧,因?yàn)樗膹?qiáng)大功效是改善機(jī)器學(xué)習(xí)里面一個(gè)非常重要的問題:過擬合。至于過擬合是什么,上面也解釋了,就是模型訓(xùn)練時(shí)候的誤差很小,但在測試的時(shí)候誤差很大,也就是我們的模型復(fù)雜到可以擬合到我們的所有訓(xùn)練樣本了,但在實(shí)際預(yù)測新的樣本的時(shí)候,糟糕的一塌糊涂。通俗的講就是應(yīng)試能力很強(qiáng),實(shí)際應(yīng)用能力很差。擅長背誦知識(shí),卻不懂得靈活利用知識(shí)。例如下圖所示(來自Ng的course):

? ? ? ?上面的圖是線性回歸,下面的圖是Logistic回歸,也可以說是分類的情況。從左到右分別是欠擬合(underfitting,也稱High-bias)、合適的擬合和過擬合(overfitting,也稱High variance)三種情況。可以看到,如果模型復(fù)雜(可以擬合任意的復(fù)雜函數(shù)),它可以讓我們的模型擬合所有的數(shù)據(jù)點(diǎn),也就是基本上沒有誤差。對于回歸來說,就是我們的函數(shù)曲線通過了所有的數(shù)據(jù)點(diǎn),如上圖右。對分類來說,就是我們的函數(shù)曲線要把所有的數(shù)據(jù)點(diǎn)都分類正確,如下圖右。這兩種情況很明顯過擬合了。

? ? ? ?OK,那現(xiàn)在到我們非常關(guān)鍵的問題了,為什么L2范數(shù)可以防止過擬合?回答這個(gè)問題之前,我們得先看看L2范數(shù)是個(gè)什么東西。

? ? ? ?L2范數(shù)是指向量各元素的平方和然后求平方根。我們讓L2范數(shù)的規(guī)則項(xiàng)||W||2最小,可以使得W的每個(gè)元素都很小,都接近于0,但與L1范數(shù)不同,它不會(huì)讓它等于0,而是接近于0,這里是有很大的區(qū)別的哦。而越小的參數(shù)說明模型越簡單,越簡單的模型則越不容易產(chǎn)生過擬合現(xiàn)象。為什么越小的參數(shù)說明模型越簡單?我也不懂,我的理解是:限制了參數(shù)很小,實(shí)際上就限制了多項(xiàng)式某些分量的影響很小(看上面線性回歸的模型的那個(gè)擬合的圖),這樣就相當(dāng)于減少參數(shù)個(gè)數(shù)。其實(shí)我也不太懂,希望大家可以指點(diǎn)下。

? ? ? ?這里也一句話總結(jié)下:通過L2范數(shù),我們可以實(shí)現(xiàn)了對模型空間的限制,從而在一定程度上避免了過擬合。

? ? ? ?L2范數(shù)的好處是什么呢?這里也扯上兩點(diǎn):

1)學(xué)習(xí)理論的角度:

? ? ? ?從學(xué)習(xí)理論的角度來說,L2范數(shù)可以防止過擬合,提升模型的泛化能力。

2)優(yōu)化計(jì)算的角度:

? ? ? ?從優(yōu)化或者數(shù)值計(jì)算的角度來說,L2范數(shù)有助于處理 condition number不好的情況下矩陣求逆很困難的問題。哎,等等,這condition number是啥?我先google一下哈。

? ? ? ?這里我們也故作高雅的來聊聊優(yōu)化問題。優(yōu)化有兩大難題,一是:局部最小值,二是:ill-condition病態(tài)問題。前者俺就不說了,大家都懂吧,我們要找的是全局最小值,如果局部最小值太多,那我們的優(yōu)化算法就很容易陷入局部最小而不能自拔,這很明顯不是觀眾愿意看到的劇情。那下面我們來聊聊ill-condition。ill-condition對應(yīng)的是well-condition。那他們分別代表什么?假設(shè)我們有個(gè)方程組AX=b,我們需要求解X。如果A或者b稍微的改變,會(huì)使得X的解發(fā)生很大的改變,那么這個(gè)方程組系統(tǒng)就是ill-condition的,反之就是well-condition的。我們具體舉個(gè)例子吧:

? ? ? ?咱們先看左邊的那個(gè)。第一行假設(shè)是我們的AX=b,第二行我們稍微改變下b,得到的x和沒改變前的差別很大,看到吧。第三行我們稍微改變下系數(shù)矩陣A,可以看到結(jié)果的變化也很大。換句話來說,這個(gè)系統(tǒng)的解對系數(shù)矩陣A或者b太敏感了。又因?yàn)橐话阄覀兊南禂?shù)矩陣A和b是從實(shí)驗(yàn)數(shù)據(jù)里面估計(jì)得到的,所以它是存在誤差的,如果我們的系統(tǒng)對這個(gè)誤差是可以容忍的就還好,但系統(tǒng)對這個(gè)誤差太敏感了,以至于我們的解的誤差更大,那這個(gè)解就太不靠譜了。所以這個(gè)方程組系統(tǒng)就是ill-conditioned病態(tài)的,不正常的,不穩(wěn)定的,有問題的,哈哈。這清楚了吧。右邊那個(gè)就叫well-condition的系統(tǒng)了。

? ? ? ?還是再啰嗦一下吧,對于一個(gè)ill-condition的系統(tǒng),我的輸入稍微改變下,輸出就發(fā)生很大的改變,這不好啊,這表明我們的系統(tǒng)不能實(shí)用啊。你想想看,例如對于一個(gè)回歸問題y=f(x),我們是用訓(xùn)練樣本x去訓(xùn)練模型f,使得y盡量輸出我們期待的值,例如0。那假如我們遇到一個(gè)樣本x’,這個(gè)樣本和訓(xùn)練樣本x差別很小,面對他,系統(tǒng)本應(yīng)該輸出和上面的y差不多的值的,例如0.00001,最后卻給我輸出了一個(gè)0.9999,這很明顯不對呀。就好像,你很熟悉的一個(gè)人臉上長了個(gè)青春痘,你就不認(rèn)識(shí)他了,那你大腦就太差勁了,哈哈。所以如果一個(gè)系統(tǒng)是ill-conditioned病態(tài)的,我們就會(huì)對它的結(jié)果產(chǎn)生懷疑。那到底要相信它多少呢?我們得找個(gè)標(biāo)準(zhǔn)來衡量吧,因?yàn)橛行┫到y(tǒng)的病沒那么重,它的結(jié)果還是可以相信的,不能一刀切吧。終于回來了,上面的condition number就是拿來衡量ill-condition系統(tǒng)的可信度的。condition number衡量的是輸入發(fā)生微小變化的時(shí)候,輸出會(huì)發(fā)生多大的變化。也就是系統(tǒng)對微小變化的敏感度。condition number值小的就是well-conditioned的,大的就是ill-conditioned的。

? ? ? ?如果方陣A是非奇異的,那么A的conditionnumber定義為:

? ? ? ?也就是矩陣A的norm乘以它的逆的norm。所以具體的值是多少,就要看你選擇的norm是什么了。如果方陣A是奇異的,那么A的condition number就是正無窮大了。實(shí)際上,每一個(gè)可逆方陣都存在一個(gè)condition number。但如果要計(jì)算它,我們需要先知道這個(gè)方陣的norm(范數(shù))和Machine Epsilon(機(jī)器的精度)。為什么要范數(shù)?范數(shù)就相當(dāng)于衡量一個(gè)矩陣的大小,我們知道矩陣是沒有大小的,當(dāng)上面不是要衡量一個(gè)矩陣A或者向量b變化的時(shí)候,我們的解x變化的大小嗎?所以肯定得要有一個(gè)東西來度量矩陣和向量的大小吧?對了,他就是范數(shù),表示矩陣大小或者向量長度。OK,經(jīng)過比較簡單的證明,對于AX=b,我們可以得到以下的結(jié)論:

? ? ? ?也就是我們的解x的相對變化和A或者b的相對變化是有像上面那樣的關(guān)系的,其中k(A)的值就相當(dāng)于倍率,看到了嗎?相當(dāng)于x變化的界。

? ? ? ?對condition number來個(gè)一句話總結(jié):conditionnumber是一個(gè)矩陣(或者它所描述的線性系統(tǒng))的穩(wěn)定性或者敏感度的度量,如果一個(gè)矩陣的condition number在1附近,那么它就是well-conditioned的,如果遠(yuǎn)大于1,那么它就是ill-conditioned的,如果一個(gè)系統(tǒng)是ill-conditioned的,它的輸出結(jié)果就不要太相信了。

? ? ? ?好了,對這么一個(gè)東西,已經(jīng)說了好多了。對了,我們?yōu)槭裁戳牡竭@個(gè)的了?回到第一句話:從優(yōu)化或者數(shù)值計(jì)算的角度來說,L2范數(shù)有助于處理 condition number不好的情況下矩陣求逆很困難的問題。因?yàn)槟繕?biāo)函數(shù)如果是二次的,對于線性回歸來說,那實(shí)際上是有解析解的,求導(dǎo)并令導(dǎo)數(shù)等于零即可得到最優(yōu)解為:

? ? ? ?然而,如果當(dāng)我們的樣本X的數(shù)目比每個(gè)樣本的維度還要小的時(shí)候,矩陣XTX將會(huì)不是滿秩的,也就是XTX會(huì)變得不可逆,所以w*就沒辦法直接計(jì)算出來了。或者更確切地說,將會(huì)有無窮多個(gè)解(因?yàn)槲覀兎匠探M的個(gè)數(shù)小于未知數(shù)的個(gè)數(shù))。也就是說,我們的數(shù)據(jù)不足以確定一個(gè)解,如果我們從所有可行解里隨機(jī)選一個(gè)的話,很可能并不是真正好的解,總而言之,我們過擬合了。

? ? ? ?但如果加上L2規(guī)則項(xiàng),就變成了下面這種情況,就可以直接求逆了:

? ? ? ?這里面,專業(yè)點(diǎn)的描述是:要得到這個(gè)解,我們通常并不直接求矩陣的逆,而是通過解線性方程組的方式(例如高斯消元法)來計(jì)算。考慮沒有規(guī)則項(xiàng)的時(shí)候,也就是λ=0的情況,如果矩陣XTX的 condition number 很大的話,解線性方程組就會(huì)在數(shù)值上相當(dāng)不穩(wěn)定,而這個(gè)規(guī)則項(xiàng)的引入則可以改善condition number。

? ? ? ?另外,如果使用迭代優(yōu)化的算法,condition number 太大仍然會(huì)導(dǎo)致問題:它會(huì)拖慢迭代的收斂速度,而規(guī)則項(xiàng)從優(yōu)化的角度來看,實(shí)際上是將目標(biāo)函數(shù)變成λ-strongly convex(λ強(qiáng)凸)的了。哎喲喲,這里又出現(xiàn)個(gè)λ強(qiáng)凸,啥叫λ強(qiáng)凸呢?

? ? ? ?當(dāng)f滿足:

? ? ? ?時(shí),我們稱f為λ-stronglyconvex函數(shù),其中參數(shù)λ>0。當(dāng)λ=0時(shí)退回到普通convex 函數(shù)的定義。

? ? ? ?在直觀的說明強(qiáng)凸之前,我們先看看普通的凸是怎樣的。假設(shè)我們讓f在x的地方做一階泰勒近似(一階泰勒展開忘了嗎?f(x)=f(a)+f'(a)(x-a)+o(||x-a||).):

? ? ? ?直觀來講,convex 性質(zhì)是指函數(shù)曲線位于該點(diǎn)處的切線,也就是線性近似之上,而 strongly convex 則進(jìn)一步要求位于該處的一個(gè)二次函數(shù)上方,也就是說要求函數(shù)不要太“平坦”而是可以保證有一定的“向上彎曲”的趨勢。專業(yè)點(diǎn)說,就是convex 可以保證函數(shù)在任意一點(diǎn)都處于它的一階泰勒函數(shù)之上,而strongly convex可以保證函數(shù)在任意一點(diǎn)都存在一個(gè)非常漂亮的二次下界quadratic lower bound。當(dāng)然這是一個(gè)很強(qiáng)的假設(shè),但是同時(shí)也是非常重要的假設(shè)。可能還不好理解,那我們畫個(gè)圖來形象的理解下。

? ? ? ?大家一看到上面這個(gè)圖就全明白了吧。不用我啰嗦了吧。還是啰嗦一下吧。我們?nèi)∥覀兊淖顑?yōu)解w*的地方。如果我們的函數(shù)f(w),見左圖,也就是紅色那個(gè)函數(shù),都會(huì)位于藍(lán)色虛線的那根二次函數(shù)之上,這樣就算wt和w*離的比較近的時(shí)候,f(wt)和f(w*)的值差別還是挺大的,也就是會(huì)保證在我們的最優(yōu)解w*附近的時(shí)候,還存在較大的梯度值,這樣我們才可以在比較少的迭代次數(shù)內(nèi)達(dá)到w*。但對于右圖,紅色的函數(shù)f(w)只約束在一個(gè)線性的藍(lán)色虛線之上,假設(shè)是如右圖的很不幸的情況(非常平坦),那在wt還離我們的最優(yōu)點(diǎn)w*很遠(yuǎn)的時(shí)候,我們的近似梯度(f(wt)-f(w*))/(wt-w*)就已經(jīng)非常小了,在wt處的近似梯度?f/?w就更小了,這樣通過梯度下降wt+1=wt-α*(?f/?w),我們得到的結(jié)果就是w的變化非常緩慢,像蝸牛一樣,非常緩慢的向我們的最優(yōu)點(diǎn)w*爬動(dòng),那在有限的迭代時(shí)間內(nèi),它離我們的最優(yōu)點(diǎn)還是很遠(yuǎn)。

? ? ? ?所以僅僅靠convex 性質(zhì)并不能保證在梯度下降和有限的迭代次數(shù)的情況下得到的點(diǎn)w會(huì)是一個(gè)比較好的全局最小點(diǎn)w*的近似點(diǎn)(插個(gè)話,有地方說,實(shí)際上讓迭代在接近最優(yōu)的地方停止,也是一種規(guī)則化或者提高泛化性能的方法)。正如上面分析的那樣,如果f(w)在全局最小點(diǎn)w*周圍是非常平坦的情況的話,我們有可能會(huì)找到一個(gè)很遠(yuǎn)的點(diǎn)。但如果我們有“強(qiáng)凸”的話,就能對情況做一些控制,我們就可以得到一個(gè)更好的近似解。至于有多好嘛,這里面有一個(gè)bound,這個(gè) bound 的好壞也要取決于strongly convex性質(zhì)中的常數(shù)α的大小。看到這里,不知道大家學(xué)聰明了沒有。如果要獲得strongly convex怎么做?最簡單的就是往里面加入一項(xiàng)(α/2)*||w||2

? ? ? ?呃,講個(gè)strongly convex花了那么多的篇幅。實(shí)際上,在梯度下降中,目標(biāo)函數(shù)收斂速率的上界實(shí)際上是和矩陣XTX的 condition number有關(guān),XTX的 condition number 越小,上界就越小,也就是收斂速度會(huì)越快。

這一個(gè)優(yōu)化說了那么多的東西。還是來個(gè)一句話總結(jié)吧:L2范數(shù)不但可以防止過擬合,還可以讓我們的優(yōu)化求解變得穩(wěn)定和快速。

? ? ? ?好了,這里兌現(xiàn)上面的承諾,來直觀的聊聊L1和L2的差別,為什么一個(gè)讓絕對值最小,一個(gè)讓平方最小,會(huì)有那么大的差別呢?我看到的有兩種幾何上直觀的解析:

1)下降速度:

? ? ? ?我們知道,L1和L2都是規(guī)則化的方式,我們將權(quán)值參數(shù)以L1或者L2的方式放到代價(jià)函數(shù)里面去。然后模型就會(huì)嘗試去最小化這些權(quán)值參數(shù)。而這個(gè)最小化就像一個(gè)下坡的過程,L1和L2的差別就在于這個(gè)“坡”不同,如下圖:L1就是按絕對值函數(shù)的“坡”下降的,而L2是按二次函數(shù)的“坡”下降。所以實(shí)際上在0附近,L1的下降速度比L2的下降速度要快。所以會(huì)非常快得降到0。不過我覺得這里解釋的不太中肯,當(dāng)然了也不知道是不是自己理解的問題。

? ? ? ?L1在江湖上人稱Lasso,L2人稱Ridge。不過這兩個(gè)名字還挺讓人迷糊的,看上面的圖片,Lasso的圖看起來就像ridge,而ridge的圖看起來就像lasso。

2)模型空間的限制:

? ? ? ?實(shí)際上,對于L1和L2規(guī)則化的代價(jià)函數(shù)來說,我們可以寫成以下形式:

? ? ? ?也就是說,我們將模型空間限制在w的一個(gè)L1-ball 中。為了便于可視化,我們考慮兩維的情況,在(w1, w2)平面上可以畫出目標(biāo)函數(shù)的等高線,而約束條件則成為平面上半徑為C的一個(gè) norm ball 。等高線與 norm ball 首次相交的地方就是最優(yōu)解:

? ? ? ?可以看到,L1-ball 與L2-ball 的不同就在于L1在和每個(gè)坐標(biāo)軸相交的地方都有“角”出現(xiàn),而目標(biāo)函數(shù)的測地線除非位置擺得非常好,大部分時(shí)候都會(huì)在角的地方相交。注意到在角的位置就會(huì)產(chǎn)生稀疏性,例如圖中的相交點(diǎn)就有w1=0,而更高維的時(shí)候(想象一下三維的L1-ball 是什么樣的?)除了角點(diǎn)以外,還有很多邊的輪廓也是既有很大的概率成為第一次相交的地方,又會(huì)產(chǎn)生稀疏性。

? ? ? ?相比之下,L2-ball 就沒有這樣的性質(zhì),因?yàn)闆]有角,所以第一次相交的地方出現(xiàn)在具有稀疏性的位置的概率就變得非常小了。這就從直觀上來解釋了為什么L1-regularization 能產(chǎn)生稀疏性,而L2-regularization 不行的原因了。

? ? ? ?因此,一句話總結(jié)就是:L1會(huì)趨向于產(chǎn)生少量的特征,而其他的特征都是0,而L2會(huì)選擇更多的特征,這些特征都會(huì)接近于0。Lasso在特征選擇時(shí)候非常有用,而Ridge就只是一種規(guī)則化而已。

?

? ? ? ?

三、核范數(shù)

? ? ? ?核范數(shù)||W||*是指矩陣奇異值的和,英文稱呼叫Nuclear Norm。這個(gè)相對于上面火熱的L1和L2來說,可能大家就會(huì)陌生點(diǎn)。那它是干嘛用的呢?霸氣登場:約束Low-Rank(低秩)。OK,OK,那我們得知道Low-Rank是啥?用來干啥的?

? ? ? ?我們先來回憶下線性代數(shù)里面“秩”到底是啥?舉個(gè)簡單的例子吧:

? ? ? ?對上面的線性方程組,第一個(gè)方程和第二個(gè)方程有不同的解,而第2個(gè)方程和第3個(gè)方程的解完全相同。從這個(gè)意義上說,第3個(gè)方程是“多余”的,因?yàn)樗鼪]有帶來任何的信息量,把它去掉,所得的方程組與原來的方程組同解。為了從方程組中去掉多余的方程,自然就導(dǎo)出了“矩陣的秩”這一概念。

? ? ? ?還記得我們怎么手工求矩陣的秩嗎?為了求矩陣A的秩,我們是通過矩陣初等變換把A化為階梯型矩陣,若該階梯型矩陣有r個(gè)非零行,那A的秩rank(A)就等于r。從物理意義上講,矩陣的秩度量的就是矩陣的行列之間的相關(guān)性。如果矩陣的各行或列是線性無關(guān)的,矩陣就是滿秩的,也就是秩等于行數(shù)。回到上面線性方程組來說吧,因?yàn)榫€性方程組可以用矩陣描述嘛。秩就表示了有多少個(gè)有用的方程了。上面的方程組有3個(gè)方程,實(shí)際上只有2個(gè)是有用的,一個(gè)是多余的,所以對應(yīng)的矩陣的秩就是2了。

? ? ? ?OK。既然秩可以度量相關(guān)性,而矩陣的相關(guān)性實(shí)際上有帶有了矩陣的結(jié)構(gòu)信息。如果矩陣之間各行的相關(guān)性很強(qiáng),那么就表示這個(gè)矩陣實(shí)際可以投影到更低維的線性子空間,也就是用幾個(gè)向量就可以完全表達(dá)了,它就是低秩的。所以我們總結(jié)的一點(diǎn)就是:如果矩陣表達(dá)的是結(jié)構(gòu)性信息,例如圖像、用戶-推薦表等等,那么這個(gè)矩陣各行之間存在這一定的相關(guān)性,那這個(gè)矩陣一般就是低秩的。

? ? ? ?如果X是一個(gè)m行n列的數(shù)值矩陣,rank(X)是X的秩,假如rank (X)遠(yuǎn)小于m和n,則我們稱X是低秩矩陣。低秩矩陣每行或每列都可以用其他的行或列線性表出,可見它包含大量的冗余信息。利用這種冗余信息,可以對缺失數(shù)據(jù)進(jìn)行恢復(fù),也可以對數(shù)據(jù)進(jìn)行特征提取。

? ? ? ?好了,低秩有了,那約束低秩只是約束rank(w)呀,和我們這節(jié)的核范數(shù)有什么關(guān)系呢?他們的關(guān)系和L0與L1的關(guān)系一樣。因?yàn)閞ank()是非凸的,在優(yōu)化問題里面很難求解,那么就需要尋找它的凸近似來近似它了。對,你沒猜錯(cuò),rank(w)的凸近似就是核范數(shù)||W||*

? ? ? ?好了,到這里,我也沒什么好說的了,因?yàn)槲乙彩巧晕⒎戳讼逻@個(gè)東西,所以也還沒有深入去看它。但我發(fā)現(xiàn)了這玩意還有很多很有意思的應(yīng)用,下面我們舉幾個(gè)典型的吧。

1)矩陣填充(Matrix Completion):

? ? ? ?我們首先說說矩陣填充用在哪。一個(gè)主流的應(yīng)用是在推薦系統(tǒng)里面。我們知道,推薦系統(tǒng)有一種方法是通過分析用戶的歷史記錄來給用戶推薦的。例如我們在看一部電影的時(shí)候,如果喜歡看,就會(huì)給它打個(gè)分,例如3顆星。然后系統(tǒng),例如Netflix等知名網(wǎng)站就會(huì)分析這些數(shù)據(jù),看看到底每部影片的題材到底是怎樣的?針對每個(gè)人,喜歡怎樣的電影,然后會(huì)給對應(yīng)的用戶推薦相似題材的電影。但有一個(gè)問題是:我們的網(wǎng)站上面有非常多的用戶,也有非常多的影片,不是所有的用戶都看過說有的電影,不是所有看過某電影的用戶都會(huì)給它評(píng)分。假設(shè)我們用一個(gè)“用戶-影片”的矩陣來描述這些記錄,例如下圖,可以看到,會(huì)有很多空白的地方。如果這些空白的地方存在,我們是很難對這個(gè)矩陣進(jìn)行分析的,所以在分析之前,一般需要先對其進(jìn)行補(bǔ)全。也叫矩陣填充。

? ? ? ?那到底怎么填呢?如何才能無中生有呢?每個(gè)空白的地方的信息是否蘊(yùn)含在其他已有的信息之上了呢?如果有,怎么提取出來呢?Yeah,這就是低秩生效的地方了。這叫低秩矩陣重構(gòu)問題,它可以用如下的模型表述:已知數(shù)據(jù)是一個(gè)給定的m*n矩陣A,如果其中一些元素因?yàn)槟撤N原因丟失了,我們能否根據(jù)其他行和列的元素,將這些元素恢復(fù)?當(dāng)然,如果沒有其他的參考條件,想要確定這些數(shù)據(jù)很困難。但如果我們已知A的秩rank(A)<<m且rank(A)<<n,那么我們可以通過矩陣各行(列)之間的線性相關(guān)將丟失的元素求出。你會(huì)問,這種假定我們要恢復(fù)的矩陣是低秩的,合理嗎?實(shí)際上是十分合理的,比如一個(gè)用戶對某電影評(píng)分是其他用戶對這部電影評(píng)分的線性組合。所以,通過低秩重構(gòu)就可以預(yù)測用戶對其未評(píng)價(jià)過的視頻的喜好程度。從而對矩陣進(jìn)行填充。

2)魯棒PCA:

? ? ? ?主成分分析,這種方法可以有效的找出數(shù)據(jù)中最“主要"的元素和結(jié)構(gòu),去除噪音和冗余,將原有的復(fù)雜數(shù)據(jù)降維,揭示隱藏在復(fù)雜數(shù)據(jù)背后的簡單結(jié)構(gòu)。我們知道,最簡單的主成分分析方法就是PCA了。從線性代數(shù)的角度看,PCA的目標(biāo)就是使用另一組基去重新描述得到的數(shù)據(jù)空間。希望在這組新的基下,能盡量揭示原有的數(shù)據(jù)間的關(guān)系。這個(gè)維度即最重要的“主元"。PCA的目標(biāo)就是找到這樣的“主元”,最大程度的去除冗余和噪音的干擾。

? ? ? ?魯棒主成分分析(Robust PCA)考慮的是這樣一個(gè)問題:一般我們的數(shù)據(jù)矩陣X會(huì)包含結(jié)構(gòu)信息,也包含噪聲。那么我們可以將這個(gè)矩陣分解為兩個(gè)矩陣相加,一個(gè)是低秩的(由于內(nèi)部有一定的結(jié)構(gòu)信息,造成各行或列間是線性相關(guān)的),另一個(gè)是稀疏的(由于含有噪聲,而噪聲是稀疏的),則魯棒主成分分析可以寫成以下的優(yōu)化問題:

? ? ? ?與經(jīng)典PCA問題一樣,魯棒PCA本質(zhì)上也是尋找數(shù)據(jù)在低維空間上的最佳投影問題。對于低秩數(shù)據(jù)觀測矩陣X,假如X受到隨機(jī)(稀疏)噪聲的影響,則X的低秩性就會(huì)破壞,使X變成滿秩的。所以我們就需要將X分解成包含其真實(shí)結(jié)構(gòu)的低秩矩陣和稀疏噪聲矩陣之和。找到了低秩矩陣,實(shí)際上就找到了數(shù)據(jù)的本質(zhì)低維空間。那有了PCA,為什么還有這個(gè)Robust PCA呢?Robust在哪?因?yàn)镻CA假設(shè)我們的數(shù)據(jù)的噪聲是高斯的,對于大的噪聲或者嚴(yán)重的離群點(diǎn),PCA會(huì)被它影響,導(dǎo)致無法正常工作。而Robust PCA則不存在這個(gè)假設(shè)。它只是假設(shè)它的噪聲是稀疏的,而不管噪聲的強(qiáng)弱如何。

? ? ? ?由于rank和L0范數(shù)在優(yōu)化上存在非凸和非光滑特性,所以我們一般將它轉(zhuǎn)換成求解以下一個(gè)松弛的凸優(yōu)化問題:

? ? ? ?說個(gè)應(yīng)用吧。考慮同一副人臉的多幅圖像,如果將每一副人臉圖像看成是一個(gè)行向量,并將這些向量組成一個(gè)矩陣的話,那么可以肯定,理論上,這個(gè)矩陣應(yīng)當(dāng)是低秩的。但是,由于在實(shí)際操作中,每幅圖像會(huì)受到一定程度的影響,例如遮擋,噪聲,光照變化,平移等。這些干擾因素的作用可以看做是一個(gè)噪聲矩陣的作用。所以我們可以把我們的同一個(gè)人臉的多個(gè)不同情況下的圖片各自拉長一列,然后擺成一個(gè)矩陣,對這個(gè)矩陣進(jìn)行低秩和稀疏的分解,就可以得到干凈的人臉圖像(低秩矩陣)和噪聲的矩陣了(稀疏矩陣),例如光照,遮擋等等。至于這個(gè)的用途,你懂得。

?

3)背景建模:

? ? ? ?背景建模的最簡單情形是從固定攝相機(jī)拍攝的視頻中分離背景和前景。我們將視頻圖像序列的每一幀圖像像素值拉成一個(gè)列向量,那么多個(gè)幀也就是多個(gè)列向量就組成了一個(gè)觀測矩陣。由于背景比較穩(wěn)定,圖像序列幀與幀之間具有極大的相似性,所以僅由背景像素組成的矩陣具有低秩特性;同時(shí)由于前景是移動(dòng)的物體,占據(jù)像素比例較低,故前景像素組成的矩陣具有稀疏特性。視頻觀測矩陣就是這兩種特性矩陣的疊加,因此,可以說視頻背景建模實(shí)現(xiàn)的過程就是低秩矩陣恢復(fù)的過程。

?

4)變換不變低秩紋理(TILT):

? ? ? ?以上章節(jié)所介紹的針對圖像的低秩逼近算法,僅僅考慮圖像樣本之間像素的相似性,卻沒有考慮到圖像作為二維的像素集合,其本身所具有的規(guī)律性。事實(shí)上,對于未加旋轉(zhuǎn)的圖像,由于圖像的對稱性與自相似性,我們可以將其看做是一個(gè)帶噪聲的低秩矩陣。當(dāng)圖像由端正發(fā)生旋轉(zhuǎn)時(shí),圖像的對稱性和規(guī)律性就會(huì)被破壞,也就是說各行像素間的線性相關(guān)性被破壞,因此矩陣的秩就會(huì)增加。

? ? ? ?低秩紋理映射算法(TransformInvariant Low-rank Textures,TILT)是一種用低秩性與噪聲的稀疏性進(jìn)行低秩紋理恢復(fù)的算法。它的思想是通過幾何變換τ把D所代表的圖像區(qū)域校正成正則的區(qū)域,如具有橫平豎直、對稱等特性,這些特性可以通過低秩性來進(jìn)行刻畫。

? ? ? ?低秩的應(yīng)用非常多,大家有興趣的可以去找些資料深入了解下。

?

四、規(guī)則化參數(shù)的選擇

? ? ? ?現(xiàn)在我們回過頭來看看我們的目標(biāo)函數(shù):

? ? ? ?里面除了loss和規(guī)則項(xiàng)兩塊外,還有一個(gè)參數(shù)λ。它也有個(gè)霸氣的名字,叫hyper-parameters(超參)。你不要看它勢單力薄的,它非常重要。它的取值很大時(shí)候會(huì)決定我們的模型的性能,事關(guān)模型生死。它主要是平衡loss和規(guī)則項(xiàng)這兩項(xiàng)的,λ越大,就表示規(guī)則項(xiàng)要比模型訓(xùn)練誤差更重要,也就是相比于要模型擬合我們的數(shù)據(jù),我們更希望我們的模型能滿足我們約束的Ω(w)的特性。反之亦然。舉個(gè)極端情況,例如λ=0時(shí),就沒有后面那一項(xiàng),代價(jià)函數(shù)的最小化全部取決于第一項(xiàng),也就是集全力使得輸出和期待輸出差別最小,那什么時(shí)候差別最小啊,當(dāng)然是我們的函數(shù)或者曲線可以經(jīng)過所有的點(diǎn)了,這時(shí)候誤差就接近0,也就是過擬合了。它可以復(fù)雜的代表或者記憶所有這些樣本,但對于一個(gè)新來的樣本泛化能力就不行了。畢竟新的樣本會(huì)和訓(xùn)練樣本有差別的嘛。

? ? ? ?那我們真正需要什么呢?我們希望我們的模型既可以擬合我們的數(shù)據(jù),又具有我們約束它的特性。只有它們兩者的完美結(jié)合,才能讓我們的模型在我們的任務(wù)上發(fā)揮強(qiáng)大的性能。所以如何討好它,是非常重要。在這點(diǎn)上,大家可能深有體會(huì)。還記得你復(fù)現(xiàn)了很多論文,然后復(fù)現(xiàn)出來的代碼跑出來的準(zhǔn)確率沒有論文說的那么高,甚至還差之萬里。這時(shí)候,你就會(huì)懷疑,到底是論文的問題,還是你實(shí)現(xiàn)的問題?實(shí)際上,除了這兩個(gè)問題,我們還需要深入思考另一個(gè)問題:論文提出的模型是否具有hyper-parameters?論文給出了它們的實(shí)驗(yàn)取值了嗎?經(jīng)驗(yàn)取值還是經(jīng)過交叉驗(yàn)證的取值?這個(gè)問題是逃不掉的,因?yàn)閹缀跞魏我粋€(gè)問題或者模型都會(huì)具有hyper-parameters,只是有時(shí)候它是隱藏著的,你看不到而已,但一旦你發(fā)現(xiàn)了,證明你倆有緣,那請?jiān)囍バ薷南滤?#xff0c;有可能有“奇跡”發(fā)生哦。

? ? ? ?OK,回到問題本身。我們選擇參數(shù)λ的目標(biāo)是什么?我們希望模型的訓(xùn)練誤差和泛化能力都很強(qiáng)。這時(shí)候,你有可能還反映過來,這不是說我們的泛化性能是我們的參數(shù)λ的函數(shù)嗎?那我們?yōu)槭裁窗磧?yōu)化那一套,選擇能最大化泛化性能的λ呢?Oh,sorry to tell you that,因?yàn)榉夯阅懿⒉皇铅说暮唵蔚暮瘮?shù)!它具有很多的局部最大值!而且它的搜索空間很大。所以大家確定參數(shù)的時(shí)候,一是嘗試很多的經(jīng)驗(yàn)值,這和那些在這個(gè)領(lǐng)域摸爬打滾的大師是沒得比的。當(dāng)然了,對于某些模型,大師們也整理了些調(diào)參經(jīng)驗(yàn)給我們。例如Hinton大哥的那篇A Practical Guide to Training RestrictedBoltzmann Machines等等。還有一種方法是通過分析我們的模型來選擇。怎么做呢?就是在訓(xùn)練之前,我們大概計(jì)算下這時(shí)候的loss項(xiàng)的值是多少?Ω(w)的值是多少?然后針對他們的比例來確定我們的λ,這種啟發(fā)式的方法會(huì)縮小我們的搜索空間。另外一種最常見的方法就是交叉驗(yàn)證Cross validation了。先把我們的訓(xùn)練數(shù)據(jù)庫分成幾份,然后取一部分做訓(xùn)練集,一部分做測試集,然后選擇不同的λ用這個(gè)訓(xùn)練集來訓(xùn)練N個(gè)模型,然后用這個(gè)測試集來測試我們的模型,取N模型里面的測試誤差最小對應(yīng)的λ來作為我們最終的λ。如果我們的模型一次訓(xùn)練時(shí)間就很長了,那么很明顯在有限的時(shí)間內(nèi),我們只能測試非常少的λ。例如假設(shè)我們的模型需要訓(xùn)練1天,這在深度學(xué)習(xí)里面是家常便飯了,然后我們有一個(gè)星期,那我們只能測試7個(gè)不同的λ。這就讓你遇到最好的λ那是上輩子積下來的福氣了。那有什么方法呢?兩種:一是盡量測試7個(gè)比較靠譜的λ,或者說λ的搜索空間我們盡量廣點(diǎn),所以一般對λ的搜索空間的選擇一般就是2的多少次方了,從-10到10啊什么的。但這種方法還是不大靠譜,最好的方法還是盡量讓我們的模型訓(xùn)練的時(shí)間減少。例如假設(shè)我們優(yōu)化了我們的模型訓(xùn)練,使得我們的訓(xùn)練時(shí)間減少到2個(gè)小時(shí)。那么一個(gè)星期我們就可以對模型訓(xùn)練7*24/2=84次,也就是說,我們可以在84個(gè)λ里面尋找最好的λ。這讓你遇見最好的λ的概率就大多了吧。這就是為什么我們要選擇優(yōu)化也就是收斂速度快的算法,為什么要用GPU、多核、集群等來進(jìn)行模型訓(xùn)練、為什么具有強(qiáng)大計(jì)算機(jī)資源的工業(yè)界能做很多學(xué)術(shù)界也做不了的事情(當(dāng)然了,大數(shù)據(jù)也是一個(gè)原因)的原因了。

? ? ? ?努力做個(gè)“調(diào)參”高手吧!祝愿大家都能“調(diào)得一手好參”!

五、參考資料

[1]?http://fastml.com/large-scale-l1-feature-selection-with-vowpal-wabbit/

[2]?http://www.stat.purdue.edu/~vishy/introml/notes/Optimization.pdf

[3]?http://www.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf

[4]?GradientDescent, Wolfe's Condition and Logistic Regression

[5]?http://nm.mathforcollege.com/mws/gen/04sle/mws_gen_sle_spe_adequacy.pdf

總結(jié)

以上是生活随笔為你收集整理的机器学习中的规则化范数(L0, L1, L2, 核范数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日韩高清在线观看一区 | 天天舔天天操天天干 | 日韩一区二区精品 | 国产人妻人伦精品1国产丝袜 | 97人人模人人爽人人少妇 | 九草在线视频 | 久久久99精品国产一区二区三区 | 欧美精品亚洲一区 | 天天摸日日摸狠狠添 | 凸凹人妻人人澡人人添 | 国产一级生活片 | 老女人做爰全过程免费的视频 | 国产精品久久久久久影视 | 久久久国产精品免费 | 黄色av网站在线免费观看 | 亚洲图片视频在线 | 啪啪啪毛片 | 嫩草影院在线观看视频 | 亚洲码在线观看 | 免费黄色av电影 | 99思思| 少妇免费毛片久久久久久久久 | 欧美黄色免费网站 | 一级黄色在线观看 | 亚洲成人一区在线 | 依人综合 | 公车激情云雨小说 | 欧美天天 | 日爽夜爽| 天天干天天搞天天射 | 日本特级黄色 | 国产亚洲成人av | 九九热视频这里只有精品 | 亚欧在线播放 | 在线一本 | 精品在线视频免费观看 | 性史性农村dvd毛片 日韩精品在线视频观看 | 夜夜骑夜夜| 色妞在线 | 国产成人av电影 | 欧美日韩一区二区三区免费 | 亚州激情| 天堂资源网 | 欧美日韩免费做爰视频 | 人人澡人人干 | 欧美高清二区 | 午夜在线观看视频网站 | 国产美女免费 | 亚洲4区| 日本成人黄色片 | 131美女爱做视频 | 成人羞羞国产免费游戏 | 人人九九 | 九色视频在线播放 | 国产精品久久久久久中文字 | 国产黄视频网站 | 国产另类自拍 | 欧美伊人 | 亚洲一区二区三区四区在线播放 | 国产午夜一级一片免费播放 | 性欧美xxxx| 亚洲精品在线观看网站 | 伊在线久久丫 | 伊人久久av | 黄色一级视频网站 | 午夜在线成人 | 国产精品久久久久久三级 | 最新视频–x99av | 久久精品国产亚洲av高清色欲 | 逼特逼视频在线观看 | 医生强烈淫药h调教小说视频 | 午夜影院a | www.亚洲免费 | 原创av | 鸭子av| 成av人片一区二区三区久久 | 日韩久久久久久久久久 | 成人性生交免费看 | 日本美女毛茸茸 | 强开小嫩苞一区二区三区网站 | 波多野结衣在线播放 | 久久综合五月天 | 日本午夜视频在线观看 | 很黄很污的视频网站 | 午夜免费网 | 图片一区二区 | 妹子干综合 | 日批在线观看 | 国产精品扒开腿做爽爽爽a片唱戏 | 国产一区视频在线观看免费 | 麻豆疯狂做受xxxx高潮视频 | 国产又黄又粗又爽 | 亚洲激情影院 | 日本一区视频在线播放 | 欧美性受xxxx黑人猛交88 | 毛片视频网站 | 欧美一区二区公司 | 一品道av| 污污免费在线观看 |