算法原理
概述:
算法通过梯度下降法去极大化似然函数,得到极大化时的权值向量。
似然的本质就是根据已观察到的数据(现象),求得某个参数,使得在这个参数的情况下是最有可能出现已观察到的数据(现象)。这里的pi为标签y为1的概率,因此很明显的当y_i=1的时候我们希望pi越大越好,当y_i=0的时候我们希望pi越小越好,这样就很自然地导出了我们希望最大化的全局的似然函数
其中p_i是和权值向量相关的(下面会讲解),所以通俗来讲,这个算法试图找到一个权值向量w,使得出现训练集的数据(现象)的可能性最大。
问题1:是哪里来的?
pla中将的结果通过sign函数将其转换成-1和1,而这里的逻辑回归模型则是将其转换成(0,1)之间的连续值,使用的是函数(下图),这个转换后的值就是
其图像如下:
也就是说,可以看到当的值越大的时候就接近于1,当的值越小的时候就接近于0.
问题2:通过sigmoid函数得到的有什么物理意义?
通过一个例子来解释p_i的含义。
假设有一个学生的各科成绩(组成向量X),每一科有相应的权值(W),用权值乘以成绩然后加和就得到加权总成绩C。学校设定了总成绩的及格线(记为b),那么C-b就是学生相对于及格线的成绩,将这个成绩通过sigmoid函数进行变换,就得到(0,1)之间的一个值(记为p)。上述过程用假想的数据表示成表格:
很明显,成绩越高的人得到的p值就越接近1,成绩越低的人得到的p值就越接近0,如果某个人加权总成绩刚好等于及格线,那么他的p值为0.5。
因此,p值可以作为判定一个学生学习好的概率,p值越大,他学习好的概率就越大,p值为0.5时,他学习好和学习差的概率相等,因为刚好及格(及格万岁? )。
那么不失普遍性地说,就是p值可以作为判定一个输入X其对应标签为1的概率。
问题3:如何极大化似然函数?
极大化似然函数就等价于极大化对数似然函数:
子问题:为什么要将其转换成L(w)函数?
我认为是因为连加比连乘更好处理,因此通过log函数将连乘变成连加
极大化对数似然函数L(w)也就等同于极小化损失函数C(w)= -L(w), 这样就可以对C(w)使用梯度下降法对函数进行极小化
问题4:什么是梯度?梯度下降法是如何更新的?
- 在了解梯度之前,先了解“导数”下降法是怎样的。
假设要通过程序求得某个x使得取到最小值(函数形状如下图),注意不是通过公式推导。
这里先假设f(0)就是f(x)最小值,那么通过图像可知,在x=0左边,导数为负,右边导数为正。 显然,对于随机的一个x,要使得它更新之后更靠近0,那么
①如果,就应该往右边走(也就是x值增大)
②如果,就应该往左边走(也就是x值减小)
③特殊的情况,如果该函数是凸函数,那么在越靠近最低点的地方越接近于0,这样一来我们可以让x值改变量正比于,因为离最低点越远x就应该多移动一些,离最低点越近x就应该少移动一些
通过以上①②③的分析可得到在凸函数情况下x的更新方式应为:
- 了解了“导数下降法”,那么梯度下降又是什么
一元函数f(x)在点x处的导数,称为f在x处的导数;
而如果是N元函数在点的“导数”,就不称为“导数”,因为在x处共有N个偏导数,分别是在该点关于的偏导数,关于的偏导数……,而这些偏导数构成的一个N维向量,就称为f在点x处的梯度向量
理清了导数和梯度的关系之后就很清楚了,梯度下降不过是“导数”下降作用在多元函数的各个维度,这样就可以将“导数”下降法的公式推广到梯度下降中来:
关键代码截图(带注释)
思考题
如果把 梯度为 0 作为算法停止的条件,可能存在怎样的弊端?
答: ① 梯度下降法在梯度较小的时候更新是越来越慢的。 因此,梯度在比较大的时候确实是下降的快,但是想要梯度下降到0要花很长的时候
② 如果题目的意思是 梯度 == 0 作为终止条件的话,那么容易遇到浮点数精度的问题,也就是本来梯度确实应该是0的,但是由于精度的原因变成了0.000001这样子,就会导致条件判断不成立-
𝜂 的大小会怎么影响梯度下降的结果?给出具体的解释,可视化的解释最好,比如图形展示等?
答:当步长较大( 0.11 )的时候可能产生震荡的现象,因为变化太大导致跑到了最低点的另一边,该现象见下图,可见因为震荡导致越来越偏离最小值
当步长适中( 0.02 )的时候能较快收敛到最小值,见下图
当步长更小( 0.005 )的时候,虽然不会震荡,但是收敛很慢,见下图
- 思考这两种优化方法(批梯度下降和随机梯度下降)的优缺点?
答: 1)批梯度下降在求偏导的时候用的是全部的样本,也就是更新的时候考虑的是往全局的似然度最高的方向进行更新。
优点是它能是往全局最优去更新的,因此能更容易得到全局最优。
缺点也很明显,每次更新都要对所有样本计算,这在样本数据量大的时候很难接受
2)随机梯度下降在求偏导的时候用的是随机的单个样本,也就是更新的时候考虑的仅仅是往该样本的似然度最高的方向进行更新。
优点是克服了数据量变大带来的运算量上面的上升,在大数据的时候也表现良好
缺点是它并非每次都向着全局最优方向更新的(但是整体是往全局最优的),就是它的更新比较盲目,这也就导致了要到达最优点需要更多的迭代次数