小白的Datawhale X 李宏毅苹果书AI夏令营的深度学习学习日记

1.线性模型

(背景:w 跟 b 的值刚才已经找出来的,这组 w 跟 b 可以让损失小到 480。)

小白总结:1.考虑现实意义2.尽可能包括更多的数据3.数据到一定数量后就没有作用了。

以下是一些细节知识。

机器几乎就是拿前一天的观看人次来预测隔天的观看人次。这个 真实的数据有一个很神奇的现象,它是有周期性的,它每隔 7 天就会有两天特别低(周五和 周六),两天观看的人特别少,每隔 7 天,就是一个循环。目前的模型不太行,它只能够看前 一天。 每隔 7 天它一个循环,如果一个模型参考前 7 天的数据,把 7 天前的数据,直接复制 到拿来当作预测的结果,也许预测的会更准也说不定,所以我们就要修改一下模型。通常一个 模型的修改,往往来自于对这个问题的理解,即领域知识

(一开始,对问题完全不理解的时候,胡乱写一个 y = b + wx1 (1.11) 并没有做得特别好。接下来我们观察了真实的数据以后,得到一个结论是,每隔 7 天有一个 循环。所以要把前 7 天的观看人次都列入考虑,写了一个新的模型 y = b + X 7 j=1 wjxj (1.12) 其中 xj 代表第 j 天的观看测试,也就是 7 天前的数据,通通乘上不同的权重 wj,加起来,再 加上偏置得到预测的结果。)

使用该模型预测,其在训练数据上的损失是 380,而只考虑 1 天的 模型在训练数据上的损失是 480。因为其考虑了 7 天,所以在训练数据上会得到比较低的损 失。

考虑了比较多的信息,在训练数据上应该要得到更好的、更低的损失。

在没有看到的数据 上的损失有比较好是 490。只考虑 1 天的误差是 580,考虑 7 天的误差是 490。用梯度下降, 算出 w 跟 b 的最优值如 表 1.1 所示。

机器的逻辑是前一天跟要预测的隔天的数值的关系很大,所以 w ∗ 1 是 0.79,不过它知道, 如果是前两天前四天前五天,它的值会跟未来要预测的,隔天的值是成反比的,所以 w2, w4, w5 最佳的值(让训练数据上的损失为 380 的值)是负的。

(但是 w1, w3, w6, w7 是正的,考虑前 7 天的值,其实可以考虑更多天,本来是考虑前 7 天,可以考虑 28 天,即 y = b + X 28 j=1 wjxj . (1.13) 28 天是一个月,考虑前一个月每一天的观看人次,去预测隔天的观看人次,训练数据上 是 330。在 2021 年的数据上,损失是 460,看起来又更好一点。如果考虑 56 天,即 y = b + X 56 j=1 wjxj (1.14) 在训练数据上损失是 320,在没看过的数据上损失还是 460。)

考虑更多天没有办法再更降低损 失了。看来考虑天数这件事,也许已经到了一个极限。

这些模型都是把输入的特征 x 乘上一 个权重,再加上一个偏置就得到预测的结果,这样的模型称为线性模型(linear model)。接 下来会看如何把线性模型做得更好。

2.分段线性模型

小白总结:1.可以理解成为数学中的分段函数,每一段函数的y=kx+b中的k,b和x的根据定义域的改变可以成为更好的模型。2.通过微积分的知识可以知道,只要x取得无穷大,我们一定可以把图像化成近似真实值的一条线。3.方法:梯度下降(也是最难理解的部分)(细看上一条笔记)

Q: 优化是找一个可以让损失最小的参数,是否可以穷举所有可能的未知参数的值? A:只有 w 跟 b 两个参数的前提之下,可以穷举所有可能的 w 跟 b 的值,所以在参数 很少的情况下。甚至可能不用梯度下降,不需要优化的技巧。但是参数非常多的时候, 就不能使用穷举的方法,需要梯度下降来找出可以让损失最低的参数。 Q:刚才的例子里面有 3 个 Sigmoid,为什么是 3 个,能不能 4 个或更多? A:Sigmoid 的数量是由自己决定的,而且 Sigmoid 的数量越多,可以产生出来的分段 线性函数就越复杂。Sigmoid 越多可以产生有越多段线的分段线性函数,可以逼近越复 杂的函数。Sigmoid 的数量也是一个超参数。

