反向传播

如何提高强化学习效果?内在奖励和辅助任务

随声附和 提交于 2020-09-27 16:53:24
     文字整理:智源社区 吴继芳   如何能够提高强化学习效果?   这是美国密西根大学教授Satinder Singh长期以来致力于解决的问题。在2020北京智源大会上,Satinder Singh教授对这个问题进行了深度阐释,他通过Meta-Gradient方法来学习发现以往强化学习智能体中需要手动设置的参数:内在奖励和辅助任务问题。   Satinder Singh从近期关于强化学习的两个研究工作出发,针对如何通过数据驱动的方式学习到内在奖励函数,他提出了一个学习跨多生命周期(Lifetime)内部奖励函数的Meta-Gradient框架,同时设计了相关实验证明学习到的内在奖励函数能够捕获有用的规律,这些规律有助于强化学习过程中的Exploration和Exploitation,并且可以迁移到到不同的学习智能体和环境中。   针对于如何在数据中发现问题作为辅助任务,他扩展通用辅助任务架构,参数化表示General Value Functions,并通过Meta-Gradient方法学习更新参数发现问题。实验证明这个方法可以快速发现问题来提高强化学习效果。   Satinder Singh,美国密西根大学教授,Deep Mind科学家,AAAI Fellow。主要研究兴趣是人工智能(AI)的传统目标,即构建能够学习在复杂、动态和不确定环境中具有广泛能力的自主智能体

神经网络浅讲:从神经元到深度学习

纵然是瞬间 提交于 2020-08-20 07:10:45
  神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向 -- 深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术。   本文以一种简单的,循序的方式讲解神经网络。适合对神经网络了解不多的同学。本文对阅读没有一定的前提要求,但是懂一些 机器学习 基础会更好地帮助理解本文。   神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有 1000 亿个神经元之多。 图1 人脑神经网络   那么机器学习中的神经网络是如何实现这种模拟的,并且达到一个惊人的良好效果的?通过本文,你可以了解到这些问题的答案,同时还能知道神经网络的历史,以及如何较好地学习它。   由于本文较长,为方便读者,以下是本文的目录:   一. 前言   二. 神经元   三. 单层神经网络(感知器)   四. 两层神经网络(多层感知器)   五. 多层神经网络(深度学习)   六. 回顾   七. 展望   八. 总结   九. 后记   十. 备注 一. 前言   让我们来看一个经典的神经网络。这是一个包含三个层次的神经网络。红色的是 输入层 ,绿色的是 输出层 ,紫色的是 中间层 (也叫 隐藏层 )。输入层有 3 个输入 单元,隐藏层有 4 个 单元,输出层有 2 个 单元。后文中

自己动手实现深度学习框架-6 卷积层和池化层

喜你入骨 提交于 2020-08-18 08:17:09
代码仓库: https://github.com/brandonlyg/cute-dl (转载请注明出处!) 目标 上个阶段使用MLP模型在在MNIST数据集上实现了92%左右的准确率,达到了tensorflow同等模型的水平。这个阶段要让cute-dl框架支持最简单的卷积神经网络, 并在MNIST和CIFA10数据上验证,具体来说要达到如下目标: 添加2D卷积层。 添加2D最大池化层。 CNN模型在MNIST数据集上达到99%以上的准确率。 CNN模型在CIFA10数据集上达到70%以上在准确率。 卷积层的设计和实现 卷积运算 卷积运算有两个关键要素: 卷积核(过滤器), 卷积运算步长。如果卷积运算的目标是二维的那么卷积核可以用矩阵表示,卷积运算步长可以用二维向量。例如用kernel_size=(3,3)表示卷积核的尺寸,strides=(1,1)表示卷积运算的步长, 假如卷积核是这样的: 可以把它看成 \(R^{3 X 3}\) 矩阵。在步长strides=(1,1)的情况下卷积运算如下所示: 其中 \[\begin{matrix} 128*0 + 97*1 + 53*0 + 35*1 + 22*0 + 25*1 + 37*0 + 24*1 + 28 * 0 = 181 \\ 97*0 + 53*1 + 201*0 + 22*1 + 25*0 + 200*1 + 24*0 +

【技术博客】GPU 编程之从零开始实现 MNIST-CNN

