激活函数

深度学习调参有哪些技巧?

旧巷老猫 提交于 2020-10-29 01:28:41
点击上方 “ 小白学视觉 ”,选择加" 星标 "或“ 置顶 ” 重磅干货,第一时间送达 编辑:Amusi | 来源:知乎 https://www.zhihu.com/question/25097993 本文仅作为学术分享,如果侵权,会删文处理 深度学习调参有哪些技巧? 深度学习的效果很大程度上取决于参数调节的好坏,那么怎么才能最快最好的调到合适的参数呢?求解 作者:Jarvix https://www.zhihu.com/question/25097993/answer/153674495 只想说一句:初始化 一次惨痛的教训是用normal初始化cnn的参数,最后acc只能到70%多,仅仅改成xavier,acc可以到98%。 还有一次给word embedding初始化,最开始使用了TensorFlow中默认的initializer(即glorot_uniform_initializer,也就是大家经常说的无脑使用xavier),训练速度慢不说,结果也不好。改为uniform,训练速度飙升,结果也飙升。 所以,初始化就跟黑科技一样,用对了超参都不用调;没用对,跑出来的结果就跟模型有bug一样不忍直视。 作者:BBuf https://www.zhihu.com/question/25097993/answer/934100939 大概调了快一年CNN(2019年1月到今天)

人工神经网络反向传播算法(BP算法)证明推导

