苹果手机icliudl连接错误是什么意思

12345678910
搜索配件:
&&价格区间:从
价格:¥4.00 元
最近30天销量:月销 0 笔
商品来源:
&购物咨询(商品客服):
由卖家 不可思议的旺仔 从 广东 深圳 发货
推荐服务商:&&&&&&&&&&
商品详情图
商品标签云
买过的人评价...
卖家:liumengyangl
来自:广东 深圳
最近30天销量:0件
相关内容:&
卖家:mariahs
来自:广东 深圳
最近30天销量:0件
相关内容:&
卖家:欢乐购物16885
来自:广东 深圳
最近30天销量:33件
相关内容:&
卖家:芯立方1987
来自:广东 深圳
最近30天销量:46件
相关内容:&
卖家:珊瑚秋雨林子
来自:广东 深圳
最近30天销量:5件
相关内容:&
卖家:山羊多普达
来自:广东 深圳
最近30天销量:3件
相关内容:&
卖家:星期8店
来自:广东 深圳
最近30天销量:10件
相关内容:&
卖家:数码配件通讯
来自:广东 深圳
最近30天销量:7件
相关内容:&
卖家:欢乐购物16885
来自:广东 深圳
最近30天销量:35件
相关内容:&
卖家:lailaitao888
来自:广东 深圳
最近30天销量:637件
相关内容:&
卖家:华强北赛格通信分店
来自:广东 深圳
最近30天销量:4件
相关内容:&
卖家:鸿宇科技电子
来自:广东 深圳
最近30天销量:0件
相关内容:&
双氙商品标签云画像 正在为您生成中,请稍候再来哟...
您或许还喜欢
50.00&&&&(无折)
3.00&&&&(无折)
8.00&&&&(无折)
10.00&&&&(无折)
7.00&&&&(无折)
7.00&&&&(无折)
5.00&&&&(无折)
5.00&&&&(无折)
请留下你对双氙的意见或建议,感谢!
(如果有个人或商家的相关问题需要解决或者投诉,请致电400-000-5668)
联系电话/微信/QQ:
支持中英文(Support in both Chinese and English)
感谢您的反馈,我们会努力做得更好!dl-4 IC dl-4现货 dl-4价格 dl-4热卖dl-4库存dl-4特价 集成电路 ROHS 芯片
供应商 制造商dl-4.PDF资料下载 盛明零件网
全部供货商
└我的供货商
ICMC认证:现货供货商
├都会100电子城
├新亚洲电子城
├华强电子世界
├赛格电子广场
└高科德交易中心
├中发电子城
├中海园电子城
└知春电子城
└粤东电子城
其它地区...
ICMC认证:供货
经营品种<1000的供货商
经营品种<5000的供货商
经营品种<10000的供货商
技术资料 手册 图纸
张小姐Tel:9 业务专线 深圳市高新科技园QQ:
DL-4140-005
更多型号请加QQ:
陈小姐/徐小姐/王先生/陈先生Tel:9/75//Fax:9Mobil:深圳市华强北路华强广场C幢15DQQ:
DL-4140-003
更多型号请加QQ:
DL-4140-002A
更多型号请加QQ:
DL-4140-002
更多型号请加QQ:
更多型号请加QQ:
更多型号请加QQ:
陈小姐/徐小姐/王小姐/林小姐Tel:9/77//Fax:9/Mobil:深圳市原赛格电子市场21楼2111B,已搬迁到:华强北路华强电子市场C幢15DQQ:
更多型号请加QQ:
更多型号请加QQ:
DL-4038-026
更多型号请加QQ:
DL-4034-154S
更多型号请加QQ:
更多型号请加QQ:
陈小姐/陈先生Tel:9/75//Fax:9/Mobil:深圳市华强北路华强电子广场C幢15D Msn:QQ:
更多型号请加QQ:
更多型号请加QQ:
更多型号请加QQ:
DL4753AT/R
更多型号请加QQ:
&nbsp陈先生/董小姐Tel:3Fax:3Mobil:深圳市深南中路南光捷佳大厦1531房/市场部:华强北高科德电子交易中心阁楼1827室(本公司可开17%增值税票)Msn:QQ:
原装现货优势热卖!
&nbsp吴先生 马小姐
吴小姐Tel:3 / 010811 都会电子城2C058Fax:1Mobil:深圳市福田区都会电子城2C058Msn:QQ:
DL-4140-005
杨小姐 陈小姐 张先生Tel:021-72165Fax:021-Mobil:上海市黄浦区北京东路668号科技京城西楼Msn:QQ:
DL-4140-003
DL-4140-002A
DL-4034-154A
DL4753A T/R
&nbsp李 先生Tel:电子市场QQ:
DL-4140-005
DL-4140-003
Total found 56 in Search took 0.00 seconds|37|</font||||
搜索全部供货商
└我的供货商
├新亚洲电子城
├都会100电子城
├华强电子世界
├赛格电子广场
└高科德交易中心
├中发电子城
├中海园电子城
└知春电子城
└粤东电子城
其它地区...
ICMC认证:现货
ICMC认证:供货
经营品种<1000的供货商
经营品种<5000的供货商
经营品种<10000的供货商
公司名 电话 地址 QQ msn email ...
技术资料 手册 图纸 代换 ...
盛明零件网&&&
Tel:020-&&&Fax:020-
Copyright &&ICminer, All rights reserved|&&当前位置:&>>&&>>&&>>&IC694MDL645当前价格:1000 最小起订:1所在地址:福建省厦门市发布时间:有效期至:180查看类似产品商品详细美国CNBC网站8月6日文章,原题: 非专利伟哥将改变中国?“伟哥”在中国的专利权已经过期,某些分析人士认为,更便宜的价格将使对该药的需求激增,毕竟这是治疗男性难言之隐的“名药”。
“中国市场是利润丰厚的诱人‘蛋糕’,”美国弗若斯特沙利文咨询公司中国区总经理尼尔·王说,“通用药进入市场将引发激烈竞争。”
中国潜在销售涨幅将非常大。花旗集团在近期报告中表示,到2018年时,这种药的销售额将增至2013年的3倍,从约17亿元上升至约50亿元。
据估计,在中国,由辉瑞公司生产的“伟哥”约占40%至45%的市场份额,而专利过期后,它的市场份额有望达到一半以上。辉瑞称,去年该药的全球销售额约为18.8亿美元。花旗集团表示,价格或许成为销量增加的主要推动力,曾经每片50至70元、令中国患者望而却步的标价有可能降低30%至50%。
花旗集团近年来对泌尿科医生的采访,以及在大城市进行的其他调查发现,在中国,需要服用该药的大有人在,且这个人群仍在增长。25岁以上的男性用药者将增加10%-25%。尚不完全清楚勃起障碍者为何日益增多,但可能和工作压力、污染蔓延,以及吸烟、喝酒和高脂肪饮食等不健康生活方式有关。
【联系我们】
& 业务经理 &: & & & 刘经理
& 洽谈电话 &: & & &
& 商务 QQ & : & & &
& 传真(FAX): & & &
(请注明,01003 收)
&公司网址:
& 公司全称 &:&
厦门泰尼电气有限公司
& 公司地址 &: &&
厦门市海沧区海沧街道滨湖一里7号
本公司专业销售全球知名品牌备品备件
主营产品:
【1】DCS控制系统&
【2】机器人系统
【3】PLC系统&
【4】伺服数控系统
欢迎来电咨询,我们将会给您最优质的服务!
产品详细信息,欢迎来电查询!
只要是您想要的,我都能帮您找到,价格从优!
您急需的产品,请联系我们!
您询不到的产品,请联系我们!
您买不到的产品,请联系我们!
下面是我公司的优势产品(日常用的最多的,还有不常用的未列出,但都有做的)欢迎您的咨询!
施耐德140系列、AS系列
Honeywell 620系列
AB RELIANCE ELECTRIC系列
AB 、、C、1336F、1745等系列&
ABB机器人备件 DSQC系列,FOBXORO FBM开头,
TRICONEX系列 E 3604E等,motorola MVME系列,XYCOM产品
Siemens 6DD 6SC 6SN 6FC 6GK 6FX S5系列 等&
Siemens TI 5系列开头
Siemens Moore APACS&
GE IC647/693/697/IC660系列
相关型号:
TRICONEX 3511 &&
TRICONEX 3805E &
TRICONEX 4351B &
TRICONEX 3625 &&
TRICONEX 3503E &
TRICONEX 3008 &&
TRICONEX 3806E &
TRICONEX 8312 &&
TRICONEX 3700A & &
Omron G9SA-301 Safaty Relay Unit 24V/C DC
Simpson F-35-1-24-0
Pilz PNOZXVZ0.5 24VDC 585
PILZ PNOZ X3 120VAC/24VDC Relay
SOLA ELECTRIC SCP30S05B-DN
PSE201 Pressure SENSOR CONTROLLER 4CH 5OUT
Telemecanique XPS-AM Ref XPSAM5140
Lucas Schaevitz Pressure Transducer P3061-50WG
ADC Telecom Doubler EDU-842
Magiclink CCD and J1850 Interface Model 1.1
Banner Engineering Corp. minneapolls ITA13P
MURR 85-660 NT3 5-35V 3-5A
Bernstein D-31675 Bueckeburg
IDEC Power Supply PS5R-E24 100W
4600100 Single Channel 6-Pin MS Connector 100 PPR
Robinair Thermistor Vacuum Gauge 44416 Thermistor Gauge
Parker PS701P
Weidnuller 992748 Power Supply
Yokogawa Type 2011 Class 0.5 S Type
Weston 25-1000 Hz Amperes A.C.
Cisco Systems 2500 Series Router
25-84033-25
CARLO GAVAZZI IEC 158-2 VDE 0660 SEMICONDUCTOR CONTACTO
Sanki PFC-110A UWF Power Supply
Sanki MFC-N3 Power Supply
Walter Procon Prod Code WX16PE 10 Pcs
Timing and Control PCB -00 Rev B
Unitech Bar Code Reader MS 180-1UG
Walter Procon Serie B32 500V Prod Code VC15PE 10 Pcs
Fuji SW-03C Magnetic Switch
Power Supply Model DPS-240RB
Lucas Schaevitz Pressure Transducer P3061-10WG
MINARIK XL3025A-Q-0583
Omega PSS-10 Power Supply
280.0?n0.??G??
mso-layout-grid-align:text-autospace:none'&Cable Data Kit HP P/N
&&&普通用户&&&&公司信息已审核厦门泰尼电气有限公司销售部公司地址:海沧街道滨湖一里7号主营产品:全球知名品牌DCS,PLC 备品备件销售 &&联系人:小刘联系方式: &&||您可能感兴趣的 ¥1.00/台 ¥1.00/台 ¥1.00/台 ¥1.00/台 ¥1.00/台 ¥1.00/台相关产品&&&&&&&&同类商品展示 ¥1.00/台 ¥1.00/台 ¥1.00/台 ¥1.00/台 ¥1.00/台 ¥1.00/台免责声明:本站所展示的公司信息、产品信息及其他相关的信息均由企业自行提供,内容的真实性、准确性和合法性由发布企业负责。本站对此不承担任何保证责任。友情提醒: 建议您在购买相关产品前务必确认供应商资质及产品质量,交易有风险,请谨慎对待,以免因此造成自身的损失。本站声明:严禁任何单位和个人模仿、转载、抄袭及冒名中国工业电器网() |
|客服1:&客服2:&客服3:&战略合作:&新闻投稿:中国工业电器网服务热线:400-688-6377 合作电话:021- 传真:021- 邮编:201812 信箱:新闻投稿邮箱:上海总公司地址:上海 金园一路999号(中国工业电器大厦)上海易电网络科技有限公司 版权所有 增值电信业务经营许可证 沪B2-&img src=&/v2-c77dbbd93aa99_b.png& data-rawwidth=&1077& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1077& data-original=&/v2-c77dbbd93aa99_r.png&&&blockquote&题图为 DCGAN 生成的动漫人物头像,来自 &a href=&/?target=https%3A///mattya/chainer-DCGAN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&mattya&i class=&icon-external&&&/i&&/a& 。&br&写于一六年十月。&/blockquote&&h3&一些直觉&/h3&&blockquote&&p& What I cannot create, I do not understand. - Richard Feynman&/p&&/blockquote&&p&费曼的这句话可谓脍炙人口,而且,不像大多数名人口中说出的名言一样,它相当有道理。学数学的时候,我常有这样的体会。就算你把整本书背过,如果你并不能完完整整地把每个定理的证明,庖丁解牛成直径一厘米的牛肉粒,then eventually your learn nothing 。&/p&&p&这句话的逆否命题显然有相当多的佐证:你了解四则运算法则,理解语法树,所以可以写出程序来 parse 一个算式,进而「创造」一个计算器;你知道 兔子的样子,所以你可以纸上勾勒出一只兔子,不管是躺着的还是坐着的,荷兰兔还是垂耳兔,只要你想画一只兔子,那么画出来的都是兔子。&/p&&br&&br&&img src=&/v2-444c011f879daeee30eb23cc2af2ac7d_b.png& data-rawwidth=&680& data-rawheight=&437& class=&origin_image zh-lightbox-thumb& width=&680& data-original=&/v2-444c011f879daeee30eb23cc2af2ac7d_r.png&&&br&&p&那么,你的知识里关于兔子的那一部分是什么呢?&/p&&p&没准可以看做是一个函数。&/p&&p&你可以想象成,你是一个「兔子」生成器,而你生成的兔子显然不是一成不变的,因为几乎所有事都可能影响你在下笔时从尾巴或耳朵开始着笔—-如果借用计算机的术语,你接受的一切影响在你的内部形成了一个「熵池」,这个「熵池」为你的创作源源不断地提供随机因素—譬如下笔的位置,你想画的兔子种类,是否在吃胡萝卜…这个「熵池」对你的影响,显然是一个概率分布,经过你(一个兔子生成函数)的变换,变成了你生成的兔子的概率分布。&/p&&p&这还没完,大家都会画兔子,但是你们会画皮卡丘吗?&/p&&img src=&/v2-a0dde39762cef2370bf98_b.png& data-rawwidth=&500& data-rawheight=&846& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&/v2-a0dde39762cef2370bf98_r.png&&&br&&p&一般人会做的事情:照着教程或者凭空想象-&试着画几笔-&发现不像-&google pikachu-&对着皮卡丘改动自己的画-&就这样吧&/p&&p&总结下来,就是根据真实的样本,不断修改自己的画作,同时修正脑海中的记忆(参数),直到自己画的皮卡丘看起来跟真的差不多为止。&/p&&p&That‘s basically what GAN ( Generative Adversarial Network ) does.&/p&&p&注意,以上的类比绝不准确,任何类比都不准确。但这可能为那些想知道 GAN 在做什么,而又不想看数学的人一个直觉,即:GAN 在用一个 &em&parameterized distribution&/em& 逼近真实样本的分布。&/p&&h3&一些架构&/h3&&p&GAN 通常分为两个部分,generator ( denoted as &img src=&/equation?tex=G& alt=&G& eeimg=&1&& ) , discriminator (denoted as &img src=&/equation?tex=D& alt=&D& eeimg=&1&& ) 。&/p&&p&其中 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 的作用就是通过接收一个 random noise ( often denoted as &img src=&/equation?tex=z& alt=&z& eeimg=&1&& ), 来生成一个样本的概率分布 &img src=&/equation?tex=G%28z%3B%5Cpsi%29& alt=&G(z;\psi)& eeimg=&1&&,其中 &img src=&/equation?tex=%5Cpsi& alt=&\psi& eeimg=&1&& 是 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 的参数。&img src=&/equation?tex=G& alt=&G& eeimg=&1&& 通常是一个 deconvolution net, 例如 DCGAN 里的 generator 。&/p&&p&而 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 的作用则是一个二分类器,可能的实现有:MLP (vanilla version) ;一个 CNN extractor ,后接一个 sigmoid ;或者一个 autoencoder+重建损失 (in &a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&EBGAN&i class=&icon-external&&&/i&&/a&, we will reach it later)
。&img src=&/equation?tex=D& alt=&D& eeimg=&1&& 的作用是区别 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 生成的样本与真实样本。我们用 &img src=&/equation?tex=D%28x%29& alt=&D(x)& eeimg=&1&& 代表这个二分类器输出的 &img src=&/equation?tex=x& alt=&x& eeimg=&1&& 为正例(真实样本)的概率。 &/p&&p&理论上来说,GAN 的训练分两步就够了:&/p&&ul&&li&为了用 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 近似真实样本的概率分布,我们首先应该用真实样本和生成样本训练D,以期得到一个可以完美分类真实样本和生成样本的分类器。假设我们训练得到了这个分类器,那么此时D(x)就是x是正例的概率。通过训练,我们实际上得到了&img src=&/equation?tex=P%28c%7CX%29& alt=&P(c|X)& eeimg=&1&&, 其中c为类别(正例或负例), X为可能的样本。&/li&&li&为了得到&img src=&/equation?tex=P%28X%7Cc%3D1%29& alt=&P(X|c=1)& eeimg=&1&& , 继续训练 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 来最小化&img src=&/equation?tex=E_%7Bz%5Csim+p_z%28z%29%7D%281-P%28c%3D1%7CG%28z%29%29%29& alt=&E_{z\sim p_z(z)}(1-P(c=1|G(z)))& eeimg=&1&& 。如果训练完美, 那么此时&img src=&/equation?tex=G%28z%29%2C+z%5Csim+some%5C+distribution& alt=&G(z), z\sim some\ distribution& eeimg=&1&& 就是&img src=&/equation?tex=P%28X%7Cc%3D1%29& alt=&P(X|c=1)& eeimg=&1&&&/li&&/ul&&p&在最初 &em&Ian et all&/em& 的 &a href=&/?target=https%3A//arxiv.org/pdf/.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Generative Adversarial Nets&i class=&icon-external&&&/i&&/a& 里,把 GAN 形容为一个 minimax game (极大极小博弈),按照这种说法,GAN 要做的就是下面的这个任务:&/p&&p&
&img src=&/equation?tex=%5Cunderset%7BG%7D%7Bmin%7D%5Cunderset%7BD%7Dmax+V+%28D%2C+G%29+%3D+E_%7Bx%5Csim+p_%7Bdata%7D%28x%29%7D%5Blog+D%28x%29%5D+%2B+E_%7Bz%5Csim+p_z%28z%29%7D%5Blog%281+-+D%28G%28z%29%29%29%5D%5C+%5C+%5C+%5C+%5C+%5C+%281%29& alt=&\underset{G}{min}\underset{D}max V (D, G) = E_{x\sim p_{data}(x)}[log D(x)] + E_{z\sim p_z(z)}[log(1 - D(G(z)))]\ \ \ \ \ \ (1)& eeimg=&1&&&/p&&p&这其实就是以上的两步训练过程,内层的最大化就是第一步,做的其实是最小化 &img src=&/equation?tex=D%28X%29& alt=&D(X)& eeimg=&1&& 与 &img src=&/equation?tex=P%28c%7CX%29& alt=&P(c|X)& eeimg=&1&& 的 cross entropy loss。外层的最小化就是第二步, 做的是在最小化 &img src=&/equation?tex=E_%7Bz%5Csim+p_z%28z%29%7D%281-P%28c%3D1%7CG%28z%3B%5Cpsi%29%29%29& alt=&E_{z\sim p_z(z)}(1-P(c=1|G(z;\psi)))& eeimg=&1&& 。&/p&&p&以上的训练过程看起来很清晰,我们只需要两步就能得到真实数据的分布,但现实中却并非如此。&/p&&p&第一,我们的 generator 并不是一个真正的「生成样本」的分布,通常我们的用作 generator 的模型的 capacity 都是有限的,它很大可能只是生成了所谓「生成样本流形」中一个子流形。所以如果我们用这样的 generator 生成的样本和真实样本去训练 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& ,是不可能得到真正的 &img src=&/equation?tex=P%28c%7CX%29& alt=&P(c|X)& eeimg=&1&& 的,直觉上而言,因为这样的 discriminator 只能把一个子流形与真实样本模型分开,所以这个 discriminator 可能太「松」。&/p&&p&第二,&img src=&/equation?tex=D& alt=&D& eeimg=&1&& 的 capacity 也有限。&/p&&p&所以,在现实中,我们没法用两步优化就得到真实样本的概率分布。&em&Ian et all&/em& 在论文里提出了一种交替优化的方法解决这个问题。&/p&&img src=&/v2-f6e03e1cf18b7ddb944a1d_b.png& data-rawwidth=&1088& data-rawheight=&706& class=&origin_image zh-lightbox-thumb& width=&1088& data-original=&/v2-f6e03e1cf18b7ddb944a1d_r.png&&&br&&p&这个算法其实就是:用 SGD ,先对做 k 步 equation (1) 内部最大化,再做外部的最小化。论文证明了这个算法在模型的 capacity 足够强,&img src=&/equation?tex=D& alt=&D& eeimg=&1&& 每次优化都达到最优的时候,&img src=&/equation?tex=G& alt=&G& eeimg=&1&& 学习到的概率分布收敛于真实分布。&/p&&p&证明的具体过程在 &em&Ian et all&/em& 的论文里写的很详细,这里不表。但这个证明中间还说明了一件事:如果训练中 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 达到最优的话,那么 equation (1) 外部的 loss function (也是内部的最优化结果)就是 &img src=&/equation?tex=p_%7Bdata%7D& alt=&p_{data}& eeimg=&1&& 和 &img src=&/equation?tex=p_g& alt=&p_g& eeimg=&1&& 的 Jensen–Shannon divergence 的一个线性函数:&/p&&img src=&/equation?tex=C%28G%29+%3D+-log%284%29%2B2+%C2%B7+JSD+%5Cleft+%28p_%7Bdata%7D%5Cmiddle%7C+p_g+%5Cright%29+%0A%0A& alt=&C(G) = -log(4)+2 · JSD \left (p_{data}\middle| p_g \right)
& eeimg=&1&&&p&而 JSD 非负,且当且仅当在 &img src=&/equation?tex=p_%7Bdata%7D& alt=&p_{data}& eeimg=&1&& 和 &img src=&/equation?tex=p_g& alt=&p_g& eeimg=&1&& 相等时为0,所以此时这个 minimax game 达到最优。&br&&/p&&p&注意,这时得到的 &img src=&/equation?tex=C%28G%29& alt=&C(G)& eeimg=&1&& ,也即外部最小化的 loss function ,是关于 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 的,对于不同的 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 优化同一个 loss function 是无意义的,这也是我们交替进行最大化与最小化的目的:最大化得到当前 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 对应的最好的 loss function ,然后最小化这个 loss function 得到更好的 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 。&/p&&blockquote&&p&一点直觉: 关于 GAN 最有名的说法应该是「两个玩家进行博弈以期达到纳什均衡」,这或许是 “A” — adverserial 的来源。你尽可以这样想,也尽可以将以上的训练过程与&em&一些直觉&/em& 里的例子进行类比—-尽管他们不准确,但这多有趣:一个玩家完善他的伪装,另个玩家根据偶尔现形的他的行踪,升级自己的侦查系统;伪装者又根据试探、猜测和潜入,涂画他的伪装以对抗新型的侦察系统…模型可以很有趣,只要我们不看数学(误)。&/p&&/blockquote&&h3&关于参数更新&/h3&&p&在原论文中,作者提到了 equation (1) 在训练式的 gradient vanishing 问题:&/p&&img src=&/v2-056ed4db990153ccf3a8ee200afae770_b.png& data-rawwidth=&1100& data-rawheight=&171& class=&origin_image zh-lightbox-thumb& width=&1100& data-original=&/v2-056ed4db990153ccf3a8ee200afae770_r.png&&&br&&p&当训练刚开始时候,&img src=&/equation?tex=D%28G%28z%29%29& alt=&D(G(z))& eeimg=&1&& 很小,这时候 &img src=&/equation?tex=log%281-D%28G%28z%29%29%29& alt=&log(1-D(G(z)))& eeimg=&1&& 趋向饱和,而 &img src=&/equation?tex=logD%28G%28z%29%29& alt=&logD(G(z))& eeimg=&1&& 的导数却很可观,所以与其最小化 &img src=&/equation?tex=log%281-D%28G%28z%29%29%29& alt=&log(1-D(G(z)))& eeimg=&1&& 不如最大化
&img src=&/equation?tex=logD%28G%28z%29%29& alt=&logD(G(z))& eeimg=&1&& 。&/p&&p&Vanilla 版本的参数更新:&/p&&img src=&/equation?tex=%5Ctheta_%7Bt%2B1%7D%5Cleftarrow%5Ctheta_t-%5Cepsilon_%7Bt%7D%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%5Ctheta%7DE_%7Bz%5Csim+N%7Dlog%281-D%28G%28z%3B%5Ctheta_t%29%3B%5Cpsi_%7Bt%2B1%7D%29%29& alt=&\theta_{t+1}\leftarrow\theta_t-\epsilon_{t}\frac{\partial}{\partial\theta}E_{z\sim N}log(1-D(G(z;\theta_t);\psi_{t+1}))& eeimg=&1&&&br&&p&第二种参数更新方法:&/p&&img src=&/equation?tex=%5Ctheta_%7Bt%2B1%7D%5Cleftarrow+%5Ctheta_t%2B%5Cepsilon_%7Bt%7D%5Cfrac%7B%5Cpartial%7D%7B%5Cpartial%5Ctheta%7DE_%7Bz%5Csim+N%7Dlog%28D%28G%28z%3B%5Ctheta_t%29%3B%5Cpsi_%7Bt%2B1%7D%29%29& alt=&\theta_{t+1}\leftarrow \theta_t+\epsilon_{t}\frac{\partial}{\partial\theta}E_{z\sim N}log(D(G(z;\theta_t);\psi_{t+1}))& eeimg=&1&&&br&&blockquote&&p&其中 &img src=&/equation?tex=%5Ctheta_%7Bt%7D& alt=&\theta_{t}& eeimg=&1&& 为 t 时刻的 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 的参数,&img src=&/equation?tex=%5Cpsi_t& alt=&\psi_t& eeimg=&1&& 为 t 时刻的 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 的参数,&img src=&/equation?tex=%5Cepsilon_t& alt=&\epsilon_t& eeimg=&1&& 为 t 时刻的学习率&/p&&/blockquote&&p&在 Ferenc Huszár 的&a href=&/?target=http%3A//www.inference.vc/are-energy-based-gans-actually-energy-based/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&blog&i class=&icon-external&&&/i&&/a&
里,提出了第三种参数更新方法,就是将两种更新的 &img src=&/equation?tex=%5CDelta_%7Bt%7D& alt=&\Delta_{t}& eeimg=&1&& 相加:&/p&&img src=&/v2-6e2118dd48aaadaaed2a7363deafeda0_b.png& data-rawwidth=&947& data-rawheight=&89& class=&origin_image zh-lightbox-thumb& width=&947& data-original=&/v2-6e2118dd48aaadaaed2a7363deafeda0_r.png&&&p&这样就避免了两端可能的 saturate 问题。而且 Ferenc 证明了,相对于第一种更新(在最小化 JSD),新的 &img src=&/equation?tex=%5CDelta_t& alt=&\Delta_t& eeimg=&1&& 其实在最小化 KLD。KLD 与 JSD 有一些相同的性质,比如非负和当且仅当两个分布相同时才为 0 ,所以新的 loss function 也是有意义的。&/p&&p&另外,如果 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 最后有一个 sigmoid 层输出概率的话,新的 loss function 其实是 score ,就是 sigmoid 层之前的输出,所以采用新的参数更新方法,还可以避免 sigmoid 的计算(我想是微不足道的)。&/p&&h3&EBGAN (energy-based view GAN)&/h3&&p&Legun 的实验室九月放出了一篇论文:&a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&EBGAN&i class=&icon-external&&&/i&&/a& ,即 energy-based GAN ,意在从 energy 的角度来阐述 GAN 。图为它的 architecture:&img src=&/v2-71fcb497cc7_b.png& data-rawwidth=&1077& data-rawheight=&329& class=&origin_image zh-lightbox-thumb& width=&1077& data-original=&/v2-71fcb497cc7_r.png&&&/p&&p&EBGAN 的 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 是一个 auto encoder ,其中 auto encoder 的误差就是所谓的 energy ,可以通过 Gibbs distribution 转化成概率分布。&img src=&/equation?tex=D& alt=&D& eeimg=&1&& 的 loss function 如下:&br&&img src=&/equation?tex=f_%7BD%7D%3DE_%7Bx%5Csim+p_%7Bdata%7D%7D%5Cleft%5Clvert+Dec%28Enc%28x%29%29+-+x%5Cright%5Crvert+%2B+%5Bm-E_%7Bz%5Csim+p_z%7D%5Cleft%5Clvert+Dec%28Enc%28x%29%29+-+x%5Cright%5Crvert%5D%5E%2B%0A& alt=&f_{D}=E_{x\sim p_{data}}\left\lvert Dec(Enc(x)) - x\right\rvert + [m-E_{z\sim p_z}\left\lvert Dec(Enc(x)) - x\right\rvert]^+
& eeimg=&1&&&br&&/p&&blockquote&&p&&img src=&/equation?tex=%5B%C2%B7%5D%5E%2B& alt=&[·]^+& eeimg=&1&& 为 &img src=&/equation?tex=max%28%C2%B7%2C+0%29& alt=&max(·, 0)& eeimg=&1&&&/p&&/blockquote&&p&其中的直觉是,训练这个 auto encoder 使其输出的能量函数对于两种样本有一个距离 ,这样的 loss function 有很多,上面的 margin loss 只是其中的一种,直观上讲,训练它等同于将能量在 [0, m] 中的不同类别的样本往不同的方向推,最小化真实样本的 energy 直到 0,最大化生成样本的 energy 直到 m,以此起到 「分辨」 两种样本的作用。&/p&&blockquote&&p&我不知道为什么用 auto encoder 来拟合这个能量函数,可能是因为对于某个分布来说,能量低的地方,样本就多一点,对于这些地方的样本的重建误差就少一点( still not sure )。&/p&&/blockquote&&p&因为 energy 可以通过 Gibbs distribution 转换成概率分布,所以 energy-based view 可以跟 probabilistic view 联系起来。如果用 energy 的观点来看 vanilla GAN 的话,那么原来的 loss function 的 margin 就是 &img src=&/equation?tex=%5Cinf& alt=&\inf& eeimg=&1&& ,它倾向于把真实样本的 energy 「推」到 &img src=&/equation?tex=-%5Cinfty& alt=&-\infty& eeimg=&1&& ,把生成样本的 energy 「推」到 &img src=&/equation?tex=%2B%5Cinfty& alt=&+\infty& eeimg=&1&& ,作者认为,这样的 margin 太松了,其实只要有一定的margin, &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 的作用就够了。&/p&&p&关于 EBGAN ,Ferenc 将其他 GAN 的 energy 观点与其比较,认为 EBGAN 从本质上来说,并不比其他 GAN 更 energy-based ,同时他也不清楚 auto encoder 在这里起到了什么作用,而且作者并没有证明为什么拟合 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 的 loss function 正好使得 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 的输出是 energy。文章&a href=&/?target=http%3A//www.inference.vc/are-energy-based-gans-actually-energy-based/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&在这&i class=&icon-external&&&/i&&/a&。&/p&&p&值得一提的是,EBGAN 这篇论文提出了一个训练 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 时的正则项,目的是为了让生成的样本更加多样化,直觉很简单,就是把一个 batch 里的所有样本通过 encoder 后得到的 code,取一个两两的 cos ,再取平均。这样当这个正则化项达到最小时,其实就是这些样本的 code 在 encoding space 最接近两两垂直的时候。这个正则化项长这样:&img src=&/v2-2faccfd67c58f6301f12c_b.png& data-rawwidth=&497& data-rawheight=&83& class=&origin_image zh-lightbox-thumb& width=&497& data-original=&/v2-2faccfd67c58f6301f12c_r.png&&&/p&&blockquote&&p&Repelling Regularizer &/p&&p&顾名思义,batch 内的图片将会互相排斥,直到相互垂直。&/p&&/blockquote&&h3&Info-GAN&/h3&&p&在 GAN 里,我们可以把一些服从一定先验的 latent code 转化成一张图片,&a href=&/?target=https%3A///jacotar/sound-GAN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一段音频&i class=&icon-external&&&/i&&/a& ,但这些 latent code 都是毫无意义的(至少在人类看来),那能不能通过某种训练,使得这些 latent code 有某种我们可以理解的意义? Info-GAN 就做了这样的工作,它把一开始的 latent code 分为两部分,一部分满足一定先验,与 vanilla GAN 的latent code 相同,记为 &img src=&/equation?tex=z& alt=&z& eeimg=&1&& ,另一部分就是我们想要的表示,记为 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 。&/p&&p&那么问题又来了,如果用原来的训练方法,GAN 完全可以学到跟 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 毫无关系的分布,那么这时候把 latent code 分为两部分就毫无意义了。另一方面, GAN 是无监督的,如果有 label ,我们可能可以优化 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& ,使得 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 正好代表样本的某个属性,比如,3D 人脸图片中的角度。但我们现在没有 label ,我们所能够做的,只有想办法让这些图片的属性在不同的 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 下尽量区别开来,最好是 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 的每个分量代表某种属性,当这个分量变化时,生成样本的属性也会随之连续变化。用文章中的话讲,就是让 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 的各个分量 distangled with each other 。至于这样会学出什么属性,在训练前其实完全糊涂,但如果训练得当,&img src=&/equation?tex=c& alt=&c& eeimg=&1&&
的某个分量一定会学到最显著的那个维度,我觉得这取决于你给的样本的丰富度。&/p&&p&Info-GAN 是从信息角度考虑的,如果 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 真的是这个样本的一个理想的表示,那么从 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 就可以得到样本,从样本也可以得到 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& ,换句话说,这两者之间拥有完全可逆的函数关系,这个时候 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 与 &img src=&/equation?tex=G%28c%2C+z%3B%5Cpsi%29& alt=&G(c,\psi)& eeimg=&1&& 之间的信息就是完全一样的(这当然是不可能的,因为 &img src=&/equation?tex=z& alt=&z& eeimg=&1&& 也要起作用),换句话讲,此时 &img src=&/equation?tex=I%28c%2C+G%28c%2C+z%3B%5Cpsi%29%29& alt=&I(c, G(c,\psi))& eeimg=&1&& 达到最大值。反过来,如果 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 与 &img src=&/equation?tex=G%28c%2C+z%3B%5Cpsi%29& alt=&G(c,\psi)& eeimg=&1&& 之间完全没有关系,那么此时 &img src=&/equation?tex=I%28c%2C+G%28c%2C+z%3B%5Cpsi%29%29& alt=&I(c, G(c,\psi))& eeimg=&1&& 达到最小值 0 。所以这就给了我们一个直觉,只要最大化
这两者之间的互信息,就能得到与 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 密切相关的生成样本。Info-GAN 将这个互信息作为正则项添加到了原来的 loss function 中:&img src=&/v2-0dc1ca94d4bab6277af06fc_b.png& data-rawwidth=&737& data-rawheight=&55& class=&origin_image zh-lightbox-thumb& width=&737& data-original=&/v2-0dc1ca94d4bab6277af06fc_r.png&&&/p&&p&那我们只需要一种可以计算 &img src=&/equation?tex=I%28c%2C+G%28c%2C+z%3B%5Cpsi%29%29& alt=&I(c, G(c,\psi))& eeimg=&1&& 的途径就行了,这并不简单,因为我们需要计算 &img src=&/equation?tex=P%28c%7CX%29& alt=&P(c|X)& eeimg=&1&& ,而它是没法直接计算出来的,所以我们需要用 &img src=&/equation?tex=Q%28c%7CX%29& alt=&Q(c|X)& eeimg=&1&& 来代替它,以获得 &img src=&/equation?tex=I%28c%2C+G%28c%2C+z%3B%5Cpsi%29%29& alt=&I(c, G(c,\psi))& eeimg=&1&& 的一个下界:&img src=&/v2-e7abe1fd16b135d6bfe0dd0006c3dfa8_b.png& data-rawwidth=&936& data-rawheight=&203& class=&origin_image zh-lightbox-thumb& width=&936& data-original=&/v2-e7abe1fd16b135d6bfe0dd0006c3dfa8_r.png&&&/p&&p&但内部的 expectation 还是需要从 &img src=&/equation?tex=P%28c%7CX%29& alt=&P(c|X)& eeimg=&1&& sample 点,所以直接用个 &a href=&/?target=https%3A///en/Law_of_total_expectation& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&total exception theorem&i class=&icon-external&&&/i&&/a& ,就可以变成如下形式:&img src=&/v2-eed64b1e012d2d6274be5_b.png& data-rawwidth=&742& data-rawheight=&139& class=&origin_image zh-lightbox-thumb& width=&742& data-original=&/v2-eed64b1e012d2d6274be5_r.png&&&/p&&p&而 &img src=&/equation?tex=Q%28c%7Cx%29& alt=&Q(c|x)& eeimg=&1&& 是可以通过 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 再加上一个 softmax layer 来拟合的,所以我们可以直接对新的 &img src=&/equation?tex=V_I& alt=&V_I& eeimg=&1&& 进行优化。因为我们只对 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 上加了一个 softmax layer ,所以这个正则项几乎是 cost-free 的。&/p&&p&Info-GAN 的效果如下:&img src=&/v2-3f66a3ee245c8a4b31b7_b.png& data-rawwidth=&1051& data-rawheight=&639& class=&origin_image zh-lightbox-thumb& width=&1051& data-original=&/v2-3f66a3ee245c8a4b31b7_r.png&&&/p&&p&Ferenc 的 &a href=&/?target=http%3A//www.inference.vc/infogan-variational-bound-on-mutual-information-twice/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&blog&i class=&icon-external&&&/i&&/a& 里也对 Info-GAN 做了一个 mini-review ,而且他将 vanilla GAN 也用最小化互信息的角度阐释了一遍。事实上,可以把传入 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 的是否是真样本看做一个伯努利分布,并且也看做 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 的一部分,记为 &img src=&/equation?tex=t& alt=&t& eeimg=&1&& ,这时 &img src=&/equation?tex=G& alt=&G& eeimg=&1&& 可以看做是原来的 generator 和真实样本的 sampler 之和 &img src=&/equation?tex=G%27& alt=&G'& eeimg=&1&&,当 &img src=&/equation?tex=t& alt=&t& eeimg=&1&& 为 1 时就传入真实样本,&img src=&/equation?tex=t& alt=&t& eeimg=&1&& 为 0 时就传入生成样本,这样通过最小化 &img src=&/equation?tex=D& alt=&D& eeimg=&1&& 传出的 &img src=&/equation?tex=I%28x%2C+t%29& alt=&I(x, t)& eeimg=&1&& 就可以达到与 vanilla GAN 相同的效果。注意在 Info-GAN 里我们是在最大化 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 与 &img src=&/equation?tex=X& alt=&X& eeimg=&1&& 的互信息,因为我们想得到一个和 &img src=&/equation?tex=c& alt=&c& eeimg=&1&& 更相关的 &img src=&/equation?tex=X& alt=&X& eeimg=&1&& ,但在 vanilla GAN 里我们想让 &img src=&/equation?tex=G%27& alt=&G'& eeimg=&1&& 与 &img src=&/equation?tex=t& alt=&t& eeimg=&1&& 更无关,所以要最小化互信息。这种观点下的 loss function 其实也可以写成 &img src=&/equation?tex=I%28t%2C+X%29-%5Clambda+I%28c%2C+G%28z%2C+%5Cpsi%29%29& alt=&I(t, X)-\lambda I(c, G(z, \psi))& eeimg=&1&& 。详情也可见 &a href=&/?target=http%3A//www.yingzhenli.net/home/blog/%3Fp%3D421& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&李映真&i class=&icon-external&&&/i&&/a& 的 blog 。&/p&&h3&Feeling Lucky&/h3&&p&GAN 发展太快了,自从 &em&Ian et all&/em& 2014 年发布第一篇 GAN 论文开始,有非常多相关研究业已面世,这次介绍的 EBGAN 和 Info-GAN 只是最近的代表(一六年十月)。关于 GAN 的训练(如 &a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DCGAN&i class=&icon-external&&&/i&&/a&),阐释,和应用层出不穷。因为 GAN 可以看做是提供了一种 non-trivial 的优化目标,所以作为生成模型应用可以很广泛,比如 &a href=&GitHub%20-%20jacotar/sound-GAN:%20Generative%20Adversial%20Network%20for%20music%20composition& data-editable=&true& data-title=&音乐生成& class=&&&音乐生成&/a& ,&a href=&GitHub%20-%20AustinStoneProjects/TextGAN:%20A%20generative%20adversarial%20network%20for%20text%20generation,%20written%20in%20TensorFlow.& data-editable=&true& data-title=&文本生成&&文本生成&/a&,&a href=&GitHub%20-%20xiaolonw/ss-gan:%20Style%20and%20Structure%20GAN%20(ECCV%202016& data-title=&Style-Structure GAN& class=&& data-editable=&true&&Style-Structure GAN&/a&) ,&a href=&/?target=http%3A//t.cn/Rco2RgI& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SRGAN&i class=&icon-external&&&/i&&/a& 。因为 GAN 受计算能力限制,生成高分辨率的图像很难( EBGAN 可以生成 256 x 256 的图片),所以有人提出可以生成一些低分辨率的图像进行合成以得到高分辨率图片,这就是 &a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks&i class=&icon-external&&&/i&&/a& 的方法。&/p&&p&题外话:众所周知知乎编辑器不支持 markdown ,但我其实是用 typora 写的,所以转换到知乎的格式颇有难度,但实际上有个很好用的全平台插件 markdown-here 可以帮忙。如果你并不需要插入公式,那么这个插件可以即下即用,只要在文本框里右键 markdown 转换,如果需要插入很多 inline-math ,可以去设置页把 Tex support 的标签换成知乎的:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&img src=&/equation?tex={urlmathcode}& alt=&{mathcode}& class=&& eeimg=&1&&
&/code&&/pre&&/div&&br&&p&先这样吧。&/p&&p&&a href=&/?target=https%3A//zardinality.github.io//About-GAN.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&我的 blog &i class=&icon-external&&&/i&&/a&&/p&&p&&/p&
题图为 DCGAN 生成的动漫人物头像,来自
。 写于一六年十月。一些直觉 What I cannot create, I do not understand. - Richard Feynman费曼的这句话可谓脍炙人口,而且,不像大多数名人口中说出的名言一样,它相当有道理。学数学的时候,我常有这样…
&img src=&/v2-a2df2bd7a0_b.jpg& data-rawwidth=&1440& data-rawheight=&801& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&/v2-a2df2bd7a0_r.jpg&&&p&作者:&a href=&/?target=https%3A///%40ageitgey%3Fsource%3Dpost_header_lockup& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Adam Geitgey&i class=&icon-external&&&/i&&/a&&br&&/p&&p&原文:&a href=&/?target=https%3A///%40ageitgey/machine-learning-is-fun-part-2-a26a10b68df3& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/@ageitgey/ma&/span&&span class=&invisible&&chine-learning-is-fun-part-2-a26a10b68df3&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&译者:巡洋舰科技——赵 95&/p&&p&校对:离线Offline——林沁&/p&&p&转载请联系译者。&/p&&p&在第一章中我们谈到,机器学习是用泛型算法告诉你一些有关数据的有趣结论,而这个过程中你不需要写任何与问题有关的特定代码。(如果你还没有读过第一章,现在先去读吧!)&/p&&h2&&b&这一次,我们要来用其中一种泛型算法来做件很酷炫的事情——创造一个看起来像是人类设计的电子游戏关卡!我们会构造一个神经网络,并提供给它已存在的超级马里奥的关卡设计,然后就可以等它自己创造出新的关卡了!&/b&&/h2&&img src=&/v2-0a4ae56dfcd98cc6e09276_b.jpg& class=&content_image&&&p&&a href=&/?target=https%3A//supermariomakerbookmark.nintendo.net/courses/4AC9--F3C3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&使用这种泛型算法可以创造出来关卡之一&i class=&icon-external&&&/i&&/a&&/p&&p&&b&和第一章类似,这篇指南是为那些对机器学习感兴趣,但又不知从哪里开始的人而写的。这意味着文中有大量的概括。但是那又如何呢?只要能让读者对机器学习更感兴趣,这篇文章的任务也就完成了。&/b&&/p&&p&在开始之前,我们先来看看我们用机器学习的方法制作出的关卡吧~&/p&&p&&a href=&/?target=http%3A///v_show/id_XMTg2NTg1MTk5Ng%3D%3D.html%3Fspm%3Da2hzp..0%26amp%3Bamp%3Bfrom%3Dy1.7-2& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/v_show/id_X&/span&&span class=&invisible&&MTg2NTg1MTk5Ng==.html?spm=a2hzp..0&from=y1.7-2&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&/p&&h2&做出更智能更准确的预测&/h2&&p&回到第一章,我们根据房屋各种特征属性创造了一个来估计房价的简单算法。我们给出了一所房子的如下数据:&/p&&p&&img src=&/v2-d00f6b6ce46_b.jpg& data-rawwidth=&800& data-rawheight=&150& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-d00f6b6ce46_r.jpg&&我们得到了这个简单的预估函数:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&estimate_house_sales_price&/span&&span class=&p&&(&/span&&span class=&n&&num_of_bedrooms&/span&&span class=&p&&,&/span& &span class=&n&&sqft&/span&&span class=&p&&,&/span& &span class=&n&&neighborhood&/span&&span class=&p&&):&/span&
&span class=&n&&price&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&
&span class=&c1&&# 一小撮这个&/span&
&span class=&n&&price&/span& &span class=&o&&+=&/span& &span class=&n&&num_of_bedrooms&/span& &span class=&o&&*&/span& &span class=&mf&&0.123&/span&
&span class=&c1&&# 一大撮这个&/span&
&span class=&n&&price&/span& &span class=&o&&+=&/span& &span class=&n&&sqft&/span& &span class=&o&&*&/span& &span class=&mf&&0.41&/span&
&span class=&c1&&# 也许再来一把这个&/span&
&span class=&n&&price&/span& &span class=&o&&+=&/span& &span class=&n&&neighborhood&/span& &span class=&o&&*&/span& &span class=&mf&&0.57&/span&
&span class=&k&&return&/span& &span class=&n&&price&/span&
&/code&&/pre&&/div&&p&换句话说,我们把决定房屋价格的因素乘以它的&b&权重&/b&,再把这些乘积求和,就可以得到房子的预估价格了。&/p&&p&或者不使用代码,我们直接用一个图片来概括这个函数:&/p&&p&&i&&img src=&/v2-edbbb07900b2e_b.jpg& data-rawwidth=&883& data-rawheight=&589& class=&origin_image zh-lightbox-thumb& width=&883& data-original=&/v2-edbbb07900b2e_r.jpg&&箭头表示了函数中的权重。&/i&&/p&&p&然而,这个算法仅仅能用于处理一些简单的问题,就是那些输入和输出有着&b&线性关系&/b&的问题。但如果真实价格和决定因素的关系并不是如此简单,那我们该怎么办? 比如说,地段对于大户型和小户型的房屋有很大影响,然而对中等户型的房屋并没有太大影响。那我们该怎么在我们的模型中收集这种复杂的信息呢?&/p&&p&所以为了更加的智能化,我们可以利用不同的权重来多次运行这个算法,收集各种不同情况下的估价。&/p&&p&&i&&img src=&/v2-543e128a073b7d19e09f70f6c474e556_b.jpg& data-rawwidth=&1485& data-rawheight=&1206& class=&origin_image zh-lightbox-thumb& width=&1485& data-original=&/v2-543e128a073b7d19e09f70f6c474e556_r.jpg&&让我们试着用&/i&&i&四种不同的算法来解决该问题&/i&&/p&&p&现在,我们有了四种不同的估价方法。我们将这四种估价方法汇总到一个最终估计当中。我们再把们放到同样的算法当中再算一遍(当然这次我们使用的权重不同)!&/p&&p&&img src=&/v2-c7a90ccddf0c3208caa45bc8_b.jpg& data-rawwidth=&777& data-rawheight=&725& class=&origin_image zh-lightbox-thumb& width=&777& data-original=&/v2-c7a90ccddf0c3208caa45bc8_r.jpg&&我们现在就结合了解决同一问题的方法四种不同方法,得到的一个「&b&超级答案&/b&」。正是由于此,我们才能够用它来模拟更多不同的情况。&/p&&h2&神经网络是什么?&/h2&&p&我们来把四种不同的预测方法概括到一个图当中:&/p&&p&&img src=&/v2-4dbfbefa401ab23bcf5b38_b.jpg& data-rawwidth=&895& data-rawheight=&775& class=&origin_image zh-lightbox-thumb& width=&895& data-original=&/v2-4dbfbefa401ab23bcf5b38_r.jpg&&这就是一张神经网络!每一个节点都知道如何收集一组收据,找到他们的权重,做出对应的输出值(即价格预测)。把这些节点连接到一起,我们就可以模拟更复杂的函数了!&/p&&p&当然了,为了保持简洁性,我跳过了许多内容(例如&a href=&/?target=https%3A//en.wikipedia.org/wiki/Feature_scaling& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&特征缩放&i class=&icon-external&&&/i&&/a&和&a href=&/?target=https%3A//en.wikipedia.org/wiki/Activation_function& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&激活函数&i class=&icon-external&&&/i&&/a&)。但是最重要的是下面的这些内容:&/p&&p&· 我们制造了一个权重×因素的简单函数,我们把这个函数叫做&b&神经元&/b&。&/p&&p&· 通过连接许许多多的简单&b&神经元&/b&,我们能模拟那些不能被一个神经元所模拟的函数。&/p&&p&这就好像乐高积木一样! 我们不能用一个乐高积木搭成摩天大楼,但是如果有足够多的乐高积木的话,我们能够搭建成任何东西。&/p&&img src=&/v2-9c2f64e007b92eafb707e02_b.png& class=&content_image&&&p&&i&也许未来的动物都是由积木搭成的?&/i&&i&那只能去未来一探究竟了&/i&&i&……&/i&&/p&&h2&让我们的神经网络拥有记忆的能力&/h2&&p&如果输入相同的数据,我们刚刚看到的那个神经网络总是有着一样的输出。这是因为他没有记忆能力。用编程的语言来说,他是一个&a href=&/?target=https%3A//en.wikipedia.org/wiki/State_%2528computer_science%2529& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&无状态算法&i class=&icon-external&&&/i&&/a&&b&(&/b&&b&stateless algorithms&/b&&b&)。&/b&&/p&&p&在许多情况下(例如说估计房价),无状态算法正是你所需要的算法。但是随着时间的增加,这种算法无法在数据中找出规律。[1]&/p&&p&假设我现在让你在电脑上写一个故事。在你开始之前,我需要猜测你最先敲击键盘上的哪个字母。我应该猜哪个呢?&/p&&p&我可以使用我的语言(英语)知识来增加我猜对的概率。比如说,你可能会先打单词常见的第一个字母。如果我看一下你过去写过的故事,我能够根据你过去的用词选择来缩小我猜测的范围。一旦我拥有这些数据,我能够用他们来构建一个神经网络,并能计算出你用任意一个字母来开头的概率。&/p&&p&我们的模型就像这样:&/p&&p&&img src=&/v2-5164eccc600b135c7e426c_b.jpg& data-rawwidth=&860& data-rawheight=&241& class=&origin_image zh-lightbox-thumb& width=&860& data-original=&/v2-5164eccc600b135c7e426c_r.jpg&&让我们把这个问题变得更难一点。现在我们假设,在整个文章中间的某一点,我们要猜测你即将输入的下一个字母是什么。这是一个更有趣的问题。&/p&&p&让我们把海明威的著作《&a href=&/?target=https%3A//en.wikipedia.org/wiki/The_Sun_Also_Rises& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&太阳照常升起&i class=&icon-external&&&/i&&/a&》的前几个单词当成一个例子:&/p&&p&&i&Robert Cohn was once middleweight boxi&/i&&/p&&p&所以,下一个字母是什么?&/p&&p&你可能会猜是「n」,这个词有可能是「boxing」。我们是通过观察还有语言常识来猜测这个词的。同时,「middleweight」这个词也给了我们猜测的额外线索。&/p&&p&换一个角度来说,如果我们知道了在这之前出现的字母,并结合我们的语言常识,要猜对下一个字母就会变得很简单。&/p&&p&为了用神经网络的方法来解决这个问题,我们需要把&b&状态(&/b&&b&state&/b&&b&)&/b&加入到我们的模型当中。每次通过神经网络来解决问题的时候,我们将中间的计算结果也保存下来,并作为下次的输入的一部分再次使用。这样一来,我们的模型就能根据以往的输入数据来调整它的猜测。&/p&&p&&img src=&/v2-7dbb0873799e_b.jpg& data-rawwidth=&860& data-rawheight=&458& class=&origin_image zh-lightbox-thumb& width=&860& data-original=&/v2-7dbb0873799e_r.jpg&&跟踪模型中的每一个状态(state),不仅能够让我们更好预测第一个字母,更能让我们更好的预测到任意位置的下一个字母。&/p&&p&这就是&b&循环&/b&神经网络(Recurrent Neural Network,简称 RNN)的基本概念。我们每次使用神经网络的时候都会对他进行升级。这使它能跟根据最近浏览的信息更新它的预测。如果数据记忆足够多的话,他甚至能够模拟出长期的规律。&/p&&h2&猜字母有什么意义?&/h2&&p&猜下一个字母看上去并没有什么实用价值。这么做的意义是什么呢?&/p&&p&根据你的输入,自动补全你想输入的单词,就是一个比较酷炫的应用。&/p&&p&&i&&img src=&/v2-767363cfc33ac56ebf728a19_b.png& data-rawwidth=&1600& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&/v2-767363cfc33ac56ebf728a19_r.png&&下一个最有可能的字母是「&/i&&i&t&/i&&i&」。&/i&&/p&&p&但是如果我们最大程度地拓展这个想法会怎样?如果我们让我们的模型一直去预测下一个字母,永远不停止,那会怎样? 机器会不会自己写出一个完整的故事?&/p&&h2&生成一个故事&/h2&&p&刚刚我们看到了如何猜测海明威《太阳照常升起》中的下一个字母的。现在让我们来试一试写一个海明威式(写作风格)的故事吧!&/p&&p&让我们用&a href=&/?target=http%3A//karpathy.github.io/about/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&安德烈·卡帕西&i class=&icon-external&&&/i&&/a&(Andrej Karpathy)写的&a href=&/?target=https%3A///karpathy/char-rnn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&循环神经网络实现&i class=&icon-external&&&/i&&/a&来完成我们的目标。安德烈是斯坦福的一位深度学习研究者。有关用 RNNs 生成文字,他写过&a href=&/?target=http%3A//karpathy.github.io//rnn-effectiveness/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一篇非常棒的导论&i class=&icon-external&&&/i&&/a&。你可以在 &a href=&/?target=https%3A///karpathy/char-rnn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub 上查看这个模型的代码&i class=&icon-external&&&/i&&/a&。&/p&&p&让我们用《太阳照常升起》中的文字构建我们的模型。全书共有 362,239 个词,使用了 84 个不同的字符(包括标点符号和大小写字母等)。和真实世界的问题相比,这组数据其实已经非常小了。如果想要更好地模仿海明威的文风,我们需要的样本文本长度可能是这本小说长度的几倍。但是这本《太阳照常升起》已经足够展示制作我们模型的过程了。&/p&&p&当我们刚开始训练 RNN 的时候,它猜测的并不准确。这是它经过 100 个循环训练之后的结果:&/p&&br&&p&hjCTCnhoofeoxelif edElobe negnk e iohehasenoldndAmdaI ayio pe e h’e btentmuhgehi bcgdltt. gey heho grpiahe.&/p&&p&Ddelnss.eelaishaner” cot AAfhB ht ltny&/p&&p&ehbih a”on bhnte ectrsnae abeahngy&/p&&p&amo k ns aeo?cdse nh a taei.rairrhelardr er deffijha [2]&/p&&br&&p&你可以看到的是机器已经知道单词之间应该有空格,这正是我们想要的。&/p&&p&1000 个循环之后,结果看起来更靠谱一点:&/p&&br&&p&hing soor ither. And the caraos, and the crowebel for figttier and ale the room of me? Streat was not to him Bill-stook of the momansbed mig out ust on the bull, out here. I been soms&/p&&p&inick stalling that aid.&/p&&p&“Hon’t me and acrained on .Hw’s don’t you for the roed,” In’s pair.”&/p&&p&“Alough marith him.”[3]&/p&&br&&p&我们的模型已经开始识别出句子的基本构成模式了。它已经学会给句子加上句号,甚至学会了用引号。还成功的拼出了一些单词,但大部分依然在胡扯。&/p&&p&经过几千次交互训练之后,他看起来很棒:&/p&&br&&p&He went over to the gate of the café. It was like a country bed.&/p&&p&“Do you know it’s been me.”&/p&&p&“Damned us,” Bill said.&/p&&p&“I was dangerous,” I said. “You were she did it and think I would a fine cape you,” I said.&/p&&p&“I can’t look strange in the cab.”&/p&&p&“You know I was this is though,” Brett said.&/p&&p&“It’s a fights no matter?”&/p&&p&“It makes to do it.”&/p&&p&“You make it?”&/p&&p&“Sit down,” I said. “I wish I wasn’t do a little with the man.”&/p&&p&“You found it.”&/p&&p&“I don’t know.”&/p&&p&“You see, I’m sorry of chatches,” Bill said. “You think it’s a friend off back and make you really drunk.”&/p&&p&他跑到了咖啡厅的门口。它像是一个乡下的床一样。&/p&&p&「你知道那是我。」&/p&&p&「诅咒我们,」比尔说。&/p&&p&「我曾经很危险,」我说。「你是她做了它并且认为我会一个好的海角你,」我说。&/p&&p&「我不能在出租车里看起来奇怪」&/p&&p&「你知道我是这个虽然,」布拉特说。&/p&&p&「它是一个打架不重要?」&/p&&p&「它让去做它」&/p&&p&「你做的?」&/p&&p&「坐下,」我说。「我希望我没有和那个男人做一点。」&/p&&p&「你找到了它。」&/p&&p&「我不知道。」&/p&&p&「你看,我对 chatches(英文中没有 chatches 这个词)感到抱歉,」比尔说道。「你认为它是一个朋友后面并且它真的让你醉」&/p&&br&&p&到此时,算法已经收集到了海明威写作的基本风格——简短而直接的对话形式。甚至有一些话语开始能被人类理解。&/p&&p&和原文中的句子作比较:&/p&&br&&p&There were a few people inside at the bar, and outside, alone, sat Harvey Stone. He had a pile of saucers in front of him, and he needed a shave.&/p&&p&“Sit down,” said Harvey, “I’ve been looking for you.”&/p&&p&“What’s the matter?”&/p&&p&“Nothing. Just looking for you.”&/p&&p&“Been out to the races?”&/p&&p&“No. Not since Sunday.”&/p&&p&“What do you hear from the States?”&/p&&p&“Nothing. Absolutely nothing.”&/p&&p&“What’s the matter?”&/p&&p&有几个人在里面酒吧间内,哈维·斯通独自在外面坐着。他面前放着一大堆小碟子,他需要刮刮脸了。&/p&&p&「坐下吧,」哈维说,「我正在找你。」&/p&&p&「什么事?」&/p&&p&「没事儿。只不过找你来着。」&/p&&p&「去看赛马啦?」&/p&&p&「没有。星期天以来再没去过。」&/p&&p&「美国有信来吗?」&/p&&p&「没有。毫无音信。」&/p&&p&「怎么啦?」&/p&&br&&p&即使我们只是寻找&b&每个字符之间&/b&的规律,我们的算法也已经用恰当的格式重新出一篇看起来可信的文章。这非常厉害!&/p&&p&我们也不用完全从头生成文本。我们可以把前几个字母放到算法当中去,让它找到后面的几个字母。&/p&&p&让我们一起来模仿海明威著作的封面,来伪造书名和作者玩玩吧!我们规定最开始的字母分别为「Er」、「He」、「The S」。&/p&&p&&i&&img src=&/v2-e551fd29a14d29f06a96bcd_b.png& data-rawwidth=&1600& data-rawheight=&1155& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&/v2-e551fd29a14d29f06a96bcd_r.png&&真书在左,看起来傻乎乎的假书在右。&/i&[4]&/p&&p&看起来不错呀!&/p&&p&但是&b&真正让人脑洞大开的部分&/b&是,这个算法能够找出任何数据序列中的规律。他可以轻松创作出&a href=&/?target=https%3A///nylki/1efbaabcc& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&食谱&i class=&icon-external&&&/i&&/a&或者是&a href=&/?target=https%3A///%40samim/obama-rnn-machine-generated-political-speeches-c8abd18a2ea0%23.bkz6noh1n& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&假的奥巴马的演讲&i class=&icon-external&&&/i&&/a&。但为什么一定要限定是人类语言呢?这个算法也可以用来处理任何有规律可循的数据。&/p&&h2&不用马里奥,智造马里奥&/h2&&p&2015年,任天堂在 Wii U 平台上发布了&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&超级马里奥制造&i class=&icon-external&&&/i&&/a&。&/p&&p&&i&&img src=&/v2-ad31bb4d88c667_b.png& data-rawwidth=&779& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&779& data-original=&/v2-ad31bb4d88c667_r.png&&每个孩子的梦想!&/i&&/p&&p&在这个游戏中,你可以用编辑器创造出你自己的超级马里奥关卡,并把它们上传到互联网上和朋友们一起玩。你可以使用游戏中所有经典的道具和敌人来创造你自己的关卡。这就像是一个为成年人设计的乐高积木玩具。&/p&&p&所以问题来了,我们能够使用创作海明威的模型来制作马里奥么?&/p&&p&首先,我们需要一组数据来训练我们的模型。我们会使用马里奥兄弟 1985 年版所有的室外关卡的数据。[5]&/p&&img src=&/v2-adc89c7ffc15aa8_b.png& data-rawwidth=&1535& data-rawheight=&2100& class=&origin_image zh-lightbox-thumb& width=&1535& data-original=&/v2-adc89c7ffc15aa8_r.png&&&br&&p&&i&这个圣诞节棒极了!谢谢爸爸妈妈!&/i&&/p&&p&这个游戏共包含 32 关,而其中 70% 都是风格相似的户外场景。所以我们将会使用这些数据。&/p&&p&我设计了一个小程序,把原版游戏中所有的关卡设计都提取了出来。超级马里奥兄弟是一个有着 30 年历史的游戏,网上有着丰富的资源来帮助你找出关卡设计在游戏代码中的存储位置。从一个老游戏中提取关卡数据,是一个很有趣的编程练习,你有空可以试一下!&/p&&p&&img src=&/v2-63074bcbd30b1a66a57e881ac8f22589_b.jpg& data-rawwidth=&2000& data-rawheight=&132& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&/v2-63074bcbd30b1a66a57e881ac8f22589_r.jpg&&这个就是游戏的第一关(如果你玩过超级马里奥,你应该会记得):&i&超级马里奥关卡&/i&&i& 1-1&/i&&/p&&p&如果我们仔细观察,我们会发现这一关是由一个个简单的小网格类型的物品构成的:&/p&&p&&img src=&/v2-43f5efd0bde1efc06ecc_b.png& data-rawwidth=&1534& data-rawheight=&834& class=&origin_image zh-lightbox-thumb& width=&1534& data-original=&/v2-43f5efd0bde1efc06ecc_r.png&&我们可以简单的把这些网格表示成一序列字符,每一个字符都代表着一个物品:&/p&&p&--------------------------&/p&&p&--------------------------&/p&&p&--------------------------&/p&&p&#??#----------------------&/p&&p&--------------------------&/p&&p&--------------------------&/p&&p&--------------------------&/p&&p&-##------=--=----------==-&/p&&p&--------==--==--------===-&/p&&p&-------===--===------====-&/p&&p&------====--====----=====-&/p&&p&=========================-&/p&&p&我们把物品换成了下列字母:&/p&&p&· 「-」代表没有物品&/p&&p&· 「=」代表砖块&/p&&p&· 「#」代表可以打碎的砖块&/p&&p&· 「?」代表金币砖块&/p&&p&……就类似于这样,用不同的字字符代表关卡里的不同的物品。&/p&&p&最后就得到了如下的文本文档:&/p&&p&&img src=&/v2-2d7fe5daea8db66f04531dfd1c0ccee0_b.jpg& data-rawwidth=&2000& data-rawheight=&673& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&/v2-2d7fe5daea8db66f04531dfd1c0ccee0_r.jpg&&仔细观察这个文本文档,你会发现如果以「行」的顺序观察,并没有什么规律可循:&img src=&/v2-df4f04e9bc1_b.png& data-rawwidth=&648& data-rawheight=&212& class=&origin_image zh-lightbox-thumb& width=&648& data-original=&/v2-df4f04e9bc1_r.png&&&/p&&p&一&i&行一行寻找,并找不到什么规律。你会发现很多行就是空白的。&/i&&/p&&p&当你把关卡理解为连续的列的时候,规律就浮现出来了:&/p&&p&&img src=&/v2-426f187efeb773fece9a60b_b.png& data-rawwidth=&638& data-rawheight=&222& class=&origin_image zh-lightbox-thumb& width=&638& data-original=&/v2-426f187efeb773fece9a60b_r.png&&一列一列寻找,规律就显现出来了。比如说每一列都以「=」结尾。&/p&&p&为了让算法能找出我们数据中的规律,我们需要把数据以列的形式输入。找出你数据的最有效的表达方法(这个方法也叫作&a href=&/?target=https%3A//en.wikipedia.org/wiki/Feature_selection& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&特征选择&i class=&icon-external&&&/i&&/a&),是使用机器学习算法的重要技巧之一。&/p&&p&为了训练模型,我需要把这个文本文档旋转 90 度。这样一来就保证了这些字符被输入进模型之后,模型能够更容易找到其中的规律。&/p&&p&-----------=&/p&&p&-------#---=&/p&&p&-------#---=&/p&&p&-------?---=&/p&&p&-------#---=&/p&&p&-----------=&/p&&p&-----------=&/p&&p&----------@=&/p&&p&----------@=&/p&&p&-----------=&/p&&p&-----------=&/p&&p&-----------=&/p&&p&---------PP=&/p&&p&---------PP=&/p&&p&----------==&/p&&p&---------===&/p&&p&--------====&/p&&p&-------=====&/p&&p&------======&/p&&p&-----=======&/p&&p&---=========&/p&&p&---=========&/p&&h2&训练我们的模型&/h2&&p&和刚刚训练海明威式文章生成器的过程一样,随着训练次数的增加,模型会渐渐被优化。&/p&&p&经过一点点的训练,我们的模型生成了一堆垃圾:&/p&&p&--------------------------&/p&&p&LL+&&=------P-------------&/p&&p&--------&/p&&p&---------------------T--#--&/p&&p&-----&/p&&p&-=--=-=------------=-&--T--------------&/p&&p&--------------------&/p&&p&--=------$-=#-=-_&/p&&p&--------------=----=&----&/p&&p&-------b&/p&&p&-&/p&&p&它好像理解了应该有很多的「-」和「=」的思路,这已经很好了。但是还没有找到规律。&/p&&p&经过几千个循环之后,它开始变得有模有样了:&/p&&p&--&/p&&p&-----------=&/p&&p&----------=&/p&&p&--------PP=&/p&&p&--------PP=&/p&&p&-----------=&/p&&p&-----------=&/p&&p&-----------=&/p&&p&-------?---=&/p&&p&-----------=&/p&&p&-----------=&/p&&p&模型几乎已经知道每一行应该有相同的长度。它甚至开始找出马里奥的一些逻辑:管道(绿色的管子)经常是两格宽,并且至少有两格那么高,所以数据里面的「P」应该以一种 2×2 的方格形式出现。这非常酷炫!&/p&&p&经过大量的训练之后,模型开始能生成完美的可用数据:&/p&&p&--------PP=&/p&&p&--------PP=&/p&&p&----------=&/p&&p&----------=&/p&&p&----------=&/p&&p&---PPP=---=&/p&&p&---PPP=---=&/p&&p&----------=&/p&&p&让我们用我们的模型来创造一整个关卡,并把它们横过来:&/p&&p&&i&&img src=&/v2-43a9e4eac77b88ff_b.png& data-rawwidth=&2000& data-rawheight=&309& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&/v2-43a9e4eac77b88ff_r.png&&用我们的模型创造的一整关!&/i&&/p&&p&数据看起来棒棒哒!并且有以下几个优点值得关注:&/p&&p&· 它把 &a href=&/?target=http%3A///lakitu& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Lakitu&i class=&icon-external&&&/i&&/a&(那个浮在云上的怪)放在了关卡一开始的空中,就像真实的超级马里奥关卡一样。&/p&&p&· 它知道浮在空中的管道是要放在砖块上面的,它不能单单漂在空中。&/p&&p&· 它把敌人放在了恰当的位置。&/p&&p&· 它&b&看上去&/b&就超级马里奥的一关一样,因为它是在游戏里存在的原版关卡的基础上创造出来的。&/p&&p&最终,我们把这一个关放到超级马里奥制造里面,来创造出这一关:&img src=&/v2-9b1ee49e9eb54b93f8a93cff51273e04_b.jpg& data-rawwidth=&546& data-rawheight=&81& class=&origin_image zh-lightbox-thumb& width=&546& data-original=&/v2-9b1ee49e9eb54b93f8a93cff51273e04_r.jpg&&&/p&&p&&i&我们的把关卡数据输入到编辑器以后得到的关卡&/i&&/p&&p&&a href=&/?target=http%3A///v_show/id_XMTg2NTg1MTk5Ng%3D%3D.html%3Fspm%3Da2hzp..0%26amp%3Bamp%3Bfrom%3Dy1.7-2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&有趣的机器学习 第二章:用机器学习制作超级马里奥的关卡—在线播放—优酷网,视频高清在线观看 /v_show/id_XMTg2NTg1MTk5Ng==.html?spm=a2hzp..0&from=y1.7-2 &i class=&icon-external&&&/i&&/a&&/p&&p&自己玩玩看吧!&/p&&p&如果你有超级马里奥制造,你可以&a href=&/?target=https%3A//supermariomakerbookmark.nintendo.net/courses/4AC9--F3C3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&通过网页版书签&i class=&icon-external&&&/i&&/a&收藏或者是用关卡代码 &a href=&/?target=https%3A//supermariomakerbookmark.nintendo.net/courses/4AC9--F3C3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&4AC9–-F3C3&i class=&icon-external&&&/i&&/a& 来找到这一关。&/p&&h2&玩具或是真实世界的应用?&/h2&&p&以上我们所使用的循环神经网络算法,就是真实世界中公司用来解决难题的算法。这些难题包括语音识别和文字翻译。解决难题和创造一个游戏关卡的区别,就在于数据量:我们的模型是由极少量的数据生成的。要创造一个非常好的模型,我们需要更多原版超级马里奥兄弟里面的关卡数据。&/p&&p&如果我们像任天堂一样拥有成千上万玩家自己创作的马里奥关卡数据,我们可以制作出一个超棒的模型。但是我们不能——因为任天堂不会把这些数据给我们。天下没有免费的午餐,大公司的数据不会免费给你。&/p&&p&&b&随着机器学习在许多领域越来越重要,好程序与坏程序的区别就在于你拥有多少的数据来训练你的模型。这就是为什么像谷歌和&/b&&b& Facebook &/b&&b&这样的公司如此需要你的数据!&/b&&/p&&p&打个比方,谷歌最近开源了 &a href=&/?target=https%3A//www.tensorflow.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TensorFlow&i class=&icon-external&&&/i&&/a&,这是它用来建立大规模机器学习的工具包。把如此重要,如此实用的技术免费公布出来,对谷歌来说是一个很重量级的决定。你要知道,这可是和谷歌翻译使用的原理是相同的。&/p&&p&但如果你没有海量数据,你仍然没有办法创造一个能和谷歌翻译的匹敌的工具。数据是使谷歌处在行业顶端的源泉。想一想你打开&a href=&/?target=https%3A///locationhistory/b/0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&谷歌地图历史记录&i class=&icon-external&&&/i&&/a&或者是 &a href=&/?target=https%3A///help/7516& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Facebook 地点记录&i class=&icon-external&&&/i&&/a&的时候,你会发现它们记录下来了你去过的每一个地方。&/p&&h2&延伸阅读&/h2&&p&在机器学习中,要解决问题决不只有一种方法。你总是有无数种方法预处理数据,你也有无数种机器学习算法可选。&a href=&/?target=https%3A//en.wikipedia.org/wiki/Ensemble_learning& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&综合各种方法&i class=&icon-external&&&/i&&/a&之后获得的结果通常会比使用单一方法更好。&/p&&p&以下是一些读者发给我的链接,还有这些有趣的方法可以生成马里奥兄弟关卡:&/p&&p&· &a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&埃米·K.胡佛&i class=&icon-external&&&/i&&/a&(Amy K. Hoover)的团队把&a href=&/?target=http%3A///Hoover2015Composing.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&游戏中的每一种物品(管道、地面、平台等)表示成交响乐中的一种声音&i class=&icon-external&&&/i&&/a&。然后再使用一种名为功能性搭建(functional scaffolding)的方法,让系统把每一种物品添加到关卡里去。比如说,你可以先自己制作出你想要的关卡基本样式,然后系统就能通过增加水管和是问号砖块来完善你的创作。&/p&&p&· &a href=&/?target=http%3A//forskning.mah.se/en/id/tsstda& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&史蒂夫·达尔斯科格&i class=&icon-external&&&/i&&/a&(Steve Dahlskog)的团队,则把每一列关卡数据表示为一串 N 元语法(n-gram)的「单词」,在此之上建立模型。相比大型的 RNN ,&a href=&/?target=http%3A///Dahlskog2014Linear.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这种生成关卡的算法&i class=&icon-external&&&/i&&/a&更简单。&/p&&p&1. 译者注:因为没有记忆能力。&/p&&p&2. 译者注:上面这些只是一堆字母而已,拼不成任何单词。&/p&&p&3. 译者注:有一半内容还只是无意义的字母组合,另一半内容是有实际含义的单词,但意思并不通顺。&/p&&p&4. 译者注:右边的书名意思是——肉用公牛的秘密。&/p&&p&5. 译者注:就是最经典的那一版本。&/p&
作者: 原文:译者:巡洋舰科技——赵 95校对:离线Offline——林沁转载请联系译者。在第一章中我们谈到,机器学习是用泛型算法告诉你一些有关数据的有趣结论,而这个过程中你不需要写任何与问题有关的特定代码。(如果你…
&p&&a href=&/?target=https%3A//arxiv.org/abs/v1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&arxiv 传送门&i class=&icon-external&&&/i&&/a&&/p&&p&最近 NIPS 上有一篇关于 GAN 的论文很受关注,在 &a href=&/?target=https%3A///r/MachineLearning/comments/5i23wt/r_stackgan_text_to_photorealistic_image_synthesis/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&reddit&i class=&icon-external&&&/i&&/a& 上也有不少讨论,因为它的生成结果实在很 impressive
,如图:&/p&&img src=&/v2-22bbabc6fadfea5bc49d_b.jpg& data-rawwidth=&929& data-rawheight=&472& class=&origin_image zh-lightbox-thumb& width=&929& data-original=&/v2-22bbabc6fadfea5bc49d_r.jpg&&&blockquote&&p&最下一排是 stackGAN ,生成的图片不仅分辨率最高,而且最真实。&/p&&/blockquote&&p&stackGAN 的主要的 motivation 是,如果我们没办法一次生成高分辨率又 plausible 的图片,那么可以分两次生成。分阶段生成图片的想法并不鲜见,&em&Denton et all&/em& 的 &a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LapGAN&i class=&icon-external&&&/i&&/a& 的想法就是将生成的低分辨率的图片一次次 refine ,&em&XiaoLong et all&/em& 的 &a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&S^2GAN&i class=&icon-external&&&/i&&/a& 也是将生成图片的过程分成了 Structure and Style 两个阶段。当然这两者都没有 caption 作为 condition ,没法比较。&/p&&p&关于 text to image 这一任务,之前就有人用 GAN 做,比如 &a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Generative Adversarial Text to Image Synthesis&i class=&icon-external&&&/i&&/a& ,所用的方法思路与 stackGAN 基本一样,都是在 generator 与 discriminator 前加入 text 的embedding 作为condition 。但 stackGAN 的结构要 fancy 一点,如下。&/p&&h4&第一阶段:&/h4&&p&从 embedding 开始,stackGAN 没有直接将 embedding 作为 condition ,而是用 embedding 接了一个 FC 层得到了一个正态分布的均值和方差,然后从这个正态分布中 sample 出来要用的 condition 。之所以这样做的原因是,embedding 通常比较高维,而相对这个维度来说, text 的数量其实很少,如果将 embedding 直接作为 condition,那么这个 latent variable 在 latent space 里就比较稀疏,这对我们的训练不利。我的理解是,如果 text 的数量较少,那么即使我们有比较高维的 latent variable ,但其中一大部分都是离散的 text embedding ,相当于真正的随机变量相对变少了,因此生成数据流形就会变得不连续(因为比较低维),这是我们不想看到的。而从参数化的正态分布中 sample 出要用的 condition 的话,相当于 embedding 周围的点也会被作为 condition ,这就增加了 text 的数量和 condition 的维数。为了防止这个分布 degenerate 或者方差太大的情况,generator 的 loss 里面加入了对这个分布的正则化:&img src=&/equation?tex=D_%7BKL%7D%28%5Cmathcal+N+%28%5Cmu%28%5Cphi_t%29%2C+%5CSigma%28%5Cphi_t%29%29+%7C%7C+%5Cmathcal+N+%280%2C+I%29%29& alt=&D_{KL}(\mathcal N (\mu(\phi_t), \Sigma(\phi_t)) || \mathcal N (0, I))& eeimg=&1&& 。&/p&&p&generator 使用的并不是常用的 Deconv ,而是若干个上采样加保持大小不变的 3x3 的 conv 的组合,这是最近提出的一种避免 Deconv 棋盘效应的&a href=&/?target=http%3A//distill.pub/2016/deconv-checkerboard/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&上采样方法&i class=&icon-external&&&/i&&/a& 。&/p&&p&discriminator 是若干步长为 2 的 conv ,再与 resize 的 embedding 合起来,接一个 FC。&/p&&h4&第二阶段:&/h4&&p&第二阶段的 generator 并没有噪声输入,而是将第一阶段的 sample downsample 以后与 augmented embedding (sampled from gaussian) 合起来作为输入。经过若干 residual blocks ,进行与第一阶段相同的上采样过程得到图片。&/p&&p&第二阶段的 discriminator 与第一阶段大体相同。&/p&&h4&我的看法&/h4&&p&说实在,stackGAN 并没有太多让人眼前一亮的新颖观点与方法,但是它将 two-phased generation, sentence-embedding, semi-supervised learning 结合到了一起,实验也做的很好(这样的结构我觉得应该很难训练)。看到 reddit 上有人说,unsupervised learning 本来是以不用辛辛苦苦的标 label 为目的而发展的,但有点讽刺的是,给越多 label ,它 work 得越好。这当然是必然的,给越多 label ,generator 就可以将一个复杂的分布(譬如 imagenet ),分解成若干简单的,维数低的分布进行建模,discriminator 也可以分别做判别。&/p&&p&另外,paper 只在最后给了一些失败的 sample ,一部分是图文不符,一部分是太像生成样本,前者我倾向于认为可能是 embedding 的失误。鉴于结构的复杂性,我觉得不会看到开源实现(如果作者不放出源代码的话),我确实挺关心他的正确率。&/p&&p&&b&代码已经 release :&/b&&/p&&p&&a href=&/?target=https%3A///hanzhanggit/StackGAN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Github&i class=&icon-external&&&/i&&/a&&/p&
最近 NIPS 上有一篇关于 GAN 的论文很受关注,在
上也有不少讨论,因为它的生成结果实在很 impressive ,如图:最下一排是 stackGAN ,生成的图片不仅分辨率最高,而且最真实。stackGAN 的主要的 motivation 是,如果我们没办法一次生成…
&img src=&/cfb85dfa875acf021aa6f03_b.png& data-rawwidth=&1000& data-rawheight=&341& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&/cfb85dfa875acf021aa6f03_r.png&&最近看了四篇文章,综合起来阅读,有助于理解卷积层内部的机理(如果想了解卷积网络的公式,请移步&a href=&/?target=http%3A//cs231n.github.io/linear-classify/%23softmax& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS231n Convolutional Neural Networks for Visual Recognition&i class=&icon-external&&&/i&&/a&),暂且摘录作读书笔记,有时间再译。&h2&&b&1. 卷积层的基本概念&/b&&/h2&&p&The first layer in a CNN is always a &strong&Convolutional Layer&/strong&. First thing to make sure you remember is what the input to this conv (I’ll be using that abbreviation a lot) layer is. Like we mentioned before, the input is a 32 x 32 x 3 array of pixel values. Now, the best way to explain a conv layer is to imagine a flashlight that is shining over the top left of the image. Let’s say that the light this flashlight shines covers a 5 x 5 area. And now, let’s imagine this flashlight sliding across all the areas of the input image. In machine learning terms, this flashlight is called a &strong&filter&/strong&(or sometimes referred to as a &strong&neuron &/strong&or a &strong&kernel&/strong&) and the region that it is shining over is called the &strong&receptive field&/strong&. Now this filter is also an array of numbers (the numbers are called &strong&weights&/strong& or&strong&parameters&/strong&). A very important note is that the depth of this filter has to be the same as the depth of the input (this makes sure that the math works out), so the dimensions of this filter is 5 x 5 x 3. Now, let’s take the first position the filter is in for example.
It would be the top left corner. As the filter is sliding, or &strong&convolving&/strong&, around the input image, it is multiplying the values in the filter with the original pixel values of the image (aka computing &strong&dot products&/strong&). These multiplications are all summed up (mathematically speaking, this would be 75 multiplications in total). So now you have a single number. Remember, this number is just representative of when the filter is at the top left of the image. Now, we repeat this process for every location on the input volume. (Next step would be moving the filter to the right by 1 unit, then right again by 1, and so on). Every unique location on the input volume produces a number. After sliding the filter over all the locations, you will find out that what you’re left with is a 28 x 28 x 1 array of numbers, which we call an &strong&activation map&/strong& or &strong&feature map&/strong&. The reason you get a 28 x 28 array is that there are 784 different locations that a 5 x 5 filter can fit on a 32 x 32 input image. The}

我要回帖

更多关于 读ic卡错误 的文章

更多推荐

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

点击添加站长微信