吃可爱长大的小学妹 提交于 2020-08-18 03:36:22
【技术博客】GPU 编程之从零开始实现 MNIST-CNN 很多人最开始接触“ GPU ”想必都是通过游戏,一块高性能的 GPU 能带来非凡的游戏体验。而真正使GPU被越来越多人熟知是因为机器学习、深度学习的大热(也有人用于比特币挖矿),因为庞大的数据与计算量需要更快的处理速度,GPU 编程也因此越来越普遍。 从事深度学习的工作者常常自嘲自己为“炼丹师”,因为日常工作是:搭网络,调参,调参,调参......作为刚入门深度学习的小白更是如此,虽然不停的复现着一个又一个的网络,但总有些迷茫。我想这个迷茫来源于深度学习的“黑盒”性质,而我们所做的工作绝大部分时间又仅是调参,对网络内部的计算实际是模糊的。因此,本文试着结合 GPU 编程从零开始写一个简单的 CNN 网络,从内部深入理解网络的运行,希望能够一定程度上消除这种迷茫,也通过这一个简单的应用来了解 GPU 编程。 因此本文主要分为两个部分: GPU 编程的介绍与入门。 使用 GPU 编程从零开始搭建 MNIST-CNN。 1 GPU 编程的介绍与入门 1.1 介绍 图 1 为 CPU 与 GPU 的物理结构对比(图片源自网络)。图中的有色方块代表了处理核心,虽然 CPU 的核心比较少(如图中只有8块),但每一个算能力都非常强;而 GPU 的核心非常多,但每一个的能力有限。核心数量决定着处理计算过程的线程数量,因此对于计算问题来说

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

残差网络ResNet笔记

夙愿已清 提交于 2020-08-16 00:22:09
发现博客园也可以支持Markdown,就把我之前写的博客搬过来了~ 欢迎转载,请注明出处: http://www.cnblogs.com/alanma/p/6877166.html 下面是正文: Deep Residual Learning for Image Recognition 1. 思想 作者根据输入将层表示为学习 残差函数 。实验表明,残差网络更容易优化,并且能够通过增加相当的深度来提高准确率。 核心是解决了增加深度带来的副作用(退化问题),这样能够通过单纯地增加网络深度,来提高网络性能。 作者在ImageNet上实验了一个152层的残差网络,比VGG深8倍,取得了3.57%的错误率。 作者通过一系列实验证明了表示的深度(即网络的深度)对很多视觉识别任务都至关重要。仅仅由于使用了非常深的网络,作者就在COCO目标检测数据集上获得了 28% 的相对提升。 2. 笔记 网络的深度为什么重要? 因为CNN能够提取low/mid/high-level的特征,网络的层数越多,意味着能够提取到不同level的特征越丰富。并且,越深的网络提取的特征越抽象,越具有语义信息。 为什么不能简单地增加网络层数? 对于原来的网络,如果简单地增加深度,会导致梯度弥散或梯度爆炸。 对于该问题的解决方法是 正则化初始化 和 中间的正则化层(Batch Normalization)

图文并茂,700 页的机器学习笔记火了!值得学习

Deadly 提交于 2020-08-15 23:30:45
最近在学习机器学习,看到了这份笔记,介绍的非常详细,记录一下作为学习。 作者 梁劲(Jim Liang) ,来自 SAP (全球第一大商业软件公司)。 书籍特点 条理清晰,含图像化表示更加易懂,对公式有详细的注解等。 内容概要 主要分为基本概念、常用算法和其他三部分。 为什么会这样? 首当其冲就是数学,涉及统计学、微积分、概率、线性代数等,大家虽然都学过高等数学,但如果你还记得里面的细节,算你牛。更可能的情况是,多数人都对高等数学忘记了,面对各种算法里的大量公式,感到厌恶,甚至恐惧。 其次因为机器学习本身是一个综合性学科,而且是一个快速发展的学科,知识点散乱,缺乏系统性。 市面上的机器学习/深度学习书籍、文章、教程,遍地开花,但能以清晰的方式表达、循序渐进地讲解的教程,其实不多,大量的教程没有考虑到学习者的基础,使得初学者感到挫败和困惑。 正是对机器学习的过程中的痛苦有切身体会,作者Jim Liang希望能做一份教程,以浅显易懂的方式去讲解它,降低大家的学习门槛。为此花费了数月时间,经常做到深夜,把自己的学习笔记整理成了这份教程。 Part 1 介绍了基本概念,包括: 机器学习的流程 数据处理 建模 评估指标(如 MSE、ROC 曲线) 模型部署 过度拟合 正则化等 在第一部分,作者先介绍了如今应用普遍的机器学习:从自动驾驶、语音助手到机器人。其中有些思想,也是众多读者们了解过的

