Fashion-MNIST

贝叶斯神经网络对梯度攻击的鲁棒性

五迷三道 提交于 2020-10-15 05:07:21
©PaperWeekly 原创 · 作者|尹娟 学校|北京理工大学博士生 研究方向|随机过程、复杂网络单位 引言 贝叶斯神经网络(BNN)在最近几年得到了一定的重视,因为其具有一定的推断能力。BNN 不同于一般的 DNN,其权重参数是随机变量,而非确定的值,它是通过概率建模和神经网络结合起来,并能够给出预测结果的置信度。 其先验用来描述关键参数,并作为神经网络的输入。神经网络的输出用来描述特定的概率分布的似然。通过采样或者变分推断来计算后验分布。这对于很多问题来说非常关键,由于 BNN 具有不确定性量化能力,所以具有非常强的鲁棒性。 本文分析了贝叶斯神经网络对对抗攻击具有一定的鲁棒性并且分析了在大数据量、过参数极限下的对抗攻击的几何结构。 并且作者证明了,在一定范围内,由于数据分布中的简并性(高维数据可以映射到低维流形上),当数据位于环境空间的低维子流形上时,基于梯度的攻击的脆弱性就会出现,并且本论文提供了相关的代码,最后一部分会介绍相关的代码。 论文标题: Robustness of Bayesian Neural Networks to Gradient-Based Attacks 论文链接: https://arxiv.org/abs/2002.04359 论文的贡献 本文的贡献可以归结如下三点: 作者提出了在大数据限制下 BNNs 对抗鲁棒性分析的理论框架

Mxnet (6):过拟合和欠拟合

