2017年12月31日星期日

新年快乐!这是份值得收藏的2017年AI与深度学习要点大全

若朴 夏乙 编译自 WILDML量子位 出品 | 公众号 QbitAI

2017已经正式离我们远去。

过去的一年里,有很多值得梳理记录的内容。博客WILDML的作者、曾在Google Brain做了一年Resident的Denny Britz,就把他眼中的2017年AI和深度学习的大事,进行了一番梳理汇总。

量子位进行概要摘录如下,详情可前往原文查看,地址:http://ift.tt/2zSsyRT

强化学习称霸人类游戏

如果说2016年AlphaGo击败李世乭之后,大家对它的棋坛地位还有些许怀疑的话,2017年击败柯洁,让它成了毫无疑问的围棋霸主。

作为一个强化学习Agent,它的第一个版本使用了来自人类专家的训练数据,然后通过自我对局和蒙特卡洛树搜索的改进来进化。

不久之后,AlphaGo Zero更进一步,使用了之前一篇论文Thinking Fast and Slow with Deep Learning and Tree Search提出的技术,从零开始下围棋,在训练中没有用到人类对局的数据。

临近年底,我们又看到了新一代的AlphaGo:AlphaZero,在围棋之后,用同样的技术搞定了国际象棋和日本将棋。

这些算法在对局中所用的策略,有时候甚至让经验丰富的棋手都觉得惊讶,他们也会向AlphaGo学习,改变着自己的对局风格。为了让学习更容易,DeepMind还发布了AlphaGo Teach工具。

下面是相关论文,认真的同学们可以收藏回顾啦:

AlphaGo

http://ift.tt/2kxZgUN

AlphaGo Zero

http://ift.tt/2yztrBO

AlphaZero

http://ift.tt/2nvQQ3f

Thinking Fast and Slow with Deep Learning and Tree Search

http://ift.tt/2rPEb9y

AI今年取得重大进展的游戏不止围棋。CMU研究人员的Libratus(冷扑大师)在20天的一对一无限注德州扑克比赛中,击败了人类顶级扑克玩家。

再早些时候,查尔斯大学、捷克技术大学和加拿大阿尔伯塔大学开发的DeepStack,首先击败了专业德扑玩家。

有一点值得注意,这两个程序玩的都是一对一扑克,也就是两名玩家之间的对局,这比多人游戏更容易。2018年,我们很可能看到算法在多玩家扑克上取得一些进步。

Libratus论文:

http://ift.tt/2B77b4U

用强化学习玩人类游戏的下一个领域,似乎是更复杂的多人游戏,除了多人扑克之外,还有星际争霸、DotA等等。DeepMind正在积极研究星际争霸2,发布了相关的研究环境。

星际争霸2研究环境:

http://ift.tt/2hKMX7E

而OpenAI在DotA中单比赛中取得了初步的成功,玩转5v5游戏,是他们的下一步目标。

进化算法回归

对于监督学习来说,基于梯度的反向传播算法已经非常好,而且这一点可能短期内不会有什么改变。

然而,在强化学习中,进化策略(Evolution Strategies, ES)似乎正在东山再起。因为强化学习的数据通常不是lid(独立同分布)的,错误信号更加稀疏,而且需要探索,不依赖梯度的算法表现很好。另外,进化算法可以线性扩展到数千台机器,实现非常快的平行训练。它们不需要昂贵的GPU,但可以在成百上千便宜的CPU机器上进行训练。

2017年早些时候,OpenAI的研究人员证明了进化策略实现的性能,可以与Deep Q-Learning等标准强化学习算法相媲美。

相关论文:

http://ift.tt/2mV8c7N

年底,Uber内部一个团队又连发5篇论文,来展示遗传算法和新颖性搜索的潜力。他们使用非常简单的遗传算法,没有任何梯度信息,学会了玩各种雅达利游戏。他们的进化算法在Frostbite游戏中达到了10500分,而DQN、AC3、ES等算法在同样的游戏中得分都不到1000。

WaveNets,CNNs以及注意力机制

谷歌的Tacotron 2文本转语音系统效果令人印象深刻。这个系统基于WaveNet,也是一种自动回归模型,也被部署于Google Assistant之中,并在过去一年得到快速提升。

远离昂贵且训练漫长的回归架构是一个更大的趋势。在论文Attention is All you Need里,研究人员完全摆脱了循环和卷积,使用一个更复杂的注意力机制,只用了很小的训练成本,就达到了目前最先进的结果。

论文地址:http://ift.tt/2rUnEDo

深度学习框架这一年

如果非要用一句话总结2017,那只能说是框架之年。

Facebook搞出了PyTorch,这个框架得到了搞自然语言处理的研究人员大爱。

TensorFlow在2017年继续领跑,目前已经发布到1.4.1版本。除了主框架之外,还发布了多个伴随库。TensorFlow团队还发布了一个全新的eager execution模式,类似PyTorch的动态计算图。

此外,

  • 苹果发布了CoreML移动机器学习库;
  • Uber的一个团队发布了Pyro,一个深度概率编程语言;
  • 亚马逊宣布在MXNet上提供更高级别的API Gluon;
  • Uber发布了内部米开朗基罗机器学习基础设施平台的详情;
  • 由于框架已经太多,Facebook和微软宣布推出ONNX开放格式,以便跨框架共享深度学习模型。

除了通用的深度学习框架外,我们还看到大量的强化学习框架发布:

  • OpenAI Roboschool,用于机器人仿真

http://ift.tt/2pDYk4N

  • OpenAI Baselines,一套强化学习算法的高质量实现

http://ift.tt/2qkiPiA

  • Tensorflow Agents,用TensorFlow来训练RL智能体

http://ift.tt/2eMG41w

  • Unity ML Agents,研究人员可用Unity Editor来创建游戏,并展开强化训练

http://ift.tt/2wtV3sn

  • Nervana Coach,用最先进的强化学习算法进行试验

http://ift.tt/2zpOzHS

  • Facebook ELF,游戏研究平台

http://ift.tt/2sKQxUp

  • DeepMind Pycolab,定制化的游戏引擎

http://ift.tt/2js86RV

  • Geek.ai MAgent,多智能体强化学习平台

http://ift.tt/2B1SkrX

为了让深度学习更易普及,还有一些面向web的框架,例如谷歌的deeplearn.js和MIL WebDNN执行框架。

