逻辑回归面试准备
逻辑回归
分类模型,并常用于二分类。假定数据服从Logistic分布,利用极大似然估计来估计模型的参数W,b(W为权重,b为偏置,有时也将b作为W矩阵的一部分)。最后根据确定的阈值,利用训练得到的参数计算概率进行二分类,也可利用softmax函数推广到多分类。
原理
大佬的总结:逻辑回归的常见面试点总结
逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。
Logistic 分布
分布函数
F
(
x
)
=
P
(
X
≤
x
)
=
1
1
+
e
−
(
x
−
μ
)
/
γ
F(x) = P( X \leq x) = \frac{1}{1+e^{-(x-\mu)/\gamma}}
F(x)=P(X≤x)=1+e−(x−μ)/γ1
密度函数
f
(
x
)
=
F
′
(
x
)
=
e
−
(
x
−
μ
)
/
γ
γ
(
1
+
e
−
(
x
−
μ
)
/
γ
)
2
f(x) = F'(x)=\frac{e^{-(x-\mu)/\gamma}}{\gamma(1+e^{-(x-\mu)/\gamma})^2}
f(x)=F′(x)=γ(1+e−(x−μ)/γ)2e−(x−μ)/γ
Logistic 回归模型
分类模型,由
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X) 表示,通过监督学习的方式估计参数。
两个假设:
- 数据服从伯努利分布:
p
(
y
=
1
)
+
p
(
y
=
0
)
=
1
p(y=1)+p(y=0)=1
p(y=1)+p(y=0)=1
-
P
(
y
=
1
∣
x
)
=
e
x
p
(
−
w
T
x
−
b
)
1
+
e
x
p
(
−
w
T
x
−
b
)
P(y=1|\mathbf{x})=\frac{exp(\mathbf{-w^{T}x-b})}{1+exp(\mathbf{-w^{T}x-b})}
P(y=1∣x)=1+exp(−wTx−b)exp(−wTx−b)
P
(
y
=
1
∣
x
)
=
1
1
+
e
x
p
(
−
w
T
x
−
b
)
,
P
(
y
=
0
∣
x
)
=
e
x
p
(
−
w
T
x
−
b
)
1
+
e
x
p
(
−
w
T
x
−
b
)
P(y=1|\mathbf{x})=\frac{1}{1+exp(\mathbf{-w^{T}x-b})},\\P(y=0|\mathbf{x})=\frac{exp(\mathbf{-w^{T}x-b})}{1+exp(\mathbf{-w^{T}x-b})}
P(y=1∣x)=1+exp(−wTx−b)1,P(y=0∣x)=1+exp(−wTx−b)exp(−wTx−b)
w
,
b
\mathbf{w,b}
w,b 合为
θ
\theta
θ,
P
(
y
=
1
∣
x
,
θ
)
=
h
θ
(
x
)
,
P
(
y
=
0
∣
x
,
θ
)
=
1
−
h
θ
(
x
)
P(y=1|\mathbf{x}, \theta)=h_{\theta}(\mathbf{x}),\\ P(y=0|\mathbf{x}, \theta)=1-h_{\theta}(\mathbf{x})
P(y=1∣x,θ)=hθ(x),P(y=0∣x,θ)=1−hθ(x)
合并可得,
P
(
y
∣
x
,
θ
)
=
h
θ
(
x
)
y
(
1
−
h
θ
(
x
)
)
1
−
y
P(y|\mathbf{x}, \theta)=h_{\theta}(\mathbf{x})^{y}(1-h_{\theta}(\mathbf{x}))^{1-y}
P(y∣x,θ)=hθ(x)y(1−hθ(x))1−y
几率
几率:一个事件的几率是指该事件发生的概率和不发生的概率之比。对于二分类问题而言,若事件发生的标签为1,则几率是
p
(
y
=
1
)
/
p
(
y
=
0
)
p(y=1)/p(y=0)
p(y=1)/p(y=0),对数几率为:
l
n
p
(
y
=
1
)
1
−
p
(
y
=
1
)
=
l
n
(
e
x
p
(
−
w
T
x
−
b
)
)
=
−
w
T
x
−
b
ln\frac{p(y=1)}{1-p(y=1)}=ln(exp(\mathbf{-w^{T}x}-b)) = -\mathbf{w^{T}x}-b
ln1−p(y=1)p(y=1)=ln(exp(−wTx−b))=−wTx−b
也就是说,输出
y
=
1
y=1
y=1,即标签为1的事件对数几率是由输入
x
\mathbf{x}
x的线性函数表示模型,即逻辑回归模型。
令
σ
=
w
T
x
+
b
\sigma = \mathbf{w^{T}x}+b
σ=wTx+b,当线性函数
σ
\sigma
σ的值趋于正无穷,
p
(
y
=
1
)
p(y=1)
p(y=1)的值趋于1;当线性函数
σ
\sigma
σ的值趋于负无穷,
p
(
y
=
1
)
p(y=1)
p(y=1)的值趋于0。那么,我们所希望得到的逻辑回归模型(参数
θ
\theta
θ :
{
w
,
b
}
\{\mathbf{w}, b\}
{w,b})是:当已知标签为1时,
σ
=
w
T
x
+
b
\sigma = \mathbf{w^{T}x}+b
σ=wTx+b 趋于正无穷;当已知标签为0时,
σ
=
w
T
x
+
b
\sigma = \mathbf{w^{T}x}+b
σ=wTx+b 趋于负无穷。
转自【机器学习】逻辑回归(非常详细)
在这我们思考个问题,我们使用对数几率的意义在哪?通过上述推导我们可以看到 Logistic 回归实际上是使用线性回归模型的预测值逼近分类任务真实标记的对数几率,其优点有:
1.直接对分类的概率建模,无需实现假设数据分布,从而避免了假设分布不准确带来的问题;
2.不仅可预测出类别,还能得到该预测的概率,这对一些利用概率辅助决策的任务很有用;
3.对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。
损失函数
最大似然函数
假设数据各样本独立
X
=
{
x
(
1
)
,
x
(
2
)
,
x
(
3
)
,
.
.
.
,
x
(
m
)
}
X = \{\mathbf{x}^{(1)}, \mathbf{x}^{(2)}, \mathbf{x}^{(3)}, ..., \mathbf{x}^{(m)} \}
X={x(1),x(2),x(3),...,x(m)},
Y
=
{
y
(
1
)
,
y
(
2
)
,
y
(
3
)
,
.
.
.
,
y
(
m
)
}
Y = \{y^{(1)}, y^{(2)},y^{(3)},...,y^{(m)}\}
Y={y(1),y(2),y(3),...,y(m)}。
L
(
θ
)
=
p
(
Y
∣
X
;
θ
)
=
∏
i
=
1
m
p
(
y
(
i
)
∣
x
(
i
)
,
θ
)
=
∏
i
=
1
m
(
h
θ
(
x
(
i
)
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
(
1
−
y
(
i
)
)
L(\theta) = p(Y|X;\theta)=\prod_{i=1}^mp(y^{(i)}|\mathbf{x}^{(i)},\theta)=\prod_{i=1}^m(h_\theta(\mathbf{x}^{(i)}))^{y^{(i)}}(1-h_\theta(\mathbf{x}^{(i)}))^{(1-y^{(i)})}
L(θ)=p(Y∣X;θ)=i=1∏mp(y(i)∣x(i),θ)=i=1∏m(hθ(x(i)))y(i)(1−hθ(x(i)))(1−y(i))
X
∈
R
m
×
d
,
x
∈
R
d
×
1
,
Y
∈
R
m
×
1
,
θ
∈
R
d
×
1
,
m
:
样
本
数
,
d
:
特
征
数
X \in \mathbb{R}^{m\times d}, \quad \mathbf{x} \in\mathbb{R}^{d\times1},\quad Y \in \mathbb{R}^{m\times1}, \quad \theta\in\mathbb{R}^{d\times1},\quad m:样本数,\quad d:特征数
X∈Rm×d,x∈Rd×1,Y∈Rm×1,θ∈Rd×1,m:样本数,d:特征数
利用随机梯度下降求解最优值
对损失函数取对数:
l
(
θ
)
=
l
n
(
L
(
θ
)
)
=
∑
i
=
1
m
y
(
i
)
l
n
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
n
(
(
1
−
h
θ
(
x
(
i
)
)
)
)
l(\theta)=ln(L(\theta)) = \sum_{i=1}^m{y^{(i)}ln(h_\theta(\mathbf{x}^{(i)}))+(1-y^{(i)})ln((1-h_\theta(\mathbf{x}^{(i)})))}
l(θ)=ln(L(θ))=i=1∑my(i)ln(hθ(x(i)))+(1−y(i))ln((1−hθ(x(i))))
最优解为最小化损失函数,即最大化似然函数时的
θ
\theta
θ。
随机梯度下降:
θ
j
=
θ
j
−
α
∂
l
(
θ
)
∂
θ
j
\theta_j = \theta_j -\alpha\frac{\partial{l(\theta)}}{\partial \theta_j}
θj=θj−α∂θj∂l(θ)
其中,
α
\alpha
α 为学习率,求解:
∂
l
(
θ
)
∂
θ
j
=
(
∂
y
(
i
)
l
n
(
h
θ
(
x
(
i
)
)
)
∂
h
θ
(
x
(
i
)
)
+
∂
(
(
1
−
y
(
i
)
)
l
n
(
1
−
h
θ
(
x
(
i
)
)
)
)
∂
h
θ
(
x
(
i
)
)
)
⋅
∂
h
θ
(
x
(
i
)
)
∂
σ
⋅
∂
σ
∂
θ
j
\frac{\partial{l(\theta)}}{\partial \theta_j}=(\frac{\partial{y^{(i)}ln(h_\theta(\mathbf{x}^{(i)}}))}{\partial{h_\theta(\mathbf{x}^{(i)}})}+\frac{\partial{((1-y^{(i)})ln(1-h_\theta(\mathbf{x}^{(i)})))}}{\partial{h_\theta(\mathbf{x}^{(i)}})})\cdot\frac{\partial{h_\theta(\mathbf{x}^{(i)}})}{\partial{\sigma}}\cdot\frac{\partial \sigma}{\partial \theta_j}
∂θj∂l(θ)=(∂hθ(x(i))∂y(i)ln(hθ(x(i)))+∂hθ(x(i))∂((1−y(i))ln(1−hθ(x(i)))))⋅∂σ∂hθ(x(i))⋅∂θj∂σ
h
θ
(
x
(
i
)
)
=
1
1
+
e
−
σ
i
,
σ
i
=
θ
T
x
(
i
)
h_\theta(\mathbf{x}^{(i)})=\frac{1}{1+e^{-\sigma_i}},\quad \sigma_i = \theta^T\mathbf{x}^{(i)}
hθ(x(i))=1+e−σi1,σi=θTx(i)
∂
y
(
i
)
l
n
(
h
θ
(
x
(
i
)
)
)
∂
h
θ
(
x
(
i
)
)
=
y
(
i
)
∂
l
n
(
h
θ
(
x
(
i
)
)
)
∂
(
h
θ
(
x
(
i
)
)
)
=
y
(
i
)
h
θ
(
x
(
i
)
)
\frac{\partial{y^{(i)}ln(h_\theta(\mathbf{x}^{(i)}}))}{\partial{h_\theta(\mathbf{x}^{(i)}})}=\frac{y^{(i)}\partial{ln(h_\theta(\mathbf{x}^{(i)}}))}{\partial{(h_\theta(\mathbf{x}^{(i)}}))}=\frac{y^{(i)}}{h_\theta(\mathbf{x}^{(i)})}
∂hθ(x(i))∂y(i)ln(hθ(x(i)))=∂(hθ(x(i)))y(i)∂ln(hθ(x(i)))=hθ(x(i))y(i)
同理,
(
1
−
y
(
i
)
)
∂
l
n
(
1
−
h
θ
(
x
(
i
)
)
)
∂
h
θ
(
x
(
i
)
)
=
−
(
1
−
y
(
i
)
)
1
−
h
θ
(
x
(
i
)
)
\frac{(1-y^{(i)})\partial{ln(1-h_\theta(\mathbf{x}^{(i)}))}}{\partial{h_\theta(\mathbf{x}^{(i)}})}=-\frac{(1-y^{(i)})}{1-h_\theta(\mathbf{x}^{(i)})}
∂hθ(x(i))(1−y(i))∂ln(1−hθ(x(i)))=−1−hθ(x(i))(1−y(i))
∂
h
θ
(
x
(
i
)
)
∂
σ
i
=
e
−
σ
i
(
1
+
e
−
σ
i
)
2
=
1
1
+
e
−
σ
i
⋅
e
−
σ
i
1
+
e
−
σ
i
=
h
θ
(
x
(
i
)
)
(
1
−
h
θ
(
x
(
i
)
)
)
,
\frac{\partial{h_\theta(\mathbf{x}^{(i)}})}{\partial{ \sigma_i}}=\frac{e^{-\sigma_i}}{(1+e^{-\sigma_i})^2}=\frac{1}{1+e^{-\sigma_i}}\cdot\frac{e^{-\sigma_i}}{1+e^{-\sigma_i}}=h_\theta(\mathbf{x}^{(i)})(1-h_\theta(\mathbf{x}^{(i)})),
∂σi∂hθ(x(i))=(1+e−σi)2e−σi=1+e−σi1⋅1+e−σie−σi=hθ(x(i))(1−hθ(x(i))),
∂
σ
i
∂
θ
j
=
{
x
j
(
i
)
,
x
d
(
i
)
=
x
j
(
i
)
0
,
x
d
(
i
)
≠
x
j
(
i
)
\frac{\partial \sigma_i}{\partial \theta_j}=\left\{ \begin{aligned} &x^{(i)}_j, \quad & x^{(i)}_d=x^{(i)}_j \\ &0, \quad & x^{(i)}_d\neq x^{(i)}_j\\ \end{aligned} \right.
∂θj∂σi=⎩⎨⎧xj(i),0,xd(i)=xj(i)xd(i)=xj(i)
i
:
i:
i: 第
i
i
i 个样本,
j
:
j:
j: 第
j
j
j 个特征。
Sigmoid 函数求导公式:
f
(
z
)
=
1
1
+
e
−
z
,
f
′
(
z
)
=
f
(
z
)
(
1
−
f
(
z
)
)
f(z)=\frac{1}{1+e^{-z}},\quad f'(z)=f(z)(1-f(z))
f(z)=1+e−z1,f′(z)=f(z)(1−f(z))
综上,
∂
l
(
θ
)
∂
θ
j
=
(
y
(
i
)
h
θ
(
x
(
i
)
)
−
(
1
−
y
(
i
)
)
1
−
h
θ
(
x
(
i
)
)
)
⋅
h
θ
(
x
(
i
)
)
(
1
−
h
θ
(
x
(
i
)
)
)
⋅
x
j
(
i
)
=
y
(
i
)
−
h
θ
(
x
(
i
)
)
h
θ
(
x
(
i
)
)
(
1
−
h
θ
(
x
(
i
)
)
)
⋅
h
θ
(
x
(
i
)
)
(
1
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
=
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\frac{\partial{l(\theta)}}{\partial \theta_j}=(\frac{y^{(i)}}{h_\theta(\mathbf{x}^{(i)})}-\frac{(1-y^{(i)})}{1-h_\theta(\mathbf{x}^{(i)})}) \cdot h_\theta(\mathbf{x}^{(i)})(1-h_\theta(\mathbf{x}^{(i)})) \cdot x^{(i)}_j\\= \frac{y^{(i)}-h_\theta(\mathbf{x}^{(i)})}{h_\theta(\mathbf{x}^{(i)})(1-h_\theta(\mathbf{x}^{(i)}))}\cdot h_\theta(\mathbf{x}^{(i)})(1-h_\theta(\mathbf{x}^{(i)}))x^{(i)}_j=(y^{(i)}-h_\theta(\mathbf{x}^{(i)}))x^{(i)}_j
∂θj∂l(θ)=(hθ(x(i))y(i)−1−hθ(x(i))(1−y(i)))⋅hθ(x(i))(1−hθ(x(i)))⋅xj(i)=hθ(x(i))(1−hθ(x(i)))y(i)−hθ(x(i))⋅hθ(x(i))(1−hθ(x(i)))xj(i)=(y(i)−hθ(x(i)))xj(i)
∂
l
(
θ
j
)
∂
θ
j
=
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\frac{\partial{l(\theta_j )}}{\partial \theta_j } = (y^{(i)}-h_\theta(\mathbf{x}^{(i)}))x^{(i)}_j
∂θj∂l(θj)=(y(i)−hθ(x(i)))xj(i)
梯度更新公式可化为:
θ
j
=
θ
j
−
α
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\theta_j = \theta_j-\alpha(y^{(i)}-h_\theta(\mathbf{x}^{(i)}))x^{(i)}_j
θj=θj−α(y(i)−hθ(x(i)))xj(i)
选择最大似然函数作为损失函数的原因:
对最大似然函数取对数等价于对数损失函数。误差大的时候,权重更新快;误差小的时候,权重更新慢。
若选用均方误差MSE,求得梯度与sigmoid函数导数相关,sigmod函数在它在定义域内的梯度都不大于0.25,更新速度较慢。
令
P
(
y
∣
x
,
θ
)
=
f
(
x
,
θ
)
=
h
θ
(
x
)
y
(
1
−
h
θ
(
x
)
)
1
−
y
P(y|\mathbf{x}, \theta)=f(\mathbf{x}, \theta)=h_{\theta}(\mathbf{x})^{y}(1-h_{\theta}(\mathbf{x}))^{1-y}
P(y∣x,θ)=f(x,θ)=hθ(x)y(1−hθ(x))1−y,
l
M
S
E
=
(
y
−
f
(
x
,
θ
)
)
2
∂
l
M
S
E
∂
f
(
x
,
θ
)
=
2
(
y
−
f
(
x
,
θ
)
)
⋅
∂
f
(
x
,
θ
)
∂
θ
∂
f
(
x
,
θ
)
∂
θ
=
y
h
θ
(
x
)
y
−
1
∂
h
θ
(
x
)
∂
θ
⋅
(
1
−
h
θ
(
x
)
)
1
−
y
+
h
θ
(
x
)
y
(
1
−
y
)
(
1
−
h
θ
(
x
)
)
−
y
∂
(
1
−
h
θ
(
x
)
)
∂
θ
l_{MSE}=(y-f(\mathbf{x}, \theta))^2\\\frac{\partial l_{MSE}}{\partial f(\mathbf{x}, \theta)}=2(y- f(\mathbf{x}, \theta)) \cdot \frac{\partial f(\mathbf{x}, \theta)}{\partial \theta}\\ \frac{\partial f(\mathbf{x}, \theta)}{\partial \theta}=yh_{\theta}(\mathbf{x})^{y-1}\frac{\partial h_{\theta}(\mathbf{x})}{\partial \theta}\cdot(1-h_{\theta}(\mathbf{x}))^{1-y}+h_{\theta}(\mathbf{x})^{y}(1-y)(1-h_{\theta}(\mathbf{x}))^{-y}\frac{\partial (1-h_{\theta}(\mathbf{x}))}{\partial \theta}
lMSE=(y−f(x,θ))2∂f(x,θ)∂lMSE=2(y−f(x,θ))⋅∂θ∂f(x,θ)∂θ∂f(x,θ)=yhθ(x)y−1∂θ∂hθ(x)⋅(1−hθ(x))1−y+hθ(x)y(1−y)(1−hθ(x))−y∂θ∂(1−hθ(x))
h
θ
(
x
)
h_{\theta}(\mathbf{x})
hθ(x) 为Sigmoid函数,其梯度值
∈
[
0
,
0.25
]
\in [0, 0.25]
∈[0,0.25]。
优化
参考:
[1] 深度学习——优化器算法Optimizer详解
[2] 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解
常见术语:
名称 | 解释 |
---|---|
batch | 总数据样本的一个子样本集,每一个batch的大小为batch_size |
epoch | 用整个数据集训练一次模型成为一个epoch |
iteration | 使用一个batch对模型参数进行更新,BGD一次迭代等价于一次epoch |
批梯度下降 Batch Gradient Descent(BGD)
每一次迭代时使用所有样本来进行梯度的更新。即 batch_size = 原数据集大小
∂
l
(
θ
j
)
∂
θ
j
=
1
m
∑
i
=
1
m
[
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
]
\frac{\partial{l(\theta_j )}}{\partial \theta_j } = \frac{1}{m}\sum_{i=1}^m[(y^{(i)}-h_\theta(\mathbf{x}^{(i)}))x^{(i)}_j]
∂θj∂l(θj)=m1i=1∑m[(y(i)−hθ(x(i)))xj(i)]
优点:由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优,对于非凸函数可以收敛到局部极小值。
缺点:当数据量很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。且不能投入新的样本实时更新模型。
随机梯度下降
∂
l
(
θ
j
)
∂
θ
j
=
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
\frac{\partial{l(\theta_j )}}{\partial \theta_j } = (y^{(i)}-h_\theta(\mathbf{x}^{(i)}))x^{(i)}_j
∂θj∂l(θj)=(y(i)−hθ(x(i)))xj(i)
优点: 一次只用一个样本进行更新, batch_size = 1,没有冗余,速度比较快,并且可以新增样本。可能不需要用到所有的样本就找到最优解。
缺点:SGD的噪音较BGD要多,单个样本不能代表全体样本的趋势,使得SGD并不是每次迭代都向着整体最优化方向。所以虽然训练速度快,但是准确度下降,并不是全局最优。迭代次数较多,搜索方向比较盲目,震荡较为明显。
虽然包含一定的随机性,但是从期望上来看,它是等于正确的导数的,当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。且虽然迭代次数多,但很可能一次epoch就能达到最优,而BGD需要多次epoch,且每次迭代的计算量远大于SGD。
解释一下为什么SGD收敛速度比BGD要快:
答:这里我们假设有30W个样本,对于BGD而言,每次迭代需要计算30W个样本才能对参数进行一次更新,需要求得最小值可能需要多次迭代(假设这里是10);而对于SGD,每次更新参数只需要一个样本,因此若使用这30W个样本进行参数更新,则参数会被更新(迭代)30W次,而这期间,SGD就能保证能够收敛到一个合适的最小值上了。也就是说,在收敛时,BGD计算了 10×30W 次,而SGD只计算了 1×30W 次。
小批量梯度下降 Mini-Batch Gradient Descent (MBGD)
结合了 SGD 和BGD的优势,每次取n个样本进行参数更新,batch_size = n。
∂
l
(
θ
j
)
∂
θ
j
=
1
n
∑
i
i
+
n
[
(
y
(
i
)
−
h
θ
(
x
(
i
)
)
)
x
j
(
i
)
]
\frac{\partial{l(\theta_j )}}{\partial \theta_j } = \frac{1}{n}\sum_{i}^{i+n}[(y^{(i)}-h_\theta(\mathbf{x}^{(i)}))x^{(i)}_j]
∂θj∂l(θj)=n1i∑i+n[(y(i)−hθ(x(i)))xj(i)]
优点:可以降低参数更新时的方差,收敛更稳定,可以利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。
超参数设定值: n 一般取值在 50~256
缺点:(两大缺点)
1.不过 Mini-batch gradient descent 不能保证很好的收敛性,learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离。(有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小 learning rate,不过这个阈值的设定需要提前写好,这样的话就不能够适应数据集的特点。)对于非凸函数,还要避免陷于局部极小值处,或者鞍点处,因为鞍点周围的error是一样的,所有维度的梯度都接近于0,SGD 很容易被困在这里。(会在鞍点或者局部最小点震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动。)
2.SGD对所有参数更新时应用同样的 learning rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新。LR会随着更新的次数逐渐变小。
简而言之,MBGD相比SGD更为稳定,相比BGD收敛速度更快。但其性能受learning rate影响。
MBGD优化
补充阅读:深度学习中优化方法——momentum、Nesterov Momentum、AdaGrad、Adadelta、RMSprop、Adam
Momentum
当曲面的一个方向比另一个方向更陡时,在较缓方向上的抖动剧烈,如左图所示。优化原理:使梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。
SGD每次都会在当前位置上沿着负梯度方向更新(下降,沿着正梯度则为上升),并不考虑之前的方向梯度大小等等。而动量(moment)通过引入一个新的变量 v vv 去积累之前的梯度(通过指数衰减平均得到),得到加速学习过程的目的。
最直观的理解就是,若当前的梯度方向与累积的历史梯度方向一致,则当前的梯度会被加强,从而这一步下降的幅度更大。若当前的梯度方向与累积的梯度方向不一致,则会减弱当前下降的梯度幅度。
原论文公式 :
ν
t
=
γ
ν
t
−
1
+
α
▽
θ
J
(
θ
)
θ
t
=
θ
t
−
1
−
ν
t
\nu_t =\gamma\nu_{t-1}+\alpha\bigtriangledown_\theta J(\theta) \\ \theta_t = \theta_{t-1} - \nu_t
νt=γνt−1+α▽θJ(θ)θt=θt−1−νt
Ng 公开课:
V
d
W
=
β
V
d
W
+
(
1
−
β
)
d
W
V
d
b
=
β
V
d
b
+
(
1
−
β
)
d
b
W
=
W
−
α
V
d
W
,
b
=
b
−
α
V
d
b
V_{dW} = \beta V_{dW}+(1-\beta)dW\\ V_{db} = \beta V_{db}+(1-\beta)db\\ W=W-\alpha V_{dW}, \quad b=b-\alpha V_{db}
VdW=βVdW+(1−β)dWVdb=βVdb+(1−β)dbW=W−αVdW,b=b−αVdb
β
\beta
β 的值越大,则之前的梯度对现在的方向影响越大。
β
\beta
β一般取值为0.5, 0.9, 0.99。Ng推荐取值0.9。
Nesterov Accelerated Gradient
标准动量方法中添加了一个校正因子。
ν
t
=
γ
ν
t
−
1
+
α
▽
θ
J
(
θ
−
γ
ν
t
−
1
)
θ
t
=
θ
t
−
1
−
ν
t
\nu_t =\gamma\nu_{t-1}+\alpha\bigtriangledown_\theta J(\theta-\gamma\nu_{t-1}) \\ \theta_t = \theta_{t-1} - \nu_t
νt=γνt−1+α▽θJ(θ−γνt−1)θt=θt−1−νt
AdaGrad (Adaptive Gradient)
每次迭代的时候同时更新学习率。
G
t
=
G
t
−
1
+
▽
t
2
θ
t
=
θ
t
−
1
−
α
G
t
+
ε
⋅
▽
t
G_t = G_{t-1}+\bigtriangledown_t^2\\ \theta_t = \theta_{t-1} - \frac{\alpha}{\sqrt{G_t+\varepsilon}}\cdot \bigtriangledown_t
Gt=Gt−1+▽t2θt=θt−1−Gt+εα⋅▽t
α \alpha α 一般取0.01
优点:对于梯度较大的参数, G t G_t Gt 相对较大, α G t + ε \frac{\alpha}{\sqrt{G_t+\varepsilon}} Gt+εα则较小,意味着学习率会变得较小。而对于梯度较小的参数,则效果相反。这样就可以使得参数在平缓的地方下降的稍微快些,不至于徘徊不前。
缺点:由于是累积梯度的平方,到后面 G t G_t Gt累积的比较大,会导致梯度 α G t + ε → 0 \frac{\alpha}{\sqrt{G_t+\varepsilon}}\rightarrow 0 Gt+εα→0,导致梯度消失。
AdaDelta, RMSprop, Adam
AdaGrad 存在对于训练深度神经网络模型而言,从训练开始时累积梯度平方会导致学习率过早过量的减少的问题。依赖全局学习率。
AdaDelta: 用过去梯度的均方根RMS替换AdaGram学习率的分母:用
E
[
▽
2
]
t
+
ε
\sqrt{E[\bigtriangledown^2]_t+\varepsilon}
E[▽2]t+ε代替
G
t
+
ε
{\sqrt{G_t+\varepsilon}}
Gt+ε,其中
Δ
θ
t
=
−
α
R
M
S
[
▽
]
t
▽
t
R
M
S
[
▽
]
t
=
E
[
▽
2
]
t
=
β
E
[
▽
2
]
t
−
1
+
(
1
−
β
)
▽
t
2
θ
t
+
1
=
θ
t
−
R
M
S
[
Δ
θ
]
t
−
1
R
M
S
[
▽
]
t
▽
t
\Delta \theta_t=-\frac{\alpha}{RMS[\bigtriangledown]_t}\bigtriangledown_t \\RMS[\bigtriangledown]_t=E[\bigtriangledown^2]_t =\beta E[\bigtriangledown^2]_{t-1} +(1-\beta)\bigtriangledown^2_t \\ \theta_{t+1} = \theta_{t}-\frac{RMS[\Delta \theta]_{t-1}}{RMS[\bigtriangledown]_t}\bigtriangledown_t
Δθt=−RMS[▽]tα▽tRMS[▽]t=E[▽2]t=βE[▽2]t−1+(1−β)▽t2θt+1=θt−RMS[▽]tRMS[Δθ]t−1▽t
β
\beta
β 建议值为0.9,用
R
M
S
[
Δ
θ
]
t
−
1
RMS[\Delta \theta]_{t-1}
RMS[Δθ]t−1 代替全局学习率
α
\alpha
α:不用依赖于全局学习率
RMSprop:与AdaDelta相比仍依赖全局学习率。
R
M
S
[
▽
]
t
=
E
[
▽
2
]
t
=
β
E
[
▽
2
]
t
−
1
+
(
1
−
β
)
▽
t
2
θ
t
+
1
=
θ
t
−
α
E
[
▽
2
]
t
+
ε
▽
t
RMS[\bigtriangledown]_t=E[\bigtriangledown^2]_t =\beta E[\bigtriangledown^2]_{t-1} +(1-\beta)\bigtriangledown^2_t \\ \theta_{t+1} = \theta_t-\frac{\alpha}{\sqrt{E[\bigtriangledown^2]_t+\varepsilon}}\bigtriangledown_t
RMS[▽]t=E[▽2]t=βE[▽2]t−1+(1−β)▽t2θt+1=θt−E[▽2]t+εα▽t
β
\beta
β 建议值为0.9,
α
\alpha
α 建议值为0.001。在深度神经网络优化算法中有效且实用。
Adam:结合Momentum和AdaDelta/RMSprop,计算自适应学习率
相关文章:
- 深度学习最全优化方法总结比较
- 深度学习中优化方法——momentum、Nesterov Momentum、AdaGrad、Adadelta、RMSprop、Adam
- 深度学习——优化器算法Optimizer详解
面试常见问题(未完成内容待补充)
来自/补充阅读:
[1]: 逻辑回归面试问题
[2]: 逻辑回归的常见面试点总结
[3]: 机器学习-LR推导及与SVM的区别
[4]: 【机器学习】逻辑回归(非常详细)
[5]: 看完这篇,逻辑回归80%都懂了
[6]: Interpretable Machine Learning
LR优/缺点(总结[1],[3])
优点:
- 模型简单,易于解释,直观。通过训练得到的权重值反映了特征的重要性,输出是每个样本的概率分数,可直接通过阈值对概率进行分类。
- 资源占用小,尤其是内存。因为只需要存储各个维度的特征值。
- 训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。模型效果不错,可作为baseline。
缺点:
- 难以处理数据不均衡问题。当正负样本失衡时效果可能不如傻瓜分类。
- 模型准确率较低,难以处理非线性问题。
- 逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。
- sigmoid函数中间敏感,两端不敏感的问题?(暂时不清楚具体的影响体现在哪里)
数据中的高度相关特征与多次重复特征(来自于[1])
- 若目标(损失)函数最终收敛,则相关/重复特征不影响最终结果(得到的参数最优仍是全局最优)
但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。
- 去除相关/重复特征可加快收敛速度。
如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。其次是特征多了,本身就会增大训练的时间。
LR与SVM对比
二分类推广到多分类
若多分类问题允许类别重叠,即某个样本可同时属于两个类别,则将多分类问题化为多个二分类问题,通过one-vs-all:选取概率值最大的那个作为最终的分类结果;或one-vs-one(voting),N个类别两两训练一个分类器,获得N(N-1)给分类器,选择多数的结果。
若多分类问题要求严格互斥,引入softmax函数:
σ
(
z
j
)
=
e
z
j
∑
k
=
1
K
e
z
k
\sigma(z_j) = \frac{e^{z_j}}{\sum_{k=1}^Ke^{z_k}}
σ(zj)=∑k=1Kezkezj对应LR模型中,样本属于第i类的概率:
P
(
y
=
i
∣
x
;
θ
)
=
e
θ
i
T
x
∑
j
=
1
K
e
θ
j
T
x
P(y=i|\mathbf{x};\theta) = \frac{e^{\theta_i^T\mathbf{x}}}{\sum_{j=1}^{K}e^{\mathbf{\theta}_j^T\mathbf{x}}}
P(y=i∣x;θ)=∑j=1KeθjTxeθiTx
计算每个类别的概率,取最大值作为结果。
类别二分类损失函数:
l
(
θ
)
=
∑
i
=
1
m
y
(
i
)
l
n
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
n
(
(
1
−
h
θ
(
x
(
i
)
)
)
)
l(\theta)= \sum_{i=1}^m{y^{(i)}ln(h_\theta(\mathbf{x}^{(i)}))+(1-y^{(i)})ln((1-h_\theta(\mathbf{x}^{(i)})))}
l(θ)=i=1∑my(i)ln(hθ(x(i)))+(1−y(i))ln((1−hθ(x(i))))
J
(
θ
)
=
−
1
m
∑
i
=
1
m
[
∑
j
=
1
K
I
{
y
(
i
)
=
j
}
l
o
g
e
θ
j
T
x
∑
l
=
1
K
e
θ
l
T
x
]
J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}\bigg [\sum_{j=1}^{K}I\{y^{(i)}=j\}log\frac{e^{\theta_j^T\mathbf{x}}}{\sum_{l=1}^{K}e^{\mathbf{\theta}_l^T\mathbf{x}}}\bigg]
J(θ)=−m1i=1∑m[j=1∑KI{y(i)=j}log∑l=1KeθlTxeθjTx]
用符号函数
I
(
y
(
i
)
=
j
)
I(y^{(i)}=j)
I(y(i)=j),仅当
y
(
i
)
y^{(i)}
y(i) 属于
j
j
j 类时函数值为1,否则为0。
利用梯度下降求解:
▽
θ
j
(
J
(
θ
)
)
=
−
1
m
∑
i
=
1
m
[
x
(
i
)
⋅
(
I
{
y
(
i
)
=
j
}
−
y
j
^
)
]
\bigtriangledown_{\theta_j}(J(\theta)) = -\frac{1}{m}\sum_{i=1}^m[\mathbf{x}^{(i)}\cdot(I\{y^{(i)}=j\}-\hat{y_j})]
▽θj(J(θ))=−m1i=1∑m[x(i)⋅(I{y(i)=j}−yj^)]
过程与二分类梯度下降解法类似,推导可参考:LR多分类推广 - Softmax回归