一般而言,如果目标函数是凸的并且可微,那么使用梯度下降总是可以求出。而当有部分为凸且不可微时,这个时候就要用这个
近端梯度下降算法进行优化了。
也就是使用下面的PGD 就可以解决这类优化问题
其中
p
r
o
x
t
h
(
w
)
prox_{th}(w)
proxth(w) 为proximal operator, 这个是定义,为啥是这样可以参考https://cswhjiang.github.io/page7/。
具体而言就是在函数h 上找一点
z
∗
z^*
z∗, 使得
w
w
w 到这个
z
∗
z^*
z∗的距离最小,
z
∗
z^*
z∗可以称为
w
w
w在
h
h
h 上的投影,下面是例子
其中的
S
λ
t
S_{\lambda t}
Sλt为软阈值函数。需要通过h 计算出来的。
举个例子,1-norm为不可微凸函数, t 是一个新增参数,表示近端梯度下降的步长 (step size);
λ
\lambda
λ 为正则项的参数
(可看推导https://angms.science/doc/CVX/ISTA0.pdf)
很好的讲解, https://zhuanlan.zhihu.com/p/82622940