从AlexNet到BERT:深度学习中那些最重要idea的最简单回顾

【论文笔记】—AlexNet—2012-ACM 题目:ImageNet Classification with Deep Convolutional Neural NetworksAlexNet为计算机视觉奠定了基础。AlexNet在ImageNet 2012图像分类竞赛中获得了top-5误差15.3%的冠军成绩,首次将深度学习和卷积神经网络用于大规模图像数据集分类,远远优于第二名(top-5错误率为26.2%)和之前的算法,引起巨大轰动。自此之后,计算机视觉开始广泛采用深度卷积神经网络,模型性能日新月异,并迁移泛化到其它计算机视觉任务。AlexNet采 阅读详情

仅作学术分享,不代表本公众号立场,侵权联系删除

转载于:大数据文摘

本文作者Denny Britz按时间总结的深度学习比较重要的idea集锦,推荐新人看,几乎给自12年以来最重要的idea 都列了出来,这些 idea 可以说得上是养活了无数人,大家都基于这些发了无数的论文,它们依次是:

  • AlexNet 和 Dropout:AlexNet 直接打开了深度学习时代,奠定了之后 CV 里面 CNN 模型基本结构,Dropout 也不用说,都成了基本配置。

  • 深度强化学习的Atari:深度强化学习的开山之作,DQN 之后也是打开了一条新路,大家开始在各种游戏上进行尝试。

  • Seq2Seq+Atten:这个在 NLP 领域的影响没得说,有段时间,甚至都在说任何 NLP 任务都能 Seq2Seq+Atten 来解决,而且这篇其实还为之后纯 Attention 的 Transformer 打下了基础。

  • Adam Optimizer:不多说,训练模型的心头好。

  • Generative Adversarial Networks (GANs):这个也是从14年开始几年里火得一塌糊涂,大家都在搞各种各样的 GAN,直到去年 StyleGAN 这种集大成模型出来,才算是差不多消停。引起各种争议的 Deepfake 是成果之一,最近都有看到人用它做假资料。

  • Residual Networks:和 Dropout,Adam 一样变成了基本配置,模型要深全靠它。

  • Transformers:纯 Attention 模型,直接给 NLP 里的 LSTM 给取代了,而且在其他领域也慢慢取得很好效果,同时也为之后 BERT 预训练模型打下基础。

  • BERT and 精调 NLP 模型:利用可扩展性非常强大的 Transformer,加上大量数据,加上一个简单的自监督训练目标,就能够获得非常强大的预训练模型,横扫各种任务。最近的一个是 GPT3,自从给出 API 后,网络上展现出了各种特别 fancy 的demo,简直了,各种自动补全。

作者会在这里回顾深度学习领域经历时间考验被广泛应用的一些想法,当然不能全面覆盖。即使这样,下面介绍到的深度学习技术,也已经涵盖了理解现代深度学习研究所需的基本知识。如果你是该领域的萌新,那么很好,这会是你一个非常好的起点。

深度学习是个瞬息万变的领域,海量的研究论文和想法可能会令人感觉有点跟不上。就算是经验丰富的研究人员,有时也会很懵圈,很难告诉公司PR真正的突破是哪些。按照“时间是检验真理的唯一标准”,作者在这篇文章回顾了那些经受住时间考验的研究,它们或它们的改进已被反复用在各种研究和应用上,效果也有目共睹。

如果你想看完这篇文章之后就马上入门,那你就想多了。最好的方法是,搞明白和复现下面提到的经典论文,这可以给你打下非常好的基础,而且对你之后看懂最新研究和开展自己项目也会很有帮助。此外,按下面这样时间顺序浏览论文也很有用,可以帮你了解当前的技术从何而来,以及它们最初为何被发明出来。简单来说,作者在这篇文章会总结出尽量少,但涵盖了理解现代深度学习研究所需的大部分基本知识的研究。

关于深度学习,一个特点就是其应用领域,包含了机器视觉、自然语言、语音和强化学习等。而这些领域都用着差不多的技术,比如:一个曾用深度学习搞计算机视觉的人,能很快就在NLP研究中取得成果。即使特定的网络架构有些不同,但概念、方法和代码都是相通的。本文将介绍来自不同领域的一些研究,但进入正题前,需要声明一下:

