Regression(回归)
回归可以用来做什么?
- 股票预测:Input 股票历史数据,Output 明日股票数据
- 自动驾驶:Input 周围障碍物情况,Output 方向盘角度
- 推荐系统:Input 使用者A,商品B,Output 购买商品的可能性
数学前提
- 中心极限定理:当样本数量很大的时候,样本往往趋于正态分布
- 正态分布:呈样本数量中间高、两头低的分布
- 最大似然估计:概率的反向。“概率”是已知参数求概率,比如知道硬币正反的参数都是0.5,来求得硬币正面的概率是多少。最大似然估计是通过场景呈现的结果,来反求得这个对象的几个参数是多少。
用Regression来预测Pokemon进化后的CP值
Step1: Model
- Input 10只Pokemon的相关数值(当前CP值,体重,种类等),Ouput它进化后的Pokemon的CP值
Step2: Goodness of Function
- 需要有一个function来评估之前的functions的好坏,把这个function叫做 Loss Function (损失函数)
- 数值越大表示function越不好(上标代表是第几只pokemon,下标代表pokemon的cp参数)
- 所以每一次迭代都朝着损失函数减小的方向前进,直到找到了当前参数的损失函数极小值,那么损失函数的极小值就是最小值吗?有没有可能只找到了局部最优解,而不是全局最优解。即,是否只找到了损失函数曲线上的极小值点,而非最小值点?
- convex function(凸函数):若一个函数最多只存在一个极小值点,则该函数是convex function
- 在Linear Regression问题中,损失函数就是一个凸函数,所以,在当前的参数下,一定能找到全局最优解。
Step3: Best Functon
-
基本步骤
- 基本思路:
- 即
- 即
- 找到使得损失函数最小的w和b,如何找到呢,运用 Gradient Descent,梯度下降
- 梯度下降,对参数w求导,求出来损失函数的斜率,再乘上参数n,把值加在参数w上,得到
- ...
- 不断优化迭代,直到和的差值小于某一特定数,或者迭代多少次以上
-
求导
梯度下降代码:
epsilon = 0.00001
def GradientDescend(diff,w,y,x_cp):
while(diff>=epsilon):
w_next = 0
for y_n,x in y,x_cp:
w_next += w - n * ( 2 * (y_n - (b + w * x))) * -1 * x
diff = w - w_next
w = w_next
return w
- 但是也要注意模型的选择,过于贴合当前实验值的曲线,有可能会造成overfitting(过拟合)因为当前曲线也由其他因素(测量误差,噪音,和其他参数)影响。过于用现有的参数去模拟其他的参数,会使得模型变得复杂并且不具备健壮的泛化能力。
Step2 Optimised: Regularization(正则化)
- 优化损失函数,期待一个参数值更加小的function,更加平滑的曲线(不要过于平滑)
- 越大,实验的误差会越大 ,但是对于测试的误差可能会变小。
- 损失函数后面会添加一个额外项,这可以看作是损失函数的“惩罚项”,是用来解决模型过拟合问题的。通常有L2-Norm, L1-Norm,L0-Norm(L2范式或者L2正则化)
- L2-Norm
- L1-Norm
- L1-Norm和L2-Norm咋一看看起来好像差不多,都是让参数变小,但其实有一定区别,两者求导后,L1-Norm会出现,L1-Norm会让参数变稀疏,也就是会让一些参数变为0.
通过和L2规范化的权重更新规则对比,可以看出在 L1 规范化中,权重通过一个常量向 0 进行缩小。在 L2 规范化中,权重通过一个和 w 成比例的量进行缩小的。所以,当一个特定的权重绝对值 |w| 很大时,L1 规范化的权重缩小得远比 L2 规范化要小得多。相反,当一个特定的权重绝对值 |w| 很小时,L1 规范化的权重缩小得要比 L2 规范化大得多。最终的结果就是:L1 规范化倾向于聚集网络的权重在相对少量的高重要度连接上,而其他权重就会被驱使向 0 接近。
深度学习中的正则化技术—知乎专栏 - L0-Norm
- 由于L0-Norm主要用来衡量参数中的非零参数个数,对模型的正则化效果并不好,所以通常用L1-Norm来正则化
- 为什么只对w/Θ做限制,不对b做限制?
- 因为限制是为了使得曲线的弯曲程度更加合理,b是截距,不会对弯曲程度造成影响。
- L2-Norm