CV学习:李宏毅2021机器学习(1)

CV学习:李宏毅2021机器学习(1)

当你需要对于某个领域进行深入研究之前,你最需要做的事情就是打好基础。这不仅意味着知识的积累,更是判断你是否真的对其感兴趣
那么从本文开始,我将使用大概一个月的时间学习李宏毅老师于2021与2020对于Machine Learning以及Deep Learning的内容。本文将着重于其前两个Topic——Model训练与机器学习任务问题处理。

Model的训练步骤

对于一个Model的训练,一共分为三步。分别是:
1.寻找那个我们渴望找到的最合适的Function。
2.通过输入训练集的数据,来得到Loss的值
3.通过Loss的值,我们使用Optimization优化器来对参数进行优化。
接下来,我们就使用老师所给的他的频道观看人数的预测模型作为例子,来分别介绍三种方法。

在这里插入图片描述

寻找未知的Function

Linear Function

起初,我们可能最先想想到的便是一个简单的式子:y = wx + b,其中,x为前一天的人数,而w为权重,b为偏置。因为一个频道明天的观看人数一定与昨天有关。
这很显然,但经过训练,却得出了如下的结果:
我们能
如果我们细心观察,我们会发现,其实Model不过是把每天都真实数据向右平移了一些而已,所有预测都只是基于前一天而已,这样的预测结果,是显然不准确的。原因就是,无论w和b如何调整,它永远都只能是Linear Function。

Nolinear Function

正是因为线性函数的表达能力不足,因此,我们需要非线性函数的引入。那么,对于非线性函数,我们的参数应该如何构造呢?我们依然采用线性函数来构造它。
在这里插入图片描述
对于上图所示的折线函数,我们可以采用多个函数叠加的方法来构造。
在这里插入图片描述
如图,用多个蓝色的Function加上一个常值函数来构造一个折线函数,每有一个“Z"型函数,就会在总Function上多形成一个转折点。
那么,这个Z型函数如何构造呢,我们大体上使用两种构造方法:

1.Sigmoid Function

Sigmoid可以理解为S型的函数,它的数学式子如下:
y   =   c 1 1 + e − ( b + w x 1 ) y\ =\ c\frac{1}{1+e^{-\left(b+wx_1\right)}} y = c1+e(b+wx1)1
它的函数图像,如下:在这里插入图片描述
它用近似的曲线来逼近Z型函数。

2.ReLU Function

ReLU函数很简单:
y   =   c m a x { 0 , w x + b } y\ =\ cmax\left\{0,wx+b\right\} y = cmax{0,wx+b}
它的具体函数如图所示:
在这里插入图片描述
当两个ReLu函数叠加在一起,它将可以形成一个Z型折线
在这里插入图片描述

非线性函数

那么,最终的非线性函数,就可以分别用多个Sigmoid函数或者ReLU函数,与一个常值函数的叠加作为近似来形成了:
y   =   b + ∑ i c i S i g m o i d ( b i + ∑ j w i j x j ) y\ =\ b+\sum_{i}c_iSigmoid\left(b_i+\sum_{j}{w_{ij}x_j}\right) y = b+iciSigmoid(bi+jwijxj)
ReLU
y   =   b + ∑ i c i M a x ( 0 , b i + ∑ j w i j x j ) y\ =\ b+\sum_{i}c_iMax\left(0,b_i+\sum_{j}{w_{ij}x_j}\right) y = b+iciMax(0,bi+jwijxj)

更深入的Function

以上的那些,均是只有一层的函数。其表达能力十分有限,并且对于特征的提取能力,也并不优异。因此,有人就考虑让其多层叠加,具有更深的网络,所谓的Deep Learning也正来源于此,不过为什么更深层次的Network表达能力更强,深层次的这样的函数叠加究竟具有怎样的数学含义,我将在后续给出解答。
在这里插入图片描述

从训练集中得到Loss

我们知道,预测一个值与其真实值往往具有差别。我们规定,对于一个Model,它的Loss(损失函数)为:
L ( θ ) =   ∑ n = 1 N ( y ^ n − ( b + w x i n n ) ) 2 L\left(\theta\right)=\ \sum_{n=1}^{N}\left({\hat{y}}^n-\left(b+wx_{in}^n\right)\right)^2 L(θ)= n=1N(y^n(b+wxinn))2
其中,我们需要提到的是,θ表表示该Model所有的参数组成的列向量,而y帽表示训练集的实际真实值。

求出Loss的方法有许多,但我们只需要知道,Loss越小,模型拟合的越好!

用Optimization优化

可以说,一个模型的结构的的好坏,将决定这个模型的上限有多强;但是,一个模型Optimization的好坏,将决定你能将这个模型的潜力挖掘到多深。

