反向传播

[NLP] Reformer: The Efficient Transformer

时光怂恿深爱的人放手 提交于 2020-07-27 03:40:10
1.现状 (1) 模型层数加深 (2) 模型参数量变大 (3) 难以训练 (4) 难以fine-tune 2. 单层参数量和占用内存分析 层 参数设置 参数量与占用内存 1 layer 0.5Billion 0.5Billion * 4Byte = 2GB embedding layer 64K tokens 1024 emb_size 8 batch_size 参数量 64K × 1K × 8 = 0.5B 内存 2GB 3. Transformer 模型内存占用的问题以及Reformer相应解决方案 Transformer 内存占用的问题 Reformer采用的方案 实现的效果 对模型的影响 memory(N layer) > N * memory(1 layer) → 需要为反向传播保留值 Reversible layers 保留N层activations → 保留1层 negligible feed-forward 层 d_ff >> d_model, 占据大量内存 split activation && process in chunks d_ff → 每个chunk中处理的维度 numerically identical Attention 运算: O(L^2):存储 && 计算开销都很大 Locality-Sensitive Hashing 局部敏感哈希,简称 LSH

偏差在神经网络中的作用

偶尔善良 提交于 2020-07-24 23:51:11
问题: I'm aware of the Gradient Descent and the Back-propagation Theorem. 我知道梯度下降和反向传播定理。 What I don't get is: When is using a bias important and how do you use it? 我没有得到的是:什么时候使用偏见很重要,你如何使用它? For example, when mapping the AND function, when I use 2 inputs and 1 output, it does not give the correct weights, however, when I use 3 inputs (1 of which is a bias), it gives the correct weights. 例如,当映射 AND 功能时,当我使用2个输入和1个输出时,它不会给出正确的权重,但是,当我使用3个输入(其中1个是偏置)时,它会给出正确的权重。 解决方案: 参考一: https://stackoom.com/question/APKU/偏差在神经网络中的作用 参考二: https://oldbug.net/q/APKU/Role-of-Bias-in-Neural-Networks 来源: oschina 链接:

大白话5分钟带你走进人工智能-第38节神经网络之TensorFlow利用梯度下降法求解最优解(6)

佐手、 提交于 2020-05-09 15:37:40
先看一个传统方法手动实现线性回归和MSE损失函数的方案: import tensorflow as tf import numpy as np from sklearn.datasets import fetch_california_housing from sklearn.preprocessing import StandardScaler #多元线性回归是一个凸函数 ,所以能找到全局最优解 #神经网络只有局部最优解 n_epochs = 1000#把样本集数据学习1000次 learning_rate = 0.01 #步长 学习率 不能太大 太大容易来回震荡 太小 耗时间,跳不出局部最优解 #可以写learn_rate动态变化,随着迭代次数越来越大 ,学习率越来越小 learning_rate/n_epoches housing = fetch_california_housing() m, n = housing.data.shape housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data] # 可以使用TensorFlow或者Numpy或者sklearn的StandardScaler去进行归一化 #归一化可以最快的找到最优解 #常用的归一化方式: # 最大最小值归一化 (x-min)/(max-min)

《Deep Convolutional Network Cascade for Facial Point Detection》复现

梦想的初衷 提交于 2020-05-08 16:22:51
1.引言 锵锵锵,好久不见,我又肥来了,前一段时间上网找资料的时候偶然发现一篇关于人脸关键点检测的文章,应该说这篇论文是关键点检测的看山鼻祖,论文主页:http://mmlab.ie.cuhk.edu.hk/archive/CNN_FacePoint.htm,一篇中文翻译的博客:基于DCNN的人脸特征点定位。我大概看了一遍发现这个论文的思路对我有很大的帮助,同时整体神经网络结构的搭建也不算太复杂,因此决定将论文复现一下看看效果,同时我对论文提出的网络也进行了一点细微的修改,但是中间有点事所以这个计划在进行了一半后就搁浅了,直到这几天才将后续的部分完成,让我们一起看一看实现的过程。 我的训练环境是使用Python3.6,Tensorflow—gpu,CUDA9.1,CUDNN7版本,每个网络进行1000epoch训练,最终训练效果如下图所示,红色点是网络预测的坐标点,蓝色点为数据集中给出的坐标点,该网络的预测效果相对来说还是可以的,但是在嘴角部分的预测还有一定差距。 2.网络结构 论文提出的网络整体思想是将网络分为两个模块,第一模块是通过适应openCV、faster rcnn或者训练的其他网络将原始图片裁剪出人脸部分用作第二模块关键点检测的数据,由于我使用的是Kaggle上提供的人脸关键点定位数据集,因此我没有使用第一模块