这篇文章不是为下面提到的研究提供深入详解或代码示例,因为长篇复杂的论文其实很难被总结成一个简短的段落。相反,作者只会简要概述这些技术和相关历史背景,并提供其论文和实现链接。如果你想学有所得,最好在不用现有代码库或高级库的情况下,从头开始用PyTorch复现一遍论文中的实验。

受作者个人知识和熟悉领域的影响,这个列表可能不够全面,因为很多非常值得一提的子领域都没有提到。但大多数人认可的主流领域,包括机器视觉、自然语言、语音和强化学习等就都包括在内了。

而且作者只讨论有可以跑的官方或半官方开源实现的研究。有些工程量庞大而不容易被复现的研究,例如DeepMind的AlphaGo或OpenAI的Dota 2 AI,就不说啦。

一些研究的选择可能有些随意。因为总会有些相似技术在相近时间内被发布出来,而本文目的也不是对其进行全面回顾,而是要向萌新介绍各个领域的各种研究。例如,GAN可能有几百种变体,但无论你要研究哪种,GAN的基本概念都是不可不知的。

2012年:用AlexNet和Dropout处理ImageNet数据集

相关论文:

ImageNet Classification with Deep Convolutional Neural Networks [1]:

https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks

Improving neural networks by preventing co-adaptation of feature detectors[2]:

https://arxiv.org/abs/1207.0580

One weird trick for parallelizing convolutional neural networks [14]:

https://arxiv.org/abs/1404.5997

实现代码:

Pytorch版:

https://pytorch.org/hub/pytorch_vision_alexnet/

TensorFlow版:

https://github.com/tensorflow/models/blob/master/research/slim/nets/alexnet.py

 

插图源:[1]

一般认为,是AlexNet开启了近年来深度学习和人工智能研究的大浪潮。而AlexNet其实就是个基于Yann LeCun早年提出的LeNet 的深度卷积网络。独特之处在于,AlexNet通过结合GPU强大性能和其算法优越而获得了非常大的提升,远远超越之前对ImageNet数据集进行分类的其他方法。它也证明了神经网络的确是有效的!AlexNet也是最早用Dropout[2]的算法之一,也是自此Dropout成为提高各种深度学习模型泛化能力的关键组件。

AlexNet架构是由卷积层,非线性ReLU和最大池化串成的一系列模块,而现在这些都已被大家接受,成为了标准机器视觉的网络结构了。如今,由于像PyTorch这样的库已非常强大,跟最新一些架构相比,AlexNet实现已经非常简单了,现在用几行代码就能实现。值得注意的是,AlexNet的许多实现都用的是它的一个变种,加入了这篇论文One weird trick for parallelizing convolutional neural networks中提到的一个技巧。

2013年:用深度强化学习来打Atari游戏

相关论文:

Playing Atari with Deep Reinforcement Learning [7]:

https://arxiv.org/abs/1312.5602

实现代码:

PyTorch版:

https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html

TensorFlow版:

https://www.tensorflow.org/agents/tutorials/1_dqn_tutorial

插图源:

https://deepmind.com/research/publications/human-level-control-through-deep-reinforcement-learning

基于最近图像识别和GPU的发展,DeepMind成功训练了一个可基于原始像素输入来打Atari游戏的神经网络。而且,同一个神经网络能在不设置任何游戏规则的前提下学会打七种不同的游戏,这也证明了该方法的通用性。

Youtube 视频:

https://www.youtube.com/watch?v=V1eYniJ0Rnk

其中,强化学习与监督学习(如图像分类)的不同之处在于,强化学习的智能体必须在一段时间步(如一盘游戏)中学习最大化奖励总和,而不仅仅是预测标签。由于其智能体是能直接与环境交互的,而且每个行动都会影响下一个行动,因此,训练其数据并不是独立同分布的。这也使得许多强化学习模型的训练很不稳定,但这个问题可以用经验重播(experience replay)等技术来解决。

尽管没有明显的算法创新,但这项研究巧妙结合了各种现有技术,比如在GPU上训练卷积神经网络和经验重播,以及一些数据处理技巧,从而取得了超出大家预期令人印象深刻的结果。这也让人们更有信心去扩展深度强化学习技术,以解决更复杂的任务,比如:围棋,多塔2,星际争霸2等。

