深度学习 怎样确问齱,b收敛

你以为他们是拍了下脑袋就想出来的算法,实际上他们一天拍一个idea,拍了好几年才拍出来个有效的。
你以为他们是拍了下脑袋就想出来的算法,实际上他们一天拍一个idea,拍了好几年才拍出来个有效的。
如果要做事,想赶快入门,速度出活,请先死记住:&br&&b& 深度学习=多层的神经网络&/b&&br&如果要写论文,要作报告,要闲聊,请坚持一个原则:&br&&b&深度学习绝不仅仅是多层的神经网络。&/b&
如果要做事,想赶快入门,速度出活,请先死记住:
深度学习=多层的神经网络 如果要写论文,要作报告,要闲聊,请坚持一个原则: 深度学习绝不仅仅是多层的神经网络。
&p&最近看了些文章,发现,自从把一个5*5卷积核用两个3*3卷积核,3*3卷积核分解成1*3和3*1卷积核后,对CNN的研究,目前集中在三个维度:channel, filter,和残差网络的connection。目标是把模型做小、做强、做到移动端,精度差点,没关系,可以加数据,离线多跑几轮。&/p&&h2&&b&1. Channel&/b&&/h2&&p&无论Xception,还是ResNeXt,还有面向移动端的ShuffleNet和MobileNet。都是基于Group Convolution思想在channel维度进行“网络工程”,搭建新的模型。&/p&&p&&b&1. 1 Group Convolution&/b&&/p&&p&Group Convolution是指将channels细分成多个group,然后再分组进行Convolution。据我所知,这种思想始于2012年AlexNet的双GPU架构设计,相当于把channels均分到两个GPU,分组卷积:&/p&&img src=&/v2-3afd323b9b3ac24ac4f0bdf781ee7c62_b.png& data-rawwidth=&1123& data-rawheight=&393& class=&origin_image zh-lightbox-thumb& width=&1123& data-original=&/v2-3afd323b9b3ac24ac4f0bdf781ee7c62_r.png&&&p&如果对每个通道进行卷积,就是Depthwise Convolution。&/p&&p&&b&1.2 Separable Convolution&/b&&/p&&p&在卷积层中间插入1*1卷积,即pointwise convolution。举个例子,对经典的卷积操作,如果OD是256,ID是128,卷积核大小3*3,需要的参数为128*3*3*256=294912个参数,而Spearable卷积方法,假如DM=4,这样中间层的channel数为128*4=512,再经过1*1卷积降维到256个channel,需要的总参数为:128*3*3*4 + 128*4*1*1*256=135680,参数量相当于普通卷积的46%,还增加了通道数(128*4=512)增强了特征表达能力。&/p&&img src=&/v2-74d56e13c5b3d271b6af135e6d2ab4d2_b.png& data-rawwidth=&1036& data-rawheight=&801& class=&origin_image zh-lightbox-thumb& width=&1036& data-original=&/v2-74d56e13c5b3d271b6af135e6d2ab4d2_r.png&&&p&所以说,理想的卷积Block应该是先用1*1卷积核降channel,然后再进行3*3卷积提取特征,最后再用1*1卷积核降channel。&/p&&img src=&/v2-d7d48dc5dda_b.png& data-rawwidth=&1140& data-rawheight=&804& class=&origin_image zh-lightbox-thumb& width=&1140& data-original=&/v2-d7d48dc5dda_r.png&&&p&综上,depthwise
separable convolution = depthwise convolution + pointwise convolution&/p&&p&&b&1.3 Xception&/b&&/p&&p&利用上述结构重新设计Inception model block,就是Xception;重新设计Resnet,就是ResNeXt架构。以达到在减少参数量的情况下增加模型的层数,既减少了存储空间,还增强了模型的表达能力。&/p&&img src=&/v2-cbeb3637eb_b.png& data-rawwidth=&1299& data-rawheight=&391& class=&origin_image zh-lightbox-thumb& width=&1299& data-original=&/v2-cbeb3637eb_r.png&&&p&通常来讲,如果对channel进行分组卷积,各小组就分头行动,互相没有交流,这样显然没有充分利用channel的信息。ShuffleNet在分组之前,先将channel随记打乱,这样对信息的利用更充分,因此可以通过设计降低模型参数量而不影响模型的表达能力。&/p&&img src=&/v2-85fc52acb1d316f993b220_b.png& data-rawwidth=&829& data-rawheight=&462& class=&origin_image zh-lightbox-thumb& width=&829& data-original=&/v2-85fc52acb1d316f993b220_r.png&&&h2&2. Filter&/h2&&img src=&/v2-fa98cecca93_b.png& data-rawwidth=&616& data-rawheight=&208& class=&origin_image zh-lightbox-thumb& width=&616& data-original=&/v2-fa98cecca93_r.png&&&p&&b&2.1 Wavenet &/b&&/p&&p&经典CNN的Filter是在邻域内采样卷积,如3*3卷积核是在8邻域采样。&/p&&img src=&/v2-f1ddbc728a79_b.png& data-rawwidth=&694& data-rawheight=&289& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&/v2-f1ddbc728a79_r.png&&&p&但是,Filter可以跨点采样进行卷积,从而可以利用更大范围内的信息,即Dilated CNN,最早应用于图像语义分割,去年谷歌提出的Wavenet模型将CNN拓展到语音识别和语音合成。&/p&&img src=&/v2-cad350c9a65d8bdd3aeda_b.png& data-rawwidth=&694& data-rawheight=&289& class=&origin_image zh-lightbox-thumb& width=&694& data-original=&/v2-cad350c9a65d8bdd3aeda_r.png&&&p&&br&&/p&&img src=&/v2-c4be30d360a55ecdda5c8a8e_b.png& data-rawwidth=&687& data-rawheight=&310& class=&origin_image zh-lightbox-thumb& width=&687& data-original=&/v2-c4be30d360a55ecdda5c8a8e_r.png&&&p&&b&2.2 Dilated Resnet&/b&&/p&&p&将Dilated CNN的思想应用到Resnet架构中,就是CVPR 2017的“Dilated Residual Networks”&/p&&img src=&/v2-a97cde804b2e21f35dc71_b.png& data-rawwidth=&590& data-rawheight=&472& class=&origin_image zh-lightbox-thumb& width=&590& data-original=&/v2-a97cde804b2e21f35dc71_r.png&&&p&&b&3. Connection&/b&&/p&&p&ResNet的Connection方式是将输入和输出相加,形成一个残差Block。DenseNet则更进一步,在每个Block内,将输入和输出直接拼接,而且在每一层都和之前所有层的输出拼接,这样可以减少中间层的通道数。&/p&&p&&br&&/p&&img src=&/v2-f03cee2b0ff0c4f90c901f88cc93d58f_b.png& data-rawwidth=&666& data-rawheight=&490& class=&origin_image zh-lightbox-thumb& width=&666& data-original=&/v2-f03cee2b0ff0c4f90c901f88cc93d58f_r.png&&&p&而最新的Dual Path Networks模型,则是融合了ResNet和DenseNet的优点:特征重利用和特征重提取。采用了双通道架构:&/p&&p&&br&&/p&&img src=&/v2-3edbd5bad3d_b.png& data-rawwidth=&697& data-rawheight=&462& class=&origin_image zh-lightbox-thumb& width=&697& data-original=&/v2-3edbd5bad3d_r.png&&&p&可以预想,接下来,将会有模型融合以上三点的集大成者?&/p&&p&以上,仅供参考。&/p&&p&参考文献:&/p&&p&1. ImageNet Classification with Deep Convolutional Neural Networks. Alex etc, 2012.&/p&&p&2. Learning Visual Representations at Scale. Vincent Vanhoucke etc, 2014.&/p&&p&3. Xception: Deep Learning with Depthwise Separable Convolutions. Fran?ois Chollet, 2017.&/p&&p&4. Aggregated Residual Transformations for Deep Neural Networks. Saining Xie etc, 2017.&/p&&p&5. ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices. Xiangyu Zhang etc, 2017.&/p&&p&6. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications. Andrew G. Howard etc, 2017.&/p&&p&7. Wavenet: a generative model for raw audio. Aaron van den Oord etc, 2016.&/p&&p&8. Densely Connected Convolutional Networks. Gao Huang etc, 2016.&/p&&p&9. Dual Path Networks. Yunpeng Chen etc, 2017.&/p&
最近看了些文章,发现,自从把一个5*5卷积核用两个3*3卷积核,3*3卷积核分解成1*3和3*1卷积核后,对CNN的研究,目前集中在三个维度:channel, filter,和残差网络的connection。目标是把模型做小、做强、做到移动端,精度差点,没关系,可以加数据,离线多…
&p&做深度学习第一位的永远是台式机,去京东找一款带1080显卡的主机,再配一台显示器即可。&/p&&p&Macbook什么的,以后有钱了再说。你现在要解决的是最基本的计算能力的问题,钱不够的情况下要先吃饱,不是考虑装B的时候。&/p&&p&不过我想知道Macbook这种连触摸屏都没有的笔记本,发光logo也没有了,还能怎么装B。&/p&&p&-------------------------------&/p&&p&刚没注意,原来题主竟然因为要装B,不买新款性能高的Macbook,而是要买带发光logo的15版。&/p&&p&少年,我看你骨骼清奇,更适合做iOS开发,北大青鸟培训半年即可上岗,前三个月不收任何费用。(认真脸)&/p&
做深度学习第一位的永远是台式机,去京东找一款带1080显卡的主机,再配一台显示器即可。Macbook什么的,以后有钱了再说。你现在要解决的是最基本的计算能力的问题,钱不够的情况下要先吃饱,不是考虑装B的时候。不过我想知道Macbook这种连触摸屏都没有的笔…
--更新--7.13&br&最近看到用tensorflow让神经网络自动创造音乐的项目,试了一下,挺有趣的,放在博客里了,大家感兴趣的可以试一下:)&br&&a href=&///?target=http%3A///charlotte77/p/5664523.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用Tensorflow让神经网络自动创造音乐&i class=&icon-external&&&/i&&/a&&br&&br&原文:&br&&br&看到过一个利用深度学习改变图片的艺术风格的&br&&img data-rawwidth=&733& data-rawheight=&567& src=&/ff5d89bb3d7a50b747e4b29fac113fc2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&733& data-original=&/ff5d89bb3d7a50b747e4b29fac113fc2_r.jpg&&&br&&br&&br&&img data-rawwidth=&729& data-rawheight=&506& src=&/ce4be5a8cc4006b6dffab8cfe6a626d4_b.jpg& class=&origin_image zh-lightbox-thumb& width=&729& data-original=&/ce4be5a8cc4006b6dffab8cfe6a626d4_r.jpg&&&br&&br&&br&&br&Github:&a href=&///?target=https%3A///fzliu/style-transfer& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/fzliu/style-&/span&&span class=&invisible&&transfer&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&来自微博:&a href=&///?target=http%3A////6836%3FmoduleID%3Dfeed%26uicode%3Dmid%3D2790%26luicode%3D_status_id%3D6836%26lfid%3D7505_-_WEIBO_SECOND_PROFILE_WEIBO%26lcardid%3D7505_-_WEIBO_SECOND_PROFILE_WEIBO_-_2790& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&//3&/span&&span class=&invisible&&836?moduleID=feed&uicode=&mid=2790&luicode=&_status_id=6836&lfid=7505_-_WEIBO_SECOND_PROFILE_WEIBO&lcardid=7505_-_WEIBO_SECOND_PROFILE_WEIBO_-_2790&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&&br&我想的很简单,是不是可以利用深度学习来给照片加滤镜=_=
--更新--7.13 最近看到用tensorflow让神经网络自动创造音乐的项目,试了一下,挺有趣的,放在博客里了,大家感兴趣的可以试一下:)
原文: 看到过一个利用深度学习改变图片的艺术风格的 Github:
Detection DeepInsight,Classification DeeperVision成员。&br&冠军的回答里信息量已经很大了,很多东西我就不再重复了。从中真是学到了不少东西,值得慢慢消化。&br&先来正面回答一下题主的问题,我昨天看到结果,尤其是classification的结果的时候,真的是大吃一惊。可以说这个结果真是大大超出我们的预料。Google非常棒!全明星阵容果然不是吹的。。。只有真正做过的人才知道,从11.2到6.7的难度是远远大于去年从15到11.2的。至于说什么计算机拥有了几岁小孩的智商,这种报道大家笑笑就好。不过我也觉得会信的人不会上知乎的。。。&br&&br&先说下我们用的工具,基本上就是yangqing开发的caffe。我们在之上实现了一些改进。至少对目前开展research而言,这份code是足够了的。&br&下面说说经验与教训:&br&1. Deep learning之所以叫deep learning,这是因为模型的深度真的非常重要。这一点上我们时间不够,没有完全exploit,有点以遗憾。我在之前的一个talk里有一些讨论,也可以分享给大家:&a href=&///?target=http%3A//winsty.net/talks/nonNN.pptx& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&winsty.net/talks/nonNN.&/span&&span class=&invisible&&pptx&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&2. 正如yangqing所说,模型的优化是一个重要而又非常困难的问题。我们这次在这个方面进行了一些有益的尝试。不同优化方法对结果的影响,比我想像得要大。我希望在这方面做ML做优化的同学多来关注一些,而不是只盯着convex的问题。真实的世界总不是那么完美的。&br&3. 尽信paper不如无paper,这世界上不work的paper远远多于work的paper,尤其是对于DL这种大坑。很多东西要自己亲自实现才会有感悟。&br&&br&除此之外,有一些有趣的观察和大家分享:&br&1. 来自Oxford的VGG组一直是传统计算机视觉方法(非DL)的支持者,这可以在他们去年比赛提交中得到验证,然而今年确实使用DL最暴力的几个队之一。由此可见,DL现在在CV界的统治地位。&br&2. 来自NUS颜水成老师组的队伍也很强悍!在detection比赛中,没有使用额外数据的情况下已经做到了mAP 37。如果使用他们的方法在classification数据上pretrain,鹿死谁手也不一定。&br&3. 除此之外,MSRA的SPP以及CUHK的队伍也都很值得关注!&br&4. 来自国内高校的队伍仍然与世界先进水平有显著的差距,大家要加油~&br&&br&另外一些不靠谱的预测:&br&1. 计算能力仍然是目前制约着模型性能的关键,经过几年的努力GPGPU已经得到了大家的一致认可。下一步多GPU,以及GPU集群是一个不可避免的趋势。现在cuda-convnet2已经做出了一些很好的尝试。&br&2. CNN虽然现在在CV领域里如日中天,但是开发新的deep learning结构仍然是一个open的问题。我个人一直觉得CNN并不是唯一的解决之路。&br&3. 明年classification该换数据集或者评价标准了吧。。。大家已经把imagenet刷得比cifar还高了。。。&br&4. Detection中可以改进的地方还有很多,很多细节问题处理得并不优美,而且没有一套统一的流程。估计detection的结果会在将来一年中继续有着惊人的提高。&br&&br&再来扯两句闲话。其实真正做了小半年,从只看过几篇CNN的paper到吃透caffe的code,跑起来一个很大的网络,再到找出真正work的东西,这其中的收获的点虽然不是很多,但是每一点都很充实,每一点都是血的教训换来的。在这个过程中对CNN对deep learning整个big picture的理解也在迭代加深,我想这对于以后的research是受益匪浅的。这也恰恰是我最初想参加这个比赛的一个初衷:去伪存真。在参加比赛的过程中也认识了很多很厉害的朋友。不管怎么说,这都是我PhD期间最珍贵的一份体验。&br&&br&以上,希望抛砖引玉,大家可以多讨论,去ECCV的同学们可以当面聊。
Detection DeepInsight,Classification DeeperVision成员。 冠军的回答里信息量已经很大了,很多东西我就不再重复了。从中真是学到了不少东西,值得慢慢消化。 先来正面回答一下题主的问题,我昨天看到结果,尤其是classification的结果的时候,真的是大吃…
&p&NCCL是Nvidia Collective multi-GPU Communication Library的简称,它是一个实现多GPU的collective communication通信(all-gather, reduce, broadcast)库,Nvidia做了很多优化,以在PCIe、Nvlink、InfiniBand上实现较高的通信速度。&/p&&p&下面分别从以下几个方面来介绍NCCL的特点,包括基本的communication primitive、ring-base collectives、NCCL在单机多卡上以及多机多卡实现、最后分享实际使用NCCL的一些经验。&/p&&p&&b&(1)communication primitive&/b&&/p&&p&并行任务的通信一般可以分为Point-to-point communication和Collective communication。P2P通信这种模式只有一个sender和一个receiver,实现起来比较简单。第二种Collective communication包含多个sender多个receiver,一般的通信原语包括broadcast,gather,all-gather,scatter,reduce,all-reduce,reduce-scatter,all-to-all等。简单介绍几个常用的操作:&/p&&p&Reduce:从多个sender那里接收数据,最终combine到一个节点上。&/p&&img data-rawheight=&328& src=&/v2-fe26ffda0f48c40b3f4a8feb7a73a669_b.png& data-rawwidth=&1061& class=&origin_image zh-lightbox-thumb& width=&1061& data-original=&/v2-fe26ffda0f48c40b3f4a8feb7a73a669_r.png&&&p&All-reduce:从多个sender那里接收数据,最终combine到每一个节点上。&/p&&img data-rawheight=&323& src=&/v2-4abf0bb4962_b.png& data-rawwidth=&1058& class=&origin_image zh-lightbox-thumb& width=&1058& data-original=&/v2-4abf0bb4962_r.png&&&p&而传统Collective communication假设通信节点组成的topology是一颗fat tree,如下图所示,这样通信效率最高。但实际的通信topology可能比较复杂,并不是一个fat tree。因此一般用ring-based Collective communication。&/p&&img data-rawheight=&720& src=&/v2-c9aaf7d02f_b.png& data-rawwidth=&1200& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&/v2-c9aaf7d02f_r.png&&&p&&br&&/p&&p&&b&(2) ring-base collectives&/b&&/p&&p&ring-base collectives将所有的通信节点通过首尾连接形成一个单向环,数据在环上依次传输。以broadcast为例, 假设有4个GPU,GPU0为sender将信息发送给剩下的GPU,按照环的方式依次传输,GPU0--&GPU1--&GPU2--&GPU3,若数据量为N,带宽为B,整个传输时间为(K-1)N/B。时间随着节点数线性增长,不是很高效。&/p&&img data-rawheight=&406& src=&/v2-12af80e172e09cc92e4e6dcde6841311_b.png& data-rawwidth=&626& class=&origin_image zh-lightbox-thumb& width=&626& data-original=&/v2-12af80e172e09cc92e4e6dcde6841311_r.png&&&p&下面把要传输的数据分成S份,每次只传N/S的数据量,传输过程如下所示:&/p&&img data-rawheight=&410& src=&/v2-fed2fc16bec63cc7ec84cdf_b.png& data-rawwidth=&628& class=&origin_image zh-lightbox-thumb& width=&628& data-original=&/v2-fed2fc16bec63cc7ec84cdf_r.png&&&p&GPU1接收到GPU0的一份数据后,也接着传到环的下个节点,这样以此类推,最后花的时间为&/p&&p&S*(N/S/B) + (k-2)*(N/S/B) = N(S+K-2)/(SB) --& N/B,条件是S远大于K,即数据的份数大于节点数,这个很容易满足。所以通信时间不随节点数的增加而增加,只和数据总量以及带宽有关。其它通信操作比如reduce、gather以此类推。&/p&&p&那么在以GPU为通信节点的场景下,怎么构建通信环呢?如下图所示:&/p&&p&单机4卡通过同一个PCIe switch挂载在一棵CPU的场景:&/p&&img data-rawheight=&206& src=&/v2-dac47e37dedf4ce07ce7_b.png& data-rawwidth=&390& class=&content_image& width=&390&&&p&单机8卡通过两个CPU下不同的PCIe switch挂载的场景:&/p&&img data-rawheight=&171& src=&/v2-fabed45eb4d02553df83_b.png& data-rawwidth=&791& class=&origin_image zh-lightbox-thumb& width=&791& data-original=&/v2-fabed45eb4d02553df83_r.png&&&p&&br&&/p&&p&&b&(3)NCCL实现&/b&&/p&&p&NCCL实现成CUDA C++ kernels,包含3种primitive operations: Copy,Reduce,ReduceAndCopy。目前NCCL 1.0版本只支持单机多卡,卡之间通过PCIe、NVlink、GPU Direct P2P来通信。NCCL 2.0会支持多机多卡,多机间通过Sockets (Ethernet)或者InfiniBand with GPU Direct RDMA通信。&/p&&p&下图所示,单机内多卡通过PCIe以及CPU socket通信,多机通过InfiniBand通信。&/p&&img data-rawheight=&162& src=&/v2-c3c96eff75e8f1b161b6c_b.png& data-rawwidth=&462& class=&origin_image zh-lightbox-thumb& width=&462& data-original=&/v2-c3c96eff75e8f1b161b6c_r.png&&&p&同样,在多机多卡内部,也要构成一个通信环&/p&&img data-rawheight=&152& src=&/v2-da87f34b0b76eabe40339f35_b.png& data-rawwidth=&459& class=&origin_image zh-lightbox-thumb& width=&459& data-original=&/v2-da87f34b0b76eabe40339f35_r.png&&&p&下面是单机 4卡(Maxwel GPU)上各个操作随着通信量增加的带宽速度变化,可以看到带宽上限能达到10GB/s,接近PCIe的带宽。&/p&&p&&img data-rawheight=&348& src=&/v2-65f4fb3ca058_b.png& data-rawwidth=&768& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&/v2-65f4fb3ca058_r.png&&&/p&&br&&p&下图是Allreduce在单机不同架构下的速度比较:&/p&&img data-rawheight=&440& src=&/v2-155b290bdcfadc5784f8d_b.png& data-rawwidth=&912& class=&origin_image zh-lightbox-thumb& width=&912& data-original=&/v2-155b290bdcfadc5784f8d_r.png&&&p&先不看DGX-1架构,这是Nvidia推出的深度学习平台,带宽能达到60GB/s。前面三个是单机多卡典型的三种连接方式,第三种是四张卡都在一个PCIe switch上,所以带宽较高,能达到&10GB/s PCIe的带宽大小,第二种是两个GPU通过switch相连后再经过CPU连接,速度会稍微低一点,第一种是两个GPU通过CPU然后通过QPI和另一个CPU上的两块卡相连,因此速度最慢,但也能达到&5GB/s。&/p&&p&下图是Allreduce多机下的速度表现,左图两机8卡,机内PCIe,机间InfiniBand能达到&10GB/s的速度,InfiniBand基本上能达到机内的通信速度。&/p&&img data-rawheight=&460& src=&/v2-7b912f62b04ea7cae037b46_b.png& data-rawwidth=&849& class=&origin_image zh-lightbox-thumb& width=&849& data-original=&/v2-7b912f62b04ea7cae037b46_r.png&&&p&&br&&/p&&p&下图是NCCL在CNTK ResNet50上的scalability,32卡基本能达到线性加速比。&/p&&img data-rawheight=&414& src=&/v2-b12bcc3d8b0a89abb9a0_b.png& data-rawwidth=&711& class=&origin_image zh-lightbox-thumb& width=&711& data-original=&/v2-b12bcc3d8b0a89abb9a0_r.png&&&p&&br&&/p&&p&&b&(4)我们的实测经验&/b&&/p&&p&首先,在一台K40 GPU的机器上测试了GPU的连接拓扑,如下:&/p&&img data-rawheight=&226& src=&/v2-0c03b320c2871c4aec3bae1_b.png& data-rawwidth=&698& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&/v2-0c03b320c2871c4aec3bae1_r.png&&&p&可以看到前四卡和后四卡分别通过不同的CPU组连接,GPU0和GPU1直接通过PCIe switch相连,然后经过CPU与GPU2和GPU3相连。&/p&&p&下面是测试PCIe的带宽,可以看到GPU0和GU1通信能达到10.59GB/s,GPU0同GPU2~3通信由于要经过CPU,速度稍慢,和GPU4~7的通信需要经过QPI,所以又慢了一点,但也能达到9.15GB/s。&/p&&img data-rawheight=&166& src=&/v2-89c4c2d9c9f637ca7cfb02de4a7c9500_b.png& data-rawwidth=&636& class=&origin_image zh-lightbox-thumb& width=&636& data-original=&/v2-89c4c2d9c9f637ca7cfb02de4a7c9500_r.png&&&p&&br&&/p&&p&而通过NVlink连接的GPU通信速度能达到35GB/s:&/p&&img data-rawheight=&155& src=&/v2-f9cf8a8bb78f0_b.png& data-rawwidth=&570& class=&origin_image zh-lightbox-thumb& width=&570& data-original=&/v2-f9cf8a8bb78f0_r.png&&&p&&br&&/p&&p&NCCL在不同的深度学习框架(CNTK/Tensorflow/Torch/Theano/Caffe)中,由于不同的模型大小,计算的batch size大小,会有不同的表现。比如上图中CNTK中Resnet50能达到32卡线性加速比,Facebook之前能一小时训练出ImageNet,而在NMT任务中,可能不会有这么大的加速比。因为影响并行计算效率的因素主要有并行任务数、每个任务的计算量以及通信时间。我们不仅要看绝对的通信量,也要看通信和计算能不能同时进行以及计算/通信比,如果通信占计算的比重越小,那么并行计算的任务会越高效。NMT模型一般较大,多大几十M上百M,不像现在image的模型能做到几M大小,通信所占比重会较高。&/p&&p&下面是NMT模型单机多卡加速的一个简单对比图:&/p&&img data-rawheight=&127& src=&/v2-9a33ecf43cd9bbb77f7edb_b.png& data-rawwidth=&482& class=&origin_image zh-lightbox-thumb& width=&482& data-original=&/v2-9a33ecf43cd9bbb77f7edb_r.png&&&p&&br&&/p&&p&以上就是对NCCL的一些理解,很多资料也是来自于NCCL的官方文档,欢迎交流讨论。&/p&
NCCL是Nvidia Collective multi-GPU Communication Library的简称,它是一个实现多GPU的collective communication通信(all-gather, reduce, broadcast)库,Nvidia做了很多优化,以在PCIe、Nvlink、InfiniBand上实现较高的通信速度。下面分别从以下几个方…
冒个泡,一个半月以后终于把code release出来了,放在了 &a href=&///?target=https%3A///msracver/Deformable-ConvNets& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&msracver/Deformable-ConvNets&i class=&icon-external&&&/i&&/a&,当时做实验用的是内部的只能在Windows上跑的支持多卡做detection的Caffe,基本没法release,花了一个多月迁移到了MXNet上。其实我们的实现跟现有的repo并不太一样,欢迎大家来围观。
冒个泡,一个半月以后终于把code release出来了,放在了 ,当时做实验用的是内部的只能在Windows上跑的支持多卡做detection的Caffe,基本没法release,花了一个多月迁移到了MXNet上。其实我们的实现跟现有的repo并不太一样,欢…
个人的一点看法:&br&1. TensorFlow是采用的DataFlow的数据流模型,不过我不觉得和Dryad有太多相似之处,此外Dryad也不是第一个提出DataFlow模型的地方,要说最早可以参考MIT TaggedToken
machine里面的static dataflow 和dynamic dataflow architecture[2]的资料. 在一个大规模机器学习系统上全面、可靠的支持DataFlow的feature本不是一件容易的事情,但是Tensorflow做到这一点,支持control_dependence, merge, condition,for-loop/while-loop, iteration。1. 就像LSTM的unrolling,原来需要predefine unroll,现在用for-loop去做展开(内部维持状态的变化) 2. 还有比如一些算法需要对不同的input example做不同的训练(不同的gradient,更新不一样的variables),以前需要hack很多东西(至少在DistBelif上是),现在只需要一个ConditionOp就解决了。3. 比如不同的variables用不同的optimizer,SGD/AdaGrad/FTRL/Momentum等。有了ControlFlow的支持,tensorflow graph更像是一种语言的抽象(variables, tensors, controlflow, compile[这个是指会rewrite整个graph, send/recv node, un-reference, graph partition, dynamic placement], parallelism,functional programming等),从这个角度讲还是有不少新东西在里面。&br&&br&2. 是否用Dataflow和BSP并无直接对应关系,Dataflow只是tensor/token的流动,怎么 schedule和控制流动是别的部分的事情(session 如何drive)。事实上,Tensorflow提供的灵活性用户很容易在上层做BSP(如果你非常喜欢这样做的话,这种模型最大的缺点是fault tolerance很难做),SSP(如果非要把这个概念引入的话) 或者parameter server的结构(事实上我从来不认为这是一种通用的结构,只是ps被centralized起来存有状态的variables而已, 5年前的DistBelief就是这种架构),有了这个框架的抽象,然后进一步你可以做Synchronous or Asynchronous training。所以说Dataflow只能做BSP,这个是很没有缘由的。&br&&br&3. 数据表示成tensor/token,单单这一点非要说这个有多少的创新确实也谈不上。不过基于tensor的每一个single op怎么做实现就有考究了,从Eigen开始到每一个kernels op基本都有micro-benchmark来保证单个op的performance达到最优,既然是kernel级的tensorflow的框架支持用户可以随便扩展GPU、CPU甚至即使是CPU的可以针对不同的指令级做优化和定制。当然任何事情有得就有失,大的系统的设计本身就是trade-off,比如你本来所有的东西揉在一起操作指针、inplace内存读写就可以,但现在抽象成多个各个粒度的operators,operators之间读写难免有很多overhead(当然graph rewrite已经最大限度的避免)。所以概括而言TensorFlow采用(目标)的设计其实是是production级的performance/成熟度和research flexibility的trade-off。从Google内部的各种产品线(Search/inbox/Photo等)的使用看,这个系统无论从各个方面都是经受住了考验(performance/scalability/flexibility/usability等)。Ps: TensorFlow绝不是只能做deep learning, shallow/wide model 以及传统的ML都可以基于这个系统来做(当然一些operators并不现成,需要去实现)。&br&&br&4. 最后说一下多机版本的开源问题。有各种复杂的因素导致了这次release的版本没有多机在里面,比如并没有很好的job shedule和高性能的RPC系统的支持。这个问题不深入讲但是希望不久的将来这些障碍都会排除。说到和DistBelief的性能比较,各种大大小小的task表明Tensorflow比DistBelief的性能提高不少(我不会说几X的这样的number,显然不同的tasks这个number的variance会很大. Tensorflow比DistBelief扩展性和灵活性的优势自然不用多少)要说开放出来比较数据更是没有意义,因为DistBelief本身并没有开源。&br&&br&5. 再来说一下distributed version support的问题,如果你仔细研究一下Tensorflow的framework就会发现再当前的基础上加一个分布式的支持是相当容易的,你可以用Zeromq/MPI 任何一种高效的通信框架来做,结合当前的Graph rewrite的functionality,只需要增加一些通信的节点就可以。&br&&br&6. 最后关于详细情况请参考Tensorflow writepaper[3],欢迎试用。&br&&br&[1]: Arvind and David E. Culler. Annual review
of computer science vol. 1, 1986. chapter
Dataflow Architectures, pages 225–253. 1986 &a href=&///?target=http%3A//www.dtic.mil/cgi-bin/GetTRDoc%3FLocation%3DU2%26& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&dtic.mil/cgi-bin/GetTRD&/span&&span class=&invisible&&oc?Location=U2&&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
doc=GetTRDoc.pdf&AD=ADA166235.&br&[2]: Arvind and Rishiyur S. Nikhil. Executing a program
on the MIT tagged-token dataflow architecture.
IEEE Trans. Comput., 39(3):300–318, 1990.
&a href=&///?target=http%3A//dl.acm.org/citation.cfm%3Fid%3D78583& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&dl.acm.org/citation.cfm?&/span&&span class=&invisible&&id=78583&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&.&br&[3]: TensorFlow:
Large-Scale Machine Learning on Heterogeneous Distributed Systems
个人的一点看法: 1. TensorFlow是采用的DataFlow的数据流模型,不过我不觉得和Dryad有太多相似之处,此外Dryad也不是第一个提出DataFlow模型的地方,要说最早可以参考MIT TaggedToken
machine里面的static dataflow 和dynamic dataflow architecture[2]的…
我觉得除了一些不太重要的细节之外,Naiyan的方法基本上已经非常close了。而且Alex在他的实验当中使用的也是Caffe的模型,Christopher使用的是DistBelief。&br&&br&主要的不同是除了梯度信息以外,google的方法在最底层的patch上加了一个reconstruction的正则项,来表示“什么样的patch是实际图像当中应该出现的呀”。这个正则可以自行发挥,比如说sparse coding什么的。我不知道能不能说Alex他们用了什么prior(其实没啥,但是公司总还是比较喜欢玩公司秘密什么的概念,所以大家等他们的paper吧)。Facebook的相关论文用了差不多的想法,他们是用adversarial example来生成和实际图像相似的分布。&br&&br&大图的话,基本上就是fully convolutional net:我们可以把224*224的模型做成fully convolutional的,然后就可以在大图上跑了:每次随机选一块地方update。如果要fancy一些,也可以先生成low resolution的,然后一点一点增加resolution,有点类似于Pyramid的想法。&br&&br& 更新:Alex把code开源了,code在这里:&br&&a href=&///?target=https%3A///google/deepdream& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&google/deepdream · GitHub&i class=&icon-external&&&/i&&/a&
我觉得除了一些不太重要的细节之外,Naiyan的方法基本上已经非常close了。而且Alex在他的实验当中使用的也是Caffe的模型,Christopher使用的是DistBelief。 主要的不同是除了梯度信息以外,google的方法在最底层的patch上加了一个reconstruction的正则项,…
1. 2006年改的,Geoffrey Hinton等人搞了一个深度信念网络,率先使用“深度”这个词。他们引入一个叫greedy layer wise pre-training策略,其他研究者发现这个对训练更深层度的神经网络很有效,由此引发了一波热潮。&br&&br&2. 这波的研究者热衷于使用“深度学习“这个词,公开的说法是为了强调”深度“在理论上重要性。原来使用BP来训练,信号是逐层更新的,当层次增加后,原有的反馈信号就变得很弱,所以往往只使用一层。当网络层次增加后,我们可以使用更复杂拓扑网络结构去训练一些奇奇怪怪的东西。&br&&br&当然,私以为骗经费忽悠人也是重要原因之一。&br&&br&3. 其实没啥区别,深度网络就是神经网络。不正式地说,单讲神经网络的时候常常特指BP算法;而深度学习指代的是一系列训练深层神经网络的算法。
1. 2006年改的,Geoffrey Hinton等人搞了一个深度信念网络,率先使用“深度”这个词。他们引入一个叫greedy layer wise pre-training策略,其他研究者发现这个对训练更深层度的神经网络很有效,由此引发了一波热潮。 2. 这波的研究者热衷于使用“深度学习“…
fastText简而言之,就是把文档中所有词通过lookup table变成向量,取平均后直接用线性分类器得到分类结果。fastText和ACL-15上的deep averaging network [1] (DAN,如下图)非常相似,区别就是去掉了中间的隐层。两篇文章的结论也比较类似,也是指出对一些简单的分类任务,没有必要使用太复杂的网络结构就可以取得差不多的结果。&br&&img src=&/0286603bbd51f573da0560_b.png& data-rawwidth=&412& data-rawheight=&301& class=&content_image& width=&412&&&br&文中实验选取的都是对句子词序不是很敏感的数据集,所以得到文中的实验结果完全不奇怪。但是比如对下面的三个例子来说:&br&&ul&&li&The movie is not very good , but i still like it . [2]&br&&/li&&li&The movie is very good , but i still do not like it .&br&&/li&&li&I do not like it , but the movie is still very good .&/li&&/ul&其中第1、3句整体极性是positive,但第2句整体极性就是negative。如果只是通过简单的取平均来作为sentence representation进行分类的话,可能就会很难学出词序对句子语义的影响。&br&&br&从另一个角度来说,fastText可以看作是用window-size=1 + average pooling的CNN [3]对句子进行建模。&br&&br&总结一下:对简单的任务来说,用简单的网络结构进行处理基本就够了,但是对比较复杂的任务,还是依然需要更复杂的网络结构来学习sentence representation的。&br&&br&另外,fastText文中还提到的两个tricks分别是:&br&&ul&&li&hierarchical softmax&br&&/li&&ul&&li&类别数较多时,通过构建一个霍夫曼编码树来加速softmax layer的计算,和之前word2vec中的trick相同&/li&&/ul&&li&N-gram features&br&&/li&&ul&&li&只用unigram的话会丢掉word order信息,所以通过加入N-gram features进行补充&/li&&li&用hashing来减少N-gram的存储&/li&&/ul&&/ul&&br&[1] Deep Unordered Composition Rivals Syntactic Methods for Text Classification&br&[2] A Statistical Parsing Framework for Sentiment Classification&br&[3] Natural Language Processing (Almost) from Scratch
fastText简而言之,就是把文档中所有词通过lookup table变成向量,取平均后直接用线性分类器得到分类结果。fastText和ACL-15上的deep averaging network [1] (DAN,如下图)非常相似,区别就是去掉了中间的隐层。两篇文章的结论也比较类似,也是指出对一些简…
&p&风格转移算法(Style Transfer)最早源自15年匹兹堡的论文&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] A Neural Algorithm of Artistic Style&i class=&icon-external&&&/i&&/a&。原始版本只是把VGG当作特征提取器,后续的训练只是一个简单的方程优化,不是一个典型的深度学习文章,反倒是一些feedforward的后续算法 (例如Li Feifei组的 &a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Perceptual Losses for Real-Time Style Transfer and Super-Resolution&i class=&icon-external&&&/i&&/a&])
更符合我心中深度学习的定义。&/p&&p&卷积操作(convolution)是一个有效的局部特征抽取操作。深度学习之所以能“深”,原因之一便是前面的卷积层用少量的参数完成了高效的特征萃取。作为imagenet 13年的冠军,vgg模型的特征提取能力毋庸置疑。原版 Style Transfer 算法的第一步便是将风格图(Style)和内容图(Content)图输入vgg网络,并将conv1~conv5的结果分别保存下来。效果如下图,可以看到越后面的结果越抽象&/p&&img src=&/v2-fd4fbffc9cb_b.png& data-rawwidth=&1272& data-rawheight=&936& class=&origin_image zh-lightbox-thumb& width=&1272& data-original=&/v2-fd4fbffc9cb_r.png&&&p&有了不同层次的抽象特征后,下一步是糅合。对于生成的图片,我们希望它“骨架”接近内容图(content),“画风”接近接近风格图(style),训练过程如下。&/p&&ol&&li&随机生成一张图x&/li&&li&生成图x,内容图content和风格图style一块儿通过vgg,并对应得到他们在第L层的特征. &/li&&img src=&///equation?tex=L_%7Bcontent%7D+%3D+%5Csum_%7BL%7D+%28F_%7Bx%7D%5EL+-+F_%7Bcontent%7D%5EL%29%5E2+& alt=&L_{content} = \sum_{L} (F_{x}^L - F_{content}^L)^2 & eeimg=&1&&&img src=&///equation?tex=L_%7Bstyle%7D+%3D+%5Csum_%7BL%7D+Gram%28F_%7Bx%7D%5EL%2C+F_%7Bstyle%7D%5EL%29& alt=&L_{style} = \sum_{L} Gram(F_{x}^L, F_{style}^L)& eeimg=&1&&&img src=&///equation?tex=L_%7Btotal%7D+%3D+%5Calpha+L_%7Bcontent%7D+%2B+%5Cbeta+L_%7Bstyle%7D+& alt=&L_{total} = \alpha L_{content} + \beta L_{style} & eeimg=&1&&&li&优化&img src=&///equation?tex=L_%7Btotal%7D& alt=&L_{total}& eeimg=&1&& 至最小,就可以得到一张“艺术画”了。&/li&&/ol&&p&其算法核心在于Gram Matrix的设计,正是因为这个矩阵很好的模拟texture,训练出的效果才如此优秀。若想深入了解这块,推荐读 Naiyan Wang 的 &a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Demystifying Neural Style Transfer&i class=&icon-external&&&/i&&/a& 。&/p&&p&原版Style Transfer算法是一个不断优化迭代的过程,所以速度非常慢,在我Titan X haswell上一张600 * 400的图大概需要5分钟。但从prisma的使用体验来看,他们显然使用了某种实时的算法。我猜他们应该是用了某种feedforward的网络,比如 [Li Feifei组的 &a href=&///?target=https%3A///jcjohnson/fast-neural-style& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&jcjohnson/fast-neural-style&i class=&icon-external&&&/i&&/a&] ,用一个image2image的网络去拟合最终结果。&/p&&img src=&/v2-8d03e921fd_b.png& data-rawwidth=&1672& data-rawheight=&616& class=&origin_image zh-lightbox-thumb& width=&1672& data-original=&/v2-8d03e921fd_r.png&&&br&&p&这样的网络虽可以一步到位生成图片,但就我个人实验来看,部分图片会出现一些不合理的色调色块,远没达到Prisma的水准。后采取了一个折衷办法,先用feedforward网络产生一张草图,再用 Gaytes 的原版方法refine。在Titan X Haswell上,可以在保证质量的同时做到实时。&/p&&p&其他应用的话,最直观的自然是应用到视频上。安利一个我和小伙伴去年做的project,将neural style算法应用应用到了视频上,在保证帧和帧之间稳定的同时做到了伪实时(5~7帧/秒 )&a href=&///?target=https%3A//zeruniverse.github.io/fast-artistic-videos/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FastArtisticVideos by zeruniverse&i class=&icon-external&&&/i&&/a&&/p&
风格转移算法(Style Transfer)最早源自15年匹兹堡的论文。原始版本只是把VGG当作特征提取器,后续的训练只是一个简单的方程优化,不是一个典型的深度学习文章,反倒是一些feedforward的后续算法 (例如L…
&p&简单说一个大家不太熟悉的公司吧,disney research.其实walt disney 是一个很大的集团,包含迪士尼乐园,迪士尼电影,皮克斯动画,漫威电影,espn,abc电视台等等。而disney research算是集团培养的一批研究人才吧。目前disney research在匹兹堡,洛杉矶和苏黎世有三个研究院。我在匹兹堡研究院实习,disney的口号是“happy people make the world a better place.&所以公司也是想各种方法让员工开心。。。我在这里实习了差不多半年,平常零食饮料咖啡什么的就不说了,现在科技公司基本上都配备齐全了。比较独特的:公司带我们去了一次disney world (机票酒店全包。。),两周一次电影(基本上只要有disney或者pixar的电影上映,就会组织我们去看),每个月一次的主题happy hour,和各位研究大佬们一起玩beer pong还是挺有趣的。还有各种不定期的活动,比如all you can eat的棒球赛,讲解匹兹堡历史的duckie tour.如果喜欢运动的话,我们有自己的足球队,篮球队,乒乓球队壁球队,每周都会有和其他科技公司(google, uber, duolingo,...)的联赛。 &/p&&p&最后,最好的福利就是:所有迪士尼的员工(包括我们intern),都会有一张全年不限次数的迪斯尼乐园的门票,全世界所有迪士尼乐园随便进。在迪士尼住酒店吃饭买纪念品都有折扣,每工作150小时还送3张亲友票,可以带朋友一起去玩~~&/p&&p&最后的最后,这是我待过最不像办公室的办公室,到处都是玩具和涂鸦&/p&&p&&br&&/p&&p&-- 更新 --&/p&&p&好多小伙伴问还招不招人。disney research是全年都在招人的,而且实习的时间非常灵活。怎么申请这个问题比较tricky,基本上所有的人都是被推荐进去,或者在开会的时候跟disney的研究人员聊天拿到的内推吧。。&/p&&p&哦对了,我们还有自己的乐队。键盘鼓手吉他手贝斯手全都是自己人&/p&
简单说一个大家不太熟悉的公司吧,disney research.其实walt disney 是一个很大的集团,包含迪士尼乐园,迪士尼电影,皮克斯动画,漫威电影,espn,abc电视台等等。而disney research算是集团培养的一批研究人才吧。目前disney research在匹兹堡,洛杉矶和…
信息论与机器学习同为涉及计算机科学和应用数学等学科的分支领域,这两门交叉学科在起源和应用上有很多相似之处。信息论的理论体系相对成熟一些。机器学习这些年比较受欢迎,理论和应用的扩充发展速度远远更快且看不到饱和的趋势。两个方向互有交叉,但主要还是机器学习中借用信息论的方法以此拓展理论研究和应用场景,比较典型的就是借鉴信息理论创造和改进学习算法(主要是分类问题),甚至衍生出了一个新方向,信息理论学习,详细介绍和研究近况可以看这里:&a href=&///?target=http%3A//cnel.ufl.edu/research/ITL.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Information Theoretic Learning (ITL) research&i class=&icon-external&&&/i&&/a&&br&&br&以上结论,以下具体说明。&br&&br&机器学习可以根据数学原理分为两种,一种基于经验公式(错误率、边界、代价、风险、实用性、分类边缘),还有一种则是基于信息理论。&br&&br&信息论中的一些度量也可以作为学习算法的度量。Watanabe也提出过“&b&学习就是一个熵减的过程&/b&”,学习的过程也就是使信息的不确定度下降的过程。Bayesian理论也扎根于信息和优化的概念中。比起传统的经验公式为基础的机器学习,以信息理论为基础的机器学习也拥有无可比拟的优势。当少数类的样本数量接近0时,Bayesian分类器对少数类的分类趋向于完全的错误。而以互信息为学习准则的分类器则能够保护少数类,并根据各类样本数量比例自动平衡错误型和拒绝型。&br&&br&有目标随机变量&img src=&///equation?tex=T& alt=&T& eeimg=&1&&和预测结果随机变量&img src=&///equation?tex=Y& alt=&Y& eeimg=&1&&&br&&br&&img src=&/fcf09fa93251a1bad29a044f43477ce3_b.png& data-rawwidth=&608& data-rawheight=&226& class=&origin_image zh-lightbox-thumb& width=&608& data-original=&/fcf09fa93251a1bad29a044f43477ce3_r.png&&这些度量中,互信息可以用来衡量相似性,而条件熵、交叉熵和相对熵可以用来度量相异性。&br&&br&如果一个变量&img src=&///equation?tex=T& alt=&T& eeimg=&1&&在统计意义上提供真实值(也就是说&img src=&///equation?tex=%5C%5Bp%5Cleft%28+t+%5Cright%29+%3D+%5Cleft%28+%7B%7Bp_1%7D%2C+%5Cldots+%2C%7Bp_m%7D%7D+%5Cright%29%5C%5D& alt=&\[p\left( t \right) = \left( {{p_1}, \ldots ,{p_m}} \right)\]& eeimg=&1&&其中总体率&img src=&///equation?tex=%5C%5B%7Bp_i%7D%28i+%3D+1%2C+%5Cldots+%2Cm%29%5C%5D& alt=&\[{p_i}(i = 1, \ldots ,m)\]& eeimg=&1&&已知),那么它的熵&img src=&///equation?tex=H%28T%29& alt=&H(T)& eeimg=&1&&就是学习的基线,也就是说出现这种情况&img src=&///equation?tex=%5C%5BI%28T%2CY%29+%3D+H%28T%3BY%29+%3D+H%28Y%3BT%29+%3D+H%28Y%29+%3D+H%28T%29%5C%5D& alt=&\[I(T,Y) = H(T;Y) = H(Y;T) = H(Y) = H(T)\]& eeimg=&1&&或这种情况&img src=&///equation?tex=%5C%5BKL%28T%2CY%29+%3D+KL%28Y%2CT%29+%3D+H%28Y%7CT%29+%3D+H%28Y%7CT%29+%3D+0%5C%5D& alt=&\[KL(T,Y) = KL(Y,T) = H(Y|T) = H(Y|T) = 0\]& eeimg=&1&&时我们就可以说,我们就说这种方法达到了基线&img src=&///equation?tex=H%28T%29& alt=&H(T)& eeimg=&1&&&br&对于这些量的关系如下:&br&&img src=&/17fd3e445da6b90bfc28c_b.png& data-rawwidth=&509& data-rawheight=&256& class=&origin_image zh-lightbox-thumb& width=&509& data-original=&/17fd3e445da6b90bfc28c_r.png&&&br&我们记E,Rej,A,CR分别表示错误率,拒绝率,正确率和正确识别率。那么有&img src=&///equation?tex=%5C%5BCR+%2B+E+%2B+%7B%5Cmathop%7B%5Crm+Re%7D%5Cnolimits%7D+j+%3D+1%5C%5D& alt=&\[CR + E + {\mathop{\rm Re}\nolimits} j = 1\]& eeimg=&1&&和&img src=&///equation?tex=%5C%5BA+%3D+CR%2F%28CR+%2B+E%29%5C%5D& alt=&\[A = CR/(CR + E)\]& eeimg=&1&&,这时有如下关系&br&&img src=&/713cedbd8e1b_b.png& data-rawwidth=&634& data-rawheight=&210& class=&origin_image zh-lightbox-thumb& width=&634& data-original=&/713cedbd8e1b_r.png&&这里的&img src=&///equation?tex=%5C%5B%5Cleft%5C%7B+%7B%7By_k%7D%7D+%5Cright%5C%7D+%3D+%5Cleft%5C%7B+%7B%7Bt_k%7D%7D+%5Cright%5C%7D%5C%5D& alt=&\[\left\{ {{y_k}} \right\} = \left\{ {{t_k}} \right\}\]& eeimg=&1&&表示每个对应标签样本之间都相等。对于有限的数据集来说,这种形式用来表示分布和度量,用&img src=&///equation?tex=%5Cleftrightarrow+& alt=&\leftrightarrow & eeimg=&1&&表示对于等价关系的双向连接,用&img src=&///equation?tex=%5Crightarrow+& alt=&\rightarrow & eeimg=&1&&表示单向连接。&br&&ul&&li&准确分类的&b&必要条件&/b&是所有信息度量都达到了基线&img src=&///equation?tex=H%28T%29& alt=&H(T)& eeimg=&1&&&/li&&li&当所有信息度量都达到了基线&img src=&///equation?tex=H%28T%29& alt=&H(T)& eeimg=&1&&,也&b&不能充分&/b&说明这是准确分类&/li&&li&单向连接的不同位置解释了充分条件为什么存在以及充分条件是什么&/li&&/ul&当然当遇到其他问题的时候我们还可以扩展到其他信息度量,比如聚类、特征选择/提取等。当我们从相似度(或者也能转变成相似度的相异度)着手来考虑机器学习/模式识别的过程的时候,有一个重要的定理用以描述它们的关系:一般来说,在经验定义的相似度量和信息度量之间,不存在一对一的对应关系(这个结论由错误和熵的学习边界的研究给出)。&br&&br&所以,由信息度量的优化并不能保证获得经验方法完成的优化效果。&br&&br&但是,也有不少研究者猜想,在机器学习中,所有学习目标的computational representation都是可以用熵函数的优化来描述或者解释的。这个猜想给了我们很好的一个研究着力的方向。&br&&br&&br&上面的概述有点太宏大了,那么最后看一个大白话的实例:&br&&br&以互信息作为学习准则。例如以应用信息增益(归一化的互信息)构造最简结构决策树就是其中一种应用。这种基于信息理论为学习准则的原理就是将无序(标签、特征)数据转变为有序数据,以信息熵差值作为测量尺度来评价转换效果。&br&&img src=&/a34ccdc227d556ee7e640940_b.png& data-rawwidth=&451& data-rawheight=&169& class=&origin_image zh-lightbox-thumb& width=&451& data-original=&/a34ccdc227d556ee7e640940_r.png&&现在的研究有关于怎样设计目标函数,怎样处理其中互信息、经验熵的计算,互信息与分类器传统性能指标的关系……&br&&br&唔,坑开的有点大,还有具体实例也暂时没想到怎么表述,另外除了常用的几个,应用较多的如Renyi entropy也没提到,等有空了再来慢慢填坑吧,觉得我写的不好的或者等不及的可以自己看看列出的参考文献。&br&&br&References&br&[1] Hu, Bao-Gang. &Information Theory and Its Relation to Machine Learning.&&i&Proceedings of the 2015 Chinese Intelligent Automation Conference&/i&. Springer Berlin Heidelberg, 2015.&br&[2] MacKay, David JC. &i&Information theory, inference and learning algorithms&/i&. Cambridge university press, 2003.&br&[3] Principe, Jose C., Dongxin Xu, and John Fisher. &Information theoretic learning.& &i&Unsupervised adaptive filtering&/i& 1 (2000): 265-319.
信息论与机器学习同为涉及计算机科学和应用数学等学科的分支领域,这两门交叉学科在起源和应用上有很多相似之处。信息论的理论体系相对成熟一些。机器学习这些年比较受欢迎,理论和应用的扩充发展速度远远更快且看不到饱和的趋势。两个方向互有交叉,但主要…
题主你好,LSTM只能避免RNN的梯度消失(gradient vanishing);梯度膨胀(gradient explosion)不是个严重的问题,一般靠裁剪后的优化算法即可解决,比如gradient clipping(如果梯度的范数大于某个给定值,将梯度同比收缩)。下面简单说说LSTM如何避免梯度消失.&br&&br&RNN的本质是在网络内部维护了一个状态&img src=&///equation?tex=S_t& alt=&S_t& eeimg=&1&&,其中&img src=&///equation?tex=t& alt=&t& eeimg=&1&&表示时间且&img src=&///equation?tex=S_t& alt=&S_t& eeimg=&1&&可递归计算。&br&&ul&&li&传统的RNN总是用“覆写”的方式计算状态:&img src=&///equation?tex=S_t+%3D+f%28S_%7Bt-1%7D%2C+x_t%29& alt=&S_t = f(S_{t-1}, x_t)& eeimg=&1&&,其中&img src=&///equation?tex=f%28%5Ccdot%29& alt=&f(\cdot)& eeimg=&1&&表示仿射变换外面在套一个Sigmoid,&img src=&///equation?tex=x_t& alt=&x_t& eeimg=&1&&表示输入序列在时刻&img src=&///equation?tex=t& alt=&t& eeimg=&1&&的值。根据求导的链式法则,这种形式直接导致梯度被表示为连成积的形式,以致于造成梯度消失——粗略的说,很多个小于1的项连乘就很快的逼近零。&br&&/li&&li&现代的RNN(包括但不限于使用LSTM单元的RNN)使用“累加”的形式计算状态:&img src=&///equation?tex=S_t+%3D+%5Csum_%7B%5Ctau%3D1%7D%5Et+%5CDelta+S_%7B%5Ctau%7D& alt=&S_t = \sum_{\tau=1}^t \Delta S_{\tau}& eeimg=&1&&,其中的&img src=&///equation?tex=%5CDelta+S_%7B%5Ctau%7D& alt=&\Delta S_{\tau}& eeimg=&1&&显示依赖序列输入&img src=&///equation?tex=x_t& alt=&x_t& eeimg=&1&&. 稍加推导即可发现,这种累加形式导致导数也是累加形式,因此避免了梯度消失。&/li&&/ul&以上解释来自于文献[1]的第2节以及文献[2]的3.3节,希望对题主有帮助。&br&&br&&br&参考文献:&br&[1] Rafa Jozefowicz et al. An Empirical Exploration of Recurrent Network Architectures.&br&[2] Junyoung Chung et al. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling.
题主你好,LSTM只能避免RNN的梯度消失(gradient vanishing);梯度膨胀(gradient explosion)不是个严重的问题,一般靠裁剪后的优化算法即可解决,比如gradient clipping(如果梯度的范数大于某个给定值,将梯度同比收缩)。下面简单说说LSTM如何避免梯度消…
自问自答一下吧,我搜索了一下Quora,发现有两个类似问题,都是Ian Goodfellow亲自回答的,我整理了一下,发表了一篇博客 ,地址为:&a href=&/p/?refer=ml-simple& class=&internal&&知乎专栏&/a&&br&答案也复制一份吧~&br&&p&自2014年Ian Goodfellow提出&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&生成对抗网络(GAN)&i class=&icon-external&&&/i&&/a&的概念后,生成对抗网络变成为了学术界的一个火热的研究热点,Yann LeCun更是称之为”过去十年间机器学习领域最让人激动的点子”.生成对抗网络的简单介绍如下,训练一个生成器(Generator,简称G),从随机噪声或者潜在变量(Latent Variable)中生成逼真的的样本,同时训练一个鉴别器(Discriminator,简称D)来鉴别真实数据和生成数据,两者同时训练,直到达到一个纳什均衡,生成器生成的数据与真实样本无差别,鉴别器也无法正确的区分生成数据和真实数据.GAN的结构如图1所示. &img src=&/v2-61e1b1a6d1feb23a7d3c_b.png& data-rawwidth=&759& data-rawheight=&420& class=&origin_image zh-lightbox-thumb& width=&759& data-original=&/v2-61e1b1a6d1feb23a7d3c_r.png&&
图1. 生成对抗网络的基本架构&/p&&p&近两年来学术界相继提出了条件生成对抗网络(CGAN),信息生成对抗网络(InfoGAN)以及深度卷积生成对抗网络(DCGAN)等众多GAN的变种,下图2来自于去年一篇&a href=&///?target=https%3A//phillipi.github.io/pix2pix/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Image-to-Image Translation with Conditional Adversarial Nets&i class=&icon-external&&&/i&&/a&论文,我们可以看到GAN已经被引入到了各种以往深度神经网络的任务中,例如从分割图像恢复原图像(左上角第一对),给黑白图片上色(右上角第一对),根据纹理图上色(右下角第一对),另外,GAN还可以做图像超分辨率,动态场景生成等,关于GAN的更多应用请见另一篇博客&a href=&/p/?refer=ml-simple& class=&internal&&深度学习在计算机视觉领域的前沿进展&/a&. &/p&&p&&img src=&/v2-94cfce330c553eb2f5e214c3_b.png& data-rawwidth=&1396& data-rawheight=&524& class=&origin_image zh-lightbox-thumb& width=&1396& data-original=&/v2-94cfce330c553eb2f5e214c3_r.png&&
图2.Image to image图像翻译&/p&&p&&br&仔细想来,这些任务,其实都是传统的深度神经网络可以做的,例如自编码器(AutoEncodor)和卷积反卷积架构可以做到的,我们不禁要想,GAN相比传统的深度神经网络,它的优势在哪里?前段时间,我也一直比较迷惑,中文能查到的资料,就是Ian Goodfellow在&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&生成对抗网络(GAN)&i class=&icon-external&&&/i&&/a&论文最后总结的几点,如下:&/p&&h2&优点&/h2&&ul&&li&模型只用到了反向传播,而不需要马尔科夫链&/li&&li&训练时不需要对隐变量做推断&/li&&li&理论上,只要是可微分函数都可以用于构建D和G,因为能够与深度神经网络结合做深度生成式模型&/li&&li&&strong&G的参数更新不是直接来自数据样本,而是使用来自D的反向传播&/strong&(这也是与传统方法相比差别最大的一条吧)&/li&&/ul&&h2&缺点&/h2&&ul&&li&可解释性差,生成模型的分布 Pg(G)没有显式的表达&/li&&li&比较难训练,D与G之间需要很好的同步,例如D更新k次而G更新一次&/li&&/ul&&p&上面只是一个比较简单的解释,很幸运,我在Quora上查到了两个个类似问题,&a href=&///?target=https%3A///What-is-the-advantage-of-generative-adversarial-networks-compared-with-other-generative-models& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GAN与其他生成模型相比有什么优势&i class=&icon-external&&&/i&&/a&,这个问题只有一个人回答,很幸运的是,他就是Ian Goodfellow,GAN的发明人,他在Quora上的签名就是”I invented generative adversarial networks”. 而另一个问题是&a href=&///?target=https%3A///What-are-the-pros-and-cons-of-using-generative-adversarial-networks-a-type-of-neural-network& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GANs的优缺点是什么?&i class=&icon-external&&&/i&&/a&, 良心大神Goodfellow也做了回答! 我把他的两个回答翻译如下:&/p&&p&分割线 &br&—————————————————————————————————–&/p&&h2&原问题1:&strong&What is the advantage of generative adversarial networks compared with other generative models?&/strong&&/h2&&p&生成对抗网络相比其他生成模型的优点? &br&Ian Goodfellow回答: &br&—————————————————————————————————– &br&相比其他所有模型,我认为&/p&&ul&&li&从实际结果来看,GAN看起来能产生更好的生成样本&/li&&li&GAN框架可以训练任何生成网络(在理论实践中,很难使用增强学习去训练有离散输出的生成器),大多数其他架构需要生成器有一些特定的函数形式,就像输出层必须是高斯化的. 另外所有其他框架需要生成器整个都是非零权值(put non-zero mass everywhere),然而,GANs可以学习到一个只在靠近真实数据的地方(神经网络层)产生样本点的模型( GANs can learn models that generate points only on a thin manifold that goes near the data.)&/li&&li&&p&没有必要遵循任何种类的因子分解去设计模型,所有的生成器和鉴别器都可以正常工作&/p&&/li&&li&&p&相比PixelRNN, GAN生成采样的运行时间更短,GANs一次产生一个样本,然而PixelRNNs需要一个像素一个像素的去产生样本;&/p&&/li&&li&相比VAE, GANs没有变分下界,如果鉴别器训练良好,那么生成器可以完美的学习到训练样本的分布.换句话说,GANs是渐进一致的,但是VAE是有偏差的&/li&&li&相比深度玻尔兹曼机, GANs没有变分下界,也没有棘手的配分函数,样本是一次生成的,而不是重复的应用马尔科夫链来生成的&/li&&li&相比GSNs, GANs产生的样本是一次生成的,而不是重复的应用马尔科夫链来生成的;&/li&&li&相比NICE和Real NVE,GANs没有对潜在变量(生成器的输入值)的大小进行限制; &br&说实话, 我认为其他的方法也都是很了不起的,他们相比GANs也有相应的优势. &br&—————————————————————————————————–&/li&&/ul&&h2&原问题2: &strong&What are the pros and cons of using generative adversarial networks (a type of neural network)?&/strong&&/h2&&p&生成对抗网络(一种神经网络)的优缺点是什么? &br&It is known that facebook has developed a means of generating realistic-looking images via a neural network. They used “GAN” aka “generative adversarial networks”. Could this be applied generation of other things, such as audio waveform via RNN? Why or why not? &br&facebook基于神经网络开发了一种可以生成现实图片的方法,他们使用GAN,又叫做生成对抗网络,它能应用到其他事物的生成吗,例如通过RNN生成音频波形,可以吗?为什么? &br&Ian Goodfellow回答: &br&—————————————————————————————————– &br&&strong&优势&/strong&&/p&&ul&&li&GANs是一种以半监督方式训练分类器的方法,可以参考我们的&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NIPS paper&i class=&icon-external&&&/i&&/a&和&a href=&///?target=https%3A///openai/improved-gan& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&相应代码&i class=&icon-external&&&/i&&/a&.在你没有很多带标签的训练集的时候,你可以不做任何修改的直接使用我们的代码,通常这是因为你没有太多标记样本.我最近也成功的使用这份代码与谷歌大脑部门在&a href=&///?target=https%3A//qz.com/814934/ai-can-learn-from-data-without-ever-having-access-to-it/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深度学习的隐私方面&i class=&icon-external&&&/i&&/a&合写了&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一篇论文&i class=&icon-external&&&/i&&/a&&/li&&li&GANs可以比完全明显的信念网络(NADE,PixelRNN,WaveNet等)更快的产生样本,因为它不需要在采样序列生成不同的数据.&/li&&li&GANs不需要蒙特卡洛估计来训练网络,人们经常抱怨GANs训练不稳定,很难训练,但是他们比训练依赖于蒙特卡洛估计和对数配分函数的玻尔兹曼机简单多了.因为蒙特卡洛方法在高维空间中效果不好,玻尔兹曼机从来没有拓展到像ImgeNet任务中.GANs起码在ImageNet上训练后可以学习去画一些以假乱真的狗&/li&&li&相比于变分自编码器, GANs没有引入任何决定性偏置( deterministic bias),变分方法引入决定性偏置,因为他们优化对数似然的下界,而不是似然度本身,这看起来导致了VAEs生成的实例比GANs更模糊.&/li&&li&相比非线性ICA(NICE, Real NVE等,),GANs不要求生成器输入的潜在变量有任何特定的维度或者要求生成器是可逆的.&/li&&li&相比玻尔兹曼机和GSNs,GANs生成实例的过程只需要模型运行一次,而不是以马尔科夫链的形式迭代很多次.&/li&&/ul&&p&&strong&劣势&/strong&&/p&&ul&&li&训练GAN需要达到纳什均衡,有时候可以用梯度下降法做到,有时候做不到.我们还没有找到很好的达到纳什均衡的方法,所以训练GAN相比VAE或者PixelRNN是不稳定的,但我认为在实践中它还是比训练玻尔兹曼机稳定的多.&/li&&li&它很难去学习生成离散的数据,就像文本&/li&&li&相比玻尔兹曼机,GANs很难根据一个像素值去猜测另外一个像素值,GANs天生就是做一件事的,那就是一次产生所有像素, 你可以用BiGAN来修正这个特性,它能让你像使用玻尔兹曼机一样去使用Gibbs采样来猜测缺失值, &br&我在伯克利大学的课堂上前二十分钟讲到了这个问题.&a href=&///?target=https%3A///watch%3Fv%3DJRKl9QPiRok%26feature%3Dplayer_embedded& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&课程链接&i class=&icon-external&&&/i&&/a&,油管视频,请自带梯子~ &br&—————————————————————————————————– &br&以上是Ian Goodfellow的原答案的翻译,如有翻译不妥的地方,请指正! &br&最近在一篇GAN生成图片的论文中看到,作者提出使用GAN与普通的卷积反卷积相比,GAN能获得更好的泛化结果. 这里不知道是不是把鉴别器D当做一个监控器,当D的精度接近50%了,就停止训练,防止生成器过拟合. &br&GAN还有什么其他有点,希望知友们提出,然后我会加在文章中.谢谢~&/li&&/ul&
自问自答一下吧,我搜索了一下Quora,发现有两个类似问题,都是Ian Goodfellow亲自回答的,我整理了一下,发表了一篇博客 ,地址为: 答案也复制一份吧~ 自2014年Ian Goodfellow提出的概念后,生成对抗网络变成为了学术界的一个火热的研究…
我是Hao Zhang, Poseidon的开发者之一。&br&先回答题主的两个具体问题,再对Poseidon系统做一个简单介绍。&br&(1)Petuum支持多种机器学习算法的数据并行(基于Bosen的data parallelism)和模型并行(基于Strads的model parallelism),Poseidon的分布式框架是基于Bosen parameter server搭建的,所以目前的版本仅支持数据并行;&br&(2)SFB (Sufficient Factor Broadcasting)是我们组提出的基于P2P的大规模机器学习通信范式,相比较于中心化的parameter server通信,SFB有自己的优势也有自己的劣势。我们在搭建Poseidon的过程中,为了减少参数通信消耗,设计了SACP (Structura-aware communication protocol)算法。这个通信算法利用了神经网络的一些模型性质,从PS和SFB中选取最有利的通信方式,取两者之所长并避两者之所短。同时SFB本身是一个非常灵活的通信范式,支持BSP,ASP和SSP一致性模型。如果想对SFB有更多的了解,建议参考这篇论文:&a href=&///?target=http%3A//arxiv.org/pdf/.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&v2.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&下面我给Poseidon深度学习系统做一个简单的介绍。&br&相比较于Caffe,Torch, Theano, MxNet, 我们与其说Poseidon是一个深度学习框架,不如说它是一个系统架构。Poseidon的设计理念是从分布式系统出发,为所有的深度学习框架提供分布式支持,因此Poseidon可以为任何单机下的基于CPU或GPU的深度学习框架提供并行支持(比如Tensorflow),从而很好的保持了原有的用户群生态系统,从用户的角度来看,省时省力。&br&Poseidon的分布式层来源于Petuum的通用分布式机器学习框架Bosen,然而为了能更加有效的利用显卡计算、神经网络特性来加速深度学习,并为commodity cluster(如配置中等的商用集群,无infiband以太网) 提供更好的支持,我们在Bosen的基础上更进一步的搭建了:&br&(1)三层的分布式框架。这个三层式结构能够让Poseidon支持各种复杂的集群配置,比如单机多卡,多机单卡抑或是多机多卡。同时这个结构混合了基于client-server的中心化通信和基于P2P的去中心化通信,以便最大限度的减少通信消耗;&br&(2)分布式环境下对后向传播算法的重调度。这一重调度利用了近期较为流行的神经网络结构的参数分布和计算分布(如VGGNet, AlexNet),能够极大限度的使计算时间和通信时间重叠, 从而增加GPU使用率;&br&(3)如前所述,一个能够基于神经网络特性、集群结构自动调整通信方法的通信协议。这个通信协议利用了神经网络全连接层的梯度矩阵秩为1的特性,从PS和SFB中选择最优的通信方式以最大限度的减少通信消耗。&br&总结,Poseidon于2015年6月发布,属于第一批支持GPU集群的分布式深度学习框架(发布时间早于MXNet, CNTK, TensorFlow, SparkNet, YahooCaffe等), 同时Poseidon在几个公共的benchmark上的取得了不错的效果,与类似的分布式框架相比,其Scalibility甚至超过晚半年发布的SparkNet和YahooCaffe。Poseidon最致力解决的问题是尽量减少通信消耗,从而能够在non-infiband的商用集群下为分布式GPU深度学习提供广泛支持。目前我们发布的Poseidon版本的单机深度学习框架基于Caffe,在设计时我们尽量保存了Caffe的所有接口,便于Caffe用户使用。Poseidon的系统灵活性也使它能够为任何其他深度学习框架提供分布式支持。&br&&br&最后抖个机灵,Poseidon的名字是邢老师想出来的,源于海神波塞冬:因为我们希望我们的系统能够让帮助深度学习研究者让其更深...更广..更大...
我是Hao Zhang, Poseidon的开发者之一。 先回答题主的两个具体问题,再对Poseidon系统做一个简单介绍。 (1)Petuum支持多种机器学习算法的数据并行(基于Bosen的data parallelism)和模型并行(基于Strads的model parallelism),Poseidon的分布式框架是…
关键是要找个靠谱的科研狗(例如高年级博士生,奋斗在一线的青椒)来带啊,简称狗带。
关键是要找个靠谱的科研狗(例如高年级博士生,奋斗在一线的青椒)来带啊,简称狗带。
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多推荐

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

点击添加站长微信