Datawhale X 李宏毅苹果书 AI夏令营 task2 线性模型

一.线性模型

1.定义

机器学习的线性模型是一种广泛应用的基础模型类型,它通过定义特征与目标变量之间的线性关系来进行预测或分类任务,这些模型都是把输入的特征 x 乘上一个权重,再加上一个偏置就得到预测的结果,形如y = b + wx

2.分段线性曲线

问题引入:

线性模型也许过于简单,x 跟 y 可能中间有比较复杂的关系

对于线性模型,x 跟 y 的关系就是一条直线,随着 x 越来越高,y 就应该越来越大。设定不同的 w可以改变这条线的斜率,设定不同的 b 可以改变这一条蓝色的直线跟 y 轴的交叉点

但是无论如何改 w 跟 b,它永远都是一条直线,永远都是 x 越大,y 就越大,这显然在现实中是不合常理的,也许 x 跟 y 中间,有一个比较复杂的、像红色线一样的关系

但不管如何设置 w 跟 b,永远制造不出红色线,永远无法用线性模型制造红色线。显然线性模型有很大的限制,这一种来自于模型的限制称为模型的偏差,无法模拟真实的情况

所以我们需要写一个更复杂的、更有灵活性的、有未知参数的函数。红色的曲线可以看作是一个常数再加上一群 Hard Sigmoid 函数。Hard Sigmoid 函数的特性是当输入的值,当 x 轴的值小于某一个阈值(某个定值)的时候,大于另外一个定值阈值的时候,中间有一个斜坡。所以它是先水平的,再斜坡,再水平的。所以红色的线可以看作是一个常数项加一大堆的蓝色函数(Hard Sigmoid),其中,常数项设成红色的线跟 x 轴的交点一样大

简单介绍:

红色线,即分段线性曲线可以看作是一个常数,再加上一堆蓝色的函数。

分段线性曲线可以用常数项加一大堆的蓝色函数组合出来,只是用的蓝色函数不一定一样。

如果分段线性曲线越复杂转折的点越多,所需的蓝色函数就越多

也许要考虑的 x 跟 y 的关系不是分段线性曲线,而是如图所示的曲线。可以在这样的曲线上面,先取一些点,再把这些点起来,变成一个分段线性曲线

我们可以用分段线性曲线去逼近任何的连续的曲线,而每个分段线性曲线都可以用一大堆蓝色的函数组合起来。也就是说,只要有足够的蓝色函数把它加起来,就可以变成任何连续的曲线。

假设 x 跟 y 的关系非常复杂也没关系,就想办法写一个带有未知数的函数。直接写 HardSigmoid 不是很容易,但是可以用一条曲线来理解它,用 Sigmoid 函数来逼近 Hard Sigmoid,Sigmoid 函数的表达式为 

其横轴输入是 x1,输出是 y,c 为常数 

如果 x 的值,趋近于无穷大的时候,e−(b+wx) 这一项就会消失,当 x非常大的时候,这一条就会收敛在高度为 c 的地方。

如果 x 负的非常大的时候,分母的地方就会非常大,y的值就会趋近于 0。

所以可以用这样子的一个函数逼近这一个蓝色的函数,即 Sigmoid 函数,Sigmoid 函数就是 S 型的函数。因为它长得是有点像是 S 型,所以叫它 Sigmoid 函数。

调整这里的 b、w 和 c 可以制造各种不同形状的 Sigmoid 函数,用各种不同形状的 Sigmoid函数去逼近 Hard Sigmoid 函数。

如果改 w,就会改变斜率,就会改变斜坡的坡度

如果改了 b,就可以把这一个 Sigmoid 函数左右移动

如果改 c,就可以改变它的高度

所以只要有不同的 w 不同的 b 不同的 c,就可以制造出不同的 Sigmoid 函数,把不同的Sigmoid 函数叠起来以后就可以去逼近各种不同的分段线性函数;分段线性函数可以拿来近似各种不同的连续的函数。 

使用 Hard Sigmoid 来合成红色:

构建更有灵活性的函数:

wij 代表在第 i 个 Sigmoid 里面,乘给第 j 个特征的权重,w 的第一个下标代表是现在在考虑的是第一个 Sigmoid 函数。为了简化起见,我们可以用矩阵跟向量相乘的方法,写一个比较简洁的写法 

 

