0 补课:语义分割——卷积神经网络基础
B站指路:1.1 卷积神经网络基础_哔哩哔哩_bilibili
-
卷积的特性:
- 局部感知机制
- 权值共享
-
一个普通卷积层示例如下:
- 卷积核的channel与输入的特征层的channel(比如原图像的RGB三个通道,表示有3个channel)相同
- 输出的特征矩阵的channel与卷积核的个数相同,如图所示,两个卷积核都有3个通道,输出矩阵的特征是2层,即通道为2。
-
使用非线性因素——激活函数,使得神经网络可以模拟非线性问题的模型
- sigmoid激活函数:梯度消失问题严重,当变量取很大的负数或者正数的时候,sigmoid函数接近饱和,函数的导数接近于0,如下图所示,权重基本无法更新,所以当网络层数较深时,靠近输入层的隐藏层权值更新缓慢或停滞更新。
-
relu激活函数:神经元坏死现象,当x<0时,梯度为0,如下图所示,这意味着这个神经元及其之后的神经元的梯度都为0,并且将永远坏死,不能复活。(避免使用很大的学习率,可能会导致很多神经元失活)
-
卷积层的矩阵大小
-
计算公式为:
N
=
(
W
−
F
+
2
P
)
/
S
+
1
N=(W-F+2P)/S+1
N=(W−F+2P)/S+1
输入图像为
W
×
W
W×W
W×W,卷积核Filter大小为
F
×
F
F×F
F×F,步长为S,padding的像素为P,一般是填充2P。
-
-
池化层
- 没有训练参数
- 不改变特征层的个数,即channel,只改变特征矩阵的宽和高
- 一般将池化核大小与步长设置相同
-
反向传播的过程
-
文字描述:输入x乘以权重w加上偏置值再经过激活函数处理得到一个网络层的输出y,y再经过类似的处理直到最后一层,得到最终的输出z,然后使用z和z的真实标签计算出损失Loss(比如说交叉熵),然后对损失函数求导,进行反向传播,要更新的参数是每个隐藏层的权重,也就是要使w是沿着损失下降最快的方向进行更新,那就是损失函数对w求偏导(因为不止一个权重(矩阵)),然后依次求出每一层的的损失对应权重的导数。接下来就是按照怎样的策略来更新这些权重,最简单的方法就是直接
w
新
=
w
旧
−
l
e
×
导
数
w_新 =w_旧-le×导数
w新=w旧−le×导数,le是学习率,此表达式表示权重在沿着损失下降最快的方向进行更新,也就是导数为负的方向。
-
优化:上述更新权重的策略可能会导致进入局部最优,因为使用bach批次训练的损失是沿着当前批次下降最快的方向,并不是全局最优方向。所以使用优化器来更新权重,可以使网络更快地收敛。
-
SGD(Stochastic gradient descent)随机梯度下降:
W
新
=
W
旧
−
α
⋅
损
失
梯
度
W_新=W_旧-α·损失梯度
W新=W旧−α⋅损失梯度。易受样本噪声影响;可能陷入局部最优解。收敛慢
-
SGD+Momentum优化器:
v
t
=
η
⋅
v
t
−
1
+
α
⋅
g
(
w
t
)
v_t=eta cdot v_{t-1}+alpha cdot gleft(w_tright)
vt=η⋅vt−1+α⋅g(wt);
w
t
+
1
=
w
t
−
v
t
w_{t+1}=w_t-v_t
wt+1=wt−vt.
η
eta
η表示动量系数,
g
(
w
t
)
gleft(w_tright)
g(wt),表示损失梯度(t时刻对参数
w
t
w_t
wt的损失梯度),
α
alpha
α表示学习率。加上动量部分即既考虑当前的梯度,还会将上一次的梯度也加入进来,后可以理解成是在纠正上一次梯度的错误,抑制样本噪声的干扰,如下图所示:
-
Adagrad优化器(自适应学习率):学习率下降太快可能还没收敛就停止训练了。
-
RmSprop(自适应学习率)
-
Adam(自适应学习率):一阶动量;二阶动量一起控制学习率衰减。
-
-