Sitzmann V., Martel J. N. P., Bergman A. W., Lindell D. B., Wetzstein G. Implicit neural representations with periodic activation functions. Advances in Neural Information Processing Systems (NIPS), 2020.

本文提出用\(\sin\)作为激活函数, 并分析该类型的网络应该如何初始化.

主要内容

本文研究如下的网络结构:

\[\Phi(x) = W_n (\phi_{n-1} \circ \phi_{n-2}\circ \cdots \circ \phi_0)(x), x_i \rightarrow \phi_i(x_i) = \sin (W_i x_i + b_i).
\]

即一个用sin作为激活函数的MLP.

为了说明使用sin作为激活函数的好处, 作者首先利用一个简单的例子作为说明, 设想如下的任务:

  1. \(\Phi\) 以位置坐标\((i, j)\)为输入, 输出\(\Phi(i, j) \in \mathbb{R}^3\)表示该像素点图片的r, g, b;
  2. \(\Phi\)以一个图片作为训练集, 假设该图片为\(f(i, j) \in \mathbb{R}^3, i = 1,2,\cdots, j = 1,2,\cdots, W\), 则训练集为\(\{(i, j, f(i, j))\}\), 共\(HW\)个坐标点及其对应的目标;
  3. 通过平方损失\(\tilde{\mathcal{L}} = \sum_i \sum_j \|\Phi(i, j) - f(i, j)\|^2\)训练网络.

上图给了一个例子(既然是灰度图, 我想这时\(\Phi(i, j) \in \mathbb{R}\)), 展示了用不同激活函数得到的\(\Phi(i, j)\)的图, 显然图和原图越接近, 说明拟合能力越强.

特别的, 作者还展示了\(\nabla f(x)\)和\(\Delta f(x)\) (分别用sobel算子和laplacian算子得到的) 和各自网络关于\((i, j)\)的梯度和二阶梯度的比较. 发现只有SIREN是高度一致的(一个很重要的原因是ReLU等分段连续函数二阶导为0).

初始化策略

作者希望每一层(除了第一层)的输入输出的分布是一致的, 这能够让堆叠网络层数变得容易, 加快收敛.

其策略是:

\[w_i \sim \mathcal{U}(-\sqrt{6 / n}, \sqrt{6 / n}),
\]

其中\(n\)是输入\(x \in \mathbb{R}^n\)的维度.

但是, 因为\(\sin (wx+b)\)中的\(w\)可以看成是采样频率, 为了保证第一层的采样频率足够高(采样定理), 作者乘上了一个额外的系数:

\[\sin (w_0 \cdot W x + b),
\]

文中说\(w_0=30\)是一个不错的选择.

同时作者还发现, 该技巧应用于别的层一样有效, 所以干脆所有层都长上面那个样, 同时

\[w_i \sim \mathcal{U}(-\sqrt{6 / w_0^2n}, \sqrt{6 / w_0^2n}).
\]

作者认为这么做有效是因为关于\(W\)的梯度也乘上了一个因子\(w_0\), 但同时分布不变.

其它的好处

SIREN对于包含梯度问题的处理尤为出色, 这或许应该归功于其导数依然是一个SIREN网络, 而如ReLU的一阶导为常数, 二阶导为0自然无法胜任.

类似的结构, 但是这一次, 假设只知道图片的\(\nabla f(i, j)\)或者\(\Delta f(i, j)\),由此通过

\[\|\nabla \Phi(i, j) - \nabla f(i, j)\|^2,
\]

或者

\[\|\Delta \Phi(i, j) - \Delta f(i, j)\|^2,
\]

来拟合, 则\(\Phi(i, j)\)依然输出和\(f(i, j)\)相近的结果(如上图左所示).

上图右则是逼近\(\alpha \nabla f_1 (i, j) + ( 1- \alpha) f_2 (i, j)\)

对两张图片进行混合, 得到的\(\Phi(i, j)\)恰为两张图片的融合.

SIREN的强大之处可见一斑.

