目录
1、直男 线性回归
2、海王logistic,被掰弯的线性回归
3、海王征服的妹子
3.1 Word2Vector
3.2 XGBoost
3.3 深度学习中的sigmod
摘要
本文将要讲述的内容是多个机器学习方法推导的一些共通之处,虽涉及到算法的推导,但还是希望能尽量轻松愉快的讲解,并且能够帮助大家,将这几个算法的推导,更加系统化的理解。
本文主要将要讲到的几个机器学习的方法包括线性回归、logstic回归、XGBoost、Word2Vector以及深度学习等一系列方法的推导以及他们在推导中的共通之处。可能这里提到的内容,很多大神都有提到过,没有关系,可以再次温习一下。
1、直男 线性回归
以前学习的时候,就有大神跟我说过,机器学习,得线性着得天下,现在想来,机器学习就是线性到非线性的过程,线性学好了,从线性到非线性的演变自然就能通了。线性与非线性的概念,这里简单的介绍下:在二维空间,能够被一条直线分开的数据,叫线性可分,而这条直线就是线性函数,有意思的是,二维空间线性不可分的数据,在三维或更高维可能可以线性可分,从这一点说,线性与非线性貌似是维度的压制。
线性回归,说的就是,不管多少维,用来学习的就是一个线性函数,函数为:
F ( X ) = W T X + b F(X)= \mathbf{W^TX+b} F(X)=WTX+b
通俗的解释下这个应用场景,比如说,有这样一批数据,对于每一个数据,有 m m m个对房价的影响因素,写成一个向量 x i x_i xi,然后经过调查,知道 x i x_i xi 情况下,房价就是 y i y_i yi 元。如果搜集很 n n n组数据数据,也就是 i = 1 , 2 , 3 , . . . , n i=1, 2, 3, ..., n i=1,2,3,...,n,得到 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } D=\{(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)\} D={(x1,y1),(x2,y2),...,(xn,yn)},写成向量的形式 D = { ( X , Y ) } D =\{(X, Y)\} D={(X,Y)},其中 X = ( x 1 , x 2 , . . . , x n ) X=(x_1, x_2, ..., x_n) X=(x1,x2,...,xn), Y = ( y 1 , y 2 , y 3 , . . . , y n ) Y=(y_1,y_2,y_3, ..., y_n) Y=(y1,y2,y3,...,yn),接下来简单的说明求解过程。
根据最小错误准则,算法预测的数据与实际的数据之间的差距,应该约小越好,在进经典的线性回归中,使用的 loss function 是均方误差:
L ( W ) = 1 2 ( F ( X ) − Y ) 2 L(W) = \frac{1}{2}(F(X)-Y)^2 L(W)=21(F(X)−Y)2
很明显, L ( W ) L(W) L(W) 为凸函数,可以求导试试:
∂ L ( W ) ∂ W = X T X W − X T Y \frac{\partial L(W)}{\partial W} = \mathbf{X^TXW-X^TY} ∂W∂L(W)=XTXW−XTY
如果 X T X X^TX XTX 的逆存在,就可以直接求得最优解:
W = ( X T X ) − 1 X T Y \mathbf{W} = \mathbf{(X^TX)^{-1}X^TY} W=(XTX)−1XTY
对于 X T X X^TX XTX不可逆的情况,可以使用梯度下降或加一个 λ I \lambda I λI向量来求解,其中 0 < λ < 1 0< \lambda < 1 0<λ<1, I I I为单位矩阵。如果有小伙伴对于线性回归感兴趣,或者觉得以上讲解过于简单,没有弄清楚,可以参照我的另外一篇博文机器学习:线性回归(Linear Regression)
2、海王logistic,被掰弯的线性回归
线性回归的推导过程,其实跟logistic回归的推导过程并不一样,这也是在线性回归的时候,粗略带过,直男的待遇,不是特别重视。但是,logistic回归就是基于它来的,每一个海王都有青涩的曾经,一定是受了挫折,预测和分类都不达标,只能改变自己,线性崛起,被迫掰弯自己,华丽转身成logistic回归。
这里用logistic来解决分类问题,模型训练成功后,输出给定样本特征及模型超参数的情况下,属于某类别的概率。经典案例,二分类问题,如果事件
A
A
A发生的概率为
P
A
P_A
PA,那么事件
A
A
A不发生的概率就是
1
−
P
A
1-P_A
1−PA,判断的时候,可以用比
P
A
1
−
P
A
\frac{P_A}{1-P_A}
1−PAPA
这个公式是有名字的哦,它叫事件发生的几率(大概就是我们通俗的说,这个事情发生的机率挺大的“几率”),几率
>
1
>1
>1,认为事件会发生,反之,认为事件不发生。对几率取对数,得到
l
n
P
A
1
−
P
A
ln\frac{P_A}{1-P_A}
ln1−PAPA就是对数几率了,假设我们用线性模型来回归对数几率的值为
f
(
x
)
=
w
x
+
b
=
l
n
P
A
1
−
P
A
f(x) =wx+b=ln \frac{P_A}{1-P_A}
f(x)=wx+b=ln1−PAPA
求解可得
F
(
x
)
=
P
A
=
e
f
(
x
)
1
+
e
f
(
x
)
=
1
1
+
e
−
f
(
x
)
=
1
1
+
e
−
(
w
x
+
b
)
F(x)=P_A=\frac{e^{f(x)}}{1+e^{f(x)}}=\frac{1}{1+e^{-f(x)}}=\frac{1}{1+e^{-(wx+b)}}
F(x)=PA=1+ef(x)ef(x)=1+e−f(x)1=1+e−(wx+b)1
看到这个公式,我们是不是很熟悉,对的,这就是logistic(概率分布函数),也就是它把线性函数给掰弯了,上个图展示下:
现在,需要求的是一个时间发生的概率,要学的参数还是线性函数中的
w
,
b
w,b
w,b,那是不是还是按照之前的最小错误率准则构造最小均方误差的loss function呢?回答这个问题之前,先把问题定义清楚。假设有一堆事情,其表示为
(
x
i
,
y
i
)
(x_i, y_i)
(xi,yi),其中
i
=
1
,
2
,
3
,
.
.
.
,
n
i=1, 2, 3, ..., n
i=1,2,3,...,n;
x
i
x_i
xi是一组判断事件发生与否的已知因素,比如判断一个程序员是否有女朋友的时候,可以总结这个小伙跟女生交流是否脸红(小伙,都红过吧),是否常洗澡换衣…, 假设已知因素很多,有
m
m
m个,然后
y
i
y_i
yi就表示该小伙有没有女友的事实了,
y
i
=
1
y_i=1
yi=1表示有,
y
i
=
0
y_i=0
yi=0就是没有。然后,经过某些有心人士的搜集,就有了一批数据
D
=
(
X
,
Y
)
D=(X,Y)
D=(X,Y),也就是说 上述的
i
=
1
,
2
,
.
.
.
,
n
i=1,2, ..., n
i=1,2,...,n,也就是
X
=
(
x
1
,
x
2
,
.
.
.
,
x
n
)
,
Y
=
(
y
1
,
y
2
,
.
.
.
,
y
n
)
X=(x_1, x_2, ..., x_n), Y=(y_1, y_2, ..., y_n)
X=(x1,x2,...,xn),Y=(y1,y2,...,yn)。
数据有了,如果用均方误差函数,这loss function为:
L
(
W
)
=
1
2
∑
i
=
1
n
(
F
(
x
i
)
−
y
i
)
2
=
1
2
∑
i
=
1
n
(
1
1
+
e
−
(
w
i
x
i
+
b
)
−
y
i
)
2
\begin{aligned} L(W) &= \frac{1}{2}\sum_{i=1}^{n}(F(x_i)-y_i)^2 \\ &= \frac{1}{2}\sum_{i=1}^{n}(\frac{1}{1+e^{-(w_ix_i+b)}}-y_i)^2 \end{aligned}
L(W)=21i=1∑n(F(xi)−yi)2=21i=1∑n(1+e−(wixi+b)1−yi)2
什么都不说了,无脑求导呗
∂ L ( w ) ∂ w = ∑ i = 1 n ( F ( x i ) − y i ) ( 1 − F ( x i ) ) F ( x i ) ( − x i ) \frac{\partial L(w)}{\partial w} = \sum_{i=1}^{n}{(F(x_i)-y_i)(1-F(x_i))F(x_i)(-x_i)} ∂w∂L(w)=i=1∑n(F(xi)−yi)(1−F(xi))F(xi)(−xi)
假设某个事件发生 F ( x i ) F(x_i) F(xi) = 1,该事件发生,则 1 − F ( x i ) = 0 1-F(x_i)=0 1−F(xi)=0,最后求得 ∂ L ( w ) ∂ w = 0 \frac{\partial L(w)}{\partial w} = 0 ∂w∂L(w)=0,符合实际,离目标很近的时候,梯度为 0 0 0, F ( x i ) = 0 F(x_i) = 0 F(xi)=0,这个时候离目标很远,同样求得 ∂ L ( w ) ∂ w = 0 \frac{\partial L(w)}{\partial w} = 0 ∂w∂L(w)=0,无法有优化了。
换个方向,既然是概率,那假设每个事件发生的概率互相不影响(独立),每个事件都用的同一个分布函数(同分布),对于样本
i
i
i,取其对应标签成立情况下的概率为:
p
i
=
F
(
x
i
)
y
i
(
1
−
F
(
x
i
)
)
(
1
−
y
i
)
p_i = F(x_i)^{y_i}(1-F(x_i))^{(1-y_i)}
pi=F(xi)yi(1−F(xi))(1−yi)
如果样本
y
i
=
1
y_i=1
yi=1,说明事件发生,
p
i
=
F
(
x
i
)
p_i=F(x_i)
pi=F(xi);如果
y
i
=
0
y_i=0
yi=0,取的是
p
i
=
1
−
F
(
x
i
)
p_i=1-F(x_i)
pi=1−F(xi)
所有样本,不管是没发生还是发生,每个样本都正确的概率(极大似然)为:
L
(
w
)
=
∏
i
=
1
n
p
i
L(w)=\prod_{i=1}^{n}{p_i}
L(w)=i=1∏npi
最大化这个函数,以达到所有的样本都按照其特定的事实去发生(正样本)与不发生(负样本),就可以得到训练的模型了。
对数似然为:
l ( w ) = l o g L ( w ) = l o g ∏ i = 1 n p i = ∑ i = 1 n ⟮ y i l o g F ( x i ) + ( 1 − y i ) l o g ( 1 − F ( x i ) ) ⟯ \begin{aligned} l(w) &= logL(w) \\ &= log\prod_{i=1}^{n}{p_i} \\ &= \sum_{i=1}^{n}{\lgroup y_ilogF(x_i)+(1-y_i)log(1-F(x_i))\rgroup} \end{aligned} l(w)=logL(w)=logi=1∏npi=i=1∑n⟮yilogF(xi)+(1−yi)log(1−F(xi))⟯
梯度的推导过程如下:
∂ l ( w ) ∂ w j = ∑ i = 1 n ( y i F ( x i ) − 1 − y i 1 − F ( x i ) ) ∂ F ( x i ) ∂ w j = ∑ i = 1 n y i − y i F ( x i ) − F ( x i ) + y i F ( x i ) F ( x i ) ( 1 − F ( x i ) ) F ( x i ) ( 1 − F ( x i ) ) ( − x j ) = ∑ i = 1 n ( F ( x i ) − y i ) x j \begin{aligned} \frac{\partial l(w)}{\partial w_j} &= \sum_{i=1}^{n}{(\frac{y_i}{F(x_i)}-\frac{1-y_i}{1-F(x_i)})\frac{\partial F(x_i)}{\partial w_j}} \\ &=\sum_{i=1}^{n}{\frac{y_i-y_iF(x_i)-F(x_i)+y_iF(x_i)}{F(x_i)(1-F(x_i))}} F(x_i)(1-F(x_i))(-x_j) \\ &= \sum_{i=1}^{n}{(F(x_i)-y_i)x_j} \end{aligned} ∂wj∂l(w)=i=1∑n(F(xi)yi−1−F(xi)1−yi)∂wj∂F(xi)=i=1∑nF(xi)(1−F(xi))yi−yiF(xi)−F(xi)+yiF(xi)F(xi)(1−F(xi))(−xj)=i=1∑n(F(xi)−yi)xj
logistic梯度有了,算法就可以根据训练数据求解了。至此logistic回归,的讲解就告一段落了,需要深度回味的少年可以看看这篇博文,机器学习:Logisitic回归。
3、海王征服的妹子们
讲完海王logistic自己的故事,现在可以说说海王的妹子们了,为什么说下面几个是海王的妹子呢,卖个关子,且往下看。
3.1 Word2vec
此处主要的是想说与logistic函数相关的部分,但是为了让不同的人都知道word2vector大概干了什么事情,所以额外的介绍一点基本知识,然后快速进入到说明为什么说Word2vector是海王的妹子。
3.1.1 Word2vec简单介绍
话说,最开始想做的事情并不是embedding(word2vector),想做的事情,类似于大家小学的时候,语文课常做的题,完形填空,也就是给定一个句子中的几个词,填写你认为最有可能的词。就是这样的一件事件,用算法怎么做呢?
做法很多,各种机器学习方法都可以,但是这里说到的是经典的三层神经网络模型,如下图所示:
图中 x 1 , x 2 , . . . , x V x_1, x_2, ..., x_V x1,x2,...,xV是词经过one-hot形式向量,有 V V V个数输入神经元,实际上就能处理 V V V个词的情况。中间层有 N N N维,这里 N < V N<V N<V,最后一层就是softmax层,维度也是 V V V,输出的是填入每个词的概率,期望是完形填空正确答案的词概率最大。训练好后,机器就会做完形填空了,是不是很厉害,最厉害的是得到的 W V × N W_{V\times N} WV×N,因为之前的词向量是one-hot形式,一个词的向量与该矩阵相乘,就是把这个矩阵的某一行给拿出来,然后这个向量也就是后来我们使用的embedding后的词向量。
3.1.2 基于Hierarchical Softmax的word2vec
是不是觉得这么做就已经不错了呀,是的,不过能问题也很明显呀,现在知道 V V V是词典的维度,那如果 V V V超级大呢,参数暴增,计算量大,还不好优化,这里借助了霍夫曼编码构造的霍夫曼树,构造Hierarchical Softmax
从图中可以看到,输出层叶子节点数还是
V
V
V,也就是词典的维度,但是从
n
(
w
2
,
1
)
→
w
2
n(w_2, 1) \rightarrow w_2
n(w2,1)→w2的路径,不再需要计算所有的softmax,需要处理的是,在每个节点岔路口,决定是往左还是往右。如果往左是
y
i
=
1
y_i=1
yi=1,往右是
y
i
=
0
y_i=0
yi=0;基于logistic的二分类问题(这里规定1是负类,0是正类,有点绕,但是先不管)。
参照logistic回归来,可以知道,正类概率:
P
(
+
)
=
1
1
+
e
−
θ
x
P(+) = \frac{1}{1+e^{-\theta x}}
P(+)=1+e−θx1
一次到叶子节点,需要走多步,并且每次都走对,才能到达目的地,则对于
n
(
w
2
)
n(w_2)
n(w2)来说,它走到
w
2
w_2
w2的需要走三步,概率是分别每一步概率的乘积,表示如下:
L
(
w
2
)
=
P
(
−
∣
n
(
w
2
,
1
)
)
×
P
(
−
∣
n
(
w
2
,
2
)
)
×
P
(
+
∣
n
(
w
2
,
3
)
)
L(w_2) = P(-|n(w_2, 1))\times P(-|n(w_2, 2))\times P(+|n(w_2, 3))
L(w2)=P(−∣n(w2,1))×P(−∣n(w2,2))×P(+∣n(w2,3))
转换一下
l
(
w
2
)
=
∏
i
=
1
3
P
(
+
)
(
1
−
y
i
)
×
P
(
−
)
y
i
l(w_2)=\prod_{i=1}^{3}{P(+)^{(1-y_i)}\times P(-)^{y_i}}
l(w2)=i=1∏3P(+)(1−yi)×P(−)yi
上面这个公式跟logistic的损失函数就很像了,继续往下对于所有的训练样本,都正确的概率为:
L
(
w
)
=
∏
i
=
1
n
l
(
w
i
)
L(w)=\prod_{i=1}^{n}{l(w_i)}
L(w)=i=1∏nl(wi)
这个就是最后要优化的目标函数,接下来定义一些符号,方便后续推导。输入的词为
w
w
w,其从输入层词向量求和平均后的霍夫曼树根节点词向量为
x
w
x_w
xw, 从根节点到
w
w
w所在的叶子节点,包含的节点总数为
l
w
l_w
lw,
w
w
w在霍夫曼树中从根节点开始,经过的第
i
i
i个节点表示为
p
i
w
p_i^w
piw,对应的霍夫曼编码为
d
i
w
∈
{
0
,
1
}
d_i^w \in \{0, 1\}
diw∈{0,1},其中
i
=
2
,
3
,
.
.
.
,
l
w
i=2, 3, ..., l_w
i=2,3,...,lw。而该节点对应的模型参数表示为
θ
i
w
\theta_i^w
θiw, 其中
i
=
1
,
2
,
3
,
.
.
.
,
l
w
−
1
i=1, 2, 3, ..., l_w-1
i=1,2,3,...,lw−1,没有
i
=
l
w
i=l_w
i=lw是因为模型参数仅仅针对于霍夫曼树的内部节点。
定义 w w w经过的霍夫曼树某一个节点 j j j的逻辑回归概率为 P ( d j w ∣ x w , θ j − 1 w ) P(d^w_j|x_w, \theta^w_{j-1}) P(djw∣xw,θj−1w),其表达式为,并且
P ( d j w ∣ x w , θ j − 1 w ) = { σ ( θ j − 1 x w ) d j w = 0 , 1 − σ ( θ j − 1 x w ) d j w = 1. P(d^w_j|x_w, \theta^w_{j-1})=\begin{cases} \sigma(\theta_{j-1}x_w) &d_j^w=0,\\ 1-\sigma(\theta_{j-1}x_w)& d_j^w=1. \end{cases} P(djw∣xw,θj−1w)={σ(θj−1xw)1−σ(θj−1xw)djw=0,djw=1.
将
L
(
w
)
L(w)
L(w)展开后求导:
l
o
g
L
(
w
)
=
l
o
g
⟮
∏
i
=
1
n
l
(
w
i
)
⟯
=
l
o
g
⟮
∏
i
=
1
n
∏
j
=
2
l
w
σ
(
θ
j
−
1
x
w
)
(
1
−
d
j
w
)
×
(
1
−
σ
(
θ
j
−
1
x
w
)
)
d
j
w
⟯
=
∑
i
=
1
n
∑
j
=
2
l
w
l
(
w
,
j
)
\begin{aligned} logL(w) &= log\lgroup \prod_{i=1}^{n}{l(w_i)} \rgroup\\ &= log\lgroup\prod_{i=1}^{n}{\prod_{j=2}^{l_w}{\sigma(\theta_{j-1}x_w)^{(1-d_j^w)}\times (1-\sigma(\theta_{j-1}x_w))^{d_j^w}}}\rgroup \\ &=\sum_{i=1}^{n}{\sum_{j=2}^{l_w}{l(w,j)}} \end{aligned}
logL(w)=log⟮i=1∏nl(wi)⟯=log⟮i=1∏nj=2∏lwσ(θj−1xw)(1−djw)×(1−σ(θj−1xw))djw⟯=i=1∑nj=2∑lwl(w,j)
其中
l
(
w
,
j
)
=
σ
(
θ
j
−
1
x
w
)
(
1
−
d
j
w
)
+
(
1
−
σ
(
θ
j
−
1
x
w
)
)
d
j
w
l(w,j) = \sigma(\theta_{j-1}x_w)^{(1-d_j^w)} + (1-\sigma(\theta_{j-1}x_w))^{d_j^w}
l(w,j)=σ(θj−1xw)(1−djw)+(1−σ(θj−1xw))djw,对
l
(
w
,
j
)
l(w,j)
l(w,j)求导有
∂
l
(
w
,
j
)
∂
θ
j
−
1
=
⟮
1
−
d
j
w
σ
(
θ
j
−
1
x
w
)
−
d
j
w
1
−
σ
(
θ
j
−
1
x
w
)
⟯
∂
σ
(
θ
j
−
1
x
w
)
∂
θ
j
−
1
=
1
−
d
j
w
−
σ
(
θ
j
−
1
x
w
)
+
d
j
w
σ
(
θ
j
−
1
x
w
)
−
d
j
w
σ
(
θ
j
−
1
x
w
)
σ
(
θ
j
−
1
x
w
)
(
1
−
σ
(
θ
j
−
1
x
w
)
)
σ
(
θ
j
−
1
x
w
)
(
1
−
σ
(
θ
j
−
1
x
w
)
)
x
w
=
⟮
1
−
d
j
w
−
σ
(
θ
j
−
1
x
w
)
⟯
x
w
\begin{aligned} \frac{\partial l(w,j)}{\partial \theta_{j-1}}&=\lgroup\frac{1-d_j^w}{\sigma(\theta_{j-1}x_w)} -\frac{d_j^w}{1-\sigma(\theta_{j-1}x_w)}\rgroup\frac{\partial \sigma(\theta_{j-1}x_w)}{\partial\theta_{j-1}} \\ &=\frac{1-d_j^w-\sigma(\theta_{j-1}x_w)+d_j^w \sigma(\theta_{j-1}x_w)-d_j^w \sigma(\theta_{j-1}x_w)}{\sigma(\theta_{j-1}x_w)(1-\sigma(\theta_{j-1}x_w))}\sigma(\theta_{j-1}x_w)(1-\sigma(\theta_{j-1}x_w))x_w \\ &=\lgroup1-d_j^w-\sigma(\theta_{j-1}x_w)\rgroup x_w \end{aligned}
∂θj−1∂l(w,j)=⟮σ(θj−1xw)1−djw−1−σ(θj−1xw)djw⟯∂θj−1∂σ(θj−1xw)=σ(θj−1xw)(1−σ(θj−1xw))1−djw−σ(θj−1xw)+djwσ(θj−1xw)−djwσ(θj−1xw)σ(θj−1xw)(1−σ(θj−1xw))xw=⟮1−djw−σ(θj−1xw)⟯xw
对于一个训练样本则有梯度为:
∑
j
=
2
l
w
⟮
1
−
d
j
w
−
σ
(
θ
j
−
1
x
w
)
⟯
x
w
\sum_{j=2}^{l_w}{\lgroup1-d_j^w-\sigma(\theta_{j-1}x_w)\rgroup x_w}
∑j=2lw⟮1−djw−σ(θj−1xw)⟯xw
同样的方法,可以得到 x w x_w xw的更新为: ∂ l ( w i ) ∂ x w = ∑ j = 2 l w ⟮ 1 − d j w − σ ( θ j − 1 x w ) ⟯ θ j − 1 \frac{\partial l(w_i)}{\partial x_w}=\sum_{j=2}^{l_w}{\lgroup1-d_j^w-\sigma(\theta_{j-1}x_w)\rgroup \theta_{j-1}} ∂xw∂l(wi)=∑j=2lw⟮1−djw−σ(θj−1xw)⟯θj−1
后续的跟新过程这里就不详细介绍了,有兴趣的同学可以详细研究下这个博文word2vec原理
从推导的过程中,不难看出,从基本原理和推导过程,具有很高的一致性,logistic全面浸入word2vec,他们两个搞对象实锤。
3.2 Xgboost中的logistic和深度学习中的Sigmoid
如果说logistic跟word2vec是情侣的话,logistic跟XGboost以及logistic跟深度学习也就是一个曾经暧昧过。
3.2.1 XGboost中的logistic
Xgboost大家可能已经很熟悉了,基本原理的话就是多个弱模型的级联,后一模型学习的是前一模型的残差。对于Xgboost框架,其loss function可以是均方误差函数,也可以是极大似然函数。本文关注的是其跟logistic的关联性,这里将要介绍是采用极大似然函数,目标函数是logistic的情况。
Xgboost的推导过程,这里不详细介绍,感兴趣的同学可以看下这篇博文机器学习:XGBoost,这里直接把结论拿出来使用,最终目标函数的形式为:
L
~
(
t
)
(
q
)
=
−
1
2
∑
j
=
1
T
(
∑
i
∈
I
j
g
i
)
2
∑
i
∈
I
j
h
i
+
λ
+
γ
T
\tilde{L}^{(t)}(q)=-\frac{1}{2}\sum_{j=1}^{T}{\frac{(\sum_{i \in I_j}^{}{g_i})^2}{\sum_{i\in I_j }^{}{h_i+\lambda}}}+\gamma T
L~(t)(q)=−21j=1∑T∑i∈Ijhi+λ(∑i∈Ijgi)2+γT
其中,
T
T
T为叶子节点的个数,
I
j
I_j
Ij为叶子节点
j
j
j中的样本集合,
g
i
g_i
gi为目标函数的一阶导,
h
i
h_i
hi为目标函数的二阶导,
λ
\lambda
λ和
γ
\gamma
γ分别用来平滑叶子节点权重弄和控制惩罚模型复杂度的。
上面函数是用来评价一个既定树结构的好坏的,如果想要找到最优的树结构,则需要穷举数据结构并求每个数的得分,为了减少计算,一般都采用贪心算法进行后续求解。这里可以跟logistic挂钩的地方就是一阶导 g i g_i gi和二阶导 h i h_i hi可以是通过logistic函数来求得,并且使用logistic的时候,其使用的极大似然函数是凸函数,可以二阶泰勒来进行推导。所以,logistic估计只是曾经暗恋过XGboost而已。
3.2.2 深度学习中的Sigmoid
深度学习中,主要是激活函数,特别是分类时,最后通常会接一个softmax层。此处的单个sigmoid函数与logistic函数的形状是一致的,如果深度学习最后输出的softmax只有一个神经元,那么loss function定义为:
L
(
w
)
=
∏
i
=
1
n
F
(
x
i
)
(
y
i
)
(
1
−
F
(
x
i
)
)
(
1
−
y
i
)
L(w)=\prod_{i=1}^{n}{F(x_i)^{(y_i)}(1-F(x_i))^{(1-y_i)}}
L(w)=i=1∏nF(xi)(yi)(1−F(xi))(1−yi)
其中
i
=
1
,
2
,
3
,
.
.
.
,
n
i=1, 2, 3, ..., n
i=1,2,3,...,n是样本数量,根上式求导,梯度下降,后续的梯度传递采用链式求导法则,求解只有一个输出神经元的神经网络是完全没有问题的。
问题是输出神经元的数目一般来说是有多个,对于多分类问题,在处理的时候,标签转换为
y
i
=
(
y
1
i
,
y
2
i
,
.
.
.
,
y
c
i
)
y_i=(y^i_1,y^i_2, ..., y_c^i)
yi=(y1i,y2i,...,yci)向量, 其中
y
i
j
=
{
1
j
=
k
,
0
j
≠
k
.
y_i^j=\begin{cases} 1 &j=k,\\ 0& j \neq k. \end{cases}
yij={10j=k,j=k.
其中
k
k
k是样本的类别。
对于多个神经元输出的概率向量
y
^
i
=
(
y
^
1
i
,
y
^
2
i
,
.
.
.
,
y
^
C
i
)
\hat{y}_i=(\hat{y}^i_1,\hat{y}^i_2, ..., \hat{y}_C^i)
y^i=(y^1i,y^2i,...,y^Ci), 取其发生的概率为:
p
j
=
y
j
T
y
^
j
=
∑
i
=
1
C
y
i
j
y
^
i
j
p_j=y_j^T\hat{y}_j=\sum_{i=1}^{C}{y^j_i\hat{y}_i^j}
pj=yjTy^j=i=1∑Cyijy^ij
其中
C
C
C为类别数,对于所有样本都按照其观测的情况一起发生的概率为:
P
=
L
(
w
)
=
∏
i
=
1
n
p
i
=
∏
i
=
1
n
y
i
T
y
^
i
P =L(w)= \prod_{i=1}^{n}{p_i}=\prod_{i=1}^{n}{y_i^T\hat{y}_i}
P=L(w)=i=1∏npi=i=1∏nyiTy^i
上述同样是极大似然的思想,对其去对数有:
l
(
w
)
=
−
l
o
g
L
(
w
)
=
−
∑
j
=
1
n
∑
i
=
1
C
y
i
j
l
o
g
(
y
^
i
j
)
l(w) = -logL(w) = -\sum_{j=1}^{n}{\sum_{i=1}^{C}{}y_i^jlog(\hat{y}_i^j)}
l(w)=−logL(w)=−j=1∑ni=1∑Cyijlog(y^ij)
对其求导,求梯度,按照链式求导法则反向传递,可求解深度学习网络。
简单的给出求导结果, 设 l = − ∑ i = 1 C y i l o g ( y ^ i ) l=-\sum_{i=1}^{C}{}y_ilog(\hat{y}_i) l=−∑i=1Cyilog(y^i)
∂ l ∂ z j = ∂ l ∂ y ^ i ∂ y ^ i ∂ z j \frac{\partial l}{\partial z_j} =\frac{ \partial l}{\partial \hat{y}_i}\frac{\partial \hat{y}_i}{\partial z_j} ∂zj∂l=∂y^i∂l∂zj∂y^i
∂ l ∂ y ^ i = − ∑ i = 1 C y i y ^ i \frac{ \partial l}{\partial \hat{y}_i}=-\sum_{i=1}^{C}{\frac{y_i}{\hat{y}_i}} ∂y^i∂l=−i=1∑Cy^iyi
∂ y ^ i ∂ z j = { y ^ j ( 1 − y ^ j ) j = i , − y ^ i y ^ j j ≠ i . \frac{ \partial \hat{y}_i}{\partial z_j}=\begin{cases} \hat{y}_j(1-\hat{y}_j) &j=i,\\ -\hat{y}_i\hat{y}_j& j \neq i. \end{cases} ∂zj∂y^i={y^j(1−y^j)−y^iy^jj=i,j=i.
∂ l ∂ z j = − y i y ^ i y ^ i ( 1 − y ^ i ) + ∑ i ≠ j y i y ^ i y ^ i y ^ j = y ^ i − y i \frac{\partial l}{\partial z_j} =-\frac{y_i}{\hat{y}_i}\hat{y}_i(1-\hat{y}_i)+\sum_{i \neq j}{\frac{y_i}{\hat{y}_i}\hat{y}_i\hat{y}_j}=\hat{y}_i-y_i ∂zj∂l=−y^iyiy^i(1−y^i)+i=j∑y^iyiy^iy^j=y^i−yi
深度学习中间的激活函数,目前来说有很多的可选项,包括Relu、tanh等;这些暂且不谈,按照本文上述过程来看,logistic跟深度学习渊源还是颇深的,至少曾经相互喜欢过。
4、总结
本文从传统机器学习线性模型出发,讲述了线性模型掰弯后变为logistic模型。在此基础上,通俗的说明了线性模型的求解过程、详细的描述了logistic回归的求解过程。从logistic函数及极大似然的角度,总结了具有雷同思想的改进版word2vec之Hierarchical Softmax、XGBoost中使用logistic目标函数,深度学习中使用sigmoid的情况,并对其相似之处做了详细的介绍;
本文所讲的内容并没有特别新颖之处,只是对已有算法做了一个简单的归纳总结,期望对学习或者已经了解这些算法的同学,在理解上面提供一些角度和切入点,对这些算法有更好的了解。
最后个人觉得,从拟人的角度上说,线性函数是狠心的掰弯自己,有了后续的成功,但是我们小伙伴们,可以对自己狠一点,但是不提倡掰弯哦!