rmb是哪个国家货币币DL5980124

比特币突破8000美元,我们找到了用DL预测虚拟货币价格的方法
选自GitHub
作者:David Sheehan
截至 11 月 22 日,比特币的价格再创历史新高(约 1 比特币兑 8120 美元),在惊讶于虚拟货币「不可战胜」的同时,我们或许能可以从这一波热潮中学到些什么。本文中,博士毕业于伦敦大学学院(UCL)的 David Sheehan 为我们介绍了使用 Keras 基于 LSTM 预测比特币价格走势的详细方法。在测试中,这个机器学习预测法似乎有着不错的准确度。
如果要列出 2017 年最为荒谬的三样事物,则一定是指尖陀螺、人工智能,当然,还有加密虚拟货币(cryptocurrency)。以上是玩笑话,实际上我对虚拟货币的原理印象深刻,而且非常看好这种颠覆性技术的长期前景。我试图通过深度学习、机器学习或者说人工智能(是的,所有这三个!)成功预测虚拟货币的价格。
我认为把深度学习和虚拟货币结合起来是非常独特的想法,但是在写本文时,我发现了一些类似的内容(http://www.jakob-aungiers.com/articles/a/Multidimensional-LSTM-Networks-to-Predict-Bitcoin-Price)。这篇文章只关注比特币(最有名的虚拟货币),但是我还想讨论一下以太币。
我们打算使用 LSTM 模型,一种非常适合时序数据的深度学习模型。如果你希望真正了解理论或概念,那么推荐阅读:
完整代码地址:https://github.com/dashee87/blogs/blob/master/Jupyter/-predicting-cryptocurrency-prices-with-deep-learning.ipynb
在构建模型之前,我们需要先获取一些数据。Kaggle 上的数据集(https://www.kaggle.com/mczielinski/bitcoin-historical-data)非常详细地记录了近几年的比特币价格。在这个时间长度(数年)中,噪声可能盖住了信号,因此我们需要选择单日价格数据。问题在于我们可能没有充足的数据(我们需要数百行而不是数千行、数百万行)。在深度学习中,没有模型可以克服数据严重缺乏的问题。我同样不想使用静态文件,因为未来使用新数据更新模型时,这种做法会复杂化更新流程。于是,我们计划从网站和 API 中抓取数据。
我们将在一个模型中使用多种虚拟货币,因此从同一个数据源抓取数据或许是一个不错的主意。我们将使用 coinmarketcap.com。现在,我们只需要考虑比特币和以太币,但是使用这种方法添加最新火起来的山寨币(altcoin)就很难了。在输入数据之前,我们必须加载一些 Python 包,这样会容易一些。
importpandas aspd
importtime
importseaborn assns
importmatplotlib.pyplot asplt
importdatetime
importnumpy asnp
# get market info for bitcoin from the start of 2016 to the current day
bitcoin_market_info =pd.read_html("https://coinmarketcap.com/currencies/bitcoin/historical-data/?start=&end="+time.strftime("%Y%m%d"))[0]
# convert the date string to the correct date format
bitcoin_market_info =bitcoin_market_info.assign(Date=pd.to_datetime(bitcoin_market_info['Date']))
# when Volume is equal to '-' convert it to 0
bitcoin_market_info.loc[bitcoin_market_info['Volume']=="-",'Volume']=0
# convert to int
bitcoin_market_info['Volume']=bitcoin_market_info['Volume'].astype('int64')
# look at the first few rows
bitcoin_market_info.head()
以上代码的解释是,我们加载了一些 Python 包,然后导入这个网站(https://coinmarketcap.com/currencies/bitcoin/historical-data/)中的表格。经过少量的数据清理操作,我们获得了上面的表格。我用同样的操作为以太币也制作了一个表格,只需要把 url 中的『bitcoin』替换为『ethereum』就可以了(代码省略)。
为了证明数据是准确的,我们将两种虚拟币的价格和成交量按时间作图:
训练、测试和随机游走
有了数据,接下来就该建立模型了。深度学习中,通常把数据分为训练集和测试集。模型建立在训练集上,随后用未见过的测试集评估。在时间序列模型中,我们通常使用一段时期的数据训练,然后用另一段时期的数据进行测试。我把时间界限定为 2017 年 6 月 1 日(即模型将使用该日期之前的数据进行训练,用该日期之后的数据进行测试)。
从上图可知,大部分的训练时期内虚拟货币都是相对更低价的。因此,训练数据可能对于测试数据来说没有代表性,这会削弱模型泛化到未知数据上的能力。不过请先保持乐观,在实际应用我们的深度模型之前,讨论一下更简单的模型也是有意义的。最基础的模型是设定明天的价格等于今天的价格(可以简单粗暴地称之为滞后模型,lag model),数学公式:
通过扩展滞后模型,我们一般会使用随机游走(random walk)算法拟合股票价格,用数学公式定义即:
我们将从训练集中确定 μ 和 σ,然后将随机游走模型应用到比特币和以太币测试集上。
结果很不错!除了一些缺陷,该模型基本上追踪到了两种货币的实际收盘价。它甚至捕捉到了六月中旬和八月下旬的以太币价格上升(和随后的下跌)。正如在其他博客中提到的,由于误差无法传递到随后的预测中,单点预测的模型通常是有误导性的。由于将真实价格馈送到模型中,无论误差有多大,都会在下一个时间点被重新设置。比特币随机游走其实特别具欺骗性,因为 y 轴的分布范围很宽,才使得预测线看起来很平滑。
不幸的是,使用单点预测评估时间序列模型很普遍。使用多点预测测量准确率可能会更好,用这种方法,之前预测的误差不会被重设,而会组合到后续的预测中。因此,性能较差的模型将得到更多的惩罚。用数学公式定义即:
接下来我会使用随机游走模型对整个测试集进行预测。
模型的预测对随机种子非常敏感。我选择了一个随机种子,其中整个区间内的随机游走对于 Ethereum 来说几乎都是降低的。在相应的 Jupyter notebook 完整代码中,你可以交互地控制种子的值,看看它表现的有多糟糕,如下图所示:
注意单点随机游走看起来多么准确,即使其背后没有任何实质性内容。幸运的是,你会对任何声称能够准确预测价格的文章持怀疑态度的。
长短期记忆(LSTM)
如果读者对 LSTM 的理论比较感兴趣,可以查看上文机器之心发过的教程与解释。在本文中,我们并不需要从头构建一个 LSTM 网络,我们甚至都不需要理解它就能通过如 Keras 或 PyTorch 那样的深度学习框架完成实现。本文选择的是 Keras 框架,因为它只需要很少的理论知识,并且是目前最直观的深度学习框架。
我创建了一个称之为 model_data 的数据框架,我们删除了前面的一些列(开盘价格、日最高价和最低价),并重新制定一些新的列。close_off_high 列表示收盘价与日最高价之间的距离,-1 和 1 分别表示收盘价等于日最低或日最高价。volatility 列表示日最高价与最低价之间的差除以开盘价。model_data 按从早到晚的顺序排列,因此实际上我们并不需要日期列,所以这些信息并不会输入到模型中。
我们的 LSTM 模型将使用前面的数据(Bitcoin 和 eth)来预测特定虚拟货币第二天的收盘价格。我们必须确定模型能访问之前多少天的数据,这里简单地设置为 10,当然该超参数还能进一步优化。因此我们构建了一个由连续 10 天数据(即窗口)组成的小数据框,即第一个窗口(window)将由训练集中 0-9 行数据组成,第二个窗口由 1-10 行数据组成等。选择较小的窗口规模意味着我们的模型可以使用更多的窗口,但缺点是模型没有足够的信息检测复杂的长期行为。
深度学习模型对输入的格式要求比较高,而原数据中有一些列的值范围非常广,可能取值范围能达到数百万的量级。所以首先我们就需要归一化这些数据,因此每一个特征的取值都会服从均值为 0、方差为 1 的属性。一般来说,我们会令取值处于-1 到 1 之间,off_high 和 volatility 列基本已经符合条件,剩下的特征可以使用归一化方法。
这个表格代表我们的 LSTM 模型输入数据的一个样本,这 10 条数据可以组成一个窗口,并且我们总共有数百个类似的窗口。我们已经归一化了一些列以令它们的值在第一个时间点等于 0,所以我们的目标是预测该时间点的价格变化。我们现在已经准备建立 LSTM 模型了,Keras 贯序模型非常简单,我们只需要将不同的层级叠加在一起就行了。
# import the relevant Keras modules
fromkeras.models importSequential
fromkeras.layers importActivation,Dense
fromkeras.layers importLSTM
fromkeras.layers importDropout
defbuild_model(inputs,output_size,neurons,activ_func ="linear",
dropout =0.25,loss="mae",optimizer="adam"):
model =Sequential()
model.add(LSTM(neurons,input_shape=(inputs.shape[1],inputs.shape[2])))
model.add(Dropout(dropout))
model.add(Dense(units=output_size))
model.add(Activation(activ_func))
model.compile(loss=loss,optimizer=optimizer)
returnmodel
那么,build_model 函数构建了一个模型,名为 model(model= Sequential),该模型添加了一个 LSTM 层和全连接层。该层的形态已经调整以适合输入(n x m 的矩阵,n 和 m 分别代表时间点/行和列)。该函数还包括更通用的神经网络特征,如 dropout 和激活函数。现在,我们只需指定 LSTM 层中神经元的数量(我选择了 20 个以保证合理的运行时)和训练数据。
# random seed for reproducibility
np.random.seed(202)
# initialise model architecture
eth_model =build_model(LSTM_training_inputs,output_size=1,neurons =20)
# model output is next price normalised to 10th previous closing price
LSTM_training_outputs =(training_set['eth_Close'][window_len:].values/training_set['eth_Close'][:-window_len].values)-1
# train model on data
# note: eth_history contains information on the training error per epoch
eth_history =eth_model.fit(LSTM_training_inputs,LSTM_training_outputs,
epochs=50,batch_size=1,verbose=2,shuffle=True)
#eth_preds = np.loadtxt('eth_preds.txt')
--------------------------------------------------------------------------
Epoch50/50
6s-loss:0.0625
我们刚才构建了一个 LSTM 模型来预测明天的以太币收盘价。现在我们来看一下效果如何。首先检查训练集性能(2017 年 7 月之前的数据)。代码下面的数字代表 50 次训练迭代后该模型在训练集上的平均绝对误差。我们可以看到模型输出就是每日收盘价。
我们不应对它的准确率感到惊讶。该模型可以检测误差来源并进行调整。事实上,获取趋近于零的训练误差并不难。我们只需要数百个神经元和数千个训练 epoch。我们应该对它在测试集上的性能更感兴趣,因为测试集中是模型未见过的全新数据。
注意单点预测具备误导性,而我们的 LSTM 模型似乎可以在未见过的测试集上实现良好的性能。最显著的缺点是单点预测无法检测出当以太币突然上涨时必然会下跌(如六月中和十月)。事实上,它一直都是失败的,只不过在这些波动点更加明显而已。预测价格一般更接近一天后的实际价格(如七月中的下跌)。我们还可以构建一个适用于比特币的类似的 LSTM 模型,测试集预测结果见下图(完整代码见上文地址)。
如前所述,单点预测具有一定误导性。我们现在构建一个 LSTM 模型来预测接下来 5 天的虚拟货币价格。
从视觉效果上来看,预测结果没有其单点预测更加鲜明。但是,我很高兴,该模型返回了一些细微的行为(如以太币图的第二条线);它不仅仅预测价格在一个方向的移动轨迹。因此,该模型还有很多优化空间。
现在回到单点预测,我们的深度机器人工神经模型看起来还不错,但是随机游走模型看起来也还行。与随机游走模型类似,LSTM 模型对随机种子的选择很敏感(模型权重最初是随机分配的)。那么,如果我们想对比这两种模型,就需要把每个模型运行多次(比如,25 次)来评估模型误差。误差可以作为测试集中真实和预测收盘价的绝对差。
或许 AI 完全值得这些炒作!这些图显示了在进行 25 次不同的初始化之后,每个模型在测试集上的误差。LSTM 模型对比特币和以太币价格的预测误差分别是 0.04 和 0.05,完胜相应的随机游走模型。
只是为了打败随机游走模型的话也太 low 了。对比 LSTM 模型和更合适的时序模型(加权平均值,ARIMA 或 Facebook 的 Prophet)岂不是更加有趣!另外,我确定很难再提升我们的 LSTM 模型了(添加更多层和/或神经元,改变批量大小、学习率等)。可能虚拟货币价格变化没有规律吧,可能没有一个模型可以把信号和噪声分离开(类似于使用深度学习预测地震的优点)。以后的文章中可能会讨论这些话题。
幸运的是,你已经察觉到我对使用深度学习预测虚拟货币价格变化的怀疑态度。原因在于我们忽略了最优的框架:人类智能。很明显,预测虚拟货币价格的完美模型是:
我确定他们最终最终会找到深度学习的使用案例的。同时,你可以下载完整的 Python 代码构建自己的模型。
原文链接:https://dashee87.github.io/deep%20learning/python/predicting-cryptocurrency-prices-with-deep-learning/
本文为机器之心编译,转载请联系本公众号获得授权。
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点&figure&&img src=&https://pic4.zhimg.com/v2-b63d24e2b28e64e86ee56_b.jpg& data-rawwidth=&1680& data-rawheight=&944& class=&origin_image zh-lightbox-thumb& width=&1680& data-original=&https://pic4.zhimg.com/v2-b63d24e2b28e64e86ee56_r.jpg&&&/figure&&p&从1998年经典的LeNet,到2012年历史性的AlexNet,之后深度学习进入了蓬勃发展阶段,百花齐放,大放异彩,出现了各式各样的不同网络,包括LeNet、AlexNet、ZFNet、VGG、NiN、Inception v1到v4、Inception-ResNet、ResNet、WRN、FractalNet、Stochastic Depth、DenseNet、ResNeXt、Xception、SENet、SqueezeNet、NASNet、MobileNet v1和v2、ShuffleNet等等。&/p&&p&它们各有特点,也互相借鉴,在很多任务上不断取得突破。本文从最基本的分类任务的角度,从无人问津到ImageNet上超越人类,回顾了卷积神经网络的发展历史。&/p&&h2&经典网络&/h2&&p&经典网络包括LeNet、AlexNet以及VGG等。&/p&&p&&b&LeNet&/b&:1998,Gradient based learning applied to document recognition&/p&&p&用于手写数字识别,可以看到,卷积神经网络的基本框架已经有了,卷积、激活、池化和全连接,这几个基本组件都完备了。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-4feaf91ee002a8c947ed92fd31bb59fa_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1663& data-rawheight=&574& class=&origin_image zh-lightbox-thumb& width=&1663& data-original=&https://pic2.zhimg.com/v2-4feaf91ee002a8c947ed92fd31bb59fa_r.jpg&&&/figure&&p&&br&&/p&&p&但是,在1998年以后,深度学习并没有太多的突破。一直沉寂到2012年,AlexNet横空出世,将深度学习重新带入大家视线,并开启了深度学习的黄金时代。&/p&&p&为什么是2012年?一是数据,之前并没有大规模的数据进行充分的训练,应用于更广泛的任务,现在有ImageNet;二是计算,之前的硬件条件限制了,无法进行大规模的训练,而现在有了性能强大的GPU的加成;三就是AlexNet本身很优秀,给后来的网络奠定了一个很好的基础,让大家突然发现,原来还可以这样玩!&/p&&p&&b&AlexNet&/b&:2012,ImageNet Classification with Deep Convolutional Neural Networks&/p&&p&ImageNet Top5错误率:16.4%,而两年前非深度学习的方法的最好错误率是28.2%&/p&&p&AlexNet总体结构和LeNet相似,但是有极大改进:&/p&&ul&&li&由五层卷积和三层全连接组成,输入图像为三通道224x224大小,网络规模远大于LeNet&/li&&li&使用了ReLU激活函数&/li&&li&使用了Dropout,可以作为正则项防止过拟合,提升模型鲁棒性&/li&&li&一些很好的训练技巧,包括数据增广、学习率策略、weight decay等&/li&&/ul&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0a20a6856dcda_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1321& data-rawheight=&424& class=&origin_image zh-lightbox-thumb& width=&1321& data-original=&https://pic4.zhimg.com/v2-0a20a6856dcda_r.jpg&&&/figure&&p&&br&&/p&&p&AlexNet使用3GB显存的GTX 580显卡(好古老),一块显卡不够用,所以如上图所示将模型分为两部分放到了两块显卡上并行运算。虽然这仅仅是单块显卡资源有限时的做法,但是后面的许多网络都进一步发扬了这种对卷积进行分组的思想(虽然动机不同)。&/p&&p&&b&VGG&/b&:2014,Very deep convolutional networks for large-scale image recognition&/p&&p&在AlexNet之后,另一个提升很大的网络是VGG,ImageNet上Top5错误率减小到7.3%。&/p&&p&主要改进就是:深,更深!网络层数由AlexNet的8层增至16和19层,更深的网络意味着更强大的网络能力,也意味着需要更强大的计算力,还好,硬件发展也很快,显卡运算力也在快速增长,助推深度学习的快速发展。&/p&&p&同时只使用3x3的卷积核,因为两个3x3的感受野相当于一个5x5,同时参数量更少,之后的网络都基本遵循这个范式。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7e4da9ebdf98affdbe6d37_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&772& data-rawheight=&795& class=&origin_image zh-lightbox-thumb& width=&772& data-original=&https://pic3.zhimg.com/v2-7e4da9ebdf98affdbe6d37_r.jpg&&&/figure&&p&&br&&/p&&h2&GoogLeNet和ResNet&/h2&&p&一层一层卷积堆叠,VGG是集大成者,但是之后很难再进一步,继续简单增加网络层数会遇到问题,更深的网络更难训练同时参数量也在不断增长。&/p&&p&&b&Inception v1(GoogLeNet)&/b&:2015,Going deeper with convolutions&/p&&p&ImageNet Top5错误率6.7%&/p&&p&GoogLeNet则从另一个维度来增加网络能力,每单元有许多层并行计算,让网络更宽了,基本单元如下:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-048d08a3e4a45d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&593& data-rawheight=&298& class=&origin_image zh-lightbox-thumb& width=&593& data-original=&https://pic4.zhimg.com/v2-048d08a3e4a45d_r.jpg&&&/figure&&p&&br&&/p&&p&网络总体结构如下所示,包含多个上面的Inception模块,并添加了两个辅助分类分支补充梯度更好训练:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-352a72fab0d60d999ef3aa0ac3738b5a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1228& data-rawheight=&496& class=&origin_image zh-lightbox-thumb& width=&1228& data-original=&https://pic1.zhimg.com/v2-352a72fab0d60d999ef3aa0ac3738b5a_r.jpg&&&/figure&&p&&br&&/p&&p&通过网络的水平排布,可以用较浅的网络得到很好的模型能力,并进行多特征融合,同时更容易训练,另外,为了减少计算量,使用了1x1卷积来先对特征通道进行降维。堆叠Inception模块而来就叫Inception网络,而GoogLeNet就是一个精心设计的性能良好的Inception网络(Inception v1)的实例,即GoogLeNet是Inception v1网络的一种。&/p&&p&但是,网络太深无法很好训练的问题还是没有解决,直到ResNet提出了residual connection。&/p&&p&&b&ResNet&/b&:2016,Deep residual learning for image recognition&/p&&p&ImageNet Top5错误率3.57%&/p&&p&ResNet通过引入shortcut直连来解决这个问题:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-89ed8f0afef54be8ae0e3bcd2a25b56f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&783& data-rawheight=&395& class=&origin_image zh-lightbox-thumb& width=&783& data-original=&https://pic4.zhimg.com/v2-89ed8f0afef54be8ae0e3bcd2a25b56f_r.jpg&&&/figure&&p&&br&&/p&&p&通过引入直连,原来需要学习完全的重构映射,从头创建输出,并不容易,而引入直连之后,只需要学习输出和原来输入的差值即可,绝对量变相对量,容易很多,所以叫残差网络。并且,通过引入残差,identity恒等映射,相当于一个梯度高速通道,可以容易地训练避免梯度消失的问题,所以可以得到很深的网络,网络层数由GoogLeNet的22层到了ResNet的152层。&/p&&p&ResNet-34的网络结构如下所示:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-798c94d0e70be6fd071326eaae669249_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&300& data-rawheight=&1059& class=&content_image& width=&300&&&/figure&&p&&br&&/p&&p&如果说LeNet、AlexNet、VGG奠定了经典神经网络的基础,Inception和ResNet则展示了神经网络的新范式,在这两个范式的基础上,发展创新并相互借鉴,有了Inception流派的Inception v2到v4、Inception-ResNet v1和v2,以及ResNet流派的ResNeXt、DenseNet和Xception等。&/p&&h2&Inception流派&/h2&&p&Inception流派,核心就是Inception模块,出现了各种变种,包括Inception v2到v4以及Inception-ResNet v1和v2等。&/p&&p&&b&Inception v2(BN-Inception)&/b&:2015,Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift&/p&&p&ImageNet Top5错误率:4.8%&/p&&p&(PS:按照Inception系列四篇论文中的第三篇论文的划分,类似于Inception v3的一个网络称之为v2,但是按照第四篇论文的划分,BN-Inception称之为v2,这里采用第四篇论文的划分,Inception v2指BN-Inception)&/p&&p&主要是增加了Batch Normalization,之前神经网络很依赖于良好的初始化,并且网络太深会梯度弥散,这两个问题都是因为网络中间的激活的分布不理想,那既然我们想要一个理想的分布,就手动把它转换为理想的分布好了。所以在每一层输出后面加上了归一化变换,减去每个训练batch的每个特征的均值再除以标准差,得到0均值1标准差的输出分布,这样,就可以很好地训练了,梯度也不容易弥散。&/p&&p&&b&Inception v3&/b&:2015,Rethinking the Inception Architecture for Computer Vision&/p&&p&ImageNet Top5错误率:3.5%&/p&&p&卷积进一步分解,5x5用两个3x3卷积替换,7x7用三个3x3卷积替换,一个3x3卷积核可以进一步用1x3的卷积核和3x1的卷积核组合来替换,进一步减少计算量:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-8451d76fda775467baa4de0e48e6439e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1243& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&1243& data-original=&https://pic1.zhimg.com/v2-8451d76fda775467baa4de0e48e6439e_r.jpg&&&/figure&&p&&br&&/p&&p&总体地网络结构如下所示:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-cbfaa3974df_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1426& data-rawheight=&502& class=&origin_image zh-lightbox-thumb& width=&1426& data-original=&https://pic2.zhimg.com/v2-cbfaa3974df_r.jpg&&&/figure&&p&&br&&/p&&p&&b&Inception v4、Inception-ResNet v1和v2&/b&:2016,Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning&/p&&p&ImageNet Top5错误率:3.08%&/p&&p&Inception v1到v3,可以看到很明显的人工设计的痕迹,不同卷积核的和网络结构的安排,很特殊,并不知道为什么要这样安排,实验确定的。作者称由于以前受硬件软件的限制,有太多的历史包袱,而现在有了TensorFlow(论文里怒打一波广告),网络可以按照理想的设计来实现了,于是很规范地设计了一个Inception v4网络,类似于Inception v3,但是没有很多特殊的不一致的设计。&/p&&p&同时,ResNet的成功,也说明了residual connection的有效性,所以为Inception模块引入了residual connection,得到Inception-ResNet v1和Inception-ResNet-v2,前者规模较小,和Inception v3相当,后者规模较大,和Inception v4规模相当。residual结构地Inception模块如下所示:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-21edde3fd333a3342a70_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&533& data-rawheight=&654& class=&origin_image zh-lightbox-thumb& width=&533& data-original=&https://pic4.zhimg.com/v2-21edde3fd333a3342a70_r.jpg&&&/figure&&p&&br&&/p&&h2&ResNet流派&/h2&&p&ResNet流派是另一个主流分支,包括WRN、DenseNet、DPN、ResNeXt以及Xception等。&/p&&p&&b&DenseNet&/b&:2016,Densely Connected Convolutional Networks&/p&&p&DenseNet将residual connection发挥到极致,每一层输出都直连到后面的所有层,可以更好地复用特征,每一层都比较浅,融合了来自前面所有层的所有特征,并且很容易训练。缺点是显存占用更大并且反向传播计算更复杂一点。网络结构如下所示:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-b4fa8bfad176fa77ff10_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&794& data-rawheight=&535& class=&origin_image zh-lightbox-thumb& width=&794& data-original=&https://pic3.zhimg.com/v2-b4fa8bfad176fa77ff10_r.jpg&&&/figure&&p&&br&&/p&&p&&b&ResNeXt&/b&:2017,Aggregated Residual Transformations for Deep Neural Networks&/p&&p&ImageNet Top5错误率:3.03%&/p&&p&Inception借鉴ResNet得到Inception-ResNet,而ResNet借鉴Inception得到了ResNeXt,对于每一个ResNet的每一个基本单元,横向扩展,将输入分为几组,使用相同的变换,进行卷积:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c900bfe4b4fc08d29471a4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&805& data-rawheight=&353& class=&origin_image zh-lightbox-thumb& width=&805& data-original=&https://pic4.zhimg.com/v2-c900bfe4b4fc08d29471a4_r.jpg&&&/figure&&p&&br&&/p&&p&上面左边是ResNet,右边是ResNeXt,通过在通道上对输入进行拆分,进行分组卷积,每个卷积核不用扩展到所有通道,可以得到更多更轻量的卷积核,并且,卷积核之间减少了耦合,用相同的计算量,可以得到更高的精度。&/p&&p&&b&Xception&/b&:2016,Xception: Deep Learning with Depthwise Separable Convolutions&/p&&p&Xception则把分组卷积的思想发挥到了极致,每一个通道单独分为一组。利用了depthwise separable convolution,如下图所示,J个输入通道,每个通道用一个单独的空间卷积核卷积(比如3x3),J个卷积核得到J个输出通道,然后再用K个卷积核对上一步得到的J个输出通道进行1x1的普通卷积,得到K个最终的输出:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-8bc91f4aa78e77119eaa960c93c0d3b0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&830& data-rawheight=&597& class=&origin_image zh-lightbox-thumb& width=&830& data-original=&https://pic4.zhimg.com/v2-8bc91f4aa78e77119eaa960c93c0d3b0_r.jpg&&&/figure&&p&&br&&/p&&p&Xception基于一个假设,水平和竖直方向的空间卷积(比如第一步的3x3卷积)和深度方向的通道卷积(比如第二步的1x1卷积)可以完全独立进行,这样减少了不同操作间的耦合,可以有效利用计算力。实验证明,相同的计算量,精度有明显的提升。(不过现在对于分组卷积的底层支持还不够好,实际速度并没有理论计算的那么好,需要底层库进行更好的支持)&/p&&h2&移动端&/h2&&p&除了主流的ResNet流派和Inception流派不断追求更高的准确率,移动端的应用也是一大方向,比如SqueezeNet、MobileNet v1和v2、ShuffleNet等。&/p&&p&&b&MobileNet v1&/b&:2017,MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications&/p&&p&和Xception类似,通过depthwise separable convolution来减少计算量,设计了一个适用于移动端的,取得性能和效率间很好平衡的一个网络。&/p&&p&&b&MobileNet v2&/b&:2018,Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation&/p&&p&使用了ReLU6(即对ReLU输出的结果进行Clip,使得输出的最大值为6)适配移动设备更好量化,然后提出了一种新的Inverted Residuals and Linear Bottleneck,即ResNet基本结构中间使用了depthwise卷积,一个通道一个卷积核,减少计算量,中间的通道数比两头还多(ResNet像漏斗,MobileNet v2像柳叶),并且全去掉了最后输出的ReLU。具体的基本结构如下图右侧所示:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-065fc4d3f4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1020& data-rawheight=&525& class=&origin_image zh-lightbox-thumb& width=&1020& data-original=&https://pic1.zhimg.com/v2-065fc4d3f4_r.jpg&&&/figure&&p&&br&&/p&&p&&b&ShuffleNet&/b&:2017,ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices&/p&&p&Xception已经做得很好了,但是1x1那里太耗时间了成了计算的瓶颈,那就分组啦较少计算量,但是分组了,组和组之间信息隔离了,那就重排shuffle一下,强行让信息流动。具体的网络结构如上图左侧所示。channel shuffle就是对通道进行重排,将每组卷积的输出分配到下一次卷积的不同的组去:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a2e2f877ebd4ff48b2078d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&784& data-rawheight=&291& class=&origin_image zh-lightbox-thumb& width=&784& data-original=&https://pic4.zhimg.com/v2-a2e2f877ebd4ff48b2078d_r.jpg&&&/figure&&p&&br&&/p&&p&上图的a是没有shuffle,效果很差,b和c则是等价的有shuffle的。ShuffleNet可以达到和AlexNet相同的精度,并且实际速度快13倍(理论上快18倍)。&/p&&h2&SENet&/h2&&p&除了上面介绍的久经考验的网络以外,还有各种各样的新的网络,比如NASNet、SENet、MSDNet等等。其中,SENet的Squeeze-Excitation模块在普通的卷积(单层卷积或复合卷积)由输入X得到输出U以后,对U的每个通道进行全局平均池化得到通道描述子(Squeeze),再利用两层FC得到每个通道的权重值,对U按通道进行重新加权得到最终输出(Excitation),这个过程称之为feature recalibration,通过引入attention重新加权,可以得到抑制无效特征,提升有效特征的权重,并很容易地和现有网络结合,提升现有网络性能,而计算量不会增加太多。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-838e07cc25ad7daa3d6c61a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&785& data-rawheight=&174& class=&origin_image zh-lightbox-thumb& width=&785& data-original=&https://pic2.zhimg.com/v2-838e07cc25ad7daa3d6c61a_r.jpg&&&/figure&&p&&br&&/p&&p&SE module是一个很通用的模块,可以很好地和现有网络集成,提升现有效果。&/p&&h2&总结&/h2&&p&最后,一个ImageNet上的Top5准确率总结表如下图,可以看到,ImageNet上的分类错误率逐年降低,并且已经低于人类的错误率(5.1%)。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-79d818eda576c5d74145_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1030& data-rawheight=&554& class=&origin_image zh-lightbox-thumb& width=&1030& data-original=&https://pic4.zhimg.com/v2-79d818eda576c5d74145_r.jpg&&&/figure&&p&&br&&/p&&p&有这么多网络,具体的使用中到底选哪个呢?个人的使用参考建议是:&/p&&ul&&li&普通网络:推荐ResNet-50或Xception或Inception v3&/li&&li&大网络高精度:推荐ResNeXt-101(64x4d)或Inception-ResNet v2或DPN&/li&&li&移动端小网络:推荐ShuffleNet或MobileNet v2&/li&&/ul&&p&还可以额外添加SENet模块到现有网络,基本都能进一步提高精度,计算量略有增加。另外也可以尝试一下NASNet。&/p&&p&PS:各个网络的具体介绍可以参见知乎专栏系列文章&a href=&https://zhuanlan.zhihu.com/xfanplus& class=&internal&&Deep into CV/DL&/a&。&/p&
从1998年经典的LeNet,到2012年历史性的AlexNet,之后深度学习进入了蓬勃发展阶段,百花齐放,大放异彩,出现了各式各样的不同网络,包括LeNet、AlexNet、ZFNet、VGG、NiN、Inception v1到v4、Inception-ResNet、ResNet、WRN、FractalNet、Stochastic Depth…
&p&可以说,看懂了龙芯和兆芯之争,对中国半导体产业面临的困难就有基本的了解。因为做桌面CPU是最难的。&/p&&p&&b&首先讲兆芯。&/b&这家公司是2013年上海国资委与台湾威盛电子(VIA)合资的,上海国资委持股约80%,目前据说已经拿到了56亿国家经费。VIA长期号称是仅次于Intel和AMD的第三大厂商,可它的市场占有率小到可以忽略。感谢FTC(美国联邦贸易委员会)支持自由竞争,反垄断的大棒强制Intel授权给VIA,最新一次延长到2018年,所以VIA是可以跑windows系统的。&/p&&p&指令集,说白了就是计算机芯片的底层语言,里面定义了加减乘除等等各类算法,再往下就是电信号、与非门。具体逻辑层次是这样的:指令集→微架构→CPU→操作系统。指令集可以分为精简指令集(RISC)和复杂指令集(CISC)。举例来说,只定义八卦、然后三生万物,这叫精简;如果定义了log、sin等等一系列数学运算符,这叫复杂。精简指令集在特定应用场景上比较高效,如嵌入式和移动设备;复杂指令集在桌面电脑上比较高效。&/p&&p&不同指令集上运行的程序,相当于汉字跟西夏文的区别,其实都是一样的内容,但就是需要编译。可想而知,商业公司不喜欢往弱势的指令集迁移自己的程序,因此这个领域很容易出现马太效应。更妙的是,指令集可以不断增加指令。因此,尽管专利保护期有限,但是优势指令集可以不断增加新指令,操作系统和应用程序会相应地开发新功能,从而形成新的依赖。旧的指令集,无法运行依赖新增指令的操作系统,或功能受限。&/p&&p&现在世界上还活着的商用指令集只有4种,分别是X86、ARM、POWER(只用在IBM的服务器上,无关这里的讨论)、MIPS,其中X86是Intel和AMD两家技术相互授权的合体,与windows系统并称Wintel霸权。要用windows,就必须X86。ARM和MIPS都是精简指令集,其中ARM现在制霸移动设备,MIPS早先是学院派创造的,比较开放、到处授权、而且不限制各自新增指令另搞一套,可想而知,就是军阀割据,然后就被淘汰了。但是MIPS从技术上来说,在当时是领先的,龙芯在2009年花了不到500万美元,永久买断了MIPS的授权,发展出了自己的指令集,叫LoongISA,并且增加了很多指令,实际已经趋近于复杂指令集。在这些指令集上面,只能运行Linux系统。&/p&&p&这么听起来,抱上VIA大腿的兆芯,岂不是国产CPU当然之选?能跟Intel决战紫禁之巅?&/p&&p&&b&机会是有的,但没那么简单。我非常不看好兆芯。&/b&&/p&&p&①VIA拿到的X86授权只到2018年。也就是2018年以后的新指令就不支持了。也就是说,兆芯的windows优势只能维持一段时间。微软跟英特尔是穿一条裤子的,他们肯定会不断升级。兆芯现在卖的电脑,无非是windows的政府和个人用户在联想、惠普之外多了新的选择,还是一样的生态依赖。再过几年Intel若增加新指令支持一下AI、AR,windows跟着发布新版本,兆芯的用户又流失了。毕竟现在2018年谁还愿意用XP、Vista?除非兆芯能及时做到不容忽视的市场地位,以至于微软愿意兼容兆芯自己添加的AI、AR指令集。可现在就是2018年,兆芯成立5年了,市场上有消费者能买到的兆芯电脑吗?&/p&&p&②VIA是台湾的。台湾人太变态了。在美国工作的台湾人又更加变态。半导体产业大陆跟台湾合资的企业很多,都出现非常复杂的抱团、派系、内斗情况。中芯国际也是内部清洗过,为此耽误了时间。台湾人对大陆人抱有非常深重的集体敌意,不合作、怕被取代,尽可能延长自己作威作福的短期利益。&/p&&p&③小学生抄硕士毕业论文学不会高等数学。芯片设计有个非常特殊的情况,不像软件,就算拿到源码,也是两眼一抹黑,根本看不懂,更不要说排除后门、保密了。因为CPU里面的结构超级复杂,软件的源代码那还是人类可以读的标准化形式语言,而CPU纯粹是画图,画啊画,像是把全世界的3维城市地图缩微在里面,你根本不知道哪条路通往哪里。举个例子,哪怕是Intel亲自出马,用“闲着蛋疼”指令集重新设计CPU,它也得先设计一个譬如说主频800MHz的初始版,先点亮屏幕、开机进系统;然后再不断地调整、优化,做到2G主频,做到睿频,再做到多核超线程,与此同时不断地降低功耗。小学生,终究还是要从头学起的,不知兆芯什么时候能毕业?&/p&&p&④综上,兆芯有它的优势和机会。但这个时间窗口是短暂的。考虑到现在微软已经分拆windows部门、转向云计算,win10也被认为是一个长期更新版本,未来可能不太会出现非常重大的X86指令集更新,而且很多用户长期停留在win7,很多大型软件也不太需要指令集花里胡哨的更新,这个时间窗口也许还能延长。目前来看,它是国产CPU里面外部优势最大的,国家往里面大把砸钱,有其道理。今年初,兆芯放话2020年追平AMD。可如果做不到,就相当于忽悠国家抱着希望继续依赖windows生态,成了历史罪人。&/p&&p&&b&⑤最后再讨论非常复杂的知识产权问题。&/b&根据FTC与Intel 2010年的和解文件:The extension of the Via license agreement, coupled with the modifications to the change-of-control provisions in Section III.B, open the door to a potential joint venture or acquisition of Via and its x86 license by a strong and well financed entrant to the x86 markets. 在这里提到为VIA与第三方合资或收购“创造了条件”。但在正式的条款里(FTC Docket No. 9341: Section III.B),却并没有完全允许selling off their license or sub-licensing ,而只是说发生控制权变更后,Intel和VIA的收购方要“友好协商”,1年内不得互相诉讼;对于要协商出什么结果,FTC没有规定。要知道,这方面条款本就是专门用来防止新玩家入场。那么,上海国资持股兆芯80%,但是VIA又继续保持独立的法律实体地位,这算不算“控制权变动”呢?兆芯的产品,能算作是VIA的产品吗?我可以想到一条可能的绕过限制的方案:兆芯拿着VIA的源码,在大陆开发出新产品,然后拿这个源码给VIA,VIA假装兆芯是它的外包开发商,名义上拥有新产品的知识产权,然后再把新产品授权给兆芯出售。&/p&&p&同样的情况也可以在AMD 2016年与海光的x86合作上看到。AMD很诚实,它先成立一个在华皮包公司,持股51%,然后把自己的cpu核授权给皮包公司,而非把x86指令集转授权;这个皮包公司实际是海光在管理。这样的话,海光实际是在n-1代AMD的核上搞加工,而不是敞开了在x86的大道上发展;而且知识产权法律上是属于AMD的。就算搞了这样的小聪明,AMD仍然限制海光的产品只能在中国销售,这是吃准了Intel在中国不可能告赢;但这样的技术路线,一方面是永远依附在AMD身上,一方面是把中国以外的市场永久地放弃了。&/p&&p&AMD与Intel之间的互相永久授权,是在进军64位的技术跃迁中,AMD拔得头筹取得领先,技术命名为“AMD64”,凭此跟对方交换授权。现在双方实际互相依赖。因此,尽管上述FTC裁决中,也规定AMD发生控制权变更后,双方要“友好协商”,一般认为,Intel和新玩家还是会达成原有条款。但仅仅是这一层疑虑在,就导致很少有人考虑收购AMD。天知道会怎样!毕竟Intel还是保留了自家的64位技术,说不定它又重新发明轮子,威慑就失效了;现在这份协议是永久互相授权,再谈一次未必就有这么好条件了。&/p&&p&所以,兆芯的根基是非常不牢靠的。毕竟VIA现在对Intel是0威慑。而且它所得到的一切都是FTC的裁决给的,而FTC的主席是美国总统任命的。&/p&&p&也就是说,我在这里写了这么一大段关于兆芯的内容,而兆芯的生死也是操之在彼,跟中兴一个卵样。&/p&&p&&b&那么,再来看龙芯。&/b&&/p&&p&我非常尊重龙芯,这家公司几乎是由胡伟武一个人定义了灵魂。我希望龙芯成功,尽管胡博士也有很多缺点。网上毁誉参半,捧的人当它是民族之光,喷的人骂的都是不堪入目的污言秽语。&/p&&p&我就想到哪说到哪吧。&/p&&p&①500万美元&/p&&p&小白总喷龙芯也是买的技术,其实它只用了不到500万美刀就永久买断了MIPS指令集授权。而且指令集授权并不是什么技术,我前面已经说了,只是相当于定义数学运算符而已。CPU的微结构怎么设计,电信号到底怎么执行命令,这才叫真正的技术。&/p&&p&这跟华为海思拿ARM授权完全不是一回事。首先,海思是直接拿ARM的CPU核来改;其次,每次ARM升级技术,海思还得重新买;最后,海思是手机SOC,龙芯是桌面的通用CPU,将两者相比较是关公战秦琼。&/p&&p&②拿了国家多少钱,是不是骗经费,是不是靠党政军养着?&/p&&p&据网友统计,从2002年起,一共拿了7个亿。这是什么概念呢?制造业领域,打版、开模可能要几十万到上百万,做芯片,设计完了、输出版图是没用的,一定要去流片才知道怎么样,流片一次几千万。龙芯这种量级的公司,“量产”了也没多少量,去找人家流片指不定还得求着人家排期。&/p&&p&实际上,龙芯中科,就是中科院计算所的校办企业。2002年,胡伟武就是在中科院领受了研发CPU的任务。龙芯,特别是前期的龙芯,等于是就是计算所的教研室,胡伟武等于是博导。胡老板当时大量使用学生,包括现在也还在计算所办公,不过现在会付租金等,用学生也会发劳务。这也使得龙芯前期开发比较慢,都是学生嘛,还在学呀!&/p&&p&那么龙芯算不算血汗工厂呢?不能算的。计算所实际上就是黄埔军校,龙芯是非常好的实习单位,胡伟武是业内第一流的科学家。现在大热的寒武纪人工智能芯片,是出身中科大少年班、一路读到博士的陈天石、陈云霁两兄弟创办的,这两人CV上的论文,全都是英文期刊,硕博期间与胡伟武合作的论文都有一二十篇,并且都参与了龙芯的工作。华为海思、兆芯里面也很多出自计算所的学生,虽然未必都在龙芯打过杂,但学习上受惠于龙芯的探索是肯定的。国内最新的计算机体系结构教材,就是胡伟武、陈云霁2011年合作编写的。水木清华的CSArch(计算机体系结构)版块上,尽管不是每个人都看好龙芯的前景,但无人不尊重胡伟武团队,不感佩他们的奉献精神。&/p&&p&很多计算所的老师,在龙芯发挥余热,是不拿钱的。&/p&&p&有意思的是,除了兆芯的人,由于利益冲突,理所当然地喷龙芯。而其他喷龙芯的所谓“业内人士”,总是以核心的CSArch往外,成同心圆结构扩散,越是外行喷得越凶。这规律很明显,喷自己业界的第一流专家,只能自暴其丑。&/p&&p&龙芯拿的这7个亿,换陈氏两兄弟都够本了。这样还对不起国家吗?&/p&&p&再说了,龙芯的芯片几年前已经在宇航和工控领域站稳了一席之地,早就自负盈亏,2017年营业收入1.5亿,利润2000万。宇航、抗辐照芯片就不说了,龙芯是国内唯一能做的,国家并没有禁止其他企业去开发,牛逼你去呀?工控的应用市场大多是民用的,搞智能电表、智能门锁、数控机床之类的,都是充分竞争的市场,能卖出去是市场的选择。至于党政军领域,早年间确实龙芯独大,但后来各种“技术引进”的公司都掌握了“自主技术”,这块现在竞争也厉害,龙芯也就分点粥喝,毕竟公务员大爷们都不习惯用Linux系统,没办法炒股呀!&/p&&p&③毛思想&/p&&p&这其实是最惹眼的,毕竟网上恨主席的很多。胡伟武到哪演讲都穿中山装,崇拜主席、雷锋、邓小平。但他讲毛思想,只是运用“实践是检验真理的唯一标准”、“矛盾是对立统一的”这样的“哲学”来思考,并不是讲阶级斗争。那套唯物辩证法,虽然土气、显得僵化,但是对于科学家来说是足够自洽了。&/p&&p&其实胡伟武的文章,删掉那些像思想政治考试里特意“踩点拿分”的“理论应用”部分,完全一样说得通。每个人有每个人思维的方式,何必政治化呢?任正非讲话喜欢用军事术语,集团冲锋啊、开炮啊等等,又怎么样呢?我只以能力和成败论英雄。&/p&&p&至于说他政治投机,这种就太不懂事了。组织对毛派什么态度,大家不知道吗?邓小平说最重要的是要防哪边?之后到现在都三代了,真要投机得赶时髦的。&/p&&p&④心比天高&/p&&p&胡伟武还有一个特点,他心比天高,想的就是做最难的,战胜最顶级的对手。譬如龙芯2F,现在贡献最多的营收,但胡博士每次拿到外边讲,总是提用在北斗上,授权微架构给军队做雷达,等等。在他眼中,为国家做的这些才是最光荣的;为市场做的,走dirty cheap路线的,属于南泥湾。&/p&&p&龙芯最困难的时候,员工到了馒头咸菜的地步。我想这也是胡崇毛的原因,不崇毛他们坚持不到今天。龙芯到今天17岁了,胡伟武对外讲,争取做到30年的时候追平世界领先。30年时间,这是一整代科学家把职业生涯完全奉献出来。&/p&&p&⑤企业文化&/p&&p&龙芯很特别,带有学院的特色或者说限制。节奏比较慢,加班较少,很穷。优秀员工奖只有几百元;搞大学生龙芯杯等,申请设备要填写一堆表格,只能优惠一两千、不能免费送。&/p&&p&很早就搞了员工持股,尽管没有利润可以分红。有民企和私募投资,最大的但都是不入流的合作方,到现在也没宣传过什么pre-A、A轮、B轮。最大的外部股东、合作伙伴叫江苏梦兰,是做纺织的,创始人是三八红旗手、劳动模范,基本相当于老干妈的党员版。十几年来,这家公司就一边卖床品,一边推销龙芯。&/p&&p&发布会的PPT简直是负美化,一看就知道是用Linux上金山WPS敲的。&/p&&p&人家Intel命名微结构,叫Sandy Bridge、Haswell、Skylake,听起来就高大上;龙芯却命名为GS264、GS464、GS464E。啥意思呢?GS是英文Godson(上帝之子)的缩写,看起来很乡村非主流对不对?其实它来自中文“狗剩”的谐音,一开始胡伟武就觉得取个贱名好养活。GS264,就是“狗剩2号64位”。&/p&&p&简单讲,就是村炮。&/p&&p&⑥技术到底怎么样?&/p&&p&前面只是提了一堆背景信息。大家最看重的还是东西到底做得怎么样。如果能脚踢AMD,拳打Intel,最凶恶的喷子也得跪下唱征服。但是,可惜,还没有这么厉害。&/p&&p&我非常推荐大家去读胡伟武自己写的一系列介绍历程和反思得失的文章。他不仅从头至尾介绍龙芯的每一个技术转折,而且会介绍面对何种处境、出于什么考虑、采用了什么方案,之后反思发现什么问题、又采取什么改进。早年的文章请搜索“中国龙芯CPU的调查与研究 弯曲评论”。但&b&推荐阅读集大成的万字长文《我们的龙芯3号——致龙芯15周年》&/b&。&/p&&p&龙芯最大的失误,在于00年代初,错误地选择了多核路线、忽视单核性能。但个人电脑的程序运行,大多只用一个核心,用一个核心完成速度最快、体验最好,Intel不但拼命做高主频,后来还采用睿频技术。大家今天也可以看到联发科搞的手机芯片奇技淫巧,8核、16核,然并卵,打开APP就是卡。&/p&&p&简单说吧,兆芯借来的VIA马甲,最近一次用在个人电脑上,是2009年的低端笔记本,离现在还不太远,跑Win7是没问题的,甚至还能打LOL。差不多相当于当时的Intel 赛扬系列。&/p&&p&龙芯1号,2002年第一次点亮屏幕,还是实验室状态,266MHz,性能相当于1995年推出的奔腾Pro。&/p&&p&龙芯2号,2003年从0.13微米制程开始,由于多核修正主义错误路线的干扰,单核性能被甩开,但在2006年做出了龙芯2E,1GHz、90纳米,性能相当于2001年左右的奔腾3、奔腾4(180~130纳米)。奔腾4后来狂飙突进,制程做到65纳米,主频搞到3.4GHz,将竞争对手远远甩开。之后就是龙芯2F,800MHz,这时候尝试做过笔记本,叫做逸珑迷你笔记本,塑料外壳,大概相当于小霸王学习本;还做过教育一体机,用在中学电脑机房,没多久就被淘汰了。后来龙芯2F就去做工控了,因为当时市场上缺少廉价的通用芯片,虽然没做成桌面市场,但好歹是能够赚钱养活自己了。&/p&&p&龙芯3号,这段时期进行了重要的微架构更新,一开始更新到GS464,2009年推出龙芯3A 1000,65纳米,1GHz。又搞了逸珑迷你笔记本,这回是金属外壳,还是没人买。2015年更新到GS464E,推出龙芯3A 2000,这是一次重大升级,按龙芯说法是相当于2012年Intel的 Ivy Bridge架构。主频仍然是1GHz,跟Intel不能比,但龙芯的意思是若把Intel降频到1G,只比较微架构,两者差距不大了;而主频上不去,一方面是代工厂不行,龙芯只有两个选择,要么中芯国际(SMIC)要么意法半导体(ST),他们工艺都落后,良率也不行,同样制程出来的产品比别家差;另一方面是龙芯也需要跟代工厂交流,根据每家的工艺情况优化设计,可龙芯量小、流片的钱也少、代工厂热情不高,而且还在两个厂来回流浪,其配合情况可想而知。2A 2000是在中芯国际用40纳米制程做的。&/p&&p&2016年,又是重要的节点。龙芯基本上稳固了与合作时间最长的意法半导体的关系,ST工艺稍好于SMIC。用28纳米技术推出3A 3000,主频1.5GHz。这是里程碑的成就。尽管一直都还没有达到奔腾4系列后期型号的水平,代差从最早的7年被拉到超过15年,但是龙芯到这一步已经追平眼前最主要的竞争对手,也就是兆芯它爹VIA 2010年冬眠时候的水平。也就是相当于2009年的赛扬。&/p&&p&还记得前面写的吗?还活着的4大商用指令集,X86、ARM、POWER、MIPS,X86的老三就是VIA(投胎了兆芯),POWER不做个人电脑,ARM还保持精简指令集的状态,windows特别给它做了适配,但是至今还是扑街状态。MIPS阵营扛大旗的就是龙芯了。这么一算,哎呦,并列世界第三啊。世界第三啊朋友们。&/p&&p&龙芯3A3000 搭载深度Deepin系统,基本堪用了。现在可以用FireFox、WPS、VirtualBox、Skype、Telegram、Kodi、网易云音乐、搜狗拼音输入法等,总之一个日常使用Mac的码农和文字工作者,就完全可以迁移。Linux占用资源较少,因此较低配置也足够流畅。深度团队也是我非常敬佩的国产操作系统民营开发商,在深度应用商店上可以看到他们努力适配的许多应用,以及自己动手开发的原生系统应用,他们也向开源社区回馈自己的代码。这里向大家推荐这款最适合国人使用的Linux系统。电脑最终还是为了用,没必要折腾。中标麒麟那是政府保密需要,Cent OS那还是跑服务器比较好,轻量级的那是复活老古董当下载机专用。人还是不要让工具折腾了。&/p&&p&另外,龙芯自己对开源社区也是非常友好的。它依赖Linux系统,这也是当然之义。&/p&&p&⑦未来的技术路线图&/p&&p&兆芯2017年12月发布会宣布,下一步是3GHz 主频、16纳米制程。该公司看了VIA5年的代码,型号数字倒是每年进一位,都是原地踏步,参数几乎完全一致,外面的市场上也完全见不到实物。但这次发布会特别强调代码自有率100%,研发工作均由国内工作完成,基于兆芯5000的个人电脑(我猜就是2009年的产品终于洗完了代码,升级一下固态硬盘、DDR4)2018年将会上市。如果代码已经洗干净、消化了,那2020年确实有可能取得明显进展。&/p&&p&龙芯2018年1月更新的白皮书V2.9版本,其中技术路线图显示下一步将以3A4000为Tick,以3A5000为Tock。3A4000采用28nmFDSOI工艺,主频达到2GHz,预计2018年底流片。2020年更新微结构版本到GS464V,推出3A5000,16nm,2.5GHz。&/p&&p&可以看到这对冤家至少现在对外面放风咬得很紧。但我个人认为龙芯更有可能兑现。一直认真做事的人,是会留下脚印的。&/p&
可以说,看懂了龙芯和兆芯之争,对中国半导体产业面临的困难就有基本的了解。因为做桌面CPU是最难的。首先讲兆芯。这家公司是2013年上海国资委与台湾威盛电子(VIA)合资的,上海国资委持股约80%,目前据说已经拿到了56亿国家经费。VIA长期号称是仅次于Inte…
&figure&&img src=&https://pic2.zhimg.com/v2-cf4d5aed96_b.jpg& data-rawwidth=&950& data-rawheight=&714& class=&origin_image zh-lightbox-thumb& width=&950& data-original=&https://pic2.zhimg.com/v2-cf4d5aed96_r.jpg&&&/figure&&blockquote&夏乙 问耕 发自 凹非寺&br&量子位 出品 | 公众号 QbitAI&/blockquote&&p&谁能想到,NIPS这种顶会都能风波乍起。&/p&&p&Ali Rahimi(阿里·拉希米),因为2007年发表的一篇论文,获得今年的“Test of Time”最具时间价值大奖。当然,阿里作为最佳论文作者理所应当的登台演讲。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-60b94f3d839d0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&360& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-60b94f3d839d0_r.jpg&&&/figure&&p&&br&&/p&&p&起初,这个演讲主要介绍之前的研究成果。阿里说从很多方面来讲,我们的状况都比10年前好多了。在技术上,取得了很大的进步,街上跑着自动驾驶汽车,人工智能可以干很多事情……基于机器学习技术,能产生出几十亿美元的公司。&/p&&p&后来,火药味逐渐浓烈起来,阿里朝着整个深度学习界开了一枪,他说:&/p&&p&但某些方面更糟糕了。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-2499ebafb46aff6767d29d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&477& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-2499ebafb46aff6767d29d_r.jpg&&&/figure&&p&&br&&/p&&p&空气中飘荡着一种自鸣得意的感觉,我们会说“人工智能是新的电力”。(安德鲁老师最爱的说法)&/p&&p&我想换个比方:机器学习已经成了炼金术。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-b184aefcb2ad0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&481& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-b184aefcb2ad0_r.jpg&&&/figure&&p&&br&&/p&&p&炼金术挺好的,炼金术没毛病,它自有它的地位,炼金术“管用”。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-3bddc1a099_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&479& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-3bddc1a099_r.jpg&&&/figure&&p&&br&&/p&&p&炼金术带来了冶金、纺织、现代玻璃制造工艺、医疗等等领域的发明。但同时,炼金术还相信水蛭能治病,廉价金属能变成金子。&/p&&p&从当年的炼金术到现在的物理、化学,到我们现在对宇宙的认识,科学家们要消解掉2000年的炼金术理论。&/p&&p&如果你要做个照片分享系统,用“炼金术”就行。但我们现在所做的远远超出了这个范围,我们所做的系统用在医疗领域,用在社交媒体上,甚至能影响大选。&/p&&p&我希望我所生活的世界里,这些系统都建立在严格、周密、可验证的知识之上,而不是基于“炼金术”。&/p&&p&我有点怀念十年前NIPS上质疑各种想法够不够严谨的“学术警察”,希望他们回来。&/p&&p&(不关心技术细节的可以跳过下面的例子)&/p&&p&举个例子,不知道你有没有经历过这样的情况:从零开始搭建、训练了一个神经网络,然后发现它不管用的时候,总觉得是自己的错。这种状况我大约每三个月就要经历一次,我想说,这不是你的错,是梯度下降的错。&/p&&p&比如说这个最简单的深度神经网络,两层线性网络:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-410afa579e9e30c7fabe7cc609bb6f87_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-410afa579e9e30c7fabe7cc609bb6f87_r.jpg&&&/figure&&p&&br&&/p&&p&左边是我的模型,右边是损失函数,底下是不同参数设置下梯度下降的过程。有时候loss一开始下降得很快,后来就不动了。你可能会觉得遇到了局部最小值,或者鞍点,loss和0相差还很远。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-aca631d1d4c65e0de41ee4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-aca631d1d4c65e0de41ee4_r.jpg&&&/figure&&p&&br&&/p&&p&换一个下降的方向,很快就能优化到最低。&/p&&p&你可能会觉得这个例子不自然,或者说梯度下降在更大的神经网络上表现得不错,我的回答是:第一,很多人都被梯度下降坑过;第二,我们把自己的工具用在简单的例子上,从中学习知识,然后应用到更复杂的场景,这正符合我们建立知识的方式。&/p&&p&梯度下降带来的痛苦是真实存在的。&/p&&p&上个月,我的朋友Boris给我发了封邮件:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-de38392ccb7efe428ad28f8ff1e45e39_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&284& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-de38392ccb7efe428ad28f8ff1e45e39_r.jpg&&&/figure&&p&&br&&/p&&blockquote&周五,另一个组有人改动了TensorFlow内部的默认舍入模式,从“舍到0”改成了“四舍五入到偶数”。&br&我们的训练就崩溃了,误差从<25%飙升到了~99.97%。&/blockquote&&p&这样的邮件我收到过不少,网上也有人在讨论类似的问题。&/p&&p&会发生这种情况,是因为我们把脆弱的优化技巧用到了我们不理解的loss上, 我们的解决方案在本来就已经很神秘的技术上增加了更多神秘性。&/p&&p&Batchnorm是加速梯度下降的一种方法,把Batchnorm插入到深度神经网络的层中,梯度下降的速度就会更快。&/p&&p&我不排斥使用一些自己不懂的技术,比如说我是坐飞机来的,并不完全清楚它的工作原理,但知道有整个航空界都在研究这项技术就很安心了。&/p&&p&而对于Batchnorm的工作原理,我们只知道它的功能是“reducing internal covariate shift”。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-a3c8c8ee22c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&136& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-a3c8c8ee22c_r.jpg&&&/figure&&p&&br&&/p&&p&可是为什么这样就能加速梯度下降了?有没有相关的理论或者实验?你甚至都不清楚internal covariate shift是什么,就不想要一个定义吗?&/p&&p&Batchnorm已经成了构建深度神经网络的一个基础工具,但我们对它几乎一无所知。&/p&&p&想想过去一年里你为了刷竞赛榜单而做的实验、尝试的新技术;再想想过去一年里你为了解释奇怪现象、寻找其根源而做的努力。前者,我们做得很多,后者,我们应该再多做一些。简单的实验和理论是帮我们理解复杂系统的基础。&/p&&p&我们还有一件事可以做。现在,所有商用硬件上运行的成熟计算引擎都是梯度下降的变体,处理着数百亿的变量。&/p&&p&想象一下,如果我们有能在标准商用硬件上运行,处理数百亿变量线性解算器或者矩阵分解引擎,想象一下这样我们能做出多好的优化算法,用多好的模型来做实验,当然,这在数学上和系统上都很难,但这正是我们要解决的问题。&/p&&p&我对这个圈子有真挚的爱,这也是为什么我会站在这儿,号召大家更严格精确,别那么像炼金术师。&/p&&p&希望我们可以共同努力,将机器学习从“炼金术”变成“电力”。&/p&&h2&LeCun:实名反对&/h2&&p&一石激起千层浪,阿里的演讲引发了热烈的讨论。&/p&&p&深度学习专家、前谷歌大脑成员Denny Britz说:“对很多人来说,这是NIPS的高光时刻。深度学习就像炼金术,我们不知道发生了什么。我们需要在这个领域更加严谨。如果你知道背后没有可靠的科学理论,你会坐上飞机么?”&/p&&p&当然也有人立刻抛出不同意见。比如号称“三巨头”之一的Yann LeCun。他在Facebook上发表了一篇“长篇大论”进行了阐释。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2ffddc3d8b2b8b9d94cb772cec26c766_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&341& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-2ffddc3d8b2b8b9d94cb772cec26c766_r.jpg&&&/figure&&p&&br&&/p&&p&原文概要如下:&/p&&p&阿里发表了一个有趣的演讲,但我压根不同意他说的话。他的核心思想是说:机器学习(ML)现在的实践,类似于“炼金术”(他的原话)。&/p&&p&这是种侮辱,是的。但是不要担心:他是错的。&/p&&p&阿里抱怨目前ML使用的许多方法,缺乏(理论上)的理解,尤其是在深度学习领域。理解是好事,这也是NIPS群体中很多人追求的目标。&/p&&p&但另一个更重要的目标是发明新的方法、新的技术,以及新的技巧(tricks)。&/p&&p&翻看科学技术发展的历史,工程实践总是先于理论理解出现:透镜和望远镜先于光学理论,蒸汽机先于热动力学,飞机先于空气动力学,无线电和数据通信先于信息理论,计算机先于计算机科学。&/p&&p&因此只是因为目前理论工具还没赶上实践,就批评整个ML群体(还是个相当成功的群体)在搞“炼金术”,这是一个非常危险的行为。&/p&&p&为什么说危险?因为正是这种态度,曾让ML群体抛弃神经网络超过10年,尽管有充分的证据表明他们在很多情况下效果很好。具有非凸损失函数的神经网络不能保证收敛。所以人们连婴儿带洗澡水一起泼掉了。&/p&&p&只是因为可以进行理论研究就固守一套方法,而且还忽视另一套从经验上来说更好的方法,仅仅是因为还没有从理论上理解它?&/p&&p&是的,我们需要更好的理解我们所用的方法。但是,正确的态度应该是尝试去解决问题,而不是因为还没解决就跑去羞辱整个群体。&/p&&p&致阿里:你每天也在用这些方法,如果你对如何理解他们不满意,请动手研究深度学习的理论,而不是抱怨其他人没做,更不是建议NIPS世界只用“理论正确”的方法。这是错的。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-9aa73a4f9b1b134e41d0cff_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&260& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-9aa73a4f9b1b134e41d0cff_r.jpg&&&/figure&&p&&br&&/p&&p&&b&阿里随后跟帖回复:&/b&&/p&&p&Yann,感谢你深思熟虑的反馈。你最后的让我进行理论研究的建议,正是Moritz Hardt一年前曾对我说的话。只是一小群人很难取得进步,老实说,我被这个任务的规模压得喘不过气来。这次的演讲也是寻求更多人的帮助。&/p&&p&我呼吁简单的实验和简单的定力,以便我们都可以毫无困惑的传达见解。你可能已经非常擅长建立深度模型,在这方面你的经验可能比几乎任何人都多。但是想象一下新手会有怎样的困惑,一切看起来都像魔术。大家谈论的都是整个模型如何工作,而不是每一个小部分在干什么。&/p&&p&我认同炼金术的方法很重要。这让我们加速向前,解决了眼前的问题。我对那些能迅速建立起直觉以及可工作系统的人怀有最深的敬意。你和我在Google的许多同事都有这样令人印象深刻的技能,但你们只是少数。&/p&&p&我呼吁你们不但授人以鱼,而且还授人以渔,让大家都能达到你的生产力水平。我所期望的“严谨”是:简单的实验,简单的定理。&/p&&p&&b&LeCun再回复:&/b&&/p&&p&简单和通用理论很好。&/p&&p&热力学的原则,让我们免于浪费时间去寻找永动机。在ML领域我们已经有这样的理论,适用于所有的学习机器,包括神经网络。&/p&&p&但是很有可能不会有专注于神经网络的“简单”定理,原因类似于我们没有纳维-斯托克斯方程或者三体问题的解析解。&/p&&h2&背景交代&/h2&&p&Ali Rahimi,去年5月加入Google,目前担任Member of Technical Staff(这个职位类似于主任工程师)。年期间,他供职于英特尔担任研究员。&/p&&p&这次被NIPS 2017评为最佳时间检验奖的论文《Random Features for Large-Scale Kernel Machines》,就是他在英特尔期间发表的。&/p&&p&1997年,阿里在UC Berkeley获得学士学位,随后在MIT获得硕士和博士学位。&/p&&p&如果你对他感兴趣,可以看看他的个人主页。在欣赏了他的女友、兄弟和女朋友们的照片后,量子位感觉这也是一个“逗逼型”科学家。&/p&&p&主页地址:&a href=&http://link.zhihu.com/?target=https%3A//keysduplicated.com/%7Eali/Personal.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&keysduplicated.com/~ali&/span&&span class=&invisible&&/Personal.html&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-9fca1d63ec5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&767& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-9fca1d63ec5_r.jpg&&&/figure&&p&&br&&/p&&p&炼金术又是啥?&/p&&p&根据维基和百度百科,炼金术(Alchemy)的目标,是想把“贱金属”炼制成“贵金属”,比方把铅变成黄金。(当然还有炼丹,想造出长生不老药)。包括牛顿也曾研究过这门技术。不过现代化学证明,这种方法是行不通的。&/p&&h2&OMT&/h2&&p&以上,就是这次NIPS大会上关于真理标准的大讨论。&/p&&p&最后推荐一款应景的T恤,就是下面这款啦&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-878dfa03ba093e278f5e1d76d9f3de5b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&318& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-878dfa03ba093e278f5e1d76d9f3de5b_r.jpg&&&/figure&&p&&br&&/p&&p&在国外的服装定制平台Teespring有售,如果你对这件T恤感兴趣,而且熟悉海外购物流程,在量子位微信账号(QbitAI)回复:“&b&炼&/b&”一个字,就能获得购买地址。&/p&&p&—完—&/p&&p&欢迎大家关注我们的专栏:&a href=&https://zhuanlan.zhihu.com/qbitai& class=&internal&&量子位 - 知乎专栏&/a&&/p&&p&诚挚招聘&/p&&p&量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。&/p&&p&&a href=&https://zhuanlan.zhihu.com/qbitai& class=&internal&&量子位 QbitAI&/a& · 头条号签约作者&/p&&p&?'?' ? 追踪AI技术和产品新动态&/p&
夏乙 问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI谁能想到,NIPS这种顶会都能风波乍起。Ali Rahimi(阿里·拉希米),因为2007年发表的一篇论文,获得今年的“Test of Time”最具时间价值大奖。当然,阿里作为最佳论文作者理所应当的登台演讲。 起初,这…
&figure&&img src=&https://pic1.zhimg.com/v2-24fdcb96b44dccfd61909_b.jpg& data-rawwidth=&1453& data-rawheight=&958& class=&origin_image zh-lightbox-thumb& width=&1453& data-original=&https://pic1.zhimg.com/v2-24fdcb96b44dccfd61909_r.jpg&&&/figure&&p&2017 年 12 月,DeepMind 发表了论文 &a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm&/a&,宣称他们开发的新人工智能 AlphaZero 通过 4 小时自我对弈,棋力超过 &a href=&https://link.zhihu.com/?target=http%3A//tcec.chessdom.com/live.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TCEC&/a&(顶尖国际象棋引擎锦标赛,在一台高性能服务器上进行的引擎对战,被认为是衡量引擎实力最公平的比赛)第九赛季冠军,顶尖传统国际象棋引擎 &a href=&https://link.zhihu.com/?target=https%3A//stockfishchess.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stockfish&/a&(汉语译名鳕鱼干)8。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bbabcb924c_b.jpg& data-size=&normal& data-rawwidth=&454& data-rawheight=&256& class=&origin_image zh-lightbox-thumb& width=&454& data-original=&https://pic3.zhimg.com/v2-bbabcb924c_r.jpg&&&figcaption&图中 AlphaZero 在 300k steps(约合一千九百万场自对弈对局)时超越 Stockfish,最终等级分比 Stockfish 高大约 100&/figcaption&&/figure&&p&论文一出,国际象棋引擎爱好者们炸开了锅,同期进行的 TCEC 第十赛季决赛顿时变得索然无味。聊天室里被 AlphaZero 的话题霸占,他们从最初的不服气,到讨论 AlphaZero 的真实实力究竟是高是低,甚至开始考虑让 AlphaZero 进入 TCEC,接受来自传统豪强的轮番挑战。然而 DeepMind 从来不会为了证明自己去参加别人举办的比赛,这件事只能是爱好者们的幻想。&/p&&p&终于,幻想成为现实的可能性出现了。&/p&&hr&&h2&&b&Leela Chess 的诞生&/b&&/h2&&p&AlphaGo Zero 发布后,就已经有了将强化学习应用于国际象棋的构想。西班牙开发者 &a href=&https://link.zhihu.com/?target=https%3A//github.com/Zeta36& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Samuel Graván&/a& 于 2017 年 11 月(AlphaZero 论文发布前一个月)开发出 &a href=&https://link.zhihu.com/?target=https%3A//github.com/Zeta36/chess-alpha-zero& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Zeta36/chess-alpha-zero&/a&,证明了国际象棋应用强化学习的可能性。AlphaZero 论文发布后,他看到了 AlphaGo Zero 开源实现,比利时开发者 &a href=&https://link.zhihu.com/?target=https%3A//github.com/gcp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Gian-Carlo Pascutto&/a&(也是国际象棋引擎 Sjeng 的开发者,Sjeng 的开源版本成为 macOS 自带国际象棋游戏的引擎内核)开发的 &a href=&https://link.zhihu.com/?target=https%3A//github.com/gcp/leela-zero& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&gcp/leela-zero&/a& 通过分布式训练聚集爱好者的电脑算力,棋力进步迅速。于是 Samuel 到 Leela Zero 的问题收集区发布了他的构想:&/p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/gcp/leela-zero/issues/369& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic1.zhimg.com/v2-4ba2cc398abd12a155604_ipico.jpg& data-image-width=&200& data-image-height=&200& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&What about a Leela(Chess) Zero? · Issue #369 · gcp/leela-zero&/a&&p&这个构想立刻得到了 Gian-Carlo Pascutto 的回应:&/p&&blockquote&I'd be enormously interested in it - but I'm extremely busy with this project right here already! So it seems likely someone in the chess community will have something before we finish our run.&br&I told the Stockfish people they can use the training, OpenCL etc code from this project but we'll see what they end up doing.&/blockquote&&p&“我对此非常感兴趣——但是我已经在这个项目(Leela Zero)里忙得不可开交!所以看上去很可能国际象棋社区的某个人会在我们完成我们的任务之前搞出些名堂来。&/p&&p&“我跟 Stockfish 的人说过他们可以用这个项目里的训练、OpenCL 等等的代码,不过我们得看他们最终会怎么做。”&/p&&p&在一周的沉寂后,国际象棋引擎开发者 &a href=&https://link.zhihu.com/?target=https%3A//github.com/benediamond& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Benjamin Diamond&/a& 在这个问题中宣布自己结合 Stockfish 的位棋盘(bitboard)和着法生成代码以及 Leela Zero 的架构,开发出一个原型 &a href=&https://link.zhihu.com/?target=https%3A//github.com/benediamond/leela-chess& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&benediamond/leela-chess&/a&。Leela Chess 就这样诞生了。但是由于移植过程中遇到了大量困难,这个原型只是能运行,大量的核心功能还没有实现。Samuel 和其他开发者试图协助他,但是进展缓慢。&/p&&hr&&h2&&b&Stockfish 的加入&/b&&/h2&&p&Stockfish 分支自开源引擎 Glaurung(汉语译名格劳龙),从第一个版本起就拥有较强实力。在提高棋力的过程中,Stockfish 采用了一种叫做 SPSA(Simultaneous Perturbation Stochastic Approximation,同时扰动随机逼近)的自动调参方法,公布于 2011 年。&/p&&p&SPSA 的核心是取一个或多个参数,通过预设的调参常数计算出一个不大的波动范围。准备两个当前版本的引擎,将引擎的参数分别调整到波动范围的两端,并进行对弈。如果一方获胜,就将参数向获胜方的方向通过一个很小的系数进行微调,两个对弈引擎的参数对应地平移,然后重复对弈过程。通常经过数万局对弈才可以得到稳定的结果。如此庞大的算力需求对个人开发者来说显然是一个不小的负担。&/p&&p&2013 年 2 月,加拿大国际象棋引擎开发者 &a href=&https://link.zhihu.com/?target=https%3A//github.com/glinscott& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Gary Linscott&/a& 开发出分布式训练框架 Fishtest。这个框架不但可以用来调参,还可以对新代码进行测试。&/p&&p&人们可以在服务器上注册自己的账号。作为开发者的账号可以发布调参和新代码测试的任务。服务器得到任务后会将任务需求的对弈局数进行分割,通常以 1000 局为单位,下发给运行客户端程序的志愿者。每局结束后,结果将立即被上传到服务器并在志愿者的账号上记录消耗的 CPU 时间。总时间超过一万小时的账号会进入 Stockfish 的贡献者名单。为了避免算力的浪费,服务器还根据任务中指定的参数,通过 SPRT(sequential probability ratio test,序列概率比检验)决定何时对战结果符合统计要求从而停止测试。&/p&&p&这样的机制激发了爱好者的热情,人们纷纷贡献出电脑的空闲时间参与训练。一年内 Stockfish 暴涨 200 多等级分,以开源引擎的身份加入国际象棋引擎的顶尖行列,与众多商业引擎比肩。由于在 Fishtest 上做出的贡献,Gary Linscott 被加入 Stockfish 的作者名单。&/p&&p&可以说,Stockfish 的成功依靠的是分布式训练聚集志愿者的电脑算力,与 Leela Zero 不谋而合。&/p&&p&2018 年 1 月,Gary Linscott 回复 Samuel Graván 在 Leela Zero 提出的问题,说自己已经根据 Benjamin Diamond 制作的原型进行进一步修改,开始完善各个功能。随后他与 Gian-Carlo Pascutto 探讨了开发方向上的问题,得到对方的积极回应。Leela Chess 项目染上了 Stockfish 的官方色彩。&/p&&hr&&h2&&b&Leela Chess Zero 的诞生与成长&/b&&/h2&&p&在 1 月期间,Leela Chess 神经网络格式的移植问题得到了解决,TensorFlow 训练脚本被修复,接着实现了监督学习(根据棋谱文件生成 TensorFlow 脚本的输入数据),也就是对已有棋谱的学习。Gary Linscott 输入较高水平的人类棋谱(2000 等级分左右)进行监督学习以验证有效性,结果 Leela Chess 获得了不错的棋力,可以击败较低水平的引擎(如 GNU Chess)。他再接再厉,开发出自对弈生成输入数据的功能。&/p&&p&引擎的基本功能搭建完毕后,Gary Linscott 投入了对分布式训练平台的开发。由于 Leela Zero 的服务器端没有开源,他没有参考 Leela Zero 的框架,而是自己动手,将 Fishtest 的账号系统融合进来,重新设计了服务端和客户端。&/p&&p&2 月 20 日,分布式训练平台上线,以随机生成的权重作为起点,进行完全基于自对弈的训练。这个计划被称作 Leela Chess Zero(以下简称 LCZero)。&/p&&a href=&https://link.zhihu.com/?target=http%3A//lczero.org/& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LCZero&/a&&p&3 月 3 日,Samuel Graván 在他的 chess-alpha-zero 上宣布将精力转移到 Leela Chess 的开发,意味着 chess-alpha-zero 最终被放弃。几位优秀的开发者也聚集到 Leela Chess 项目,制定训练计划,负责服务器维护,减轻了 Gary Linscott 的负担。&/p&&p&在一个月的训练中,LCZero 的中局从一开始的错漏百出逐渐变得缜密,开局乱走边兵的现象逐渐消失,业余棋手逐渐难以战胜它。越来越多的爱好者,有的从 Fishtest 转移过来,有的是在 LCZero 变强后看好它的前景,开始将他们的电脑投入到 LCZero 的训练中。&/p&&p&截至文章发布时(4 月 7 日),LCZero 的自评等级分如图所示:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-de427d932ad8ccbc99bf43bff6ba5bbf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&731& data-rawheight=&451& class=&origin_image zh-lightbox-thumb& width=&731& data-original=&https://pic4.zhimg.com/v2-de427d932ad8ccbc99bf43bff6ba5bbf_r.jpg&&&/figure&&p&与 Stockfish 8 的差距如图所示:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-bd5d8fec8e07a4b9c774e87e77b145ee_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&794& data-rawheight=&493& class=&origin_image zh-lightbox-thumb& width=&794& data-original=&https://pic1.zhimg.com/v2-bd5d8fec8e07a4b9c774e87e77b145ee_r.jpg&&&/figure&&hr&&p&如果有兴趣了解 LCZero 现在的棋力,可以到以下网址与 LCZero 对弈:&/p&&a href=&https://link.zhihu.com/?target=http%3A//play.lczero.org/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-31dcf169bd5a91fbx120.jpg& data-image-width=&640& data-image-height=&480& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Play against LC0 !&/a&&p&如果想要帮助 LCZero 训练,请按照项目 Wiki 的指示下载客户端:&/p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/glinscott/leela-chess/wiki/Getting-Started& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-fe5c41f10e94cbe76be62f90a8354d6e_ipico.jpg& data-image-width=&420& data-image-height=&420& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Getting Started · glinscott/leela-chess Wiki&/a&&p&最后也欢迎大家加入 Leela Chess 的非官方 QQ 群:,这里可以交流关于国际象棋、国际象棋引擎以及人工智能的问题。&/p&
2017 年 12 月,DeepMind 发表了论文 ,宣称他们开发的新人工智能 AlphaZero 通过 4 小时自我对弈,棋力超过 (顶尖国际象棋引擎锦标赛,在一台…
&figure&&img src=&https://pic4.zhimg.com/v2-2219594fba2e3ff94f9d619c96d35957_b.jpg& data-rawwidth=&1600& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic4.zhimg.com/v2-2219594fba2e3ff94f9d619c96d35957_r.jpg&&&/figure&&p&这是一份迟来的技术盘点文章,因为我们无法定义 2017 年到底是个怎样的一年,可以说是人工智能爆发的一年?还是说虚拟币疯狂的一年?或者是云计算大数据最繁盛的一年? 每个媒体都再拼命盘点,都在疯狂比较。&/p&&p&甭提我们学习,连我们的认知都快赶不上技术发展的速度了,2017 年足够让人焦虑万分。&/p&&p&下文节选自 IT 权威刊物《程序员 · 2017 技术大检阅》,&a href=&https://link.zhihu.com/?target=http%3A//gitbook.cn/m/mazi/comp/geekbook%3FgeekbookId%3D5a52d02e70abed9%26utm_source%3Dtw& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&更详细的盘点内容请点击此处&/a&。&/p&&hr&&h2&&b&2017 · 人工智能&/b&&/h2&&ol&&li&从 AlphaGo Zero 到 Alpha Zero&/li&&/ol&&p&2017 年 AlphaGo Zero 作为 AlphaGo 代做了进一步的技术升级,把 AlphaGo 一代虐得体无完肤,这时人类已经没有资格上场对局了。&/p&&p&2017 年底 AlphaGo 的棋类游戏通用版本 Alpha Zero 问世,不仅仅围棋,对于国际象棋、 日本将棋等其他棋类游戏,Alpha Zero 也以压倒性优势战胜包括 AlphaGo Zero 在内的目前最强的 AI 程序。&/p&&p&AlphaGo Zero 从技术手段上和 AlphaGo 相比并未有本质上的改进,主体仍然是 MCST 蒙特卡洛搜索树加神经网络的结构以及深度增强学习训练方法,但是技术实现上简单优雅很多。 &/p&&p&主要的改动包含两处:一是将 AlphaGo 的两个预测网络( 略网络和价值网络)合并成一个网络,但是同时产生两类所需的输出;第二是网络结构从 CNN 结构升级为 ResNet。 &/p&&p&从 AlphaGo 的一步步进化策略可以看出,DeepMind 正在考虑这扩展技术方案的通用性,使得它能够使用一种技术解决更多问题,尤其是那些非游戏类的真实生活中有现实价值的问题。&/p&&p&同时,AlphaGo 系列技术也向机器学习从业人员展示了深度增强学习的强大实力,并进一步推动了相关的技术进步,目前也可以看

我要回帖

更多关于 哪个国家货币最值钱 的文章

 

随机推荐