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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火

發布時間:2025/6/17 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

神經網絡與機器學習?筆記—LMS(最小均方算法)和學習率退火

LMS算法和Rosenblatt感知器算法非常想,唯獨就是去掉了神經元的壓制函數,Rosenblatt用的Sgn壓制函數,LMS不需要壓制函數,兩者一樣是只有單個神經元。

LMS算法信號流圖

?

算法小結:


然后在說下退火:

?

#pragma?once#include?"stdafx.h"#include?<string>#include?<iostream>using?namespace?std;int?gnM?=?0;??????//訓練集空間維度int?gnN?=?0;??????//突觸權值個數double?gdU0?=?0.1;??//初始學習率參數,用于退火,前期可以較大double?gdT?=?1;??//控制退火用的開始降溫的時間點double?gdN?=?0;??//當前工作時間(神經網絡學習次數)//退火//U=U0/(1+(N/T))double?GetNowU()?{gdN++;//cout<<?gdU0?/?(1.0?+?(gdN?/?gdT))<<endl;return?gdU0?/?(1.0?+?(gdN?/?gdT));}void?LMSInit(double?*dX,?const?int?&nM,?double?*dW,?const?int?&nN,?const?double?&dB,?const?double?&dU0?,const?double?&dT)?{//dX?本次訓練數據集//nM?訓練集空間維度//dW?權值矩陣//nN?突觸權值個數?LMS只有一個神經元,所以nM==nM//dB?偏置,正常這個是應該?走退火動態調整的,以后再說,現在固定得了。//dU0?初始學習率參數,用于退火,前期可以較大//dT控制退火用的開始降溫的時間點if?(nM?>?0)?{dX[0]?=?1;//把偏置永遠當成一個固定的突觸}for?(int?i?=?0;?i?<=?nN;?i++)?{if?(i?==?0)?{dW[i]?=?dB;//固定偏置}else?{dW[i]?=?0.0;}}gnM?=?nM,?gnN?=?nN,?gdU0?=?dU0,?gdT?=?dT;}double?Sgn(double?dNumber)?{return?dNumber?>?0???+1.0?:?-1.0;}//感知器收斂算法-學習void?LMSStudy(const?double?*dX,?const?double?dD,?double?*dW)?{//dX?本次訓練數據集//dD?本次訓練數據集的期望值//dW?動態參數,突觸權值double?dY?=?0;for?(int?i?=?0;?i?<=?gnM?&&?i?<=?gnN;?i++)?{dY?=?dY?+?dX[i]?*?dW[i];}//dY?=?Sgn(dY);?LMS這個地方不用了,Rosenblatt是需要的if?(dD?==?dY)?{return;//不需要進行學習調整突觸權值}for?(int?i?=?1;?i?<=?gnM?&&?i?<=?gnN;?i++)?{dW[i]?=?dW[i]?+?GetNowU()?*?(dD?-?dY)?*?dX[i];}}//感知器收斂算法-泛化double?LMSGeneralization(const?double?*dX,?const?double?*dW)?{//dX?本次需要泛化的數據集//dW?已經學習好的突觸權值//返回的是當前需要泛化的數據集的泛化結果(屬于那個域的)double?dY?=?0;for?(int?i?=?0;?i?<=?gnM?&&?i?<=?gnN;?i++)?{dY?=?dY?+?dX[i]?*?dW[i];}return?Sgn(dY);}//雙月分類模型,隨機獲取一組值/*??自己稍微改了下域1:上半個圓,假設圓心位坐標原點(0,0)(x?-?0)?*?(x?-?0)?+?(y?-?0)?*?(y?-?0)?=?10?*?10x?>=?-10?&&?x?<=?10y?>=?0?&&?y?<=?10域2:下半個圓,圓心坐標(10?,-1)(x?-?10)?*?(x?-?10)?+?(y?+?1)?*?(y?+?1)?=?10?*?10;x?>=?0?&&?x?<=?20y?>=?-11?&&?y?<=?-1*/const?double?gRegionA?=?1.0;?//雙月上const?double?gRegionB?=?-1.0;//雙月下void?Bimonthly(double?*dX,?double?*dY,?double?*dResult)?{//dX??????坐標x//dY??????坐標y//dResult?屬于哪個分類*dResult?=?rand()?%?2?==?0???gRegionA?:?gRegionB;if?(*dResult?==?gRegionA)?{*dX?=?rand()?%?20?-?10;//在區間內隨機一個X*dY?=?sqrt(10?*?10?-?(*dX)?*?(*dX));//求出Y}else?{*dX?=?rand()?%?20;*dY?=?sqrt(10?*?10?-?(*dX?-?10)?*?(*dX?-?10))?-?1;*dY?=?*dY?*?-1;}}int?main(){//system("color?0b");double?dX[2?+?1],?dD,?dW[2?+?1];?//輸入空間維度為3?平面坐標系+一個偏置double?dB?=?0;double?dU0?=?0.1;double?dT?=?128;?//128之后開始降溫LMSInit(dX,?2,?dW,?2,?dB,?dU0,?dT);//初始化?感知器double?dBimonthlyX,?dBimonthlyY,?dBimonthlyResult;int?nLearningTimes?=??1024?*?10;//進行10K次學習for?(int?nLearning?=?0;?nLearning?<=?nLearningTimes;?nLearning++)?{Bimonthly(&dBimonthlyX,?&dBimonthlyY,?&dBimonthlyResult);//隨機生成雙月數據dX[1]?=?dBimonthlyX;dX[2]?=?dBimonthlyY;dD?=?dBimonthlyResult;LMSStudy(dX,?dD,?dW);//cout?<<"Study:"?<<?nLearning?<<?"?:X=?"?<<?dBimonthlyX?<<?"Y=?"?<<?dBimonthlyY?<<?"?D="?<<?dBimonthlyResult<<?"----W1=?"?<<?dW[1]?<<?"??W2=?"?<<?dW[2]?<<?endl;}//進行LMS泛化能力測試?測試數據量1Kint?nGeneralizationTimes?=?1?*?1024;int?nGeneralizationYes?=?0,?nGeneralizationNo?=?0;double?dBlattGeneralizationSuccessRate?=?0;for?(int?nLearning?=?1;?nLearning?<=?nGeneralizationTimes;?nLearning++)?{Bimonthly(&dBimonthlyX,?&dBimonthlyY,?&dBimonthlyResult);//隨機生成雙月數據dX[1]?=?dBimonthlyX;dX[2]?=?dBimonthlyY;//cout?<<?"Generalization:?"?<<?dBimonthlyX?<<?","?<<?dBimonthlyY;if?(dBimonthlyResult?==?LMSGeneralization(dX,?dW))?{nGeneralizationYes++;//cout?<<?"?Yes"?<<?endl;}else?{nGeneralizationNo++;//cout?<<?"?No"?<<?endl;}}dBlattGeneralizationSuccessRate?=?nGeneralizationYes?*?1.0?/?(nGeneralizationNo?+?nGeneralizationYes)?*?100;cout?<<?"Study?:?"?<<?nLearningTimes?<<?"?????Generalization?:?"?<<?nGeneralizationTimes?<<?"?????SuccessRate:"?<<?dBlattGeneralizationSuccessRate?<<?"%"?<<?endl;getchar();return?0;}

執行結果:

????Study?:?10240?????Generalization?:?1024?????SuccessRate:96.6797%

注意:

? ? ? ? 相對于Rosenblatt算法,LMS如果直接把sgn去掉了可能出現泛化能力急劇下降的問題,我就是,直接變成50%了(和沒學習一樣),因為此時的學習率參數恒等于0.1有點大(為什么說0.1大,因為沒有sgn了,算出的XW是比較大的,而這個時候我們訓練數據集的期望結果,還是+1和-1)。同時,退火的那個地方,去動態調整那幾個參數,會得到你意想不到的效果,挺微妙的。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。