将其改成线性代数比较常用的表示方式为r = b + W x 

其中,a = σ(r),上面这个比较有灵活性的函数,如果用线性代数来表示,即

把 W 的每一列或每一行“拼”成一个长的向量,把 b,c^T, b” 拼” 上来,这个长的向量直接用 θ 来表示。所有的未知的参数,一律统称 θ 

定义损失及其优化: 

之前是 L(w, b),因为 w 跟 b 是未知的。现在未知的参数很多了,再把它一个一个列出来太累了,所以直接用 θ 来统设所有的参数,所以损失函数就变成 L(θ),其计算方法与task1中两个参数的时候是一样的 

比较有灵活性函数的计算过程:

 

计算每一个未知的参数对 L 的微分,得到向量 g,即可以让损失变低的函数 

 

假设有 1000 个参数,这个向量的长度就是 1000,这个向量也称为梯度,∇L 代表梯度。

L(θ0) 是指计算梯度的位置,是在 θ 等于 θ0 的地方。

计算出 g 后,接下来跟新参数,θ0 代表它是一个起始的值,它是一个随机选的起始的值,代表 θ1 更新过一次的结果,θ02 减掉微分乘以,减掉 η 乘上微分的值,得到 θ12,以此类推,就可以把 1000 个参数都更新了 

 

未知参数“拼”成一个向量 

 

使用梯度下降更新参数:

分批量进行梯度下降:

 

3.模型变形 

 HardSigmoid 可以看作是两个修正线性单元(Rectified Linear Unit,ReLU)的加总,ReLU 的图像有一个水平的线,走到某个地方有一个转折的点,变成一个斜坡,其对应的公式为

c ∗ max(0, b + wx1) 

max(0, b + wx1) 是指看 0 跟 b + wx1 谁比较大,比较大的会被当做输出

如果 b + wx1 < 0,输出是 0;如果 b + wx1 > 0,输出是 b + wx1

通过 w, b, c 可以挪动其位置和斜率 

在机器学习里面,Sigmoid 或 ReLU 称为激活函数(activation function)

ReLU 函数

 

接下来可以继续改模型,从 x 变成 a,就是把 x 乘上 w 加 b,再通过Sigmoid 函数

不一定要通过 Sigmoid 函数,通过 ReLU 也可以得到 a,同样的事情再反复地多做几次, 所以可以把 x 做这一连串的运算产生 a,接下来把 a 做这一连串的运算产生 a′,反复地多做的次数又是另外一个超参数

注意,w, b 和 w′, b′ 不是同一个参数,是增加了更多的未知的参数

Sigmoid 或 ReLU 称为神经元(neuron),很多的神经元称为神经网络(neural network) 

人工智能就是在模拟人脑,每一排称为一层,称为隐藏层(hiddenlayer),很多的隐藏层就“深”,这套技术称为深度学习 

人们把神经网络越叠越多越叠越深,残差网络(Residual Network,ResNet)有 152 层,错误率降到 3.57%

 

在训练数据和测试数据上的结果是不一致的,这种情况称为过拟合(overfitting)

 

深度学习的训练会用到反向传播(BackPropagation,BP),其实它就是比较有效率、算梯度的方法

4.机器人学习框架 

我们会有一堆训练的数据以及测试数据如:测试集就是只有 x 没有 y 

训练集就要拿来训练模型,训练的过程是 3 个步骤:

1. 先写出一个有未知数 θ 的函数,θ 代表一个模型里面所有的未知参数。fθ(x) 的意思就是函数叫 fθ(x),输入的特征为 x

2. 定义损失,损失是一个函数,其输入就是一组参数,去判断这一组参数的好坏

3. 解一个优化的问题,找一个 θ,该 θ 可以让损失的值越小越好

让损失的值最小的 θ 为θ∗,即 

有了 θ∗ 以后,就把它拿来用在测试集上,也就是把 θ∗ 带入这些未知的参数,本来 fθ(x)里面有一些未知的参数,现在 θ 用 θ∗ 来取代,输入是测试集,输出的结果存起来,上传到Kaggle 就结束了 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值