关于算法中L2范数更新公式里下标+符号含义的疑问
嗨,这个下标+其实是正部操作(positive part),在优化和机器学习领域里是很常用的符号,我给你拆解着说清楚:
首先,$(x){+}$这个符号的核心定义就是取$x$和0之间的较大值,用代码来表示就是max(x, 0)。放到你给出的公式里:
$$ \boldsymbol{b} \leftarrow (||\boldsymbol{b}|| _{2} - \beta){+} \widehat{\boldsymbol{b}} $$
就是先计算$||\boldsymbol{b}||_{2} - \beta$这个数值:
- 如果这个计算结果大于0,那$(||\boldsymbol{b}||{2} - \beta){+}$就等于这个结果本身;
- 如果结果小于等于0,那这个项直接变成0,最终更新后的$\boldsymbol{b}$也会变成全零向量。
再结合公式里的其他部分补充下:$\widehat{\boldsymbol{b}}$是$\boldsymbol{b}$对应的单位向量(也就是$\boldsymbol{b}$除以它自己的L2范数),所以整个公式其实是对向量$\boldsymbol{b}$做L2范数的收缩操作——有点像Lasso回归里的软阈值,但这里是针对整个向量的整体范数来处理的:当向量的L2范数大于$\beta$时,就把范数减去$\beta$,同时保持向量的方向不变;如果范数小于等于$\beta$,就直接把整个向量置零。
举个直观的例子:假设$\boldsymbol{b}$的L2范数是5,$\beta$是3,那$(5-3){+}=2$,更新后的$\boldsymbol{b}$就是2倍的单位$\boldsymbol{b}$;如果$\boldsymbol{b}$的范数是2,$\beta$是3,那$(2-3){+}=0$,更新后的$\boldsymbol{b}$就是全零向量。
备注:内容来源于stack exchange,提问作者Arik D. Brown