2017,还有一个流行框架跟我们告别了。

那就是Theano。

学习资源

随着深度学习和强化学习越来越流行,2017年有越来越多的课程、训练营等活动举行并分享到网上。以下是我最爱的一些。

  • Deep RL Bootcamp,由OpenAI和UC Berkeley联合主办,主要讲授关于强化学习的基础知识和最新研究成果

地址:http://ift.tt/2zXjw6d

  • 斯坦福视觉识别卷积神经网络课程2017春季版

http://ift.tt/1ERxZ3M

  • 斯坦福自然语言处理与深度学习课程2017冬季版

http://ift.tt/1PGjeBB

  • 斯坦福的深度学习理论课程

http://ift.tt/2zokyf4

  • Coursera上最新的深度学习课程

http://ift.tt/2vLAXJh

  • 蒙特利尔深度学习和强化学习暑期学校

http://ift.tt/2wmv96D

  • UC Berkeley的深度强化学习课程2017秋季版

http://ift.tt/1qYr18w

  • TensorFlow开发者大会上关于深度学习和TensorFlow API相关的内容

https://www.youtube.com/playlist?list=PLOU2XLYxmsIKGc_NBoIhTn2Qhraji53cv

几大学术会议,延续了在网上发布会议内容的新传统。如果你想赶上最尖端的研究,可以查看这些顶级会议的录像资料。

  • NIPS 2017:

http://ift.tt/2zftYsz

  • ICLR 2017:

http://ift.tt/2w6f4S1

  • EMNLP 2017:

http://ift.tt/2jnJwVh

研究人员也开始在arXiv上发布低门槛的教程和综述论文。以下是过去一年我的最爱。

  • 深度强化学习:概述

Deep Reinforcement Learning: An Overview

http://ift.tt/2ktZJF8

  • 给工程师的机器学习简介

A Brief Introduction to Machine Learning for Engineers

http://ift.tt/2jj49Sy

  • 神经机器翻译

Neural Machine Translation

http://ift.tt/2ChIxvE

  • 教程:神经机器翻译和序列到序列模型

Neural Machine Translation and Sequence-to-sequence Models: A Tutorial

http://ift.tt/2n2ZySm

应用:AI和医学

2017年,有不少人宣称用深度学习解决了医疗问题,而且还击败了人类专家。这其中有真正的突破,也有一些炒作。对这方面感兴趣的话,推荐关注Luke Oakden-Rayner的人类医生终结系列博客:

http://ift.tt/2op2Ak2

这里简要介绍一些发展。其中最重要的事件包括:斯坦福的一个团队公布了用深度学习识别皮肤癌的算法细节。

相关研究:http://ift.tt/2q56YtZ

另一个斯坦福的团队则开发了一个模型,能比人类专家更好的发现心律失常。

相关研究:http://ift.tt/2sx5wNG

当然也有一些风波。例如DeepMind与NHS之间的问题;NIH发布了一个不适合训练AI的胸部X光片数据集等等。

应用:艺术和GAN

应用于图像、音乐、绘图和视频领域的生成模型,今年也越来越受到关注。NIPS 2017还首次推出了面向创意与设计的机器学习研讨会。

最流行的应用之一是谷歌的QuickDraw,使用神经网络来识别你的涂鸦。基于已经发布的数据集,你甚至可以让机器帮你画完草稿。

一起去玩一下:

http://ift.tt/2f1IjPw

GAN今年取得了不少重大进展。例如CycleGAN、DiscoGAN、StarGAN等新模型在生成人脸方面令人印象深刻。GAN通常难以生成逼真的高分辨率图像,但pix2pixHD改变了这种现状。

相关地址:

CycleGAN

http://ift.tt/2nBk0uc

DiscoGAN

http://ift.tt/2niiUWJ

StarGAN

http://ift.tt/2n7KjeO

应用:无人车

无人车领域的大玩家包括Uber、Lyft、Waymo和Tesla。Uber这一年都麻烦不断,但是这家公司一直没有停下在无人车方面的脚步。

Waymo在亚利桑那的凤凰城进行了一系列无人车实验,还公布了测试和模拟技术的细节。Lyft正在建立自己的无人车硬件和软件体系。特斯拉的Autopilot没有太多更新。

当然还有一个"新的"入局者,库克证实苹果公司也在研究自动驾驶。

超酷的研究和应用

今年有很多好玩的项目和展示,这里不可能提及所有:

  • 用深度学习去除背景
  • 用深度学习创造动漫角色

一起来试试吧~ http://ift.tt/2vt6nCQ

  • 用神经网络给黑白照片着色
  • 神经网络玩《马里奥赛车》
  • 实时《马里奥赛车 64》AI

http://ift.tt/2hg7ttR

  • 使用深度学习鉴别赝品
  • 随手画猫

在研究层面,

  • 无监督情绪神经元 - 一个可以学习情绪的系统,尽管只被亚马逊训练用于预测评论的下一个字符。
  • 学会沟通 - 智能体"开发"了自己的语言。
  • 习得索引结构 - 使用神经网络优化高速缓存B-Tree。

http://ift.tt/2AZWqRm

  • Attention is All You Need - Google推出的翻译架构Transformer完全舍弃了RNN/CNN结构。

http://ift.tt/2rV0EE7

  • Mask R-CNN
  • Deep Image Prior,图像去噪、超分辨率和修补。

数据集

神经网络需要大量的数据,因此开放数据集是对行业的重要贡献。以下是今年几个新推出的数据集代表。

  • Youtube Bounding Boxes

http://ift.tt/2luEbdC

  • Google QuickDraw Data

http://ift.tt/2qWD6Q1

  • DeepMind Open Source Datasets

http://ift.tt/2lw5FPQ

  • Google Speech Commands Dataset

http://ift.tt/2g81MRw

  • Atomic Visual Actions

http://ift.tt/2hQaroW

  • Several updates to the Open Images data set

http://ift.tt/2d1Ashr

  • Nsynth dataset of annotated musical notes

http://ift.tt/2oFVGdP

  • Quora Question Pairs

http://ift.tt/2k0ITjN

深度学习,重现性和炼金术

过去一年中,研究人员对学术论文结果的可复现性提出了担忧。深度学习模型通常依赖于大量的超参数,必须对其进行优化才能获得足够好的结果。这种优化代价高昂,可能只有Google和Facebook才能负担得起。