泪湿孤枕 提交于 2020-10-28 20:49:00
为了搞明白这个没少在网上搜,但是结果不尽人意,最后找到了一篇很好很详细的证明过程,摘抄整理为 latex 如下。 (原文: https://blog.csdn.net/weixin_41718085/article/details/79381863 ) 更新:为了让看博客的带哥们能直观的看,我编译截图了,放在这里,latex 源码在下面 这个只是为了应付作业总结的,所以没有认真检查过,如果内容、正确性(尤其是这个)和格式上有什么问题请务必在下面评论区中指出。 \documentclass{article} \usepackage{xeCJK} \usepackage{amsmath} \setCJKmainfont{Noto Serif CJK SC} \title{人工神经网络反向传播算法\\链式法则在人工智能中的应用} \begin{document} \maketitle \section{背景} \subsection{人工神经元} 人工神经元是一个运算,它将输入分别以不同的权重组合相加并做一次偏移操作后进行某个非线性运算得到输出,以数学语言描述即是 \[ x^{(j + 1)} = \sigma(b + \sum_i W_i x_i^{(j)}) \] 其中 \(j\) 指神经元所处的层数,本例中 \(x_i^{(j)}\) 是来自第 \(j\) 层的第 \(i\)

干货 | 这可能全网最好的BatchNorm详解

☆樱花仙子☆ 提交于 2020-10-23 18:47:47
文章来自:公众号【机器学习炼丹术】。求关注~ 其实关于BN层,我在之前的文章“梯度爆炸”那一篇中已经涉及到了,但是鉴于面试经历中多次问道这个,这里再做一个更加全面的讲解。 Internal Covariate Shift(ICS) Batch Normalization的原论文作者给了Internal Covariate Shift一个较规范的定义: 在深层网络训练的过程中,由于网络中参数变化而引起内部结点数据分布发生变化的这一过程被称作Internal Covariate Shift。 这里做一个简单的数学定义,对于全链接网络而言,第i层的数学表达可以体现为: \(Z^i=W^i\times input^i+b^i\) \(input^{i+1}=g^i(Z^i)\) 第一个公式就是一个简单的线性变换; 第二个公式是表示一个激活函数的过程。 【怎么理解ICS问题】 我们知道,随着梯度下降的进行,每一层的参数 \(W^i,b^i\) 都会不断地更新,这意味着 \(Z^i\) 的分布也不断地改变,从而 \(input^{i+1}\) 的分布发生了改变。 这意味着,除了第一层的输入数据不改变,之后所有层的输入数据的分布都会随着模型参数的更新发生改变,而每一层就要不停的去适应这种数据分布的变化,这个过程就是Internal Covariate Shift。 BN解决的问题

黑科技:用cutlass进行低成本、高性能卷积算子定制开发

旧巷老猫 提交于 2020-10-23 17:29:55
图形处理器通用计算(GPGPU)是指利用 GPU 来计算原本由 CPU 处理的通用计算任务。由于现代 GPU 拥有强大的并行处理能力,通用 GPU 在面对矩阵乘法、卷积等大量并行的计算密集型算法时,性能远远超越了传统的 CPU。CUDA 是由 NVIDIA 推出的 GPGPU 高性能计算方案,目前大多数深度学习推理任务都可以通过 CUDA 来进行加速。 为了充分发挥 CUDA 平台的计算能力,NVIDIA 推出了高度优化的深度学习、线性代数算子库 cudnn、cublas、cutlass,以及 CUDA 平台上的深度学习推理框架 TensorRT。 cudnn、cublas 这样的基础算子原语库在常见的卷积层上性能表现很好,通常都能够满足用户的需求,但是在面对用户高度定制化的算法时,基础算子库往往并不能充分发挥硬件的性能。这是由于算子优化的长尾问题引起的,基础算子库引入了许多卷积优化的通用策略,但是这些优化的策略并不能覆盖所有的情况,实际算法中的卷积层有可能并不能从通用的优化策略中获得收益,从而无法充分发挥硬件的性能。 基础算子库的另一个问题是用户无法对这些基础算子进行定制化开发,当算法开发人员想为卷积算子添加一种新的激活函数,或者想添加一种特殊的卷积算子(比如:LocalConv)时,就会变得束手无策。 cutlass 是 NVIDIA 推出的一款线性代数模板库

我是一个平平无奇的AI神经元

荒凉一梦 提交于 2020-10-22 17:35:43
来源 | 编程技术宇宙 责编 | 晋兆雨 头图 | CSDN付费下载自视觉中国 我是一个AI神经元 我是一个AI神经元,刚刚来到这个世界上,一切对我来说都特别新奇。 之所以叫这个名字,是因为我的工作有点像人类身体中的神经元。 人体中的神经元可以传递生物信号,给它输入一个信号,它经过处理后再输出一个信号传递给别的神经元,最终传递到大脑完成对一个信号的决策和处理。 聪明的计算机科学家们受到启发,在代码程序里发明了我:神经元函数。 在我们的世界里,我只是普普通通的一员,像我这样的神经元有成百上千,甚至上万个,我们按照层的形式,组成了一个庞大的神经网络。 很快我和隔壁工位的大白开始混熟了,他比我来得早,对这里要熟悉的多。 听大白告诉我说,我们这个神经网络是一个图像识别的AI程序,只要给我们输入一张狗的照片,我们就能告诉你这是一只柯基,还是泰迪、柴犬、二哈··· 神经元结构 在大白的指引下,我很快就学会了怎么工作。 虽然我们叫神经元,名字听起来挺神秘的,但实际上我就是一个普通函数,有参数,有返回值,普通函数有的我都有: def neuron(a): w = [...] b = ... ... 我有一个参数a,这个参数是一个数组,里面的每一个元素我把它分别叫做a1,a2,a3···用这个a来模拟我这个神经元收到的一组信号。 人类的神经元是怎么处理输入的生物信号我不知道,我估计挺复杂的

Mxnet (44): 使用神经协作过滤(NeuMF模型)进行个性化排名

ⅰ亾dé卋堺 提交于 2020-10-14 22:41:59
1.个性化排名 前面对电影数据集的处理只考虑了明确的反馈,通过观察到的等级进行了训练和测试。这种方法有两个缺点: 在实际应用中,大多数的反馈都是隐式的,显式的反馈往往需要更高的收集成本。 未被观察的哪些用户-项目交互可能用于预测用户的喜好但是被忽略了,当这些缺失不是随机导致的而是由于用户的喜好导致的这些方法将不在适用。很显然,未观测的这些用户-项目对是用户真实的负反馈(用户对这些不感兴趣才没看)和缺失值(正常随机的缺失,跟喜好无关,将来有可能会看)的结合体。如果简单的忽略其实是不对的。 为了解决这个问题,针对从隐式反馈生成排名推荐列表的一类推荐模型已获得普及。通常, 可以使用逐点、逐对以及逐列的方法优化个性化排名模型。逐点方法一次只考虑一次交互,并训练分类器或回归器来预测个人偏好。矩阵分解和AutoRec使用逐点目标进行了优化。 逐对方法为每一个用户考虑一对项目并且致力于为这对项目最优排序。通常, 逐对方法更适合于排序任务,因为预测一对的顺序会使人联想到排序。逐列方法将整列的项目近似排序, 如直接优化排名指标:Normalized Discounted Cumulative Gain ( NDCG )。然而, 列表方法比点方法或成对方法更加复杂且计算量大。 1.1 贝叶斯个性化排序 贝叶斯个性化排序(BPR)是从最大后验估计量得出的成对个性化排序损失

不限机型,手机端实时玩转3D、混合现实,快手Y-tech有黑科技

一世执手 提交于 2020-10-13 06:44:57
  机器之心报道    机器之心编辑部   深度是实现 3D 场景理解的重要信息,快手 Y-tech 利用自研的单目深度估计技术获得了高质量的深度信息,并将模型部署到移动端,结合 Y-tech 已有的多项技术研发了 3DPhoto、混合现实等多种新玩法。这些黑科技玩法不限机型,可让用户在手机上无门槛的实时体验,给用户带来全新的视觉体验和交互方式的同时,可帮助用户更好的进行创作。      这项研究主要探究了如何更好的利用三维空间的结构性信息提升单目深度估计精度,此外还针对复杂场景构建了一个新的深度数据集 HC Depth,包含六种挑战性场景,有针对性地提升模型的精度和泛化性。该论文已被 ECCV 2020 收录,论文代码和模型即将在 GitHub 上开源,作者也将在 8 月 23-28 日的 ECCV 大会线上展示他们的工作。      论文链接:https://arxiv.org/abs/2007.11256   代码链接:https://github.com/ansj11/SANet    单目深度估计的挑战   从 2D 图像恢复 3D 信息是计算机视觉的一个基础性问题,可以应用在视觉定位、场景理解和增强现实等领域。在无法通过深度传感器或者多视角获得有效的深度测量时,单目深度估计算法尤为重要。传统方法通常使用先验信息恢复图像的深度信息,例如纹理线索,物体尺寸和位置

【转】浅谈人类视觉系统与卷积神经网络(CNN)的联系和区别

邮差的信 提交于 2020-10-07 06:24:58
浅谈人类视觉系统与卷积神经网络(CNN)的联系和区别 文章转载: 叶强 深度学习 / 强化学习 / 机器学习 / 算法 / 眼科学 声明:本文为作者原创、欢迎免费规范转载。本文使用的一些图片素材来自于网络,感谢素材提供方,如有侵权请联系告知。 前言 熟悉深度学习的朋友们一定不会对卷积神经网络(CNN)感到陌生,与传统的全连接深度学习神经网络(DNN)相比,CNN具有权重参数共享、灵活的特征检测等特点,其一定程度上甚至独立于主流的DNN。关于CNN,大家可能都广泛知晓其背后的灵感来自于人视觉系统中一个叫感受野的(receptive field)概念。其实CNN只是借用了这一概念,其整体机制与人的视觉系统还是有很大的差别。读完本文后,您将会对此有更加清晰的认识,并可能为您在基于视频处理的下一代神经网络研究中提供些灵感。 由于本人对于深度学习这一块知识的掌握仍有不少欠缺,可能会有一些错误的理解和表述,诚恳接受专业人士批评指正。 本文会同时涉及人工智能领域的深度学习以及神经科学中的视觉系统两方面知识,但不要求读者同时具备这两方面知识。同时由于突出重点及篇幅限制,本文不打算介绍单个神经元的解剖结构和生理功能,事先简单了解这部分知识将有助于对本文的理解。 一、简述CNN的历史和发展 CNN比深度学习成名要早,在2006年开启新一轮深度学习热潮的标志性论文发表以前

一文读懂:梯度消失(爆炸)及其解决方法

只谈情不闲聊 提交于 2020-10-06 01:29:14
梯度消失问题和梯度爆炸问题,总的来说可以称为 梯度不稳定问题 。 【要背住的知识】:用ReLU代替Sigmoid,用BN层,用残差结构解决梯度消失问题。梯度爆炸问题的话,可以用正则化来限制。sigmoid的导数是【0,0.25】. 出现原因 两者出现原因都是因为 链式法则 。当模型的层数过多的时候,计算梯度的时候就会出现非常多的乘积项。用下面这个例子来理解: 这是每层只有1个神经元的例子,每个神经元的激活函数都是sigmoid,然后我们想要更新b1这个参数。 按照大家都公认的符号来表示: \(w_1\*x_1 + b_1 = z_1\) 这就是z的含义; \(\sigma(z_1)=a_1\) ,这是a的含义。 可以得到这个偏导数: \(\frac{\partial C}{\partial b_1} = \frac{\partial z_1}{\partial b_1}\frac{\partial a_1}{\partial z_1} \frac{\partial z_2}{\partial a_2}\frac{\partial a_2}{\partial z_2} \frac{\partial z_2}{\partial a_3}\frac{\partial a_3}{\partial z_3} \frac{\partial z_3}{\partial a_4}\frac{

顶级程序员书单系列三:《深度学习入门-基于Python的原理与实现》

扶醉桌前 提交于 2020-10-06 01:27:25
推荐理由 这本书用非常简单精妙的思想讲述了深度学习的基本原理。我感觉这本书告诉了我一个很重要的道理,如果你读了很多书都没有把一个概念读懂,那可能真的不一定是你的问题,还有可能是书的问题。一个好的老师,就应该把班里最笨的学生教会(如果他愿意学的话)。我想这本书,可以在我的顶级程序员书单系列排名第3-5位,非常值得一读。 我的部分笔记 深度学习经验 1.更深入地理解深度学习,最好的办法就是亲自实现。 2.光看数学公式和理论说明无法理解的情况下,可以尝试阅读源代码并运行。 Pyhon基本入门 import numpy as np import matplotlib.pyplot as plt if name == ‘ main ’: print(“Hello world”) print(1 + 2) print(type(10)) a = [1, 2, 3, 4, 5] print(a) print(a[0:2]) me = {‘height’ : 180} me[‘weight’] = 70 print(me[‘height’]) print(me) print(True and False) for i in [1, 2, 3]: print(i) def hello(): print(“I Love u”) hello() x = np.array([1.0, 2.0, 3.0])