而且从这篇论文后,Atari游戏也变成了强化学习研究的测试标准。最初的方法尽管超过了人类的表现,但只能在7种游戏取得这样的表现。而之后几年,这些想法被不断拓展,在越来越多的游戏中击败人类。直到最近,技术才攻克了全部57款游戏并超过了所有人类水平,其中的《蒙特祖玛的复仇》以其需要长期规划著称,被认为是最难攻克的游戏之一。

2014年:编码器-解码器网络加注意力机制(Seq2Seq+Atten模型)

相关论文:

Sequence to Sequence Learning with Neural Networks [4]:

https://arxiv.org/abs/1409.3215

Neural Machine Translation by Jointly Learning to Align and Translate [3]:

https://arxiv.org/abs/1409.0473

代码实现:

PyTorch版:

https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html

TensorFlow版:

https://www.tensorflow.org/addons/tutorials/networks_seq2seq_nmt

插图源:Tensorflow中的开源Seq2Seq框架:

https://ai.googleblog.com/2017/04/introducing-tf-seq2seq-open-source.html

深度学习中很多最让人印象深刻的结果都是和视觉相关的任务,而且由卷积神经网络驱动。尽管NLP领域有通过用LSTM以及编码器-解码器架构在语言模型和翻译上并取得一些成功,但直到注意力机制的出现,该领域才取得真正令人瞩目的成就。

在处理语言时,每个token(可以是一个字符,单词或介于两者之间)都会被喂入一个循环网络(如LSTM)中,该网络会存储先前处理过的输入。换句话说,这就像一个时间序列的句子,每个token代表一个时间步。而这些循环模型在处理序列时很容易“忘记”较早的输入,因此很难处理长距离依赖关系。由于其中梯度要通过很多时间步来传播,这会导致梯度爆炸和梯度消失等问题,所以用梯度下降来优化循环模型也变得困难。

而引入注意力机制有助于缓解该问题,通过直接连接,它为网络提供了一种自适应的能“回顾”较早时间步的方法。这些连接使网络可以决定在生成特定输出时,重要的输入有哪些。简单用翻译来举例子:当生成一个输出词时,通常有一个或多个特定的输入单词被注意力机制选中,作为输出参考。

2014 – Adam 优化器

相关论文:

Adam: A Method for Stochastic Optimization  [12]:

https://arxiv.org/abs/1412.6980

代码实现:

Python版:

https://d2l.ai/chapter_optimization/adam.html

PyTorch版:

https://pytorch.org/docs/master/_modules/torch/optim/adam.html

TensorFlow版:

https://github.com/tensorflow/tensorflow/blob/v2.2.0/tensorflow/python/keras/optimizer_v2/adam.py#L32-L281

Y轴 – 最优解的概率

X轴 – 超参数优化的预算(#模型训练)

来源: http://arxiv.org/abs/1910.11758

神经网络一般是通过用优化器最小化损失函数来进行训练的,而优化器的作用则是搞明白怎么调节网络参数使其能学习到指定目标。大部分优化器都是基于随机梯度下降法(SGD)(https://ruder.io/optimizing-gradient-descent/)来改进。但要指出的是,很多优化器本身还包含可调参数,如学习率。所以,为特定问题找到正确的设置,不光能减少训练时间,而且还能找到更好的损失函数局部最优,这往往也能使模型获得更好结果。

之前,财大气粗的研究室通常要跑特烧钱的超参搜索,来弄出一套给SGD用的学习率调节方案。虽然它能超过之前最好的表现,但往往也意味着要花大量的钱来调节优化器。这些细节在论文里一般不会提的,所以那些没有相同预算来调优化器的贫穷研究员们,就总会被较差的结果卡住,还没办法。

而Adam给这些研究员带了福音,它能通过梯度的一阶和二阶矩来自动调整学习率。而且实验结果证明其非常可靠,对超参的选择也不太敏感。换句话说,Adam拿来就能用,不用像其它优化器那样要进行大量调参。尽管调优后的SGD可能获得更好的结果,但Adam却使研究变得更容易了。因为一旦出现问题时,你就知道应该不太可能是调参引起的问题。

2014/2015- 生成对抗网络(GAN)

相关论文:

Generative Adversarial Networks [6] :

https://arxiv.org/abs/1406.2661

Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks [17]:

https://arxiv.org/abs/1511.06434

代码实现:

PyTorch版:

https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html

TensorFlow版:

https://www.tensorflow.org/tutorials/generative/dcgan

图2:模型样本的可视化。最右边的列显示了最接近训练示例的邻近样本,以证明模型并不是记住训练集。样本是随机抽取的而不是精心挑选的。与深层生成模型的大多数其他可视化不同,这些图像显示的是模型分布中的实际样本,而不是给定隐单元样本的条件均值。而且这些样本是不相关的,因为其采样过程不依赖于马尔可夫链混合,a)MNIST b)TFD c)CIFAR-10(全连接模型) d)CIFAR-IO(卷积判别器和反卷积生成器)