印度小哥在"我的世界"里搭神经网络,图像识别,网友:是别人的世界

孤者浪人 提交于 2020-05-08 16:18:59
  机器之心报道    参与:泽南、小舟    在沙盒游戏《我的世界》中,有人搭建了完整的校园,有人举办了毕业典礼,有的人从零开始制作计算机,玩家们层出不穷的创意总能让人眼前一亮。现在,又有一位印度程序员展现了真正的技术:在《我的世界》里搭建神经网络。   对于计算机科学爱好者们来说,有关《我的世界》中的环境是否「够格」作为各种严肃实验的话题,早已经过了充分讨论:      答案是肯定的,《我的世界》中红石电路和命令方块体系已经分别图灵完备了。这意味着我们理论上可以在其中构建一个通用图灵机(虽然难度比较大),进而造出一台功能完整的常规架构计算机。   既然如此,我们能不能在游戏里「敲出」一个神经网络模型呢?   已经有人做到了。最近,一名来自印度的程序员 Ashutosh Sathe 向我们展示了真正的技术,他在《我的世界》里运行起了一个具有图像识别能力的神经网络。   只要在游戏里的「画板」上写字,《我的世界》里的「计算机」就可以识别出你写的内容是什么:      在《我的世界》里进行 MNIST 式的手写数字识别。      「神经网络推断出画板上的文字为数字 1」。   除了给出识别的结果,神经网络识别的过程也是清晰可见:         在看了这波操作之后,众多吃瓜网友留下了不争气的泪水,感慨道:「这是『别人的世界』……」   这一炫酷的技术被称为 scarpet-nn

meanpool maxpool 前向和反向传播

我怕爱的太早我们不能终老 提交于 2020-05-08 12:04:16
mean max 前向和反向传播 感觉平均迟化对值不太公平,应该加个权重,让算法自动去决定哪个 cnn中关于平均池化和最大池化的理解 接触到pooling主要是在用于图像处理的卷积神经网络中,但随着深层神经网络的发展,pooling相关技术在其他领域,其他结构的神经网络中也越来越受关注。 一个典型的卷积神经网络结构图,其中的卷积层是对图像的一个邻域进行卷积得到图像的邻域特征,亚采样层就是使用pooling技术将小邻域内的特征点整合得到新的特征。 作用 pooling的结果是使得 特征减少,参数减少 ,但pooling的目的并不仅在于此。 pooling目的是为了 保持某种不变性(旋转、平移、伸缩等) 分类 常用的有mean-pooling,max-pooling和Stochastic-pooling三种。 mean-pooling,即对邻域内特征点只求平均, max-pooling,即对邻域内特征点取最大。 根据相关理论, 特征提取的误差 主要来自两个方面: (1) 邻域大小受限 造成的估计值 方差增大 ; (2)卷积层参数误差造成估计 均值的偏移 。 一般来说, mean-pooling能减小第一种误差( 邻域大小受限 造成的估计值 方差增大 ),更多的保留图像的背景信息, max-pooling能减小第二种误差( 卷积层参数误差 造成估计 均值的偏移 ),更多的保留纹理信息。

机器学习在交通标志检测与精细分类中的应用

守給你的承諾、 提交于 2020-05-07 16:20:18
导读 数据对于地图来说十分重要,没有数据,就没有地图服务。用户在使用地图服务时,不太会想到数据就像冰山一样,用户可见只是最直接、最显性的产品功能部分,而支撑显性部分所需要的根基,往往更庞大。 地图数据最先是从专业采集来的,采集工具就是车、自行车、飞机和卫星影像等,近两年有了利用智能硬件的众包采集。采集之后,就是把数据更新的速度和精准度都无限提升。因为地面上变化太快了,用户越来越依赖于地图应用。所以数据更新的速度和数据的准确度就是在乎用户体验的地图公司的第一要务了。而数据更新的第一步,就是交通标志检测。 本文将主要介绍机器学习技术在高德的地图数据生产的具体应用,这些技术方案和设计都已经过验证,取得了不错的效果,并且为高德地图数据的快速更新提供了基础的技术保证。 “交通标志检测”定义 交通标志检测,特指在普通街景图像上通过自动化手段检测出各种类型的交通标志,如限速、禁止掉头、人行横道和电子眼等。这些检测结果将作为生产数据交付给地图数据制作流程,最终演变为服务于广大用户的地图数据。 难点与挑战 交通标志检测的主要难点有样式繁杂,且在拍摄过程中受自然环境的影响较大。此外,为满足数据更新的速度和数据准确度的要求,对于算法的性能要求也格外严格。 样本形态差异大 交通标志的形态差异主要体现在: 类型繁多:国标定义的交通标志有几百个类型; 形状多样:常见交通标志的形状有三角形、圆形、方形、菱形

