为什么在腾讯应用宝安装apk失败里下的劲舞团安装失败

您的位置: →
→ 应用宝 相关合集
应用宝版本大全_应用宝有几个版本?应用宝所有版本下载
应用宝软件版本大全是绿娘小编为用户打造而成,在线收录了应用宝软件历史版本和最新版本,应用宝新版本旧版本下载就来本专题,本专题为您提供应用宝ios、安卓、电脑、ipad、mac等所有设备下载,并提供新老版本下载!为用户推送了海量最新的应用、游戏下载资源,所有应用均提供免费下载服务。安全、无毒,是玩机必备的下载神器!应用宝提供的移动应用软件和服务经过严格的软件测试、病毒扫描,运营人员为用户提供多种应用榜单和推荐,保证每位用户获得安全、优质的移动应用软件和服务。
应用宝2017最新版是腾讯应用中心倾力打造的手机应用商店,致力于为用户提供丰富、优质、安全、个性化的安卓软件游戏资源和一站式的下载管理
应用宝苹果版是专为苹果手机用户打造的手机应用下载获取工具。软件功能强大,提供海量的苹果应用、游戏下载。应用宝中的所有软件和游戏都经
应用宝版阴阳师手游将阴阳师的真谛完美的诠释在了游戏情节与游戏过程中,玩家能够在游戏中通过不同副本,不同人物故事情节,感受阴阳师们为
腾讯版永恒纪元戒是一款大型魔幻风格的RGB手游,游戏画风及其炫酷,提供了战士、弓箭手、法师三大职业供你选择,每个职业都有自己的必杀技,
应用宝旧版本是一款手机软件平台,用户可以通过该应用寻找并下载自己喜欢的安卓软件、游戏等,避免下载到不安全的应用,方便地大家的工作娱
开心消消乐应用宝版是一款火热的消除类手机游戏,在传统的消除玩法上新加入特效色块、魔力鸟等全新玩法,让这款简单的消消乐游戏变得更加有
应用宝HD版是腾讯公司专为AndroidPad安卓平板电脑打造的一款应用下载平台,致力于为用户提供丰富安全的应用资源和覆盖应用整个生命周期的一
腾讯应用宝ipad版是一款提应用下载的工具。为用户推送了海量最新的应用、游戏下载资源,所有应用均提供免费下载服务。安全、无毒,是玩机必
应用宝电脑版是腾讯公司推出的运行在PC端的安卓应用管理工具,免费提供海量应用、游戏等资源的下载,还可以管理手机中的应用程序,并且支持
倩女幽魂应用宝版本是一款大型玄幻手游,千年光阴,十世流转,因鬼界与天界之争打破清浊平衡,人间遭难,玩家们需要匡扶正义,灭魔救世,还
应用宝2016最新版由绿色资源网为您提供,您可以直接在本站下载应用宝的最新版本,来体验到全新的应用界面和更加丰富的下载资源,有需求的朋
崩坏3腾讯版是一款二次元动作手游,给你最畅爽的连击体验,堪比街机的动作连招,无限连击等,游戏画面精美,动作打击感超真实,还等什么,快
应用宝6.0内测版是一腾讯官方出品的手机应用商店,此次内测版对大量内容进行了更新,告别以往的单一下载模式,看电影、寄快递、叫外卖、上门
时空猎人腾讯应用宝高清版是一款劲爆的格斗手游,游戏打斗效果华丽逼真,动作设计行云流水,连招技能炫酷十足,带给玩家极致的格斗快感,感
口袋妖怪vs应用宝版是一款口袋妖怪系列的最新手游作品,玩家们在游戏中可以变身口袋妖怪训练师,捕捉各种各样的小精灵,还有各种比赛等待你
应用宝mac是由腾讯出品的一款安卓应用下载中心,这里提供了海量正版应用及游戏,全部免费下载,还可以直接通过该软件管理手机应用的安装、卸
英魂之刃应用宝版是一款掌上moba手游大作,由网龙打造的英魂之刃口袋版,3V3、5V5、7V7等多种游戏模式等你来体验。游戏画面精美,是大家开黑
应用宝是腾讯应用中心专为智能手机用户打造的应用获取平台。具有短信、联系人、应用添加删除、零流量传送等功能。应用宝绿色版可以轻松便捷
问道应用宝版是支持QQ微信账户登录的文斗手游版本,应用宝版信服俩及福利礼包多多,新区特色多多,亿万玩家同时在线继承端游玩法亮点,给你
倚天屠龙记腾讯版手游是一款精品的武侠手游作品,在这里对倚天屠龙记武侠的经典进行了延续,其唯美的画风、流畅的动作、爽快的打击感...都为
究极数码暴龙应用宝版是一款超人气的二次元动漫手游,这款游戏是根据经典动漫数码暴龙改编而来。相信大家对动漫数码暴龙都非常的热爱,那么
列王的纷争应用宝版是一款策略国战手游,全球玩家同服竞技,感受战斗的魅力,各色兵种搭配、武器选择、排兵布阵,无一不考验玩家的策略与智
热血精灵王应用宝版是一款好玩有趣的萌宠养成系列角色扮演类手游,超多的装备属性加成,全新的技能升级模式,多种宠物角色任你选择,快和你
少年三国志应用宝版本是许多玩家都在寻找的游戏版本,在这里我们将该游戏其专版提供给大家,你可以在这里收获到许多的欢乐,喜欢的朋友还在
小冰冰传奇应用宝版是一款好玩有趣的卡牌手游,超炫的掌中微操模式让玩家眼前一亮,精致的动画技术制作诚意十足,想你的好友一起来挑战吗,
去吧皮卡丘应用宝版本是一款非常有趣好玩的精灵养成手游,去吧皮卡丘应用宝端这款游戏保证给玩家带来精彩的游戏体验,相信大家对皮卡丘都非
炫舞浪漫爱应用宝版是一款休闲的音乐舞蹈游戏,轻松的游戏氛围,好玩的游戏模式,好听的游戏歌曲,好看的游戏舞蹈,让你的身心得到放松。欢
死神觉醒应用宝版是相对玩家较多的游戏平台,本次也是讲该版本的下载资源提供给大家,在这里玩家可以化身主角铸造“境?界”新篇章,与各位
舞动青春应用宝版是一款音乐舞蹈手游,Q版呆萌的角色造型以及舞蹈场景,加上独特的换装系统,让青春充满活力,还有靓仔们的亲密互动哦,感兴
北凉悍刀行应用宝版本是一款以《北凉悍刀行》原著为蓝本的角色扮演手游,游戏在移动端实现骑乘作战,并支持万人同屏不卡顿,精致的游戏画面和
大话西游应用宝版是一款网易出品的手游大作,延续大话西游电脑端玩法,加以改进更适合手机游戏,特色副本,皇城pk,还是熟悉的味道,还是熟
率土之滨应用宝版是一款大型策略国战手游,玩家们身处三国乱世之中,退要保全自己,进要争霸天下,合纵连横、攻城掠地。考验着玩家们的计谋
街篮应用宝版是一款纯正的篮球手游,喜欢篮球的朋友们千万不要错过这款诚意之作,不管你喜欢实时竞技,街头热血比赛,还是想成为篮球赛事里
超能继承者应用宝版是专为喜欢动漫的玩家提供的一款3D手机网游,游戏中还原了众多经典的动漫人物及剧情,如蜡笔小新、八神庵、saber等,拥有
腾讯版口袋妖怪重制是一款以口袋妖怪为题材的二次元手游,游戏采用了全新3D建模,融入了全新动作美学模拟技术,还原动漫真实场景,并提供了
奇幻大世界应用宝版是一款精品奇幻类的手游大作。这款游戏拥有逼真宏大的3D奇幻场景,还有全职业全屏技能,秒伤上千,动辄全屏伤害,带给玩
权力与荣耀应用宝版是一款采用西方神话故事打造的精品国战手游。游戏内设计有多种新颖副本及跨服、竞技玩法,独创更自由多样的国战模式,为
少女前线qq登录版是一款以军武强娘为题材的二次元手游,游戏中提供了上百款枪娘供玩家手机,在这里你可以自由布局卡牌出击顺序,带领站队拯
猎魔传说应用宝版是一款极具3DMMO魔幻特色的角色扮演类手游,精致唯美的游戏画面,全新结婚系统浪漫开启。感兴趣的朋友们赶紧来绿色资源网站
应用宝轻快版是一款资源丰富的手机应用下载平台,拥有十万款经过双重安全认证的热门软件和游戏,安装卸载非常方便,并且有QQ和手机腾讯网等
剑舞者们破解版是一款二次元风格的战斗手游,人物角色Q萌可爱,剧情内容丰富,战斗方法多样,玩家们可以控制一个小队作战,感受团队战斗的魅
最终幻想觉醒应用宝版是一款好玩有趣的动作风手游,游戏当中有三大元素职业:炎枪手、风剑士和冰魔导,游戏采用的是酷爽的RPG战斗玩法,不有
拳皇97OL应用宝版是一款格斗手游,想必大家都在街机上面玩过拳皇97这款经典的格斗游戏吧,现完美还原街机体验,在手机上面也可以搓出技能连
全民枪战安锋版是一款枪战游戏,给大家公平公正的游戏体验,熟悉的玩法,不一样的地图场景,多种游戏模式,让玩家们畅享击杀的快感,三五好
天天炫舞应用宝版是一款休闲舞蹈类手游,玩家众多,游戏特色鲜明,多种模式供你试玩,结婚、公会玩法应有尽有,还可以录制歌曲哟,还等什么
如果的世界应用宝版本是一款日本漫画风格的的二次元角色扮演类手游,个性十足的人物主角满足你对动漫人物的所有幻想,奇妙萌宠究极进化,炫
影之刃2应用宝是一款横版格斗手游大作,继承了前作的游戏画面及风格,加入了全新的动作系统的英雄让游戏更加富有乐趣。格斗手游爱好者不可错
大圣之怒应用宝版是一款非常优秀的手游作品,画面华丽,打击感强烈,游戏主要描述西天取金之后的故事剧情,脑洞大开,不得不体验一下子。还
大唐仙妖劫应用宝版是一款仙侠类角色扮演手游,在以往经典回合制手游基础上新增诸多玩法,独特的PVE、PVP语音聊天系统,让战斗变得异常激烈
闪闪跑胡子全集应用宝版是一款专为腾讯玩家打造的跑胡子手机游戏,本游戏画面绚丽多彩,游戏规则简单。玩家可以直接通过微信账号进入游戏房
梦幻石器OL腾讯版是一款可以让你领略史前石器时代风采的回合制手游。游戏继承了经典石器的众多设定,并在画面、玩法以及玩家交互性等多个方
乱轰三国志腾讯版是一款玩法非常丰富的三国策略手游,游戏融合了策略塔防,角色扮演,动作卡牌对战,国战PVP多种玩法与一天,带给你一个你从未体
苍穹绝仙应用宝版是一款主打PK玩法打造的仙侠手游。游戏拥有至尊高清3D画质,经典战、法、刺三职业引领情怀,打造全新的仙侠风传奇类游戏!延
探墓风云腾讯版是一款大型多人在线角色扮演手游,玩家这一次将成为一个摸金校尉,进入各种古墓进行一场场惊心动魄的摸金之旅,齐天大圣、卷帘大
应用宝全民枪战2是一款非常刺激的射击手游,游戏画面华丽,武器众多,装备炫酷,支持5v5枪战对决,非常的紧张刺激,喜爱的朋友赶快到绿色资
剑与魔法腾讯版是一款融合东西双方神话故事于一起打造的动作类冒险手游。游戏中玩家将扮演一名精英冒险者,与好友一起踏上征服神魔的冒险之
航海王启航应用宝版是一款最为还原的动漫手游,在游戏中玩家可以通过招募系统,自由培养“ONEPIECE”中的人气角色,让他们和你一起探寻神秘
西游伏妖篇手游应用宝是一款西游题材角色扮演手游,游戏以原名电视剧剧情为背景,高度还原剧中完美场景,再配合魔幻3D引擎打造的优美画面,
COS大乱斗应用宝版是一款主打卡牌养成玩法的动作类角色扮演手游。游戏融合了卡牌养成与横版动作战斗的元素,颠覆传统ARPG手游,打造格斗竞技
苍穹变应用宝版是一款精品玄幻类角色扮演类手游,这款游戏是根据超人气小说改编而来,原汁原味的还原了小说中的经典剧情,让玩家仿佛身临其
甜甜萌物语腾讯版是一款由腾讯游戏平台推出的精品换装手游。游戏不仅可以360°自由旋转缩放,还可以从各种角度来欣赏装扮出来的效果哦,各种
神魔2.0应用宝版是由女神Angelababy代言的RPG手游,这款游戏继承前作《神魔》众多出色玩法的同时,还融入了多项创新性玩法,还有精美华丽的
放开那三国2应用宝版本游戏不仅延续经典特色,更带来众多超越前作的非凡体验,本次将该游戏的应用宝专版下载资源提供给大家,喜欢该作品的玩
剑魂之刃应用宝版是一款极具冒险色彩的怪物格斗游戏,玩家可以随心切换左手右手英雄的跑位,技能释放并不固定在一个位置,提升玩家的游戏体
武神赵子龙应用宝版本是一款3D动作手游,根据同名热播电视剧改编而成,真实还原电视剧情,游戏画面十分精美,具有中国古典美的水墨画风格,
狂暴之翼应用宝版本是许多玩家爱都在寻找的游戏专版,在这款游戏中为您带来满满的激情,新宠新怒翼,圣物惊现。冒险远征,休闲挖矿,公会运
无尽争霸应用宝版是一款竞技对战手游,游戏在英雄联盟玩法基础上,新增全新真3D视角,策略、走位、套路、操作尽显其中,感兴趣的朋友欢迎来
黎明之光应用宝版是一款极具史诗极特色的角色扮演类手游,创新的技能升级模式绝对让你热血沸腾,还有最近新增的“大剑士”职业哦,感兴趣的
极无双应用宝版是一款以三国大战为背景的动作手游,玩家们将亲身操作三国武将们在这乱世之中杀出一条血路,畅爽割草快感,维护神舟和平的人
天堂2手游应用宝版是一款极具战略战略模拟特色的角色扮演类手游,庞大绚丽的游戏昌吉以及创新的战斗操控模式给你最优质的游戏体验,想在游戏
数码世界OL腾讯版是一款策略卡牌类手机游戏,该款游戏中玩家们将集结众多人气数码一起战斗,游戏中上百中数码宝贝都由顶级日系画师精心打造完
造化之门应用宝版是一款同名小说角色扮演手游,原汁原味的游戏剧情以及烧脑战术的副本玩法,都等着你去探索,可玩性非常高,感兴趣的朋友欢
应用宝诛仙手游是腾讯应用宝平台代理的手游作品,游戏采用Unity5引擎打造,带玩家进入一个唯美的仙侠世界,受到了诛仙迷的高度好评,喜欢的
合金弹头ol腾讯版是一款经典的横版射击游戏,想必大家在街机上已经玩过多次了,各种枪械任你选,更有战车合体亮瞎你的眼球,喜欢的朋友们千
悠悠恋物语应用宝版手游客户端拥有多种类的华丽服饰,让你目不暇接,格式华服种类繁多,即有时尚的现代风格服装,也有古色古香的浓韵古风服
SD敢达强袭战线是人气动漫的策略手游之作,给你最酷炫的机师机甲玩法,熟悉角色悉数登场,让你体验原版动漫的经典剧情,集安卓RPG游戏的刷图
苍翼之刃应用宝版是一款魔幻题材的竞技动作手游,创新的操作模式,经典的日系角色人物,酷炫的战斗画面,特色的养成pk系统,值得你来挑战,
叶罗丽应用宝版是一款可以让你体验公主生活的动漫题材角色扮演手游。游戏由超人气国漫《叶罗丽精灵梦》改编,动画原班人马监制,深度还原动
应用宝版休闲物语是一款专为喜欢玩仙侠题材的朋友们设计的回合制角色扮演类手游,丰富的玩法和各种修仙道具让您惊叹不已,想来这里一个无人
大唐无双应用宝版是一款武侠类的角色扮演手游,游戏画面精美细腻,剧情丰富多彩,打击感爆棚。特色副本、禁地、运镖、竞技场等玩法应有尽有
女神联盟腾讯版是腾讯游戏平台推出的精品仙侠类角色扮演手游。游戏融合了西方魔幻剧情设定,伊瓦利斯大陆上女神与魔族的抗衡为游戏大背景,原
浪漫星舞团腾讯版是一款优秀的音乐游戏。这是一款类似于qq炫舞的手机游戏。绿色资源网为大家提供qq登陆版本。欢迎感兴趣的玩家来下载试玩
王权之争应用宝版是一款超好玩的魔幻类手游,游戏中拥有十名风格迥异的强力英雄任你选择,玩家需要建造属于自己的城市,最终成为魔幻大陆的
应用宝版心动劲舞团是一款休闲类音乐舞蹈手游。这里拥有各种潮流类型的音乐哦,还可以语音轻松交友,更可以在游戏中表白结婚呢。喜欢音乐手
少女咖啡枪应用宝版是一款热血战斗射击手游,玩家们处在秩序崩坏的世界,怪物横行,萌妹们与你一起战斗在第一线,还有好玩的pvp模式等待你的
龙珠q传腾讯版是一款根据漫画改编的rpg手游。游戏中玩家通过不断的搜集卡牌来提升自己的战斗水平,原作中的“元气弹”和“龟派气功”等特色
神魔幻境手游应用宝版本是一款画风唯美动人的仙侠rpg动作手游,游戏以西游为背景,人物细腻精致,打斗刺激带感,真人跨服争霸,颠覆对决刺激
应用宝烈焰龙城官网是传奇烈焰龙城应用宝平台专区版本。这个版本包含新区、422区、新服。欢迎感兴趣的玩家来绿色资源网下载试玩。
犬夜叉寻玉之旅应用宝版是一款极具动漫剧情和战国冒险风格的角色扮演类手游,游戏延续经典动漫剧情,人气角色全面登场!复刻原作神技能,打
横扫千军应用宝版是一款三国类策略卡牌手游,玩家需要通过组合不同的武将,才能发挥出他们最大的技能价值,从而提升战斗力,轻松打击敌人,
腾讯版新苍穹之剑是一款以中国古典武侠风为题材的rpg手游,延续了苍穹之剑的特色设定,游戏画面清晰唯美,人物设计潇洒恣意,并进行了全新的
鬼吹灯3d应用宝版是一款高度还原原著小说《鬼吹灯》的盗墓类RPG手游,鬼吹灯3d应用宝版带玩家进入一个超乎想象的探险世界,让玩家一起体会原
英魂之刃口袋版qq登录是一款优秀的moba手游。游戏完美还原moba本色,手机上也可以进行快乐对战。欢迎感兴趣的小伙伴来绿色资源网下载。英魂
航海归来腾讯版是一款横版模拟经营手游,以16世纪大航海为故事背景,带你重温那个战火纷飞的海上世界,精心还原恢弘海战画面与经典海战玩法,致
应用宝5.0手机版是一款专为喜爱5.0版本的用户打造的特别版,为各位忠实用户提供最火热的安卓应用和最流行好玩的游戏的下载、安装和管理服务
万剑诛仙应用宝版是一款以诛仙世界为背景的经典的角色扮演手游。炫酷的3D画面,唯美的游戏风格,就能让你身临其境,游戏根据端游移植过来,
漫威未来之战应用宝版是一款在全球都很受欢迎的由高品质英雄手游,游戏人物逼真、技能多样,打击感强、阵容强大,近百个英雄角色任你选,喜
大话蜀山腾讯版是一款仙侠题材的回合制角色扮演类手游,还原经典,再续侠缘,创新侠缘系统玩法加入,你可激活更多侠缘,突破最强天赋,羽化登仙只
梦幻诛仙应用宝版是一款由腾讯游戏代理的精品仙侠题材回合制手游。游戏首创的飞仙系统颠覆了传统2D网游中简单的悬浮飞行模式,让玩家在游戏
怪物X联盟2应用宝版是一款好玩有趣的宠物养成类手游,众多风格迥异的宠物搭配不同的技能,想当那个最佳的训宠师吗?创新采用主动释放+技能消
热门专题推荐
相关文章推荐您的位置:
→ 劲舞团手游腾讯版 v1.2.0 安卓版
劲舞团手游腾讯版 v1.2.0 安卓版腾讯劲舞团下载|
网友评分:8
软件大小:386M
软件语言:中文
软件类型:国产软件
软件类别:免费软件 / 音乐游戏
更新时间:
软件等级:
官方网站:暂无
运行环境:Android
软件厂商:
顶好评:50%
同类相关手游
350.7M/中文/10.0350.7M/中文/10.0304M/中文/10.07.5M/中文/10.05.7M/中文/10.0
腾讯版是一款可以让你与妹子一起跳舞的音乐舞蹈类休闲手游。游戏继承端游版本中的核心玩法、美术风格、社交体验,并根据当下流行趋势注入更多时尚活力的服装、音舞元素。喜欢音乐手游的朋友们快来绿色资源网下载吧!游戏特色1、与爱甜蜜共舞 浪漫邂逅 久伴情深30人同屏广场派对,LBS定位同城伙伴,舞团家族,挂房斗舞,丰富社交设计,劲舞只为与TA相遇!2、变身舞林高手 至IN舞步 嗨翻全场中韩顶级舞者舞蹈编排,真人多点动作捕捉录制舞步,炫酷舞姿,嗨翻全场!3、时尚造型搭配 私人定制 有型有范白马尾、大翅膀,复刻端游经典造型;上百套全新炫酷潮流服装,独创服饰DIY玩法,拒绝撞衫,潮爆全服!4、独家正版曲库 汇集全球 热门金曲海量正版授权音乐,汇集华语、日韩、欧美流行榜TOP金曲,给你最时尚的音乐体验!游戏亮点与爱甜蜜共舞 浪漫邂逅 久伴情深。变身舞林高手 至IN舞步 嗨翻全场。挑战偶像之路 娱乐生涯 星途闪耀。时尚造型搭配 私人定制 有型有范。授权正版曲库 汇集全球 热门金曲。
猜你喜欢 劲舞团手游劲舞团
劲舞团手游是网易代理的一款音乐类..手机游戏,游戏根据同名端游改编而来,承端游版本中的核心玩法美术风格社交体验,并根据当下流行趋势注入更多时尚活力的服装音舞元素。经典模式泡泡模式动感模式等模式,丰富对战
劲舞团是一款全新的舞蹈类电脑游戏,深受青少年玩家的喜爱,现小编为广大的劲舞团游戏玩家提供几款劲舞团游戏辅助工具和劲舞团客户端下载,让玩家更好的体验游戏的无限乐趣,有需要者欢迎到绿色资源网下载劲舞团游戏
其他版本下载
劲舞团手游腾讯版 v1.2.0 安卓版
软件无法下载或下载后无法使用,请点击报错,谢谢!
请描述您所遇到的错误,我们将尽快予以修正,谢谢!
*必填项,请输入内容
本类下载排行
10.01 10.02 1.13 3.74 10.05 10.06 10.07 8.38 10.09 10.010 10.011 10.012 2.513 10.014 9.915
本类精品手游
29.7M/中文/10.017.3M/中文/10.0315M/中文/10.0105M/中文/10.0150M/中文/9.352.7M/中文/10.0155.1M/中文/10.0
装机必备软件
本类集合手游本文收录在&a href=&/p/& class=&internal&&无痛的机器学习第一季&/a&。&br&&p&关于CNN的内容已经说了很多,虽然我们无法把这个长得像黑盒的东西完全摸清楚,但是我们多多少少也对它的外部结构有了一定的了解。下面我们来看看大神们对进一步探究CNN内部世界所做的工作。&/p&&p&这部分工作有一个响亮的Title,那就是,CNN的网络到底学到了什么?&/p&&p&对于浅层网络,尤其是一层网络,上面这个问题非常好回答。我们知道模型输入的特征和分布,我们也知道输出的特征和分布(这里特指监督学习),那么模型的目标就是把输入空间的数据映射到输出空间,而且映射的结果是正确的。如果我们把浅层网络替换成深层网络,还把它当作一个不可分割的整体,那么它的目标和浅层网络是完全一致的。&/p&&p&但问题是,我们并没有把深层网络当成浅层网络,因为深度学习涉及了浅层网络学习时代的两个部分——构建特征和从特征到结果。所以我们心里一定在想,这么多层,哪些层是在构建特征,哪些层是在把特征转换到结果?在CNN网络模型发展的初期,人们倾向于把这个分界点设立在卷积层和全连接层的交界处——卷积层负责收集特征信息,全连接层和早年的神经网络一样,只负责特征的处理。&/p&&p&如果你接受了这样的概念,那么我们下一个问题就来了。卷积层是如何把一张图片或者其他的东西转换成了特征,这些特征是如何表达我们的图片呢?这还是一个没有解决的问题。&/p&&p&于是很多大神开始了各种尝试,其中一种尝试就是反卷积操作。&/p&&h2&反卷积&/h2&&p&反卷积是什么?是一个新概念呢?其实不是。其实在CNN中Deconvolution的计算和图像的反卷积操作还是有一点不同,这种Deconvolution是将Convolution的方向反过来——没错,前向变后向,后向变前向。实际上关于它的名称还有很多,像back convolution, transpose convolution等。我个人比较喜欢back convolution。关于前向后向的计算可以参考我们前面对于卷积层的计算推导,这里就不再多说了。那么我们就从这个角度去看看反卷积究竟做了什么。&/p&&p&想知道反卷积的前向操作做了什么,我们可以去看卷积的后向操作做了什么。卷积的后向操作是为了计算卷积层的Loss对参数和输入的梯度,那么梯度是什么含义?负梯度表示了函数下降最快的方向,为了使函数值(也就是Loss)尽可能地小,我们希望梯度尽可能地小。但是如果某个参数的梯度非常大,能说明什么呢?说明当前函数参数的变动对函数造成的影响非常大。&/p&&p&举个例子,比方说有这样一个函数&img src=&/equation?tex=y%3Dw_1%2Ax_1%2Bw_2%2Ax_2& alt=&y=w_1*x_1+w_2*x_2& eeimg=&1&&,y最终还要经过计算得到最终的loss,那么我们计算这个函数的梯度:&/p&&img src=&/equation?tex=%5Cfrac%7B%5Cpartial+Loss%7D%7B%5Cpartial+x_1%7D%3D%5Cfrac%7B%5Cpartial+Loss%7D%7B%5Cpartial+y%7D%2Aw_1& alt=&\frac{\partial Loss}{\partial x_1}=\frac{\partial Loss}{\partial y}*w_1& eeimg=&1&&&br&&img src=&/equation?tex=%5Cfrac%7B%5Cpartial+Loss%7D%7B%5Cpartial+x_2%7D%3D%5Cfrac%7B%5Cpartial+Loss%7D%7B%5Cpartial+y%7D%2Aw_2& alt=&\frac{\partial Loss}{\partial x_2}=\frac{\partial Loss}{\partial y}*w_2& eeimg=&1&&&br&&img src=&/equation?tex=%5Cfrac%7B%5Cpartial+Loss%7D%7B%5Cpartial+w_1%7D%3D%5Cfrac%7B%5Cpartial+Loss%7D%7B%5Cpartial+y%7D%2Ax_1& alt=&\frac{\partial Loss}{\partial w_1}=\frac{\partial Loss}{\partial y}*x_1& eeimg=&1&&&br&&img src=&/equation?tex=%5Cfrac%7B%5Cpartial+Loss%7D%7B%5Cpartial+w_2%7D%3D%5Cfrac%7B%5Cpartial+Loss%7D%7B%5Cpartial+y%7D%2Ax_2& alt=&\frac{\partial Loss}{\partial w_2}=\frac{\partial Loss}{\partial y}*x_2& eeimg=&1&&&br&&p&如果w1非常大而w2非常小,那么x1的梯度就会远大于x2,如果x1做点小改动,它会对最终结果产生比较大的影响;而x2做点小改动,对应的影响就没有那么严重了;&/p&&p&如果x1非常大而x2非常小,那么w1的梯度就会远大雨w2,如果w1做点小改动,它会对最终结果产生比较大的影响;而w2做点小改动,对应的影响就没有那么严重了;&/p&&p&那么我们可以想想看,对结果产生较大影响以为着什么?对于一个人脸识别系统,上面公式中那些对结果影响比较大的因子往往对应着人脸中富有关键特征的地方,因为如果这些地方发生了变化,我们识别这个人的关键信息就变动了,换言之——我们就有可能认错人。&/p&&p&而对于那些对结果影响较小的因子,往往对应着一些不太重要的地方,比方说背景——不论你变成蓝色,红色,白色,我都能认出这个人。&/p&&p&所以我们可以得出一个推论,那就是梯度大的因子是当前这个这套模型和数据组成的整体的关键!对于w,它就是当前输入数据的关键参数,对于x,他就是当前模型参数的关键输入!&/p&&p&所以,如果我们能够找到对于某一个模型某一特定输入下梯度比较大的输入因子和参数因子,我们就能知道输入的哪些部分是模型最关心的,而模型的哪些部分是输入最关心的。&/p&&p&一般来说,由于输入的图像大多具备一定的可视性,所以我们观察“输入的哪些部分是模型最关心的”是相对容易的。&/p&&p&那么我们就可以开始我们的实验了,其实并不需要真的构建一个反卷积层,我们理论上只要把数据从前向传一遍,后向传一遍,然后分析Loss对输入的梯度,找出梯度最大的像素点,就是模型最关心的地方。这样是不是就可以完成任务?&/p&&p&理论上是这样的,那么下一回我们看看具体的实现。&/p&&h2&私货时间&/h2&&p&&我爱机器学习&3群已经准确就绪:,欢迎大家赶紧上车!&/p&&br&&p&!&/p&
本文收录在。 关于CNN的内容已经说了很多,虽然我们无法把这个长得像黑盒的东西完全摸清楚,但是我们多多少少也对它的外部结构有了一定的了解。下面我们来看看大神们对进一步探究CNN内部世界所做的工作。这部分工作有一个响亮的Title,…
&ul&&li&&b&&a href=&/p/& class=&internal&&深层学习为何要“Deep”(上) - 知乎专栏&/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&深层学习为何要“Deep”(下) - 知乎专栏&/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&YJango 的 Live -- 深层学习入门误区&/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&串讲 线性代数、概率、熵 - 知乎专栏&/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&TensorFlow基本用法 - 知乎专栏&/a&&/b&&/li&&li&&b&Tensorflow&a href=&///?target=https%3A//yjango.gitbooks.io/superorganism/content/dai_ma_yan_shi.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&代码演示LV1 · 超智能体&i class=&icon-external&&&/i&&/a& (看不了gitbook请看&a href=&///?target=http%3A///yjango/superorganism/265443& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&代码演示LV1&i class=&icon-external&&&/i&&/a&)&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&Tensorflow实现神经网络(2) - 知乎专栏&/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&Tensorflow实现深层学习完备流程 - 知乎专栏&/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&循环神经网络(Recurrent)--介绍 - 知乎专栏&/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&循环神经网络--实现LSTM &/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&循环神经网络--scan实现LSTM&/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&循环神经网络--双向LSTM、GRU&/a&&/b&&/li&&li&&b&&a href=&/p/& class=&internal&&卷积神经网络--介绍&/a&&/b&&/li&&/ul&&h2&一、基本变换:层&/h2&&p&神经网络是由一层一层构建的,那么每&b&层&/b&究竟在做什么?&/p&&ul&&li&&b&数学式子&/b&:&img src=&///equation?tex=%5Cvec%7By%7D%3D+a%28W%5Ccdot%5Cvec%7Bx%7D+%2B+%7Bb%7D%29& alt=&\vec{y}= a(W\cdot\vec{x} + {b})& eeimg=&1&&,其中&img src=&///equation?tex=%5Cvec%7Bx%7D& alt=&\vec{x}& eeimg=&1&&是输入向量,&img src=&///equation?tex=%5Cvec%7By%7D& alt=&\vec{y}& eeimg=&1&&是输出向量,&img src=&///equation?tex=%5Cvec%7Bb%7D& alt=&\vec{b}& eeimg=&1&&是偏移向量,&img src=&///equation?tex=W& alt=&W& eeimg=&1&&是权重矩阵,&img src=&///equation?tex=a%28%29& alt=&a()& eeimg=&1&&是激活函数。每一层仅仅是把输入&img src=&///equation?tex=%5Cvec+x& alt=&\vec x& eeimg=&1&&经过如此简单的操作得到&img src=&///equation?tex=%5Cvec+y& alt=&\vec y& eeimg=&1&&。&/li&&li&&b&数学理解&/b&:通过如下5种对输入空间(输入向量的集合)的操作,完成 &b&输入空间 ——& 输出空间&/b& 的变换 (矩阵的行空间到列空间)。
注:用“空间”二字的原因是被分类的并不是单个事物,而是&b&一类&/b&事物。空间是指这类事物所有个体的集合。&/li&&ul&&li&&b&1.&/b& 升维/降维&/li&&li&&b&2.&/b& 放大/缩小&/li&&li&&b&3.&/b& 旋转&/li&&li&&b&4.&/b& 平移&/li&&li&&b&5.&/b& “弯曲”
这5种操作中,1,2,3的操作由&img src=&///equation?tex=W%5Ccdot%5Cvec%7Bx%7D& alt=&W\cdot\vec{x}& eeimg=&1&&完成,4的操作是由&img src=&///equation?tex=%2B%5Cvec%7Bb%7D& alt=&+\vec{b}& eeimg=&1&&完成,5的操作则是由&img src=&///equation?tex=a%28%29& alt=&a()& eeimg=&1&&来实现。 (此处有动态图&a href=&///?target=http%3A//colah.github.io/posts/2014-03-NN-Manifolds-Topology/img/1layer.gif& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&5种空间操作&i class=&icon-external&&&/i&&/a&,帮助理解)&/li&&/ul&&/ul&&img src=&/v2-1ebee9a3fb36a6dbfb5c3_b.jpg& data-rawwidth=&239& data-rawheight=&233& class=&content_image& width=&239&&&p&&br&&/p&&blockquote&每层神经网络的数学理解:&b&用线性变换跟随着非线性变化,将输入空间投向另一个空间&/b&。&/blockquote&&ul&&li&&b&物理理解&/b&:对 &img src=&///equation?tex=W%5Ccdot%5Cvec%7Bx%7D& alt=&W\cdot\vec{x}& eeimg=&1&& 的理解就是&b&通过组合形成新物质&/b&。&img src=&///equation?tex=+a%28%29& alt=& a()& eeimg=&1&&又符合了我们所处的世界都是非线性的特点。&/li&&ul&&li&&b&情景:&/b&&img src=&///equation?tex=%5Cvec%7Bx%7D& alt=&\vec{x}& eeimg=&1&&是二维向量,维度是碳原子和氧原子的数量&img src=&///equation?tex=+%5BC%3BO%5D& alt=& [C;O]& eeimg=&1&&,数值且定为&img src=&///equation?tex=%5B1%3B1%5D& alt=&[1;1]& eeimg=&1&&,若确定&img src=&///equation?tex=%5Cvec%7By%7D& alt=&\vec{y}& eeimg=&1&&是三维向量,就会形成如下网络的形状 (神经网络的每个节点表示一个维度)。通过改变权重的值,可以获得若干个不同物质。右侧的节点数决定了想要获得多少种不同的新物质。(矩阵的行数)&/li&&/ul&&/ul&&img src=&/v2-69d03cf2bb0d9af58841b4_b.jpg& data-rawwidth=&144& data-rawheight=&164& class=&content_image& width=&144&&&p&&b&1.&/b&如果权重W的数值如(1),那么网络的输出y? 就会是三个新物质,[二氧化碳,臭氧,一氧化碳]。
&img src=&///equation?tex=%5Cleft%5B+%5Cbegin%7Bmatrix%7D+CO_%7B2%7D%5C%5C+O_%7B3%7D%5C%5C+CO+%5Cend%7Bmatrix%7D+%5Cright%5D%3D+%5Cleft%5B+%5Cbegin%7Bmatrix%7D+1+%26+2+%5C%5C+0+%26+3%5C%5C+1+%26+1+%5Cend%7Bmatrix%7D+%5Cright%5D+%5Ccdot+%5Cleft%5B+%5Cbegin%7Bmatrix%7D+C+%5C%5C+O+%5C%5C+%5Cend%7Bmatrix%7D+%5Cright%5D& alt=&\left[ \begin{matrix} CO_{2}\\ O_{3}\\ CO \end{matrix} \right]= \left[ \begin{matrix} 1 & 2 \\ 0 & 3\\ 1 & 1 \end{matrix} \right] \cdot \left[ \begin{matrix} C \\ O \\ \end{matrix} \right]& eeimg=&1&& (1)&/p&&ul&&ul&&li&&b&2.&/b&也可以减少右侧的一个节点,并改变权重W至(2),那么输出&img src=&///equation?tex=%5Cvec%7By%7D& alt=&\vec{y}& eeimg=&1&& 就会是两个新物质,&img src=&///equation?tex=%5B+O_%7B0.3%7D%3BCO_%7B1.5%7D%5D& alt=&[ O_{0.3};CO_{1.5}]& eeimg=&1&&。
&img src=&///equation?tex=%5Cleft%5B+%5Cbegin%7Bmatrix%7D+O_%7B0.3%7D%5C%5C+CO_%7B1.5%7D%5C%5C+%5Cend%7Bmatrix%7D+%5Cright%5D%3D+%5Cleft%5B+%5Cbegin%7Bmatrix%7D+0%26+0.3+%5C%5C+1+%26+1.5%5C%5C+%5Cend%7Bmatrix%7D+%5Cright%5D+%5Ccdot+%5Cleft%5B+%5Cbegin%7Bmatrix%7D+C+%5C%5C+O+%5C%5C+%5Cend%7Bmatrix%7D+%5Cright%5D& alt=&\left[ \begin{matrix} O_{0.3}\\ CO_{1.5}\\ \end{matrix} \right]= \left[ \begin{matrix} 0& 0.3 \\ 1 & 1.5\\ \end{matrix} \right] \cdot \left[ \begin{matrix} C \\ O \\ \end{matrix} \right]& eeimg=&1&&(2)
&b&3.&/b&如果希望通过层网络能够从[C, O]空间转变到&img src=&///equation?tex=%5BCO_%7B2%7D%3BO_%7B3%7D%3BCO%5D& alt=&[CO_{2};O_{3};CO]& eeimg=&1&&空间的话,那么网络的学习过程就是将W的数值变成尽可能接近(1)的过程 。如果再加一层,就是通过组合&img src=&///equation?tex=%5BCO_%7B2%7D%3BO_%7B3%7D%3BCO%5D& alt=&[CO_{2};O_{3};CO]& eeimg=&1&&这三种基础物质,形成若干更高层的物质。
&b&4.&/b&重要的是这种组合思想,组合成的东西在神经网络中并不需要有物理意义。&/li&&/ul&&/ul&&p&&br&&/p&&blockquote&每层神经网络的物理理解:&b&通过现有的不同物质的组合形成新物质&/b&。&/blockquote&&h2&二、理解视角:&/h2&&p&现在我们知道了每一层的行为,但这种行为又是如何完成识别任务的呢?&/p&&h2&数学视角:“线性可分”&/h2&&ul&&li&&b&一维情景&/b&:以分类为例,当要分类正数、负数、零,三类的时候,一维空间的直线可以找到两个超平面(比当前空间低一维的子空间。当前空间是直线的话,超平面就是点)分割这三类。但面对像分类奇数和偶数无法找到可以区分它们的点的时候,我们借助 x % 2(取余)的转变,把x变换到另一个空间下来比较,从而分割。&/li&&/ul&&img src=&/v2-92ff4b847ac5fa41d91d1e76a910c483_b.jpg& data-rawwidth=&370& data-rawheight=&63& class=&content_image& width=&370&&&p&&br&&/p&&ul&&li&&b&二维情景&/b&:平面的四个象限也是线性可分。但下图的红蓝两条线就无法找到一超平面去分割。
&/li&&/ul&&img src=&/v2-b1bd0f75b46ed27dafb6e3f_b.jpg& data-rawwidth=&197& data-rawheight=&204& class=&content_image& width=&197&&&p&神经网络的解决方法依旧是转换到另外一个空间下,用的是所说的&b&5种空间变换操作&/b&。比如下图就是经过放大、平移、旋转、扭曲原二维空间后,在三维空间下就可以成功找到一个超平面分割红蓝两线 (同SVM的思路一样)。
&/p&&img src=&/v2-8d7d1ef957ebbf8ba9bb9cf8ff2d87ff_b.jpg& data-rawwidth=&197& data-rawheight=&198& class=&content_image& width=&197&&&p&上面是一层神经网络可以做到的,如果把&img src=&///equation?tex=%5Cvec%7By%7D& alt=&\vec{y}& eeimg=&1&& 当做新的输入再次用这5种操作进行第二遍空间变换的话,网络也就变为了二层。最终输出是&img src=&///equation?tex=%5Cvec%7By%7D%3D+a_%7B2%7D%28W_%7B2%7D%5Ccdot%28a_%7B1%7D%28W_%7B1%7D%5Ccdot%5Cvec%7Bx%7D+%2B+%7Bb%7D_%7B1%7D%29%29+%2B+%7Bb%7D_%7B2%7D%29& alt=&\vec{y}= a_{2}(W_{2}\cdot(a_{1}(W_{1}\cdot\vec{x} + {b}_{1})) + {b}_{2})& eeimg=&1&&。
设想网络拥有很多层时,对原始输入空间的“扭曲力”会大幅增加,如下图,最终我们可以轻松找到一个超平面分割空间。&/p&&img src=&/v2-b7de6baeb329e88e59b563_b.jpg& data-rawwidth=&239& data-rawheight=&233& class=&content_image& width=&239&&&p&&br&&/p&&p&当然也有如下图失败的时候,关键在于“如何扭曲空间”。所谓监督学习就是给予神经网络网络大量的训练例子,让网络从训练例子中学会如何变换空间。每一层的权重W就&b&控制着如何变换空间&/b&,我们最终需要的也就是训练好的神经网络的所有层的权重矩阵。&/p&&img src=&/v2-664c152ffc58a28a7f900f9a723cbb83_b.jpg& data-rawwidth=&239& data-rawheight=&233& class=&content_image& width=&239&&&p&&br&&/p&&p&这里有非常棒的&a href=&///?target=http%3A//cs.stanford.edu/people/karpathy/convnetjs//demo/classify2d.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&可视化空间变换demo&i class=&icon-external&&&/i&&/a&,一定要打开尝试并感受这种扭曲过程。更多内容请看&a href=&///?target=http%3A//colah.github.io/posts/2014-03-NN-Manifolds-Topology/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Neural Networks, Manifolds, and Topology&i class=&icon-external&&&/i&&/a&。&/p&&blockquote&线性可分视角:神经网络的学习就是&b&学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。&/b&&br&&b&增加节点数:增加维度,即增加线性转换能力。&/b& &b&增加层数:增加激活函数的次数,即增加非线性转换次数。&/b&&/blockquote&&h2&物理视角:“物质组成”&/h2&&ul&&li&&b&类比&/b&:回想上文由碳氧原子通过不同组合形成若干分子的例子。从分子层面继续迭代这种组合思想,可以形成DNA,细胞,组织,器官,最终可以形成一个完整的人。继续迭代还会有家庭,公司,国家等。这种现象在身边随处可见。并且原子的内部结构与太阳系又惊人的相似。不同层级之间都是以类似的几种规则再不断形成新物质。你也可能听过&b&分形学&/b&这三个字。可通过观看&a href=&///?target=http%3A///programs/view/o41zy0SeSS0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从1米到150亿光年&i class=&icon-external&&&/i&&/a&来感受自然界这种层级现象的普遍性。&/li&&/ul&&img src=&/v2-3ecdacc0ae28_b.jpg& data-rawwidth=&488& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&488& data-original=&/v2-3ecdacc0ae28_r.jpg&&&p&&br&&/p&&ul&&li&&b&人脸识别情景&/b&:我们可以模拟这种思想并应用在画面识别上。由像素组成菱角再组成五官最后到不同的人脸。每一层代表不同的不同的物质层面 (如分子层)。而每层的W&b&存储着如何组合上一层的物质从而形成新物质&/b&。
如果我们完全掌握一架飞机是如何从分子开始一层一层形成的,拿到一堆分子后,我们就可以判断他们是否可以以此形成方式,形成一架飞机。
附:&a href=&///?target=http%3A//playground.tensorflow.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tensorflow playground&i class=&icon-external&&&/i&&/a&展示了数据是如何“流动”的。&/li&&/ul&&img src=&/v2-82f05552fd2ddde28a0ef20814d7acbb_b.png& data-rawwidth=&624& data-rawheight=&218& class=&origin_image zh-lightbox-thumb& width=&624& data-original=&/v2-82f05552fd2ddde28a0ef20814d7acbb_r.png&&&p&&br&&/p&&blockquote&物质组成视角:神经网络的学习过程就是&b&学习物质组成方式的过程。&/b&&br&&b&增加节点数:增加同一层物质的种类,比如118个元素的原子层就有118个节点。&/b& &b&增加层数:增加更多层级,比如分子层,原子层,器官层,并通过判断更抽象的概念来识别物体。&/b&&/blockquote&&h2&三、神经网络的训练&/h2&&p&知道了神经网络的学习过程就是&b&学习&/b&控制着空间变换方式(物质组成方式)的&b&权重矩阵&/b&后,接下来的问题就是&b&如何学习&/b&每一层的权重矩阵W。&/p&&h2&如何训练:&/h2&&p&既然我们希望网络的输出尽可能的接近真正想要预测的值。那么就可以通过&b&比较&/b&当前网络的&b&预测值&/b&和我们真正想要的&b&目标值&/b&,再根据两者的差异情况来更新每一层的权重矩阵(比如,如果网络的预测值高了,就调整权重让它预测低一些,不断调整,直到能够预测出目标值)。因此就需要先&b&定义“如何比较&/b&预测值和目标值的&b&差异&/b&”,这便是&b&损失函数或目标函数(loss function or objective function)&/b&,用于衡量预测值和目标值的差异的方程。loss function的输出值(loss)越高表示差异性越大。那神经网络的训练就变成了尽可能的缩小loss的过程。
所用的方法是&b&梯度下降(Gradient descent)&/b&:通过使loss值向当前点对应梯度的反方向不断移动,来降低loss。一次移动多少是由&b&学习速率(learning rate)&/b&来控制的。&/p&&h2&梯度下降的问题:&/h2&&p&然而使用梯度下降训练神经网络拥有两个主要难题。&/p&&h2&1、局部极小值&/h2&&p&梯度下降寻找的是loss function的局部极小值,而我们想要全局最小值。如下图所示,我们希望loss值可以降低到右侧深蓝色的最低点,但loss有可能“卡”在左侧的局部极小值中。
&/p&&img src=&/v2-00fe10bf57cf0cd7f9219_b.png& data-rawwidth=&420& data-rawheight=&250& class=&content_image& width=&420&&&p&试图解决“卡在局部极小值”问题的方法分两大类:&/p&&ul&&li&&b&调节步伐:&/b&调节学习速率,使每一次的更新“步伐”不同。常用方法有:&/li&&li&随机梯度下降(Stochastic Gradient Descent (SGD):每次只更新一个样本所计算的梯度&/li&&li&小批量梯度下降(Mini-batch gradient descent):每次更新若干样本所计算的梯度的平均值&/li&&li&动量(Momentum):不仅仅考虑当前样本所计算的梯度;Nesterov动量(Nesterov Momentum):Momentum的改进&/li&&li&Adagrad、RMSProp、Adadelta、Adam:这些方法都是训练过程中依照规则降低学习速率,部分也综合动量&/li&&li&&b&优化起点&/b&:合理初始化权重(weights initialization)、预训练网络(pre-train),使网络获得一个较好的“起始点”,如最右侧的起始点就比最左侧的起始点要好。常用方法有:高斯分布初始权重(Gaussian distribution)、均匀分布初始权重(Uniform distribution)、Glorot 初始权重、He初始权、稀疏矩阵初始权重(sparse matrix)&/li&&/ul&&h2&2、梯度的计算&/h2&&p&机器学习所处理的数据都是高维数据,该&b&如何快速计算梯度&/b&、而不是以年来计算。
其次如何更新&b&隐藏层&/b&的权重?
解决方法是:计算图:&b&反向传播算法&/b&
这里的解释留给非常棒的&a href=&///?target=http%3A//colah.github.io/posts/2015-08-Backprop/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computational Graphs: Backpropagation&i class=&icon-external&&&/i&&/a&
需要知道的是,&b&反向传播算法是求梯度的一种方法&/b&。如同快速傅里叶变换(FFT)的贡献。
而计算图的概念又使梯度的计算更加合理方便。&/p&&h2&基本流程图:&/h2&&p&下面就结合图简单浏览一下训练和识别过程,并描述各个部分的作用。要&b&结合图解阅读以下内容。但手机显示的图过小,最好用电脑打开&/b&。&/p&&img src=&/v2-af6cbfc37ee36e0_b.jpg& data-rawwidth=&743& data-rawheight=&345& class=&origin_image zh-lightbox-thumb& width=&743& data-original=&/v2-af6cbfc37ee36e0_r.jpg&&&p&&br&&/p&&ul&&li&&b&收集训练集(train data):&/b&也就是同时有input以及对应label的数据。每个数据叫做训练样本(sample)。label也叫target,也是机器学习中最贵的部分。上图表示的是我的数据库。假设input本别是x的维度是39,label的维度是48。&/li&&li&&b&设计网络结构(architecture):&/b&确定层数、每一隐藏层的节点数和激活函数,以及输出层的激活函数和损失函数。上图用的是两层隐藏层(最后一层是输出层)。隐藏层所用激活函数a( )是ReLu,输出层的激活函数是线性linear(也可看成是没有激活函数)。隐藏层都是1000节点。损失函数L( )是用于比较距离MSE:mean((output - target)^2)。MSE越小表示预测效果越好。训练过程就是不断减小MSE的过程。到此所有数据的维度都已确定:&/li&&ul&&li&训练数据:&img src=&///equation?tex=input+%5Cin+R%5E%7B39%7D+%3Blabel+%5Cin+R%5E%7B48%7D& alt=&input \in R^{39} ;label \in R^{48}& eeimg=&1&&&/li&&li&权重矩阵:&img src=&///equation?tex=W_%7Bh1%7D%5Cin+R%5E%7BD%3BW_%7Bh2%7D%5Cin+R%5E%7BD+%3BW_%7Bo%7D%5Cin+R%5E%7B48x1000%7D& alt=&W_{h1}\in R^{1000x39};W_{h2}\in R^{} ;W_{o}\in R^{48x1000}& eeimg=&1&&&/li&&li&偏移向量:&img src=&///equation?tex=b_%7Bh1%7D%5Cin+R%5E%7BBb_%7Bh2%7D%5Cin+R%5E%7B1000%7D+%3Bb_%7Bo%7D%5Cin+R%5E%7B48%7D& alt=&b_{h1}\in R^{1000};b_{h2}\in R^{1000} ;b_{o}\in R^{48}& eeimg=&1&&&/li&&li&网络输出:&img src=&///equation?tex=output+%5Cin+R%5E%7B48%7D& alt=&output \in R^{48}& eeimg=&1&&&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&&b&数据预处理(preprocessing):&/b&将所有样本的input和label处理成能够使用神经网络的数据,label的值域符合激活函数的值域。并简单优化数据以便让训练易于收敛。比如中心化(mean subtraction)、归一化(normlization)、主成分分析(PCA)、白化(whitening)。假设上图的input和output全都经过了中心化和归一化。&/li&&li&&b&权重初始化(weights initialization)&/b&:&img src=&///equation?tex=W_%7Bh1%7D%2CW_%7Bh2%7D%2CW_%7B0%7D& alt=&W_{h1},W_{h2},W_{0}& eeimg=&1&&在训练前不能为空,要初始化才能够计算loss从而来降低。&img src=&///equation?tex=W_%7Bh1%7D%2CW_%7Bh2%7D%2CW_%7B0%7D& alt=&W_{h1},W_{h2},W_{0}& eeimg=&1&&初始化决定了loss在loss function中从哪个点开始作为起点训练网络。上图用均匀分布初始权重(Uniform distribution)。&/li&&li&&b&训练网络(training)&/b&:训练过程就是用训练数据的input经过网络计算出output,再和label计算出loss,再计算出gradients来更新weights的过程。&/li&&ul&&li&正向传递:,算当前网络的预测值&img src=&///equation?tex=output+%3Dlinear+%28W_%7Bo%7D+%5Ccdot+Relu%28W_%7Bh2%7D%5Ccdot+Relu%28W_%7Bh1%7D%5Ccdot+input%2Bb_%7Bh1%7D%29%2Bb_%7Bh2%7D%29+%2Bb_%7Bo%7D%29& alt=&output =linear (W_{o} \cdot Relu(W_{h2}\cdot Relu(W_{h1}\cdot input+b_{h1})+b_{h2}) +b_{o})& eeimg=&1&&&/li&&li&计算loss:&img src=&///equation?tex=loss+%3D+mean%28%28output+-+target%29%5E2%29& alt=&loss = mean((output - target)^2)& eeimg=&1&&&/li&&li&计算梯度:从loss开始反向传播计算每个参数(parameters)对应的梯度(gradients)。这里用Stochastic Gradient Descent (SGD) 来计算梯度,即每次更新所计算的梯度都是从一个样本计算出来的。传统的方法Gradient Descent是正向传递所有样本来计算梯度。SGD的方法来计算梯度的话,loss function的形状如下图所示会有变化,这样在更新中就有可能“跳出”局部最小值。&/li&&/ul&&/ul&&img src=&/v2-0c0e7f5ffa98c2c1eb8d9a3_b.png& data-rawwidth=&469& data-rawheight=&227& class=&origin_image zh-lightbox-thumb& width=&469& data-original=&/v2-0c0e7f5ffa98c2c1eb8d9a3_r.png&&&p&&br&&/p&&ul&&ul&&li&更新权重:这里用最简单的方法来更新,即所有参数都 &img src=&///equation?tex=W+%3D+W+-+learningrate+%2A+gradient& alt=&W = W - learningrate * gradient& eeimg=&1&&&/li&&li&预测新值:训练过所有样本后,打乱样本顺序再次训练若干次。训练完毕后,当再来新的数据input,就可以利用训练的网络来预测了。这时的output就是效果很好的预测值了。下图是一张&b&实际值&/b&和&b&预测值&/b&的三组对比图。输出数据是48维,这里只取1个维度来画图。蓝色的是实际值,绿色的是实际值。最上方的是训练数据的对比图,而下方的两行是神经网络模型&b&从未见过&/b&的数据预测对比图。(不过这里用的是RNN,主要是为了让大家感受一下效果)&/li&&/ul&&/ul&&img src=&/v2-a675e692f7f7755d91bcdba5e988e910_b.jpg& data-rawwidth=&2000& data-rawheight=&1600& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&/v2-a675e692f7f7755d91bcdba5e988e910_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&注:此部分内容&b&不是&/b&这篇文章的&b&重点&/b&,但为了理解&b&深层&/b&神经网络,需要明白最基本的训练过程。
若能理解训练过程是通过梯度下降尽可能缩小loss的过程即可。
若有理解障碍,可以用python实践一下&a href=&///?target=http%3A///2015/09/implementing-a-neural-network-from-scratch/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从零开始训练一个神经网络&i class=&icon-external&&&/i&&/a&,体会整个训练过程。若有时间则可以再体会一下计算图自动求梯度的方便&a href=&///?target=https%3A//www.tensorflow.org/versions/r0.11/tutorials/mnist/beginners/index.html%23mnist-for-ml-beginners& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&利用TensorFlow&i class=&icon-external&&&/i&&/a&。&/p&&h2&结合&a href=&///?target=http%3A//playground.tensorflow.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tensorflow playground&i class=&icon-external&&&/i&&/a&理解&b&5种空间操作&/b&和&b&物质组成视角&/b&&/h2&&p&打开网页后,总体来说,蓝色代表正值,黄色代表负值。拿&b&分类&/b&任务来分析。&/p&&ul&&li&数据:在二维平面内,若干点被标记成了两种颜色。黄色,蓝色,表示想要区分的两类。你可以把平面内的任意点标记成任意颜色。网页给你提供了4种规律。神经网络会根据你给的数据训练,再分类相同规律的点。
&/li&&/ul&&img src=&/v2-6d17d1fb77d3ae456317_b.png& data-rawwidth=&173& data-rawheight=&169& class=&content_image& width=&173&&&p&&br&&/p&&ul&&li&输入:在二维平面内,你想给网络多少关于“点”的信息。从颜色就可以看出来,&img src=&///equation?tex=x_%7B1%7D& alt=&x_{1}& eeimg=&1&&左边是负,右边是正,&img src=&///equation?tex=x_%7B1%7D& alt=&x_{1}& eeimg=&1&&表示此点的横坐标值。同理,&img src=&///equation?tex=x_%7B2%7D& alt=&x_{2}& eeimg=&1&&表示此点的纵坐标值。&img src=&///equation?tex=x_%7B1%7D%5E%7B2%7D& alt=&x_{1}^{2}& eeimg=&1&&是关于横坐标值的“抛物线”信息。你也可以给更多关于这个点的信息。给的越多,越容易被分开。&/li&&/ul&&img src=&/v2-111e37e8479aa57bedbfb2dbcd8e5b63_b.png& data-rawwidth=&92& data-rawheight=&228& class=&content_image& width=&92&&&p&&br&&/p&&ul&&li&连接线:表示权重,蓝色表示用神经元的原始输出,黄色表示用负输出。深浅表示权重的绝对值大小。鼠标放在线上可以看到具体值。也可以更改。在(1)中,当把&img src=&///equation?tex=x_%7B2%7D& alt=&x_{2}& eeimg=&1&&输出的一个权重改为-1时,&img src=&///equation?tex=x_%7B2%7D& alt=&x_{2}& eeimg=&1&&的形状直接倒置了。不过还需要考虑激活函数。(1)中用的是linear。在(2)中,当换成sigmoid时,你会发现没有黄色区域了。因为sigmoid的值域是(0,1)
&/li&&/ul&&img src=&/v2-fcd7a49d57c4deb1e4f3c_b.png& data-rawwidth=&315& data-rawheight=&136& class=&content_image& width=&315&&&p&(1)&/p&&img src=&/v2-83fd9f01e2ea38c7f6b8aeaa308cf040_b.png& data-rawwidth=&294& data-rawheight=&123& class=&content_image& width=&294&&&p&(2)
&/p&&ul&&li&输出:黄色背景颜色都被归为黄点类,蓝色背景颜色都被归为蓝点类。深浅表示可能性的强弱。&/li&&/ul&&img src=&/v2-dff3f6e72881ebd222414eabb9504671_b.png& data-rawwidth=&1116& data-rawheight=&363& class=&origin_image zh-lightbox-thumb& width=&1116& data-original=&/v2-dff3f6e72881ebd222414eabb9504671_r.png&&&p&上图中所有在黄色背景颜色的点都会被分类为“黄点“,同理,蓝色区域被分成蓝点。在上面的分类分布图中你可以看到每一层通过上一层信息的组合所形成的。权重(那些连接线)控制了“如何组合”。神经网络的学习也就是从数据中学习那些权重。Tensorflow playground所表现出来的现象就是“在我文章里所写的“物质组成思想”,这也是为什么我把&a href=&///?target=http%3A//playground.tensorflow.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tensorflow playground&i class=&icon-external&&&/i&&/a&放在了那一部分。&/p&&p&不过你要是把Tensorflow的个名字拆开来看的话,是tensor(张量)的flow(流动)。Tensorflow playground的作者想要阐述的侧重点是“&b&张量如何流动&/b&”的。&/p&&p&&b&5种空间变换的理解&/b&:Tensorflow playground下没有体现5种空间变换的理解。需要打开这个网站尝试:&a href=&///?target=http%3A//cs.stanford.edu/people/karpathy/convnetjs//demo/classify2d.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ConvNetJS demo: Classify toy 2D data&i class=&icon-external&&&/i&&/a&&/p&&img src=&/v2-5f56fb5abe49_b.png& data-rawwidth=&841& data-rawheight=&425& class=&origin_image zh-lightbox-thumb& width=&841& data-original=&/v2-5f56fb5abe49_r.png&&&p&左侧是原始输入空间下的分类图,右侧是转换后的高维空间下的扭曲图。&/p&&img src=&/v2-a81ad2b067e1d4ae3951e7_b.png& data-rawwidth=&848& data-rawheight=&417& class=&origin_image zh-lightbox-thumb& width=&848& data-original=&/v2-a81ad2b067e1d4ae3951e7_r.png&&&p&最终的扭曲效果是所有绿点都被扭曲到了一侧,而所有红点都被扭曲到了另一侧。这样就可以线性分割(用超平面(这里是一个平面)在中间分开两类)&/p&&h2&四、“深层”的思考:真的只有这些原因吗?&/h2&&p&文章的最后稍微提一下深层神经网络。深层神经网络就是拥有更多层数的神经网络。&/p&&p&按照上文在理解视角中所述的观点,可以想出下面两条理由关于为什么更深的网络会更加容易识别,增加容纳变异体(variation)(红苹果、绿苹果)的能力、鲁棒性(robust)。&/p&&p&&b&数学视角&/b&:变异体(variation)很多的分类的任务需要高度非线性的分割曲线。不断的利用那5种空间变换操作将原始输入空间像“捏橡皮泥一样”在高维空间下捏成更为线性可分/稀疏的形状。
&b&物理视角&/b&:通过对“&b&抽象概念&/b&”的判断来识别物体,而非细节。比如对“飞机”的判断,即便人类自己也无法用语言或者若干条规则来解释自己如何判断一个飞机。因为人脑中真正判断的不是是否“有机翼”、“能飞行”等细节现象,而是一个抽象概念。层数越深,这种概念就越抽象,所能&b&涵盖的变异体&/b&就越多,就可以容纳战斗机,客机等很多种不同种类的飞机。&/p&
Tensorflow (看不了gitbook请看…
之前说起正则化,我们光说了加一个惩罚项&img src=&/equation?tex=%5Csum_%7Bj%3D1%7D%5E%7Bm%7D%7B%5Ctheta+_j%5E2%7D+& alt=&\sum_{j=1}^{m}{\theta _j^2} & eeimg=&1&&,用步长&img src=&/equation?tex=%5Clambda+& alt=&\lambda & eeimg=&1&&来调节,但是为什么是这样,却没说。&p&那这篇文章就讨论一下为毛是这样,以及常用的别的惩罚项长啥样。&/p&&p&先说&/p&&p&L0正则化:&/p&&p&这玩意长这样:&img src=&/equation?tex=%5Csum_%7Bj%3D1%2C%5Ctheta+_j%5Cne+0%7D%5E%7Bm%7D%7B%5Ctheta+_j%5E0%7D+& alt=&\sum_{j=1,\theta _j\ne 0}^{m}{\theta _j^0} & eeimg=&1&&&br&&/p&&br&&p&0的0次方没有意义,在这里如果按照L1和L2看显然该定位0,这里讨论就是不参与惩罚项,不参与加权。即所有非零项算作1加起来,然后用步长&img src=&/equation?tex=%5Clambda+& alt=&\lambda & eeimg=&1&&调节。意思很明显,每一个对预测产生了贡献的参数,我都惩罚一次,不多不少,大家都一样。就像一个法官判决,你偷了一毛钱,他杀了一个人,法官均以“价值观不正确”为由,把你们判一样的罪……只有一点都没参与的人,才不会被判刑。&/p&&p&很明显有问题,这玩意正则化后,岂不是无论什么样的函数,无论多么复杂,都往一根横着的直线上调节么?&/p&&p&还有一个问题,干嘛叫L0呢?直接调步数不就可以了么……&/p&&p&这个问题后面会说。&/p&&p&L1正则化:&/p&&p&这玩意长这样:&img src=&/equation?tex=%5Csum_%7Bj%3D1%7D%5E%7Bm%7D%7B%7C%5Ctheta+_j%7C%7D+& alt=&\sum_{j=1}^{m}{|\theta _j|} & eeimg=&1&&&/p&&p&拿法官举例子,就是,法官要按照你们的罪行量刑判罪,但是都得判,无论你影响最终是好是坏(比如你杀了个人,这个人也是个坏人,但是你还是犯了杀人罪得判刑)都按照罪行判罪。于是就都取个绝对值,表示都判,然后按照罪行大小判罪了……&/p&&p&这个地方估计大家可以理解了,惩罚项嘛,按照一个参数的影响来判才对嘛……&/p&&p&不过这还有个问题,x的绝对值,你给我求导一下看看,求出来就是 土1,大于0的时候是1,小于0的时候是-1,一个还好,一个向量X里的话,有神特么多个x,求个导出来能把人累死。&/p&&p&于是就引出L2了:&/p&&img src=&/equation?tex=%5Csum_%7Bj%3D1%7D%5E%7Bm%7D%7B%5Ctheta+_j%5E2%7D+& alt=&\sum_{j=1}^{m}{\theta _j^2} & eeimg=&1&&&br&&p&就是我们看到的,笔记里记的了。平方了以后嘛,做包括求导在内的各种计算就方便了,啥,你说大了,无所谓啊,反正有个lamda来调节步长,谁在乎呢?&/p&&br&&p&好吧……到这里我就在不用一堆专业术语的情况下,用这种糊弄的方式,勉强把L0,L1,L2解释出来了,啥欧氏距离马氏距离剃刀原则都糊弄过去没说,反正你编程也用不到这些玩意。不过还有一个问题,作为一个喜欢开脑洞的宅,万一某一天你好奇,为毛这要叫L0,L1,L2,为毛不叫L1,L2,L3,不叫个数,拉索和雷吉呢?我还想叫他山岭回归呢……&/p&&p&这个……你可以这样理解:&/p&&p&&img src=&/equation?tex=L%28%5Ctheta%29+%3D+%5Csum_%7Bj%3D1%7D%5E%7Bm%7D%7B%28%5Csqrt%7B%5Ctheta+_j%5E2%7D+%29%5Ep%7D+& alt=&L(\theta) = \sum_{j=1}^{m}{(\sqrt{\theta _j^2} )^p} & eeimg=&1&&当p等于0的时候,就是L0,当P等于1的时候,就是L1,当p等于2的时候,就是L2.嗯……这下就师出有名了啊哈哈哈……&br&&/p&&p&好了不扯淡了。实际上这玩意表示的是距离,比如x点和y点之间的距离:&/p&&img src=&/equation?tex=L%28x%2Cy%29+%3D+%5Csum_%7Bj%3D1%7D%5E%7Bm%7D%7B%28%5Csqrt%7B%28x_j-y_j%29%5E2%7D+%29%5Ep%7D+& alt=&L(x,y) = \sum_{j=1}^{m}{(\sqrt{(x_j-y_j)^2} )^p} & eeimg=&1&&&br&&p&而正则化是表示到哪儿的距离呢?到0点,也就是和完全不改变原函数的区别(图我懒得找了,随便搜图搜个L2norm都能搜出来)。而由于是到0点,所以可以只保留一个参数,那么上面哪个&img src=&/equation?tex=L%28x%2Cy%29+%3D+%5Csum_%7Bj%3D1%7D%5E%7Bm%7D%7B%28%5Csqrt%7B%28x_j-y_j%29%5E2%7D+%29%5Ep%7D+& alt=&L(x,y) = \sum_{j=1}^{m}{(\sqrt{(x_j-y_j)^2} )^p} & eeimg=&1&&就变成了&img src=&/equation?tex=L%28%5Ctheta%2C0%29+%3D+%5Csum_%7Bj%3D1%7D%5E%7Bm%7D%7B%28%5Csqrt%7B%28%5Ctheta+_j-0%29%5E2%7D+%29%5Ep%7D+& alt=&L(\theta,0) = \sum_{j=1}^{m}{(\sqrt{(\theta _j-0)^2} )^p} & eeimg=&1&&&br&&/p&&p&啊,差不多就糊弄完了……&/p&
之前说起正则化,我们光说了加一个惩罚项\sum_{j=1}^{m}{\theta _j^2} ,用步长\lambda 来调节,但是为什么是这样,却没说。那这篇文章就讨论一下为毛是这样,以及常用的别的惩罚项长啥样。先说L0正则化:这玩意长这样:\sum_{j=1,\theta _j\ne 0}^{m}{\thet…
&img src=&/v2-81a59df92fdb1d484c7092c_b.png& data-rawwidth=&609& data-rawheight=&191& class=&origin_image zh-lightbox-thumb& width=&609& data-original=&/v2-81a59df92fdb1d484c7092c_r.png&&&p&&b&译者注&/b&:本篇翻译自Alex Krizhevsky, Ilya Sutskever以及Geoffrey E.Hinton的论文&i& ImageNet Classification with Deep Convolutional Neural Networks&/i&. 该论文在&a href=&/intelligentunit& class=&internal&&智能单元&/a&专栏文章《&i&CS231n课程笔记翻译:神经网络笔记1(上)》&/i&中有提到,因此打算翻译一下,一来强化自己的理解,二来供读者参考。文中涉及的名词翻译主要是参考&a href=&/intelligentunit& class=&internal&&智能单元&/a&系列专栏文章《&i&CS231n课程笔记翻译》&/i&中的名词翻译以及百度和谷歌。其实对于名词,我偏向于保留其原貌,因为有的名词本身很直观,所以在翻译后面会跟上原文。&/p&&h2&摘要&/h2&&p&我们利用ImageNet LSVRC-2010比赛的数据训练了一个庞大、深度的卷积神经网络,将一百二十万张高分辨率图片分为1000个类别。将模型运用于测试数据时,我们得到喜人的成果:Top1错误率及Top5错误率(即预测的第一个或前五个类别中不包含正确类别的比例)分别为37.5%和17.0%,优于过往最好的测试结果。我们的模型包含6000万个参数和65万个神经元(neuron),由5个卷积层构成,部分卷积层附带一个最大值汇合层(&a href=&/?target=https%3A//en.wikipedia.org/wiki/Convolutional_neural_network%23Pooling_layer& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&max pooling&i class=&icon-external&&&/i&&/a&),以及3个全连接层(&a href=&/?target=https%3A//en.wikipedia.org/wiki/Convolutional_neural_network%23Pooling_layer& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&fully-connected layers&i class=&icon-external&&&/i&&/a&),最后一层是1000-way softmax评分函数(1000个output score)。为了使训练过程更加迅速,我们使用非饱和神经元(non-saturating neurons)以及在GPU上高效地训练CNN。而为了降低过拟合程度,在全连接层中我们使用了近期发展出的正则化方法-“随机失活(Dropout)”,在实际训练中,随机失活的效果很好。我们还用我们的CNN模型的一个变体对ImageNet ISVRC-2012比赛的数据进行训练,获得了Top5错误率15.3%的骄人成绩,而比赛的亚军的错误率是26.2%。&/p&&h2&1 引言&/h2&&p&当前主流的物体识别方法主要利用了机器学习方法。为了提高它们的分类能力,我们收集了大量的数据,训练更为强大的模型,并使用更先进的技术来减少过拟合。目前,带标签图像的数据比较少 - 大约是以万计(比如,NORB [16], Caltech-101/256 [8, 9], 以及CIFAR-10/100 [12])。这样的数据量可以完成简单的识别任务,尤其是当数据经过保留标签转换(label-preserving transformations)处理后。例如,目前为止MNIST数字识别项目最低的错误率(&0.3%)基本达到人类的识别水平[4]。但是现实环境中的物体展示出多样性,所以想要获得更好的识别能力需要更加庞大的训练数据。其实,数据量小的缺点已经是众所周知,但一直到最近才可以收集到百万级的带标签图像数据集。最新的大型数据库包括LabelMe [23] - 其内含数十万张完全分块化图像,以及ImageNet [6] - 其内含超过1500万张、共22000多类带标签的高分辨率图像。&/p&&p&为了从百万计的图像中训练适用于数千个图像的分类模型,我们需要一个具有很大训练容量的模型。但是,图像识别问题本身极大的复杂性使得即使利用ImageNet这样庞大的数据库也还是难以完美地解释该问题。所以为了弥补数据的不足,我们的模型需要基于许多前人研究。CNN就是符合我们要求的一类模型 [16,11,13,18,15,22,26]。通过调整CNN模型的深度(depth)和宽度(breadth),我们可以控制其容量。另外CNN模型对图象性质的假设全面且基本正确(即统计量的定态假设以及像素局部依赖性假设)。因此,相比于传统的前馈神经网络(feedforward neural networks)使用相同大小的中间层,CNN使用更少的连接数和参数,所以能够更好地训练模型,同时其理论最优识别能力仅稍弱于传统模型。&/p&&p&即使CNN具有良好的性质以及相对高效的架构,应用于大规模的高清图像时还是很耗资源。幸运的是,现在的显卡(GPU)配合高度优化的二维卷积,已经可以用于训练出乎意料的大型CNN模型。另外像ImageNet这样最新的数据集包含足够的标签样本,可以很好地训练CNN模型的同时不引起严重过拟合问题。&/p&&p&本文的主要贡献是:我们基于ILSVRC-2010及ILSVRC-2012的ImageNet数据集,训练了目前最大的CNN,并且取得了目前为止对该数据集最好的分类结果。我们编写了一个高度优化的在GPU环境执行的二维卷积过程,以及其他训练CNN的相应操作(内容发表于&a href=&/?target=http%3A///p/cuda-convnet/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&此处&i class=&icon-external&&&/i&&/a&)。我们的网络包含了一些新颖的特征,不仅提高了分类效果还减少了训练耗时,具体详见第三节。由于我们的模型过于庞大,即使有120万训练标签样本,还是会面临过拟合的问题,这在第四节中有具体讨论。我们最后训练出的网络包含五个卷积层和三个全连接层,这个深度设置非常关键:我们发现移除任何一个卷积层(虽然只包含不超过全局1%的参数)都会导致较劣的分类效果。&/p&&p&最后,神经网络的大小主要是受限于所使用的GPU的显存,以及我们所能接受的训练耗时。我们的CNN训练使用了两个GTX580 3GB GPU,总共耗时5至6天。实验结果还表明,只要有更快的GPU和更大的数据集可使用,模型的分类效果还可以提高。&/p&&h2&2 数据集&/h2&&p&ImageNet内含超过1500万张、共22000多类带标签的高分辨率图像。图像是从网络上收集并通过亚马逊土耳其机器人(&a href=&/?target=https%3A///mturk/welcome& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mechanical Turk&i class=&icon-external&&&/i&&/a&)众包工具(crowd-sourcing)人工添加标签。ILSVRC - ImageNet Large-Scale Visual Recognition Challenge是一年一度的比赛,起始于2010年,属于Pascal Visual Object Challenge比赛的一部分。ILSVRC用ImageNet的部分数据集,包含1000个类别,每个类别选取约1000张图像,总计有120万张训练图像,5万张验证图像,和15万张测试图像。&/p&&p&ILSVRC-2010是所有ILSVRC系列比赛中唯一提供测试图像标签的比赛,所以我们大部分的实验是基于该数据集。我们还将模型应用于ILSVRC-2012,在第六节中我们会提供训练结果,不过该数据集没有提供测试图像标签。使用ImageNet训练模型,一般大家都会计算两个错误率,即前文提到的Top1错误率及Top5错误率,其中Top5错误率指的是测试图像中,未能被模型的&b&前五个预测结果&/b&正确分类的图像占所有图像的比例。&/p&&p&ImageNet包含各种清晰度的图像,但我们的模型需要固定的输入维度。因此我们将所有图像都进行下采样处理,统一调整为256×256规格。具体步骤是,对一张长方形图像,我们先将其短边长度缩小至256像素,然后截取图像中央256×256大小的部分作为最终使用图像。除此以外,我们还对图像的每一个像素进行&b&中心化处理&/b&。&/p&&blockquote&译者注:原文是&i&subtracting the mean activity over the training set from each pixel&/i&,通过谷歌,觉得比较靠谱的解释是将训练集每个图像对应像素的R、G、B三个值分别求平均数,然后每个图像的每个像素的R值减去R平均,G值减去G平均,B值减去B平均。如有知友知道正确解释请在评论处指出,非常感谢。&/blockquote&&p&所以神经网络训练使用的是图像像素中心化后的RGB值&/p&&h2&3 架构&/h2&&p&我们的网络架构总结在图2中。它包含了八个训练层 - 五个卷积层和三个全连接层。以下我将介绍我们的网络架构中所引入的新颖的特征。下文3.1-3.4的顺序依照其重要性排列,其中3.1最重要。&/p&&p&&b&3.1 ReLU 非线性化神经元&/b&&/p&&p&神经元根据输入值x的输出函数&img src=&/equation?tex=f& alt=&f& eeimg=&1&&一般采用tanh作为激活函数,即&img src=&/equation?tex=f%5Cleft%28+x+%5Cright%29+%3Dtanh%5Cleft%28+x+%5Cright%29+& alt=&f\left( x \right) =tanh\left( x \right) & eeimg=&1&&或者&img src=&/equation?tex=f%5Cleft%28+x+%5Cright%29+%3D%5Cleft%28+1%2Be%5E%7B-x%7D+%5Cright%29+%5E%7B-1%7D& alt=&f\left( x \right) =\left( 1+e^{-x} \right) ^{-1}& eeimg=&1&&。当使用梯度下降法寻找最优解时,这类&b&&a href=&/?target=http%3A///questions/174295/what-does-the-term-saturating-nonlinearities-mean& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&饱和&i class=&icon-external&&&/i&&/a&&/b&非线性激活函数,相比于&b&非饱和&/b&非线性激活函数,耗费更长的训练时间。借鉴Nair和Hinton [20]的研究,我们采用ReLUs非线性化神经元。采用ReLUs的Deep-CNN比采用tanh的CNN训练起来快很多,如图一所示。我们比较了采用不同激活函数的四层神经网络对CIFAR-10数据集训练,记录分别达到25%训练错误率所需要的循环数。此图表明,如果使用传统的饱和激活函数神经网络模型的话,我们无法完成如此大型的神经网络训练项目。&/p&&p&&br&&/p&&img src=&/v2-aeebd86ddc59c_b.png& data-rawwidth=&265& data-rawheight=&213& class=&content_image& width=&265&&&blockquote&图1:采用ReLUs的四层CNN(实线)对CIFAR-10数据集达到25%训练错误率的速度是采用tanh的CNN(虚线)的六倍。每个网络的学习率(learning rate)都是独立选取以使其训练速度最大化,且都没有经过正则化处理。当然,两种CNN的训练时间上的差距依不同架构会有所不同,但采用ReLUs的CNN总是快过用饱和激活函数的CNN。&br&(&b&译者注&/b&:epoch指所有训练数据完成一次前向和后向传递,与batch大小有关)&/blockquote&&p&不过,我们也并不是最早想到使用非传统神经元模型的团队。Jarrett等人 [11] 曾提出将非线性激活函数&img src=&/equation?tex=f%5Cleft%28+x+%5Cright%29+%3D%5Cleft%7C+tanh%5Cleft%28+x+%5Cright%29+%5Cright%7C+& alt=&f\left( x \right) =\left| tanh\left( x \right) \right| & eeimg=&1&&运用于他们所构建的模型对Caltech-101数据集的训练取得了良好的效果,该模型包含了对比度归一化层(contrast normalization)及局部平均汇合层(local average pooling)。但训练Caltech-101数据集主要关注的是过拟合问题,所以他们所谓的“良好效果”与我们采用ReLUs提到的“训练速度提升效果” 是有所区别的。更快的训练速度对大型数据集的模型训练效果有很大的影响。&/p&&p&&br&&/p&&p&&b&3.2 使用多个GPU训练&/b&&/p&&p&单个GTX580 GPU只有3GB显存,限制了其所能训练的神经网络的最大规模,而且实践证明120万张训练图像所需要的神经网络对于单个GPU来说过于庞大。因此,我们将神经网络搭建于两个GPU上。我们使用的GPU特别适合并行作业,因为他们能够直接互相读取和写入显存而不需要经过主机内存。通过并行作业,我们在每个GPU上各搭载了一半的神经元,并且设置了一个机制,即两个GPU只在特定的层级中互相“交流”。举例说明,就是某层级接收前一层级所有神经元的输出结果,而另一层级只接收搭载于同一GPU上的上一层级神经元的输出结果。具体连接模式可以通过交叉验证来调整,但这一机制使得我们可以精确地调整连接数,使得其占总计算量的比例达到我们可以接受的程度。&/p&&p&最后我们搭建的架构有一些类似Ciresan等人[5]提出的“柱状”CNN,不过我们的CNN网络的&b&columns&/b&之间是非独立的(见图2)。使用两个GPU的神经网络通过运用这一机制与使用单个GPU且卷积层神经元数减半的神经网络相比,Top1错误率及Top5错误率分别低了1.7%和1.5%。而双GPU模型比单GPU模型所用的训练时间还稍短一些。(单GPU模型和双GPU模型的神经元数量其实差不多,因为神经网络大部分的参数集中在第一个全连接层,其接收的是最后一个卷积层的输出结果。所以为了使两种模型具有大致相同数量的参数,我们没有将最后一个卷积层的规模减半,其后的全连接层也不用。这样的处理导致两者的分类效果对比其实是有利于单GPU模型的,因为它的神经元数量比双GPU模型的“一半”多一些。)&/p&&blockquote&译者注:&b&columns&/b&的解释我查阅了一篇名为&i&Multi-column Deep Neural Networks for Image Classification&/i&的论文,也是Ciresan写的,里面有提到一个column就是一个DNNmodel,在此文中我推测是&b&指单个GPU里的神经网络&/b&。而&b&非独立就是指两个GPU上的网络之间是有连接层&/b&的。在文中引用的“柱状”CNN from reference[5] &i&High-Performance Neural Networks&br&for Visual Object Classification&/i&里没有直接提到independent column,但估计是指其GPU的implementation是相互独立的。另外一个推测依据是后文对two-GPU和one-GPU的描述,以及文中提到这是新颖的特征。&/blockquote&&p&&b&3.3 局部响应归一化(Local Response Normalization)&/b& &/p&&p&ReLUs有一个良好的性质,就是它不需要对输入数据进行归一化以防止饱和。如果至少有一部分训练样本提供正的输入值给ReLU,那么训练就会在该神经元内执行。不过,我们还是发现下述局部归一化机制可以提高归纳能力。公式中&img src=&/equation?tex=a_%7Bx%2Cy%7D%5E%7Bi%7D+& alt=&a_{x,y}^{i} & eeimg=&1&&表示神经元活动,即输入数据的局部(x,y)经过卷积核&img src=&/equation?tex=i& alt=&i& eeimg=&1&&处理然后经过ReLU处理。响应归一化活动&img src=&/equation?tex=b_%7Bx%2Cy%7D%5E%7Bi%7D+& alt=&b_{x,y}^{i} & eeimg=&1&&的计算公式为:
&img src=&/equation?tex=%5C%5Bb_%7Bx%2Cy%7D%5E%7Bi%7D%3D+a_%7Bx%2Cy%7D%5E%7Bi%7D%2F%5Cleft%28+k%2B%5Calpha+%5Csum_%7Bj%3Dmax%5Cleft%28+0%2Ci-n%2F2+%5Cright%29+%7D%5E%7Bmin%5Cleft%28+N-1%2Ci%2Bn%2F2+%5Cright%29+%7D%7B%5Cleft%28+a_%7Bx%2Cy%7D%5E%7Bj%7D+%5Cright%29+%5E%7B2%7D%7D+%5Cright%29%5E%7B%5Cbeta+%7D%5C%5D& alt=&\[b_{x,y}^{i}= a_{x,y}^{i}/\left( k+\alpha \sum_{j=max\left( 0,i-n/2 \right) }^{min\left( N-1,i+n/2 \right) }{\left( a_{x,y}^{j} \right) ^{2}} \right)^{\beta }\]& eeimg=&1&&&/p&&p&其中,累加项汇总同一空间范围内n个“相邻”的卷积核,N表示该层中的卷积核总数。卷积核map的顺序是随机的且在训练开始前就已定好。这类响应归一化其实是受到真实神经元侧抑制现象的启发在进行类似的操作。其效果就是使不同卷积核计算的神经元输出值之间对计算值比较大的神经元活动(big activities)更为敏感。&/p&&p&&br&&/p&&blockquote&&b&译者注1&/b&:lateral inhibition:相近的神经元彼此之间发生的抑制作用,即在某个神经元受指刺激而产生兴奋时,再刺激相近的神经元,则后者所发生的兴奋对前者产生的抑制作用。&br&&br&&b&译者注2&/b&:Normalization是CNN里一个很重要的层,尤其是运用ReLUs的CNN,因为其没有boundary。而LRN的一个优点就是文中提到的侧抑制。我找到一篇对LRN的解释比较易懂的文献。&a href=&/?target=https%3A////what-is-local-response-normalization-in-convolutional-neural-networks/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&What Is Local Response Normalization In Convolutional Neural Networks&i class=&icon-external&&&/i&&/a&。大致意思就是,真实的神经元利用侧抑制这一性质可以强化局部对比度从而强化识别能力。&br&原文中使用的是competition for big activities among neuron outputs...&/blockquote&&p&式中常数&img src=&/equation?tex=k%2Cn%2C%5Calpha& alt=&k,n,\alpha& eeimg=&1&&以及&img src=&/equation?tex=%5Cbeta+& alt=&\beta & eeimg=&1&&都是超参数,用验证集调试得出;我们的模型使用&img src=&/equation?tex=k%3D2%2C+n%3D5%2C+%5Calpha+%3D10%5E%7B-4%7D+& alt=&k=2, n=5, \alpha =10^{-4} & eeimg=&1&&以及&img src=&/equation?tex=%5Cbeta+%3D0.75& alt=&\beta =0.75& eeimg=&1&&。我们只对某些层(详见3.5小节)在经过ReLU处理后进行上述归一化处理。&/p&&p&这个方法和Jarrett [11]等人使用的局部对比度归一化有一些类似,但是我们的模型更符合&亮度归一化(brightness normalization)&这一范畴,因为我们没有减去均值。响应归一化使得我们模型的Top1错误率及Top5错误率分别降低了1.4%和1.2%。我们还用CIFAR-10数据集验证了响应归一化的效率:四层CNN没有归一化层时错误率为13%,而有归一化层时错误率为11%。(因为篇幅限制所以本文没有详细介绍该模型,感兴趣的可以参考&a href=&/?target=https%3A///p/cuda-convnet/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这里&i class=&icon-external&&&/i&&/a&)&/p&&p&&b&3.4 重叠汇合(Overlapping Pooling)&/b&&/p&&p&CNN里的汇合层对同一卷积核map内邻近的神经元组的输出值进行总结。传统方法里被汇合层单元处理后的邻近神经元是不重叠的(比如[17,11,4])。汇合层,具体来说,可以表示为一个网格里相互间隔s个像素的一个个汇合单元,每一个单元处理邻近的以该单元为中心,大小为&img src=&/equation?tex=z%5Ctimes+z& alt=&z\times z& eeimg=&1&&的神经元组。如果我们设置&img src=&/equation?tex=s%3Dz& alt=&s=z& eeimg=&1&&,就得到传统的CNN。如果&img src=&/equation?tex=s%3Cz& alt=&s&z& eeimg=&1&&,就得到我们模型使用的重叠汇合。我们的模型设置&img src=&/equation?tex=s%3D2%2C+z%3D3& alt=&s=2, z=3& eeimg=&1&&.如此设置使得我们模型的Top1错误率及Top5错误率相比没有使用重叠汇合的模型(设置&img src=&/equation?tex=s%3D2%2C+z%3D2& alt=&s=2, z=2& eeimg=&1&&)低了0.4%和0.3%,非重叠汇合模型得出的结果的维度和我们模型的一样。我们还在训练过程中发现使用重叠汇合的模型较不容易产生过拟合问题。&/p&&p&&b&3.5 整体架构&/b&&/p&&p&现在,我们开始介绍CNN模型的整体架构。如图2所示,模型包含八个参数层;前五个是卷积层,后面三个是全连接层。最后一个全连接层的输出结果提供给1000-way softmax,并得出1000个分类标签的概率分布。我们的模型训练目标是最大化多元逻辑斯蒂函数,等价于最大化训练集预测分布下正确分类的log概率的均值。&/p&&blockquote&&b&译者注&/b&:上述原文是average across training cases of the log-probability of the correct label under the prediction distribution&br&用公式表示为&img src=&/equation?tex=argmax_%7Bw%7D%5Cleft%5C%7B+%5Cfrac%7B1%7D%7BN%7D+%5Csum_%7B%7D%5E%7B%7D%7B%7D-log%5Cleft%28+p%28f%28x%2Cw%29+%3D+y%28x%29+%29+%5Cright%29%5Cright%5C%7D+& alt=&argmax_{w}\left\{ \frac{1}{N} \sum_{}^{}{}-log\left( p(f(x,w) = y(x) ) \right)\right\} & eeimg=&1&&&/blockquote&&p&模型中第二、四和五卷积层的卷积核只接收位于同一GPU上前一层的卷积核输出结果。而第三卷积层的卷积核接收前一层所有的卷积核(两个GPU)。全连接层的神经元也是接收前一层所有的输出结果。第一和第二卷积层后面各附带一个响应归一层。3.4中介绍的汇合层位于每一个响应归一层之后以及第五个卷积层之后。每一个卷积层和全连接层的输出结果都会经过ReLU非线性化处理。&/p&&img src=&/v2-81a59df92fdb1d484c7092c_b.png& data-rawwidth=&609& data-rawheight=&191& class=&origin_image zh-lightbox-thumb& width=&609& data-original=&/v2-81a59df92fdb1d484c7092c_r.png&&&blockquote&图2:我们的CNN模型的一个图像简述,直观地展示了两个GPU分别负责的任务。图中上下两个部分的卷积层各自搭载于一块GPU上。两个GPU的网络只在部分层次中有交互。神经网络的输入层维数是150,528,网络中剩下的层级的神经元数量分别是253,440、186,624、64,896、64,896、4、.&/blockquote&&p&第一个卷积层用96个大小为&img src=&/equation?tex=11%5Ctimes+11%5Ctimes+3& alt=&11\times 11\times 3& eeimg=&1&&的卷积核过滤维度为&img src=&/equation?tex=224%5Ctimes+224%5Ctimes+3& alt=&224\times 224\times 3& eeimg=&1&&的输入图像,步长为4像素(步长是指卷积核接收的相邻神经元组&b&感受野&/b&中心之间的距离,也就是卷积核每次操作移动的像素数,用于决定输出结果的尺寸)。第一个卷积层的输出结果经过响应归一以及汇合后的结果作为第二卷积层的输入值,第二卷积层使用256个卷积核,大小为&img src=&/equation?tex=5%5Ctimes+5%5Ctimes+48& alt=&5\times 5\times 48& eeimg=&1&&.第三、四和五卷积层之间没有其他归一层或汇合层。第三卷积层使用384个卷积核,大小为&img src=&/equation?tex=3%5Ctimes+3%5Ctimes+256& alt=&3\times 3\times 256& eeimg=&1&&,连接第二卷积层的输出结果(归一+汇合处理后)。第四卷积层使用384个卷积核,大小为&img src=&/equation?tex=3%5Ctimes+3%5Ctimes+192& alt=&3\times 3\times 192& eeimg=&1&&,第五卷积层使用256个卷积核,大小为&img src=&/equation?tex=3%5Ctimes+3%5Ctimes+192& alt=&3\times 3\times 192& eeimg=&1&&。每一个全连接层都有4096个神经元。&/p&&p&&br&&/p&&blockquote&卷积核大小的概念可以参考&a href=&/p/?refer=intelligentunit& class=&internal&&CS231n课程笔记翻译:卷积神经网络笔记&/a&&/blockquote&&h2&4 降低过拟合&/h2&&p&我们的神经网络总共有6000万个参数。虽然ILSVRC的数据集仅有1000个标签类别使得每一个样本对其到所属标签的映射施加了10bits的限制,但即便如此,训练含有如此多参数的模型时,还是会出现较严重的过拟合现象。&/p&&blockquote&&b&译者注&/b&:对“10 bits的限制”的理解,我搜到了一篇&a href=&/?target=http%3A//www.cs.toronto.edu/%7Efritz/absps}

我要回帖

更多关于 应用宝安装器安装失败 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信