训练神经网络的常用方法之共轭梯度法

共轭梯度法是一种结合梯度下降法和牛顿法优点的优化算法,仅需一阶导数信息,避免了存储和计算海塞矩阵的需求。此算法在解决大型线性方程组和非线性优化问题上表现优秀,具有步长收敛性和高稳定性。提供的代码示例展示了如何用共轭梯度法求解正定线性方程组,通过调整停机绝对误差限可以控制迭代次数和精度。
摘要由CSDN通过智能技术生成

共轭梯度法是介于梯度下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,既克服了梯度下降法收敛慢的缺点,又避免了牛顿法需要存储和计算海塞矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。
共轭梯度法的迭代公式如下所示:
在这里插入图片描述
使用共轭梯度法对正定线性方程组进行求解,代码如下所示

function [er,k]=ConGra(A)
%共轭梯度法求解正定线性方程组Ax=b
%er:表示停机时实际的绝对误差
%k:表示停机时实际的迭代次数
tol=1e-6;%规定停机绝对误差限
[n,m]=size(A);
if n~=m %判断输入的合法性
    error('wrong input');
end
x=zeros(n,1); %初始化解向量,产生n行1列的全零矩阵
b=ones(n,1);
r=b-A*x;%当前残量
k=0;%记录迭代次数
while norm(r,2)>tol   %求r的2范数
    k=k+1;
    if k==1
        p=r;%第一步即最速下降法,取残量方向,p为步长
    else
        q=(r'*r)/(rq'*rq);
        p=r+q*p;
    end
    a=(r'*r)/(p'*A*p);
    x=x+a*p;
    rq=r;
    r=r-a*A*p;
end
er=norm(A*x-b,2);
end

再编写一个m文件对矩阵A进行赋值即可求出相应的迭代次数和误差。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值