L1正则化求导问题
在实现机器学习算法时,最常用的是L2正则化,因为L2正则化有连续可微的性质,易求导。但L1能产生稀疏解,而且稀疏解的泛化能力会比较好,不过由于L1正则化并不是处处连续的,所以优化的时候会有一定难度。
对于目标函数不是连续可微的情况,可以用次梯度来进行优化,但次梯度存在两个问题:
- 求解慢
- 通常不会产生稀疏解
此时可以用 Proximal Algorithm 对L1进行求解。
Proximal Algorithm
定义如下:
设 为凸函数,那么凸函数的 上镜图(epigraph) 定义为:
是非空的闭凸集,其 effective domain :
即, 的取值范围为有限个的一组点。
上镜图(epigraph)意为在函数图像之上。一个用途是用来联系凸集合凸函数的。即,一个函数为凸函数,当且仅当其上镜图是凸集。
proximal operator Prox的定义:
其中为欧几里得范数, 视为参数即可(scaled function)。
由此可知,proximal operator 公式是在寻找一个距离点 附近的点 ,使得 尽可能小,并且 ,如图:
其中粗的黑线表示为作用域,细黑线表示函数f的等高线,蓝色的点是 ,红点是 。函数域中的三点停留在域内,向函数的最小值移动,另外两点移动到域的边界,并朝函数的最小值移动。 参数 控制 proximal operator 映射指向 的最小值的程度,其中 的较大值与最小值附近的映射点相关联,较小的值给出向最小值的较小移动。
假设目标函数为
- repeat 直到收敛或达到最大迭代次数
- for t = 1, 2, …, n:
- Gradient Step 定义 是沿着 梯度方向找到的一个点:
- Proximal Operator Step 使用 优化 :
- Gradient Step 定义 是沿着 梯度方向找到的一个点:
- for t = 1, 2, …, n:
proximal 算法中要求 满足 lipschitz 条件其系数为 ,所以参数 的取值范围为 ,若 未知,可以使用line search:
- repeat
- break if
- return
Proximal Algorithm和SGD
SGD 是把目标函数进行一阶泰勒展开,Proximal Algorithm 也是同样的,只不过Proximal Aglorithm 更为严格,要求目标函数 ,其中 满足 Lipschitz continuity,有:
寻找可以使 最小化的 ,因为直接求解 不容易求解,所以转为求使得 上确界的最小的 ,即
凑方并增减常数项,得:
由此可见,Proximal Aglorithm 是在目标函数F不满足处处可微条件时,可以转而去优化目标函数的上界的自然结果。
Reference
[1] Proximal Algorithms By N. Parikh and S. Boyd
[2] Proximal Algorithm 入门