那么,我们就先学习这个优化方法:Gradient Descent(梯度下降)
我们先假设一组Parameters为:
{ w 1 w 2 ⋯     b 1 b 2 … } \left\{\begin{matrix}w1&w2&\cdots\ \ \ \\\end{matrix}\begin{matrix}b1&b2&\ldots\\\end{matrix}\right\} {w1w2   b1b2}
并给予其初始状态为θ0
我们通过L(θ0)得出其Loss
并返回其梯度为:
( ∂ L ( θ ) ∂ w 1 ∣ θ = θ 0 ∂ L ( θ ) ∂ w 2 ∣ θ = θ 0 ⋮ ∂ L ( θ ) ∂ b 1 ∣ θ = θ 0 ∂ L ( θ ) ∂ b 2 ∣ θ = θ 0 ⋮ ) \left(\begin{array}{ccccc} \left.\frac{\partial L(\theta)}{\partial w_1}\right|_{\theta =\theta_0} \\ \left.\frac{\partial L(\theta)}{\partial w_2}\right|_{\theta =\theta_0} \\ \vdots \\ \left.\frac{\partial L(\theta)}{\partial b_1}\right|_{\theta =\theta_0} \\ \left.\frac{\partial L(\theta)}{\partial b_2}\right|_{\theta =\theta_0} \\ \vdots \\ \end{array}\right) w1L(θ)θ=θ0w2L(θ)θ=θ0b1L(θ)θ=θ0b2L(θ)θ=θ0
用它表示:
∇ ( θ 0 ) \nabla(\theta_0) (θ0)
并使用设置学习率Learning_rate(η)对θ进行更迭:
θ 1 = θ 0 − η ∇ ( θ 0 ) \theta^1=\theta^0-\eta\nabla\left(\theta^0\right) θ1=θ0η(θ0)
之后,再次检测Loss,重新求梯度。。。在这样不断更迭中,Model不断接近自己想要拟合的函数式。

机器学习任务攻略

当我们第一次开始自己设计Model的时候,模型不work是经常发生的事情,即使在我们深入了解其内在之后,这也是时常发生的事情。但是,如果我们能知道,如何修补,在什么情况下是哪里出了问题,我们将能更好的改进它!
当我们在测试集(Training Data)中表现不佳的时候。我们更应该去观察的,其实是它在训练集中的表现,这是因为,只有我们得知了它在训练集中的表现,我们才能得知其毛病究竟出在哪里。在这里插入图片描述

Training Data Large

如图所示,当训练集中,Loss也十分大的时候,我们应该知道,其实它在训练时就没有学好。这很类似一个学生,他在期末考了59分(相当于测试集),十分糟糕,但他却说自己其实认真学了,不过是考试的题目不适合自己,而且太紧张了发挥失常。但当你看他的每次周考,发现其实他每次都是40分,59已经超长发挥了。我们可以得出结论:这个学生并非没考好,而是压根没学好。类似的,我们也可以对这种情况得出结论:Model并非一定不堪重负,而是还没学习成功。

对于上述情况,我们约有两种解决思路

1.Model Bias

模型的参数数量直接影响了模型的拟合能力。随着参数数量增大,模型将更具有弹性,反之则更趋于直线。当参数过少的时候,所有参数取值构成的Function Set就不足够大,这样也导致或许你已经找到了你所限定的范围内最好的那一组Bias,但它还不够好的情况。为此,你可能需要加深你的网络,或者拓展你的参数。
在这里插入图片描述

2.Optimization

模型的优化器将直接影响你对于Model的开发程度。
例如:在这里插入图片描述
当如上情况出现的时候,你或许会被卡在Local Minimize Point
θ星上,而不是右边明显更好的点。而之后将对更多,更有效的优化器进行介绍!

Training Data Small

而当你的训练集表现够好的时候,你或许就该回头看看你的测试集了。如果测试集也表现够好,那么你或许可以开心的使用你的Model。但如果测试集明显很糟糕,那么你就该认真研究一下什么发生了。

1.Overfitting

过拟合在这时成为你必须要考虑到第一要务
在这里插入图片描述
当你的模型很深,参数很多,弹性很大,而训练的数目以及广度并不能与之匹配时。就会出现上图所示的情况。
你或许可以选择去网上寻找更多的数据,但我建议可以尝试使用Data Augmentation来缓解这种情况的发生。比如对输入加入适当的噪音来建立更多数据,或者对Image进行镜像处理或适当剪裁,来获得多张图片。这些都是常用的增加数据的方法。

2.Mismatch

或许你也应该考虑一下,是否你的参数设置的过多或者过少了在这里插入图片描述
当你要处理的问题很简单,但你设置的模型太过于复杂的时候,或许就会出现不匹配的情况,因此,需要结合问题具体分析。
当然,也可能出现现在我们所学习的Fully Connected Network无法解决的问题,不过后续我们将会找到更好的方法。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值