机器学习入门 9-3 逻辑回归损失函数的梯度

2020-02-26 16:59:04 浏览数 (1)

一切精美的东西都有其深沉的内涵。

全文字数:2177字

阅读时间:10分钟

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要推导逻辑回归损失函数的梯度,通过与线性回归模型的梯度进行比较找出逻辑回归损失函数梯度的向量化表示。

a

推 导 损 失 函 数 的 梯 度

在上一小节中,我们详细推导出了逻辑回归的损失函数,在最后提到了逻辑回归的损失函数并没有数学解析解(不能通过公式代入样本和标签直接求出最终的θ),只能使用诸如梯度下降法这种迭代求解的方式来找到使得损失函数J(θ)值达到最小的θ。

使用梯度下降法求解损失函数的最优解,需要求出损失函数J(θ)关于θ向量中每个维度的导数。接下来只需要求出J(θ)对θ向量中某一个维度的导数,其他维度的导数也就有了(其余维度的导数只需要将求出的某一维度改成其余维度即可)。接下来就来具体的看一看损失函数J(θ)对θ向量中某一个维度θj的求导结果是怎样的?

▲计算J(θ)的梯度

对上面这个比较复杂的损失函数J(θ)求导,可能比较难处理的部分就是Sigmoid函数了。由于最后肯定是基于链式法则来求解最后的导数,在最后肯定是要计算Sigmoid函数的导数的,因此这里先不直接对整个损失函数J(θ)求导,先来看看Sigmoid函数的导数(此时只是单独求解Sigmoid函数的导数,因此此时是对函数中的t求导)。

▲sigmoid函数的导数

损失函数J(θ)中有加法运算符,我们知道(a b)' = a' b',为了方便求导,将J(θ)划分成红色和蓝色两个部分,接下来分别求解红色部分和蓝色部分的式子对θj的导数,最后的结果想加即为最终J(θ)关于θj的导数。

▲将J(θ)划分成两个部分

  • 首先求红色部分的式子对θj的导数

前面有了Sigmoid函数的导数,接下来可以计算log(σ(Xb(i) * θ))的导数:

▲求解红色部分的导数

在这之前先求解出log(σ(t))关于t的导数(此时只是单独求解log(σ(t))函数的导数,因此此时是对函数中的t求导):

▲求解log(σ(t))关于t的导数

由于Sigmoid函数以及导数都是已知的,可以直接代入上面的式子中:

▲log(σ(t))关于t的导数

对于上面的结果进一步整理:

▲log(σ(t))关于t的导数

有了log(σ(t))的导数,接下来就可以直接让红色部分对θj求导:

▲红色部分式子关于θj的导数

这里需要注意,由于我们对θj进行求导,在(1 - σ(Xb(i) * θ))中的θ向量里面的θj前面是有一个系数的,这个系数就是Xb矩阵中第i行的第j列,即X^{i}_{j}。

  • 接下来求蓝色部分的式子对θj的导数

▲将J(θ)划分成两个部分

先来看看log(1 - σ(t))的导数(此时只是单独求解log(1 - σ(t))函数的导数,因此此时是对函数中的t求导):

▲将log(1 - σ(t))的导数

对-(1 / 1 - σ(t))进行化简:

▲对-(1 / 1- σ(t))进行化简

将上面化简后的结果代入log(1 - σ(t))导数的部分:

▲log(1 - σ(t))的导数

有了前面的这些准备,接下来可以直接求蓝色部分式子对θj的导数:

▲蓝色部分式子对θj求导

至此我们成功的将红色部分和蓝色部分的式子关于θj的导数求出来了:

▲红色部分和蓝色部分式子对θj的导数

将上面的结果进一步化简:

▲进一步化简后的结果

损失函数J(θ)对θj求导后的结果:

▲J(θ)关于θj的导数

对于上面式子中σ(Xb(i) * θ)其实就是逻辑回归中预测Xb中的第i个样本对应的概率值,也就是那个p_hat,在这里将这个p_hat写成y_hat,此时的y_hat不是类别标签,而是和p_hat一样的(0, 1)范围的概率值。

▲将其改成y_hat

求出了损失函数J(θ)关于θi的导数,相应的梯度就很容易了:

▲J(θ)关于θ向量的梯度

其中梯度是一个(n 1)维的向量,每一个元素都是对θ向量中的某一个维度进行求导。这里需要注意此时的(n 1)维是因为我们在这里加上了θ0,对θ0求导后面乘上的是X的第i个样本的第0个元素,也就是我们一直强调的在X矩阵每个样本的第一个特征前面添加的数值1,所以这里乘上一个1结果不变,因此没有写上。

b

向 量 化

前面求解出了逻辑回归损失函数的梯度,如果还记得线性回归时候求解的损失函数梯度的话,会发现两者有很多相通之处。

▲逻辑回归与线性回归梯度比较

对于线性回归来说预测值是(Xb(i) * θ),而对于逻辑回归来说是Sigmoid(Xb(i) * θ)。当然对于线性回归来说,由于我们使用的损失函数是MSE,MSE中有一个平方项,所以计算线性回归梯度的结果多了一个2倍,而逻辑回归则没有这个2倍。当然前面的系数并不是重点,我们还记得在学习线性回归的时候将梯度进行了向量化的表示。

▲线性回归梯度的向量化表示

对于逻辑回归来说,由于梯度向量部分的元素整体和上面线性回归的梯度是一样的,只不过是对y_hat的求法不同而已。类似的同样可以对逻辑回归的梯度进行向量化,我们只需要将在线性回归中梯度向量式子中的(Xb(i) * θ)外面套上一个Sigmoid函数就可以了,当然前面的系数是1 / m,没有线性回归中的2倍。

▲逻辑回归梯度的向量化表示

有了逻辑回归损失函数的梯度,在梯度下降法的框架下可以非常容易的迭代搜索出使得损失函数J(θ)最小的θ解。

虽然逻辑回归的损失函数J(θ)看起来很吓人,但是每一步的求导操作都是基本的求导运算,整体下来并不复杂。有了损失函数的梯度,在下一小节就来具体的实现逻辑回归算法。

0 人点赞