锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

梯度算法的Matlab实现

时间:2023-11-10 07:37:02 ee膜压型高精密金属膜电阻器

1.梯度下降法是如何计算的?

函数

aa6ed0065847786f19fe12035a4ece43.png,解决其最小值

1.解决梯度函数

2.给定初始点,计算该点的梯度,并开始迭代

3.计算初始点梯度模,判断是否符合终止条件

,若满足,则得到终点。若不满足,则获得当前最佳学习率,然后迭代。

function [k ender]=steepest(f,x,e)

% 梯度下降法函数function [k ender]=steepest(f,x,e),需要三个参数f、x和e,其中

% f目标函数,x为初始点,e终止误差。输出也是两个参数,k表示迭代次数,

% ender表示找到的最低点。

%梯度下降法,f目标函数(两变量)x1和x2),x为初始点,如[3;4]

syms x1 x2 m; %m为学习率

d=-[diff(f,x1);diff(f,x2)]; %分别求x1和x2的偏导数,即下降方向

flag=1; %循环标志

k=0; %迭代次数

while(flag)

d_temp=subs(d,x1,x(1)); %代入起点,求得当次下降x1梯度值

d_temp=subs(d_temp,x2,x(2)); %代入起点,求得当次下降x2梯度值

nor=norm(d_temp); %范数

if(nor>=e)

x_temp=x m*d_temp; %改变初始点x的值

f_temp=subs(f,x1,x_temp(1)); %会改变x1和x2代入目标函数

f_temp=subs(f_temp,x2,x_temp(2));

h=diff(f_temp,m); %向m求导,找出最佳学习率

m_temp=solve(h); %求方程,得到当次m

x=x m_temp*d_temp; %更新起始点x

k=k 1;

else

flag=0;

end

end

ender=double(x); %终点

end

初始点为[3;3],误差为10^(-20);结果发现[2;1]点是迭代27次的最值点。

二、如何求学习率

通过损失函数获得学习率。CSDN看一篇文章。有一个总结。

原样本(1,2)

针对线性回归的函数 y=kx

相应的损失函数是 y=2kx^2,

我们的方向是最小化损失函数,获得最终k值,然后替换它

在原始线性函数中,当损失函数最小化时,应如何获得相应的k值?

方法一:求导损失函数,然后使导数等于0,得到相应的k值,有时不能直接解决,这种方法可能是局部最好的;

方法二:采用梯度下降和学习率的方法获得最终k值,明确梯度下降中的梯度

实际上是指损失函数的斜率,最初为k设置一个值,例如0.3.然后将k值和样本中的x值替换到损失函数中获得损失函数的y值为差距值。如果这个差距值符合要求,但如果太大,可能需要不断调整这个k值。如何获得新的k值?相应的公式如下:

k1=k at,

其中k一是新的k值,k是最初设定的k值,其中a是学习率,一般可以设定0.01.对于学习率的设置,如果设置太小,最终收敛会太慢,如果设置太大,可能会错过最小值,所以需要设置合适,t是相应的函数斜率,获得方法是指导损失函数,然后将样本中的x值和初始k值代入对应的斜率,获得新的k值,然后将新的k值和x值代入损失函数,看函数的差值是否在此范围内。

结论:梯度下降实际上是斜率的持续下降,最终希望0对应的斜率是在谷底获得相应的k值,是最好的k值。

原文:https://www.cnblogs.com/andrew-address/p/13055909.html

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章