李宏毅机器学习课程笔记

课程资源

B站视频
课程网址
课程笔记
问答整理

下面仅记录自己的所得所感

第一节

Regression

从单变量回归引入,再sigmoid/RELU拟合函数从而一步步到深度学习的框架,介绍的非常巧妙。尤其在sigmoid/RELU拟合函数那里,听了之后很有收获。
老师在引入的例子中用的x表示的是前几天的数据关系,不过我理解的时候还是觉得用特征来理解好不少。
在这里插入图片描述
在这里插入图片描述

to learn more——backpropagation

在这里插入图片描述

就是应用链时法则,从后往前求微分,https://blog.csdn.net/zzhhjjjj/article/details/120788339

第二节

overfitting

在这里插入图片描述
一般会出现这样的情况:模型太简单,出现high bias的情况(训练误差和验证误差都比较大);模型太复杂,出现overfitting的状况(训练误差小,验证误差大)

Cross Validation

把Training的资料分成两半,一部分叫作Training Set,一部分是Validation Set
你在Validation Set上面,去衡量它们的分数,你根据Validation Set上面的分数,去挑选结果,最终在test set中去测评模型的泛化能力。

N-fold Cross Validation

N-fold Cross Validation就是你先把你的训练集切成N等份,在这个例子裡面我们切成三等份,切完以后,你拿其中一份当作Validation Set,另外两份当Training Set,然后这件事情你要重复三次

也就是说,你先第一份第二份当Train,第三份当Validation,然后第一份第三份当Train,第二份当Validation,第一份当Validation,第二份第三份当Train

然后接下来 你有三个模型,你不知道哪一个是好的,你就把这三个模型,在这三个setting下,在这三个Training跟Validation的,data set上面,通通跑过一次,然后把这三个模型,在这三种状况的结果都平均起来,把每一个模型在这三种状况的结果,都平均起来,再看看谁的结果最好

Local Minimum And Saddle Point

在这里插入图片描述
过去常见的一个猜想,是因為我们现在走到了一个地方,这个地方参数对loss的微分為零

讲到gradient為零的时候,大家通常脑海中最先浮现的,可能就是local minima

但gradient为零还可能是其他情况,比如说 saddle point,所谓的saddle point,像图中显示那样,它在左右这个方向是比较高的,前后这个方向是比较低的,它就像是一个马鞍的形状,所以叫做saddle point,那中文就翻成鞍点

像saddle point这种地方,它也是gradient為零,但它不是local minima,那像这种gradient為零的点,统称為critical point,所以你可以说你的loss,没有办法再下降,也许是因為卡在了critical point,但你不能说是卡在local minima,因為saddle point也是微分為零的点

判断微分为0的情况

要知道我们loss function的形状,可是我们怎麼知道,loss function的形状呢,network本身很复杂,用复杂network算出来的loss function,显然也很复杂,我们怎麼知道loss function,长什麼样子,虽然我们没有办法完整知道,整个loss function的样子

但是如果给定某一组参数,比如说蓝色的这个 θ ′ \theta^{'} θ,在 θ ′ \theta^{'} θ附近的loss function,是有办法被写出来的,它写出来就像是这个样子

在这里插入图片描述
那如果我们今天走到了一个critical point,意味著gradient為零,也就是绿色的这一项完全都不见了
在这里插入图片描述
判断方法如下

在这里插入图片描述

Don’t afraid of saddle point

对于saddle point的情况,从图中我们也可以形象地看出它的loss是有办法可以继续下降的
在这里插入图片描述

Saddle Point v.s. Local Minima

在这里插入图片描述
当维度很多的时候,其实我们是有很多“路”可以走的,很难出现真正H为正定的情况

从经验上看起来,其实local minima并没有那麼常见,多数的时候,你觉得你train到一个地方,你gradient真的很小,然后所以你的参数不再update了,往往是因為你卡在了一个saddle point

Batch and Momentum

Batch

介绍了small batch和large batch的优缺点,并且解释了产生这些现象的原因,建议直接看原文
在这里插入图片描述

Momentum

加上 Momentum 以后,每一次我们在移动我们的参数的时候,我们不是只往 Gradient Descent,我们不是只往 Gradient 的反方向来移动参数,我们是** Gradient 的反方向,加上前一步移动的方向**,两者加起来的结果,去调整去到我们的参数,

在这里插入图片描述

在这里插入图片描述

Conclude:Smaller batch size and momentum help escape critical points.

Adaptive Learning Rate

如果在某一个方向上,我们的gradient的值很小,非常的平坦,那我们会希望learning rate调大一点,如果在某一个方向上非常的陡峭,坡度很大,那我们其实期待,learning rate可以设得小一点。因此,我们希望learning rate可以自适应的进行调整。

