这是神经网络之父 Geoffrey Hinton 和他的两个学生——Alex Krizhevsky 、Ilya Sutskever——之间的一段对话。对话发生在 2012 年 12 月。对于整个人工智能领域来说,这是非常重要的一个年份。 在这一年的 ImageNet 挑战赛上,Hinton 和 Krizhevsky、Sutskever 提出的深度神经网络 AlexNet 一骑绝尘, 将图像分类的错误率降低了一半,以远超第二名的成绩拿到了比赛的冠军,证明了深度学习的巨大潜力。 深度学习崛起那年,百度差点签下Hinton https://m.thepaper.cn/baijiahao_11802862 ![]() Ilya Sutskever(左)、Alex Krizhevsky(中)和 Geoffrey Hinton(右) ImageNet项目是一个用于视觉对象识别软件研究的大型可视化数据库。 超过1400万的图像URL被ImageNet手动注释,以指示图片中的对象; 在至少一百万个图像中,还提供了边界框。 ImageNet包含2万多个类别; [2]一个典型的类别,如“气球”或“草莓”,包含数百个图像。 第三方图像URL的注释数据库可以直接从ImageNet免费获得; 但是,实际的图像不属于ImageNet。 自2010年以来,ImageNet项目每年举办一次软件比赛, 即ImageNet大规模视觉识别挑战赛(ILSVRC), 软件程序竞相正确分类检测物体和场景。 ImageNet挑战使用了一个“修剪”的1000个非重叠类的列表。 2012年在解决ImageNet挑战方面取得了巨大的突破,被广泛认为是2010年的深度学习革命的开始。 当时,经过50年的刻苦研究,时任多伦多大学教授的Geoffrey Hinton和他的两名博士生Ilya Sutskever、Alex Krizhevsky终于发现,只要借助两样东西就能让神经网络成功识别出图片中的物体:一是数据,也就是海量的图片,因此数据集对他们的研究至关重要;二是强大的计算处理能力。 2012年,他们终于集齐了这两大“利器”:斯坦福大学教授李飞飞创建的ImageNet数据集,初衷就是为了帮助人们研发出可识别图片中物体的技术,并且每一年都会举办公开比赛;另一方面,Alex发现,他写的GPU代码可以训练一个小型卷积网络,并在60秒内输出很不错的结果。 既有Hinton和Ilya、Alex这样愿意潜心做研究的人,再加上海量数据和强大处理能力的加持,可以说,神经网络技术已拥有天时地利人和。然而,当时大多数人并不相信神经网络,并质疑深度学习的原理,认为这只是一个美好的畅想,实际上毫无用处。 不过,在那一年的ImageNet竞赛上,神经网络AlexNet识别物体的准确率远超其他方法,在比赛中一举夺魁,人们由此真正认识并承认神经网络的强大。 除了展示神经网络的强大能量,Hinton和他的团队还积极地将其推广到工业领域。2013年初,以Google、微软、DeepMind、百度等为代表的科技公司纷纷加入了“收购”Hinton三人组公司DNN Research的竞拍战中,最终Google以4400万美元的“天价”将其收入囊中。 李飞飞的创举 Pieter Abbeel:越来越多人也后知后觉地意识到,当初斯坦福的李飞飞教授创办ImageNet挑战赛是多么具有前瞻性,她在深度学习还没有显露曙光的时候就创办了这个比赛。某种程度上,ImageNet比赛是深度学习开始成熟的契机。 Cade Metz:李飞飞的故事也是一个顶住质疑和反对、逆流而上的故事。一开始,李飞飞的导师不支持她建立大型图像数据集,并且认为这是一个糟糕的想法。到了2012年,多伦多大学的Hinton等人在参加ImageNet挑战赛时,将错误率从25%降到了16%。如果没有李飞飞创建的ImageNet数据集,我们就不能看到这一可喜成果的诞生。她和Ilya、Hinton一样都有着坚定的决心。 Pieter Abbeel:没错,我想为不了解学术界的人介绍一点背景。通常而言,在你当上教授后的头6年,你需要先取得一些研究成果,让自己获得声望、站稳脚跟,否则就会面临被辞退的风险。如果你在这6年做得不错,就可以晋升为终身教授,拥有学术自由,想做什么研究都可以。所以,很多人会在头6年先做一些比较有确定性的事,比如研究公认的重大课题,6年后再去做风险更大的研究。 但在李飞飞做教授的那6年里,哪怕周围的人都告诉她,创建数据集是在浪费时间,还不如好好写其他热门方向的论文,她还是坚持自己的想法,认为自己的研究很有价值。她很了不起,行业内的很多了不起的人都是不惧质疑、坚持自我,他们是对的。 Cade Metz:完全同意。像李飞飞这样有勇气对导师说“我明白你的意思,但我还是想这么做”的人,这类故事很值得被报道传扬。各行各业都需要这种精神,作为记者我也深有体会:随大流去报道那些所有人竞相报道的事件很容易,但报道那些没人追踪的、让同行倍感犹豫甚至质疑的事件却很难。在任何领域,坚持自我都是一个宝贵的品质。 天才制造者:独行侠、科技巨头和AI |深度学习崛起十年 https://zhuanlan.zhihu.com/p/517079647 2017年11月前后,谷歌的AutoML项目发展出新的神经网络拓扑结构,创建了NASNet,这是一个针对ImageNet和COCO优化的系统。 据Google称,NASNet的性能超过了以前发布的所有ImageNet性能。 [1] |
2012年的一场竞赛。那是ImageNet的人工智能识别比赛,AlexNet团队赢得第一。 我说,一场学院里的比赛,改变了整个世界的科技版图。 芯片之王,称霸30年的英特尔(Intel)很快就要让位于蛰伏多年的英伟达。 一场比赛而已,是不是吹过了? 又过了一年,我发现我的确错了,错在太保守,我吹得不够用力。 ImageNet是最权威的人工智能大赛。AlexNet不仅拿了第一,而且精确度是第二名的两倍。 它是一个卷积神经网络,一个模仿人类大脑神经元网络的数学系统。 开发者先用CPU训练,发现不给力,要几个月才能完成训练。 于是,换成了英伟达给游戏做图形渲染的GPU,一周就完成了。 英伟达给英特尔当了一辈子马仔。毕竟PC时代,CPU是霸道总裁,游戏显卡是可有可无的小弟。 智能手机来了,黄仁勋想逆天改命,去搞手机芯片,还专程跑到北京用蹩脚的中文给小米雷军站台。 很可惜,英伟达的移动战略失败,老黄眼看着只能继续苟且在英特尔或者高通的阴影里。 谁想到,AlexNet从天而降,在智能时代深度学习的场景里,英伟达GPU大有可为。 公司市值已经抵得上三个英特尔。 一场比赛,让三十年硬件江湖换了姓,已经够吊炸天。 但是没完,ChatGPT问世,正式宣告,那场比赛掀起的革命不止于芯片江湖,软件、互联网、整个科技界,都要翻江倒海。 https://cloud.tencent.com/developer/article/2222661 |
AlexNet由三个人开发,计算机老教授辛顿(Geoffrey Hinton),还有他的两个学生,Alex Krizhevsky和小萨。Alex和小萨,都出生在苏联。 △左:Sutskever;中:Krizhevsky;右:Hinton;图源:多伦多大学 大赛夺魁后,第一个找上门来的竟然是百度。李彦宏非常喜欢,希望深度合作,先提供100万美元研究经费。 但是,也是因为百度太主动,师徒三人发现商机。 他们成了一家公司,没有收入,没有流水,没有业务,只有三个人。 他们要卖掉这家什么都没有的公司,而且,为了利益最大化,方式是——拍卖。 从第一份报价,百度的1200万美元开始。价格一步步上升,来到4400万美元。 只剩下谷歌和微软。两家都势在必得,准备更高的报价。 这时候,有了工程师独特的一面。 三个人不打算让两家巨头再加价,而是开始关心钱之外的事情,最终决定去谷歌。 辛顿老师说,4400万美元三个人平分。但是Alex和小萨坚持老师拿40%。 02 谷歌、微软、Facebook的战争已经全面打响。 谷歌用安卓抢走了微软的”操作系统之王”。微软狠狠砸钱用Bing搜索攻谷歌底盘。谷歌不再是进入互联网的入口,更多人打开电脑第一件事是登录社交网络Facebook。Facebook想争夺更多用户的时间和数据,要和谷歌争一争,谁才是这颗星球上最大的广告商。 三家都试过造手机,要从软件里走出来,掌握硬件的支配权。布林亲自挂帅,去搞谷歌眼镜。轰轰烈烈地推出,苟苟且且地失败。布林又挂帅去搞社交网络,Google+对着Facebook打,又失败。布林嘿嘿一笑,难为我了,我这个人不擅社交。晕倒,你可是公司里人尽皆知的沾花惹草花花公子啊。 如果微软、谷歌、Facebook是魏蜀吴,那么人工智能就是荆州,争荆州,就是争天下。 谷歌用4400万美元,买来一位老教授和两位天才少年。不久,用6.5亿美元,收购只有50人的DeepMind。真是,傲视群雄,笑傲江湖。 尤其是,这两场争夺,最后都是和微软、Facebook单挑。最后都不是钱的问题。最后都是谷歌“不战而屈人之兵”。 辛顿三人,4400万美元,微软说,我还可以加价,给你们很多很多money。三人说,不用了,我们去谷歌。 DeepMind也是,最后就剩谷歌和Facebook。如果选择Facebook的方案,团队每个人分到的现金是谷歌方案的两倍,但是创始团队不要去Facebook,坚持卖给谷歌。 当年的谷歌就是人帅钱多形象好,一句不作恶(Don’t do evil)的价值观口号喊进了天下极客的心里。 而微软是一个老迈的垄断者,大公司病晚期。 Facebook是个莽夫,暴发户,奉行增长高于一切。 马克·扎克伯格不服啊,凭什么你们总看不起我。人工智能,一定要拿下,不惜任何代价。 终于请来了大将——法国人杨立昆。 吊炸天的AlexNet,就是利用了杨立昆的研究成果卷积神经网络,站在了巨人的肩膀上。现在巨人来了。 2016年那场棋局,表面上看是AlphaGo单挑李世石。但是背后,是谷歌单挑Facebook。 Facebook要抢先手,到处宣扬自己在AI上的投入和成果,一点点进展就开发布会,请记者去总部参观。字里行间,就是希望树立起Facebook是人工智能的领导者,话事佬。还抛出一个话题,正在攻克围棋,再过几年Facebook的人工智能就能战胜人类最好的棋手。 △图源:DeepMind 但是谷歌为我们演示了,什么叫人狠话不多。DeepMind是一家几乎没有新闻的公司,有一天突然宣布,在一场闭门比赛里,打败了三届欧洲围棋冠军。 Facebook平时那么高调,扮老大,记者肯定第一时间找它。杨立昆很有信心地说,不可能!以我在行业的地位,如果真的开发出来了,一定会有人告诉我。AI要战胜顶级围棋棋手,还要几年时间。Facebook是领先的。 之后发生的一切,是人类科技史上极端残忍的一幕,是对Facebook的大型鞭尸现场。 AlphaGo大战李世石。第三天,比赛进入高潮,谷歌创始人布林飞到首尔,留下了这张经典照片。 △图:李世石(左一)、布林(右一) AI领导者马克扎克伯格怎么不在这么重要的历史照片里?哦,他在家里看电视呢,尴尬地用脚趾抠地板。 谷歌把竞争对手,收拾得服服帖帖的。 小萨,当年分到4400万美元的30%,去谷歌上班,被分到子公司DeepMind帮忙,搞一个下围棋的项目,为2016年的这场历史性的棋局,做出了基石性的贡献。 |
ImageNet Classification with Deep Convolutional Neural Networks Alex Krizhevsky University of Toronto kriz@cs.utoronto.ca Ilya Sutskever University of Toronto ilya@cs.utoronto.ca Geoffrey E. Hinton University of Toronto hinton@cs.utoronto.ca 杰弗里·辛顿(Geoffrey Hinton) 杰弗里·辛顿(Geoffrey Hinton),1947年12月6日出生于英国温布尔登,2018年图灵奖得主,英国皇家学会院士,加拿大皇家学会院士,美国国家科学院外籍院士,多伦多大学名誉教授。 [1-2] [7] 杰弗里·辛顿于1970年获得剑桥大学实验心理学学士学位;1976年受聘为苏塞克斯大学认知科学研究项目研究员;1978年获得爱丁堡大学人工智能学博士学位。1978年至1980年担任加州大学圣地亚哥分校认知科学系访问学者;1980年至1982年担任英国剑桥MRC应用心理学部科学管理人员;1982年至1987年历任卡内基梅隆大学计算机科学系助理教授、副教授;1987年受聘为多伦多大学计算机科学系教授;1996年当选为加拿大皇家学会院士;1998年当选为英国皇家学会院士;1998年至2001年担任伦敦大学学院盖茨比计算神经科学部创始主任;2001年至2014年担任多伦多大学计算机科学系教授; 2016年至2023年担任谷歌副总裁兼工程研究员;2023年从谷歌辞职。 [2] 杰弗里·辛顿致力于 神经网络、机器学习、分类监督学习、机器学习理论、 细胞神经网络、信息系统应用、马尔可夫决策过程、神经网络、认知科学等方面的研究。 [3] |
先快速多维度提取特征,同时快速收缩特征图, 结合最后的分类个数,再加1-3层处理,然后分类 相当于将铺在一个大平面上的信息...拆分...到一个个小平面上 最后将整合这些小平面,进行分类 ![]() 输入是3层特征图为[224,224]的图像,输出是1000个图像分类 maxpool负责收缩特征图 卷积提取特征 这时的卷积核还不是标准的311 |
from torchvision import models import torch from torch import nn from torch.nn import functional as F models.AlexNet() AlexNet( (features): Sequential( (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2)) (1): ReLU(inplace=True) (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False) (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) (4): ReLU(inplace=True) (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False) (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (7): ReLU(inplace=True) (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (9): ReLU(inplace=True) (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (11): ReLU(inplace=True) (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False) ) (avgpool): AdaptiveAvgPool2d(output_size=(6, 6)) (classifier): Sequential( (0): Dropout(p=0.5, inplace=False) (1): Linear(in_features=9216, out_features=4096, bias=True) (2): ReLU(inplace=True) (3): Dropout(p=0.5, inplace=False) (4): Linear(in_features=4096, out_features=4096, bias=True) (5): ReLU(inplace=True) (6): Linear(in_features=4096, out_features=1000, bias=True) ) ) |
import torch from torch import nn class AlexNet(nn.Module): """ 自定义AlexNet """ def __init__(self): # 这是一句必须要写的废话 super(AlexNet, self).__init__() # 定义提取特征部分 self.features = nn.Sequential( #(224+2*2 - 11)/4 + 1 = 55 nn.Conv2d(in_channels=1, out_channels=64, kernel_size=11, stride=4, padding=2), nn.ReLU(), #(55+0*2-3)/2 +1 = 27 nn.MaxPool2d(kernel_size=3, stride=2, padding=0), #(27+2*2-5)/1 + 1 =27 nn.Conv2d(in_channels=64, out_channels=192, kernel_size=5, stride=1, padding=2), nn.ReLU(), #(27+2*0-3)/2 +1 =13 nn.MaxPool2d(kernel_size=3, stride=2, padding=0), #后面都是311设计,也就是说此网络先是快速收缩了特征图大小,到一定程度后保持不变 #先快速收缩是建立在原特征图224*224比较大的前提下 nn.Conv2d(in_channels=192, out_channels=384, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.Conv2d(in_channels=384, out_channels=256, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.Conv2d(in_channels=256, out_channels=256, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2, padding=0) ) # 在一定程度上,可以输入任意大小的图像 self.avgpool = nn.AdaptiveAvgPool2d(output_size=(6, 6)) # 定义分类部分 self.classifier = nn.Sequential( nn.Dropout(p=0.5), nn.Flatten(), # 256*6*6=9126 nn.Linear(in_features=9216, out_features=4096), nn.ReLU(), nn.Dropout(p=0.5), nn.Linear(in_features=4096, out_features=4096), nn.ReLU(), nn.Linear(in_features=4096, out_features=10) ) def forward(self, x): # 提取特征 h = self.features(x) # 规范大小 h = self.avgpool(h) # 做分类 o = self.classifier(h) return o imgs = torch.randn(3,1,224,224) model = AlexNet() model(imgs).shape torch.Size([3, 10]) |
# 在一定程度上,可以输入任意大小的图像 self.avgpool = nn.AdaptiveAvgPool2d(output_size=(6, 6)) maxpool是按滑动窗口的方式,也就是卷积的方式取值 AdaptiveAvgPool2d则是,你想要一个什么shape的特征图,直接说,中间怎么算它自己想办法 |