當前位置:首頁 » 操作系統 » 演算法衰減

演算法衰減

發布時間: 2024-09-22 11:58:42

『壹』 神經網路中自適應的梯度下降優化演算法(二)

Adagrad演算法可以針對不同的參數自適應的採用不同的更新頻率,對低頻出現的特徵採用低的更新率,對高頻出現的特徵採用高的更新率,因此,對於稀疏的數據它表現的很好,很好的提升了SGD的魯棒性,在Google的通過Youtube視頻識別貓的神經網路訓練中有很好的表現。

梯度更新規則:

g(t,i)表示在t時刻目標函數對θ(i)的偏導數。SGD的每個參數的更新過程如下:

Adagrad的每個參數更新過程如下:

G(t)是一個對角矩陣,對角線上的每個元素是t時刻前所有θ(i)的梯度的平方和。ε通常取值在1e-8量級,它的存在是為了避免除數為0。一個有趣的現象是,如果沒有平方根操作,演算法的表現就非常糟糕。

Adagrad的主要缺點是,它的分母是平方梯度的累積,它的值會一直增加,最終導致學習率衰減到非常小,從而使得學習演算法無法進行下去。

TensorFlow實現:

tf.train.AdagradOptimizer(learning_rate, initial_accumulator_value=0.1, use_locking=False, name='Adagrad')

Adadelta演算法主要解決Adagrad的缺陷,它不再累加過去所有的梯度,而是僅累積過去固定個數的梯度。

Adadelta不是採用平方梯度的簡單累加,而是採用 歷史 平方梯度的衰減的平均。

γ通常等於0.9

分母相當於梯度的均方根(root mean squared, RMS),即將所有值平方求和,求其均值,再開平方,就得到均方根值。

梯度更新規則:

將學習率η設置為

,我們就不需要提前設定學習率。

RMSprop是Geoff Hinton提出的一種自適應學習率的方法,它與Adadelta方法都是為了解決Adagrad學習率急劇下降問題的。它與Adadelta方法是一致的。

梯度更新規則

超參數設定值:

Hinton建議設定γ=0.9, 學習率η=0.001。

TensorFlow實現:

tf.train.RMSPropOptimizer.__init__(learning_rate, decay, momentum=0.0, epsilon=1e-10, use_locking=False, name='RMSProp')

Adam也是對不同的參數自適應設置不同的學習率。它對 歷史 梯度和 歷史 平方梯度同時採用指數梯度衰減(exponentially decaying average)。

梯度更新規則

Adam作者觀察到,如果m(t)和v(t)初始化為零向量,並且衰減率很小時(比如β1和β2都非常接近於1時),在開始的迭代中,m(t)和v(t)總是向零偏移,所以需要做偏移校正。

然後用校正後的值進行梯度更新:

Adam作者建議β1=0.9,β2=0.999,ε=10^{-8}

,在實踐中,Adam比其它演算法的效果要好。

TensorFlow實現:

tf.train.AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')

Adam更新規則中的梯度縮放與 歷史 梯度的L2范數成反比。

我們可以把這個規則泛化到Lp范數。

當p值增大的時候,Lp的值往往會變得不穩定,所以在實踐中L1和L2使用的比較普遍。但是Adamax作者發現L∞可以收斂到一個穩定值。

然後我們可以採用u(t)代替

來更新Adam中的梯度。

同時u(t)不需要做零偏校正。默認取值建議:

『貳』 關於熱度演算法

熱度演算法基本原理

需要了解的是,熱度演算法也是需要不斷優化去完善的,基本原理:

新聞熱度分 = 初始熱度分 + 用戶交互產生的熱度分 – 隨時間衰減的熱度分

Score = S0 + S(Users) – S(Time)

新聞入庫後,系統為之賦予一個初始熱度值,該新聞就進入了推薦列表進行排序;隨著新聞不斷被用戶點擊閱讀,收藏,分享等,這些用戶行為被視作幫助新聞提升熱度,系統需要為每一種新聞賦予熱度值;同時,新聞是有較強時效性的內容,因此新聞發布之後,熱度必須隨著新聞變得陳舊而衰減。

新聞的熱度就在這些演算法的綜合作用下不斷變化,推薦列表的排序也就不斷變化。

初始熱度不應該一致

上面的演算法為每一條入庫的新聞賦予了同樣的熱度值,但在現實使用後發現行不通,例如娛樂類別比文化類別受歡迎程度本身就高很多;或者突發了嚴重的災害或事故;或是奧運會期間,體育類別的關注度突然高了起來;而此時如果還是每條新聞給同樣的熱度就不能貼合實際了。

