一、基本概念
(1)机器学习就是找一个函数
(2)深度学习是找一个函数,这个函数是神经网络Neural Network
函数的输入可以是:vector、Matrix、Sequence
函数按输出类型划分任务类型:
(1)Regression回归: 函数输出是一个标量(属于连续区间)
(2)Classification分类: 给定一些类别选项,函数输出一个正确的选项。
(3)Structured Learning结构化学习: 创造有结构的东西,例如输出document、image
二、深度学习内容总览
(1)Supervised Learning监督学习:用带标签labels的数据,作为训练数据Training Data,给模型训练。
(2)Self-supervised Learning自监督学习: 如果没法为每个任务收集大量带标签的数据,可以先用无标签unlabeled的数据,进行预训练Pre-train,发展通用知识,比如将一个图片换个背景颜色、旋转个方向,然后再进行训练,让它判断是否为同一张图片。当预训练好后,其在下游任务Downstream Tasks,也会表现很好。其中Pre-trained Model又叫Foundation Model。
(3)Generative Adversarial Network生成对抗网络: 收集大量的输入数据x,以及标签y,不需要它们成对的关系,机器自己把它们的关系找出来。
(4)Reinforcement Learning强化学习: 在不知道怎么给数据打标签时,比如下围棋,人类也不知道下一步下在哪,但知道它的结果的好坏,就可以用RL技术。
(5)Anomaly Detection异常检测: 比如训练数据是猫和狗,给模型一头猪,它需要拥有回答我不知道的能力。
(6)Explainable AI可解释性AI: 模型不仅需要告诉我们答案,还要告诉我们为什么它知道答案是这样。
(7)Model Attack模型的攻击:比如一张图片里稍微改一点,模型分类的打完完全不同。
(8)Domain Adaptation域适应: 比如让模型识别数字,训练数据都是黑白的,但是测试数据Testing Data是彩色的,模型的正确率会暴跌,可以用域适应来解决该问题。
(9)Network Compression模型压缩: 将巨大的模型压缩小一些。
(10)Life-long Learning终身学习: 机器不能一直学习不同的任务,而变得无所不能。 Life-long Learning会解释该原因。
(11)Meta learning元学习: 学习如何学习
三、预测YouTube播放量的模型
这是一个回归问题。
需要以下步骤:
1、假设一个含有未知参数的函数式
该假设的函数式,即为模型model。
这里先假设为线性模型:
y
=
b
+
w
x
1
y=b+wx_1
y=b+wx1,
其中
y
y
y为预测值,
x
1
x_1
x1为特征feature,
b
,
w
b,w
b,w为未知参数,需要从data中学习,
w
w
w为权重weight,
b
b
b为偏置bias
2、根据Training Data定义一个 Loss
Loss是关于
b
,
w
b,w
b,w的函数,即
L
(
b
,
w
)
L(b,w)
L(b,w),它是用来评价参数
b
,
w
b,w
b,w的好坏的。
L
o
s
s
:
L
=
1
N
∑
n
e
n
Loss:\ L=\frac 1 N\sum\limits_ne_n
Loss: L=N1n∑en
当
e
=
∣
y
−
y
^
∣
e=|y-\hat y|
e=∣y−y^∣,
L
L
L是mean absolute error (MAE),
当
e
=
(
y
−
y
^
)
2
e=(y-\hat y)^2
e=(y−y^)2,
L
L
L是mean square error (MSE),
其中
y
^
\hat y
y^表示真实值
有位置参数
b
,
w
b,w
b,w值,构成的坐标轴,画出的Loss等高线图,叫做Error Surface
3、最优化Optimization
w
∗
,
b
∗
=
arg
min
w
,
b
L
w^*,b^*=\arg\min\limits_{w,b}L
w∗,b∗=argw,bminL
这里用梯度下降法Gradient Descend:
为了方便学习,这里先只考虑
w
w
w
①随机选取一个初始值:
w
0
w^0
w0
②计算 ∂ L ∂ w ∣ w = w 0 \left.\frac {\partial L} {\partial w}\right|_{w=w^0} ∂w∂L w=w0
w
1
←
w
0
−
η
∂
L
∂
w
∣
w
=
w
0
{w_1\leftarrow w^0-\eta \frac {\partial L} {\partial w}|_{w=w^0}}
w1←w0−η∂w∂L∣w=w0
其中,
η
\eta
η为学习率 learning rate,是一个超参数。
超参数是在机器学习中,需要自己设定的参数值,而不是通过训练数据中学习到的参数。
③以此方法迭代更新参数
w
w
w
不用担心局部极小值点问题,因为在线性回归中,loss函数是凸的,没有局部极小值点。
我们应该同时考虑参数
w
,
b
w,b
w,b,方法同上:
①随机选取一个初始值:
w
0
,
b
0
w^0,b^0
w0,b0
②计算梯度
∂
L
∂
w
∣
w
=
w
0
,
b
=
b
0
\left.\frac {\partial L} {\partial w}\right|_{w=w^0,b=b^0}
∂w∂L
w=w0,b=b0
∂
L
∂
b
∣
w
=
w
0
,
b
=
b
0
\left.\frac {\partial L} {\partial b}\right|_{w=w^0,b=b^0}
∂b∂L
w=w0,b=b0,
其中如果,
L
(
w
,
b
)
=
∑
n
=
1
N
(
y
^
n
−
(
b
+
w
⋅
x
n
)
)
2
{L(w,b)=\sum\limits_{n=1}^{N}(\hat y^n-(b+w \cdot x^n))^2}
L(w,b)=n=1∑N(y^n−(b+w⋅xn))2,则
∂
L
∂
w
=
∑
n
=
1
N
2
(
y
^
n
−
(
b
+
w
⋅
x
n
)
)
(
−
x
n
)
{\frac {\partial L} {\partial w}=\sum\limits_{n=1}^N2(\hat y^n-(b+w\cdot x^n))(-x^n)}
∂w∂L=n=1∑N2(y^n−(b+w⋅xn))(−xn)
∂
L
∂
b
=
∑
n
=
1
N
2
(
y
^
n
−
(
b
+
w
⋅
x
n
)
)
(
−
1
)
{\frac {\partial L} {\partial b}=\sum\limits_{n=1}^N2(\hat y^n-(b+w\cdot x^n))(-1)}
∂b∂L=n=1∑N2(y^n−(b+w⋅xn))(−1)
然后,
w
1
←
w
0
−
η
∂
L
∂
w
∣
w
=
w
0
,
b
=
b
0
{w_1\leftarrow w^0-\eta \frac {\partial L} {\partial w}|_{w=w^0,b=b^0}}
w1←w0−η∂w∂L∣w=w0,b=b0
b
1
←
b
0
−
η
∂
L
∂
b
∣
w
=
w
0
,
b
=
b
0
{b_1\ \leftarrow b^0\ -\ \eta \frac {\partial L} {\partial b}|_{w=w^0,b=b^0}}
b1 ←b0 − η∂b∂L∣w=w0,b=b0
③以此方法迭代更新参数
w
,
b
w,b
w,b
4、测试集验证模型性能
前三步为在训练集训练模型的步骤,模型还需在测试集检验性能。测试集是没给模型训练时看过的数据。用测试集上的数据,去求 L o s s Loss Loss值。
5、线性模型特征维度提升
前四步可以构成一个模型训练测试的完成过程。我们发现播放量以七天为一个周期,上下波动,为了进一步降低
L
o
s
s
Loss
Loss值。将特征维度设为7,模型变为:
y
=
b
+
∑
j
=
1
7
w
j
x
j
y=b+\sum\limits_{j=1}^{7}w_jx_j
y=b+j=1∑7wjxj
我们按此思路,维度可以进一步提高到28、56,训练集上的
L
o
s
s
Loss
Loss随之进一步降低,但测试集的
L
o
s
s
Loss
Loss会随着维度增高,先是降低,但降到一定程度,并不会继续降低。
6、非线性模型
线性模型太简单,如下如,无论怎么调账
b
,
w
b,w
b,w,也很难拟合出一个比较好的函数,线性模型有严重的局限性,我们称之为Model Bias。这时候我们需要将模型变得更复杂更柔性,这就需要用非线性模型。因为模型更复杂,它可能包含的函数集合就越大,就能在训练集上从中挑选出error更小的模型。
这样,可以通过调整参数
w
,
b
,
c
w,b,c
w,b,c,来得到各种形状的sigmoid function。
模型: y = b + w x 1 → y = b + ∑ i c i s i g m o i d ( b i + w i x 1 ) {y=b+ wx_1 \rightarrow y=b+\sum\limits_ic_i sigmoid(b_i+w_ix_1)} y=b+wx1→y=b+i∑cisigmoid(bi+wix1)
提高特征维度:
y
=
b
+
∑
j
w
j
x
j
→
y
=
b
+
∑
i
c
i
s
i
g
m
o
i
d
(
b
i
+
∑
j
w
i
j
x
j
)
{y=b+\sum\limits_j w_jx_j \rightarrow y=b+\sum\limits_ic_i sigmoid(b_i+\sum\limits_jw_{ij}x_j)}
y=b+j∑wjxj→y=b+i∑cisigmoid(bi+j∑wijxj)
即,模型的位置参数,组成一个向量,统称为
θ
{\boldsymbol {\theta}}
θ
定义
L
o
s
s
\bf Loss
Loss:
模型函数确定后,
L
o
s
s
Loss
Loss和前文一样,
L
=
1
N
∑
n
e
n
L=\frac 1 N\sum\limits_ne_n
L=N1n∑en
新模型优化:
以此方法,不断计算梯度,迭代更新参数。
这里我们可以把训练数据分成一个个的batch,按下图进行训练:
另,我们把一次参数更新,叫做一次update。例:
10,000 examples (N = 10,000), Batch size is 10 (B = 10),在一个epoch中,有1,000 updates
7、ReLU
sigmoid:
y
=
b
+
∑
i
c
i
s
i
g
m
o
i
d
(
b
i
+
∑
j
w
i
j
x
j
)
{y=b+\sum\limits_ic_i sigmoid(b_i+\sum\limits_jw_{ij}x_j)}
y=b+i∑cisigmoid(bi+j∑wijxj)
ReLU:
y
=
b
+
∑
2
i
c
i
max
(
0
,
b
i
+
∑
j
w
i
j
x
j
)
{y=b+\sum\limits_{2i}c_i \max(0, b_i+\sum\limits_jw_{ij}x_j)}
y=b+2i∑cimax(0,bi+j∑wijxj)
注:我们把 Sigmoid 和 ReLU 函数,称之为激活函数。
可以增加更多的隐层 hidden layers,效果更好。
但是并不是说越深越好,会造成过拟合Overfitting,过拟合就是在训练数据表现更好,在未见的数据却更差。
四、深度学习概述
Neuron之间不同的连接,会产生不同的结构。
1、Fully Connect Feedforward Network
这里激活函数为sigmoid
如果还不知道参数,只是定出了网络结构,就是定义了一个函数集合,即模型。
写成这种矩阵运算的好处是,可以用GPU加速。
2、举例:数字识别
这是一个分类问题。
我们需要决定一个网络结构,使得一个好的函数,在我们定义的函数集合里。然而我们往往只能通过经验和直接来找出这个网络结构,当然也有一些方法来自动决定网络结构。
接下来可以用梯度下降的方法进行参数优化。
3、Universal Approximation Theorem
万能逼近定理:紧凑域上任何连续函数,都可以通过一个隐藏层的神经网络来近似,且神经元数量越多,近似程度越高。
4、反向传播backpropagation
由于神经网络的参数十分庞大,所以我们利用反向传播算法可以高效地计算它的梯度。
链式法则:
∂
z
∂
w
1
=
x
1
{\frac {\partial z} {\partial w_1}=x_1}
∂w1∂z=x1,
∂
z
∂
w
2
=
x
2
{\frac {\partial z} {\partial w_2}=x_2}
∂w2∂z=x2,
偏导计算规律是:连接权重的输入值。
由于已知激活函数,所以很容易求
∂
a
∂
z
{\frac {\partial a} {\partial z}}
∂z∂a。如果后面接的网络比较复杂,求
∂
C
∂
a
{\frac {\partial C} {\partial a}}
∂a∂C应用链式法则是比较复杂的。
所以我们可以换个思路,构建一个虚拟的网络,仿照前向传播求导方法,但方向是从前往后求导。
5、正则化 Regularization
如果模型定义为
y
=
b
+
∑
w
i
x
i
y=b+\sum w_ix_i
y=b+∑wixi,
损失函数我们可以定义为:
L
=
∑
n
(
y
^
n
−
(
b
+
∑
w
i
x
i
)
)
2
+
λ
∑
(
w
i
)
2
L=\sum\limits_n(\hat y^n-(b+\sum w_ix_i))^2+\lambda \sum(w_i)^2
L=n∑(y^n−(b+∑wixi))2+λ∑(wi)2,
这样定义损失函数,可以是模型函数更平滑。因为
w
i
w_i
wi会尽可能小,当
x
i
x_i
xi的产生变化量
Δ
x
i
\Delta x_i
Δxi,
w
i
Δ
x
i
w_i\Delta x_i
wiΔxi也会尽可能小,进而
Δ
y
\Delta y
Δy会尽可能小,函数就会更平滑。
正则化是用来解决过拟合问题的。因为当函数更平滑,就可以减少输入的噪声影响。
6、神奇宝贝属性分类
这是一个分类问题。
将分类问题,按照回归问题做,会出现如下问题:
由于更接近1,被认为是class 1,更接近-1,被认为是class 2。当出现一些远大于1的样本点时,分类边界会移动到它认为远大于1的样本点也接近1的位置。
另外,在多分类问题中,比如1表示class 1, 2表示class 2, 3表示class 3…这样会让模型认为class 1与class 2更接近,class 2与class 3更接近,实际上它们无关联关系。
对于二分类问题:
我们可以假设模型是一个概率分布,这样不在训练数据内的样本,也不会是概率为零:
μ
\mu
μ决定里这个分布的最高点位置,
Σ
\Sigma
Σ决定了分布的离散程度。确定了这两个参数,就确定了该高斯分布。
这里用最大似然估计来求该参数:
7、逻辑回归
两种方法,获得的w和b是不同的。
生成模型的优点:
①假设一个概率分布,可以需要更少的训练数据。
②假设一个概率分布,可以对噪音更鲁棒。
③先验概率和后验概率可以来自不同的数据源,被估计。
注:右下角的横纵坐标画反了。