tensorflow与深度学习之二

无人久伴 提交于 2020-08-15 15:38:25
tensorflow是什么 tensorflow计算模型-计算图 2.1计算图的概念 2.2计算图的使用 tensorflow数据模型-张量 3.1张量的概念 3.2张量的使用 tensorflow运行模型-会话 tensorflow实现神经网络 第一个CNN网络 6.1CNN算法原理 6.2CNN是干什么的 6.3tensorflow实现CNN 6.4CNN模型发展 第一个RNN网络 7.1RNN算法原理 7.2RNN是干什么的 7.3tensorflow实现RNN 7.4RNN模型发展及变体 3、优化器如何选择 目前TensorFlow支持11种不同的经典优化器(参考TensorFlow API tf.train文档) tf.train.Optimizer tf.train.GradientDescentOptimizer tf.train.AdadeltaOptimizer tf.train.AdagtadOptimizer tf.train.AdagradDAOptimizer tf.train.MomentumOptimizer tf.train.AdamOptimizer tf.train.FtrlOptimizer tf.train.ProximalGradientDescentOptimizer tf.train.ProximalAdagradOptimizer

机器学习基础---神经网络(调试优化)(随机初始化、梯度检测)

Deadly 提交于 2020-08-15 15:26:17
一:随机初始化 当我们使用梯度下降法或者其他高级优化算法时,我们需要对参数θ选取一些初始值。对于高级优化算法,会默认认为我们已经为变量θ设置了初始值: 同样,对于梯度下降法,我们也需要对θ进行初始化。之后我们可以一步一步通过梯度下降来最小化代价函数J,那么如何来对θ进行初始化值呢? (一)将θ全部设置为0---神经网络中不适用 尽管在逻辑回归中,可以这样使用。但是在实际神经网络训练中起不到作用。 如果我们初始化所有θ全为0(全部相等): 那么对于每个隐藏单元的输入基本都是一样的: 所以求得的偏导也是一致的, 当我们只是设置了一个步长,那么对于每次参数的更新以后。各个隐藏单元的权重还是一致的。 这就意味着这个神经网络计算不出很好的函数,当我们有很多的隐藏单元时,所有的隐藏单元都在计算相同的特征,都在以相同的函数作为输入。---高度冗余。所以无论后面有几个输出单元,最终只能得到一个特征,这种情况阻止了神经网络学习有趣的东西 (二)随机初始化---解决上面所有权重都相等的问题(对称问题) (三)代码实现 def rand_initiation(l_in,l_out): #对于相邻两层 w = np.zeros((l_out,l_in+ 1) ) #需要加上前面一层的偏执单元权重 eps_init = 0.12 #接近0,保持在- ε到ε之间 w = np.random.rand(l

图片风格迁移(Neural style)

ぐ巨炮叔叔 提交于 2020-08-15 08:09:54
图片风格迁移训练时使用预处理的模型,不进行模型的训练,将图片像素值设置为可训练参数,进行图片的训练。 结合一张图片的内容和另一张图片的风格,生成一张新图片 论文地址:https://arxiv.org/pdf/1508.06576.pdf 损失函数: 以下代码通过将图片x输入到预训练好的vgg19模型中,取模型features模块的0, 5, 10, 19, 28五层的输出值计算contentLoss与StyleLoss之和,对该loss进行反向传播,从而修改图片的像素值。 """ 图片风格迁移,使用预训练的vgg,不训练vgg模型,而是进行图片的训练,训练我们想要的风格图片 """ import torch from PIL import Image import argparse import torch.nn as nn import matplotlib.pyplot as plt import numpy as np import torchvision device = torch.device("cuda" if torch.cuda.is_available() else "cpu") def load_image(image_path, transform=None, max_size=None, shape=None): image = Image.open