文章目录
回归
00. 机器学习总览
机器学习的本质就是寻找到一个合适的函数表达式(Function),主要类别如下:
Regression : 函式输出是一个标量。
Classification :给定一系列类别( classes ),函式输出一个正确的类别。
Structured Learning :产生有结构的图像或文件。
01. 案例导入
任务:根据一个频道过往所有的资讯,来预测网络频道流量
步骤:
1.1 写出一个带有未知参数的函数表达式
→ \rightarrow → 模型 y = b + w x 1 y=b+wx_1 y=b+wx1
-
y y y是我们要预测的东西 → \rightarrow → 预测的流量
-
x 1 x_1 x1是这个频道前一天的总流量 → \rightarrow → 数值
-
b b b 和 w w w是未知的参数,透过资料去找出 → \rightarrow → 未知参数
-
猜测 → \rightarrow → 未来流量是前一天的流量乘以 w w w再加 b b b
猜测是基于对该问题的本质的了解,不一定是对的。 (基于 Domain knowledge)
名词定义:
Feature :函数中我们已知的信息,如上式 x 1 x_1 x1
Weight( w w w) :未知参数,和特征直接相乘
Bias( b b b):未知参数,直接加和
1.2 根据训练集中数据定义损失函数
损失函数 L ( b , w ) L(b,w) L(b,w)的输入是模型内部的 参数,如这里是 w w w, b b b。
-
损失(Loss)越大,代表这一组参数越不好,反之则越好、越精准。
-
计算方法:根据 w , b w,b w,b的组合,来求估测值和实际值(label)之间的距离。
-
MAE (mean absolute error)平均绝对误差
-
MSE (mean square error)均方误差
-
Cross-entropy 交叉熵
应用于 y , y ^ y,\hat{y} y,y^是概率分布的情况。
-
名词定义:
Error Surface:用不同的参数输入,计算损失(Loss),画出等高线图。
1.3 优化
求解最优化问题:找到能让损失函数的值最小的参数。
w ∗ , b ∗ = arg min w , b L w^*,b^*=\arg\min_{w,b}L w∗,b∗=argminw,bL
- 具体方法:梯度下降(Gradient Descent)
2 调整模型
模型 y = b + w x 1 y=b+wx_1 y=b+wx1的预测结果总结:
-
在训练集上预测性能好,在未知数据集上预测性能差,泛化能力差。
-
观察真实数据后发现,原有模型忽略了数据本身的周期性性质,需要调整原有模型。
调整后的模型 y = b + Σ j = 1 7 的倍数 w j x j y=b+\Sigma_{j=1}^{7的倍数}w_jx_j y=b+Σj=17的倍数wjxj,我们称之为线性模型(Linear model)见03.线性模型。
02. 梯度下降法
单参数 w w w
-
随机选取一个初始点 w 0 w^0 w0
-
计算在 w = w 0 w=w^0 w=w0时, w w w对函数Loss的微分(斜率)
如果蓝色虚线斜率<0(Negative),左高右低,则我们应增加 w w w的值,使得Loss的值变小。
如果蓝色虚线斜率>0(Positive),左低右高,则我们应减小 w w w的值,使得Loss的值变小。
总结:向比较低的地方移动。
-
根据微分(梯度)的方向,改变参数的值
改变时的步长大小取决于:
a. 斜率的大小
b. 学习率 η \eta η 的大小(超参数)
名词定义:
Hyperparameter(超参数) :机器学习中需要自己设定的东西。
-
重复2,3步,不断更新 w w w
-
停止的条件
a. 自己设置上限(超参数)
b. 理想情况:微分值是0,极小值点,参数不会再更新 → \rightarrow → 有可能陷入局部最小值
事实上:局部最小值不是真正的问题/痛点!
缺陷:
- 问题1:局部最优(Stuck at local minima)
- 问题2:等于0(Stuck at saddle point)
- 问题3:趋近于0(Very slow at the plateau)
多参数 w , b w,b w,b
类似单参数的方法步骤,使得损失函数的值最小。
03. 线性模型
根据周期性修改模型 → \rightarrow → 考虑 前7天或更多星期的数据
缺陷:一个模型无法模拟真实的情况,有局限性。Model Bias
解决方法:提出一个更复杂、更有弹性、有未知参数的函数表达式。
04. 分段线性曲线(Piecewise Linear Curves)
-
模型定义
由多段锯齿状的线段所组成的线 → \rightarrow → 看作一个常数,再加一堆蓝色的函数 ( Hard Sigmoid )
我们用一条曲线来近似描述这条蓝色曲线:Sigmoid函数(S型的function)。
sigmoid的个数就是神经网络中的一层的neuron节点数(使用几个sigmoid是 超参数 )
Sigmoid: y = c 1 1 + e − ( b + w x 1 ) y=c\frac{1}{1+e^{-(b+wx_1)}} y=c1+e−(b+wx1)1
调整 w , b , c w,b,c w,b,c,可以得到不同的sigmoid函数来逼近蓝色曲线,通过求和,最终近似不同的连续函数(Continuous Function)。
- 改变 w w w → \rightarrow → 改变斜率/坡度
- 改变 b b b → \rightarrow → 左右移动
- 改变 c c c → \rightarrow → 改变高度
总结
- 可以用 Piecewise Linear 的 Curves,去 逼近任何的连续的曲线
- 每一个 Piecewise Linear 的 Curves,都可以用 一大堆蓝色的 Function加上一个常量组合 起来得到
- 只要有 足够的蓝色 Function 把它加起来,就可以变成任何连续的曲线
- 利用若干个具有不同 w , b , c w,b,c w,b,c的Sigmoid函数与一个常数参数的组合,可以模拟任何一个连续的曲线(非线性函数)
拓展到多个特征:
y = b + ∑ i c i sigmoid ( b i + ∑ j ( w i j x j ) ) y=b+\sum_i c_i \text{sigmoid}(b_i+\sum_j(w_{ij}x_j)) y=b+∑icisigmoid(bi+∑j(wijxj))
- j = 1 , 2 , 3 j=1,2,3 j=1,2,3 : x 1 x_1 x1代表前一天的流量, x 2 x_2 x2代表两天前的流量,…
- 每一个 i i i代表了一个蓝色函数
- w i j w_{ij} wij:第 i i i个sigmoid给第 j j j个特征的权重
转化为矩阵计算+激活函数形式
-
写出损失函数
-
优化
梯度下降
05. 批训练 (Batching training)
每次更新参数时,只使用 1个batch 里的数据计算Loss,求取梯度,更新参数
名词解释:
Update :每次更新一次参数叫做一次 Update,
Epoch :把所有的 Batch 都看过一遍,叫做一个 Epoch
-
使用较小的BatchSize,在更新参数时会有噪声 => 有利于训练
-
使用较小的BatchSize,可以避免过拟合 => 有利于测试
06. 模型变型
ReLU(Rectified Linear Unit,线性整流单元)
多加几层 => 做几次 => 超参数
07. 深度学习
警惕过拟合!
解决方法:引入正则项