系列文章目录
lesson01
一、前言
深度学习是基于人工神经网络的机器学习方法子集。其中“深度”指的是网络具有多层的特性。简单的来说,深度学习=用深度神经网络进行数学学习。下面我们从傅里叶级数及其导数开始引入。
二、傅里叶级数的例子
深度学习做的是什么,无非就是在一个函数族中找到满足条件的函数(这个函数并不一定唯一在深度学习中,本节后面有例子说明)来逼近背后的规律。那么这个函数族我们将其称为模型,或者叫假设空间。例如线性模型就是一个假设空间,该空间就是所有满足条件的线性函数组成的一个函数族。下面我就从实值有限傅里叶级数开始:其定义为下面的函数族:
F
N
=
{
f
(
x
)
=
a
0
+
∑
n
=
1
N
a
n
c
o
s
(
n
x
)
+
b
n
s
i
n
(
n
x
)
:
a
0
,
a
n
,
b
n
∈
R
,
1
≤
n
≤
N
}
\begin{align*} \mathcal{F}_N &=\left \{ f(x)=a_0+\sum_{n=1}^{N}a_ncos(nx)+b_nsin(nx):a_0,a_n,b_n\in \mathbb{R},1\le n\le N \right \} \end{align*}
FN={f(x)=a0+n=1∑Nancos(nx)+bnsin(nx):a0,an,bn∈R,1≤n≤N}
这也是一个假设空间。其中
N
N
N为固定整数,并且
F
N
\mathcal{F}_N
FN中的函数周期都为
2
π
2\pi
2π,所有的
{
1
,
c
o
s
(
n
x
)
,
s
i
n
(
n
x
)
}
\left \{ 1,cos(nx),sin(nx) \right \}
{1,cos(nx),sin(nx)}在其中都扮演了基函数的作用;系数
a
0
,
a
1
,
b
1
,
.
.
.
,
a
N
,
b
N
a_0,a_1,b_1,...,a_N,b_N
a0,a1,b1,...,aN,bN都是任意的,称为自由参数,在深度学习中就是我们要优化学习的,如果自由参数
a
0
,
a
1
,
b
1
,
.
.
.
,
a
N
,
b
N
a_0,a_1,b_1,...,a_N,b_N
a0,a1,b1,...,aN,bN固定,显然
f
(
x
)
f(x)
f(x)就也是固定的,或者我们可以说
f
(
x
)
f(x)
f(x)完全由自由参数确定。
记
θ
=
{
a
0
,
a
1
,
b
1
,
.
.
.
,
a
N
,
b
N
}
\theta =\left \{ a_0,a_1,b_1,...,a_N,b_N \right \}
θ={a0,a1,b1,...,aN,bN}为所有自由参数组成的有序集合,那么我们可以将
f
(
x
)
f(x)
f(x)重写为
f
(
x
;
θ
)
f(x;\theta)
f(x;θ),表示其对
θ
\theta
θ的依赖性,并且由于这里是基函数的线性组合,是线性模型,在这种情况下这种依赖性是唯一的。也就是说,对与
θ
1
,
θ
2
\theta_1,\theta_2
θ1,θ2这两个自由参数集合,如果
f
(
x
;
θ
1
)
=
f
(
x
;
θ
2
)
f(x;\theta_1)=f(x;\theta_2)
f(x;θ1)=f(x;θ2)对所有的
x
x
x都成立,那么必有
θ
1
=
θ
2
\theta_1=\theta_2
θ1=θ2
另外,在傅立叶级数的结构中,基函数
{
1
,
c
o
s
(
n
x
)
,
s
i
n
(
n
x
)
}
\left \{ 1,cos(nx),sin(nx) \right \}
{1,cos(nx),sin(nx)}总是固定的,只有基函数的系数是变量,也就是说,所有傅立叶级数都是基函数的线性组合,在这个意义下,我们可以把所有的
F
N
\mathcal{F}_N
FN看成是一个关于自由参数的线性结构。其他的线性结构还要包括多项式,有限元函数,小博级数等。
但是在深度学习的神经网络中,神经网络相对于自由参数是非线性结构的。典型的例子就是直接取消基函数的固定,以上述的
F
N
\mathcal{F}_N
FN就是将其中的
c
o
s
(
n
x
)
,
s
i
n
(
n
x
)
cos(nx),sin(nx)
cos(nx),sin(nx)中的波数
n
n
n替换为自由参数
w
n
,
v
n
w_n,v_n
wn,vn,然后我们就有了下面的函数族:
S
N
=
{
ϕ
(
x
)
=
a
0
+
∑
n
=
1
N
a
n
c
o
s
(
w
n
x
)
+
b
n
s
i
n
(
v
n
x
)
:
a
0
,
a
n
,
b
n
,
w
n
,
v
n
∈
R
,
1
≤
n
≤
N
}
\begin{align*} \mathcal{S}_N &=\left \{ \phi(x)=a_0+\sum_{n=1}^{N}a_ncos(w_nx)+b_nsin(v_nx):a_0,a_n,b_n,w_n,v_n\in \mathbb{R},1\le n\le N \right \} \end{align*}
SN={ϕ(x)=a0+n=1∑Nancos(wnx)+bnsin(vnx):a0,an,bn,wn,vn∈R,1≤n≤N}
在
S
N
\mathcal{S}_N
SN中,显然
w
n
,
v
n
w_n,v_n
wn,vn都是属于
R
\mathbb{R}
R,而原来的
n
∈
Z
n\in \mathbb{Z}
n∈Z,范围扩大了,因此
F
N
⊆
S
N
\mathcal{F}_N \subseteq \mathcal{S}_N
FN⊆SN,此时自由参数集合表示为
θ
=
{
a
0
,
a
n
,
b
n
,
w
n
,
v
n
}
n
=
1
N
\theta =\left \{ a_0,a_n,b_n,w_n,v_n \right \}_{n=1}^N
θ={a0,an,bn,wn,vn}n=1N,同样将
ϕ
(
x
)
\phi(x)
ϕ(x)改写为
ϕ
(
x
;
θ
)
\phi(x;\theta)
ϕ(x;θ).
实际上这就是一个简单的单隐藏层的神经网络,以
s
i
n
x
,
c
o
s
x
sinx,cosx
sinx,cosx为激活函数。网络结构如下图:
前面不是说过,神经网络学习到的自由参数一般是不唯一的吗,下面例子纠形象说明了这一点。取
N
=
1
,
θ
1
ˉ
=
{
a
0
=
1
,
a
1
=
1
,
b
1
=
1
,
w
1
=
0
,
v
1
=
1
}
,
θ
2
ˉ
=
{
a
0
=
2
,
a
1
=
0
,
b
1
=
1
,
w
1
=
1
,
v
1
=
1
}
N=1,\bar{\theta_1}=\left \{ a_0=1,a_1=1,b_1=1,w_1=0,v_1=1 \right \}, \bar{\theta_2}=\left \{ a_0=2,a_1=0,b_1=1,w_1=1,v_1=1 \right \}
N=1,θ1ˉ={a0=1,a1=1,b1=1,w1=0,v1=1},θ2ˉ={a0=2,a1=0,b1=1,w1=1,v1=1}都可以得到
ϕ
(
x
;
θ
)
=
2
+
s
i
n
x
\phi(x;\theta)=2+sinx
ϕ(x;θ)=2+sinx。
【注】:需要注意的是
∀
ϕ
(
x
,
θ
ˉ
)
∈
S
N
\forall \phi (x,\bar{\theta } )\in \mathcal{S_N}
∀ϕ(x,θˉ)∈SN由于自由参数
w
n
,
v
n
w_n,v_n
wn,vn的存在,其是非线性函数,
S
N
\mathcal{S_N}
SN是一个非线性空间。事实上,
∀
ϕ
1
,
ϕ
2
∈
S
N
,
ϕ
1
+
ϕ
2
∈
S
N
\forall \phi_1,\phi_2\in \mathcal{S_N},\phi_1+\phi_2\in\mathcal{S_N}
∀ϕ1,ϕ2∈SN,ϕ1+ϕ2∈SN也是非线性的。相比之下
F
N
\mathcal{F_N}
FN是一个线性空间,维数为
2
N
+
1
2N+1
2N+1。
三、学习(拟合、逼近)实值函数=回归
在机器学习中有一个典型的学习任务就是去学习一个实值函数,并且将这类问题称为回归。
假设有一个函数
g
:
[
0
,
2
π
]
→
R
g:\left [ 0,2\pi \right ]\to \mathbb{R}
g:[0,2π]→R,但是
g
g
g是未知的,我们只知道它的一个
[
0
,
2
π
]
\left [ 0,2\pi \right ]
[0,2π]有限子集(离散的点)。
比如
{
x
1
,
x
2
,
.
.
.
,
x
M
}
\left \{ x_1,x_2,...,x_M \right \}
{x1,x2,...,xM},记
y
m
=
g
(
x
m
)
,
1
≤
m
≤
M
y_m=g(x_m), 1\le m\le M
ym=g(xm),1≤m≤M,子集
{
(
x
m
,
y
m
)
}
m
=
1
M
\left \{ (x_m,y_m) \right \}_{m=1}^{M}
{(xm,ym)}m=1M给我们,一般将其称作数据集。我们的目标就是基于这个离散的数据集去寻找一个公式或一种规则去拟合
g
,
x
∈
[
0
,
2
π
]
g,x\in\left [0,2\pi \right ]
g,x∈[0,2π]。
为了解决这个问题,假设 g g g是 C ∞ C^\infty C∞上以 2 π 2\pi 2π为周期的光滑函数,并且所有阶导数都存在。一个想法就是用有限傅立叶级数 f ( x ; θ ) ∈ F N f(x;\theta) \in \mathcal{F}_N f(x;θ)∈FN去近似 g ( x ) g(x) g(x)。这个函数族在机器学习里面就称为假设空间或者模型。我们的目标就是学习所有的自由参数,找到一个合适的规则去尽可能的逼近 g ( x ) g(x) g(x)。下面是公式化表示:
给定实数 N > 0 N>0 N>0, f ( x ; θ ) = a 0 + ∑ n = 1 N a n c o s ( n x ) + b n s i n ( n x ) f(x;\theta )=a_0+\sum_{n=1}^{N}a_ncos(nx)+b_nsin(nx) f(x;θ)=a0+n=1∑Nancos(nx)+bnsin(nx)然后学习原理就是最小化均方误差, min θ 1 M ∑ m = 1 M ∣ f ( x m ; θ ) − y m ∣ 2 \min_{\theta }\frac{1}{M}\sum_{m=1}^{M}|f(x_m;\theta )-y_m|^2 θminM1m=1∑M∣f(xm;θ)−ym∣2带入具体的公式就是 min θ 1 M ∑ m = 1 M ∣ a 0 + ∑ n = 1 N a n c o s ( n x m ) + b n s i n ( n x m ) − y m ∣ 2 \min_{\theta }\frac{1}{M}\sum_{m=1}^{M}|a_0+\sum_{n=1}^{N}a_ncos(nx_m)+b_nsin(nx_m)-y_m|^2 θminM1m=1∑M∣a0+n=1∑Nancos(nxm)+bnsin(nxm)−ym∣2。其实就等价于最小二乘线性系统,下面以机器学习里面的矩阵形式描述上述过程。
可以发现,上面的模型和机器学习里面线性回归的套路基本一样,事实上
F
N
\mathcal{F}_N
FN也的确是一个线性空间,这里是一种变形,在学习多项式回归我们知道多项式回归就是将原有的特征进行特征组合,引入平方项,三次项等构成新的特征。这么一想,上面例子不就是用傅里叶的基函数构成新的特征的线性回归吗?我更愿意将其去一个名字叫傅里叶线性回归,当然这个名字我自己取的,到底有没有我也不知道。
上面例子原先只有一个特征
x
x
x,进行特征组合形成新的特征
1
,
c
o
s
(
x
)
,
s
i
n
(
x
)
,
c
o
s
(
2
x
)
,
s
i
n
(
2
x
)
,
.
.
.
,
c
o
s
(
N
x
)
,
s
i
n
(
N
x
)
1,cos(x),sin(x),cos(2x),sin(2x),...,cos(Nx),sin(Nx)
1,cos(x),sin(x),cos(2x),sin(2x),...,cos(Nx),sin(Nx)
1
1
1这一项是为了方便编程对偏置项进行的处理,机器学习的常用手段。那么对与数据集
{
(
x
m
,
y
m
)
}
m
=
1
M
\left \{ (x_m,y_m) \right \}_{m=1}^{M}
{(xm,ym)}m=1M就应该有
[
1
c
o
s
(
x
1
)
s
i
n
(
x
1
)
.
.
.
c
o
s
(
N
x
1
)
s
i
n
(
N
x
1
)
1
c
o
s
(
x
2
)
s
i
n
(
x
2
)
.
.
.
c
o
s
(
N
x
2
)
s
i
n
(
N
x
2
)
⋮
⋮
⋮
⋮
⋮
⋮
1
c
o
s
(
x
M
)
s
i
n
(
x
M
)
.
.
.
c
o
s
(
N
x
M
)
s
i
n
(
N
x
M
)
]
[
a
0
a
1
b
1
⋮
a
N
b
N
]
≈
[
y
1
y
2
⋮
y
M
]
\begin{bmatrix} &1 &cos(x_1) &sin(x_1) &... &cos(Nx_1) &sin(Nx_1)\\ &1 &cos(x_2) &sin(x_2) &... &cos(Nx_2) &sin(Nx_2) \\ &\vdots &\vdots &\vdots &\vdots &\vdots &\vdots \\ &1 &cos(x_M) &sin(x_M) &... &cos(Nx_M) &sin(Nx_M) \end{bmatrix}\begin{bmatrix} a_0\\ a_1\\ b_1\\ \vdots \\ a_N\\ b_N\\ \end{bmatrix}\approx \begin{bmatrix} y_1\\ y_2\\ \vdots \\ y_M\\ \end{bmatrix}
11⋮1cos(x1)cos(x2)⋮cos(xM)sin(x1)sin(x2)⋮sin(xM)......⋮...cos(Nx1)cos(Nx2)⋮cos(NxM)sin(Nx1)sin(Nx2)⋮sin(NxM)
a0a1b1⋮aNbN
≈
y1y2⋮yM
简记为
X
w
=
y
\mathbf{X} \mathbf{w} =\mathbf{y}
Xw=y。其中
w
\mathbf{w}
w是参数向量,是不知道的,是我们需要算法优化学习的,目标就是优化上面的最小均方损失(误差)。为了前后一致,这里
w
\mathbf{w}
w还是用前面的
θ
\mathbf{\theta}
θ吧。
一般情况下数据量个数 M M M是远大于自由参数个数 2 N + 1 2N+1 2N+1的,因此是有解的。如果我们找到了一组解 θ ∗ = { a 0 ∗ , a 1 ∗ , b 1 ∗ , . . . , a N ∗ , b N ∗ } \mathbf{\theta^* }=\left \{ a_0^*,a_1^*,b_1^*,...,a_N^*,b_N^* \right \} θ∗={a0∗,a1∗,b1∗,...,aN∗,bN∗},那么这个有限傅里叶函数 f ( x ; θ ∗ ) f(x;\theta^*) f(x;θ∗)就可以被认为是 g ( x ) g(x) g(x)的一个近似,在机器学习中叫预测。
问题来了, F N \mathcal{F}_N FN在自由参数的意义下是线性空间,可以用机器学习中的线性回归来理解。那么 S N \mathcal{S}_N SN是非线性空间,那该怎么理解呢?实际上非线性情况只要用机器学习中的神经网络同样可以认识。
问题转变为我们需要寻找一个网络
ϕ
(
x
;
θ
ˉ
)
∈
S
N
\phi (x;\bar{\theta } ) \in \mathcal{S}_N
ϕ(x;θˉ)∈SN去逼近
g
(
x
)
g(x)
g(x),同样的还是采用最小化均方误差的策略:
min
θ
ˉ
1
M
∑
m
=
1
M
∣
ϕ
(
x
m
;
θ
ˉ
)
−
y
m
∣
2
\min_{\bar{\theta} }\frac{1}{M}\sum_{m=1}^{M}|\phi(x_m;\bar{\theta} )-y_m|^2
θˉminM1m=1∑M∣ϕ(xm;θˉ)−ym∣2带入具体的公式就是
min
θ
ˉ
1
M
∑
m
=
1
M
∣
a
0
+
∑
n
=
1
N
a
n
c
o
s
(
w
n
x
m
)
+
b
n
s
i
n
(
v
n
x
m
)
−
y
m
∣
2
\min_{\bar{\theta} }\frac{1}{M}\sum_{m=1}^{M}|a_0+\sum_{n=1}^{N}a_ncos(w_nx_m)+b_nsin(v_nx_m)-y_m|^2
θˉminM1m=1∑M∣a0+n=1∑Nancos(wnxm)+bnsin(vnxm)−ym∣2。
同样的优化出一个可行解 θ ˉ ∗ \bar{\theta}^* θˉ∗,网络 ϕ ( x ; θ ˉ ∗ ) \phi (x;\bar{\theta }^* ) ϕ(x;θˉ∗)就作为 g ( x ) g(x) g(x)的非线性逼近。实际上对于非线性逼近,在机器学习中一般都是非凸优化,大部分情况下我们只能得到一个局部最优解,但深度学习发展到现在,就算是局部最优解也能得到比较接近理论最优解的局部最优解,已经完全可以应用于实际上的需求了。
但是从数学的角度上来说,不是理论上的解就一定有误差,所以也有必要学习一下各种误差,至少也可以来评估一下自己的模型训练效果好不好。
四、三种误差
待更新