线性回归、代价函数和梯度下降法
线性回归预测函数:
h_{theta}(x)=theta^{T}x
逻辑回归预测函数:
h_{theta}^{(x)}=frac{1}{1 e^{-theta^{T}x}}
线性回归损失函数:
J(theta)=frac{1}{2m}sum_{i=1}^m(h(theta^{(i)}-y^i))^2 frac{lambda}{2m}sum_{j=1}^mtheta_j^2
逻辑回归损失函数:
如果直接使用线性回归的MSE会让逻辑回归的代价函数变成非凸函数,这样就会导致有非常多的局部最优值,导致梯度下降法失效。所以引入了交叉熵损失函数来替代线性回归的MSE(均方误差)
J(theta)=-frac{1}{2m}sum_{i=1}^m(y^ilog{h_theta(x^i)} (1-y^i)log(1-h_theta x^{(i)})^2 frac{lambda}{2m}sum_{j=1}^mtheta_j^2
两者损失函数求导后,除了假设函数不一样,表示形式是一样的:
损失函数中参数倍数变化并不会影响最优值的最终结果
1.线性回归
两个变量:y=wx b
多个变量:假设函数(hypothesis):h_theta(x)=theta^Tx=theta_0x_0 theta_1x_1 theta_2x_2 … theta_nx_n
1.1 代价函数(cost function)
- 求(预测值-真实值)差的平方的和,也就是SSE的最小值mindisplaystylesum^{m}{i=1}(hat{y}_i-y{i})^2
- 均方差MSE:J{(w,b)}=frac{1}{2m}displaystylesum^{m}{i=1}(hat{y}i-y{i})^2,为了方便计算,系数frac{1}{m}换成frac{1}{2m}
根据x的不同系数w得损失曲线,根据最小的loss值得到对应系数w
1.2 梯度下降(迭代求最优值)
步长(学习率alpha)决定了梯度下降的速度,梯度会下降到直至收敛convergence(也就是到局部最小值才停止),所以太大的步长会导致在坡底(局部最小值)震荡
初始化起点也能影响梯度下降的速度和得到的局部最小值(局部最小值可能有很多个,初始化下降起点(也就是w和b)会影响局部最小值)。一般情况下,设置初始化w, b = 0, 0
梯度下降公式:theta_j=theta_j-alphafrac{partial{J(theta_0,theta_1)}}{partial_{theta_j}}spacespacespace(for j = 0 space and space j = 1)
1.2.1 参数梯度下降实现步骤/方法
正确的梯度更新应该是多个参数同步更新(先获取下降梯度再更新参数),否则会影响在其他参数的更新,最终影响结果
如果刚好初始化值为局部最小值,则代价函数J_theta的值为0
梯度下降时,学习率alpha不需要变更,因为在梯度下降的过程中,代价函数的梯度partial_{J}会随着慢慢下降而减小,所以梯度下降的速度也会减缓
线性回归的代价函数求导后得到(二元梯度下降):
其中theta_{0}为常数
MSE梯度下降公式:
多元梯度下降:
1.2.2 凸函数(convex function)与线性回归
凸函数没有局部最优,只有一个全局最优,像这种函数,只要使用线性回归总是能收敛到全局最优
1.2.3 批梯度下降法(Batch Gradient Descent)
考虑全局的一种方法,在线性回归中使用的MSE即均方差即是考虑了所有数据的一种BGD
1.2.4 特征缩放/归一化
==归一化可以加快梯度下降的速度,也就是更快地收敛==
1.2.4.1 均值归一化Mean Normalization
x=frac{x-mu}{x_{max}-x_{min}}
1.2.5 小技巧
如何能够快速判断梯度下降是否正在有效工作/收敛呢?
正确的学习率:
错误的学习率:
方法1:(推荐)运行过程中,根据迭代次数和代价函数的值/导数(下降速度)来判断梯度是否有效下降/收敛,也就是上述绘制曲线,通过看曲线的方式
方法2:设定一个阈值,当代价函数变化值小于该阈值则停止训练。但是该方式的缺点是通常这个阈值不好选择
1.2.5.1 总结
- alpha学习率太小会导致梯度下降速度很慢
- alpha太大会导致梯度反向增长,震荡,甚至是收敛速度慢等
设置较小的学习率总能收敛,但是速度会偏慢,通过观察运行时的曲线选择合适的学习率
1.3 多项式回归和线性回归
在选择特征时,可能有多个角度:如在房价预测时,你可以通过房子的纵深和宽度来计算影响因子,也可以通过面积来直接计算;根据模型/数据实际的效果来选择最合适的即可。
多项式拟合:
有时候我们能使用线性拟合的方式来得到多项式拟合的效果,如
1.4 正规方程(直接求解最优值)Norm Equation
theta=(X^{T}X)^{-1}X^{T}y该公式计算结果可以直接求得代价函数最小化的theta,也就是算得其中一个参数系数的最优解
在使用了Norm Equation正规方程后,数据可以不用归一化处理,直接计算即可
1.4.1 正规方程在不可逆情况下的解决方法
在Octave/Matlab中使用pinv(伪逆)/inv可以计算得到矩阵的逆,矩阵在一定条件下是不可逆的(矩阵的值为0,也就是某些特征之间存在线性关系,说明部分特征是多余的;样本太少,特征太多,适当减少特征或者使用正则化),但是使用pinv仍然可以得到该矩阵的逆
1.5 梯度下降法VS正规方程
梯度下降法Gradient Desent | 正规方程Norm Equation | |
---|---|---|
缺点 | 1.需要设置学习率$alpha$ 2.需要迭代升级 | 当参数比较大时,计算$theta=(X^{T}X)^{-1}X^{T}y$的时间成本为$O(n^{3})$,但参数个数较小(10k以下?)时,速度会较梯度下降法快;对于一些复杂的学习算法,我们不得不使用梯度下降法来替代正规方程 |
优点 | 当参数非常大时依然能非常好地工作;在一些复杂算法中仍然适用,而正规方程只使用于特定的一些算法中,如线性回归等 | 不需要设置学习率$alpha$;不需要迭代 |
自适应优化算法(如momentum-SGD、NAG、Adagrad、Adadelta、RMSprop)训练出来的结果通常都不如SGD,尽管这些自适应优化算法在训练时表现的看起来更好。 使用者应当慎重使用自适应优化算法。