笔记-capsule网络

title: Dynamic Routing Between Capsules, NIPS 2017
author: Geoffrey E. Hinton
url: https://arxiv.org/abs/1710.09829

符号说明

  • capsule节点 \(j\) 的输入向量 \(s_j\), 输出向量 \(v_j\).

    \[v_j = {\rm squash}(s_j) := \frac{\|s_j\|^2}{1+\|s_j\|^2} \frac{s_j}{\|s_j\|} \]

    这里希望 \(\|v_j\|\)表示capsule节点\(j\)表示的实体存在的概率值。

    容易推导 \(\|v_j\| \leq 0.5 \|s_j\|\), 因此 squash是压缩算子, 且 \(\|v_j\| < 1\).

  • 除网络第一层外, \(s_j\) 的计算公式,如下:

    \[s_j = \sum_i c_{ij} \hat u_{j|i}, \quad \hat u_{j|i} = W_{ij} u_i \]

    这里 \(C\)是coupling系数矩阵,是参数。 \(W_{ij}\) 是权重矩阵。\(\hat u_{j|i}\) 是capsule节点 \(i\)\(j\)的预测。

  • coupling系数的计算公式,如下:

    \[c_{ij} ={\rm softmax}(b_{i}) = \frac{\exp(b_{ij})} { \sum_k \exp(b_{ik})} \]

    这里\(b_{ij}\)也是参数, \(b_{i}\)是B矩阵的i行, logits \(b_{ij}\) 理解为capsule节点\(i\)关联\(j\)的一个先验概率。

  • 参数更新, 目标是希望 capsule节点 \(j\)的输出\(v_j\) 与 capsule节点 \(i\)\(j\)的预测 \(\hat u_{j|i}\) 有一致性。做法是

    \[b_{ij} \leftarrow b_{ij} + v_j^T \hat u_{j|i} \]

  • 根据上面的公式, 得到Routing algorithm 算法,处理了参数\(C,B\)。 剩下 \(W\),以及后面卷积核参数,通过定义损失函数,在tensorflow更新(BP优化)

  • Routing 算法 类似聚类算法的迭代过程.

  • 这里squash 算子的作用有待讨论

参考

posted @ 2021-03-22 16:19  bregman  阅读(70)  评论(0)    收藏  举报