Skip to content

Nerual Network

为什么使用 sigmoid 函数

博客

inductive bias

归纳偏置, 表示模型在训练前做出的一些偏好(假设), 方便模型搜索出有特征的解

可以加快模型收敛, 并增强小数据集上的泛化能力

CNN

CNN 的 inductive bias:

  1. locality

    因为卷积这个操作本身就是对某个局部内的像素计算, 所以 CNN 能更好地注意到局部特征

  2. translation equivariance

    即一个特征无论出现在图像的哪个部位, 都能被同一卷积核注意到

RNN

相对于 CNN 的空间, RNN 是时间上的归纳偏置

GNN

就是图拓扑结构上的归纳偏置

alt text

具体见 [1]


CNN

pooling

一个 CNN 层一般分为三步

  1. 卷积
  2. 激活函数
  3. 池化

池化可以让输出对输入上的微小变化不做反应

alt text

如图, 可以看到输入全变, 但是本质上是修改了右边的元素, 在整体向右循环平移

而输出只变化了两个

同时如果对不同参数的卷积结果做池化, 可以学习对某一种变换变得无反应

例如下图的例子中, 池化单元对于旋转操作无反应:

alt text

假设图中每个卷积核对于与自己方向相同并且形状重合的输入反应很大

那么最后的池化单元能够识别旋转后的 \(5\)

同时池化还可以用于降采样, 降低计算复杂度, 或者用于适应模型维数

RNN

structure

一个 RNN 使用共享参数矩阵 \(W_h, W_x, W_y\)

每一步接受一个输入 \(x_t\), 维数为 \(d\)

这个输入可以是 embedding 后的单词

使用如下公式迭代处理整个单词序列:

\[h_t=\sigma(W_h\cdot h_{t-1}+W_x\cdot x_t+b_h)\]
\[y_t=W_y\cdot h_t + b_y\]

其中 \(b_h,b_y\) 是偏置项

LSTM

为了处理 RNN 长序列导致的梯度消失 / 爆炸问题

使用三个门控单元:

  1. 遗忘门

    决定保留多少上一时刻细胞状态的信息

    \[f_t=\sigma(W_f\cdot [h_{t-1}, x_t]+b_f)\]
  2. 输入门

    决定有多少输入信息要进入细胞状态

    \[i_t=\sigma(W_i\cdot [h_{t-1}, x_t]+b_i)\]
  3. 输出门

    决定当前细胞状态有多少输出给隐藏状态

    \[o_t=\sigma(W_o\cdot [h_{t-1}, x_t]+b_o)\]

同时维护一个细胞状态 \(C_t\):

\[\tilde C_t=\tanh(W_C\cdot [h_{t-1},x_t]+b_C)\]

这里 \(\tilde C_t\) 表示候选值, 是从上一步隐藏值 \(h_{t-1}\) 和当前输入 \(x_t\) 中提取的新信息, 由 \(i_t\) 决定有多少流入当前细胞状态

所以更新细胞状态:

\[C_t=f_t\cdot C_{t-1}+i_t\cdot \tilde C_t\]

最后更新隐藏状态:

\[h_t=o_t\cdot \tanh(C_t)\]

这里面 \(C_t\) 相当于一个传送有效信息的线性链

链式法则里会出现多个 \(\frac{\partial C_t}{\partial C_{t-1} }\), 而这个梯度为

\[\frac{\partial C_t}{\partial C_{t-1} }=f_t+[C_{t-1}\cdot \frac{\partial f_t}{\partial C_{t-1} }+i_t\cdot \frac{\partial \tilde C_t}{\partial C_{t-1} }+\tilde C_t \cdot \frac{\partial i_t}{\partial C_{t-1} }]\]

后面一项是低阶项

如果我们希望不遗忘, 那么学习到的 \(f_t\approx 1\), 可以解决梯度消失

GRU

与 LSTM 类似

使用两个门控单元:

  1. 更新门

    决定当前时间步的隐藏状态需要保留多少前一时间步的信息以及加入多少新信息

    \[u_t=\sigma(W_u\cdot [h_{t-1},x_t]+b_u)\]
  2. 重置门

    决定前一时间步的隐藏状态对当前候选隐藏状态的影响程度, 越接近 \(0\), 表示忘记更多历史信息

    \[r_t=\sigma(W_r\cdot [h_{t-1},x_t]+b_r)\]

随后更新隐藏状态:

\[\tilde h_t=\tanh(W_h\cdot [r_t\cdot h_{t-1},x_t]+b_h)\]
\[h_t=(1-u_t)\cdot h_{t-1}+u_t\cdot \tilde h_t\]

同样对隐藏状态求导有

\[\frac{\partial h_t}{\partial h_{t-1} }=(1-u_t)+u_t\cdot \frac{\partial \tilde h_t}{\partial h_{t-1} } + \tilde h_t \cdot \frac{\partial u_t}{\partial h_{t-1} }\]

后面也是低阶项

前面令 \(u_t\approx 0\), 即表示不忘记, 记住信息, 可以解决梯度消失

GNN

这篇文章 [2] 讲得好

Transformer

博客


Optimizer

Normalization

Residual Connection


参考:

  1. Relational inductive biases, deep learning, and graph networks
  2. A Gentle Introduction to Graph Neural Networks
  3. Deep Learning (Ian Goodfellow and Yoshua Bengio and Aaron Courville)
  4. ADAPTIVE GRADIENT METHODS WITH DYNAMIC BOUND OF LEARNING RATE
  5. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization
  6. ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION
  7. ON THE CONVERGENCE OF ADAM AND BEYOND
  8. Online Convex Programming and Generalized Infinitesimal Gradient Ascent
  9. Layer Normalization
  10. Identity Mappings in Deep Residual Networks
  11. The Shattered Gradients Problem: If resnets are the answer, then what is the question?
  12. Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks