一 序
本文属于贪心NLP学习笔记系列。本文从逻辑回顾问题提出决策边界,从决策边界引出目标函数,继而使用梯度下降算法求解。
数学公式很多,李文哲老师都是手书推导过程,我尽量去手动输入公式。我觉得收获很大,因为网上介绍公式很多,但是一步步串起来讲给小白听的太少了。
二 决策边界(Decision boundary)
逻辑回归虽然带着回归两字却和线性回归有很大的区别,线性回归主要用于预测问题,其输出值为连续变量,而logistic回归主要用于分类问题,其输出值为离散值。logistic回归可以用于多元分类问题,也可以用于二元分类问题,但二元分类更为常用。老师再讲主题之前,先回顾上一节的逻辑回归函数:没看过可以先看上一篇NLP学习笔记20-逻辑回归
条件概率 线性的。
而逻辑函数 是非线性的。
逻辑回归公式在上面(有线性跟非线性组合而成),老师抛出一个问题,逻辑回归是不是线性的分类器?
逻辑回归是线性的分类器。
那么判断一个模型是不是线性分类器,引出了决策边界。
假设在一个二维平面上有这样一堆点,其实平面上的一个点是由横坐标、纵坐标两个自变量确定的。
如上图(左侧)所示,我们通过一条直线将上面的一堆点给分成了两类。这就是分类问题,而那条直线就是决策边界,分类器就是通过这个决策边界进行分类的。
这个就是线性的(linear decision boundaries)。
那么如果如右侧所示,不能用一条直线来作为决策边界对它们进行分类,而是一条曲线(先不管曲线的具体表达函数公式),那么就是非线性的(non-linear decision boundaries)。
那么,既然我们有了决策边界才能得到一个分类器。接下来就是如何确定决策边界?换句话就是求决策边界对应的方程。
根据前面的假设,逻辑回归是线性的,那么根据观察,落在边界线的点分为正样本和负样本的概率相等:
我们用数学表达式来写出来:
代入到上面的公式,并把分母消去:
两边加log,左侧log1 =0,右侧e消去
−(x+b)=log1→
x+b=0
这是线性的,说明边界是一个直线。所以说逻辑回归是线性分类器。
接下来我们来求解w,b.
三目标函数Objective Function
要求解w,b 需要有一个依据,或者说就需要有一个优化目标。也就是我们想最大化或者最优化的函数。
模型的实例化 相当于 定义明确的目标函数。
什么叫实例化,类似与面向对象编程的对象Object。我们通常说的神经网络模型,当我们具体使用它的时候,我定义了2层还是3层,每一层的hidden unit,就是实例化了模型。
然后我们再选择具体的优化算法(Stochastic Gradient Descent、AdaGrad等)来求解。
对于逻辑回归来说,就是最大似然函数。
假设我们拥有训练数据集,
n是样本数, 是属于
的,是d维的向量。y的取值为0,1,就是二分类。
我们需要最大化目标函数:
怎么理解公式?就是给定模型情况下,我要呕最大化看到给定数据集的概率,这里面p() 就是每个样本条件概率的。
在最大似然里面需要考虑所有样本,所有样本这里以乘积的方式的方式考虑进来。
相关数学符号含义:
这个是求积。
这个是相加。
意思就是我们要寻找w,b 使得这个函数右边式子最大化。最终结果就是左侧的mle最大似然估计。
下面进行求导,先取log,(log是严格递增的函数,加log不会改变求最大w,b)
log 连乘变连加,另外可以避免小于1的数字连乘造成的underflow:
取负号,使得求最大值变成求最小值:(这是经常做的一个转换,把从求最大值变成最小值)
其中里面简化公式:log()=log(
)+log(
)=xloga+ylogb。
简化结果为:
四 梯度下降
再正式求解之前,老师先带我们回顾下数学知识求最优解。
我们在求最优解时,需要判断是否全局最优或者局部最优解。
全局极小值点处的函数值不大于任意一点处的函数值。局部极小值点处的函数值比一个局部返回内所有点的函数值都小。在这里,我们的目标是找到全局极小值。不幸的是,有些函数可能有多个局部极小值点,因此即使找到了导数等于0的所有点,还需要比较这些点处的函数值。
对于简单的一元函数或者你能直接求函数的导数=0的。对于复杂的(高维的)精确的求解不太可能,因此只能求近似解,这称为数值计算。
工程上实现时通常采用的是迭代法,它从一个初始点开始,反复使用某种规则从移动到下一个点,构造这样一个数列,直到收敛到梯度为0的点处。
具体的算法有梯度:GD、SGD、AdaGrad等
梯度下降的核心思想:就是从空间的一个点到最低点,有很多路径,那么梯度下降法就是指出了最短路径。走一步看一步,直到最低点。
- 初始值: 随机值
步长(学习率)learning rate. 步长小,时间成本大,步长大,有可能不收敛,找不到最优解。
- 梯度:
数学来看是表示f(
)的偏导数,从图来看是告诉我们沿哪个方向走。
补充下数学背景:
从数学角度,比如在1元函数中时,梯度方向首先是沿着曲线的切线的,然后取切线向上增长的方向为梯度方向,2元或者多元函数中,梯度向量为函数值f对每个变量的导数,该向量的方向就是梯度的方向,当然向量的大小也就是梯度的大小。可以看下图的老师画的曲线。也可是看上图,曲线是y=
这里老师举的例子, 直接求解
的解。
然年后再用梯度法去验证。初始值,
现在,回到前面的公式,
把sigmoid函数 带入上面:
把这个看成是w和b的函数,就是要分别对w和b求偏导数:
其中,涉及的数学公式:
**********************
对log 求导,
对于 求导,结论:
************************
对w求导:
就是预测值减去真实值。如果预测值等于真实值,那么这项等于0,如果预测与真实值不一样,才会产生cost。如果觉得上面看不清公式,可以看下面的图
就这个推导过程,如果使用CSDN自带的公式编辑器去写,得半小时。感谢oldmao的
对b求导:
b跟w求导区别,就是少了
这个图上面部分是讲的对b求导,下面部分是下面开始梯度下降的算法
1、初始化,
2、开始迭代循环:
随机梯度下降Stochastic Gradient Descent
可以看到,上面的梯度下降法中有一个求和项,这里面n是样本数量,也就是每次梯度更新都要计算所有了样本。
如果数据量很大,比如常见的数据量千万级或者更大,那么就会很慢。那么怎么来优化呢?
随机梯度下降:在每次更新时用1个样本,也就是说我们用样本中的一个例子来近似所有的样本。虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的。(随机梯度下降每次都去更新,然后每批样本更新n次,不是之前全部样本N完再去更新,通常噪声会很大,所以需要步长比梯度下降要小来优化)更新公式是这样的,只写一下w.
for(i =1,N){
}
这两种情况都比较极端,可以采取一种折中的方式。每次取一个mini-batch的样本(几十个)进行更新梯度。mini-batch Gradient Descent
用了一些小样本来近似全部的。
总结下:
李文哲老师认为batch GD, mini-batch GD, SGD都可以看成SGD的范畴。
能收敛到什么地方?
能到的地方:最小值,极小值,鞍点。这些都是能收敛到的地方,也就是梯度为0的点。
对于凸函数,梯度下降会收敛到最小值。
*************************************
博大精深啊,尤其是数学欠缺的厉害,我翻了下经典的周志华老师的西瓜书,第三章就是线性分析。
本节的内容也有,就是看不懂,李文哲老师这种从机器学习看数学,遇到数学就停下来补充下背景知识的,才是更加适合非数学专业的入门同学看。
加油。
参考: