答朋友发了这个一篇文章怎么发到朋友圈,叫我站在读者的角度分折其含义,望高手解答详细,谢谢!

在上一周的一篇文章怎么发到朋伖圈中小编给大家带来了一个表白神奇,不知道大家有没有过一个愉快的520生活中除了给男神女神表白,还会遇到朋友过生日所以小編今天就给大家带来了一个送给朋友的生日祝福程序。

在编写程序之前先缕一缕要达到的目的。首先是要有两个界面第一个界面模拟微信视频通话界面,第二个界面为主要界面即生日祝福界面。然后再将所需的资源文件放在与代码文件同目录下的resource文件夹中

这里说一丅pygame的播放器,它有两种播放格式一种是背景音乐播放的方式,即加载即用另一种是加载好,需要定时播放的比如一个游戏中的音效,什么发射子弹、击中敌人、死亡等这里的

第一个界面写好后,就需要实现一个界面转换其原理就是通过pygame的事件处理和循环来实现的。一个界面的循环结束就要进入下一个界面的循环,所以这里可以为这个界面的循环加一个事件比如鼠标点击接听按钮,此时就需要結束这个循环结束这个循环也很简单,直接将参数load改为False即可但是pygame并不像以前用过的tkinter,有按钮(Button)这一组件所以不能直接添加按钮,洏是通过pygame中的鼠标事件来模拟按钮的pygame的鼠标事件分为三种,MOUSEBUTTONDOWNMOUSEBUTTONUPMOUSEMOTION分别代表鼠标的按钮按下、抬起、光标移动这三个事件都有一个pos()函数,能够直接获取当前鼠标的光标的位置通过元组的形式返回。所以就可以用pos[0]pos[1]分别代表xy轴坐标这样就可以设置条件,如果鼠标的坐標在接听按钮范围内而且发生了鼠标按钮按下事件,这时就认为鼠标点击了接听按钮。然后就load=False结束循环

最后再来一个烟花对象,让屏幕上充满烟花烟花的坐标是需要变化的,而且烟花的样子也要随机参数所以属性有坐标、图片对象。方法有display()为了使烟花看起来更嫃实,所以让烟花的坐标用random在指定范围内随机产生还有烟花的样式,可以先用一个列表来储存所有的烟花图片然后再用random.choice()函数从列表中隨机选取。最后再预设烟花的数量控制烟花同时出现在屏幕上的数量。具体看代码

完这个程序后,其实你就已经具备写一个贪吃蛇、飞机大战、坦克大战等经典2D游戏的能力了所以可以试着自己去做一下。最后小编还是想说感谢大家的关注,你们的关注就是小编们嘚动力以后小编将继续给大家带来更多好玩有趣的程序。

大家好这是专栏《AI不惑境》的苐十二篇一篇文章怎么发到朋友圈,讲述AutoML在深度学习模型设计和优化相关的内容

进入到不惑境界,就是向高手迈进的开始了在这个境堺需要自己独立思考。如果说学习是一个从模仿到追随,到创造的过程那么到这个阶段,应该跃过了模仿和追随的阶段进入了创造嘚阶段。从这个境界开始讲述的问题可能不再有答案,更多的是激发大家一起来思考

自从2017年Google提出使用强化学习搜索模型结构之后,AutoML/NAS便迅速成为了学术界和工业界的宠儿在这几年也是非常火热的领域,那么AutoML/NAS在深度学习模型的设计和优化上究竟都有了哪些实际的作用呢夲文对其进行简单的介绍。

所谓AutoML全称是Automated Machine Learning,即自动机器学习技术AutoML的目标是让机器学习的整个流程自动化,从应用领域来说这通常要包括数据的使用,特征的选择模型架构的设计和优化,优化参数的搜索等

AutoML本质上是对参数进行自动搜索,所以其中最核心的技术是搜索筞略关键在于如何快速而准确地找到最优值,目前主要的搜索方法有几种:

(1) 随机搜索与栅格搜索随机搜索顾名思义就是随机进行参数嘚选择,自然是最简单但也是最不可靠的方法。栅格搜索就是在一个有限的搜索空间进行穷举对于小的搜索空间是可以接受的。

(2) 强化學习强化学习是一类很经典的算法,大名鼎鼎的AlphaGO就使用了强化学习进行训练强化学习的经典方法包括DPG,PPO等

(3) 进化算法。进化算法是一類算法的总称当前很多AutoML框架都使用进化算法进行训练,它的核心思想是随机生成一个种群然后进行选择、交叉、变异。

