李弘毅机器学习课程笔记:机器/深度学习入门

Posted ithiker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了李弘毅机器学习课程笔记:机器/深度学习入门相关的知识,希望对你有一定的参考价值。

上一篇我们已经找到了一个Model,那么这个Model是不是最优的呢?

模型回顾

在这里插入图片描述
将Model应用到训练集上的Loss是0.48K,运用到测试集上的Loss是0.58K,那么,是不是还可以做得更好呢?
通过观察下图实际数据和预测数据的对比图:
在这里插入图片描述
我们发现预测数据总是稍微领先于实际数据,这也很好解释,模型显示,预测数据几乎就是用前一天的实际数据加上0.1K。
另外,我们发现数据似乎以一周为一个周期:每逢周五周六,观看人数处于最低值,每逢周一周二,观看人数处于最高值。
很自然的,我们考虑将前7天,前28天,前56天考虑进来,通过上面的步骤,可以发现训练集上的Loss逐渐变小,测试集上的Loss虽然变小了,但是不是特别明显。
在这里插入图片描述

模型调优

通过上面的过程,我们发现,线性模型似乎走到了它的极限,这说明我们的Model存在Model bias, 需要调整模型的形式来进行进一步的优化。
在这里插入图片描述
通过观察上图的红色曲线,很容易发现,我们用一条曲线不能得到良好的拟合,但是,可以用下面一系列的反Z型曲线的组合来表示由分段曲线组成的红色曲线。
在这里插入图片描述
那么,对于任何一条曲线,我们都可以在其上取若干点,用折线来近似估计它们。只要点取得足够密,那么折线将会越接近原来的曲线。
在这里插入图片描述
那么,对于单条的反Z型曲线,我们可以用sigmoid函数来进行拟合
在这里插入图片描述
sigmoid函数的特性如下:
在这里插入图片描述

  • 不同的w会改变曲线的坡度,w越大坡度越陡峭
  • 不同的b会改变曲线在x方向的位移,b越大曲线越往向右移
  • 不同的c会改变曲线在y方向的高度,c越大曲线越高

那么,根据上面的分析,对于最初我们实际数据画出的曲线,我们可以采用若干个sigmoid函数来进行拟合:
在这里插入图片描述
这样,最初的Model: y=b+wx就可以进化为带sigmoid的形式,同样的,最初的多个feature的Model也可以进化为类似的带sigmoid的形式。这里多个feature的一般形式到sigmoid的形式的转变不是那么直观:需要将若干个x的累加当作一个整体看待,如有更好的理解方法吗,请评论:)
在这里插入图片描述

举例

如果feature个数为3, sigmoid函数的个数为3,那么,蓝色框内就可以改写为如下:
在这里插入图片描述
写成矩阵的形式:
在这里插入图片描述
进一步的,将r进行sigmoid函数求值处理:
在这里插入图片描述
进一步的,再将b和c一块考虑,可以得到最后的形式:
在这里插入图片描述

一般形式

我们将上面得到的公式进一步的推广:
在这里插入图片描述
目前,我们的unknown parameters有:标量b, 一维向量 C C C, 一维向量 b b b,矩阵 W W W, 如果我们把所有的标量,向量和矩阵拉直组合到一块,就可以得到一个nx1维的 θ \\theta θ,这样,我们就改写了我们一般机器学习解决问题的第一步:
在这里插入图片描述
机器学习的问题最后就变成对 θ \\theta θ求解,既然需要对 θ \\theta θ求解,那么就需要定义一个关于 θ \\theta θ的Loss function L ( θ ) L(\\theta) L(θ):
在这里插入图片描述
L ( θ ) L(\\theta) L(θ)求最小值的过程则如下:
在这里插入图片描述
首先取一个随机向量 θ \\theta θ,然后计算 L L L在该处的偏导值向量,又叫梯度,梯度值和学习因子(Learning rate)相乘,得到下一个随机向量 θ \\theta θ,反复的执行这个过程,最后根据上一节提到的原理,最后会收敛到一个最小值。
在这里插入图片描述
值得注意的是,上面计算 L L L时,我们计算的是在整个数据集上的 L L L,如果我们把整个数据集均分为若干份,每一份的数据叫做一个批次**(batch)**,如果计算在某个batch上的Loss function, L 1 ( θ ) L^1(\\theta) L1(θ), 利用该batch上的结果得到 θ 1 \\theta^1 θ1,这叫做1个 update; 类似的,计算在第二个batch上的Loss function, L 2 ( θ ) L^2(\\theta) L2(θ), 利用该batch上的结果得到 θ 2 \\theta^2 θ2…,当把所有的batch都计算过一遍时,我们称这个过程为一个 epoch

在这里插入图片描述

Sigmoid or ReLU

上面的过程中,我们一直都是用的sigmoid函数作为激活函数,其实从下面的图可以看出,一个sigmoid函数都可以用两个ReLU函数来表示:
在这里插入图片描述
那么,相应的,我们的模型可以变换为如下:
在这里插入图片描述
实验发现,采用ReLU的预测效果要好于sigmoid, 这大概是因为ReLU能够更精细划的刻画曲线。

Layers

是否我们就止步于此了呢?目前,大家将第一步得到的结果作为输入,放入下一层,计算得到 a ′ a^{'} a,类似的,反复多次,就会得到多个Layer,

在这里插入图片描述
上面的纵向的一系列的sigmoid 或者ReLU function就构成了一个Layer
我们发现,通过增加Layer可以进一步的优化我们的Model。
在这里插入图片描述

但是不难发现,增加的Layer其实也是增加了一些unknown参数,我们为什么不让这些参数拉直放到最开始的参数那里呢(为什么网络要变deep, 而不是变fat)?

以上是关于李弘毅机器学习课程笔记:机器/深度学习入门的主要内容,如果未能解决你的问题,请参考以下文章

李宏毅机器学习课程笔记

李宏毅机器学习课程笔记

机器学习入门

李宏毅老师《机器学习》课程笔记-4.2 Batch Normalization

重磅!李沐「动手学深度学习」中文课程笔记来了!

重磅!李沐「动手学深度学习」中文课程笔记来了!