Implicit Neural Representations with Periodic Activation Functions的更多相关文章

  1. [CS231n-CNN] Training Neural Networks Part 1 : activation functions, weight initialization, gradient flow, batch normalization | babysitting the learning process, hyperparameter optimization

    课程主页:http://cs231n.stanford.edu/   Introduction to neural networks -Training Neural Network ________ ...

  2. Activation Functions

    Sigmoid Sigmoids saturate and kill gradients. Sigmoid outputs are not zero-centered. Exponential fun ...

  3. Activation Functions and Their Derivatives

    1. Sigmoid Function: when z=0,g'(z)=0.25 2. tanh Function: when x=0,tanh'(x)=1 3. Relu

  4. Activation functions on the Keras

    sigmoid tanh tanh函数定义如下: 激活函数形状: ReLU 大家族 ReLU softmax 函数 softmax是一个函数,其主要用于输出节点的分类,它有一个特点,所以的值相加会等于 ...

  5. 《MATLAB Deep Learning:With Machine Learning,Neural Networks and Artificial Intelligence》选记

    一.Training of a Single-Layer Neural Network 1 Delta Rule Consider a single-layer neural network, as ...

  6. Glossary Collection

    目录 直接修饰用 间接强调用 (多为副词) 过渡用 特别的名词 动词 词组 各种介词 句子 摘要 引言 总结 正文 实验 直接修饰用 Word 含义 例句 近义词 nuanced adj. 微妙的:具 ...

  7. 深度学习材料:从感知机到深度网络A Deep Learning Tutorial: From Perceptrons to Deep Networks

    In recent years, there’s been a resurgence in the field of Artificial Intelligence. It’s spread beyo ...

  8. TensorFlow 常用函数汇总

    本文介绍了tensorflow的常用函数,源自网上整理. TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CPU ...

  9. TensorFlow 常用函数与方法

    摘要:本文主要对tf的一些常用概念与方法进行描述. tf函数 TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CP ...

随机推荐

  1. 生产调优2 HDFS-集群压测

    目录 2 HDFS-集群压测 2.1 测试HDFS写性能 测试1 限制网络 1 向HDFS集群写10个128M的文件 测试结果分析 测试2 不限制网络 1 向HDFS集群写10个128M的文件 2 测 ...

  2. 日常Java 2021/10/4

    读取控制台输入 将System.in包装在BufferedReader对象中来创建一个字符流 BufferedReader b = new BufferedReader(new InputStream ...

  3. Elasticsearch【基础入门】

    目录 一.操作index 1.查看index 2.增加index 3.删除index 二.操作index 1.新增document 2.查询type 全部数据 3.查找指定 id 的 document ...

  4. 如何通过 User-Agent 识别百度蜘蛛

    如果有大量的百度蜘蛛抓取网站就需要注意了:有可能是其他爬虫伪造百度蜘蛛恶意抓取网站. 如果遇到这种情况,这时候就需要查看日志来确定是不是真正的百度蜘蛛(baidu spider).搜索引擎蜘蛛.用户访 ...

  5. springboot-使用AOP日志拦截实现

    一 前言 借助spring的AOP功能,我们可以将AOP应用至全局异常处理,全局请求拦截等,本篇文章的核心功能就是使用AOP实现日志记录,比如哪些用户进行了哪些操作,对于一个成功的项目这是必须记录的, ...

  6. 【Python】【Basic】【数据类型】基本数据类型

    1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值范围为-2 ...

  7. 关于requests.exceptions.ConnectionError: HTTPSConnectionPool的问题

    错误如下: raise ConnectionError(e, request=request)requests.exceptions.ConnectionError: HTTPSConnectionP ...

  8. Mysql配置 主从同步

    目录 一.准备 二.操作 主数据库操作 从服务器操作 一.准备 1.主从数据库版本最好一致 2.主从数据库内数据保持一致,若不一致,可将从库中所有数据删除,并将主库全部数据导入进去 主数据库:182. ...

  9. how2heap libc2.31学习

    今天是四月十九,想在五月份之前把how2heap中的高版本(2.31)的例子过一遍.所以这个系列目前还是在更新中.如果比较简单就几句话带过了,遇到难一点的会写的详细一点. fastbin_dup 源代 ...

  10. bjdctf_2020_babystack2

    此题考整型的有符号无符号的东西... 下载文件还是,先检查一下保护. 64位程序,只开启了堆栈不可执行,看一下ida的伪代码. 大概流程就是先让你输入一个数,这个数就是后面read的可以输入的长度,要 ...