神经网络的历史
- 神经网络:1943
- 反向传播:1960(改进于1986)
- 卷积网络:1980(改进于1998)
- DBN:2006
- 自动编码机:2006
- 深度学习:2007
神经网络的优缺点
优点
- 只要有数据就能用
- 不依赖于人类对领域的理解
- 可以用来建立非线性依赖关系的模型
- 对噪声较为鲁棒
- 即使输入的信息不完整也能够给出一些答案
- 网络很容易维护
缺点
- 需要足够的数据
- 对超参数敏感
- 计算精度存在局限
- 尚不具备可解释性
前馈神经网络
假设在输入与输出间存在对应函数 f ∗ ( x ) = y f^*(x)=y f∗(x)=y,神经网络就是要得到一个前向的逼近器 f ( x ; θ ) f(x;\theta) f(x;θ)逼近 f ∗ f^* f∗
非线性变换
从线性模型出发,为了解决非线性问题,一个自然的想法是在线性层前加入非线性变换 ϕ ( x ) \phi(x) ϕ(x),有几种非线性变换的选取方式
- 使用通用的 ϕ \phi ϕ,优先选用局部光滑的
- 手工设计 ϕ \phi ϕ,可以保持凸性
- 从数据中学习 ϕ \phi ϕ,可以保持通用性和手工结构,但缺点是非凸的
前馈神经网络属于第三种,需要选择优化器、损失函数和输出形式,还要选择激活函数和网络结构
激活函数
输出层
- sigmoid
- softmax: exp ( z i ) ∑ j exp ( z j ) \frac{\exp(z_i)}{\sum_j\exp(z_j)} ∑jexp(zj)exp(zi)
- log softmax:优点:不会饱和、鼓励竞争、错分样本主导学习进程
隐层
- ReLU:优点是不饱和、收敛快;缺点是不对称、神经元死亡现象
- 广义ReLU:
g
(
z
,
a
)
i
=
max
{
0
,
z
i
}
+
a
i
min
{
0
,
z
i
}
g(z,a)_i=\max\{0,z_i\}+a_i\min\{0,z_i\}
g(z,a)i=max{0,zi}+aimin{0,zi}
- Absolute: a i = − 1 a_i=-1 ai=−1
- Leaky: a i = 0.01 a_i=0.01 ai=0.01
- 参数化 a i a_i ai
- 区间内随机
- ELU:
g
(
z
)
=
{
z
,
if
z
>
0
α
(
exp
z
−
1
)
,
else
g(z)=\begin{cases}z,\quad \text{if}\quad z>0\\ \alpha(\exp z-1),\quad \text{else}\end{cases}
g(z)={z,ifz>0α(expz−1),else
没有神经元死亡,但引入指数运算 - Sigmoid: σ ( z ) = 1 1 + e − z \sigma(z)=\frac1{1+e^{-z}} σ(z)=1+e−z1。容易饱和
- Tanh: tanh ( z ) = 2 σ ( 2 z ) − 1 \tanh(z)=2\sigma(2z)-1 tanh(z)=2σ(2z)−1,也会饱和
网络结构
- 单隐层MLP可以构造任意布尔函数
- 单隐层MLP可以建模任意单输入函数
- 加深可以增加测试准确率,但增多不一定可以
反向传播
反向传播的核心理念:Loss对待更新参数求导,并链式求出
随机梯度下降
每一步都对给定样本集的随机子集进行梯度下降,也就是将真实梯度近似为采样到的单个(或小批量)样本的梯度
特点:
- 梯度的估计是有噪声的,在每次迭代中权值可能不会沿着梯度精确地向下移动;但噪声通常会产生更好的结果
- 比批量学习更快,特别是当训练数据有冗余的时候
- 权值是波动的,它可能不会最终收敛到局部极小值
mini-batch随机梯度下降
将样本切分成多个mini-batch,每个epoch将其随机排列并按顺序取用于随机梯度下降
也可以选择从较小的批大小开始随训练逐渐增加
batch梯度下降
特点:
- 收敛条件很好理解
- 一些加速技术只适用于批量学习
- 权值变化规律和收敛速度的理论分析相对简单