另外,研究人员并不总是同步公开代码,论文中有时还会漏掉重要的细节,或者使用特殊的评估方法……这些因素都让可复现性成为一个大问题。

在论文Are GANs Created Equal? A Large-Scale Study中,使用昂贵的超参数搜索调整GAN,可以击败更为复杂的方法。

论文地址:http://ift.tt/2ijo589

同样,在论文On the State of the Art of Evaluation in Neural Language Models中,研究人员表明,简单的LSTM架构在正确调整后,表现就能比最近的多数模型都好。

论文地址:http://ift.tt/2ua2O3P

在NIPS 2017大会上,阿里·拉希米称现在的深度学习就像"炼金术",呼吁更为严谨的学术管理。不过Yann LeCun随即进行了实名反击。

竞争,炒作和失败

加拿大和中国,正在加速AI方面的部署。

硬件方面,AI芯片竞争提速,英伟达发布了最新的Titan V旗舰GPU、Google发布了第二代TPU、英特尔的Nervana也发布了新的芯片。就连特斯拉也在开发AI硬件。另外,来自中国的竞争者也不容小觑。

宣传非常重要,但有些宣传和实验室实际发生的事情不符。IBM沃森就是过度营销的传奇,并没有带来相符的结果。大家都不喜欢沃森,所以他们在医疗方面一再失败也不奇怪。

Facebook的人工智能发明了自己的语言那事,其实也跟真相不符。这不简单是媒体的误导,研究人员所用的标题和摘要也越了界,没能反映实验的实际结果。

— 完 —

欢迎大家关注我们的专栏:量子位 - 知乎专栏

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复"招聘"两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态



via 量子位 - 知乎专栏 http://ift.tt/2lBJ9EL
RSS Feed

RSS5

IFTTT

新年快乐!这是份值得收藏的2017年AI与深度学习要点大全

若朴 夏乙 编译自 WILDML量子位 出品 | 公众号 QbitAI

2017已经正式离我们远去。

过去的一年里,有很多值得梳理记录的内容。博客WILDML的作者、曾在Google Brain做了一年Resident的Denny Britz,就把他眼中的2017年AI和深度学习的大事,进行了一番梳理汇总。

量子位进行概要摘录如下,详情可前往原文查看,地址:http://ift.tt/2zSsyRT

强化学习称霸人类游戏

如果说2016年AlphaGo击败李世乭之后,大家对它的棋坛地位还有些许怀疑的话,2017年击败柯洁,让它成了毫无疑问的围棋霸主。

作为一个强化学习Agent,它的第一个版本使用了来自人类专家的训练数据,然后通过自我对局和蒙特卡洛树搜索的改进来进化。

不久之后,AlphaGo Zero更进一步,使用了之前一篇论文Thinking Fast and Slow with Deep Learning and Tree Search提出的技术,从零开始下围棋,在训练中没有用到人类对局的数据。

临近年底,我们又看到了新一代的AlphaGo:AlphaZero,在围棋之后,用同样的技术搞定了国际象棋和日本将棋。

这些算法在对局中所用的策略,有时候甚至让经验丰富的棋手都觉得惊讶,他们也会向AlphaGo学习,改变着自己的对局风格。为了让学习更容易,DeepMind还发布了AlphaGo Teach工具。

下面是相关论文,认真的同学们可以收藏回顾啦:

AlphaGo

http://ift.tt/2kxZgUN

AlphaGo Zero

http://ift.tt/2yztrBO

AlphaZero

http://ift.tt/2nvQQ3f

Thinking Fast and Slow with Deep Learning and Tree Search

http://ift.tt/2rPEb9y

AI今年取得重大进展的游戏不止围棋。CMU研究人员的Libratus(冷扑大师)在20天的一对一无限注德州扑克比赛中,击败了人类顶级扑克玩家。

再早些时候,查尔斯大学、捷克技术大学和加拿大阿尔伯塔大学开发的DeepStack,首先击败了专业德扑玩家。

有一点值得注意,这两个程序玩的都是一对一扑克,也就是两名玩家之间的对局,这比多人游戏更容易。2018年,我们很可能看到算法在多玩家扑克上取得一些进步。

Libratus论文:

http://ift.tt/2B77b4U

用强化学习玩人类游戏的下一个领域,似乎是更复杂的多人游戏,除了多人扑克之外,还有星际争霸、DotA等等。DeepMind正在积极研究星际争霸2,发布了相关的研究环境。

星际争霸2研究环境:

http://ift.tt/2hKMX7E

而OpenAI在DotA中单比赛中取得了初步的成功,玩转5v5游戏,是他们的下一步目标。

进化算法回归

对于监督学习来说,基于梯度的反向传播算法已经非常好,而且这一点可能短期内不会有什么改变。

然而,在强化学习中,进化策略(Evolution Strategies, ES)似乎正在东山再起。因为强化学习的数据通常不是lid(独立同分布)的,错误信号更加稀疏,而且需要探索,不依赖梯度的算法表现很好。另外,进化算法可以线性扩展到数千台机器,实现非常快的平行训练。它们不需要昂贵的GPU,但可以在成百上千便宜的CPU机器上进行训练。

2017年早些时候,OpenAI的研究人员证明了进化策略实现的性能,可以与Deep Q-Learning等标准强化学习算法相媲美。

相关论文:

http://ift.tt/2mV8c7N

年底,Uber内部一个团队又连发5篇论文,来展示遗传算法和新颖性搜索的潜力。他们使用非常简单的遗传算法,没有任何梯度信息,学会了玩各种雅达利游戏。他们的进化算法在Frostbite游戏中达到了10500分,而DQN、AC3、ES等算法在同样的游戏中得分都不到1000。

WaveNets,CNNs以及注意力机制

谷歌的Tacotron 2文本转语音系统效果令人印象深刻。这个系统基于WaveNet,也是一种自动回归模型,也被部署于Google Assistant之中,并在过去一年得到快速提升。

远离昂贵且训练漫长的回归架构是一个更大的趋势。在论文Attention is All you Need里,研究人员完全摆脱了循环和卷积,使用一个更复杂的注意力机制,只用了很小的训练成本,就达到了目前最先进的结果。

论文地址:http://ift.tt/2rUnEDo

深度学习框架这一年

如果非要用一句话总结2017,那只能说是框架之年。

Facebook搞出了PyTorch,这个框架得到了搞自然语言处理的研究人员大爱。

TensorFlow在2017年继续领跑,目前已经发布到1.4.1版本。除了主框架之外,还发布了多个伴随库。TensorFlow团队还发布了一个全新的eager execution模式,类似PyTorch的动态计算图。

此外,

  • 苹果发布了CoreML移动机器学习库;
  • Uber的一个团队发布了Pyro,一个深度概率编程语言;
  • 亚马逊宣布在MXNet上提供更高级别的API Gluon;
  • Uber发布了内部米开朗基罗机器学习基础设施平台的详情;
  • 由于框架已经太多,Facebook和微软宣布推出ONNX开放格式,以便跨框架共享深度学习模型。

除了通用的深度学习框架外,我们还看到大量的强化学习框架发布:

  • OpenAI Roboschool,用于机器人仿真

http://ift.tt/2pDYk4N

  • OpenAI Baselines,一套强化学习算法的高质量实现

http://ift.tt/2qkiPiA

  • Tensorflow Agents,用TensorFlow来训练RL智能体

http://ift.tt/2eMG41w

  • Unity ML Agents,研究人员可用Unity Editor来创建游戏,并展开强化训练

http://ift.tt/2wtV3sn

  • Nervana Coach,用最先进的强化学习算法进行试验

http://ift.tt/2zpOzHS

  • Facebook ELF,游戏研究平台

http://ift.tt/2sKQxUp

  • DeepMind Pycolab,定制化的游戏引擎

http://ift.tt/2js86RV

  • Geek.ai MAgent,多智能体强化学习平台

http://ift.tt/2B1SkrX

为了让深度学习更易普及,还有一些面向web的框架,例如谷歌的deeplearn.js和MIL WebDNN执行框架。

2017,还有一个流行框架跟我们告别了。

那就是Theano。

学习资源

随着深度学习和强化学习越来越流行,2017年有越来越多的课程、训练营等活动举行并分享到网上。以下是我最爱的一些。

  • Deep RL Bootcamp,由OpenAI和UC Berkeley联合主办,主要讲授关于强化学习的基础知识和最新研究成果

地址:http://ift.tt/2lBpRiG

  • 斯坦福视觉识别卷积神经网络课程2017春季版

http://ift.tt/1ERxZ3M

  • 斯坦福自然语言处理与深度学习课程2017冬季版

http://ift.tt/1PGjeBB

  • 斯坦福的深度学习理论课程

http://ift.tt/2zokyf4

  • Coursera上最新的深度学习课程

http://ift.tt/2vLAXJh

  • 蒙特利尔深度学习和强化学习暑期学校

http://ift.tt/2wmv96D

  • UC Berkeley的深度强化学习课程2017秋季版

http://ift.tt/1qYr18w

  • TensorFlow开发者大会上关于深度学习和TensorFlow API相关的内容

https://www.youtube.com/playlist?list=PLOU2XLYxmsIKGc_NBoIhTn2Qhraji53cv

几大学术会议,延续了在网上发布会议内容的新传统。如果你想赶上最尖端的研究,可以查看这些顶级会议的录像资料。

  • NIPS 2017:

http://ift.tt/2zftYsz

  • ICLR 2017:

http://ift.tt/2w6f4S1

  • EMNLP 2017:

http://ift.tt/2jnJwVh

研究人员也开始在arXiv上发布低门槛的教程和综述论文。以下是过去一年我的最爱。

  • 深度强化学习:概述

Deep Reinforcement Learning: An Overview

http://ift.tt/2ktZJF8

  • 给工程师的机器学习简介

A Brief Introduction to Machine Learning for Engineers

http://ift.tt/2jj49Sy

  • 神经机器翻译

Neural Machine Translation

http://ift.tt/2ChIxvE

  • 教程:神经机器翻译和序列到序列模型

Neural Machine Translation and Sequence-to-sequence Models: A Tutorial

http://ift.tt/2n2ZySm

应用:AI和医学

2017年,有不少人宣称用深度学习解决了医疗问题,而且还击败了人类专家。这其中有真正的突破,也有一些炒作。对这方面感兴趣的话,推荐关注Luke Oakden-Rayner的人类医生终结系列博客:

http://ift.tt/2op2Ak2

这里简要介绍一些发展。其中最重要的事件包括:斯坦福的一个团队公布了用深度学习识别皮肤癌的算法细节。

相关研究:http://ift.tt/2q56YtZ

另一个斯坦福的团队则开发了一个模型,能比人类专家更好的发现心律失常。

相关研究:http://ift.tt/2sx5wNG

当然也有一些风波。例如DeepMind与NHS之间的问题;NIH发布了一个不适合训练AI的胸部X光片数据集等等。

应用:艺术和GAN

应用于图像、音乐、绘图和视频领域的生成模型,今年也越来越受到关注。NIPS 2017还首次推出了面向创意与设计的机器学习研讨会。

最流行的应用之一是谷歌的QuickDraw,使用神经网络来识别你的涂鸦。基于已经发布的数据集,你甚至可以让机器帮你画完草稿。

一起去玩一下:

http://ift.tt/2f1IjPw

GAN今年取得了不少重大进展。例如CycleGAN、DiscoGAN、StarGAN等新模型在生成人脸方面令人印象深刻。GAN通常难以生成逼真的高分辨率图像,但pix2pixHD改变了这种现状。

相关地址:

CycleGAN

http://ift.tt/2nBk0uc

DiscoGAN

http://ift.tt/2niiUWJ

StarGAN

http://ift.tt/2n7KjeO

应用:无人车

无人车领域的大玩家包括Uber、Lyft、Waymo和Tesla。Uber这一年都麻烦不断,但是这家公司一直没有停下在无人车方面的脚步。

Waymo在亚利桑那的凤凰城进行了一系列无人车实验,还公布了测试和模拟技术的细节。Lyft正在建立自己的无人车硬件和软件体系。特斯拉的Autopilot没有太多更新。

当然还有一个"新的"入局者,库克证实苹果公司也在研究自动驾驶。

超酷的研究和应用

今年有很多好玩的项目和展示,这里不可能提及所有:

  • 用深度学习去除背景
  • 用深度学习创造动漫角色

一起来试试吧~ http://ift.tt/2vt6nCQ

  • 用神经网络给黑白照片着色
  • 神经网络玩《马里奥赛车》
  • 实时《马里奥赛车 64》AI

http://ift.tt/2hg7ttR

  • 使用深度学习鉴别赝品
  • 随手画猫

在研究层面,

  • 无监督情绪神经元 - 一个可以学习情绪的系统,尽管只被亚马逊训练用于预测评论的下一个字符。
  • 学会沟通 - 智能体"开发"了自己的语言。
  • 习得索引结构 - 使用神经网络优化高速缓存B-Tree。

http://ift.tt/2AZWqRm

  • Attention is All You Need - Google推出的翻译架构Transformer完全舍弃了RNN/CNN结构。

http://ift.tt/2rV0EE7

  • Mask R-CNN
  • Deep Image Prior,图像去噪、超分辨率和修补。

数据集

神经网络需要大量的数据,因此开放数据集是对行业的重要贡献。以下是今年几个新推出的数据集代表。

  • Youtube Bounding Boxes

http://ift.tt/2luEbdC

  • Google QuickDraw Data

http://ift.tt/2qWD6Q1

  • DeepMind Open Source Datasets

http://ift.tt/2lw5FPQ

  • Google Speech Commands Dataset

http://ift.tt/2g81MRw

  • Atomic Visual Actions

http://ift.tt/2hQaroW

  • Several updates to the Open Images data set

http://ift.tt/2d1Ashr

  • Nsynth dataset of annotated musical notes

http://ift.tt/2oFVGdP

  • Quora Question Pairs

http://ift.tt/2k0ITjN

深度学习,重现性和炼金术

过去一年中,研究人员对学术论文结果的可复现性提出了担忧。深度学习模型通常依赖于大量的超参数,必须对其进行优化才能获得足够好的结果。这种优化代价高昂,可能只有Google和Facebook才能负担得起。

另外,研究人员并不总是同步公开代码,论文中有时还会漏掉重要的细节,或者使用特殊的评估方法……这些因素都让可复现性成为一个大问题。

在论文Are GANs Created Equal? A Large-Scale Study中,使用昂贵的超参数搜索调整GAN,可以击败更为复杂的方法。

论文地址:http://ift.tt/2ijo589

同样,在论文On the State of the Art of Evaluation in Neural Language Models中,研究人员表明,简单的LSTM架构在正确调整后,表现就能比最近的多数模型都好。

论文地址:http://ift.tt/2ua2O3P

在NIPS 2017大会上,阿里·拉希米称现在的深度学习就像"炼金术",呼吁更为严谨的学术管理。不过Yann LeCun随即进行了实名反击。

竞争,炒作和失败

加拿大和中国,正在加速AI方面的部署。

硬件方面,AI芯片竞争提速,英伟达发布了最新的Titan V旗舰GPU、Google发布了第二代TPU、英特尔的Nervana也发布了新的芯片。就连特斯拉也在开发AI硬件。另外,来自中国的竞争者也不容小觑。

宣传非常重要,但有些宣传和实验室实际发生的事情不符。IBM沃森就是过度营销的传奇,并没有带来相符的结果。大家都不喜欢沃森,所以他们在医疗方面一再失败也不奇怪。

Facebook的人工智能发明了自己的语言那事,其实也跟真相不符。这不简单是媒体的误导,研究人员所用的标题和摘要也越了界,没能反映实验的实际结果。

— 完 —

欢迎大家关注我们的专栏:量子位 - 知乎专栏

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复"招聘"两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态



via 量子位 - 知乎专栏 http://ift.tt/2lBJ9EL
RSS Feed

RSS5

IFTTT

Python环境下的8种简单线性回归算法

本文中,作者讨论了 8 种在 Python 环境下进行简单线性回归计算的算法,不过没有讨论其性能的好坏,而是对比了其相对计算复杂度的度量。


GitHub 地址:http://ift.tt/2p6DTh5


对于大多数数据科学家而言,线性回归方法是他们进行统计学建模和预测分析任务的起点。但我们不可夸大线性模型(快速且准确地)拟合大型数据集的重要性。如本文所示,在线性回归模型中,「线性」一词指的是回归系数,而不是特征的 degree。


特征(或称独立变量)可以是任何的 degree,甚至是超越函数(transcendental function),比如指数函数、对数函数、正弦函数。因此,很多自然现象可以通过这些变换和线性模型来近似模拟,即使当输出与特征的函数关系是高度非线性的也没问题。


另一方面,由于 Python 正在快速发展为数据科学家的首选编程语言,所以能够意识到存在很多方法用线性模型拟合大型数据集,就显得尤为重要。同样重要的一点是,数据科学家需要从模型得到的结果中来评估与每个特征相关的重要性。


然而,在 Python 中是否只有一种方法来执行线性回归分析呢?如果有多种方法,那我们应该如何选择最有效的那个呢?


由于在机器学习中,Scikit-learn 是一个十分流行的 Python 库,因此,人们经常会从这个库调用线性模型来拟合数据。除此之外,我们还可以使用该库的 pipeline 与 FeatureUnion 功能(如:数据归一化、模型回归系数正则化、将线性模型传递给下游模型),但是一般来看,如果一个数据分析师仅需要一个又快又简单的方法来确定回归系数(或是一些相关的统计学基本结果),那么这并不是最快或最简洁的方法。

虽然还存在其他更快更简洁的方法,但是它们都不能提供同样的信息量与模型灵活性。


请继续阅读。


有关各种线性回归方法的代码可以参阅笔者的 GitHub。其中大部分都基于 SciPy 包

SciPy 基于 Numpy 建立,集合了数学算法与方便易用的函数。通过为用户提供高级命令,以及用于操作和可视化数据的类,SciPy 显著增强了 Python 的交互式会话。


以下对各种方法进行简要讨论。


方法 1:Scipy.polyfit( ) 或 numpy.polyfit( )




这是一个非常一般的最小二乘多项式拟合函数,它适用于任何 degree 的数据集与多项式函数(具体由用户来指定),其返回值是一个(最小化方差)回归系数的数组。


对于简单的线性回归而言,你可以把 degree 设为 1。如果你想拟合一个 degree 更高的模型,你也可以通过从线性特征数据中建立多项式特征来完成。


详细描述参考:http://ift.tt/2CnflGf


方法 2:stats.linregress( )



这是 Scipy 中的统计模块中的一个高度专门化的线性回归函数。其灵活性相当受限,因为它只对计算两组测量值的最小二乘回归进行优化。因此,你不能用它拟合一般的线性模型,或者是用它来进行多变量回归分析。但是,由于该函数的目的是为了执行专门的任务,所以当我们遇到简单的线性回归分析时,这是最快速的方法之一。除了已拟合的系数和截距项(intercept term)外,它还会返回基本的统计学值如 R² 系数与标准差。


详细描述参考:http://ift.tt/2iLOUgP


方法 3:optimize.curve_fit( )



这个方法与 Polyfit 方法类似,但是从根本来讲更为普遍。通过进行最小二乘极小化,这个来自 scipy.optimize 模块的强大函数可以通过最小二乘方法将用户定义的任何函数拟合到数据集上。


对于简单的线性回归任务,我们可以写一个线性函数:mx+c,我们将它称为估计器。它也适用于多变量回归。它会返回一个由函数参数组成的数列,这些参数是使最小二乘值最小化的参数,以及相关协方差矩阵的参数。


详细描述参考:http://ift.tt/2yy7MHR


方法 4:numpy.linalg.lstsq



这是用矩阵因式分解来计算线性方程组的最小二乘解的根本方法。它来自 numpy 包中的线性代数模块。通过求解一个 x 向量(它将|| b—a x ||²的欧几里得 2-范数最小化),它可以解方程 ax=b。


该方程可能会欠定、确定或超定(即,a 中线性独立的行少于、等于或大于其线性独立的列数)。如果 a 是既是一个方阵也是一个满秩矩阵,那么向量 x(如果没有舍入误差)正是方程的解。


借助这个方法,你既可以进行简单变量回归又可以进行多变量回归。你可以返回计算的系数与残差。一个小窍门是,在调用这个函数之前,你必须要在 x 数据上附加一列 1,才能计算截距项。结果显示,这是处理线性回归问题最快速的方法之一。


详细描述参考:http://ift.tt/2DlIgIp


方法 5: Statsmodels.OLS ( )


statsmodel 是一个很不错的 Python 包,它为人们提供了各种类与函数,用于进行很多不同统计模型的估计、统计试验,以及统计数据研究。每个估计器会有一个收集了大量统计数据结果的列表。其中会对结果用已有的统计包进行对比试验,以保证准确性。


对于线性回归,人们可以从这个包调用 OLS 或者是 Ordinary least squares 函数来得出估计过程的最终统计数据。


需要记住的一个小窍门是,你必须要手动为数据 x 添加一个常数,以用于计算截距。否则,只会默认输出回归系数。下方表格汇总了 OLS 模型全部的结果。它和任何函数统计语言(如 R 和 Julia)一样丰富。




详细描述参考:http://ift.tt/2p4lB0b


方法 6、7:使用矩阵求逆方法的解析解


对于一个良态(well-conditioned)线性回归问题(至少是对于数据点、特征),回归系数的计算存在一个封闭型的矩阵解(它保证了最小二乘的最小化)。它由下面方程给出:



在这里,我们有两个选择:


方法 6:使用简单矩阵求逆乘法。


方法 7:首先计算数据 x 的广义 Moore-Penrose 伪逆矩阵,然后将结果与 y 进行点积。由于这里第二个步骤涉及到奇异值分解(SVD),所以它在处理非良态数据集的时候虽然速度慢,但是结果不错。(参考:开发者必读:计算机科学中的线性代数)


详细描述参考:http://ift.tt/2bVD93O


方法 8: sklearn.linear_model.LinearRegression( )


这个方法经常被大部分机器学习工程师与数据科学家使用。然而,对于真实世界的问题,它的使用范围可能没那么广,我们可以用交叉验证与正则化算法比如 Lasso 回归和 Ridge 回归来代替它。但是要知道,那些高级函数的本质核心还是从属于这个模型。


详细描述参考:http://ift.tt/1HSxOH0


以上方法的速度与时间复杂度测量


作为一个数据科学家,他的工作经常要求他又快又精确地完成数据建模。如果使用的方法本来就很慢,那么在面对大型数据集的时候便会出现执行的瓶颈问题。


一个判断算法能力可扩展性的好办法,是用不断扩大的数据集来测试数据,然后提取所有试验的执行时间,画出趋势图。


可以在 GitHub 查看这个方法的代码。下方给出了最终的结果。由于模型的简单性,stats.linregress 和简单矩阵求逆乘法的速度最快,甚至达到了 1 千万个数据点。




总结


作为一个数据科学家,你必须要经常进行研究,去发现多种处理相同的分析或建模任务的方法,然后针对不同问题对症下药。


在本文中,我们讨论了 8 种进行简单线性回归的方法。其中大部分方法都可以延伸到更一般的多变量和多项式回归问题上。我们没有列出这些方法的 R² 系数拟合,因为它们都非常接近 1。


对于(有百万人工生成的数据点的)单变量回归,回归系数的估计结果非常不错。


这篇文章首要目标是讨论上述 8 种方法相关的速度/计算复杂度。我们通过在一个合成的规模逐渐增大的数据集(最大到 1 千万个样本)上进行实验,我们测出了每种方法的计算复杂度。令人惊讶的是,简单矩阵求逆乘法的解析解竟然比常用的 scikit-learn 线性模型要快得多。


原文链接:http://ift.tt/2p4lOjZ


]]> 原文: http://ift.tt/2C4PGys
RSS Feed

机器知心

IFTTT

蒙特卡洛树搜索是什么?如何将其用于规划星际飞行?

本文解读了蒙特卡洛树搜索算法背后的概念,并用一个案例说明了欧洲航天局使用该算法来规划星际飞行的方法。


前段时间,我们见证了游戏人工智能领域历史上最重大的事件——AlphaGo 成为了第一个在围棋上战胜世界冠军的计算机程序,其相关论文参阅:http://ift.tt/2CrXhL8


DeepMind 的开发者将来自机器学习和树搜索的不同技术结合到一起而实现了这一结果。其中之一就是蒙特卡洛树搜索(MCTS/Monte Carlo Tree Search)算法。这个算法很容易理解,而且也在游戏人工智能领域外有很多应用。下面我将解释 MCTS 算法背后的概念,并且还将简要介绍欧洲航天局是如何使用该算法来规划星际飞行的。


完美信息博弈


