梯度下降是非常有效的优化算法,但前提是目标函数可导。Lasso的目标函数是 J ( w ) = ∣ ∣ y − X w ∣ ∣ 2 2 + λ ∣ ∣ w ∣ ∣ 1 J(\mathbf w) = ||\mathbf y - X\mathbf w||_2^2 +\lambda||w||_{1} J(w)=∣∣y−Xw∣∣22+λ∣∣w∣∣1,其中正则项中的 ∣ ∣ w ∣ ∣ 1 ||w||_{1} ∣∣w∣∣1为绝对值函数,在w=0点处不可导,无法计算梯度,也无法使用梯度下降法求解。解决方法之一是将将梯度扩展为次梯度。
次导数和次微分
∙
\bullet
∙ 为了处理不平滑的函数,扩展导数的表示,定义一个凸函数f在
x
0
x_{0}
x0处的次导数为一个标量,使得
f
(
x
)
−
f
(
x
0
)
>
=
g
(
x
−
x
0
)
,
∀
x
∈
τ
f(x) - f(x_0) >= g(x - x_0), \forall x \in \tau
f(x)−f(x0)>=g(x−x0),∀x∈τ 上式中的右端的
g
(
x
−
x
0
)
g(x - x_0)
g(x−x0),g与
(
x
−
x
0
)
(x-x_0)
(x−x0)之间看起来应是乘积关系,而不是函数表示,整个式子可变换为
f
(
x
)
−
f
(
x
0
)
(
x
−
x
0
)
>
=
g
\frac{f(x) - f(x_0) }{(x - x_0)} >= g
(x−x0)f(x)−f(x0)>=g,但这个式子会与下面介绍导的通过极限求次导数区间的结果矛盾,具体现象是:若根据极限方法求出次导数的区间是[-1,1],这说明-0.5也在这个区间内,但将相关值代入变换后式子得到的结果却是
−
1
>
=
−
0.5
-1>=-0.5
−1>=−0.5,这显然是不成立的,那么上式中的g与
(
x
−
x
0
)
(x-x_0)
(x−x0)之间又应该是什么关系呢?
∙
\bullet
∙ 其中
τ
\tau
τ为包含
x
0
x_{0}
x0的某各区间。
∙
\bullet
∙ 如下图所示,对于定义域中的任何
x
0
x_{0}
x0,我们总可以作出一条直线通过点
(
x
0
,
f
(
x
0
)
)
(x_{0}, f(x_{0}))
(x0,f(x0)),且直线要么接触
f
f
f,要么在它的下方,该直线的斜率称为函数的次导数,显然这样的直线可能会有很多条。
∙
\bullet
∙ 次导数的集合为函数
f
f
f在
x
0
x_{0}
x0处的次微分,记为
∂
f
(
x
0
)
\partial f(x_{0})
∂f(x0);微积分中的导数和微分又是什么关系呢?
∙
\bullet
∙ 定义次导数为集合区间[a,b];
a
=
lim
x
→
x
0
−
f
(
x
)
−
f
(
x
0
)
x
−
x
0
;
b
=
lim
x
→
x
0
+
f
(
x
)
−
f
(
x
0
)
x
−
x
0
a=\lim_{x\rightarrow x_{0}^-} \frac{f(x) - f(x_0)}{x - x_0}; b=\lim_{x\rightarrow x_{0}^+} \frac{f(x) - f(x_0)}{x - x_0}
a=x→x0−limx−x0f(x)−f(x0);b=x→x0+limx−x0f(x)−f(x0)
次梯度
∙
\bullet
∙ 例:对凸函数
f
(
x
)
=
∣
x
∣
f(x) = |x|
f(x)=∣x∣,其次微分如下
∂
f
(
x
)
=
{
−
1
i
f
(
x
<
0
)
[
−
1
,
+
1
]
i
f
(
x
=
0
)
1
i
f
(
x
>
0
)
\partial f(x) = \begin{cases} {-1}\space\space\space\space\space\space\space\space\space\space\space\space if(x<0) \\ [-1,+1] \space\space\space if(x=0) \\ 1\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space if(x>0) \end{cases}
∂f(x)=⎩
⎨
⎧−1 if(x<0)[−1,+1] if(x=0)1 if(x>0) 当函数在
x
0
x_{0}
x0处可导时,次微分只包含一个次导数,这个次导数就是函数在
x
0
x_{0}
x0处的导数。Python可用numpy.sign函数实现绝对值函数的次梯度。
∙
\bullet
∙通过求函数在某个点每个分量的次微分,可以求出函数在该点的次梯度。
∙
\bullet
∙最优解条件:
0
∈
∂
f
(
x
∗
)
0 \in \partial f(x^*)
0∈∂f(x∗) <=>
f
(
x
∗
)
=
m
i
n
f
(
x
)
f(x^*) = min f(x)
f(x∗)=minf(x),即当且仅当0属于f在
x
∗
x^*
x∗处次梯度集合时,
x
∗
x^*
x∗为极值点。不要被这里的
x
∗
x^*
x∗所迷惑,其实就是类似于
x
1
x_1
x1,表示一个特定的
x
x
x。
对于多元函数的特定一个点,各偏导数组成的向量就是梯度,每个分量的所有次导数组成一个次微分,各分量的次微分组成次梯度。
次梯度算法
∙
\bullet
∙ 将梯度下降中的梯度换成次梯度,就得到次梯度法
次梯度包含多个变量对应的分量,也就是次微分,次微分是一个集合,那么次梯度法应选取集合中的哪个值作为更新量呢?
∙
\bullet
∙ 与梯度下降算法不同,次梯度法并不是下降算法,每次对参数的更新,并不能保证目标函数单调递减。
∙
\bullet
∙ 因此一般情况下我们选择:
f
(
x
∗
)
=
m
i
n
i
,
.
.
.
,
t
f
(
x
t
)
f(x^*) = min_{i,...,t} f(x^t)
f(x∗)=mini,...,tf(xt)老师原话,如果进行了t次,选择t次中最小的函数值。这个应该是说,进行了t次更新后,从t次中选择最小的哪个函数值,那么问题来了,由 于不会严格下降,也是从t次中选择最小,那么迭代停止的条件是不是就只能是达到一定的次数,而不是函数值不再变小?
∙
\bullet
∙ 虽然不能保证每次梯度法中目标函数单调下降,可以证明对满足一定条件的凸函数,次梯度法是收敛的,只是收敛速度比梯度下降法慢。
坐标轴下降法
∙
\bullet
∙ 次梯度法收敛速度慢,Lasso推荐使用坐标轴下降法。
∙
\bullet
∙ 坐标轴下降法:沿坐标轴方向搜索
∙
\bullet
∙ 在每次迭代中,在当前点处沿着一个坐标轴方向进行一维搜索。
∙
\bullet
∙ 循环使用不同的坐标轴,一个周期的一位搜索迭代过程相当于一个梯度迭代。
∙
\bullet
∙ 利用当前坐标系统进行搜索,无需计算目标函数的导数,只按照某一坐标方向进行搜索最小值。
∙
\bullet
∙ 梯度下降法是沿目标函数负梯度的方向搜索,梯度方向通常不与任何坐标轴平行。
∙
\bullet
∙ 坐标轴下降法在稀疏矩阵上的计算速度特别快。为什么?
还是无法理解如何下降的?沿着一个坐标轴方向进行一维搜索,并循环使用不同的坐标,那么如何进行一维搜索?搜索一次,还是多次?搜索到什么时候,开始使用其它不同的坐标?在图像上的效果跟吴恩达梯度下降的那个下山的效果有什么异同?
Lasso的坐标轴下降法求解
∙
\bullet
∙ Lasso的目标函数为:
J
(
w
)
=
∣
∣
y
−
X
w
∣
∣
2
2
+
λ
∣
∣
w
∣
∣
1
J(\mathbf w) = ||\mathbf y - X\mathbf w ||_2^2 + \lambda||\mathbf w||_1
J(w)=∣∣y−Xw∣∣22+λ∣∣w∣∣1。突然想到一个问题,线性回归模型的一种写法是
w
T
X
\mathbf w^TX
wTX,应从矩阵向量元素细节上观察一下与
X
w
X\mathbf w
Xw这种写法的区别。
∙
\bullet
∙ 坐标轴下降法:每次搜索一个维度
∙
\bullet
∙ 对第j维,目标函数第一部分为残差平方和
R
S
S
(
w
)
RSS(\mathbf w)
RSS(w)
∂
∂
w
j
R
S
S
(
w
)
=
∂
∂
w
j
∑
i
=
1
N
(
y
i
−
(
w
−
j
T
x
i
,
−
j
+
w
j
x
i
j
)
)
2
\frac{\partial}{\partial w_{j}}RSS(\mathbf w) = \frac{\partial}{\partial w_{j}} \sum_{i=1}^{N} (y_{i} - (\mathbf w_{-j}^T\mathbf x_{i,-j} + \mathbf w_{j}\mathbf x_{ij}))^2
∂wj∂RSS(w)=∂wj∂i=1∑N(yi−(w−jTxi,−j+wjxij))2
=
−
2
∑
i
=
1
N
(
y
i
−
w
−
j
T
x
i
,
−
j
−
w
j
x
i
j
)
∗
x
i
j
= -2\sum_{i=1}^{N}(y_{i} - \mathbf w_{-j}^T\mathbf x_{i,-j} - \mathbf w_{j}\mathbf x_{ij}) * \mathbf x_{ij}
=−2i=1∑N(yi−w−jTxi,−j−wjxij)∗xij
=
2
∑
i
=
1
N
x
i
j
2
w
j
−
2
∑
i
=
1
N
(
y
i
−
w
−
j
T
x
i
,
−
j
)
∗
x
i
j
= 2\sum_{i=1}^{N}\mathbf x_{ij}^2\mathbf w_{j} - 2\sum_{i=1}^{N}(y_{i} - \mathbf w_{-j}^T\mathbf x_{i,-j}) * \mathbf x_{ij}
=2i=1∑Nxij2wj−2i=1∑N(yi−w−jTxi,−j)∗xij 令上式第一项中的
2
∑
i
=
1
N
x
i
j
2
=
a
j
2\sum_{i=1}^{N}x_{ij}^2 = a_{j}
2∑i=1Nxij2=aj,减号右边的
(
y
i
−
w
−
j
T
x
i
,
−
j
)
∗
x
i
j
(y_{i} - \mathbf w_{-j}^T\mathbf x_{i,-j}) * \mathbf x_{ij}
(yi−w−jTxi,−j)∗xij可看作第j维特征与残差的相关性,其中该残差是去掉第j维特征后其他特征得到的预测的残差,令
2
∑
i
=
1
N
(
y
i
−
w
−
j
T
x
i
,
−
j
)
∗
x
i
j
=
c
j
2\sum_{i=1}^{N}(y_{i} - \mathbf w_{-j}^T\mathbf x_{i,-j}) * \mathbf x_{ij} = c_{j}
2∑i=1N(yi−w−jTxi,−j)∗xij=cj,那么上式可变换为
a
j
w
j
−
c
j
a_{j}w_{j} - c_{j}
ajwj−cj -j表示去掉第j维
解析求解或梯度下降那一节,有将OLS(残差平方和)按照矩阵形式进行求导的过程,本解是非矩阵求导,这两个过程及结果应能有一定的联系,有时间时可以观察一下
∙
\bullet
∙ 第j维对应目标函数的次梯度为:
∂
w
j
J
(
w
,
λ
)
=
(
a
j
w
j
+
c
j
)
+
λ
∂
w
j
∣
∣
w
∣
∣
1
\partial_{w_{j}}J(\mathbf w,\lambda) = (a_{j}w_{j} + c_{j}) + \lambda\partial_{w_{j}}||\mathbf w||_{1}
∂wjJ(w,λ)=(ajwj+cj)+λ∂wj∣∣w∣∣1
=
{
a
j
w
j
−
c
j
−
λ
i
f
(
w
j
<
0
)
[
−
c
j
−
λ
,
−
c
j
+
λ
]
i
f
(
w
j
=
0
)
a
j
w
j
−
c
j
+
λ
i
f
(
w
j
>
0
)
=\begin{cases} a_{j}w_{j} - c_{j} - \lambda \space\space\space\space\space\space\space\space\space\space\space if\space(w_{j} < 0) \\ [-c_{j} - \lambda, -c_{j} + \lambda] \space\space\space if\space(w_{j} = 0) \\ a_{j}w_{j} - c_{j} + \lambda \space\space\space\space\space\space\space\space\space\space if\space(w_{j} > 0) \end{cases}
=⎩
⎨
⎧ajwj−cj−λ if (wj<0)[−cj−λ,−cj+λ] if (wj=0)ajwj−cj+λ if (wj>0)
∙
\bullet
∙ 根据解条件:
0
∈
∂
w
j
J
(
w
)
0 \in \partial_{w_{j}}J(\mathbf w)
0∈∂wjJ(w),令上式为0可得
w
^
j
(
c
j
)
=
{
(
c
j
+
λ
)
/
a
j
i
f
(
c
j
<
−
λ
)
0
i
f
(
c
j
∈
[
−
λ
,
λ
]
)
(
c
j
−
λ
)
/
a
j
i
f
(
c
j
>
λ
)
\hat w_{j}(c_{j}) = \begin{cases} (c_{j} + \lambda)/a_{j} \space\space \space\space if(c_{j} < -\lambda) \\0 \space\space \space\space \space\space \space\space \space\space \space\space \space\space \space\space \space\space \space\space \space\space if(c_{j} \in [-\lambda,\lambda]) \\(c_{j} - \lambda)/a_{j} \space\space\space\space\space if(c_{j} > \lambda) \end{cases}
w^j(cj)=⎩
⎨
⎧(cj+λ)/aj if(cj<−λ)0 if(cj∈[−λ,λ])(cj−λ)/aj if(cj>λ)
Lasso坐标轴下降算法步骤
∙
\bullet
∙ 上张PPT里的
c
j
c_{j}
cj计算公式形式,跟前边推导出的形式不太一样,是不是这里写错了?检查过视频里的形式,好像就是写错了。
∙
\bullet
∙ 在上一张PPT里,老师曾讲到,如果特征与预测残差(注意:该残差的计算公式里缺少这句话里提到的那一维特征)很相关,那说明将特征加入计算预测残差(也可以理解为加入到模型里)的公式里,会引起残差较大的变化,这个时候的
w
j
w_{j}
wj就不能为0,而弱相关时,说明将特征加入计算预测残差的公式里,不会引起残差的太大变化,这个时候就可以让
w
j
w_{j}
wj为0。这也是L1正则能产生稀疏解的原因。字面逻辑理解,但数理逻辑应如何理解呢?在相关性弱的情况下,如果将那一维特征加入残差或模型里,会不会正好导致相关性增加呢?如果会,那说明这一维特征还是很重要,不能为0?衡量相关性的协方差公式为
C
o
v
(
X
,
Y
)
=
E
[
(
X
−
E
(
X
)
)
∗
(
Y
−
E
(
Y
)
)
]
Cov(X,Y) = E[(X - E(X)) * (Y - E(Y))]
Cov(X,Y)=E[(X−E(X))∗(Y−E(Y))],其中的
E
(
X
)
、
E
(
Y
)
E(X)、E(Y)
E(X)、E(Y)可以理解为均值,但计算
c
j
c_{j}
cj公式里的相关性,却没有减去这均值,那么是否可以理解为这里相关性的基点是0?在E的计算里,需要乘以概率,但计算
c
j
c_{j}
cj公式的相关性里也缺少乘以概率的部分,那么这是否是说,没有乘以概率,即是各自出现的概率相同,各自当作权重相同的方式去处理,也能在一定程度上代表相关性?后文有协方差及相关系数的截图。
∙
\bullet
∙ 根据上一段所述,特征与预测残差弱相关时,参数
w
j
w_{j}
wj为0。从公式上来看,是当
c
j
∈
[
−
λ
,
+
λ
]
c_{j} \in [-\lambda, +\lambda]
cj∈[−λ,+λ]时,参数
w
j
w_{j}
wj为0,不为0时的
c
j
c_{j}
cj绝对值均大于
λ
\lambda
λ,也即是说,从公式的角度上来说,
c
j
c_{j}
cj绝对值较小时,参数为0,正好“与相关性弱时参数为0”吻合。从计算
c
j
c_{j}
cj的公式上来看,当
λ
\lambda
λ较大时,
w
j
w_{j}
wj就比较容易为0,当
λ
\lambda
λ大到一定程度时,所有的
w
w
w就会都为0。前面讲正则的时候也提到过,
λ
\lambda
λ与
w
w
w呈反比,这个现象正好与此处的现象吻合,好像当
w
j
w_{j}
wj为负时,这个现象就不吻合了,因为从求
c
j
c_{j}
cj的公式里看起来,
λ
\lambda
λ是与
w
j
w_{j}
wj的绝对值呈反比?回答:查看了过拟合的笔记,
λ
\lambda
λ就是与
w
j
w_{j}
wj的绝对值呈反比。
∙
\bullet
∙ 上段提到当
λ
\lambda
λ大到一定值后,所有的
w
w
w就都会为0,那么这个值究竟时多大呢?根据老师讲解,其计算方式为:假设所有
w
w
w都为0,那么预测值
y
^
\hat y
y^为0,那么残差就是真值
y
y
y,进一步相关性就应该是第j维特征值直接与真值相乘,也就是上张图片左下角的公式。在实现这样逻辑的算法里,当数据集一给定,搜索
λ
\lambda
λ的最大值也就确定了,sklearn里的Lasso好像就是这样的(这一段老师说的不是很好理解,所以这里用的是好像)。不理解为什么是这样计算的?根据计算公式,该最大值应该是每一维特征(每一个w)都对应一个最大值吧?根据公式中有一个max函数来看,可能确实是每一维都有一个最大值。正则不对截距项惩罚,考虑到这个问题,预测值为什么依然为0呢?截距项是否也对应一个最大值?
∙
\bullet
∙ 根据坐标轴下降的步骤可知,迭代过程中,并不是用上一轮的w减去一个数值得到本轮的w,而是由上一轮的w直接计算出本轮的w。
sklearn中的Lasso
sklearn.linear_model.lasso(…)
selection:选择特征权重的更新方式,可选项有:‘cyclic’(循环更新,从坐标轴1到D,再从1到D),‘random’(随即选择特征进行更新,通常收敛更快,尤其当参数tol />
1
0
−
4
10^{-4}
10−4时)这说明坐标轴迭代有多种方式