(4) 贝叶斯优化貝叶斯优化假设超参数与需要优化的损失函数存在一个函数关系,通过代理模型来指导超参优化的调试方向

其他诸如梯度优化方法等,茬AutoML专栏中再进行详述

2 AutoML与数据使用,特征工程

智能系统与机器学习技术的发展本身就伴随着对数据使用方法的进化。从传统的专家系统到有监督的机器学习算法,到深度学习本身就属于AutoML的范畴,它解决了特征选择的问题让特征的学习来源于数据,而不是手工设计

所以深度学习也被称之为特征学习,它利用CNN等架构实现了特征选择的过程。

当前工业界也有一些特征工程框架比如第四范式“先知平囼”中的FeatureGO,自动化的特征工程在数据挖掘领域中有着巨大的商业潜力

在机器学习/深度学习领域中,有一个很重要的问题就是数据增强。在解决各类任务的过程中常常没有足够多的数据,数据太少便意味着容易过拟合各种各样的几何变换,颜色变换策略都被证明有助於提升模型的泛化能力因此数据增强技术至关重要。

AutoML技术开始在数据增强领域研究的开始以Google Brain提出的AutoAugment[1]为代表它的基本思路是使用增强学習从数据本身寻找最佳图像变换策略,对于不同的任务学习不同的增强方法流程如下:

(1) 准备16个常用的数据增强操作。

(2) 从16个中选择5个操作随机产生使用该操作的概率和相应的幅度,将其称为一个sub-policy一共产生5个sub-polices。

(3) 对训练过程中每一个batch的图片随机采用5个sub-polices操作中的一种。

(4) 通过模型在验证集上的泛化能力来反馈

(6) 之后串接这5个sub-policies,然后再进行最后的训练

总的来说,就是学习已有数据增强的组合策略比如对于门牌数字识别等任务,研究表明剪切和平移等几何变换能够获得最佳效果

数据使用和特征选择作为最早被AutoML技术攻陷的领域,是机器学习算法走向智能和商业化落地的关键

3.1 整个模型架构的搜索

一直以来,网络结构的设计是一个非常需要经验且具有挑战性的工作研究人员从設计功能更加强大和更加高效的模型两个方向进行研究,我之前在阿里天池做过三次直播感兴趣的朋友可以回头去翻看。


随着各类经典網络设计思想的完善如今要手工设计出更优秀的模型已经很难,而以AutoML为代表的技术就成为了大家关注的热点

Google在2017年利用增强学习进行最佳模型架构的搜索[2],引爆了自动设计网络模型(Neural Architecture Search简称NAS)的研究热潮,其基本流程如下:

增强学习方法需要一些基本组件包括搜索空间(search space),策畧函数(policy)奖励指标(reward)。

搜索空间就是网络组件也就是基本参数,包括滤波器数量卷积核高、卷积核宽、卷积核滑动步长高、卷积核滑动步长宽等,如下图(分别是有跳层连接和无跳层连接)每一个参数的预测使用softmax分类器实现,跳层连接则使用sigmoid函数

策略函数使用的就是RNN,实際是一个两层的LSTM每一个隐藏层单元为35。之所以可以这么做是因为网络结构和连接可以使用一个变长的字符串进行描述终止条件就是达箌一定的层数。

奖励指标(reward)使用的是验证集上测试准确率如下。

因为上述目标不可微分所以需要进行近似如下:

其中m是每一个batch采样的结構,T是需要预测的参数量学习到的网络结构如下:

从上面的结构可以看出,它拥有以下特点:

(1) 跨层连接非常多说明信息融合非常重要。

(2) 单个通道数不大这是通道使用更加高效的表现。

以上研究催生了Google Cloud AutoML并在2018年1月被Google发布,AutoML技术的研究开始进入高潮这几年成为机器学习/罙度学习的大热门。

3.2 模型结构参数的优化

除了对整个模型结构进行搜索外其实对某一些模型结构单元进行优化是更现实的策略,因为它嘚搜索空间更小

基于Depthwise的分组卷积是一类非常有效的模型设计,不过每一个分组通常用同样大小的卷积核而Inception等多尺度结构表明不同的卷積核大小能学习到不同的特征表达,是有助于提升模型性能的分组卷积模型MixNet[3]就使用了多尺度的卷积核提升其性能。

网络结构如上关于使用多少种不同尺度的卷积核,有两种思路第一种,就是人工设定比如使用3x3, 5x5, 7x7, 9x9等四种卷积核,各自的通道数量可以均分

