梯度下降求函式最小值C++樣例
阿新 • • 發佈:2020-12-17
技術標籤:跟我一起學《深度學習》深度學習機器學習演算法人工智慧神經網路
強力推薦大家閱讀《深度學習的數學》一書,日本作家所寫(通俗易懂),可當作課外讀物閱讀
#include<iostream>
#include<cmath>
using namespace std;
//梯度下降求最小值
//以函式z=x^4+y^2,為例子
//算出偏導,梯度向量
//x:4x^3 y:2y 梯度向量為 (4x^3,2y)
int main(void){
double n=0.001;//步長選0.1
//我們要選一個點,作為起點
double start_x=-5.0,start_y=-5.0 ;
//梯度
double grade_x=4*(start_x*start_x*start_x);
double grade_y=2*start_y;
//位移向量
double dx=-n*grade_x;
double dy=-n*grade_y;
while(fabs(dx)>0.00001||fabs(dy)>0.00001){
//更新位置
start_x=start_x+dx;
start_y=start_x+dy;
//計算位移向量
dx=-n*3*(start_x*start_x);
dy=-n*2*start_y;
//計算函式值
//std::cout<<"min-value is "<<start_x*start_x*start_x*start_x+start_y*start_y<<std::endl;
cout<<start_x<<","<<start_y<<endl;
if(!(fabs(start_x)>0.01&&fabs(start_y)>0.01)){
cout<<0<<","<<0<<endl;
break;
}
}
if(!(fabs(start_x)>0.01&&fabs(start_y)>0.01)){
cout<<0<<"," <<0<<endl;
}
return 0;
}