关键概念

1.激活函数

主要的激活函数(Activation Functions)包括:

  • sigmoid a = \frac{1}{1+e^{-z}}
  • tanh a =\frac{e^{z} - e^{-z}}{e^{z} + e^{-z}}
  • ReLU a = max(0, z)
  • leaking ReLu a = max(0.01z, z)

上述所有的关系中, 输出均为a, 输入均为z.

上述函数的导数, 记所有的激活函数均为a = g(z), 那么其导数为g^\prime(z)

  • sigmoid, g^\prime(z) = a(1-a)
  • tanh, g^\prime(z) = 1 - a^2
  • ReLU
    g^\prime(z) = \left\{ \begin{matrix} 0 & when & z<0\\ 1 & when & z \geq 0 \end{matrix}\right.

2. 正则化(Regularization)

正则化用来避免过拟合.
\begin{aligned} J(w,b) &= \underbrace{\frac{1}{m}\sum_{i=1}^m \mathcal{L}(\hat{y}^{(i)}, {y}^{(i)})}_{\overline{J}(w,b)} + \boxed{\frac{\lambda}{2m}||w||^2} \end{aligned}
上述方框中的内容称为L2正则化. m为样本个数. \lambda为正则化参数.
对于\mathbf{w}向量, 正则化部分可以表示为:
||w||^2 = \sum_{j=1}^{n_x}w_j^2 = \mathbf{w}^T\mathbf{w}
对于\mathbf{W}矩阵:
||w||^2 = \sum_{i,j}(\mathbf{W}_{ij})^2
在求导过程中
\frac{dJ}{d\mathbf{W}} = \frac{d\overline{J}}{d\mathbf{W}} + \frac{\lambda}{m}\mathbf{W}
迭代过程中就可以得到:
\begin{aligned} \mathbf{W} &\leftarrow \mathbf{W} - \alpha \frac{dJ}{d\mathbf{W}} \\ &\leftarrow \mathbf{W} - \alpha(\frac{d\overline{J}}{d\mathbf{W}} + \frac{\lambda}{m}\mathbf{W})\\ &\leftarrow \underbrace{(1-\frac{\alpha\lambda}{m})}_{<1} \cdot \mathbf{W} - \alpha\frac{d\overline{J}}{d\mathbf{W}} \end{aligned}
因此每次迭代过程中, \mathbf{W}总是在缩小, 因此避免了权重过大.

3. Dropout

每一次迭代的时候随机失效(disable)一些节点. 注意是在训练过程中, 每次迭代的时候.

4. mini-batch

假如有100,000个样本, 每次训练的时候使用1,000个样本.

  • 第1次迭代, 使用1-1,000个样本.
  • 第2次迭代, 使用1001-2,000个样本.
    ...

5. momentum

避免梯度来回抖动, 用低通滤波减少抖动, 加强同一方向的梯度

for iteration i
  compute dw, db
  Vdw = beta * Vdw + (1-beta) * dw
  Vdb = beta * Vdb + (1-beta) * db
  // Update
  W = W - alpha * Vdw
  b = b - alpha * Vdb

6. RMSProp

同样避免抖动, 加强同一方向的梯度.

for iteration i
  compute dw, db
  dw2 = dw * dw
  db2 = db * db
  Sdw = beta * Sdw + (1-beta) * dw2
  Sdb = beta * Sdb + (1-beta) * db2
  // update
  W = W - alpha * dW / sqrt(Sdw)
  b = b - alpha * db / sqrt(Sdb)

7. Adam

初始化

Vdw = 0, Sdw = 0, Vdb = 0, Sdb = 0

迭代优化

for iteration i
  compute dw, db
  Vdw = beta1 * Vdw + (1-beata1) * dw
  Vdb = beta1 * Vdb + (1-beata1) * db

  dw2 = dw * dw
  db2 = db * db
  Sdw = beta2 * Sdw + (1-beta2) * dw2
  Sdb = beta2 * Sdb + (1-beta2) * db2

  Vdw_corrected = Vdw / (1-beta1^t)
  Vdb_corrected = Vdb / (1-beta1^t)
  Sdw_corrected = Sdw / (1-beta2^t)
  Sdb_corrected = Sdb / (1-beta2^t)

  //update
  W = W - alpha * Vdw_corrected / (sqrt(Sdw_correct) + eplison)
  b = b - alpha * Vdb_corrected / (sqrt(Sdb_correct) + eplison)

beta1 = 0.9, beta2 = 0.999, eplison = 10e-8

7. 全连接层

一个层级中的每个节点都与上个层级中的每个节点相连。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容