蒙特卡洛树搜索是在执行所谓的完美信息博弈(perfect information game)时所使用的算法。简单来说,完美信息博弈是指每个玩家在任意时间点都具有关于之前发生过的所有事件行动的完美信息的博弈。这样的博弈案例有国际象棋、围棋和井子棋。但并不是说每一步行动都已知就意味着可以计算和推断出每一个可能的结果。比如,围棋中合法的可能局面的数量就超过了 10^170。


每种完美信息博弈都可以通过以下方式表示成树形式的数据结构。首先,你有一个代表博弈的起始状态的根(root)。对于国际象棋而言,即是摆在棋盘上合适位置的 16 个白方棋子和 16 个黑方棋子。对于井子棋而言则是简单的 3x3 空方格。第一个玩家有一定数量 n1 的可能选择。在井子棋中即是在 9 个可能的位置画一个圈。每一种走法都会改变博弈的状态。这些所得到的状态是根节点的子节点。然后,对于 n1 个子节点中的每一个,第二个玩家有 n2 种可能的走法可以考虑,其中每一种走法又会产生另一个博弈状态——得到一个子节点。注意 n1 个节点中每一个节点所对应的子节点数量 n2 可能各不相同。比如在国际象棋中你可能会采取一种走法迫使对方移动他的国王;但你也可能选择另一种走法,让你的对手有很多选择余地。


一局博弈的结果就是从根节点到其中一个叶节点的路径。每一个叶节点都包含了一个确定的信息,说明了谁胜谁负。


根据树进行决策


在完美信息博弈中进行决策时,我们面临着两个主要问题。首先也是最主要的一个是树的规模。


对于井子棋这种可能性非常有限的博弈来说,这不是什么问题。我们在开始时最多只有 9 个子节点,而且随着游戏进行这个数字还会越来越小。但对于国际象棋或围棋而言,情况却完全不同。它们所对应的树非常庞大以至于我们没法搜索整个树。解决这一问题的一个方法是在树上进行随机游走一段时间以及获取原来决策树的一个子树。


但是,这又会带来另一个问题。如果我们每次选择时都沿着树随机游走,我们就忽视了我们的选择的效果,也没法从之前的游戏中学习。下过国际象棋的人都知道在棋盘上随机乱下是坚持不了太长时间的。也许新手可以通过这种方法来了解各个棋子的走法。但一局又一局的游戏之后,新手也能越来越好地区分好的下法和糟糕的下法。


所以我们有什么方法可以利用之前构建的决策树中所包含的事实来推理下一步走法呢?方法当然是有的。


多臂赌博机(MAB)问题


想象一下,如果你在一家赌场里,想玩一下老虎机。你可以随机选择一台然后开始玩。那天晚上晚些时候,另一位坐在你旁边的赌博者在 10 分钟内赢得钱比你在过去几个小时内赢的还多。当然,你不应该和别人比,这都是运气问题。但是,你当然也想知道下次你能不能赚多一点。那么你应该选择哪一台老虎机才能赚最多呢?也许你一次应该玩多台老虎机?


你面临的问题是多臂赌博机问题(Multi-Armed Bandit Problem)。这个问题在第二次世界大战期间就已经为人所知了,但我们今天最常了解的版本是由 Herbert Robbins 在 1952 年制定的。设有 N 台老虎机,每一台都有不同的预期回报值(你从给定机器所得到的预期净收入)。但你不知道任何机器的预期回报值。你可以在玩的过程中随时更换机器,也可以在任何机器上玩任意次数。那么最优的策略是什么?


在这样的场景中,「最优」意味着什么?显然你的最佳选择是只在回报值最高的机器上玩。最优策略是指能让你得到的结果尽可能接近在回报值最高的机器上玩所得到的结果的策略。


