欢迎访问 生活随笔!

生活随笔

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

编程问答

BPG-MF学习笔记

发布时间:2024/5/14 编程问答 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 BPG-MF学习笔记 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

论文及代码出处

论文原文:Beyond Alternating Updates for Matrix Factorization with Inertial Bregman Proximal Gradient Algorithms
补充材料下载链接:https://proceedings.neurips.cc/paper/2019/file/bc7f621451b4f5df308a8e098112185d-Supplemental.zip
代码出处:https://github.com/mmahesh/cocain-bpg-matrix-factorization

BPG-MF算法

算法流程

无正则



根据算法流程对 P k P^k Pk Q k Q^k Qk进一步推导,可以得到无正则项的BPG-MF算法为如下形式:

L2正则

代码结构

  作者提供的程序包实现了BPG-MF、CoCaIn BPG-MF、
BPG-MF-WB、PALM和iPALM五种算法,可以通过修改main.py文件中的algo参数进行选择。同时还可以通过修改dataset_option对使用的数据集进行选择。
  算法功能实现的函数在my_functions.py中,主要函数及其功能如下:

函数名功能
main_func计算数据一致项
grad计算光滑项g的梯度
make_update实现算法的更新策略
breg计算Bregman距离

make_update函数

  breg_num为1时,该函数实现了PALM与iPALM;breg_num为2时,该函数实现了BPG相关算法。接下来讨论BPG算法的代码实现。
  BPG算法的abs_fun_num可以选择正则化形式,等于3时实现了无正则和L2正则(因为L2正则与无正则仅差一次项系数,详见supplementary),等于2时实现了L1正则。

无正则和L2正则

if breg_num ==2:# Calculates CoCaIn BPG-MF, BPG-MF, BPG-MF updates# 计算g对U和Z的偏导grad_u, grad_z = grad(A, U1, Z1, lam, fun_num=0)# 计算h对U和Z的偏导grad_h_1_a = U1*(np.linalg.norm(U1)**2 + np.linalg.norm(Z1)**2)grad_h_1_b = Z1*(np.linalg.norm(U1)**2 + np.linalg.norm(Z1)**2)grad_h_2_a = U1grad_h_2_b = Z1# 是否为对称矩阵sym_setting = 0if abs_fun_num == 3:# Code for No-Regularization and L2 Regularizationif exp_option==1:# No-Regularization is equivalent to L2 Regularization with lam=0# 计算P^kp_l = (1/uL_est)*grad_u - (c_1*grad_h_1_a + c_2*grad_h_2_a) # uL_est = 1, means lambda = 1# 计算 Q^k # lambda_0 is corresponding to lamq_l = (1/uL_est)*grad_z - (c_1*grad_h_1_b + c_2*grad_h_2_b)if sym_setting == 0: #default option# 解三次方程,temp_y为根coeff = [c_1*(np.linalg.norm(p_l)**2 + np.linalg.norm(q_l)**2), 0,(c_2 + (lam/uL_est)), -1]temp_y = np.roots(coeff)[-1].real# U^(k+1) = -r * P^k, Z^(k+1) = -r * Q^k, return (-1)*temp_y*p_l, (-1)*temp_y*q_lelse:p_new = p_l + q_l.Tcoeff = [4*c_1*(np.linalg.norm(p_new)**2), 0,2*(c_2 + (lam/uL_est)), -1]temp_y = np.roots(coeff)[-1].realreturn (-1)*temp_y*p_new, (-1)*temp_y*(p_new.T)

L1正则

if abs_fun_num == 2:if exp_option==1:# L1 Regularization simpletp_l = (1/uL_est)*grad_u - (c_1*grad_h_1_a + c_2*grad_h_2_a) # 计算 P^kp_l = -np.maximum(0, np.abs(-tp_l)-lam*(1/uL_est))*np.sign(-tp_l) # 计算 -S_t0(-P^k)tq_l = (1/uL_est)*grad_z - (c_1*grad_h_1_b + c_2*grad_h_2_b) # 计算 Q^Kq_l = -np.maximum(0, np.abs(-tq_l)-lam*(1/uL_est))*np.sign(-tq_l) # 计算 -S_t0(-Q^k)# 解三次方程,temp_y为根coeff = [c_1*(np.linalg.norm(p_l)**2 + np.linalg.norm(q_l)**2), 0,(c_2), -1]temp_y = np.roots(coeff)[-1].real# 为了统一U^k和Z^k的计算形式,p_l和q_l相较于论文多了负号return (-1)*temp_y*p_l, (-1)*temp_y*q_l

总结

以上是生活随笔为你收集整理的BPG-MF学习笔记的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。