RMSProp

在这里插入图片描述

在RMS Prop裡面,它决定你可以自己调整,现在的这个gradient,你觉得它有多重要

Adam

在这里插入图片描述

Learning Rate Scheduling

在这里插入图片描述

η \eta η成为一个随时间改变调整的量

(一)、什么是Warmup?
Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的时候先选择使用一个较小的学习率,训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习率来进行训练。

(二)、为什么使用Warmup?
由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的几个epoches或者一些steps内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。

ExampleExampleExample:Resnet论文中使用一个110层的ResNet在cifar10上训练时,先用0.01的学习率训练直到训练误差低于80%(大概训练了400个steps),然后使用0.1的学习率进行训练。

(三)、Warmup的改进
(二)所述的Warmup是constant warmup,它的不足之处在于从一个很小的学习率一下变为比较大的学习率可能会导致训练误差突然增大。于是18年Facebook提出了gradual warmup来解决这个问题,即从最初的小学习率开始,每个step增大一点点,直到达到最初设置的比较大的学习率时,采用最初设置的学习率进行训练。

Summary of Optimization

在这里插入图片描述
那讲到这边可能有同学会觉得很困惑,这一个momentum是考虑,过去所有的gradient,这个σ也是考虑过去所有的gradient,一个放在分子一个放在分母,都考虑过去所有的gradient,不就是正好抵销了吗,

但是其实这个Momentum跟这个σ,它们在使用过去所有gradient的方式是不一样的,Momentum是直接把所有的gradient通通都加起来,所以它有考虑方向,它有考虑gradient的正负号,它有考虑gradient是往左走还是往右走

但是这个Root Mean Square,它就不考虑gradient的方向了,它只考虑gradient的大小,记不记得我们在算σ的时候,我们都要取平方项,我们都要把gradient取一个平方项,我们是把平方的结果加起来,所以我们只考虑gradient的大小,不考虑它的方向,所以Momentum跟这个σ,算出来的结果并不会互相抵销掉

Batch Normalization

在这里插入图片描述
为什么要Normalization?
如上图所示,当我们 input 的 feature,每一个 dimension 的值,它的 scale 差距很大的时候,我们就可能產生像这样子的 error surface(左图),就可能產生不同方向,斜率非常不同,坡度非常不同的 error surface。
如果我们可以给不同的 dimension,同样的数值范围的话,那我们可能就可以製造比较好的 error surface,让 training 变得比较容易一点,即如右图所示。

在具体的Feature Normalization中,还会有各种各样的问题和解决手段,如何Normalization?deeping learning的每一个layer是否都需要Normalization?如何对testing数据集Normalization?

To learn more——Optimization for Deep Learning

由于这两集没有找到相关的课程笔记,我将在这篇文章中加以记录学习

第三节

Classification

label的表示

分类问题有别于回归问题,在分类问题中,我们一般采用One-hot vector的方法表示分类结果(label的表示)。所谓One-hot vector,就是将所有分类结果排成一个列向量,每个元素为一个分类结果,元素为1,则代表其对应的分类结果为该One-hot vector的结果
在这里插入图片描述

Classification with softmax

经过刚刚的讨论,我们知道了label的表示,那么我们在训练时,是怎么将features一步步得到最终的预测结果的呢?过程又与Regression又有什么不同呢?
在这里插入图片描述
在这里插入图片描述