解決辦法就是把初始熱度設置為變數:

(1)按照新聞類別給予新聞不同的初始熱度,讓用戶關注度高的類別獲得更高的初始熱度分,從而獲得更多的曝光,例如:

(2)對於重大事件的報道,如何讓它入庫時就有更高的熱度,我們採用的是熱詞匹配的方式。

即對大型新聞站點的頭條,Twitter熱點,競品的頭條做監控和扒取,並將這批新聞的關鍵詞維護到熱詞庫並保持更新;每條新聞入庫的時候,讓新聞的關鍵詞去匹配熱詞庫,匹配度越高,就有越高的初始熱度分。

這樣處理後,重大事件發生時,Twitter和門戶網站的爭相報道會導致熱詞集中化,所有匹配到這些熱詞的新聞,即報道同樣事件的新聞,會獲得很高的初始熱度分。

用戶行為分規則不是固定不變的

解決了新聞入庫的初始分之後,接下來是新聞熱度分的變化。先要明確用戶的的哪些行為會提高新聞的熱度值,然後對這些行為賦予一定的得分規則。例如對於單條新聞,用戶可以點擊閱讀(click),收藏(favor),分享(share),評論(comment)這四種行為,我們為不同的行為賦予分數,就能得到新聞的實時用戶行為分為:

S(Users) = 1*click + 5*favor + 10*comment + 20*share

這里對不同行為賦予的分數為1,5,10,20,但這個值不能是一成不變的;當用戶規模小的時候,各項事件都小,此時需要提高每個事件的行為分來提升用戶行為的影響力;當用戶規模變大時,行為分也應該慢慢降低,因此做內容運營時,應該對行為分不斷調整。

當然也有偷懶的辦法,那就是把用戶規模考慮進去,算固定用戶數的行為分,即:

S(Users) = (1*click + 5*favor + 10*comment + 20*share)/DAU * N(固定數)

這樣就保證了在不同用戶規模下,用戶行為產生的行為分基本穩定。

熱度隨時間的衰減不是線性的

由於新聞的強時效性,已經發布的新聞的熱度值必須隨著時間流逝而衰減,並且趨勢應該是衰減越來越快,直至趨近於零熱度。換句話說,如果一條新聞要一直處於很靠前的位置,隨著時間的推移它必須要有越來越多的用戶來維持。

我們要求推薦給用戶的新聞必須是24h以內,所以理論上講,衰減演算法必須保證在24h後新聞的熱度一定會衰減到很低,如果是線性衰減,當某些新聞突然有大量用戶閱讀,獲得很高的熱度分時,可能會持續排名靠前很久,讓用戶覺得內容更新過慢。

參考牛頓冷卻定律,時間衰減因子應該是一個類似於指數函數:

T(Time) = e ^ (k*(T1 – T0))

其中T0是新聞發布時間,T1是當前時間。

而由於熱度的發展最終是一個無限趨近於零熱度的結果,最終的新聞的熱度演算法也調整為:

Score = ( S0(Type) + S(Users) ) / T(Time)

其他影響因素

很多新聞產品會給用戶「贊」,「踩」或「不在推薦此類」的選項,這些功能不僅適用於個性化推薦,對熱度演算法也有一定的作用。

新聞的推送會造成大量的打開,在計算熱度的時候需要排除掉相關的影響。類似於這樣的因素,都會對熱度演算法產生影響,因此熱度演算法上線後,依然需要不斷地「調教」。建議把所有的調整指標做成可配項,例如初始熱度分,行為事件分,衰減因子等,從而讓產品和運營能實時調整和驗證效果,達到最佳狀態。

熱點內容
ftp錯誤無法獲得遠端文件夾信息 發布:2024-09-22 14:20:19 瀏覽:124
如何在安卓服看到白鳥 發布:2024-09-22 14:20:16 瀏覽:220
仿回車源碼 發布:2024-09-22 14:01:14 瀏覽:518
mysql資料庫索引原理 發布:2024-09-22 13:58:55 瀏覽:22
android照片旋轉 發布:2024-09-22 13:53:39 瀏覽:443
編程大牛 發布:2024-09-22 13:49:08 瀏覽:720
為什麼電腦彈出代理伺服器錯誤 發布:2024-09-22 13:48:21 瀏覽:385
我的世界啟動器推薦伺服器地址 發布:2024-09-22 13:44:09 瀏覽:638
c語言中的unsignedchar 發布:2024-09-22 13:11:12 瀏覽:169
最好的加密移動硬碟 發布:2024-09-22 12:35:58 瀏覽:158