来源:https://developers.google.com/machine-learning/gan/gan_structure

生成模型(例如变分自动编码器,VAE)的目标是生成以假乱真的数据样品,比如不存在的人脸。这里,模型必须对整个数据分布进行建模(很多像素!),而不仅仅是像判别模型一样给猫或狗分类,所以此类模型很难训练。生成对抗网络(GAN)就是这样一种模型。

GAN的基本思想是同时训练两个网络,生成器和判别器。生成器的目标是产生能欺骗判别器的样本,而判别器经过训练,则要分辨真实图像和生成图像。随着训练进行,判别器将变得更善于识别假图片,而生成器也将变得更善于欺骗判别器,产生更逼真的样本,这就是对抗网络之为对抗所在。刚开始的GAN产生的还是模糊低分辨率的图像,而且训练起来相当不稳定。但随着技术进步,类似于DCGAN[17]、Wasserstein GAN[25]、CycleGAN[26]、StyleGAN(v2)[27]等变体和改进都能产生更高分辨率的逼真图像和视频。

2015 – 残差网络(ResNet)

相关论文:

Deep Residual Learning for Image Recognition [13]:

https://arxiv.org/abs/1512.03385

代码实现:

PyTorch版:

https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py

TensorFlow版:

https://github.com/tensorflow/tensorflow/blob/v2.2.0/tensorflow/python/keras/applications/resnet.py

研究者们在AlexNet的基础上,又发明了基于卷积神经网络的性能更好的架构,如VGGNet[28]、Inception[29]等。而ResNet则是这一系列进展中的最重要的突破所在。时至今日,ResNet变体已被用作各种任务的基准模型架构,也被用于更复杂架构的基础。

RseNet之所以特别,除了其在ILSVRC 2015分类挑战赛中获得冠军外,更在于其相比于其他网络架构的深度。论文中提到的网络最深的有1000层,尽管在基准任务上比101和152层的略差些,但仍然表现出色。因为梯度消失问题,训练这样一个深度的网络其实是非常具有挑战的,序列模型也有同样的问题。在此之前,很少有研究者认为训练如此深的网络还能有这么稳定的结果。

ResNet使用捷径连接的方式来帮助梯度传递。一种理解是,ResNet仅需要学习从一层到另一层的“差分”,这比学习一个完全转换要简单些。此外,ResNet中的残差连接算是Highway Networks[30]的一种特殊情况,而Highway Networks 又受到了LSTM里门控机制的启发。

2017 - Transformers

相关论文:

Attention is All You Need [5] :

https://arxiv.org/abs/1706.03762

代码实现:

PyTorch版:

https://pytorch.org/tutorials/beginner/transformer_tutorial.html

TensorFlow版:

https://www.tensorflow.org/tutorials/text/transformer

HuggingFace Transformers库:

https://github.com/huggingface/transformers

图1:Transformer – 模型架构

来源:https://arxiv.org/abs/1706.03762

Seq2Seq+Atten模型(前面已经介绍过了)性能很好,但由于它的递归特性,导致需要按时序计算。所以很难并行,一次只能处理一步,而每一步又取决于前一个。这也使得它很难用在长序列数据上,即使有注意力机制,仍然难以对复杂的长距离依赖关系进行建模,而且其大部分工作还是在递归层里实现的。

