一、线性回归
1、算法模型:y=theta*x
2、损失函数/目标函数:均方误差(MSE),其它的也可以,MSE最常用
y与y_predict之间有误差,我们希望误差越小越好,由中心极限定理可知误差出现的概率服从高斯分布,因而我们希望其误差出现概率服从高斯分布的确定性越强越好,对其进行似然处理,求似然函数最大值,去掉表达式的常数项和负号,转化为求最小值问题,同时发现化简后的表达式就是最小二乘法的表达式。
误差出现概率服从高斯分布(中心极限定理):
误差出现概率的似然函数:
似然函数取对数,不改变单调性,方便计算,求对数似然函数的最大值,去掉常数项和负号,转化为求最小值问题,该表达式为我们的目标函数(损失函数):
3、theta直接求解方法:
通过直接求导,可以得到theta的最优解,但是会遇到矩阵求逆的问题,而并不是所有的矩阵都可以求逆。
由于矩阵求逆的不确定性,因而想到了用梯度下降法来逐步逼近最优解,梯度下降法又分为BGD、SGD、MBGD。
4、BGD (批梯度下降算法 Batch Gradient Descent)与权重theta迭代更新的求解公式
对损失求偏导:
BGD计算梯度时要用所有的数据来计算,但是要取平均(不平均就没有意义了):
更新权重theta的迭代公式如下,其中j表示自变量的第j个维度:
优点:
(1)在训练过程中,使用固定的学习率,不必担心学习率衰退现象的出现。
(2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,一定能收敛到全局最小值,如果目标函数非凸则收敛到局部最小值。
(3)它对梯度的估计是无偏的。样例越多,标准差越低。
(4)一次迭代是对所有样本进行计算,此时利用向量化进行操作,实现了并行。
缺点:
(1)尽管在计算过程中,使用了向量化计算,但是遍历全部样本仍需要大量时间,尤其是当数据集很大时(几百万甚至上亿),就有点力不从心了。
(2)每次的更新都是在遍历全部样例之后发生的,这时才会发现一些例子可能是多余的且对参数更新没有太大的作用。
5、SGD(随机梯度下降法Stochastic Gradient Descent)与权重theta迭代更新的求解公式
随机梯度下降法不同于批量梯度下降,随机梯度下降是在每次迭代时使用一个样本来对参数进行更新(mini-batch size =1):
优点:
(1)在学习过程中加入了噪声,提高了泛化误差。
(2)由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。
缺点:
(1)不收敛,在最小值附近波动。
(2)不能在一个样本中使用向量化计算,学习过程变得很慢。
(3)单个样本并不能代表全体样本的趋势。
(4)当遇到局部极小值或鞍点时,SGD会卡在梯度为0处。
BGD和SGD算法比较:
(1)SGD速度比BGD快(迭代次数少)
(2)SGD在某些情况下(全局存在多个相对最优解/J(θ)不是一个二次),SGD有可能跳出某些小的局部最优解,所以不会比BGD坏
(3)BGD一定能够得到一个局部最优解(在线性回归模型中一定是得到一个全局最优解),SGD由于随机性的存在可能导致最终结果比BGD的差
(4)注意:优先选择SGD
6、MBGD(小批量梯度下降法Mini-batch Gradient Descent)与权重theta迭代更新的求解公式
如果即需要保证算法的训练过程比较快,又需要保证最终参数训练的准确率,而这正是小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)的初衷。
MBGD中不是每拿一个样本就更新一次梯度,而是拿batch_size个样本(batch_size一般为10)的平均梯度作为更新方向。
上式中平均梯度正常应该除以batch_size,再乘以学习率,但实际操作中可以直接用超参数alpha去调节即可。
优点:
(1)通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
(2)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。(比如上例中的30W,设置batch_size=100时,需要迭代3000次,远小于SGD的30W次) 。
(3)可实现并行化。
缺点:
(1)batch_size的不当选择可能会带来一些问题。
batch_size的选择带来的影响:
(1)在合理地范围内,增大batch_size的好处:
a. 内存利用率提高了,大矩阵乘法的并行化效率提高。
b. 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
c. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
(2)盲目增大batch_size的坏处:
a. 内存利用率提高了,但是内存容量可能撑不住了。
b. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
c. Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。
7、梯度下降法小结
(1)由于梯度下降法中负梯度方向作为变量的变化方向,所以有可能导致最终求解的值是局部最优解,所以在使用梯度下降的时候,一般需要进行一些调优策略:
a. 学习率的选择:学习率过大,表示每次迭代更新的时候变化比较大,有可能会跳过最优解;学习率过小,表示每次迭代更新的时候变化比较小,就会导致迭代速度过慢,很长时间都不能结束;
b. 算法初始参数值的选择:初始值不同,最终获得的最小值也有可能不同,因为梯度下降法求解的是局部最优解,所以一般情况下,选择多次不同初始值运行算法,并最终返回损失函数最小情况下的结果值;
c. 标准化:由于样本不同特征的取值范围不同,可能会导致在各个不同参数上迭代速度不同,为了减少特征取值的影响,可以将特征进行标准化操作。
(2)BGD、SGD、MBGD的区别:
a. 当样本量为m的时候,每次迭代BGD算法中对于参数值更新一次,SGD算法中对于参数值更新m次,MBGD算法中对于参数值更新m/n次,相对来讲SGD算法的更新速度最快;
b. SGD算法中对于每个样本都需要更新参数值,当样本值不太正常的时候,就有可能会导致本次的参数更新会产生相反的影响,也就是说SGD算法的结果并不是完全收敛的,而是在收敛结果处波动的;
c. SGD算法是每个样本都更新一次参数值,所以SGD算法特别适合样本数据量大的情况以及在线机器学习(Online ML)。
8、线性回归的扩展
线性回归针对的是θ而言是一种,对于样本本身而言,样本可以是非线性的;也就是说最终得到的函数f:x->y;函数f(x)可以是非线性的,比如:曲线等。
二、逻辑回归
1、算法模型:对theta*x进行sigmod激活,y=1/(1+e^(-theta*x))
对theta*x进行sigmod激活,转化为概率问题,设置阈值p可将预测结果划分为0、1两类中:
sigmod函数图像:
sigmod函数求导结果 = sigmod函数本身*(1-sigmod函数本身):
2、损失函数:交叉熵损失
因为逻辑回归解决的是分类问题,所以标签值0、1分布,其概率为:
不管预测结果是0还是1,我们都希望其发生的概率更大,即有更高的确定性,对其进行似然处理:
对似然函数取对数,不改变单调性,方便计算:
所以,求似然函数的最大值可以转化为求最小值问题,即我们的目标函数(损失函数),且这种形式的损失函数叫做交叉熵损失函数:
3、权重theta迭代更新的求解公式:
求对数似然函数的最大值,对其求偏导,得到函数上升的方向(即梯度方向):
然后可得到如下权重更新的迭代公式,这里同样有BGD、SGD、MBGD三种方法,注意这里是梯度提升的概念,theta沿着梯度方向(函数上升方向)不断更新:
三、线性回归与逻辑回归
theta更新的迭代公式:线性回归用到的是梯度下降,逻辑回归用到的是梯度提升(对数似然函数是梯度上升,而对loss仍然是梯度下降,上升与下降都是相对而言)