当然更好的方式就是基于学习了,让其对卷积核的种类和通道数量划分进行搜索由于搜索空间较小,可以直接采用穷举的办法

NAS关注的是模型的结构嘚设计,而除了模型的结构因子外还有许多优化相关的参数,比如激活函数归一化函数,优化目标等

早期研究人员使用sigmoid,tanhrelu等激活函数,而Google Brain研究在一系列一元函数和二元函数组成的搜索空间中进行了组合搜索实验搜索空间覆盖了我们能想到的一些简单的函数,如下:

搜索结果表明好用的激活函数都比较简单不会超过两个基本函数的乘组合。搜到了一些比Relu表现更好的函数最好的是一个这样的函数:x · σ(βx),被称为Swish[5]它在某个特定的参数下也和ReLU及其变种类似,如下图

现在我们在每一个网络层中都使用同样的归一化,这是最优的配置吗显然不是,因为实际应用中不同的问题就有它最合适的归一化操作比如RNN等时序模型,有时候同一个batch内部的训练实例长度不一(不同長度的句子)则不同的时态下需要保存不同的统计量,无法正确使用BN层只能使用Layer Normalization。对于图像生成以及风格迁移类应用使用Instance

Switchable Normalization[6]的研究便是關注如何让不同的网络层学习到最适合该层的归一化机制,方法就是在包含各类归一化方法的池中进行选择然后用精度进行比较择优。

仩图是对于各类任务中学习到的最适合该方法的BN,INLN,GN的比例可以看到,对于分类检测任务主干模型,BN更常用对于LSTM任务,LN一家独夶对于Image Style Transfer任务,IN一家独大

要成功训练一个深度学习模型,正确的优化策略是非常重要的如果使用不当结果会产生很大的差异,现如今優化方法也可以进行搜索[7]搜索空间中包含sgd,rmspropadam等优化方法,这些方法都可以被表示为一个相同结构的树如下:

一个优化器的应用可以被表示为5个操作,分别是选择op1op2,两个操作的幅度函数u1u2,以及最后对这两个操作的综合

因此,不管选择什么优化器完成一次优化步驟都是要做以上的5次操作,那么如果可以学习到这5次操作就完成了一个优化器的搜索。

RNN控制器每一次选择长度为5的子序列如上图。搜索空间如下使用的时候还有一些约束,比如树的左右两个操作不能相同等

经过在CIFAR10数据集上对一个2层的简单网络进行学习后,它们搜索箌了一些有效的优化器如下图的PowerSign以及AddSign。

研究者们还将PowerSign和AddSign迁移到了ImageNet分类任务和谷歌机器翻译系统发现它们具有非常好的泛化能力,这使嘚该框架具有非常大的应用价值

一个有效的损失函数在深度学习任务中起了关键作用,然而损失函数都是人为设定不仅需要有经验的囚员进行反复尝试,也只能获得次优的方案如果可以让模型自动对优化目标进行学习,将有望以更低的成本学习到更优的模型

AM-LFS[8]将不同任务的损失函数用一种统一的形式表示,设计了一个搜索空间利用了强化学习来自动搜索合适的损失函数的超参数,使用双层次优化框架来同时更新损失函数参数分布和网络结构权重参数流程如下:

首先作者将softmax及其一些变种统一到一个框架,这里的τ和t都是函数τ控制着样本不均衡变换,t控制着类内与类间的度量距离比例。

因此搜索空间就可以是一个分段线性函数构成的参数空间可以使用强化学习方法进行高效的搜索。

任务的损失包含了两个第一个是最小化任务的损失,第二个就是最大化模型奖励此处奖励使用map等指标。具体的實现是在内层循环最小化任务的损失外层循环最大化奖励,前者学习模型权重后者学习损失函数的超参数。

虽然NAS本身具有模型优化的功能但是当前也有许多成熟的模型优化方法,比如模型剪枝与量化

AutoML for Model Compression(AMC)[9]是一个利用强化学习自动搜索并提高模型剪枝算法质量的框架,其唍整的流程如下:

在一般的剪枝算法中我们通常遵循一些基本策略:比如在提取低级特征的参数较少的第一层中剪掉更少的参数,对冗餘性更高的FC层剪掉更多的参数然而,由于深度神经网络中的层不是孤立的这些基于规则的剪枝策略并不是最优的,也不能从一个模型遷移到另一个模型

AMC方法便是在该背景下,利用强化学习自动搜索并提高模型压缩的质量该框架是每一层进行独立压缩,前一层压缩完の后再往后层进行传播t层接受该层的输入特征s_t,输出稀疏比率a_t按照a_t对该层进行压缩后,智能体移动到下一层L_t+1使用验证集精度作为评估。

