(此为课程作业,参考价值不大,有需要可以通过链接直接阅读原文《动手学深度学习》)
性能优化问题
基本思想
使用二次型近似任意函数,某一算法是有效的则对二次型应该有好的效果,则一般以二次型函数为例进行优化。
二阶算法
牛顿法
将二次型进行泰勒展开,保留到二阶项,然后对二次型对增量进行求导为0,得到最优增量更新值
具有二次收敛速度,但每步都计算Hessian矩阵,其中涉及到二次导数Hessian矩阵求逆问题,比较复杂。更新公式为:
x
k
+
1
=
x
k
−
H
k
−
1
g
k
x_{k+1}=x_k-H_k^{-1}g_k
xk+1=xk−Hk−1gk
高斯牛顿法
用目标函数的Jacobian 矩阵近似H矩阵,提高算法效率,但H矩阵不满秩则无法迭代,公式为:
x
k
+
1
=
x
k
−
(
J
k
⊤
J
k
)
−
1
g
k
x_{k+1}=x_k-(J_k^\top J_k)^{-1}g_k
xk+1=xk−(Jk⊤Jk)−1gk
L-M算法
LM算法为一种信赖域算法,解决H矩阵不满秩或非正定时无法进行迭代的问题,公式为:
x
k
+
1
=
x
k
−
(
J
k
⊤
J
k
+
μ
I
)
−
1
g
k
x_{k+1}=x_k - (J_k^\top J_k + \mu I)^{-1}g_k
xk+1=xk−(Jk⊤Jk+μI)−1gk
优化问题常用技巧
K折交叉验证
原始训练数据被分成K个不重叠的子集。然后执行K次模型训练和验证,每次在K−1 个子集上进行训练,并在剩余的一个子集(在该轮中没有用于训练的子集)上进行验证。最后,通过对K 次实验的结果取平均来估计训练和验证误差。
权重衰减(L2正则化)
为防止过拟合和权值震荡,加入新的指标函数项:
J
(
w
)
+
λ
2
∣
∣
w
∣
∣
2
J(\textbf{w})+\dfrac{\lambda}{2}||\textbf{w}||^2
J(w)+2λ∣∣w∣∣2
第二项约束了权值不能过大。在梯度下降时,导数容易计算:
J
(
w
)
d
w
+
λ
w
\dfrac{J(\textbf{w})}{d\textbf{w}}+\lambda\textbf{w}
dwJ(w)+λw
暂退Dropout
在整个训练过程的每一次迭代中,标准暂退法包括在计算下一层之前将当前层中的一些节点置零。
模型初始化
简单的考虑,把所有权值在[-1,1]区间内按均值或高斯分布进行初始化。
Xavier初始化:为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等。因此需要实现下面的均匀分布:
W
∼
U
[
−
6
n
j
+
n
j
+
1
,
6
n
j
+
n
j
+
1
]
W\sim U\Big[-\dfrac{\sqrt{6}}{\sqrt{n_j+n_{j+1}}},\dfrac{\sqrt6}{\sqrt{n_{j}+n_{j+1}}}\Big]
W∼U[−nj+nj+16,nj+nj+16]
卷积神经网络基础
卷积的基本概念
离散卷积
图像二维卷积的定义:
(
f
∗
g
)
(
x
,
y
)
=
1
N
M
∑
i
=
0
N
−
1
∑
j
=
0
M
−
1
f
(
i
,
j
)
g
(
x
−
i
,
y
−
j
)
(f*g)(x,y)=\dfrac{1}{NM}\sum_{i=0}^{N-1}\sum_{j=0}^{M-1}f(i,j)g(x-i,y-j)
(f∗g)(x,y)=NM1i=0∑N−1j=0∑M−1f(i,j)g(x−i,y−j)
其中 f 是区域图像,g 是滤波器。
图像滤波的计算过程
计算公式
1
N
M
∑
i
=
0
N
−
1
∑
j
=
0
M
−
1
f
(
i
,
j
)
g
(
x
−
i
,
y
−
j
)
\dfrac{1}{NM}\sum\limits_{i=0}^{N-1}\sum\limits_{j=0}^{M-1}f(i,j)g(x-i,y-j)
NM1i=0∑N−1j=0∑M−1f(i,j)g(x−i,y−j)
N*M为卷积核的大小,像素点(x,y)卷积后的值如上公式所示,
卷积核(滤波器)
图像平滑(图像去噪)
平均滤波
将一个小区域内的像素值平均
加权平均滤波
将一个小区域内的像素值加权平均
图像边缘检测(基本算子)
Prewitt算子卷积核
Sobel算子卷积核
边缘强度
M
(
x
,
y
)
=
E
x
2
(
x
,
y
)
+
E
y
2
(
x
,
y
)
M(x,y)=\sqrt{E_x^2(x,y)+E_y^2(x,y)}
M(x,y)=Ex2(x,y)+Ey2(x,y)
边缘方向
θ
(
x
,
y
)
=
tan
−
1
(
E
y
(
x
,
y
)
E
x
(
x
,
y
)
)
\theta(x,y)=\tan^{-1}\left(\dfrac{E_y~~(x,y)}{E_x~~(x,y)}\right)
θ(x,y)=tan−1(Ex (x,y)Ey (x,y))
LoG算子
网络基本概念
全连接网络
链接权过多,难算难收敛,同时可能进入局部极小值,也容易产生过拟合问题。
局部连接网络
顾名思义,只有一部分权值连接。部分输入和权值卷积。
填充(Padding)
也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充。
步长
卷积核每次移动的像素数
多通道卷积
池化(Pooling)
使用局部统计特征,如均值或最大值。解决特征过多问题。
卷积神经网络结构
由多个卷积层和下采样层(池化层)构成,后面可连接全连接网络。
卷积层前向传播公式为:
z
[
l
]
(
x
,
y
)
=
∑
u
=
0
p
∑
v
=
0
q
a
[
l
−
1
]
(
x
+
u
,
y
+
v
)
w
rot
[
l
]
,
k
(
u
,
v
)
z^{[l]}(x,y)=\sum_{u=0}^p\sum_{v=0}^q a^{[l-1]}(x+u,y+v)w_{\text{rot}}^{[l],k}(u,v)
z[l](x,y)=u=0∑pv=0∑qa[l−1](x+u,y+v)wrot[l],k(u,v)
a
[
l
]
(
x
,
y
)
=
f
(
z
[
l
]
(
x
,
y
)
)
a^{[l]}(x,y)=f\left(z^{[l]}(x, y)\right)
a[l](x,y)=f(z[l](x,y))
如果第 l 层是卷积+池化层,则:
a
[
l
]
(
x
,
y
)
=
d
o
w
n
s
a
m
p
l
e
(
∑
u
=
0
p
∑
v
=
0
q
a
[
l
−
1
]
(
x
+
u
,
y
+
v
)
w
s
(
u
,
v
)
)
a^{[l]}(x,y)=downsample(\sum_{u=0}^p\sum_{v=0}^q a^{[l-1]}(x+u,y+v)w_{s}(u,v))
a[l](x,y)=downsample(u=0∑pv=0∑qa[l−1](x+u,y+v)ws(u,v))