研究(http://ift.tt/2C7FVQ0



所以这就是你可以希望得到的最佳。幸运的是,事实也证明你可以达到这一边界(重申一次,是平均的)。实现这一目标的一种方法如下。


对于每一台机器 i,我们都跟踪记录两个数据:我们尝试过这台机器的次数(ni)以及平均回报值(xi)。我们也要跟踪我们玩过的总次数(n)。然后对于每个 i,我们都计算 xi 周围的置信区间:



我们总是选择在具有最高 xi 上界的机器上玩(即在上式中选择 + 号)。


这是多臂赌博机问题的解决方案之一。现在注意,我们也可以将其用于我们的完美信息博弈。只需要将每一种可能的下一步骤(子节点)看作是一台老虎机就行了。每次我们选择下一步骤后,我们最后都会或胜或负或平局。这是我们得到的结果。简单起见,我假设我们的目标是获胜,那么设我们获胜时结果为 1,其它情况的结果为 0。


真实应用案例


MAB 算法在真实世界中有很多实际的应用实现,比如价格引擎优化或寻找最优的网络广告。我们这里就看看第一种案例,看看我们可以如何使用 R 语言实现它。假设你在网上销售你的产品并且想引入一种新品,但你却不知道价格该定多少才合适。你根据专业知识和经验想出了 4 种可选的价格方案:99 美元、100 美元、115 美元和 120 美元。现在你想测试一下这些价格的表现,然后选出其中对你最有利的。在第一天的实验中,当你定价为 99 美元时,有 4000 人访问了你网店,其中有 368 人购买了该产品。其它价位的测试结果如下:


  • 定价 100 美元:4060 次访问,355 次购买
  • 定价 115 美元:4011 次访问,373 次购买
  • 定价 120 美元:4007 次访问,230 次购买


现在让我们看看如何用 R 来计算哪个价位在第一天实验中的表现最好。


  1. library(bandit)

  2. set.seed(123)

  3. visits_day1 <- c(4000, 4060, 4011, 4007)

  4. purchase_day1 <- c(368, 355, 373, 230)

  5. prices <- c(99, 100, 115, 120)

  6. post_distribution = sim_post(purchase_day1, visits_day1, ndraws = 10000)

  7. probability_winning <- prob_winner(post_distribution)

  8. names(probability_winning) <- prices

  9. probability_winning

  10. ##     99    100    115    120

  11. ## 0.3960 0.0936 0.5104 0.0000


我们计算了贝叶斯概率(Bayesian probability)来了解哪个价位的表现最好,可以看到 115 美元的价格有最高的概率(0.5)。而 120 美元对顾客来说价格似乎太高了。


我们还要继续实验几天。


第二天的结果:


  1. visits_day2 <- c(8030, 8060, 8027, 8037)

  2. purchase_day2 <- c(769, 735, 786, 420)

  3. post_distribution = sim_post(purchase_day2, visits_day2, ndraws = 1000000)

  4. probability_winning <- prob_winner(post_distribution)

  5. names(probability_winning) <- prices

  6. probability_winning

  7. ##       99      100      115      120

  8. ## 0.308623 0.034632 0.656745 0.000000


第二天依然是 115 美元价位的表现最好,99 美元和 100 美元价位的表现接近。


我们还可以使用 bandit 软件包执行显著性分析,使用 prop.test 进行整体比例比较是非常方便的。


  1. significance_analysis(purchase_day2, visits_day2)

  2. ##   successes totals estimated_proportion        lower      upper

  3. ## 1       769   8030           0.09576588 -0.004545319 0.01369494

  4. ## 2       735   8060           0.09119107  0.030860453 0.04700507

  5. ## 3       786   8027           0.09791952 -0.007119595 0.01142688

  6. ## 4       420   8037           0.05225831           NA         NA

  7. ##   significance rank best       p_best

  8. ## 1 3.322143e-01    2    1 3.086709e-01

  9. ## 2 1.437347e-21    3    1 2.340515e-06

  10. ## 3 6.637812e-01    1    1 6.564434e-01

  11. ## 4           NA    4    0 1.548068e-39


可以看到 120 美元的表现仍然是最差的,所以我们丢弃这个配置,继续下一天的实验。因为其 p_best 值非常小(可忽略),所以这种做法是最好的。


第三天的结果:


  1. visits_day3 <- c(15684, 15690, 15672, 8037)

  2. purchase_day3 <- c(1433, 1440, 1495, 420)

  3. post_distribution = sim_post(purchase_day3, visits_day3, ndraws = 1000000)

  4. probability_winning <- prob_winner(post_distribution)

  5. names(probability_winning) <- prices

  6. probability_winning

  7. ## 99 100 115 120

  8. ## 0.087200 0.115522 0.797278 0.000000

  9. value_remaining = value_remaining(purchase_day3, visits_day3)

  10. potential_value = quantile(value_remaining, 0.95)

  11. potential_value

  12. ##        95%

  13. ## 0.02670002


第三天的结果能让我们总结得出:115 美元的价位设置具有最高的转化率和收入。我们仍然不确定最佳价格 115 美元的转化概率,但不管是多少,其它某个价格还有 2.67% 的概率超过它(剩余价值的 95% 分数位)。


下面的直方图给出了剩余价值分布上的情况。提升量的分布说明随着实验的继续,另一个价格有可能会超过当前的最优价格。样本越多,转化率的可信度就越高。随着时间的推移,其它价格击败 115 美元的机会会越来越低。



如果你对这个案例有兴趣,请参阅我们另一篇有关动态定价的文章:http://ift.tt/2Bldiie


蒙特卡洛树搜索


现在我们可以学习蒙特卡洛树搜索的工作方式了。


只要我们有足够多的信息可以将子节点看作是老虎机,我们就可以像解决多臂赌博机问题一样选择下一个节点(步骤)。当我们有一些关于每个子节点的结果的信息时就能做到这一点。



我们会在某个时候到达某个我们无法再继续以这种方式继续的节点,因为此时至少有一个节点没有可用的统计数据。是时候探索这个树来获取新信息了。这可以完全随机地完成,也可以在选择子节点时应用一些启发式方法(实际上对于具有大量分支的博弈(比如围棋)来说,如果我们想得到好结果,这可能是必不可少的)。



最终,我们会到达一个叶节点,然后检查我们是否获胜。



现在我们可以更新我们到达叶节点过程中所访问过的节点。如果玩家在对应节点的行动带来了胜利,那么我们就增加一个获胜数。否则我们就保持原样。不管我们是否获胜,我们总是增加经历该节点的次数(在对应的图中,我们可以根据胜负的次数自动推断它)。



就是这样!我们重复这个过程直到满足某个条件:超时或我们之前提到过的置信区间稳定(收敛)。然后我们根据在搜索过程中收集到的信息做出最后的决策。我们可以选择有最高结果上界的节点(正如我们在多臂赌博机问题的每次迭代中做的那样)。或者你也可以选择有最高平均结果的节点。


做出决策之后,就选择了行动。现在轮到我们的对手行动了。当他们结束之后,我们就到达了一个新节点,在这个树中更深的某个位置;然后我们继续上面的操作。


不只是游戏


你可能也注意到了,蒙特卡洛树搜索可以被看作是在完美信息博弈场景中进行决策的一种通用技术。所以它的应用领域并不只限于游戏领域。我听说过的最惊人的用例是用来规划星际飞行。我这里会简单介绍一下,你也可以在这里查看:http://ift.tt/2i3QxHs


你可以将星际飞行看作是访问多个行星的旅程,比如从地球经由火星飞往木星。


实现这一目标的一种方法是利用这些行星的引力场(就像电影《火星救援》中那样),这样做可以节省燃料。问题在于到达和离开每个行星表面或轨道的最佳时机是怎样的(对于起点和终点的两个行星,仅有到达和离开)。


你可以将这个问题看作是一个决策树。如果你将时间分成区间,在每个行星处你都要进行一次决策:我应该在哪个时间段到达,又该在哪个时间段离开。每个选择都会影响后面的选择。首先,你不能在到达之前离开。其次,你之前的选择决定了你当前剩余的燃料以及你在宇宙中所处的位置。


这些连续选择集合起来就决定了你最终所到达的位置。如果你访问了所有的检查点,那你就赢了。否则你就输了。这就像是一个完美信息博弈问题。但你没有对手,你的行动是确定离开/到达的时间段。这可以使用上述蒙特卡洛树搜索方法解决。实际上和其它方法相比,蒙特卡洛树搜索方法的表现其实相当好,参阅:http://ift.tt/2C43XvB


原文链接:http://ift.tt/2DuMEVr


]]> 原文: http://ift.tt/2C7FWDy
RSS Feed

机器知心

IFTTT

JavaScript 之父联手近万名开发者集体讨伐 Oracle:给 JavaScript 一条活路吧!- InfoQ 每周精要848期

「每周精要」 NO. 848 2024/09/21 头条 HEADLINE JavaScript 之父联手近万名开发者集体讨伐 Oracle:给 JavaScript 一条活路吧! 精选 SELECTED C++ 发布革命性提案 "借鉴"Rust...