目录
- 1.激活函数
- :one: 激活函数的作用
- :two: sigmoid函数
- :three: tanh函数
- :four: ReLu
- :five: Leaky ReLU
- 2.Softmax函数
- 3.优化器
- :one: 优化器的作用
- :two: BGD(批梯度下降)
- :three: SGD(随机梯度下降)
- :four: MBGD(Mini Batch梯度下降)
- :five: AdaGrad(自适应学习率优化器)
- :six: RMSProp(Root Mean Square Propagation)
- :seven: Adam(Adaptive Momen Estimation,自适应动量估计)
- 4.梯度消失和爆炸
- :one: 梯度消失
- :two: 梯度爆炸
- 5.输入数据的归一化
- :one: 标准化
- :two:最小-最大归一化
- 6.神经网络层内部的归一化
- :one: 批量归一化
- :two: 层归一化
- 7.如何处理过拟合?
- :one: Dropout
- :two: 增大数据量
- :three:Early Stop。
- :four:Batch Normalization
- :five: L1正则化
- :six: L2正则化
- 8.全连接层的作用
- 9.池化
- :one: 平均池化
- :two: 最大池化
- 10.卷积的感受野
- :one:
- :two:
- :three:
- :four:
- :five:
- :six:
- :seven:
1.激活函数
1️⃣ 激活函数的作用
激活函数为神经网络引入非线性
,如果没有激活函数,即使网络层数再多,也只能处理线性可分
问题。
2️⃣ sigmoid函数
sigmoid函数将输入变换为(0,1)
上的输出。它将范围(-inf,inf)中的任意输入压缩到区间(0,1)中,函数表示为:
s
i
g
m
o
i
d
(
x
)
=
1
1
+
e
−
x
sigmoid(x)=\frac1{1+e^{-x}}
sigmoid(x)=1+e−x1
其梯度可以表示为:
d
d
x
s
i
g
m
o
i
d
(
x
)
=
e
−
x
(
1
+
e
−
x
)
2
=
s
i
g
m
o
i
d
(
x
)
[
1
−
s
i
g
m
o
i
d
(
x
)
]
\frac d{dx}sigmoid(x)=\frac{e^{-x}}{(1+e^{-x})^2}=sigmoid(x)[1-sigmoid(x)]
dxdsigmoid(x)=(1+e−x)2e−x=sigmoid(x)[1−sigmoid(x)]
可以发现,sigmoid函数的梯度在0到0.25之间。输入很大或很小时会趋于0,当网络变得越来越深时,会出现梯度消失问题。
优点:
- 能够将自变量的值全部压缩到(0,1)之间
- 连续可导
缺点:
- 输入趋于无穷大或无穷小时会出现梯度消失问题
- 存在幂运算,计算复杂度大
3️⃣ tanh函数
tanh函数将其输入压缩转换到区间(-1,1)
上,公式如下:
t
a
n
h
(
x
)
=
1
−
e
−
2
x
1
+
e
−
2
x
tanh(x)=\frac{1-e^{-2x}}{1+e^{-2x}}
tanh(x)=1+e−2x1−e−2x
tanh函数的梯度是:
d
d
x
t
a
n
h
(
x
)
=
1
−
t
a
n
h
2
(
x
)
\frac d{dx}tanh(x)=1-tanh^2(x)
dxdtanh(x)=1−tanh2(x)
可以发现当输入接近0时,tanh函数的梯度接近最大值1。与sigmoid函数的梯度类似,输入在任一方向上远离0点,梯度越接近0,因此也存在梯度消失问题。
优点
- 相比于Sigmoid,tanh在输入靠近0的区域,梯度为1,有助于收敛。但输入趋于无穷大或无穷小时会出现梯度消失问题
缺点
- 和sigmoid函数一样,输入趋于无穷大或无穷小时会出现梯度消失问题
- 同样存在幂运算,计算复杂度大
4️⃣ ReLu
线性整流单元(ReLU)提供了一种非常简单的非线性变换,被定义为:
R
e
L
u
(
x
)
=
m
a
x
(
x
,
0
)
ReLu(x)=max(x,0)
ReLu(x)=max(x,0)
其梯度可以表示为:
f
′
(
x
)
=
{
1
,
x
>
0
0
,
x
<
0
f^{^{\prime}}(x)=\begin{cases}1,\quad\text{x}>0\\0,\quad\text{x}<0&\end{cases}
f′(x)={1,x>00,x<0
当输入为正时,ReLU函数的梯度为1;当输入值等于0时,梯度可以当成1也可以当成0,实际应用中并不影响;输入小于0时,梯度直接为0,但在神经网络训练过程中,输入小于0的神经元占比很少。因此ReLu函数可以有效缓解梯度消失问题。
优点
- 相较于sigmoid和tanh,relu在输入大于0时,梯度恒为1,不会出现梯度消失问题
- 线性函数,收敛快
缺点:
- dead relu问题:当输入小于0时,梯度为0,导致参数无法更新
5️⃣ Leaky ReLU
在小于0的部分引入一个斜率,使得小于0的取值不再是0(通常a的值为0.01左右):
f
(
x
)
=
{
a
⋅
x
x <=0
x
x>0
f(x)=\begin{cases}a\cdot x&\text{ x <=0}\\x&\text{ x>0}&\end{cases}
f(x)={a⋅xx x <=0 x>0
其梯度可以表示为:
f
′
(
x
)
=
{
a
x <=0
1
x>0
f^{\prime}(x)=\begin{cases}a&\text{ x <=0}\\1&\text{ x>0}&\end{cases}
f′(x)={a1 x <=0 x>0
优点:
- 解决了dead relu问题
缺点:
- 负斜率需要预先设定,但不同任务的斜率可能不同
2.Softmax函数
softmax函数常用于多分类任务,将输入映射成一个0到1范围的概率,且所有的输出和为1
假设输入为
z
=
[
z
1
,
z
2
,
…
,
z
n
]
z=[z_1,z_2,\ldots,z_n]
z=[z1,z2,…,zn] ,Softmax 函数的输出为:
s
o
f
t
m
a
x
(
z
i
)
=
e
z
i
∑
j
=
1
n
e
z
j
\mathrm{softmax}(z_i)=\frac{e^{z_i}}{\sum_{j=1}^ne^{z_j}}
softmax(zi)=∑j=1nezjezi
3.优化器
1️⃣ 优化器的作用
优化器的作用是调整模型参数,以最小化损失函数
2️⃣ BGD(批梯度下降)
在更新参数时使用所有样本进行更新,假设样本总数为N:
θ
′
=
θ
−
η
⋅
1
N
∑
i
=
1
N
∇
θ
J
(
θ
)
\theta'=\theta-\eta\cdot\frac1N\sum_{i=1}^N\nabla_\theta J(\theta)
θ′=θ−η⋅N1i=1∑N∇θJ(θ)
其中,
η
\eta
η为学习率,
∇
θ
J
(
θ
)
\nabla_\theta J(\theta)
∇θJ(θ)是损失函数对网络参数
θ
\theta
θ的梯度。
优点:
- BGD得到的是一个全局最优解,
缺点:
- 每迭代一步,都要用到训练集的所有数据,如果样本数巨大,模型训练速度会很慢。
3️⃣ SGD(随机梯度下降)
SGD 是最基本的优化方法。每次更新权重时,使用一个样本或batch size个样本(多个样本则计算平均梯度)计算梯度:
参数更新公式:
θ
′
=
θ
−
η
⋅
∇
θ
J
(
θ
)
\theta'=\theta-\eta\cdot\nabla_\theta J(\theta)
θ′=θ−η⋅∇θJ(θ)
其中,
θ
\theta
θ是参数,
η
\eta
η是学习率,
∇
θ
J
(
θ
)
\nabla_\theta J(\theta)
∇θJ(θ)是损失函数对网络参数
θ
\theta
θ的梯度。
优点:
- 实现简单、效率高
缺点:
- 收敛速度慢,容易陷入局部最优解
4️⃣ MBGD(Mini Batch梯度下降)
介于批梯度下降和随机梯度下降之间,每次更新参数时使用b个样本。
θ
′
=
θ
−
η
⋅
1
b
∑
i
=
1
b
∇
θ
J
(
θ
)
\theta'=\theta-\eta\cdot\frac1b\sum_{i=1}^b\nabla_\theta J(\theta)
θ′=θ−η⋅b1i=1∑b∇θJ(θ)
特点:
- 训练过程比较稳定;BGD可以找到局部最优解,不一定是全局最优解;若损失函数为凸函数,则BGD所求解一定为全局最优解。
5️⃣ AdaGrad(自适应学习率优化器)
AdaGrad优点是可以自适应学习率。该优化器在较为平缓处有比较高的学习效率,在陡峭处学习率小,在一定程度上可以避免越过极小值。
6️⃣ RMSProp(Root Mean Square Propagation)
AdaGrad算法虽然解决了学习率无法根据当前梯度自动调整的问题,但是过于依赖之前的梯度,在梯度突然变化时无法快速响应。RMSProp为了解决这一问题,在AdaGrad的基础上增加了衰减速率参数。也就是说在当前梯度与之前梯度之间添加了权重,如果当前梯度的权重较大,那么响应速度也就更快
7️⃣ Adam(Adaptive Momen Estimation,自适应动量估计)
Adam优化算法是在RMSProp的基础上增加了动量。有时候通过RMSProp优化算法得到的值不是最优解,有可能是局部最优解,引入动量的概念后,求最小值就像是一个球从高处落下,落到局部最低点时会继续向前探索,有可能得到更小的值
4.梯度消失和爆炸
1️⃣ 梯度消失
- 激活函数的特性:sigmoid和tanh在输入趋于无穷大或无穷小时会出现梯度消失问题
- 深度网络层数累计:随着层数增多,反向传播时梯度会逐层相乘,导致梯度逐渐减小
- 权重初始化不当:如果初始化权重过小,反向传播时梯度会减小,导致梯度消失
如何解决?
- 使用relu激活函数
- 使用 Batch Normalization:通过对每一层的输出进行归一化,保持输出在一个稳定的分布范围内,防止梯度逐层缩小
2️⃣ 梯度爆炸
- 深度网络层数累计:若每层的梯度稍大,梯度逐层相乘会导致梯度爆炸
- 权重初始化不当:如果初始化权重过大,反向传播时梯度会变大,导致梯度爆炸
如何解决?
- 合适的权重初始化
5.输入数据的归一化
输入数据的归一化可以使数据分布一致,加快收敛速度。
1️⃣ 标准化
将数据调整为均值为 0、标准差为1的分布:
x ′ = x − μ σ x^{\prime}=\frac{x-\mu}\sigma x′=σx−μ
其中 x x x是原始数据, μ \mu μ是数据的均值, σ \sigma σ是数据的标准差。
2️⃣最小-最大归一化
x ′ = x − min ( x ) max ( x ) − min ( x ) x^{\prime}=\frac{x-\min(x)}{\max(x)-\min(x)} x′=max(x)−min(x)x−min(x)
6.神经网络层内部的归一化
1️⃣ 批量归一化
没写
2️⃣ 层归一化
没写
7.如何处理过拟合?
1️⃣ Dropout
训练时随机丢弃部分神经元,减少神经元之间的相互依赖,迫使网络学习更加鲁邦的表示,防止过拟合。
2️⃣ 增大数据量
增大的数据量可以使模型学习到更多的特征,防止过拟合
3️⃣Early Stop。
将数据集分为训练集、验证集、测试集,每个epoch后都用验证集验证一下,如果随着训练的进行训练集Loss持续下降,而验证集Loss先下降后上升,说明出现过拟合,应该立即停止训练
4️⃣Batch Normalization
没写
5️⃣ L1正则化
没写
6️⃣ L2正则化
没写
8.全连接层的作用
- 特征融合:将前一层的所有特征融合成更高层次的特征
- 决策输出:全连接层放在网络的末端,将提取的特征映射到类别,实现分类任务