-
盘点 AI 十年来取得的重要突破。过去十年间,人工智能技术突飞猛进,最疯狂的科幻小说场景现在已经成为我们生活中不可或缺的一部分。十年前,人们在谈论 AI 的理论化和实验,但这些年来,AI 变得更加切实了,也变成了主流。无论是国际标准课程、平台、库、框架、硬件,一切都顺理成章。就算说这十年里取得的成绩奠定了未来的基础,也不为过。这篇文章将盘点 AI 十年来取得的重要突破。卷积2012 年是深度学习历史上重要的一年。那一年,卷积神经网络(CNN)在著名的 ImageNet 挑战赛中大放异彩。由 Alex Krizhevsky 等人设计的卷积神经网络「Alexnet」以远超第二名的成绩夺冠,在 ImageNet 数据集上的视觉识别错误率为 15.3%,降低了一半。该神经网络对猫的检测准确度达到了 74.8%,在 YouTube 视频中检测人脸的准确率为 81.7%。现在,手机和商场中的人脸识别应用都应该归功于 2012 年的这项工作,识别准确率的提升使研究者能够进行医学成像模型的部署,这些模型具备高置信度。与 AI 对话Vaswani 等人 2017 年发表的《Attention Is All You Need》带来了级联效应,使得机器能够以前所未有的方式去理解语言。得益于 Transformer 架构,AI 现在能够撰写假的新闻、推文,甚至可能引起政治动荡。继 Transformer 之后,谷歌又推出了 BERT 模型,将其用于关键字预测和 SEO 排名等。BERT 如今已经变成了自然语言处理领域的实际标准,诸如 Microsoft 和 NVIDIA 之类的公司开始堆积更多参数来追赶该模型。NVIDIA 的 Megatron 具有 80 亿个参数,而 Microsoft 的 Turing NLG 模型具有 170 亿个参数。OpenAI 的 GPT 模型后来居上,1750 亿参数的 GPT-3 目前是历史记录的保持者。GPT-3 也是 Transformer 的扩展,是目前最大的模型,它可以编码、写散文、生成商业创意,只有人类想不到,没有它做不到。将人类一军AI 早已在国际象棋中击败了人类。而更加复杂的人类游戏,如 Jeopardy! 游戏、围棋、德州扑克等,也没有挡住算法的脚步。人工智能近几年来最广为人知的事件就是 AlphaGo 在最复杂棋类游戏——「围棋」上击败了人类顶级选手。与此同时,在这个十年中,IBM 的 Watson 也在 Jeopardy! 决赛中击败了两位人类,最终 Watson 获得了 77147 美元奖金,而两位人类分别获得了 24000 和 21600 美元。Facebook 和卡耐基梅隆大学共同开发的德扑 AI Pluribus 战胜了五名专家级人类玩家,实现了前辈 Libratus(冷扑大师)未能完成的任务,该研究还登上了 2019 年的《科学》杂志。2020 年 12 月,DeepMind 提出的 MuZero 让一种人工智能模型掌握多种游戏,包括将棋、国际象棋和围棋。每一个生物体的行为都可以在其蛋白质中寻踪溯源。蛋白质承载着秘密,**蛋白质或许有助于击败新冠大流行。但蛋白质结构非常复杂,需要不断地运行模拟。DeepMind 尝试解决这一难题,其开发的深度学习算法「Alphafold」**了出现五十年之久的蛋白质分子折叠问题。计算机视觉被证明可以帮助诊断,而解决蛋白质折叠问题甚至能够帮助研发人员开发新药。AI:是艺术家,也是骗子去年,在一则视频中,比利时首相谈论着解决经济和气候危机的紧急需求,后来人们发现这其实是 Deepfake 视频。在机器学习和 AI 对比利时首相声音和表达方式的操纵下,这则假视频让首相发表了一场关于全球变暖影响的演讲。这些伪造内容的背后是精心设计的算法——生成对抗网络(GAN)。该算法在 2014 年提出,并得到广泛应用,甚至已经侵入了人类工作的最后一道壁垒:创作。这种网络可以生成从未存在的人脸、互换人脸,让一国总统胡言乱语。GAN 生成的一幅画甚至在佳士得拍卖会上以破纪录的价格——40 万美元成交了。GAN 的另一面是被用于恶意目的,以致于像 Adobe 这种公司不得不研究新技术来鉴别伪造内容。GAN 在下一个十年里仍将是被广泛讨论的对象。秘密武器——硅神经网络的概念诞生了半个世纪,今天流行的反向传播方法也出现三十年了。但是,我们仍然缺少能够运行这些计算的硬件。过去十年,我们见证了十多家公司研究专门的机器学习芯片。这些年来,芯片技术得到了极**展,我们可以在手掌大小的设备上执行百万次运算。这些芯片被用到数据中心,用户可以观看自己喜欢的 Netflix 电影、使用智能手机等。接下来,专为边缘设备定制的 AI 芯片蕴含着价值数十亿美元的商机。苹果等公司已经开发了定制化机器学习芯片(如 A14 Bionic)来提供智能服务。即使是依赖英伟达和英特尔的 AWS,也正在慢慢进入芯片行业。随着芯片变得越来越小,这一趋势只会更加明显:例如使用英伟达 Jetson AGX Xavier 开发者套件,你可以轻松创建和部署端到端 AI 机器人应用,用于制造、零售、智能城市等等。谷歌的 Coral 工具包可将机器学习带到边缘设备上。安全、实时输出是目前的主题。开源文化逐渐成熟2015 年,TensorFlow 开源。一年后,Facebook AI 又开源了基于 Python 的深度学习框架 PyTorch。今天,TensorFlow 和 PyTorch 已经成为使用最广泛的框架。通过不断的版本更新,谷歌和 Facebook 为机器学习社区带来了极大便利。自定义库、软件包、框架和工具的爆发式增长,使得更多人进入了 AI 领域,也为 AI 研究带来了更多人才。开源是近几年的一个主要特性。开源工具和越来越多的可用资源(如 arxiv 或 Coursera)促进了 AI 变革。另一个催化剂是流行的竞赛平台——Kaggle。Kaggle 和 GitHub 滋养了一批高质量 AI 开发者。更多学习,更少规则Schmidhuber 教授上世纪 90 年代初提出的元学习概念,最近才逐渐得到关注。元学习指在有限训练示例的基础上,使机器学习模型学习新技能并适应不断变化的环境。通过操纵超参数对特定任务优化机器学习模型需要大量用户输入的话,过程会较为繁琐,而使用元学习后,这一负担将得到极大缓解,因为元学习将优化部分自动化了。自动优化带来了一个新的行业 MLaaS(机器学习即服务)。未来方向关于一些专家预测以下领域或许将发挥主要作用:可复现性差分隐私几何深度学习神经形态计算强化学习尽管 AI 已经进入许多我们未曾想象的领域,但它仍需应用到更流行的应用中,如自动驾驶汽车。然而,挑战更多地在于数学层面:目前已有能够做出准确决策的算法,也有能够处理这些算法的处理器,但何时能够部署到应用上仍未可知。不管是医疗还是自动驾驶汽车,AI 仍需要继续进展,而这只有在透明性和可复现性得到建立时才会发生。原文链接:https://**yticsindiamag.com/ai-top-decade-2010-2020-breakthroughs/本文来源:https://www.jiqizhixin.com/articles/2021-01-11-3作者:RAM SAGAR编译:蛋酱 魔王
-
LossAndOptimizer已同步至CSDN: kewei chen_irrationality_CSDN博客 机器学习中的损失_kewei chen-CSDN博客由于word导入的公式不能看到,我已将本文内容上传附件pdf,供大家下载阅读。在Resnet实现CIFAR-10图像分类 中,我们需要定义损失和优化器。损失函数是深度学习的训练目标,也叫目标函数,可以理解为神经网络的输出(Logits)和标签(Labels)之间的距离,是一个标量数据。常见的损失函数包括均方误差、L2损失、Hinge损失、交叉熵等等。图像分类应用通常采用交叉熵损失(CrossEntropy)。优化器用于神经网络求解(训练)。由于神经网络参数规模庞大,无法直接求解,因而深度学习中采用随机梯度下降算法(SGD)及其改进算法进行求解。MindSpore封装了常见的优化器,如SGD、ADAM、Momemtum等等。本例采用Momentum优化器,通常需要设定两个参数,动量(moment)和权重衰减项(weight decay)。通过调用MindSpore中的API:Momentum和SoftmaxCrossEntropyWithLogits,设置损失函数和优化器的参数。Loss均方误差均方误差单独扽概念是很简单的,这里只做介绍,更深一步的内容会在后面列出来。1. SSE(和方差、误差平方和):The sum of squares due to error2. MSE(均方差、方差):Mean squared error3. RMSE(均方根、标准差):Root mean squared error数理统计中均方误差是指参数估计值与参数真值之差平方的期望值,记为MSE。MSE是衡量“平均误差”的一种较方便的方法,MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。首先先回顾复习三个概念:1)方差:方差是在概率论和统计方差衡量随机变量或一组数据的离散程度的度量方式,方差越大,离散度越大。求解方式为,各随机变量与平均值差值的平方和的平均数(先求差,再平方,再平均)平均数:方差公式:也可以通过以下的方式进行求解方差 2)标准差:标准差就是方差的算术平方根,它反映组内个体间的离散程度。因此它的过程是与平均值之间进行差值计算。标准差公式:3)样本方差 这里之所以列出样本方差的样子,是因为样本方差更多被采用,因为他是无偏估计的,只做了解。感兴趣的可以到网上搜下与方差的“无偏”证明。1.SSE(和方差)在统计学里,该参数计算的是拟合数据很原始数据对应点的误差的平方和,计算公式为:其中 是真实数据,是拟合的数据, 从这里可以看出SSE越接近于0,说明模型选择和拟合更好,数据预测也越成功。接下来的MSE和RMSE因为和SSE是同出一宗,所以效果一样。2.MSE(均方方差)该统计参数是预测数据和原始数据对应点误差的平方和的均值,也就是 ,和 没有太大的区别,计算公式为, 其中 n 为样本的个数。3.MSE(均方根)该统计参数,也叫回归系统的拟合标准差,是MSE的平方根,计算公式为 以上三个统计参数,虽然略有细微的差别,但是代表的都是数据拟合的好坏,只是标准不一样。L2损失一、易混概念对于一些常见的距离先做一个简单的说明1.欧式距离假设X和Y都是一个n维的向量,即 则欧氏距离: 2.L2范数假设X是n维的特征 L2范数: 3 .闵可夫斯基距离这里的p值是一个变量,当p=2的时候就得到了欧氏距离。4 .曼哈顿距离来源于美国纽约市曼哈顿区,因为曼哈顿是方方正正的。二、损失函数L1和L2都可以做损失函数使用。1. L2损失函数L2范数损失函数,也被称为最小平方误差(LSE)。它是把目标值 与估计值 的差值的平方和最小化。一般回归问题会使用此损失,离群点对次损失影响较大。2. L1损失函数也被称为最小绝对值偏差(LAD),绝对值损失函数(LAE)。总的说来,它是把目标值 与估计值 的绝对差值的总和最小化。3. 二者对比L1损失函数相比于L2损失函数的鲁棒性更好。因为L2范数将误差平方化(如果误差大于1,则误差会放大很多),模型的误差会比L1范数大的多,因此模型会对这种类型的样本更加敏感,这就需要调整模型来最小化误差。但是很大可能这种类型的样本是一个异常值,模型就需要调整以适应这种异常值,那么就导致训练模型的方向偏离目标了。三、正则化1. 正则化为什么可以避免过拟合?正规化是防止过拟合的一种重要技巧。正则化通过降低模型的复杂性, 缓解过拟合。过拟合发生的情况,拟合函数的系数往往非常大,为什么?如下图所示,就是过拟合的情况,拟合函数考虑到了每一个样本点,最终形成的拟合函数波动很大,也就是在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的系数非常大,就是模型中的w会很大。2. L1正则L1正则常被用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解,我们可以将0对应的特征遗弃,进而用来选择特征。一定程度上L1正则也可以防止模型过拟合。假设 是未加正则项的损失, 是一个超参,控制正则化项的大小。对应的损失函数: 3. L2正则主要用来防止模型过拟合,直观上理解就是L2正则化是对于大数值的权重向量进行严厉惩罚。鼓励参数是较小值,如果 小于1,那么 会更小。对应的损失函数: 4. 为什么L1会产生稀疏解稀疏性:很多参数值为0。1)梯度的方式:对其中的一个参数 计算梯度,其他参数同理,是步进, 是符号函数>0,=1;<0,=-1。L1的梯度:$L=L(W)+\lambda \sum_{i=1}^n |w_i|\\ \frac{\partial L}{\partial w_i}=\frac{\partial L(W)}{\partial w_i}+\lambda sign(w_i)\\ w_i=w_i-\eta \frac{\partial L(W)}{\partial w_i}-\eta \lambda sign(w_i)$L2的梯度:$L=L(W)+\lambda \sum_{i=1}^n w_i^2\\ \frac{\partial L}{\partial w_i}=\frac{\partial L(W)}{\partial w_i}+2\lambda w_i\\ w_i=w_i-\eta \frac{\partial L(W)}{\partial w_i}-\eta 2\lambda w_i$当 小于1的时候,L2的惩罚项会越来越小,而L1还是会非常大,所以L1会使参数为0,而L2很难。2)图形的方式:损失函数L与参数 的关系图,绿点是最优点。如果加上L2正则,损失函数L为 ,对应的函数是蓝线,最优点是黄点。如果是加上L1损失,那么损失函数L是 ,对应的函数是粉线,最优点是红点,参数 变为0。两种正则化,能不能将最优的参数变为0,取决于最原始的损失函数在0点处的导数,如果原始损失函数在0点处的导数 不为0,则加上L2正则化项 之后,导数依然不为0,说明在0这点不是极值点,最优值不在w=0处。而施加 正则项时,导数在 这点不可导。不可导点是否是极值点,就是看不可导点左右的单调性。单调性可以通过这个点左、右两侧的导数符号判断,导数符号相同则不是极值点,左侧导数正,右侧导数负,则是极大值,左侧导数负,右侧导数正,极小值。根据极值点判断原则, 左侧导数 ,只要正则项的系数 大于,那么左侧导数小于0,右侧导数,所以就会变成一个极小值点,所以L1经常会把参数变为0,产生稀疏解。参考资料:L1正则化引起稀疏解的多种解释 - 知乎 (zhihu.com) Hinge损失声明:1. 参考自维基百科 2. 后面可能会更新Hinge Loss在机器学习中,hinge loss作为一个损失函数(loss function),通常被用于最大间隔算法(maximum-margin),而最大间隔算法又是SVM(支持向量机support vector machines)用到的重要算法(注意:SVM的学习算法有两种解释:1. 间隔最大化与拉格朗日对偶;2. Hinge Loss)。Hinge loss专用于二分类问题,标签值 ,预测值。该二分类问题的目标函数的要求如下:当 大于等于+1或者小于等于-1时,都是分类器确定的分类结果,此时的损失函数loss为0;而当预测值时,分类器对分类结果不确定,loss不为0。显然,当时,loss达到最大值。如果你想到了一个可以定义这种loss的函数,那说明有成为数学家的潜质。想不到的话就乖乖的往下看:hinge loss出场。对于输出,当前 的损失为: 上式是Hinge loss在二分类问题的的变体,可以看做双向Hinge loss。难以理解的话,可以先看单方向的hinge loss。以y=+1,为例。当 时,loss为0,否则loss线性增大。函数图像如下所示: 参考资料: 机器学习基础(四十二)—— 常用损失函数的设计(multiclass SVM loss & hinge loss) Hinge loss在SVM中的应用SVM在简单情况下(线性可分情况下)使用的就是一个最大间隔算法。几何意义如下图所示(实心的数据点就是该类别的支持向量),最大化分离超平面到两个类别的支持向量之间的距离 。 参考资料: 知乎-支持向量机(SVM)是什么意思? 线性可分SVM的预测值 ,其中和都是分类器通过样本学习到的参数。正如前面所说, 。如果分离超平面在如上图所示的位置(这是最大分割情况)并且支持向量与分割平面之间的距离=1,每个的样本其,每个的样本其 ,每个点的Hinge loss为0,整体loss作为平均值,也等于0。 如果分割超平面误分类,则Hinge loss大于0。Hinge loss驱动分割超平面作出调整。 如果分割超平面距离支持向量的距离小于1,则Hinge loss大于0,且就算分离超平面满足最大间隔,Hinge loss仍大于0拓展再强调一下,使用Hinge loss的分类器的。 |ŷ | | y ^ | |\hat y|越大,说明样本点离分割超平面越远,即该样本点很容易被分类。但是,我们在选择合适的损失函数进行优化时,没必要关注那些离超平面很远的样本。为此,我们可以通过对距分离超平面的距离选择一个阈值,来过滤这些离超平面很远的样本。这就是Hinge loss的精髓,,式中的1就是我们选择的阈值,这个可以作为一个超参数。通过一个max(0, )函数,忽略值过高的情况。SVM这个思想可以拓展到SVM的多分类问题。SVM的多分类有两种损失函数: 其中,表示对于某一标签值,分类器错误预测的最大值,表示正确的分类器预测值,表示分类阈值。注意:即使是分类器,也是先产生预测值,再根据预测值和分类阈值进行分类的。 其中,表示错误的分类器预测值, 表示正确的分类器预测值,1表示分类阈值。如下图SVM的预测结果所示: 参考资料:CS231n 2016 通关 第三章-SVM与Softmax 运用公式1:的Hinge loss 的Hinge loss的Hinge loss 则运用公式2:也差不多,最后的结果是2.9, 0, 10.9,然后再求平均。PS: 公式2在实际中应用更多。SSVMHinge loss的变体也被应用于Structured SVMs中。这里不太懂…优化Hinge loss是一个凸函数(convex function),所以适用所有的机器学习凸优化方法。虽然Hinge loss函数不可微,但我们可以求它的分段梯度: 当然,Hinge loss的梯度在 点处未定义。平滑为了解决Hinge loss的优化问题,现在有两种平滑(smoothed)策略: 交叉熵参考资料:损失函数:交叉熵详解 - 知乎 (zhihu.com) 将交叉熵引入计算语言学消岐领域,采用语句的真实语义作为交叉熵的训练集的先验信息 ,将机器翻译的语义作为测试集后验信息。计算两者的交叉熵,并以交叉熵指导对歧义的辨识和消除。实例表明,该方法简洁有效.易于计算机自适应实现。交叉熵不失为计算语言学消岐的一种较为有效的工具。在信息论中,交叉熵是表示两个概率分布p,q,其中p表示真实分布,q表示非真实分布,在相同的一组事件中,其中,用非真实分布q来表示某个事件发生所需要的平均比特数。从这个定义中,我们很难理解交叉熵的定义。下面举个例子来描述一下:假设现在有一个样本集中两个概率分布p,q,其中p为真实分布,q为非真实分布。假如,按照真实分布p来衡量识别一个样本所需要的编码长度的期望为:H(p)=但是,如果采用错误的分布q来表示来自真实分布p的平均编码长度,则应该是:H(p,q)=此时就将H(p,q)称之为交叉熵。交叉熵的计算方式如下:对于离散变量采用以下的方式计算:H(p,q)=对于连续变量采用以下的方式计算:
-
## 网络模型结构简介   卷积神经网络在网格数据上取得了很大的成功,但是在学习像图这样的数据的时候就面临着很多的挑战。CNN中,可学习的局部滤波器可以自动地捕获高层次的特征。滤波器的计算需要感受野内有固定数量的单元。然而,在图结构中,邻居单元的数量不固定,而且邻居也不有序,所以阻碍了卷积的操作。我们提出了可学习图卷积层(learnable graph convolutional layer LGCL)来解决这些挑战。 基于值的排序,LGCL为每个特征自动地选择固定数量的邻居结点,以此将图结构数据变换到1维的网格结构中,然后就可以在图上使用常规的卷积操作了。为了能让模型在大尺度的图上训练,我们提出了一个子图训练方法来减少过多的内存和计算资源的开销。在顶点分类任务上,不论是transductive 还是 inductive,表现得都更好一些。我们的结果展示出了我们的子图训练方法比前人的方法更高效。 ## 数据集 Cora数据集由许多机器学习领域的paper构成,这些paper被分为7个类别: \- Case_Based \- Genetic_Algorithms \- Neural_Networks \- Probabilistic_Methods \- Reinforcement_Learning \- Rule_Learning \- Theory 在该数据集中,每一篇论文至少引用了该数据集里面另外一篇论文或者被另外一篇论文所引用,数据集总共有2708篇papers。 在消除停词以及除去文档频率小于10的词汇,最终词汇表中有1433个词汇。 ## 效果对比 | 环境 | 卡数/数据集 | 训练总耗时(h/m/s) | 实测精度 | 论文精度 | 实测性能(ms/step) | 基线性能(ms/step) | | ------ | ----------- | ------------------- | -------- | ----------- | ------------------- | ------------------- | | Ascend | 1P/Cora | 96.29s | 85.1% | 83.3 ± 0.5% | 0.095 | 0.9181 | ## 个人经验 我自身参加过两次模王赛,这一次有幸一直从青铜赛打进最终王者阶段,也是从对昇腾生态不太了解到现在还可以较熟练地使用和进行调试。 针对LGCN这个模型,实际上这个模型很小,很适合利用CANN的profiling工具和AutoTune反复调试和进行网络调参。对于要转成昇腾的Tensorflow模型,首先我们要加入这一串代码: ```python config = tf.ConfigProto() custom_op = config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["use_off_line"].b = True # 在昇腾AI处理器执行训练 custom_op.parameter_map["mix_compile_mode"].b = True config.graph_options.rewrite_options.remapping = RewriterConfig.OFF # 关闭remap开关 config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF if tf.app.flags.FLAGS.allow_mix_precision: custom_op.parameter_map["precision_mode"].s = tf.compat.as_bytes("allow_mix_precision") ``` 其中**precision_mode**是我们最容易提高模型性能且可以达到比较小或者几乎忽略不计的性能损耗,就这么一行代码即可。再者我们要启动profiling模式,也是加入几行代码,就可以使用性能模式: ```python work_dir = os.getcwd() profiling_dir = os.path.join(work_dir, "npu_profiling") if not os.path.exists(profiling_dir): os.makedirs(profiling_dir) options = '{"output": "%s", \ "task_trace": "on", \ "aicpu": "on"}' % (profiling_dir) custom_op.parameter_map["profiling_mode"].b = True custom_op.parameter_map["profiling_options"].s = tf.compat.as_bytes(options) ``` 使用性能模式后可以在目录下生成一个JOBXXXX开头的文件,我们可以在`/home/HwHiAiUser/Ascend/ascend-toolkit/latest/arm64-linux/toolkit/tools/profiler/profiler_tool/analysis/msprof`调用起解析性能脚本,可以尝试以下方法执行: ```shell python3 msprof.py export timeline -dir JOBBHGEJGADJBEHJJEJICBBAAAAAAAAA python3 msprof.py export summary -dir JOBBHGEJGADJBEHJJEJICBBAAAAAAAAA ``` 那么我们可以得到`summary`和`timeline`关键文件夹,使用chrome://tracing/去读取timeline下的task_time_0_1.json,我们就可以知道每个算子的性能如何,然后再去针对耗时长的算子进行二次调试了。  在LGCN模型里,我发现tf.transpose和tf.nn.top_k这两个算子耗时非常长,当我没有很好的处理方案的时候,我尝试选择了混合计算的方案,混合计算就是针对在计算图中有不支持的算子的场景(例如py_func), 为提供灵活性和扩展性,提供混合计算模式,用户可配置将不支持的算子留在Host由前端框架执行。  昇腾AI处理器默认采用计算全下沉模式,即所有的计算类算子全部在Device侧执行,混合计算模式作为计算全下沉模式的补充,将部分不可离线编译下沉执行的算子留在前端框架中在线执行,用于提升昇腾AI处理器支持Tensorflow的适配灵活性。 使用方法也很简单,只要加入以下代码即可: ```python custom_op.parameter_map["mix_compile_mode"].b = True ``` 使用完发现性能有大幅度提升,因为耗时长的算子都到前端框架执行,但此时并没有接近GPU的性能,我又开始寻找其他性能调优方案,此时发现NPU有自带的`dropout`函数,可以更合适昇腾设备使用,果然添加上去后性能又进一步跃升,此时性能已经超过GPU性能,到此我们的调优就可以宣布完毕啦。
-
卷积神经网络Yann LeCun 和Yoshua Bengio在1995年引入了卷积神经网络,也称为卷积网络或CNN。CNN是一种特殊的多层神经网络,用于处理具有明显网格状拓扑的数据。其网络的基础基于称为卷积的数学运算。卷积神经网络(CNN)的类型以下是一些不同类型的CNN: 1D CNN:1D CNN 的输入和输出数据是二维的。一维CNN大多用于时间序列。 2D CNNN:2D CNN的输入和输出数据是三维的。我们通常将其用于图像数据问题。 3D CNNN:3D CNN的输入和输出数据是四维的。一般在3D图像上使用3D CNN,例如MRI(磁共振成像),CT扫描(甲CT扫描或计算机断层扫描(以前称为计算机轴向断层或CAT扫描)是一种医学成像 技术中使用的放射学获得用于非侵入性详述的身体的图像诊断的目的)和其他复杂应用程序的DICOM图像(医学数字成像)网络架构以下是CNN中不同层的网络架构: 卷积层 池化层 全连接层Python实现卷积神经网络环境Google Colab导入所有必需的库import numpy as npimport pandas as pdfrom keras.optimizers import SGDfrom keras.datasets import cifar10from keras.models import Sequentialfrom keras.utils import np_utils as utilsfrom keras.layers import Dropout, Dense, Flattenfrom keras.layers.convolutional import Conv2D, MaxPooling2D加载cifar10数据:(X, y), (X_test, y_test) = cifar10.load_data()# 规范化数据X,X_test = X.astype('float32')/ 255.0,X_test.astype('float32')/ 255.0转换为分类:y,y_test = utils.to_categorical(y,10),u.to_categorical(y_test,10)初始化模型:model = Sequential()使用以下参数添加卷积层: Features map = 32 内核大小= 3x3 输入形状= 32x32 Channels = 3 Padding = 3→表示与输入相同的尺寸输出model.add(Conv2D(32, (3, 3), input_shape=(32, 32, 3), padding='same', activation='relu'))# Dropoutmodel.add(Dropout(0.2))# 添加另一个卷积层 padding ='valid'表示输出尺寸可以采用任何形式model.add(Conv2D(32,(3,3),activation ='relu',padding ='valid'))# 添加一个最大池化层model.add(MaxPooling2D(pool_size =(2,2)))# 展平model.add(Flatten())# Dense层 隐藏单元数为521model.add(Dense(512, activation='relu'))# Dropoutmodel.add(Dropout(0.3))#output model.add(Dense(10, activation='softmax'))# 编译模型 激活器选择SGDmodel.compile(loss='categorical_crossentropy', optimizer=SGD(momentum=0.5, decay=0.0004), metrics=['accuracy'])25个epochsmodel.fit(X, y, validation_data=(X_test, y_test), epochs=25, batch_size=512)卷积神经网络是一种特殊的多层神经网络,主要用于提取特征。CNN使用称为卷积和池化的两个操作将图像缩小为其基本特征,并使用这些特征适当地理解和分类图像
-
感知器学习 接下来我们看看感知器是如何与线性回归模型产生联系的。 感知器(Perceptrons)是用于二元分类问题的监督学习算法,二元分类器是二类问题的线性分类器。Mark I 感知器是感知器算法的第一个实现,感知器算法由Frank Rosenblatt于1957年在康奈尔航空实验室发明,感知器旨在成为一台机器,而不是一个程序,这台机器专为图像识别而设计:它有一个由400个光电池组成的阵列,随机连接到“神经元”,权重由电位器编码,并且在学习期间通过机器执行权重更新。在美国海军组织的1958年新闻发布会上,Rosenblatt发表了关于感知者的声明,这一声明引起了人工智能社区的激烈争论。根据罗森布拉特的声明,感知器是“电子计算机的胚胎,走路,说话,看,写,复制自己,并感受到它的存在。”单层感知器仅能够学习线性可分离的模式。1969年,一本名为Perceptrons的书表明,感知器网络不可能学习XOR功能。但是,如果我们使用非线性激活函数(而不是梯度函数),则可突破此限制。事实上,通过使用非线性激活函数,我们可以构建比XOR更复杂的函数(即使只有单层),如果我们添加更多隐藏层,则可以拓展处更复杂的功能,即我们接下来要介绍的多层感知器(深度学习)。我们回顾一下:1)感知器是生物神经元的简化模型。2)感知器是用于学习二元分类器的算法:将其输入映射到输出值的函数。3)在神经网络的背景下,感知器是使用Heaviside阶跃函数作为激活函数的人工神经元,感知器算法也称为单层感知器,以区别于多层感知器。4)Perceptron算法具有历史意义,但它为我们提供了一种拉近线性回归和深度学习之间差别的方法。5)单层感知器的学习过程如下所示,每加入一个数据点,感知器便会更新一次线性边界,类似于线性回归中的回归线。下图为感知器的示意图,f为阶跃函数,输出为二进制(0或1),i1-in为输入,Wi为各个输入的权重:
-
第一关:什么是神经网络1、全连接网络包含输入层、隐藏层和输出层A、对B、错A12、层数较多的神经网络为深层神经网络A、对B、错A13、ReLU(11)=11A、对B、错A14、下列说法错误的是A、用深层神经网络实现想要的功能就是深度学习B、神经网络的灵感来自于人类大脑的神经系统的构成C、含有1层隐藏层的神经网络称之为深层神经网络C1第二关:反向传播1、反向传播主要是为了计算参数对损失函数的梯度?A、对B、错A12、梯度下降是一种迭代更新的算法?A、对B、错A13、神经网络的训练过程只有前向传播过程?A、对B、错B1第三关:动手实现CNN识别手写数字任务描述本关任务:编写 Python 代码动手搭建 CNN 模型实现手写数字识别。编程要求填写 python 代码,在 Begin-End 段中构建出如下结构的卷积神经网络:·64 个 55 的卷积核组成的卷积层,激活函数为 relu;·最大池化层,池化核大小为 22;·扁平;·128 个神经元的全连接层,激活函数为 relu;·10 个神经元的全连接层,激活函数为 softmax。测试说明只需按要求构建模型即可,程序内部会使用你所构建的模型进行训练与预测,当预测准确率高于 95% 时,视为过关。代码from keras.models import Sequentialfrom keras.layers import Conv2D, MaxPool2D, Flatten, Denseimport numpy as np# 设置随机种子np.random.seed(1447)def build_model(): ''' 在Begin-End段中构建出如下结构的卷积神经网络 1.64个5*5的卷积核组成的卷积层,激活函数为relu 2.最大池化层,池化核大小为2*2 3.扁平 4.128个神经元的全连接层,激活函数为relu 5.10个神经元的全连接层,激活函数为softmax :return: 构建好的模型 ''' model = Sequential() model.add(Conv2D(32, (5, 5), activation='relu', input_shape=[28, 28, 1])) #********* Begin *********# model.add(Conv2D(64, (5, 5), activation='relu')) model.add(MaxPool2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dense(10, activation='softmax')) #********* End *********# return model第四关:动手实现RNN分析影评情感任务描述本关任务:编写 Python 代码动手搭建 RNN 模型实现影评情感分析。编程要求填写 python 代码,在 Begin-End 段中构建出如下结构的循环神经网络:·有 30 个神经元的 SimpleRNN 层;·有 16 个神经元的全连接层,激活函数为 relu;·有 1 个神经元的全连接层,激活函数为 sigmoid。测试说明只需按要求构建模型即可,程序内部会使用你所构建的模型进行训练与预测,当预测准确率高于 70% 时,视为过关。PS:由于数据较大,执行时间可能比较长,请耐心等待。代码from keras.models import Sequentialfrom keras.layers import Embedding, SimpleRNN, Densedef build_model(): ''' 在Begin-End段中构建如下结构的循环神经网络 1.有30个神经元的SimpleRNN层 2.有16个神经元的全连接层,激活函数为relu 3.有1个神经元的全连接层,激活函数为sigmoid :return: 构建好的模型 ''' model = Sequential() model.add(Embedding(1000, 64)) #********* Begin *********# model.add(SimpleRNN(40)) model.add(Dense(1, activation='sigmoid')) #********* End *********# return model
-
经典网络结构1. LeNet5 由两个卷积层,两个池化层,两个全连接层组成。卷积核都是5×5,stride=1,池化层使用maxpooling 2. AlexNet 模型共八层(不算input层),包含五个卷积层、三个全连接层。最后一层使用softmax做分类输出 AlexNet使用了ReLU做激活函数;防止过拟合使用dropout和数据增强;双GPU实现;使用LRN 3. VGG 全部使用3×3卷积核的堆叠,来模拟更大的感受野,并且网络层数更深。VGG有五段卷积,每段卷积后接一层最大池化。卷积核数目逐渐增加。 总结:LRN作用不大;越深的网络效果越好;1×1的卷积也很有效但是没有3×3好
-
CNN基本部件介绍1. 局部感受野 在图像中局部像素之间的联系较为紧密,而距离较远的像素联系相对较弱。因此,其实每个神经元没必要对图像全局进行感知,只需要感知局部信息,然后在更高层局部信息综合起来即可得到全局信息。卷积操作即是局部感受野的实现,并且卷积操作因为能够权值共享,所以也减少了参数量。 2. 池化 池化是将输入图像进行缩小,减少像素信息,只保留重要信息,主要是为了减少计算量。主要包括最大池化和均值池化。 3. 激活函数 激活函数的用是用来加入非线性。常见的激活函数有sigmod, tanh, relu,前两者常用在全连接层,relu常见于卷积层 4. 全连接层 全连接层在整个卷积神经网络中起分类器的作用。在全连接层之前需要将之前的输出展平
-
本文提出了一种高分辨率Transformer(HRT),它可以通过学习高分辨率表征来完成密集的预测任务,而原来的Vision Transformer学习的则是低分辨率表征,同时具有很高的内存和计算成本。作者在高分辨率卷积网络(HRNet)中分别引入的多分辨率并行设计,以及local-window self-attention,在小的非重叠图像窗口上执行self-attention,以提高内存和计算效率。此外,在FFN中引入了卷积操作,以在断开的图像窗口之间交换信息。作者实验证明了HRT在人体姿态估计和语义分割任务中的有效性,HRT在COCO姿态估计上比Swin Transformer少了50%的参数和30%的FLOPs,精度比Swin Transformer高出1.3%AP。1简介Vision Transformer (ViT)在ImageNet分类任务中显示了良好的性能。后续的许多工作通过知识蒸馏、采用更深层次的体系结构、直接引入卷积运算、重新设计输入图像Tokens等来提高分类精度。此外,一些研究试图将该Transformer扩展到更广泛的视觉任务,如目标检测、语义分割、姿态估计、视频理解等。本文主要研究密集预测任务的Transformer,包括姿态估计和语义分割。Vision Transformer将图像分割为大小为16×16的图像patches序列,然后提取每个图像patch的特征表示。因此,Vision Transformer的输出表示失去了精确密集预测所必需的细粒度空间细节。Vision Transformer仅输出单尺度特征表示,因此缺乏处理多尺度变化的能力。为了减少特征粒度的损失并对多尺度变化进行建模,作者提出了高分辨率Transformer (HRT),它包含更丰富的空间信息,并为密集预测构建多分辨率表示。高分辨率 Transformer 采用了HRNet中的多分辨率并行设计。首先,HRT在stem和第一阶段都采用了卷积(多个研究表明卷积在早期表现较好);其次,HRT在整个过程中使用并行的中分辨率和低分辨率流维护高分辨率流,以帮助提高高分辨率表示(利用不同分辨率的特征图,HRT能够模拟多尺度变化);最后,HRT通过多尺度融合模块交换多分辨率特征信息,实现短距离和长距离注意力的混合。在每个分辨率下,采用局部窗口自注意力机制来降低内存和计算复杂度。作者将表示映射划分为一组不重叠的小图像窗口,并在每个图像窗口中分别执行自注意力。这就降低了内存和计算复杂度,从二次到线性的空间大小。作者进一步在局部窗口自注意力后的前馈网络(FFN)中引入3×3深度卷积,以在局部窗口自注意力过程中断开的图像窗口之间交换信息。这有助于扩大感受野,并对密集的预测任务至关重要。图1显示了HRT Transformer Block的详细信息。作者进行了图像分类、姿态估计和语义分割任务的实验,并在各种 Baseline 上取得了竞争性的性能。例如,与DeiT-B相比,HRT-B在ImageNet分类上获得了+1.0%的Top-1精度,参数减少了40%,FLOPs减少了20%。在COCO val上,HRT-B比HRNet-W48增加0.9% AP,参数减少32%,FLOPs减少19%。在PASCAL-Context test和COCO-Stuff test中,HRT-B+OCR分别比HRNet-W48+OCR增加了+1.2%和+2.0% mIoU,参数减少了25%,FLOPs略多。2相关工作2.1 Vision Transformer随着Vision Transformer 和 Data-efficient image Transformer (DeiT)的成功,人们提出了各种技术来提高Vision Transformer的精度。在最近的改进中,如多尺度特性层次结构和合并卷积的有效性已经得到验证。例如,MViT、PVT和Swin按照典型卷积架构(如ResNet-50)的空间配置将多尺度特征层次引入Transformer。与之不同的是HRT利用HRNet启发的多分辨率并行设计,融合了多尺度特征层次。CvT、CeiT 和 LocalViT 通过在自注意力或FFN中插入深度卷积来增强 Transformer 的局部特征的鲁棒性。在HRT中插入卷积的目的是不同的,除了增强局部特征的鲁棒性,它还确保了跨非重叠窗口的信息交换。先前也有一些研究提出了类似的局部自注意力方案用于图像分类。它们在卷积后构造重叠的局部窗口,计算量大。本文提出应用局部窗口自注意力方案将输入特征映射划分为非重叠窗口。然后在每个窗口内独立应用自注意力,从而显著提高效率。有研究表明,提高Vision Transformer 输出的表示的空间分辨率对语义分割很重要。而HRT通过利用多分辨率并行Transformer 方案,为解决Vision Transformer的低分辨率问题提供了方法。2.2 高分辨率CNN的密集预测高分辨率卷积算法在姿态估计和语义分割方面都取得了很大的成功。在高分辨率卷积神经网络的开发中,开发了 3 种主要方法,包括:应用 dilated convolutions 去除一些 down-sample layers ;用解码器从低分辨率表示中恢复高分辨率表示;在整个网络中保持高分辨率表示。本文的HRT属于第3中方法,同时保留了vision transformer和HRNet的优点。3High-Resolution Transformer3.1 多分辨率并联Transformer遵循HRNet的设计,从高分辨率卷积作为第一阶段,逐步添加高分辨率到低分辨率的流作为新的阶段。多分辨率流是并行连接的。主体由一系列的阶段组成。在每个阶段,每个分辨率流的特征表示分别用多个Transformer Block 进行更新,并通过卷积多尺度融合模块进行跨分辨率信息的重复交换。图2说明了整个HRT体系结构。卷积多尺度融合模块的设计完全遵循HRNet。
-
7近年来,图神经网络在文献分类中得到了广泛的应用。然而,现有的方法大多是基于没有句子级信息的静态词同现图,这带来了三个挑战:(1)词的歧义性(2)词的同义性(3)动态上下文依存。为了解决这些问题,我们提出了一种新的基于GNN的稀疏结构学习模型用于文档分类。具体地说,文档级图最初是由句子级词同现图的断开并集生成的。模型收集了一组可训练的连接句子间不相连词的边,利用结构学习对动态上下文依赖的边进行稀疏选取。具有稀疏结构的图可以通过GNN联合利用文档中的局部和全局上下文信息。在归纳学习中,将改进后的文档图进一步输入到一个通用的读出函数中,以端到端方式进行图级分类和优化。在几个真实世界数据集上的大量实验表明,提出的模型优于最先进的结果,并揭示了学习每个文档稀疏结构的必要性。https://www.zhuanzhi.ai/paper/63b66dc21199c294e92d3703a5444d25
-
目前,贝叶斯方法难以获得深度学习的好处,贝叶斯方法允许对先验知识进行明确的描述,并准确地捕获模型的不确定性。我们提出了先验数据拟合网络(PFNs)。PFNs利用大规模机器学习技术来近似一组大后验。PFNs唯一要求是能够从监督学习任务(或函数)的先验分布中取样。我们的方法将后验逼近的目标重申为带有集值输入的有监督分类问题:它重复地从先前的任务(或函数)中绘制一个任务(或函数),从中绘制一组数据点及其标签,隐藏其中一个标签,并学习基于其余数据点的集值输入对其进行概率预测。PFNs采用一组新的有监督学习任务的样本作为输入,在学习了近似贝叶斯推理之后,可以对单个正向传播中的任意其他数据点进行概率预测。我们证明PFNs可以近乎完美地模拟高斯过程,也可以对棘手的问题进行有效的贝叶斯推理,与现有方法相比,在多个设置中加速超过200倍。https://github. com/automl/TransformersCanDoBayesianInference. 在过去的十年中,使用深度学习架构的有监督机器学习(ML)方法在具有大量训练数据的机器学习任务上取得了重大进展(Vaswani et al., 2017; He et al., 2016; Krizhevsky et al., 2012)。因此,ML中的一个非常重要的问题是,将这些成功迁移到可用数据较少的小规模设置任务中。在本文中,我们提出了一种利用深度学习模型建立具有灵活和可替换先验的近似后验模型的方法。它使得指定先验就像定义监督学习任务的抽样方案一样简单。先验数据拟合网络(PFNs)的可视化。我们从先前的数据集采样,并在这些数据集的保留样本上拟合PFN。给定一个实际的数据集,我们将它和一个测试点输入PFN,并在单个正向传播中获得贝叶斯推理的近似值。虽然深度学习在大型数据集上的成功可以归因于神经网络近似任何函数的能力,但仍需要对先验知识进行编码,例如通过模型架构(如卷积神经网络(LeCun et al., 1989))或正则化(如数据增强(Hendrycks et al.,2019;Cubuk et al ., 2020)。另外,没有免费的午餐定理表明没有好的方法来解决这类预测问题(Wolpert & Macready, 1997)。因此,针对不同的小规模任务开发了大量专门的算法(LeCun et al., 1989;Kadra等人,2021年;Chen & Guestrin, 2016)。然而,将先验信息编码到机器学习模型中可能是一项挑战。一种明确定义的使模型产生偏差的方法是使用贝叶斯推理。贝叶斯推理的基础是对真实世界应用中出现的数据分布的假设。这一假设产生了对数据遵循特定模型的概率的先验信念。例如,可以实现一个先验,将数据编码为由神经网络(贝叶斯神经网络,(MacKay, 1992))创建的,通过一个多项式,预先定义的编程语言中的高斯混合或随机代码的可能性(Solomonoff, 1997)。在监督学习中使用贝叶斯推理进行预测有以下优点:(1)它有理论基础,使其在先验p(t)符合的情况下有效;(ii)因此可以更好地解释不同事件的实际可能性;(iii)它是很好的校准,(iv)它是可解释的,因为前面描述了模型的期望。然而,在大多数情况下,提取给定先验的后验预测分布是很难的(Blei et al., 2017;MacKay,1992)。图1概述了先验数据拟合网络(PFNs),用于近似贝叶斯模型。我们假设在监督学习任务(或函数)上有一个给定的有代表性的先验分布,这就提供了我们的归纳偏差。为了训练PFN,我们使用有监督学习,用集值输入表示整个数据集: 我们从给定的前一个任务中反复取样一个元训练任务(或函数),从中绘制一组数据点和它们的标签,掩盖其中一个标签,并学习根据其余数据点的集值输入对其进行概率预测。给定一个实际的真实数据集,我们将其与一个测试点作为输入输入PFN,并根据数据集的条件输出测试点的预测分布。正如我们将演示的那样,这种分布近似于贝叶斯后验预测。我们将此步骤称为(贝叶斯)推理,而不是PFN本身的训练。因此,我们的PFNs 使我们能够近似于我们能够采样数据的任何先验的后验预测分布。与贝叶斯推理的其他近似值的标准假设相比,这是一个非常弱的要求(Hoffman et al., 2014; 2013; Jordan et al., 1999)。这允许对大量先验进行简单的近似,包括当前可用工具很难近似的先验。我们的贡献如下:我们提出了架构上的变化,成功地使用Transformer进行后验预测分布(PPD)近似,包括一种用于回归任务的新型预测分布。该方法简单、成本低廉,且普遍适用于大先验集。我们证明PFNs可以比使用NUTS的MCMC或使用Bayes-by-Backprop的SVI更快地逼近高斯过程和贝叶斯神经网络(BNN)的PPD数量级(Blundell等人,2015)。我们证明PFNs可以对现实世界的任务产生影响。(i)我们在PFN上的架构上使用先验实现BNNs, PFNs允许在单个正向传递中调优自由预测,并在小型表数据集的大型基准测试中优于所有基线。(ii)此外,我们发现,简单的书写可以在Omniglot上实现少样本学习(Lake et al., 2015)。
-
通俗的讲:如果一个样本在特征空间中有K个最相似(样本空间中表示挨着最近)的样本,或者其中有大多数属于同一个类别,那么就可以认为该样本属于这个类别。
-
神经网络的研究内容相当广泛,反映了多学科交叉技术领域的特点。主要的研究工作集中在以下几个方面:生物原型从生理学、心理学、解剖学、脑科学、病理学等方面研究神经细胞、神经网络、神经系统的生物原型结构及其功能机理。建立模型根据生物原型的研究,建立神经元、神经网络的理论模型。其中包括概念模型、知识模型、物理化学模型、数学模型等。算法在理论模型研究的基础上构作具体的神经网络模型,以实现计算机模拟或准备制作硬件,包括网络学习算法的研究。这方面的工作也称为技术模型研究。神经网络用到的算法就是向量乘法,并且广泛采用符号函数及其各种逼近。并行、容错、可以硬件实现以及自我学习特性,是神经网络的几个基本优点,也是神经网络计算方法与传统方法的区别所在。
-
典型的ConvNet的架构结构为一系列阶段。前几个阶段由两种类型的层组成:卷积层和池化层。卷积层中的单元被组织在特征图中,其中每个单元通过一组称为滤波器组的权重连接到前一层特征图中的局部补丁。这个局部加权和的结果然后通过一个非线性,比如ReLU。特征图中的所有单元共享相同的过滤器组。层中的不同特征图使用不同的滤波器组。这种架构的原因是双重的。首先,在图像等数组数据中,局部值组通常高度相关,形成易于检测的独特局部图案。其次,图像和其他信号的局部统计对于位置是不变的。换句话说,如果一个主题可以出现在图像的一个部分,它就可以出现在任何地方,因此不同位置的单元共享相同的权重并在阵列的不同部分检测相同的模式。在数学上,特征图执行的过滤操作是离散卷积,因此得名。
-
AR的兴起谷歌推出增强现实平台ARKit和ARCore三星为其Galaxy Note 10和Galaxy S10 5G恢复了飞行时间(ToF)传感器谷歌也在其Pixel 4中的Project Soli对雷达进行了简短介绍苹果在其TrueDepth前置摄像头取得突破后,为最新的旗舰系列机型iPhone 12 Pro和iPad Pro系列产品添加了LiDAR传感器机器学习对于创建高级AR体验是必不可少的基于对AI研究的关注,谷歌在AR的未来中扮演着与苹果、Facebook、Snap以及微软一样重要的角色TF 3D概览提供3D操作和工具TF 3D provides a set of popular operations, loss functions, data processing tools, models and metrics that enables the broader research community to develop, train and deploy state-of-the-art 3D scene understanding models支持3大类3D算法TF 3D contains training and evaluation pipelines for state-of-the-art 3D semantic segmentation, 3D object detection and 3D instance segmentation, with support for distributed training.提供数据集管理功能,提供3大经典数据集使用案例It offers a unified dataset specification and configuration for training and evaluation of the standard 3D scene understanding datasets. It currently supports the Waymo Open, ScanNet, and Rio datasets.3D 稀疏卷积网络稀疏卷积的背景scene that contains a set of objects of interest (e.g. cars, pedestrians, etc.) surrounded mostly by open space, which is of limited (or no) interest. As such, 3D data is inherently sparse