Implicit Neural Representations with Periodic Activation Functions
概
本文提出用\(\sin\)作为激活函数, 并分析该类型的网络应该如何初始化.
主要内容
本文研究如下的网络结构:
\]
即一个用sin作为激活函数的MLP.
为了说明使用sin作为激活函数的好处, 作者首先利用一个简单的例子作为说明, 设想如下的任务:
- \(\Phi\) 以位置坐标\((i, j)\)为输入, 输出\(\Phi(i, j) \in \mathbb{R}^3\)表示该像素点图片的r, g, b;
- \(\Phi\)以一个图片作为训练集, 假设该图片为\(f(i, j) \in \mathbb{R}^3, i = 1,2,\cdots, j = 1,2,\cdots, W\), 则训练集为\(\{(i, j, f(i, j))\}\), 共\(HW\)个坐标点及其对应的目标;
- 通过平方损失\(\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).
初始化策略
作者希望每一层(除了第一层)的输入输出的分布是一致的, 这能够让堆叠网络层数变得容易, 加快收敛.
其策略是:
\]
其中\(n\)是输入\(x \in \mathbb{R}^n\)的维度.
但是, 因为\(\sin (wx+b)\)中的\(w\)可以看成是采样频率, 为了保证第一层的采样频率足够高(采样定理), 作者乘上了一个额外的系数:
\]
文中说\(w_0=30\)是一个不错的选择.
同时作者还发现, 该技巧应用于别的层一样有效, 所以干脆所有层都长上面那个样, 同时
\]
作者认为这么做有效是因为关于\(W\)的梯度也乘上了一个因子\(w_0\), 但同时分布不变.
其它的好处
SIREN对于包含梯度问题的处理尤为出色, 这或许应该归功于其导数依然是一个SIREN网络, 而如ReLU的一阶导为常数, 二阶导为0自然无法胜任.
类似的结构, 但是这一次, 假设只知道图片的\(\nabla f(i, j)\)或者\(\Delta f(i, j)\),由此通过
\]
或者
\]
来拟合, 则\(\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的更多相关文章
- [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 ________ ...
- Activation Functions
Sigmoid Sigmoids saturate and kill gradients. Sigmoid outputs are not zero-centered. Exponential fun ...
- 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
- Activation functions on the Keras
sigmoid tanh tanh函数定义如下: 激活函数形状: ReLU 大家族 ReLU softmax 函数 softmax是一个函数,其主要用于输出节点的分类,它有一个特点,所以的值相加会等于 ...
- 《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 ...
- Glossary Collection
目录 直接修饰用 间接强调用 (多为副词) 过渡用 特别的名词 动词 词组 各种介词 句子 摘要 引言 总结 正文 实验 直接修饰用 Word 含义 例句 近义词 nuanced adj. 微妙的:具 ...
- 深度学习材料:从感知机到深度网络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 ...
- TensorFlow 常用函数汇总
本文介绍了tensorflow的常用函数,源自网上整理. TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CPU ...
- TensorFlow 常用函数与方法
摘要:本文主要对tf的一些常用概念与方法进行描述. tf函数 TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CP ...
随机推荐
- 日常Java 2021/10/29
Java Object类是所有类的父类,也就是说Java的所有类都继承了Object,子类可以使用Object的所有方法. Object类位于java.lang 包中,编译时会自动导入,我们创建一个类 ...
- Leetcode中的SQL题目练习(二)
175. Combine Two Tables https://leetcode.com/problems/combine-two-tables/description/ Description Pe ...
- Flume(一)【概述】
目录 一.Flume定义 二.Flume基础架构 1.Agent 2.Source 3.Sink 4.Channel 5.Event 一.Flume定义 Flume是Cloudera公司提供的一个 ...
- 【Linux】【Commands】文件管理工具
文件管理工具:cp, mv, rm cp命令:copy 源文件:目标文件 单源复制:cp [OPTION]... [-T] SOURCE DEST 多源复制:cp [OPTION]... SOURCE ...
- Linux:sqlplus
[oracle@hb shell_test]$ cat echo_time #!/bin/sh 一.最简单的调用sqlplus sqlplus -S "sys/unimas as sysdb ...
- B树和B+树原理图文解析
B树与B+树不同的地方在于插入是从底向上进行(当然查找与二叉树相同,都是从上往下) 二者都通常用于数据库和操作系统的文件系统中,非关系型数据库索引如mongoDB用的B树,大部分关系型数据库索引使用的 ...
- centos添加本地yum源
一.简介 centos6系列于2020年11月份已经停止提供服务,现在各大镜像源已经关闭centos6的yum源,需要下载镜像后在本地搭建yum源方便使用. 最好将镜像下载后传到OSS中,这样从阿里云 ...
- [BUUCTF]PWN——[V&N2020 公开赛]warmup
[V&N2020 公开赛]warmup 附件 步骤: 例行检查,64位程序,除了canary,其他保护都开 本地运行一下,看看大概的情况 64位ida载入,从main函数开始看程序 看到程序将 ...
- [BUUCTF]PWN——bjdctf_2020_babystack2
bjdctf_2020_babystack2 附件 步骤: 例行检查,64位程序,开启了nx保护 尝试运行一下程序,看看情况 64位ida载入,习惯性的先检索程序里的字符串,发现了bin/sh,双击跟 ...
- Docker从入门到精通(七)——容器数据共享
什么是容器数据共享?简单来说就是容器与容器之间数据共享,容器与宿主机数据共享. 1.为什么需要数据共享? ①.数据持久化 比如我们有一个MySQL集群,通过容器启动,那么项目运行过程中的数据是保存在容 ...