出现梯度消失与梯度爆炸的原因以及解决方案

流过昼夜 提交于 2020-05-06 02:48:35
在学习李宏毅老师机器学习的相关视频时,课下做了一个有关神经网络的小Demo,但是运行效果总是不尽人意,上网查询资料,才发现是梯度爆炸和梯度消失惹的祸。今天就让我们一起来学习一下梯度消失与梯度爆炸的概念、产生原因以及该如何解决。 目录 1.梯度消失与梯度爆炸的概念 2.梯度消失与梯度爆炸的产生原因 3.梯度消失与梯度爆炸的解决方案 首先让我们先来了解一个概念:什么是梯度不稳定呢? 概念 :在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或会消失,或会爆炸。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。 产生梯度不稳定的根本原因 :前面层上的梯度是来自后面层上梯度的乘积。当存在过多的层时,就会出现梯度不稳定场景,比如梯度消失和梯度爆炸。 划重点 :梯度消失和梯度爆炸属于梯度不稳定的范畴 1.梯度消失与梯度爆炸的概念 梯度消失:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度消失。 梯度爆炸:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫梯度爆炸。 其实梯度消失和梯度爆炸是一回事,只是表现的形式,以及产生的原因不一样。 2.梯度消失与梯度爆炸的产生原因 梯度消失:(1)隐藏层的层数过多;(2)采用了不合适的激活函数(

梯度消失、爆炸原因及其解决方法(转)

荒凉一梦 提交于 2020-05-06 02:11:12
转自: https://blog.csdn.net/qq_25737169/article/details/78847691 前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案。本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆炸的原因,第三部分对提出梯度消失及爆炸的解决方案。有基础的同鞋可以跳着阅读。 其中,梯度消失爆炸的解决方案主要包括以下几个部分。 - 预训练加微调 - 梯度剪切、权重正则(针对梯度爆炸) - 使用不同的激活函数 - 使用batchnorm - 使用残差结构 - 使用LSTM网络 第一部分:为什么要使用梯度更新规则 在介绍梯度消失以及爆炸之前,先简单说一说梯度消失的根源—–深度神经网络和反向传播。目前深度学习方法中,深度神经网络的发展造就了我们可以构建更深层的网络完成更复杂的任务,深层网络比如深度卷积网络,LSTM等等,而且最终结果表明,在处理复杂任务上,深度网络比浅层的网络具有更好的效果。但是,目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。这样做是有一定原因的,首先,深层网络由许多非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数 f ( x ) f(x)(非线性来自于非线性激活函数)

LSTM如何解决梯度消失或爆炸的?

廉价感情. 提交于 2020-05-06 00:45:52
from:https://zhuanlan.zhihu.com/p/44163528 哪些问题? 梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习。 梯度爆炸会使得学习不稳定, 参数变化太大导致无法获取最优参数。 在深度多层感知机网络中,梯度爆炸会导致网络不稳定,最好的结果是无法从训练数据中学习,最坏的结果是由于权重值为NaN而无法更新权重。 在循环神经网络(RNN)中,梯度爆炸会导致网络不稳定,使得网络无法从训练数据中得到很好的学习,最好的结果是网络不能在长输入数据序列上学习。 3. 原因何在? 让我们以一个很简单的例子分析一下,这样便于理解。 如上图,是一个每层只有一个神经元的神经网络,且每一层的激活函数为sigmoid,则有: ( 是sigmoid函数)。 我们根据反向传播算法有: 而sigmoid函数的导数公式为: 它的图形曲线为: 由上可见,sigmoid函数的导数 的最大值为 ,通常我们会将权重初始值 初始化为为小于1的随机值,因此我们可以得到 ,随着层数的增多,那么求导结果 越小,这也就导致了梯度消失问题。 那么如果我们设置初始权重 较大,那么会有 ,造成梯度太大(也就是下降的步伐太大),这也是造成梯度爆炸的原因。 总之,无论是梯度消失还是梯度爆炸,都是源于网络结构太深,造成网络权重不稳定,从本质上来讲是因为梯度反向传播中的连乘效应。 4.