Transformers直接解决了这些问题,丢掉了递归部分,取而代之的是多个前馈的自注意力层,并行处理所有输入,并在输入与输出之间找到相对较短(容易用梯度下降优化)的路径。这使得它的训练速度非常快,易于扩展,并且能够处理更多的数据。为了加入输入位置信息(在递归模型中是隐式的),Transformers还用了位置编码。要了解有关Transformer工作原理的更多信息,建议阅读这个图解博客。

(http://jalammar.github.io/illustrated-transformer/)

如果仅仅只是说Transformers比几乎所有人预期的表现都要好,那简直就是对它的侮辱。因为在接下来的几年里,它不光表现更好,而且还直接干掉了RNN,成为了绝大多数NLP和其他序列任务标准架构,甚至还用在了机器视觉上。

2018 – BERT和精调的NLP模型

相关论文:

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding [9]:

https://arxiv.org/abs/1810.04805

代码实现:

微调BERT的HuggingFace实现:

https://huggingface.co/transformers/training.html

预训练指训练一个模型来执行某个任务,之后用学到的参数来作为初始化参数来学习一个相关任务。这个其实很直观,一个已经学会分类猫或狗图像的模型,应该已经学会了一些关于图像和毛茸茸动物的基础知识。当这个模型被微调用来对狐狸进行分类时,可以预计它比一个从头开始学习的模型更好。同样,一个学会了预测句子中下一个词的模型,应该已经学会了一些关于人类语言模型的知识。那么它的参数对于相关任务(如翻译或情感分析)也会是一个很好的初始化。

预训练和微调已经在计算机视觉和NLP领域取得了成功,虽然在计算机视觉中其早已成为标准,但如何在NLP领域更好的发挥作用似乎还有些挑战。大多数最佳结果仍然出自完全监督模型。随着ELMo [34], ULMFiT [35]等方法出现,NLP研究者终于也能开始做预训练的工作了(之前词向量其实也算),特别是对Transformer的应用,更是产生了一系列如 GPT和BERT的方法。

BERT算是预训练比较新的成果,很多人认为它开创了NLP研究新纪元。它没有像大多数预训练模型一样,训练预测下一个单词,而是预测句子中被掩盖(故意删除)的单词,以及两个句子是否相邻。注意,这些任务不需要标注数据,它可以在任何文本上进行训练,而且可以是一大堆文本! 于是预训练好的模型,就能学会了一些语言的一般属性,之后就可以进行微调了,用来解决监督任务,如问答或情感预测。BERT在各种任务中的表现都非常好,出来就屠榜。而像HuggingFace这样的公司也坐上浪头,让用于NLP任务的微调BERT模型变得容易下载和使用。之后,BERT又被XLNet[31]和RoBERTa[32]以及ALBERT[33]等新模型不断传颂,现在基本上整个领域人都知道了。

2019/2002及未来 –BIG语言模型,自监督学习

纵观整个深度学习的历史,最明显的趋势或许就是 Sutton 说的 the bitter lesson(苦痛的一课)。如里面说的,能够利用更好并行(更多数据)并且有更多模型参数的算法,能一次又一次地战胜一些所谓 "更聪明的技术"。这种趋势似乎到2020年还在持续,OpenAI的GPT-3模型,一个拥有1750亿参数的庞大语言模型,尽管其训练目标和架构都很简单,但却表现出了意想不到的泛化性(各种效果非常好的demo)。

有着同样趋势的还有contrastive self-supervised learning等方法,如SimCLR(https://arxiv.org/abs/2002.05709),它能更好的利用无标签数据。随着模型变得越来越大,训练速度越来越快,也让能有效利用网上的大量无标注数据集,学习可迁移通用知识的技术正变得越来越有价值。

相关报道:

https://dennybritz.com/blog/deep-learning-most-important-ideas/

参考文献

[1] ImageNet Classification with Deep Convolutional Neural Networks

Alex Krizhevsky, Ilya Sutskever, Geoffrey E Hinton (2012)

Advances in Neural Information Processing Systems 25

end

wasserstein 距离(原理+Pytorch 代码实现) 1.原理 1.1 原论文 最初应用在生成模型上 《Wasserstein GAN》: https://arxiv.org/abs/1701.07875 1.2 全面介绍 https://zhuanlan.zhihu.com/p/25071913 1.3 优点 Wasserstein距离相比KL散度、JS散度的优越性在于,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的远近。 2.代码 import torch import torch.nn as nn # Adapted from h 阅读详情

相关推荐

CV的未来究竟是ConvNeXt 还是Transformer?

2012年,AlexNet横空出世,推动深度学习快速发展,带动AI的第三波浪潮,转眼已经十年弹指一挥间。https://subscription.packtpub.com/book/data...

迈微AI研习社 · 号主 530

ViT模型——pytorch实现

【代码】ViT模型——pytorch实现。

Peach_____的博客 3374

FPGA防抄板实战:如何利用Xilinx芯片的“身份证”(DNA)实现你的加密锁?

本文深入探讨了如何利用Xilinx FPGA芯片的DNA(Device Native Authentication)功能实现硬件级加密保护,防止设计被抄袭。文章详细解析了DNA的物理实现、获取方式,并提供了从DNA到加密密钥的转换方法,以及构建商业级加密防护系统的实战方案。通过JTAG和原语两种读取方式的对比,帮助开发者选择最适合的方案。

weixin_42548829的博客 384

如何在6GB显存下实现专业级视频画质增强:SeedVR2-7B实战解析

你是否曾为低分辨率视频素材无法满足平台高清要求而烦恼?是否因为硬件限制而无法处理流畅的高帧率视频?SeedVR2-7B的出现为你带来了革命性的解决方案。这款基于扩散对抗训练的一步式视频修复模型,仅需6GB显存就能实现专业级的超分辨率放大与智能补帧功能,让普通创作者也能拥有专业级的视频处理能力。 ## 识别视频创作中的常见挑战 在开始使用SeedVR2之前,让我们先了解视频创作中普遍存在的几个问

gitblog_00022的博客 771

逆向攻防世界CTF系列40-ReverseMe-120

注意sub_401000main中只传了两个参数,但是跟进后发现四个(可能是隐式传递,放在寄存器里传递了),调试发现a4是输入长度,与最终的you_know_how_to_remove_junk_code比较的是v12(但是并没有被传入),开始怀疑是不是隐式传递了。_mm_xor_si128用于计算128位(16字节)的按位异或,然后通过v14控制循环结束的条件,可以看到v14增长的步长为16,而且通过上面得到的flag值解码得到的字符串为32个字节大小,正好是16的整数倍。

LH1013886337的博客 1411

CATIA P3 V5-6R2023在Windows 11 23H2上的稳定安装与系统级配置指南

CATIA是高端制造业核心的三维参数化设计平台,其运行依赖严格的系统底层支撑。理解CATIA的BRep几何内核原理与Windows子系统(如WSL、Hyper-V)的协同机制,是保障建模稳定性与计算精度的技术前提。CATIA Run-Time Library和OpenGL硬件加速能力共同决定了曲面重建、螺纹建模等关键操作的可靠性;而.NET Framework 3.5、VC++ 2022运行库及显卡Studio驱动的精准匹配,则构成工业软件在Win11环境落地的工程基础。本文聚焦于航空、轨交、能源等领域高频

weixin_30983353的博客 644

ViT笔记以及其Pytroch实现

目前在NLP领域,transformer已经占据主导地位。不少学者尝试将attention和CNN相结合,这些方法往往依赖于CNN,其性能相较于常见的卷积网络如ResNet等还是有差别。在NLP领域,使用transformer时,当不断增加模型大小和数据集数量,模型性能没有出现饱和趋势。同样的在CV领域,当数据量较小时,使用transformer有时并不比常见卷积性能好。但当数据集数量不断变大,transformer性能不断提高,甚至超过常见卷积模型。本片论文介绍的方法主要是用来进行分类的。

qq_43428929的博客 973

Unity URP管线下的Highlight Plus插件,从导入到实现物体高亮的保姆级避坑指南

本文详细解析了在Unity URP管线中使用Highlight Plus插件实现物体高亮的完整流程与常见问题解决方案。从URP环境配置、插件导入避坑到相机设置优化,提供了一套完整的保姆级指南,帮助开发者高效解决高亮效果不显示等典型问题,并包含移动端性能优化与复杂场景管理的高级技巧。

weixin_27379781的博客 408

PyTorch对WGAN(Wasserstein生成对抗网络)的实现

WGAN的了解与操作

深度学习领域优质创作者,优快云博客专家 3414

Sigrity Power DC Package Multi-Resistor Compact ET Model Extraction模式提取封装基板电热阻模型

DIE(定义DIE的参数):material设置为silicon(硅),Attach material(贴片的材料,设置为Die Attach),Attach thickness(贴片的材料的厚度,厚度设置为0.001mm,点击ok。Cap为覆盖材料,Material定义材料类型,thickness定义厚度,length和width定义长宽,Adhesive Material为胶的材料,Adhesive Material为胶的厚度,本例不定义,跳过即可。

weixin_54787054的博客 440

新手友好!C#上位机调用YOLO实现设备异常检测(详细步骤,附踩坑指南)

C#上位机调用YOLO实现设备异常检测,核心是把“工控交互”和“AI检测”的优势结合起来,新手不用追求一步到位,先跑通基础流程,再逐步优化性能和功能。我当初也是从踩坑中过来的,只要把核心链路和细节摸透,其实门槛并没有想象中高。如果你们在实操中遇到了具体问题(比如相机取流卡顿、模型推理报错),可以在评论区留言,后续我也可以针对性拆解具体模块的完整代码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 670

1.一脚踹进ViT——Pytorch搭建ViT框架

一脚揣进ViT系列

qq_45807235的博客 3439

使用openclaw出现blocked URL fetch (url-fetch) reason=Blocked: resolves to private/internal/special 解决方案

本文主要介绍了使用openclaw出现blocked URL fetch (url-fetch) target=https://news.google.com/search reason=Blocked: resolves to private/internal/special-use IP address 解决方案,希望能对使用xx的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

从AlexNet到BERT,深度学习这些年那些超重要的idea回顾总结

本文作者Denny Britz按时间总结的深度学习比较重要的idea集锦,推荐新人看,几乎给自12年以来最重要的idea 都列了出来,这些 idea 可以说得上是养活了无数人,大家都基于这...

weixin_40920183的博客 284

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟卷1及答案解析)

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟卷1及答案解析)

王老师青少年编程 2028

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【读论文】深度学习重要论文精读(图像领域)

通过对一系列论文的回顾与重读,即使泛泛而读,也深知近些年来视觉领域变化之快,而很多三四年前的工作,我至今才开始精度理解,属实惭愧;尝试在阅读过程中闭目思考,结合如今的认知,很多东西的发展也并非一蹴而就,都是普通人有迹可循的,但如何讲好故事,做好实验,让别人理解,其中有大学问;泛读了行业内近些年的主流论文,下面会结合具体的任务或者更进一步的方向做进一步探索,希望能渐渐赶上发展的方向,做到胸中自有丘壑;

Vehicle_jyw的博客 1319

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

PyTorch图像分类系列——ViT

ViT模型讲解和代码。内容包括模型结构、Patch Embedding、[class] Embedding、位置编码、Transformer Encoder、MLP Head等。

weixin_48633207的博客 2730

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Wasserstein距离-原理及python实现

Wasserstein距离-原理及python实现

枫的博客 6658

【ViT系列(2)】ViT(Vision Transformer)代码超详细解读(Pytorch)

ViT(Vision Transformer)代码超详细解读

路人贾的博客 1万+

GAN讲解

GAN:Generative Adversarial Nets GAN 思路:一个生成器,一个判别器 GAN分析问题: 解释这个目标函数: 具体的训练过程: 还不懂?没关系 再看个具体的图例: 生成器generator: 判别器discriminator 还不懂?没关系,看具体代码: 生成人脸图像: 在这里插入代码片 ```class GAN(keras.Model): def __init__(self, discriminator, generator, latent_dim):

weixin_40440610的博客 274

ViT的极简pytorch实现及其即插即用

ViT的极简pytorch实现

qq_36563273的博客 1438

ImageNet Classification with Deep Convolutional Neural Networks(AlexNet论文翻译(附原文))

AlexNet论文翻译(附原文)

cyf1294311560的博客 2835
上一篇: 思考 | 重返研一,你会怎么过?
下一篇: 总结!Github年度最强Python库排行榜
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值