01-03-深度学习基本概念简介
Linear Models Problem
Linear Model 在二维中可以理解为一条线,但真实情况可能是很复杂的曲线,Linear Model并不适用。此时,需要找到一个更复杂的模型。
Model Bias 可以理解为欠拟合,因为模型太简单,而导致不能很好的解决问题。
How to represent sophisticated curves?
复杂分段函数曲线可以分解为一个常数(图中0号线)和很多 Hard Sigmoid 激活函数曲线(图中0~3号线)的叠加。
曲线越复杂,需要叠加的 Hard Sigmoid 激活函数曲线越多。
如果是光滑曲线,而不是分段函数曲线,可以在光滑曲线上选取一些点进行连接,之后再使用多个 Hard Sigmoid 激活函数曲线叠加模拟。
结论
1 可以用足够多的 Hard Sigmoid 激活函数曲线叠加组合表示Piecewise Linear Curves,之后,可以用Piecewise Linear Curves去逼近任何连续曲线。
2 Sigmoid函数越多,可以表示的曲线越复杂。
How to represent Hard Sigmoid?
蓝色 z 字型曲线(Hard Sigmoid 函数)可以用拥有相似变化规律的曲线(激活函数 activation function)代替。
Sigmoid
激活函数中最常见的一种是Sigmoid函数,这里也以Sigmoid激活函数为例。
对于 sigmoid 函数,不同参数变化对应的曲线变化如下图。
ReLU
注意:使用1个Sigmoid可以模拟hard sigmoid函数,使用2个ReLU可以模拟hard sigmoid函数。
问题:为什么ReLU比Sigmoid更好?
How to decrease Model Bias?
The Function With Unknown Parameters
What does this function do?
接下来讨论 y表达式 在做什么事情。
下面先分析Sigmoid函数括号中在做什么事情。
Sigmoid函数括号中的计算用矩阵乘法表示如下。
下面分析Sigmoid函数在做什么事情。
下面分析y表达式在做什么事情。
将所有的位置参数W,b统称为θ。
Define Loss From Training Data
如果参数很少,可以暴力枚举所有可能的参数,找出使得损失最小的模型参数。但是,上述过程说明参数向量θ中有很多参数,所以不能使用暴力枚举的方式。
上图中, ∑ n e n \sum_n e_n ∑nen表示n个样本预测值与标签的差值之和。
Optimization of New Model
给参数向量θ一个初始值,求L对
θ
i
,
i
=
1
,
2
,
.
.
.
n
\theta_i, i=1,2,...n
θi,i=1,2,...n 的导数,梯度下降找到最优参数。
但是在实际操作中,在求Gradient的时候,如果有N个数据,一般会把这N个数据分成一个一个的Batch(一批;批处理),也就是对N个数据进行分组,设每个Batch中有B个数据。
但是假设这个B足够大,从而让L跟L1会很接近也是有可能的。之前算Loss的时候是把所有的Data都拿出来进行计算,但是可以在实际操作的时候,每次会先选一个 Batch ,用这个Batch 来算 L1,根据这个 L1 来算 Gradient,用这个 Gradient 来更新参数;接下来再选下一个 Batch 算出 L2,根据L2 算出 Gradient,然后再更新参数;再取下一个 Batch 算出 L3,根据 L3算出 Gradient,再用 L3 算出来的 Gradient 来更新参数。在这种情况下,并不是拿 L 来算Gradient。实际上是拿一个 Batch算出来的L1 L2 L3…来计算 Gradient,把所有的 Batch 都看过一次,叫做一个Epoch,每一次更新参数叫做一次 Update。
注意:Update 跟 Epoch 是不一样的东西,每次更新一次参数叫做一次Update,把所有的 Batch都看过一遍,叫做一个Epoch。
Batch Size 是超参数。
Experimental Results
使用上述模型,只有一层非线性操作时,与线性模型的正确率对比如下所示。
可以把这个同样的事情再反覆地多做几次,刚才用x*w+b,再通过 Sigmoid Function 得到 a。可以把 a 再乘上另外一个 w’,再加上另外一个 b’,再通过 Sigmoid Function或 RuLU Function,得到 a’。
非线性操作次数(隐藏层个数)是超参数。
增加非线性操作次数(隐藏层层数),正确率对比如下图所示。
横轴就是时间,纵轴是观看的人次(千人),红色的线代表的是真实的数据,蓝色的线是预测出来的数据。
通过图发现,在低点的地方,红色的数据是每隔一段时间,就会有两天的低点,在低点的地方,机器的预测还算是比较准确的。
但是在画红圈的地方,机器高估了真实的观看人次,这一天有一个很明显的低谷,但是机器没有预测到这一天有明显的低谷,它是晚一天才预测出低谷。这天最低点是除夕,Model根本不知道除夕是什么,因为它只是通过前56天的值来预测下一天。
Neural Network & Deep Learning
问题:为什么不做 Fat Learning(所有神经元放入一个隐藏层) 而要做Deep Learning(所有神经元放入多个隐藏层)?
问题:为什么不继续增加隐藏层层数?
对于上面的例子和实验结果,虽然4个隐藏层的模型在训练集上表现更好,但是要选择3个隐藏层的模型,因为现实问题中更关注模型在测试集上的表现。