强颜欢笑 提交于 2020-10-01 16:05:33
1.过拟合 究其根本我们训练模型,目的是预测也好,分类也好,希望的是无论输入的数据是否训练过,都要维持在高的准确率,就是说普适性。打个比方,我们学习数学的过程,这个过程其实就很像在训练我们大脑中的模型,我们做的练习题就时训练过程,参加考试就是测试模型,对于一个考试,A同学逻辑思维很好,通过平日的练习训练出了解题的逻辑,在考试中拿到了高分;B同学记忆力特别好,做过的每一道题都能记住,恰好这次考试考的题目他都做过,分数比A还高;又一次考试,A还是那些分,但是这次考的题目B都没做过,拿了低分。B同学的训练的模型只适用于他做过的题,而A同学的模型使用于所有题;那么B同学就属于过拟合了。 使训练数据拟合得比拟合基础分布更紧密的现象称为 过拟合 ,而用来对抗过度拟合的技术称为正则化。在前面的部分中,您在尝试使用Fashion-MNIST数据集时可能已经观察到这种效果。如果您在实验期间更改了模型结构或超参数,您可能已经注意到,如果神经元,层数和训练时期足够,即使测试数据的准确性下降,模型最终仍可以在训练集上达到理想的准确性。 同样我们平时思考,处理问题的时候也要知其然知其所以然,不要死记硬背、人云亦云,不然的话大脑也会过拟合,降低判断的准确性 2.训练误差和泛化误差 为了更清晰的理解上面的问题,我们需要区分训练误差(training error)和泛化误差(generalization

Mxnet (3): Softmax 回归(Softmax regression)

强颜欢笑 提交于 2020-10-01 03:31:42
有一种logistic回归的一般形式,叫做Softmax回归,用于处理多类型的分类问题。 0.Softmax操作 我们将在此处采用的主要方法是将模型的输出解释为概率。我们将优化参数以产生使观察到的数据的可能性最大化的概率。然后,为了生成预测,我们将设置一个阈值,例如,选择具有最大预测概率的标签。 正式地说,我们想要任何输出 y ^ j \hat{y}_j y ^ ​ j ​ 被解释为给定项目属于类别的概率 j 。然后我们可以选择具有最大输出值的类别作为我们的预测 argmax ⁡ j y j \operatorname{argmax}_j y_j a r g m a x j ​ y j ​ . 。例如,如果 y ^ 1 \hat{y}_1 y ^ ​ 1 ​ , y ^ 2 \hat{y}_2 y ^ ​ 2 ​ , 和 y ^ 3 \hat{y}_3 y ^ ​ 3 ​ 分别为0.1、0.8和0.1。然后预测是第二类。 您可能会倾向于建议我们解释日志 o 直接作为我们感兴趣的输出。然而,将线性层的输出直接解释为概率存在一些问题。一方面,没有什么约束这些数字的总和为1。另一方面,取决于输入,它们可以取负值。 为了将我们的输出解释为概率,我们必须保证(即使在新数据上)它们也将是非负的并且总和为1。此外,我们需要一个训练目标来鼓励模型忠实地估计概率。在分类器输出0.5的所有实例中

谷歌用算力爆了一篇论文,解答有关无限宽度网络的一切

北战南征 提交于 2020-09-30 16:07:04
无限宽度神经网络 是近来一个重要的研究课题,但要通过实证实验来探索它们的性质,必需大规模的计算能力才行。近日,谷歌大脑公布的一篇论文介绍了他们在有限和无限神经网络方面的系统性探索成果。该研究通过大规模对比实验得到了 12 条重要的实验结论并在此过程中找到了一些新的改进方法。该文作者之一 Jascha Sohl-Dickstein 表示:「 这篇论文包含你想知道的但没有足够的计算能力探求的有关无限宽度网络的一切! 」 > > > > 近日,谷歌大脑的研究者通过大规模实证研究探讨了 宽神经网络与核(kernel)方法之间的对应关系 。在此过程中,研究者解决了一系列与无限宽度神经网络研究相关的问题,并总结得到了 12 项实验结果。 此外,实验还额外为权重衰减找到了一种改进版逐层扩展方法,可以提升有限宽度网络的泛化能力。 最后,他们还为使用 NNGP(神经网络高斯过程)和 NT(神经正切)核的预测任务找到了一种改进版的最佳实践,其中包括一种全新的集成(ensembling)技术。这些最佳实践技术让实验中每种架构对应的核在 CIFAR-10 分类任务上均取得了当前最佳的成绩。 论文链接:https://arxiv.org/pdf/2007.15801v1.pdf 当使用贝叶斯方法和梯度下降方法训练的神经网络的中间层是无限宽时,这些网络可以收敛至高斯过程或紧密相关的核方法

Mxnet (15): 网络中的网络(NiN)

梦想的初衷 提交于 2020-09-30 06:43:51
1. 网络中的网络(NiN) LeNet、AlexNet和VGG在设计上的共同之处是就是都是先通过卷积提取特征,然后通过全链接层进行分类。NiN使用了另外一种思路,将简单的卷积和全链接结构协程Block,然后将这些block串联形成网络。 1.1 NiN块 卷积层的输入和输出通常是四维数组(样本,通道,高,宽),而全连接层的输入和输出则通常是二维数组(样本,特征)。如果想在全连接层后再接上卷积层,则需要将全连接层的输出变换为四维。这里通过 1 × 1 1×1 1 × 1 卷积层作为全链接层,每一个 1 × 1 1×1 1 × 1 相当于一个样本,用到相当于特征。 下图通过VGG和NiN的比较展示其结构。 NiN块包含一个卷积层,然后是两个卷积层 1 × 1 1×1 1 × 1 卷积层充当具有ReLU激活的按像素的全连接层。第一层的卷积窗口形状通常由用户设置。随后的窗口形状固定为 1 × 1 1×1 1 × 1 。 from d2l import mxnet as d2l from mxnet import np , npx , init , gluon , autograd from mxnet . gluon import nn import plotly . graph_objs as go npx . set_np ( ) ctx = npx . gpu ( ) if npx

谷歌用算力爆了一篇论文,解答有关无限宽度网络的一切

谁说我不能喝 提交于 2020-08-19 13:30:50
  选自arXiv    作者:Jaehoon Lee等    编辑:Panda    无限宽度神经网络是近来一个重要的研究课题,但要通过实证实验来探索它们的性质,必需大规模的计算能力才行。近日,谷歌大脑公布的一篇论文介绍了他们在有限和无限神经网络方面的系统性探索成果。该研究通过大规模对比实验得到了 12 条重要的实验结论并在此过程中找到了一些新的改进方法。该文作者之一 Jascha Sohl-Dickstein 表示:「这篇论文包含你想知道的但没有足够的计算能力探求的有关无限宽度网络的一切!」      近日,谷歌大脑的研究者通过大规模实证研究探讨了 宽神经网络与核(kernel)方法之间的对应关系 。在此过程中,研究者解决了一系列与无限宽度神经网络研究相关的问题,并总结得到了 12 项实验结果。   此外,实验还额外为权重衰减找到了一种改进版逐层扩展方法,可以提升有限宽度网络的泛化能力。   最后,他们还为使用 NNGP(神经网络高斯过程)和 NT(神经正切)核的预测任务找到了一种改进版的最佳实践,其中包括一种全新的集成(ensembling)技术。这些最佳实践技术让实验中每种架构对应的核在 CIFAR-10 分类任务上均取得了当前最佳的成绩。      论文链接:https://arxiv.org/pdf/2007.15801v1.pdf  

pytorch学习笔记(十三):Dropout

混江龙づ霸主 提交于 2020-08-17 07:59:05
文章目录 1. 方法 2. 从零开始实现 2.1 定义模型参数 2.2 定义模型 2.3 训练和测试模型 3. 简洁实现 小结 除了前一节介绍的权重衰减以外,深度学习模型常常使用丢弃法(dropout)来应对过拟合问题。 1. 方法 这里有一个单隐藏层的多层感知机。其中输入个数为4,隐藏单元个数为5,且隐藏单元 h i h_i h i ​ ( i = 1 , … , 5 i=1, \ldots, 5 i = 1 , … , 5 )的计算表达式为 h i = ϕ ( x 1 w 1 i + x 2 w 2 i + x 3 w 3 i + x 4 w 4 i + b i ) h_i = \phi\left(x_1 w_{1i} + x_2 w_{2i} + x_3 w_{3i} + x_4 w_{4i} + b_i\right) h i ​ = ϕ ( x 1 ​ w 1 i ​ + x 2 ​ w 2 i ​ + x 3 ​ w 3 i ​ + x 4 ​ w 4 i ​ + b i ​ ) 这里 ϕ \phi ϕ 是激活函数, x 1 , … , x 4 x_1, \ldots, x_4 x 1 ​ , … , x 4 ​ 是输入,隐藏单元 i i i 的权重参数为 w 1 i , … , w 4 i w_{1i}, \ldots, w_{4i} w 1 i ​ , … , w 4

pytorch学习笔记(三十八):Image-Augmentation

£可爱£侵袭症+ 提交于 2020-08-14 16:07:48
文章目录 图像增广 1. 常用的图像增广方法 1.1 翻转和裁剪 1.2 变化颜色 1.3 叠加多个图像增广方法 2. 使用图像增广训练模型 2.1 使用图像增广训练模型 小结 图像增广 图像增广(image augmentation) 技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。例如,我们可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度、色彩等因素来降低模型对色彩的敏感度。可以说,在当年AlexNet的成功中,图像增广技术功不可没。本节我们将讨论这个在计算机视觉里被广泛使用的技术。 首先,导入实验所需的包或模块。 % matplotlib inline import time import torch from torch import nn , optim from torch . utils . data import Dataset , DataLoader import torchvision from PIL import Image import sys sys . path . append ( ".." ) import d2lzh_pytorch as

中奖彩票,子网络的觉悟

吃可爱长大的小学妹 提交于 2020-05-07 08:49:21
本篇对彩票假说的发展及其扩展应用做了分析研究。 机器之心分析师网络,作者:张雨嘉,编辑:H4O。 如今,深度学习在机器学习中占有非常重要的地位。但随着对深度学习的要求越来越多,需要的网络层数越来越深,参数越来越多,消耗的计算资源也随之扩张,而这很大程度上阻碍了其产业化应用和推广。 从上世纪 90 年代开始,Yan Lecun 等人【1】首先提出了 神经网络剪枝 的思想,即将网络中某些对输出结果贡献不大的参数进行剪除。这种方法可以大大提高模型运行速度,但同时会对模型准确度有一定影响。经过近 30 年的研究,现在的神经网络剪枝技术可以减少训练网络时 90% 以上的参数,以减少存储需求,提高模型的推理计算性能。通常的网络剪枝步骤如下图 1 所示,首先训练一个大的、过参数化的模型,然后根据一定的准则对训练过的模型参数进行修剪,最后将修剪过的模型微调以获得失去的精度。 图 1 经典网络剪枝步骤 然而,既然一个网络可以缩小规模,为什么我们不直接训练这个较小的体系结构,使训练更有效率呢?但是人们通过长期实验发现,网络越稀疏,训练越难、学习速度越慢,所以剪枝产生的稀疏体系结构网络很难从一开始就进行训练。 1. 提出「彩票假说」 随着网络剪枝研究的深入,Jonathan Frankle 等人【2】发表了一篇名为《The Lottery Ticket Hypothesis :Finding

深度学习常用数据集 API(包括 Fashion MNIST)

别来无恙 提交于 2020-04-27 22:37:07
基准数据集 深度学习中经常会使用一些基准数据集进行一些测试。其中 MNIST, Cifar 10, cifar100, Fashion-MNIST 数据集常常被人们拿来当作练手的数据集。为了方便,诸如 Keras 、 MXNet 、 Tensorflow 都封装了自己的基础数据集,如 MNIST 、 cifar 等。如果我们要在不同平台使用这些数据集,还需要了解那些框架是如何组织这些数据集的,需要花费一些不必要的时间学习它们的 API。为此,我们为何不创建属于自己的数据集呢?下面我仅仅使用了 Numpy 来实现数据集 MNIST 、 Fashion MNIST 、 Cifa 10 、 Cifar 100 的操作,并封装为 HDF5,这样该数据集的可扩展性就会大大的增强,并且还可以被其他的编程语言 (如 Matlab) 来获取和使用。下面主要介绍如何通过创建的 API 来实现数据集的封装。 环境搭建 我使用了 Anaconda3 这个十分好用的包管理工具, 来减少管理和安装一些必须的包。下面我们载入该 API 必备的包: import struct # 处理二进制文件 import numpy as np # 对矩阵运算很友好 import gzip, tarfile # 对压缩文件进行处理 import os # 管理本地文件 import pickle # 序列化和反序列化