通过上图,我们可以看到,Classification的训练过程相比于Regression问题,其实就是在Regression的结果后再加一个softmax函数,那么softmax其实就是下面这个样子
y i ′ = e x p ( y i ) ∑ j e x p ( y i ) y^{'}_i = \frac{exp(y_i)}{\sum_{j}exp(y_i)} yi=jexp(yi)exp(yi)
图示化如下
在这里插入图片描述
具体为什么要用softmax,参阅

Loss of Classification

就我之前所了解的,Classification的问题的损失函数为
− ln ⁡ ( w , b ) = ∑ i n − [ y ^ i ln ⁡ f w , b ( x i ) + ( 1 − y ^ i ) ln ⁡ ( 1 − f w , b ( x i ) ) ] -\ln{(w,b)} = \sum_{i}^{n}-[\hat{y}^{i}\ln{f_{w,b}(x^i)}+ (1-\hat{y}^{i})\ln{(1-f_{w,b}(x^i))}] ln(w,b)=in[y^ilnfw,b(xi)+(1y^i)ln(1fw,b(xi))]

但是,当我试图将多分类的问题套用在这个公式的时候,才发现???压根套不上呀!

事实上,上式仅仅是对多分类损失函数在二分类问题上的一个形式。真正的形式理应是这样的
− ln ⁡ L ( w , b ) = ∑ i n ∑ k m − y ^ k i ln ⁡ f w , b ( x k i ) -\ln{L(w,b)} = \sum_{i}^{n}\sum_{k}^{m}-\hat{y}_k^i\ln{f_{w,b}(x^i_k)} lnL(w,b)=inkmy^kilnfw,b(xki)

举个栗子,假设我们的一个sample经过softmax后得到的 y = f w , b ( x ) = [ 0.9 0.1 ] y=f_{w,b}(x)=\begin{bmatrix} 0.9 \\ 0.1\\ \end{bmatrix}\quad y=fw,b(x)=[0.90.1],其label为 y ^ = [ 1 0 ] \hat{y}=\begin{bmatrix} 1 \\ 0\\ \end{bmatrix}\quad y^=[10],那么在第一个式子里计算出的值为 − ( 1 ln ⁡ 0.9 + 0 ln ⁡ 0.1 ) = − ln ⁡ 0.9 -(1 \ln0.9+0\ln{0.1})=-\ln0.9 (1ln0.9+0ln0.1)=ln0.9,第二计算结果即为 − ln ⁡ 0.9 − 0 ln ⁡ 0.1 -\ln0.9-0\ln0.1 ln0.90ln0.1。再比方说,我们的另一个sample经过softmax后得到的 y = f w , b ( x ) = [ 0.1 0.8 0.1 ] y=f_{w,b}(x)=\begin{bmatrix} 0.1 \\ 0.8 \\ 0.1\\ \end{bmatrix}\quad y=fw,b(x)=0.10.80.1,其label为 y ^ = [ 0 1 0 ] \hat{y}=\begin{bmatrix} 0 \\ 1 \\ 0\\ \end{bmatrix}\quad y^=010,此时我们有 − ln ⁡ L ( w , b ) = − 0 ln ⁡ 0.1 − 1 ln ⁡ 0.8 − 0 ln ⁡ 0.1 = − ln ⁡ 0.8 -\ln{L(w,b)}=-0\ln0.1-1\ln{0.8}-0\ln0.1=-\ln0.8 lnL(w,b)=0ln0.11ln0.80ln0.1=ln0.8

像上面这样我们如果有两个distribution的点 y ^ \hat{y} y^ y y y,我们记他们的交叉熵即为 H ( y ^ , y ) = − ∑ k y ^ k ln ⁡ y k H(\hat{y},y)=-\sum\limits_{k}\hat{y}_k\ln{y_k} H(y^,y)=ky^klnyk.

cross entropy交叉熵的含义是表达着两个distribution有多接近,如果这两个点的distribution一模一样的话,那它们计算出来的cross entropy就是0,用在我们这里的分类问题中,我们就是希望 y ^ \hat{y} y^ y y y越接近越好。

CNN

相关阅读

the whole CNN

在这里插入图片描述

Sequence

Input

对于以sequence为输入的问题,我们可以将sequence化成vector set的形式。以文字处理为例,如果我们把一个句子裡面的每一个词汇,都描述成一个向量,那我们的Model的输入,就会是一个Vector Set,而且这个Vector Set的大小,每次都不一样,句子的长度不一样,那你的Vector Set的大小就不一样。怎么把一个词汇变成一个向量,最简单的做法是One-hot的Encoding,不过这种方法有一个问题,它假设彼此词汇之间彼此是没有关系的。另一个方法叫做Word Embedding,这种编码的方式可以给向量语义的资讯

类似的问题还包括声音信号,图,分子信息等等

output

讨论完input,我们再看看output,主要有三种情况

每一个向量都有一个对应的label

举例来说 在文字处理上,假设你今天要做的是POS Tagging,POS Tagging就是词性标註,你要让机器自动决定每一个词汇 它是什麼样的词性,它是名词 还是动词 还是形容词等等

一整个Sequence,只需要输出一个label

举例来说,如果是文字的话,我们就说Sentiment Analysis

Sentiment Analysis就是给机器看一段话,它要决定说这段话是正面的还是负面的

机器要自己决定,应该要输出多少个label

翻译就是sequence to sequence的任务,因為输入输出是不同的语言,它们的词汇的数目本来就不会一样多

对于上述所提问题,我们将介绍self-attentiontransformer这两个重要手段。self-attention和transformer介绍如下:
self-attention:https://blog.csdn.net/zzhhjjjj/article/details/121189116
transformer:https://blog.csdn.net/zzhhjjjj/article/details/121194103

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值