【优化求解】基于带惯性项的自适应交替方向乘子法iADMMn求解带正则化的逻辑回归矩阵分解问题,对比ADMM和梯度下降法GD算法附Matlab代码
✅作者简介热爱科研的Matlab仿真开发者擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 关注我领取海量matlab电子书和数学建模资料个人信条格物致知,完整Matlab代码获取及仿真咨询内容私信。 内容介绍一、联邦学习概述概念联邦学习是一种分布式机器学习框架旨在在多个参与方如多个设备、机构或组织之间协同训练模型同时保护各方的数据隐私。在联邦学习中各参与方在本地存储和处理数据无需将数据上传至中央服务器而是通过与中央服务器交换模型参数或梯度信息来共同构建一个全局模型。应用场景与需求联邦学习在诸多领域有广泛应用例如在医疗领域不同医院可以在不共享患者敏感数据的前提下共同训练一个用于疾病诊断的模型在金融领域多家银行可联合训练信用评估模型而不泄露各自客户的财务信息。然而联邦学习面临着通信成本高、数据异构性强以及模型收敛速度慢等挑战。因此需要高效的优化算法来提升联邦学习的性能。二、交替方向乘子法ADMM优势ADMM 结合了对偶上升法和乘子法的优点具有收敛速度快、可并行计算以及对大规模分布式问题适应性强等特点。它能够有效处理约束条件并且在每次迭代中子问题的求解相对简单通常可以得到闭式解或通过高效的迭代算法求解。⛳️ 运行结果 部分代码function [obj_save,U,V,time_save] GD(Y,c,lambda_d,lambda_t,options)% GD (alternating gradient descent) algorithm for solving% (*) \min_{U,V} \sum_{i1}^m \sum_{j1}^n (1c y_{ij}-y_{ij}) \log (1\exp(u_i v_j^\top))% -c y_{ij}u_i v_j^\top \frac{\lambda_d}{2} \|U\|_F^2% \frac{\lambda_t}{2}\|V\|_F^2% note that y_{ij} \in [0,1]%% written by LTK. Hien% lastest version Oct 2023%%% input: 0Y1, c, lambda_d, lambda_t% options.beta : penalty parameter of iADMMn% options.max_time : max time of running the algorithm% options.max_iter : max number of iterations to run the algorithm% options.U0, options.V0: initial points of iADMMn%% output: obj_save: sequence of the objective of problem (*),% U,V : solution% time_save: sequence of running time%cputime0 tic;max_timeoptions.max_time;max_iteroptions.max_iter;% initial pointUoptions.U0;Voptions.V0;%starti1;time_itoc(cputime0);time_savetime_i;UVU*V;yy1(c-1)*Y;LG1/4*max(yy(:));GWyy.*logexp(UV);YUVY.*UV;objsum(GW(:))-c*sum(YUV(:))lambda_d*norm(U,fro)^2/2lambda_t/2*norm(V,fro)^2;obj_saveobj;while imax_iter time_imax_time% update UWU*V;PexpX(W);gradUP*V(c-1)*(Y.*P)*V-c*Y*Vlambda_d*U;stepsize1/(LG*norm(V)^2lambda_d);UU-stepsize*gradU;%update VPexpX(U*V);gradVU*P(c-1)*U*((Y).*(P))-c*U*Ylambda_t*V;stepsize1/(LG*norm(U)^2lambda_t);VV-stepsize*gradV;UVU*V;yy1(c-1)*Y;GWyy.*logexp(UV);YUVY.*UV;objsum(GW(:))-c*sum(YUV(:))lambda_d*norm(U,fro)^2/2lambda_t/2*norm(V,fro)^2;obj_save[obj_save,obj];time_itoc(cputime0);time_save[time_save,time_i];if mod(i,2)0fprintf(GD: iteration %4d fitting error: %1.2e \n,i,obj);endii1;endendfunction eexpX(X)%compute e^x/(1e^x)eexp(-max(-X,0))./(1exp(-abs(X)));endfunction elogexp(X)%compute log(1e^x)elog(1exp(-abs(X)))max(0,X);end 参考文献 往期回顾可以关注主页点击搜索