Datawhale X 李宏毅苹果书 AI夏令营 Task2笔记:了解线性模型
1.线性模型
标量形式:其中x称为特征,b 称为偏置(bias)
向量形式:其中w 称为权重(weight),w=(w1;w2;…;wd)
优点:解释性好,从系数可以看出变量影响程度
1.1用线性模型做回归:
线性回归目标函数:f(x) = wx + b,收集n个序列样本:X = x1,x2,x3…xn,使得f(x)约为y
最常用的性能度量:均方误差
平均绝对误差:估测的值跟实际的值之间的差距,其实有不同的计算方法,计算 y 与 yˆ 之间绝对值的差距,如式所示,称为平均绝对误差(Mean Absolute Error,MAE)。
e = |yˆ − y|
均方误差:如果算 y 与 yˆ 之间平方的差距,如式所示,则称为均方误差(Mean SquaredError,MSE)。
e = (ˆy − y)2
目的:优化误差
回归的输出是连续的实数,在实数空间里选择一个实数
考虑了比较多的信息,在训练数据上应该要得到更好的、更低的损失。
2.分段线性模型
2.1 引出分段线性模型
无论如何改 w 跟 b,Hard Sigmoid 函数(蓝色线)永远都是一条直线,永远都是 x1 越大,y 就越大。但现实中也许在 x1 小于某一个数值的时候,前一天的观看次数跟隔天的观看次数是成正比;也许当 x1 大于一个数值的时候,x1 太大,前天观看的次数太高,隔天观看次数就会变少;也许 x1 跟 y 中间,有一个比较复杂的、像红色线一样的关系。但不管如何设置 w 跟 b,永远制造不出红色线,永远无法用线性模型制造红色线。显然线性模型有很大的限制,这一种来自于模型的限制称为模型的偏差,无法模拟真实的情况。
红色的曲线(红色线,即分段线性曲线(piecewise linear curve))可以看作是一个常数再加上一群 Hard Sigmoid 函数(蓝色线)(其可以写成(b + wx1))。Hard Sigmoid 函数的特性,当 x 轴的值小于某一个阈值(某个定值)的时候,大于另外一个定值阈值的时候,中间有一个斜坡。所以它是先水平的,再斜坡,再水平
2.2 如何形成红色的曲线(即分段线性曲线(piecewise linear curve))
形成方法:蓝线 1 函数斜坡的起点,设在红色函数的起始的地方,第 2 个斜坡的终点设在第一个转角处,让第 1 个蓝色函数的斜坡和红色函数的斜坡的斜率是一样的,这个时候把 0+1 就可以得到红色曲线左侧的线段。
分段线性曲线的特性:分段线性曲线可以用常数项加一大堆的蓝色函数组合出来,只是用的蓝色函数不一定一样。要有很多不同的蓝色函数,加上一个常数以后就可以组出这些分段线性曲线。如果分段线性曲线越复杂,转折的点越多,所需的蓝色函数就越多。
2.21 分段线性曲线的使用
可以用分段线性曲线去逼近任何的连续的曲线
2.3 分段线性函数逼近连续的函数
过程:
Sigmoid 函数---->Hard Sigmoid---->分段线性函数---->连续的函数
详细过程:
用 Sigmoid 函数来逼近 Hard Sigmoid
Sigmoid 函数的表达式为,调整这个表达式的 b、w 和 c 可以制造各种不同形状的 Sigmoid 函数,用各种不同形状的 Sigmoid函数去逼近 Hard Sigmoid 函数,如果改 w,就会改变斜率,就会改变斜坡的坡度。如果改了 b,就可以把这一个 Sigmoid 函数左右移动;如果改 c,就可以改变它的高度。所以只要有不同的 w 不同的 b 不同的 c,就可以制造出不同的 Sigmoid 函数,把不同的Sigmoid 函数叠起来以后就可以去逼近各种不同的分段线性函数;分段线性函数可以拿来近似各种不同的连续的函数。
2.4 找出更有灵活性的函数
2.41 整体思想
:我们可以不只用一个特征 x1,可以用多个特征代入不同的 c, b, w,组合出各种不同的函数,从而得到更有灵活性(flexibility)的函数。
2.42 具体实现
1) 未知参数: x1 代表前一天的观看次数,x2 代表前两天的观看次数,x3 代表前三天的观看次数,每一个 i 就代表了一个蓝色的函数( Hard Sigmoid 函数)。每一个蓝色的函数都用一个 Sigmoid 函数来比近似它,1,2,3 代表有3个 Sigmoid 函数。
wij 代表在第 i 个 Sigmoid 里面,乘给第 j 个特征的权重,
将其改成线性代数比较常用的表示方式为:r = b + W x,r1, r2, r3 分别通过 Sigmoid 函数得到 a1, a2, a3,即a = σ®,最终,用线性代数来表示:
接下来,未知参数“拼”成一个向量,这个长的向量直接用 θ 来表示。所有的未知的参数,一律统称 θ。
2) 定义损失:
先给定 θ 的值,即某一组 W, b, cT, b 的值,再计算一下跟真实的标签之间的误差 e。把所有的误差通通加起来,就得到损失。
3) 优化
要找到 θ 让损失越小越好,一开始要随机选一个初始的数值 θ0。接下来计算每一个未知的参数对 L 的微分,得到向量 g,即可以让损失变低的函数
∇L 代表梯度,会把 N 笔数据随机分成一个一个的批量(batch),一组一组的。其中 B 笔数据一组,一组叫做批量。本来是把所有的数据拿出来算一个损失,现在只拿一个批量里面的数据出来算一个损失。根据 L1 算出梯度,再更新参数,再取下一个批量算出 L2,所以并不是拿 L 来算梯度,实际上是拿一个批量算出来的 L1, L2, L3 来计算梯度。把所有的批量都看过一次,称为一个回合(epoch),每一次更新参数叫做一次更新
3.模型变形
其实还可以对模型做更多的变形,不一定要把 Hard Sigmoid 换成 Soft Sigmoid。HardSigmoid 可以看作是两个修正线性单元(Rectified Linear Unit,ReLU)的加总,想要用 ReLU,就把 Sigmoid 的地方,换成max(0, bi + wijxj )。 max(0, b + wx1) 是指看 0 跟 b + wx1 谁比较大,比较大的会被当做输出。在机器学习里面,Sigmoid 或 ReLU 称为激活函数(activation function),使用多个ReLU 作为模型,训练数据上损失就会更小,但是在没看过的数据上,损失没有变化。在训练数据和测试数据上的结果是不一致的,这种情况称为过拟合(overfitting)。
Sigmoid 或 ReLU 称为神经元(neuron),很多的神经元称为神经网络(neural network)。
4.机器学习框架
我们会有一堆训练的数据以及测试数据如式 (1.30) 所示,测试集就是只有 x 没有 y。
训练集就要拿来训练模型,训练的过程是 3 个步骤。
- 先写出一个有未知数 θ 的函数,θ 代表一个模型里面所有的未知参数。fθfθ(x) 的意思就是函数叫 fθfθ(x),输入的特征为 x,;
- 定义损失,损失是一个函数,其输入就是一组参数,去判断这一组参数的好坏;
- 解一个优化的问题,找一个 θ,该 θ 可以让损失的值越小越好。让损失的值最小的 θ 为θ∗,即