Datawhale X 李宏毅苹果书 AI夏令营 ————机器学习模型优化及深度学习入门

学习链接:Datawhale

本篇笔记的示例来自台大教授李宏毅的机器学习|深度学习课程,学习链接:预测本频道观看人数(下) - 机器学习基本概念简介_哔哩哔哩_bilibili

什么是线性模型

我们在上一章介绍机器学习模型的时候,使用了一个函数来进行讲解,详见上一篇文章:Datawhale X 李宏毅苹果树 AI夏令营 ——机器学习入门-CSDN博客

 

这个函数用来介绍梯度下降很好理解,但是实际上的机器学习肯定不可能用那么简单的一个函数,我们先来看看用这个函数有什么不足:

 

这是用上述的模型所预测得到的观看次数,蓝色是估计的观看次数而红色为实际观看次数,仔细观察可以发现,蓝色的曲线其实长得和红色曲线非常像,这是应为模型本来输入的参数就是一个常数加上前一天的观看次数,我们之用到了前一天的观看次数来预测下一天的观看次数,所以下一天的观看次数和前一天观看次数是一个线性关系 ,而且就看图也能发现这个模型有时的预测效果是很差的,如果前后两天的观看次数有较大的波动,损失可能会非常大。

其实很容易能想到,如果因为模型参数过少导致损失较大,我们传入更多的参数,当然也会得到更好的预测结果,比如我们把前七天的观看人数甚至是前二十天,前五十天的数据都输入,虽然会提高模型的运算量,但是损失一定是更小的。我们这里就拿七天举例:

解释一下这个公式:b是一个偏置(bias),wj是每个xj对应的权重(weight),因为下一天的观看人数不可能受前七天观看人数影响都一样多,机器的逻辑是前一天要更预测的隔天的数值的关系很大,所以w1的值肯定要比w2-w7更大。如果是前二十天,那就是下标j从1到20;如果是前五十天,下标j就要从1加到50。这些模型有着共同的特点,就是把输入的特征值x乘上一个权重w,然后再加上一个偏置得到预测的结果,我们给这类模型一个统一的名字:线性模型(linear model)

线性模型的局限性与优化

虽然我们引入的更多的x作为输入参数,但是其实模型还是很不贴合实际:通过权重和偏置的拟合,我们只能作出一条直线,而实际预测值往往是多变的,有很多的曲折变化,这是我们通过调整w和b所无法贴合的。

想要拟合这种有曲折的折线,我们需要更为复杂的函数。红色的曲线其实可以看成是一个常数加上一堆的Hard Sigmoid函数 ,Hard Sigmoid函数就是如图中每一条蓝色函数这样,x在小于某个阈值时,函数值始终为0,而x在大于某个阈值时,函数值为一个常数,x在这两个阈值之间时,函数j具有斜率。

比如上面这条红色的分段线性函数,其实就是0+1+2+3四条Hard Sigmoid的求和。分段线性函数越复杂,转折点越多,需要的Hard Sigmoid函数也就越多。或者所求函数是一条曲线,我们也可以将这条曲线分割成很多个不同的线性函数拟合,分割的点越多,拟合的结果就会越接近这条曲线。

知道了使用Hard Sigmoid函数来优化的方法,我们还要知道怎么来表示Hard Sigmoid函数。通过函数的定义,我们当然可以用max(0,b+wx)来表示函数,这是函数的一种表示方法;同时,我们也可以用一条s型曲线来近似表示Hard Sigmoid函数,比如下面这个函数:

可以发现当x趋近负无穷时,y的值趋近于0,x趋近于正无穷时,y的值趋近于c,画出这个函数的图像可以发现他和Hard Sigmoid函数非常相似,我们把这类函数叫做Sigmoid函数

我们通过调整不同的c、b、w,也就得到了不同的sigmoid函数,就可以用来近似表示不同的hard sigmoid函数。

新模型计算方法及优化

讲完了用sigmoid函数来拟合hard sigmoid函数,我们将sigmoid函数带入,得到新的模型:

同样每个x还是对应着一个权重,不同的是我们计算出每个x和权重相乘再加上sigmoid函数里对应的b,然后带入sigmoid函数,再计算出所有的sigmoid函数值,最后加上偏置b。我们可以用矩阵乘法来表示这个计算过程:

用线代的表示方法即r=b+Wx(注意这里的r,b,W,x都是向量)

虽然我们用了新的模型,但损失的定义还是和之前一样的。不同的是,现在位置的参数增多了,再将每个参数一一列出带入太麻烦了,我们用一个向量\theta来统设所有的参数,自此损失函数就变为了L(\theta)。

接下来要对\theta进行优化,找到使损失最小的\theta。还是采用梯度下降的方法,我们计算每一个位置的参数对L的微分,得到向量g,然后我们用原来的\theta减去微分乘上学习率的积得到新的\theta,然后重复这个循环不断优化\theta

在实际的实现上,我们不会用整个样本量去对\theta求偏微分,而是把样本分为一个个批量(batch)。每个批量里包含着一部分数据,计算梯度实际上是用一个个批量来计算。

把所有的参数都计算一次,称为一个回合(epoch),而每次用batch来计算梯度,就是一个更新(upgrade)

其实上面有提到,我们拟合Hard Sigmoid函数不一定要用Sigomid函数,也可以用max(0,b+wx)这样的表示,这种表示为两个线性修正单元ReLu(Rectified Linear Unit)的加总。在机器学习里面,Sigmoid或ReLu称为激活函数(activation function)

深度学习与神经网络

我们在优化了线性模型以后,有没有什么别的方法继续减小损失?有的,我们在线性模型中,将x乘上W加b通过sigmoid function得到了一组的结果a,如果我们将此时的a带回模型中继续计算,a乘上一个W'加上b'又通过一个sigmoid function得到a’,然后有继续带入重复这个循环,至于具体重复多少次,就又是一个超参数jyperparameter了。注意这里重新带入的式子中W'、b'并不是之前那个模型的W和b,而是新的参数。

在这个过程中,我们给当中的sigmoid或者ReLU一个新的名字:神经元(neuron),而这些神经元组合起来,就是我们经常听到的神经网络(neural network)。我们不断迭代中每一次计算的一排,都称为一个隐藏层(hidden layer),而很多隐藏层堆叠在一起,优化的次数就很深。这套技术便被称为深度学习(deep learning)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值