细节的问题:实际使用梯度下降的时候,会把 N 笔数据随 机分成一个一个的批量(batch),一组一组的。每个批量里面有 B 笔数据,所以本来有 N 笔数据,现在 B 笔数据一组,一组叫做批量

本来是把所有的数据拿出来算一个损失,现在 只拿一个批量里面的数据出来算一个损失,记为 L1 跟 L 以示区别。假设 B 够大,也许 L 跟 L1 会很接近。所以实现上每次会先选一个批量,用该批量来算 L1,根据 L1 来算梯度,再用 梯度来更新参数,接下来再选下一个批量算出 L2,根据 L2 算出梯度,再更新参数,再取下 一个批量算出 L3,根据 L3 算出梯度,再用 L3 算出来的梯度来更新参数。 所以并不是拿 L 来算梯度,实际上是拿一个批量算出来的 L1, L2, L3 来计算梯度。把所 有的批量都看过一次,称为一个回合(epoch

每一次更新参数叫做一次更新。更新跟回合是不同的东西。

(每次更新一次参数叫做一次更新,把所有的批量都看过一遍,叫做一个回合。 更新跟回合的差别,举个例子,假设有 10000 笔数据,即 N 等于 10000,批量的大小是 设 10,也就 B 等于 10。10000 个样本(example)形成了 1000 个批量,所以在一个回合里 面更新了参数 1000 次,所以一个回合并不是更新参数一次)

小白总结:梯度下降是用数学基础为支持,用计算机计算出可以得到最小误差的一个数值进行改变参数,让它可以更好的得拟合这个模型。其中每一回合不一定进行参数的更新。想要更好得理解梯形下降改变参数的过程最好用实际例子来进行理解。

3.模型变形

其实还可以对模型做更多的变形,不一定要把 Hard Sigmoid 换成 Soft Sigmoid。Hard Sigmoid 可以看作是两个修正线性单元(Rectified Linear Unit,ReLU)的加总,ReLU 的 图像有一个水平的线,走到某个地方有一个转折的点,变成一个斜坡,其对应的公式为 c ∗ max(0, b + wx1) (1.29) max(0, b + wx1) 是指看 0 跟 b + wx1 谁比较大,比较大的会被当做输出;如果 b + wx1 < 0, 输出是 0;如果 b + wx1 > 0,输出是 b + wx1。通过 w, b, c 可以挪动其位置和斜率。把两 个 ReLU 叠起来就可以变成 Hard 的 Sigmoid,想要用 ReLU,就把 Sigmoid 的地方,换成 max(0, bi + wijxj )。 如图 1.19 所示,2 个 ReLU 才能够合成一个 Hard Sigmoid。要合成 i 个 Hard Sigmoid, 需要 i 个 Sigmoid,如果 ReLU 要做到一样的事情,则需要 2i 个 ReLU,因为 2 个 ReLU 合 起来才是一个 Hard Sigmoid。因此表示一个 Hard 的 Sigmoid 不是只有一种做法。

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

当然还有其他常见的激活函数,但 Sigmoid 跟 ReLU 是最常见的激活函数,接下来的实 验都选择用了 ReLU,显然 ReLU 比较好,实验结果如图 1.20 所示。

(如果是线性模型,考虑 56 天,训练数据上面的损失是 320,没看过的数据 2021 年数据是 460。连续使用 10 个 ReLU 作为模型,跟用线性模型的结果是差不多的, 但连续使用 100 个 ReLU 作为模型,结果就有显著差别了,100 个 ReLU 在训练数据上 的损失就可以从 320 降到 280,有 100 个 ReLU 就可以制造比较复杂的曲线,本来线性就是 一直线,但 100 个 ReLU 就可以产生 100 个折线的函数,在测试数据上也好了一些. 接下来使用 1000 个 ReLU 作为模型,在训练数据上损失更低了一些,但是在没看过的数据上,损失 没有变化。 接下来可以继续改模型,如图 1.21 所示,从 x 变成 a,就是把 x 乘上 w 加 b,再通过 Sigmoid 函数。不一定要通过 Sigmoid 函数,通过 ReLU 也可以得到 a,同样的事情再反复地 多做几次。 所以可以把 x 做这一连串的运算产生 a,接下来把 a 做这一连串的运算产生 a ′。 反复地多做的次数又是另外一个超参数。注意,w, b 和 w ′ , b′ 不是同一个参数,是增加了更多 的未知的参数。 每次都加 100 个 ReLU,输入特征,就是 56 天前的数据。如图 1.22 所示,如果做两次, 损失降低很多,280 降到 180。如果做 3 次,损失从 180 降到 140,通过 3 次 ReLU,从 280 降到 140,在训练数据上,在没看过的数据上,从 430 降到了 380。 )

(通过3次 ReLU 的实验结果如图 1.23 所示。横轴就是时间,纵轴是观看次数。红色的线是真实的数据,蓝色的线是预测出来的数据在这种低点的地方啊,看红色的数据是每隔一段时间,就会有两天的低点,在低点的地方,机器的预测还算是蛮准确的,机器高估了真实的观看人次,尤其是在红圈标注的这一天,这一天有一个很明显的低谷,但是机器没有预测到这一天有明显的低谷,它是晚一天才预测出低谷。这天最低点就是除夕。但机器只知道看前56天的值,来预测下一天会发生什么事,所以它不知道那一天是除夕。)

如图 1.24 所示,Sigmoid 或 ReLU 称为神经元(neuron),很多的神经元称为神经网络 (neural network)。人脑中就是有很多神经元,很多神经元串起来就是一个神经网络,跟人脑是一样的。人工智能就是在模拟人脑。

神经网络不是新的技术,80、90 年代就已经用过了,后来为了要重振神经网络的雄风,所以需要新的名字。

每一排称为一层,称为隐藏层(hidden layer),很多的隐藏层就“深”,这套技术称为深度学习

所以人们把神经网络越叠越多越叠越深,2012年的AlexNet第8层它的错误率是16.4%,两年之后VGG有19层,错误率在图像识别上进步到 7.3 %。这都是在图像识别上一个基准的数据库(ImageNet)上面的结果,后来 GoogleNet 有 22 层,错误率降到 6.7%。而残差网络(Residual Network,ResNet)有 152 层,错误率降到 3.57%。 刚才只做到 3 层,应该要做得更深,现在网络都是叠几百层的,深度学习就要做更深。但 4 层在训练数据上,损失是 100,在没有看过 2021 年的数据上,损失是 440。在训练数据上,3 层比 4 层差,但是在没看过的数据上,4 层比较差,3 层比较好,如图1.25 所示。在训练数 据和测试数据上的结果是不一致的,这种情况称为过拟合(overfitting)。

但是做到目前为止,还没有真的发挥这个模型的力量。

(2021 年的数据到2月1日之前 的数据是已知的。要预测未知的数据,选 3 层的网络还是 4 层的网络呢?假设今天是2月26日,今天的观看次数是未知的,如果用已经训练出来的神经网络预测今天的观看次数。要选3层的,虽然4层在训练数据上的结果比较好,但在没有看过的数据的结果更重要。应该选一个在训练的时候,没有看过的数据上表现会好的模型,所以应该选3层的网络。)

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

1.4机器学习框架

(我们会有一堆训练的数据以及测试数据如式 (1.30) 所示,测试集就是只有 x 没有 y。

训练数据:x1, y1,x2, y2, . . . , xN , yN测试数据:xN+1, xN+2, . . . , xN+M(1.30))

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

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

fθ(x),输入的特征为 x,

  1. 定义损失,损失是一个函数,其输入就是一组参数,去判断这一组参数的好坏;3. 解一个优化的问题,找一个 θ,该 θ 可以让损失的值越小越好。
  2. 让损失的值最小的 θ 为θ∗,即θ∗ = argminθL (1.31)有了 θ∗ 以后,就把它拿来用在测试集上,也就是把 θ∗ 带入这些未知的参数,本来 fθfθ(x)里面有一些未知的参数,现在 θ 用 θ∗ 来取代,输入是测试集,输出的结果存起来,上传到Kaggle 就结束了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值