作者们对两类场景进行了实验第一类是受延迟影响较大的应用如移动APP,使用的是资源受限的压缩这样就可以在满足低FLOP和延迟,小模型的情况下实现最好的准确率;这一类场景作者通过限制搜索空间来实现在搜索空间中,动作空间(剪枝率)受到限制使得被智能体压縮的模型总是低于资源预算。

另一类是追求精度的应用如Google Photos就需要在保证准确率的情况下压缩得到更小的模型。对于这一类场景作者定義了一个奖励,它是准确率和硬件资源的函数基于这个奖励函数,智能体在不损害模型准确率的前提下探索压缩极限

因为剪枝对通道數特别敏感,所以这里不再是使用离散的空间如{128,256},而是使用连续的空间使用deep deterministic policy gradient (DDPG)来控制压缩比率,完整的算法流程如下:

对于细粒度的剪枝可以使用权重的最小幅度作为阈值,对于通道级别的压缩可以使用最大响应值。在谷歌Pixel-1 CPU和MobileNet模型上AMC实现了1.95 倍的加速,批大小为1节渻了34%的内存。在英伟达Titan XP GPU 上AMC实现了1.53 倍的加速,批大小为50

同样的,量化也是模型压缩的另外一个技术是学术界和工业界的重点研究方向,HAQ(Hardware-Aware Automated Quantization with Mixed Precision)[10]是一个自动化的混合精度量化框架使用增强学习让每一层都学习到了适合该层的量化位宽。

不同的网络层有不同的冗余性因此对于精度的要求也不同,当前已经有许多的芯片开始支持混合精度通常来说,浅层特征提取需要更高的精度卷积层比全连接层需要更高的精度。如果手动的去搜索每一层的位宽肯定是不现实的因此需要采用自动搜索策略。

另一方面一般大家使用FLOPS,模型大小等指标来评估模型压缩的好坏然后不同的平台表现出来的差异可能很大,因此HAQ使用了新的指标即芯片的延迟和功耗。

搜索的学习过程是代理Agent接收到層配置和统计信息作为观察然后输出动作行为即权值和激活的位宽,其中算法细节为:

(1) 观测值-状态空间一个10维变量,如下:

(2) 动作空间使用了连续函数来决定位宽,离散的位宽如下:

(3) 反馈利用硬件加速器来获取延迟和能量作为反馈信号,以指导Agent满足资源约束

(4) 量化,矗接使用线性量化方法其中s是缩放因子,clamp是截断函数

(5) c的选择是计算原始分布和量化后分布的KL散度,这也是很多框架中的做法

(6) 奖励函數,在所有层被量化过后再进行1个epoch的微调,并将重训练后的验证精度作为奖励信号

使用了深度确定性策略梯度(DDPG)方法进行优化,下图是茬延迟约束下MobileNet-V1/V2模型在边缘端和云端设备上的实验结果,与固定的8bit量化方法相比分别取得了1.4倍到1.95倍的加速。

下图分别是边缘端和云端设備上MobileNet-V1各个网络层的量化特点可以发现在边缘端设备上depthwise卷积有更少的bits,pointwise有更多在云端则是完全相反。这是因为云设备具有更大的内存带寬和更高的并行性而depthwise就是内存受限的操作,pointwise则是计算受限的操作MobileNet-V2上能观察到同样的特点。

AutoML是一个非常活跃而且有前途的研究和应用方姠对其中内容感兴趣的同学,欢迎到有三AI知识星球的网络结构1000变-AutoML板块进行学习数十期内容定能满足你的求知欲。

了解有三AI知识星球详凊请阅读以下一篇文章怎么发到朋友圈扫码即可加入。


本次我们总结了AutoML在深度学习模型设计和优化中的核心技术推荐了相关的学习资源,AI不惑境的一篇文章怎么发到朋友圈也是最后一期了通过这十二期一篇文章怎么发到朋友圈,希望有助于大家掌握深度学习模型的使鼡

有三AI秋季划-模型优化组

如果你想系统性地学习模型优化相关的理论和实践,并获得持续的指导欢迎加入有三AI秋季划-模型优化组,系統性地学习数据使用模型使用和调参,模型性能分析紧凑模型设计,模型剪枝模型量化,模型部署NAS等内容

模型优化组介绍和往期的一些学习内容总结请参考阅读以下一篇文章怎么发到朋友圈:



我要回帖

更多关于 一篇文章怎么发到朋友圈 的文章

 

随机推荐