如何评价深度学习领域圣经“花书”Deep Learning的中文版

作业离线怎么做,deeplearning。ai_科教百科_橘子知识网
作业离线怎么做,deeplearning。ai
编辑: 橘子知识网 &&&来源:用户发表&&&发布时间:&&&点击次数:45
作业离线怎么做,deeplearning。ai哟,感谢!
【知识探讨】
如何评价AI圣经“花书”《深度学习》DeepLearning
同时又由于所有的v和h满足Boltzmann 分布,人们为了解决一个问题,即O = w1*B1 + W2*B2+,一层是隐藏层(h).。首先,就可以顾名思义了,形象地表示为,输出是O。上述就是Deep Learning的基本思想,那么能不能自动地学习一些特征呢,得到.,即在任...
深度学习deeplearning4j的代码怎么学
Spark 貌似不支持直接支持 深度学习吧,你可以通过 deeplearning4j与Spark整合来支持。
科教百科相关
更多相关内容
本站内容来自网友发布,本站无法保证其部分内容的正确性,请用户一定仔细辨别。
[] &&[联系QQ:885&971&98] &
沪ICP备号&如何评价深度学习领域圣经“花书”Deep Learning的中文版? - 知乎2173被浏览182075分享邀请回答121 条评论分享收藏感谢收起谢邀。带二宝中,没有具体看代码,所以抛砖引玉一个,手机码字,有错误的话请不要见怪。&br&&br&目前的现代框架移植到移动端一般都不是太大的问题,除非需要有python等支持。比如说Caffe2在支持Facebook应用需要的layer以及全protobuf的情况下大概小于1MB,核心大概在一百多KB左右,这个数据看起来和MDL是一致的。&br&&br&目前移动端最重要的问题是如何优化。绝大多数数学库的优化都是针对server或者GPU来做的,所以移动端经常是可以跑,但是跑得不快。比起框架来,这些优化反而更加重要。&br&&br&大概列几个问题出来,有兴趣的同学读代码的时候可以重点考虑考虑,说不定你能比现在所有人都做得更好:)&br&&br&- 是否有CPU优化?是否使用NEON?是否有为mobile设计的thread pool?是否有针对CPU架构做超参数的调整(比如说thread number)?&br&&br&- 算法上是否采用了正确的path,比如说用Winograd来做卷积(类似nnpack),对小矩阵做特殊优化(类似xsmm),等等?&br&&br&- GPU上,是否有高效的kernel implementation?比如说OpenCL/GL,Metal,等等。&br&&br&- 是否有在 mobile 上非常有用的一些功能,比如说reduced precision(类似gemmlowp)&br&&br&另外广告一下,我们组非常聪颖勤奋的 &a href=&///people/102f32f4c051ac9aa94fc0& data-hash=&102f32f4c051ac9aa94fc0& class=&member_mention& data-hovercard=&p$b$102f32f4c051ac9aa94fc0&&@吴逸鸣&/a& 同学最近在参加GTC China,欢迎大家骚扰。&br&&br&然后如果你对跨平台的人工智能优化感兴趣的话,欢迎给我发简历。
谢邀。带二宝中,没有具体看代码,所以抛砖引玉一个,手机码字,有错误的话请不要见怪。 目前的现代框架移植到移动端一般都不是太大的问题,除非需要有python等支持。比如说Caffe2在支持Facebook应用需要的layer以及全protobuf的情况下大概小于1MB,核心大…
&p&通用的说,熵(Entropy)被用于描述一个系统中的不确定性(the uncertainty of a system)。在不同领域熵有不同的解释,比如热力学的定义和信息论也不大相同。&/p&&p&&b&要想明白交叉熵(Cross Entropy)的意义,可以从熵(Entropy) -& KL散度(Kullback-Leibler Divergence) -& 交叉熵这个顺序入手。&/b&当然,也有多种解释方法[1]。&/p&&p&先给出一个“接地气但不严谨”的概念表述:&/p&&ul&&li&熵:可以表示一个事件A的自信息量,也就是A包含多少信息。&/li&&li&KL散度:可以用来表示从事件A的角度来看,事件B有多大不同。&/li&&li&交叉熵:可以用来表示从事件A的角度来看,如何描述事件B。&/li&&/ul&&p&一句话总结的话:&b&KL散度可以被用于计算代价,而在特定情况下最小化KL散度等价于最小化交叉熵。而交叉熵的运算更简单,所以用交叉熵来当做代价&/b&。&/p&&p&我知道你现在看着有点晕,但请保持耐心继续往下看。&i&*为了通俗易懂,我没有严格按照数学规范来命名概念,比如文中的“事件”指的是“消息”,望各位严谨的读者理解。&/i&&/p&&h2&&b&1. 什么是熵(Entropy)?&/b&&/h2&&p&放在信息论的语境里面来说,就是一个事件所包含的信息量。我们常常听到“这句话信息量好大”,比如“昨天花了10万,终于在西二环买了套四合院”。&/p&&p&这句话为什么信息量大?&b&因为它的内容出乎意料,违反常理。&/b&由此引出:&/p&&ul&&li&&b&越不可能发生的事件信息量越大,&/b&比如“我不会死”这句话信息量就很大&b&。而确定事件的信息量就很低,&/b&比如“我是我妈生的”,信息量就很低甚至为0&b&。&/b&&/li&&li&&b&独立事件的信息量可叠加。&/b&比如“a. 张三今天喝了阿萨姆红茶,b. 李四前天喝了英式早茶”的信息量就应该恰好等于a+b的信息量,如果张三李四喝什么茶是两个独立事件。&/li&&/ul&&p&因此熵被定义为 &img src=&///equation?tex=S%28x%29+%3D+-%5Csum_%7Bi%7DP%28x_%7Bi%7D%29log_%7Bb%7DP%28x_%7Bi%7D%29& alt=&S(x) = -\sum_{i}P(x_{i})log_{b}P(x_{i})& eeimg=&1&& , &img src=&///equation?tex=x& alt=&x& eeimg=&1&& 指的不同的事件比如喝茶, &img src=&///equation?tex=P%28x_%7Bi%7D%29& alt=&P(x_{i})& eeimg=&1&& 指的是某个事件发生的概率比如和红茶的概率。对于一个一定会发生的事件,其发生概率为1, &img src=&///equation?tex=S%28x%29+%3D-+log%281%29+%2A+1+%3D+-0%2A1%3D0& alt=&S(x) =- log(1) * 1 = -0*1=0& eeimg=&1&& ,信息量为0。&/p&&h2&&b&2. 如何衡量两个事件/分布之间的不同(一):KL散度&/b&&/h2&&p&我们上面说的是对于一个随机变量x的事件A的自信息量,如果我们有另一个独立的随机变量x相关的事件B,该怎么计算它们之间的区别?&/p&&p&&b&此处我们介绍默认的计算方法:KL散度,有时候也叫KL距离,一般被用于计算两个分布之间的不同&/b&。看名字似乎跟计算两个点之间的距离也很像,但实则不然,因为KL散度&b&不具备有对称性&/b&。在距离上的对称性指的是A到B的距离等于B到A的距离。&/p&&p&举个不恰当的例子,事件A:张三今天买了2个土鸡蛋,事件B:李四今天买了6个土鸡蛋。我们定义随机变量x:买土鸡蛋,那么事件A和B的区别是什么?有人可能说,那就是李四多买了4个土鸡蛋?这个答案只能得50分,因为忘记了&坐标系&的问题。换句话说,对于张三来说,李四多买了4个土鸡蛋。对于李四来说,张三少买了4个土鸡蛋。&b&选取的参照物不同,那么得到的结果也不同&/b&。更严谨的说,应该是说我们对于张三和李四买土鸡蛋的期望不同,可能张三天天买2个土鸡蛋,而李四可能因为孩子满月昨天才买了6个土鸡蛋,而平时从来不买。&/p&&p&&b&KL散度的数学定义:&/b&&/p&&ul&&li&对于&b&离散事件&/b&我们可以定义事件A和B的差别为(2.1): &img src=&///equation?tex=%5Cbegin%7Bequation%2A%7D+D_%7BKL%7D%28A%7C%7CB%29+%3D+%5Csum_%7Bi%7DP_%7BA%7D%28x_i%29+log%5Cbigg%28%5Cfrac%7BP_%7BA%7D%28x_i%29%7D%7BP_%7BB%7D%28x_i%29%7D+%5Cbigg%29+%3D+%5Csum_%7Bi%7DP_%7BA%7D%28x_i%29log%28P_%7BA%7D%28x_i+%29%29-+P_%7BA%7D%28x_i%29log%28P_%7BB%7D%28x_i%29%29+%5Cend%7Bequation%2A%7D& alt=&\begin{equation*} D_{KL}(A||B) = \sum_{i}P_{A}(x_i) log\bigg(\frac{P_{A}(x_i)}{P_{B}(x_i)} \bigg) = \sum_{i}P_{A}(x_i)log(P_{A}(x_i ))- P_{A}(x_i)log(P_{B}(x_i)) \end{equation*}& eeimg=&1&&&/li&&li&对于&b&连续事件&/b&,那么我们只是把求和改为求积分而已(2.2)。&img src=&///equation?tex=%5Cbegin%7Bequation%2A%7D+D_%7BKL%7D%28A%7C%7CB%29+%3D+%5Cint+a%28x%29+log%5Cbigg%28%5Cfrac%7Ba%28x%29%7D%7Bb%28x%29%7D+%5Cbigg%29+%5Cend%7Bequation%2A%7D& alt=&\begin{equation*} D_{KL}(A||B) = \int a(x) log\bigg(\frac{a(x)}{b(x)} \bigg) \end{equation*}& eeimg=&1&&&/li&&/ul&&p&从公式中可以看出:&/p&&ul&&li&&b&如果&/b& &img src=&///equation?tex=P_A%3DP_B& alt=&P_A=P_B& eeimg=&1&& ,即两个事件分布完全相同,那么KL散度等于0。&/li&&li&&b&观察公式2.1,可以发现减号左边的就是事件A的熵,请记住这个发现&/b&。&/li&&li&如果颠倒一下顺序求 &img src=&///equation?tex=D_%7BKL%7D%28B%7C%7CA%29& alt=&D_{KL}(B||A)& eeimg=&1&&,那么就需要使用B的熵,答案就不一样了。&b&所以KL散度来计算两个分布A与B的时候是不是对称的,有“坐标系”的问题&/b&,&img src=&///equation?tex=D_%7BKL%7D%28A%7C%7CB%29%5Cne+D_%7BKL%7D%28B%7C%7CA%29& alt=&D_{KL}(A||B)\ne D_{KL}(B||A)& eeimg=&1&&&/li&&/ul&&p&换句话说,KL散度由A自己的熵与B在A上的期望共同决定。当使用KL散度来衡量两个事件(连续或离散),上面的公式意义就是求 A与B之间的对数差 在 A上的期望值。 &/p&&h2&&b&3. KL散度 = 交叉熵 - 熵?&/b&&/h2&&p&如果我们默认了用KL散度来计算两个分布间的不同,那还要交叉熵做什么?&/p&&p&事实上交叉熵和KL散度的公式非常相近,其实就是KL散度的后半部分(公式2.1):A和B的交叉熵 = A与B的KL散度 - A的熵。 &img src=&///equation?tex=D_%7BKL%7D%28A%7C%7CB%29+%3D+-S%28A%29%2BH%28A%2CB%29+& alt=&D_{KL}(A||B) = -S(A)+H(A,B) & eeimg=&1&&&/p&&p&对比一下这是KL散度的公式:&/p&&p&&img src=&///equation?tex=%5Cbegin%7Bequation%2A%7D+D_%7BKL%7D%28A%7C%7CB%29+%3D+%5Csum_%7Bi%7DP_%7BA%7D%28x_i%29+log%5Cbigg%28%5Cfrac%7BP_%7BA%7D%28x_i%29%7D%7BP_%7BB%7D%28x_i%29%7D+%5Cbigg%29+%3D+%5Csum_%7Bi%7DP_%7BA%7D%28x_i%29log%28P_%7BA%7D%28x_i+%29%29-+P_%7BA%7D%28x_i%29log%28P_%7BB%7D%28x_i%29%29+%5Cend%7Bequation%2A%7D& alt=&\begin{equation*} D_{KL}(A||B) = \sum_{i}P_{A}(x_i) log\bigg(\frac{P_{A}(x_i)}{P_{B}(x_i)} \bigg) = \sum_{i}P_{A}(x_i)log(P_{A}(x_i ))- P_{A}(x_i)log(P_{B}(x_i)) \end{equation*}& eeimg=&1&&&/p&&p&这是熵的公式:&/p&&p&&img src=&///equation?tex=S%28A%29+%3D+-%5Csum_%7Bi%7DP_A%28x_%7Bi%7D%29logP_A%28x_%7Bi%7D%29& alt=&S(A) = -\sum_{i}P_A(x_{i})logP_A(x_{i})& eeimg=&1&&&/p&&p&这是交叉熵公式:&/p&&p&&img src=&///equation?tex=%5Cbegin%7Bequation%2A%7D+H%28A%2CB%29%3D+-%5Csum_%7Bi%7DP_%7BA%7D%28x_i%29log%28P_%7BB%7D%28x_i%29%29+%5Cend%7Bequation%2A%7D& alt=&\begin{equation*} H(A,B)= -\sum_{i}P_{A}(x_i)log(P_{B}(x_i)) \end{equation*}& eeimg=&1&&&/p&&p&&b&此处最重要的观察是,如果&/b& &img src=&///equation?tex=S%28A%29& alt=&S(A)& eeimg=&1&&&b&是一个常量,那么&/b& &img src=&///equation?tex=D_%7BKL%7D%28A%7C%7CB%29+%3D+H%28A%2CB%29+& alt=&D_{KL}(A||B) = H(A,B) & eeimg=&1&& ,&b&也就是说KL散度和交叉熵在特定条件下等价。这个发现是这篇回答的重点。&/b&&/p&&p&同时补充交叉熵的一些性质:&/p&&ul&&li&和KL散度相同,交叉熵也不具备对称性: &img src=&///equation?tex=+H%28A%2CB%29+%5Cne+H%28B%2CA%29& alt=& H(A,B) \ne H(B,A)& eeimg=&1&& ,此处不再赘述。&/li&&li&从名字上来看,Cross(交叉)主要是用于描述这是&b&两个事件&/b&之间的相互关系,对自己求交叉熵等于熵。即 &img src=&///equation?tex=H%28A%2CA%29+%3D+S%28A%29& alt=&H(A,A) = S(A)& eeimg=&1&& ,注意只是非负而不一定等于0。&/li&&/ul&&h2&&b&*4. 另一种理解KL散度、交叉熵、熵的角度(选读)-
可跳过&/b&&/h2&&p&那么问题来了,为什么有KL散度和交叉熵两种算法?为什么他们可以用来求分布的不同?什么时候可以等价使用?&/p&&p&&b&一种信息论的解释是&/b&:&/p&&ul&&li&熵的意义是对A事件中的随机变量进行编码所需的最小字节数。&/li&&li&KL散度的意义是“额外所需的编码长度”如果我们用B的编码来表示A。&/li&&li&交叉熵指的是当你用B作为密码本来表示A时所需要的“平均的编码长度”。&/li&&/ul&&p&对于大部分读者,我觉得可以不用深入理解。感谢评论区@王瑞欣的指正,不知道为什么@不到他。&/p&&p&&b&一些对比与观察:&/b&&/p&&ul&&li&KL散度和交叉熵的不同处:交叉熵中不包括“熵”的部分&/li&&li&KL散度和交叉熵的相同处:a. 都不具备对称性 b. 都是非负的&/li&&li&&b&等价条件(章节3):当 &img src=&///equation?tex=A& alt=&A& eeimg=&1&& 固定不变时,那么最小化KL散度 &img src=&///equation?tex=D_%7BKL%7D%28A%7C%7CB%29& alt=&D_{KL}(A||B)& eeimg=&1&& 等价于最小化交叉熵&img src=&///equation?tex=+H%28A%2CB%29& alt=& H(A,B)& eeimg=&1&& 。&/b& &img src=&///equation?tex=D_%7BKL%7D%28A%7C%7CB%29+%3D+H%28A%2CB%29+& alt=&D_{KL}(A||B) = H(A,B) & eeimg=&1&&&/li&&/ul&&p&&b&既然等价,那么我们优先选择更简单的公式,因此选择交叉熵。&/b&&/p&&h2&&b&5. 机器如何“学习”?&/b&&/h2&&p&机器学习的过程就是希望在训练数据上&b&模型学到的分布&/b& &img src=&///equation?tex=P%28model%29& alt=&P(model)& eeimg=&1&& 和&b&真实数据的分布&/b& &img src=&///equation?tex=P%28real%29& alt=&P(real)& eeimg=&1&& 越接近越好,那么我们已经介绍过了....怎么最小化两个分布之间的不同呢?&b&用默认的方法,使其KL散度最小&/b&!&/p&&p&&b&但我们没有真实数据的分布,那么只能退而求其次,&/b&希望&b&模型学到的分&/b&布和&b&训练数据的分布&/b& &img src=&///equation?tex=P%28training%29& alt=&P(training)& eeimg=&1&& 尽量相同,&b&也就是把训练数据当做模型和真实数据之间的代理人&/b&。假设训练数据是从总体中独立同步分布采样(Independent and identically distributed sampled)而来,那么我们可以利用最小化训练数据的经验误差来降低模型的泛化误差。简单说:&/p&&ul&&li&最终目的是希望学到的模型的分布和真实分布一致: &img src=&///equation?tex=P%28model%29+%5Csimeq+P%28real+%29& alt=&P(model) \simeq P(real )& eeimg=&1&&&/li&&li&但真实分布是不可知的,我们只好假设 训练数据 是从真实数据中独立同分布采样而来: &img src=&///equation?tex=P%28training%29+%5Csimeq+P%28real+%29& alt=&P(training) \simeq P(real )& eeimg=&1&&&/li&&li&退而求其次,我们希望学到的模型分布至少和训练数据的分布一致 &img src=&///equation?tex=P%28model%29+%5Csimeq+P%28training%29& alt=&P(model) \simeq P(training)& eeimg=&1&&&/li&&/ul&&p&由此非常理想化的看法是如果&b&模型(左)&/b&能够学到&b&训练数据(中)&/b&的分布,那么应该近似的学到了&b&真实数据(右)&/b&的分布: &img src=&///equation?tex=P%28model%29+%5Csimeq+P%28training%29+%5Csimeq+P%28real%29& alt=&P(model) \simeq P(training) \simeq P(real)& eeimg=&1&&&/p&&h2&&b&6. 为什么交叉熵可以用作代价?&/b&&/h2&&p&接着上一点说,最小化模型分布 &img src=&///equation?tex=P%28model%29& alt=&P(model)& eeimg=&1&& 与 训练数据上的分布 &img src=&///equation?tex=P%28training%29& alt=&P(training)& eeimg=&1&& 的差异 等价于 最小化这两个分布间的KL散度,也就是最小化 &img src=&///equation?tex=KL%28P%28training%29%7C%7CP%28model%29%29& alt=&KL(P(training)||P(model))& eeimg=&1&& 。&/p&&p&比照第四部分的公式:&/p&&ul&&li&此处的A就是数据的真实分布: &img src=&///equation?tex=P%28training%29& alt=&P(training)& eeimg=&1&&&/li&&li&此处的B就是模型从训练数据上学到的分布: &img src=&///equation?tex=P%28model%29& alt=&P(model)& eeimg=&1&&&/li&&/ul&&p&巧的是,&b&训练数据的分布A是给定的&/b&。那么根据&b&我们在第四部分说的,因为A固定不变,那么求 &img src=&///equation?tex=D_%7BKL%7D%28A%7C%7CB%29& alt=&D_{KL}(A||B)& eeimg=&1&& 等价于求 &img src=&///equation?tex=H%28A%2CB%29& alt=&H(A,B)& eeimg=&1&& ,也就是A与B的交叉熵&/b&。&b&得证,交叉熵可以用于计算“学习模型的分布”与“训练数据分布”之间的不同。当交叉熵最低时(等于训练数据分布的熵),我们学到了“最好的模型”。&/b&&/p&&p&&b&但是,完美的学到了训练数据分布往往意味着过拟合,因为训练数据不等于真实数据,我们只是假设它们是相似的,而一般还要假设存在一个高斯分布的误差,是模型的泛化误差下线。&/b&&/p&&h2&&b&7. 总结&/b&&/h2&&p&因此在评价机器学习模型时,我们往往不能只看训练数据上的误分率和交叉熵,还是要关注测试数据上的表现。如果在测试集上的表现也不错,才能保证这不是一个过拟合或者欠拟合的模型。交叉熵比照误分率还有更多的优势,因为它可以和很多概率模型完美的结合。&/p&&p&&b&所以逻辑思路是,为了让学到的模型分布更贴近真实数据分布,我们最小化 模型数据分布 与 训练数据之间的KL散度,而因为训练数据的分布是固定的,因此最小化KL散度等价于最小化交叉熵。&/b&&/p&&p&&b&因为等价,而且交叉熵更简单更好计算,当然用它咯 ?o?o?&/b&&/p&&hr&&p&[1] 不同的领域都有不同解释,更传统的机器学习说法是似然函数的最大化就是交叉熵。&b&正所谓横看成岭侧成峰,大家没必要非说哪种思路是对的,有道理就好&/b&。&/p&
通用的说,熵(Entropy)被用于描述一个系统中的不确定性(the uncertainty of a system)。在不同领域熵有不同的解释,比如热力学的定义和信息论也不大相同。要想明白交叉熵(Cross Entropy)的意义,可以从熵(Entropy) -& KL散度(Kullback-Leibler Divergence) …
&p&深度学习在无人驾驶领域主要用于图像处理, 也就是摄像头上面。 当然也可以用于雷达的数据处理, 但是基于图像极大丰富的信息以及难以手工建模的特性, 深度学习能最大限度的发挥其优势。
&p&其他答案大概介绍了一下深度学习可以在无人驾驶中用来干什么, 我就当下搬运工, 介绍一下全球摄像头领域的扛把子,
以色列的mobileye公司是怎么在他们的产品中运用深度学习的。 深度学习可以用于感知, 比如很多答案已经介绍了的, 识别周围环境, 各种对车辆又用的信息; 深度学习也可以用于决策, 比如AlphaGo的走子网络(Policy Network), 就是直接用DNN训练, 如何基于当前状态作出决策。 &/p&
&p&首先是环境识别方面:&/p&
&p&mobileye把他们识别方面的工作主要分为三部分, 物体识别, 可行驶区域检测, 行驶路径识别。&/p&
&ol&&li&&b&物体识别&/b&&/li&
&/ol&&p&一般的物体识别是这样子的:&/p&&p&&img src=&/v2-33db3ffe925abfa4d2088_b.png& data-rawwidth=&1034& data-rawheight=&339& class=&origin_image zh-lightbox-thumb& width=&1034& data-original=&/v2-33db3ffe925abfa4d2088_r.png&&有一个长方形框框能识别出来车在哪里, 很好,很不错, 但是Mobileye出来的是这样子的:&br&&/p&&img src=&/v2-ee670e94c5bd43dbadc3edff_b.png& data-rawwidth=&885& data-rawheight=&522& class=&origin_image zh-lightbox-thumb& width=&885& data-original=&/v2-ee670e94c5bd43dbadc3edff_r.png&&&p&以及这样子的:&/p&&img src=&/v2-65afe76e871ca366dc307_b.png& data-rawwidth=&823& data-rawheight=&459& class=&origin_image zh-lightbox-thumb& width=&823& data-original=&/v2-65afe76e871ca366dc307_r.png&&&p& 很明显的区别就是Mobileye可以实现非常准确的车的正面以及侧面的检测, 以及完全正确的区分左边侧面以及右边侧面(黄色和蓝色)。&/p&&img src=&/v2-ad9564efe1b4aa22ff973d_b.png& data-rawwidth=&410& data-rawheight=&110& class=&content_image& width=&410&&&p&这两种检测结果的信息量是完全不同的, 左边这个检测结果告诉我们什么位置大概有一辆车, 但是他的具体位置, 车的朝向信息完全没有。 但是从右边的检测结果, 就可以相对精确的估算出来车的位置, 行驶方向等重要信息, 跟我们人看到后可以推测的信息差不多了。 &/p&&p&这样出众的结果, 对于较近距离的车, 用其他基于几何的方法, 多跟踪几帧, 可能可以做到接近的效果, 但是留意远处很小的车, 结果也完全正确, 这就只可能是深度学习的威力了。 可惜Mobileye创始人兼CTO总爱四处显摆他们技术怎么怎么牛, 之前也常发论文共享一些技术, 但是在车辆识别怎么建模神经网络可以输出这么精确带orientation的bounding box, 他只是微微一笑, 说这里面有很多tricks。。&/p&&p&&b&如果谁知道学术界有类似的工作, 请私信告诉我, 拜谢&/b&&/p&&p&&b&2.可行驶区域(free
space)检测&/b&&/p&&p&深度学习以前的可行驶区域检测, 有两种方法, 一是基于双目摄像头立体视觉或者Structure from motion, 二是基于局部特征,马尔科夫场之类的图像分割。 结果是这样的:&/p&&img src=&/v2-b96896efb5ec6db5b93adb7664dede83_b.png& data-rawwidth=&740& data-rawheight=&281& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&/v2-b96896efb5ec6db5b93adb7664dede83_r.png&&&p&绿色部分是可行驶区域检测, 看着还不错对不对? 但是注意左边的绿色部分涵盖了马路倒鸭子以及人行道部分, 因为倒鸭子也就比路面高十厘米左右, 靠立体视觉是很难跟马路区分开来的。 而传统的图像分割也很困难, 因为局部特征上, 倒鸭子上和路面的颜色及其接近。区分二者需要对环境整个context的综合理解(赶时间, 所以可能开始夹英文了)。 &/p&&p&自从有了深度学习可以做scene
understanding之后, 这个问题终于被攻克了:&/p&&img src=&/v2-e97c9fb85f41cadcd886e396d3dd7aa9_b.png& data-rawwidth=&953& data-rawheight=&552& class=&origin_image zh-lightbox-thumb& width=&953& data-original=&/v2-e97c9fb85f41cadcd886e396d3dd7aa9_r.png&&&p&绿色部分还是可行驶区域, 马路右边的路肩跟路面的高度相差无几, 颜色texture也是一模一样, 用立体视觉的方法不可能区分开来。 &/p&&p&而且不仅仅可行驶区域的边界准确检测出来了, 连为什么是边界的原因也可以检测出来:&/p&&img src=&/v2-ee03da8e7e_b.png& data-rawwidth=&1040& data-rawheight=&568& class=&origin_image zh-lightbox-thumb& width=&1040& data-original=&/v2-ee03da8e7e_r.png&&&p&红色表示是物体跟道路的边界, 鼠标位置那里表示的是Guard rail(护栏),而上一张图应该是Flat。 这样在正常情况下知道哪些区域是可以行驶的,而在紧急情况下, 也可以知道哪里是可以冲过去的。 &/p&&p&当然, 相较于第一部分, 这一部分的原理是比较清楚的, 就是基于深度学习的scene understanding。 学术界也有蛮不错的结果了, 比如下图(Cambridge的工作),路面跟倒鸭子就分的很好(蓝色跟紫色):&/p&&img src=&/v2-1bb4abf61adef63_b.png& data-rawwidth=&1462& data-rawheight=&673& class=&origin_image zh-lightbox-thumb& width=&1462& data-original=&/v2-1bb4abf61adef63_r.png&&&br&&p&&b&3.行驶路径检测&/b&&/p&&p&这一部分工作要解决的问题主要是在没有车辆线或者车辆线状况很差的情况下, 车怎么开的问题。 如果所有的路况都如下:&/p&&img src=&/v2-4911960ddfec6179430fad_b.png& data-rawwidth=&466& data-rawheight=&229& class=&origin_image zh-lightbox-thumb& width=&466& data-original=&/v2-4911960ddfec6179430fad_r.png&&&p&那当然很完美, 但是由于路况或者天气, 有些时候车辆线是很难检测到的。 &/p&&p&深度学习为此提供了一个解决办法。 我们可以用人在没有车道线的路况下开车的数据来训练神经网络, 训练好之后, 神经网络在没有车道线的时候也能大概判断未来车可以怎么开。 这一部分原理也是比较清楚的, 找一个人开车, 把整个开车的过程摄像头的录像保存下来, 把人开车的策略车辆的行驶路径也保存下来。 用每一帧图片作为输入,车辆未来一段时间(很短的时间)的路径作为输出训练神经网络。 之前很火的Comma公司, 黑苹果手机那个创立的, 做的无人驾驶就是这种思路, 因为其可靠性以及原创性还被LeCun鄙视了。 &/p&&p&结果如下,可以看到神经网络提供的行驶路径基本上符合人类的判断:&/p&&img src=&/v2-7ec88a7e9e91f8a70fdeca_b.png& data-rawwidth=&715& data-rawheight=&398& class=&origin_image zh-lightbox-thumb& width=&715& data-original=&/v2-7ec88a7e9e91f8a70fdeca_r.png&&&p&更极端的情况:&/p&&img src=&/v2-e1a64cd2e5e0122b5caa03da1d8883c7_b.png& data-rawwidth=&960& data-rawheight=&485& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/v2-e1a64cd2e5e0122b5caa03da1d8883c7_r.png&&&p&绿色是预测的行驶路径。没有深度学习, 这种场景也是完全不可能的。 当然, 我在最近的另外一个答案里面提到了, 不能完全依靠神经网络来做路径规划, Mobileye也是综合传统的车道线检测, 上面提到的场景分割检测到的护栏等, 这一部分的神经网络输出等等, 做信息融合最后得到一个稳定的完美的行驶路径。 &/p&&p&不早了先写这么点, 剩下的回头补充。 &/p&
深度学习在无人驾驶领域主要用于图像处理, 也就是摄像头上面。 当然也可以用于雷达的数据处理, 但是基于图像极大丰富的信息以及难以手工建模的特性, 深度学习能最大限度的发挥其优势。
其他答案大概介绍了一下深度学习可以在无人驾驶中用来干什么, …
理解模型的基本假设,看自己的数据是否符合这种假设。任何模型都是有某种假设的,如果数据不符合这种假设,就不太可能学出有意义的模型并用于预测。&br&&br&比如LDA(主题模型),假设是在同样一批文档中经常共现的词,语义上往往是相关的。这种特性不仅在自然语言中成立,在一些领域,比如每个人经常访问的网址集合,可能也是成立的,所以LDA也可以拿过去用。但如果数据不符合这个特性,套用LDA就是没有意义的,比如每个球队里的队员,可能并没有因为属于一个球队而具有什么相似性。&br&&br&再举个例子,CNN(卷积神经网络),它的基本假设是特征的不同维度之间有局部相关性,卷积操作可以抓住这只局部相关性,形成新的特征。比如自然语言里,有重复出现的bigram,或者图像里代表性的局部像素块。不满足这种局部相关性的数据,比如收到的邮件序列,这种局部相关性很弱,那用CNN就不能抓到有用的特征。&br&&br&最后,高斯copula,在量化金融里曾被广泛使用,把债券之间非高斯的相关性用copula转化成高斯然后拟合。然而这个模型隐含的假设是这种相关性符合瘦尾分布(thin tailed distribution),即罕见事件发生的概率非常非常低。这个不合理假设导致对黑天鹅事件概率严重低估,曾被视为2008年金融危机的根源之一。
理解模型的基本假设,看自己的数据是否符合这种假设。任何模型都是有某种假设的,如果数据不符合这种假设,就不太可能学出有意义的模型并用于预测。 比如LDA(主题模型),假设是在同样一批文档中经常共现的词,语义上往往是相关的。这种特性不仅在自然语言…
&p&资历不深,入坑一年的我仅从个人角度谈谈理解,希望能抛砖引玉。&/p&&p&GAN对于人工智能的意义,可以从它名字的三部分说起:&b&G&/b&enerative &b&A&/b&dversarial &b&N&/b&etworks。为了方便讲述,也缅怀过去两周在某论坛上水掉的时间,我先从Networks讲起。&/p&&p&&b&Networks:(深度)神经网络&/b&&/p&&p&自从12年AlexNet横空出世后,神经网络俨然已成为现在learning的主流。比起贝叶斯学派的强先验假设(priori),SVM在核函数(kernel)上的反复钻研,神经网络不需要科研者过多关注细节,只需要提供好海量的数据和设置好超参数,便能达到不错的效果。用武侠小说的方式来说,便是各大门派高手潜心十余载修炼一阳指/九阴真经/麒麟臂等神功,比试时却发现有一无名小卒内力浩瀚如海,出手虽毫无章法可言,但在内功的加持下,轻松打得众人抬不起头。&/p&&p&Deep系列的算法不仅在众多benchmark上霸据榜首,其衍生应用也给人工智能带来了一股新的浪潮,例如创作艺术品(Gatys 的 Neural Alorightm for Artistic Style),AlphaGo(CNN估值 + 蒙特卡洛剪枝),高质量的机器翻译(Attention + seq2seq)等等。这些衍生应用在部分任务上,已经能媲美人类中的专家,让人不禁浮想强人工智能(strong AI)的到来。&u&然而&/u&,纵使深度网络(Deep Neural Networks)再强大,它也有自己的局限,生成模型上的不尽人意便是其中之一。&/p&&p&&b&Generative(Model):生成模型&/b&&/p&&p&机器学习的模型可大体分为两类,生成模型(Generative Model)和判别模型(Discriminative Model)。判别模型需要输入变量&img src=&///equation?tex=x& alt=&x& eeimg=&1&& ,通过某种模型来预测&img src=&///equation?tex=p%28y%7Cx%29& alt=&p(y|x)& eeimg=&1&& 。生成模型是给定某种隐含信息,来随机产生观测数据。举个简单的例子,&/p&&ul&&li&判别模型:给定一张图,判断这张图里的动物是猫还是狗&/li&&li&生成模型:给一系列猫的图片,生成一张新的猫咪(不在数据集里)&/li&&/ul&&p&众所周知的imagenet-1000图像分类,自动驾驶的图片语义分割,人体骨架点的预测都属于判别模型,即给定输入预测某种特征。实际上12~14年的大部分工作都属于判别模型,为什么呢,原因之一便是判别模型的损失函数(loss)方便定义。&/p&&p&回到根源,什么是机器学习?一句话来概括就是,在&b&训练&/b&过程中给予&b&回馈&/b&,使得&b&结果接近&/b&我们的&b&期望&/b&。对于分类问题(classification),我们希望loss在接近bound以后,就不要再有变化,所以我们选择交叉熵(Cross Entropy)作为回馈;在回归问题(regression)中,我们则希望loss只有在两者一摸一样时才保持不变,所以选择点之间的欧式距离(MSE)作为回馈。损失函数(回馈)的选择,会明显影响到训练结果的质量,是设计模型的重中之重。这五年来,神经网络的变种已有不下几百种,但损失函数却寥寥无几。例如caffe的官方文档中,只提供了八种标准损失函数 &a href=&///?target=http%3A//caffe.berkeleyvision.org/tutorial/layers.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Caffe | Layer Catalogue&i class=&icon-external&&&/i&&/a&。&/p&&p&对于判别模型,损失函数是容易定义的,因为输出的目标相对简单。但对于生成模型,损失函数的定义就不是那么容易。例如对于NLP方面的生成语句,虽然有BLEU这一优秀的衡量指标,但由于难以求导,以至于无法放进模型训练;对于生成猫咪图片的任务,如果简单地将损失函数定义为“和已有图片的欧式距离”,那么结果将是数据库里图片的诡异混合,效果惨不忍睹。当我们希望神经网络画一只猫的时候,显然是希望这张图有一个动物的轮廓、带质感的毛发、和一个霸气的眼神,而不是冷冰冰的欧式距离最优解。如何将我们对于猫的期望放到模型中训练呢?这就是GAN的Adversarial部分解决的问题。&/p&&p&&b&Adversarial:对抗(互怼 )&/b&&/p&&p&在generative部分提到了,我们对于猫(生成结果)的期望,往往是一个暧昧不清,难以数学公理化定义的范式。但等一下,说到处理暧昧不清、难以公理化的问题,之前提到的判别任务不也是吗?比如图像分类,一堆RGB像素点和最后N类别的概率分布模型,显然是无法从传统数学角度定义的。那为何,&u&不把生成模型的回馈部分,交给判别模型呢&/u&?这就是Goodfellow天才般的创意--他将机器学习中的两大类模型,&u&&b&G&/b&enerative和&b&D&/b&iscrimitive给紧密地联合在了一起&/u&。&/p&&p&模型一览&/p&&br&&img src=&/v2-5dfe9e846a1ad37160dfdad80f0b784c_b.png& data-rawwidth=&384& data-rawheight=&453& class=&content_image& width=&384&&&br&&p&对抗生成网络主要由生成部分G,和判别部分D组成。训练过程描述如下&/p&&ol&&li&输入噪声(隐藏变量)&img src=&///equation?tex=z& alt=&z& eeimg=&1&&&/li&&li&通过生成部分&img src=&///equation?tex=G& alt=&G& eeimg=&1&& 得到&img src=&///equation?tex=x_%7Bfake%7D%3DG%28z%29& alt=&x_{fake}=G(z)& eeimg=&1&&&/li&&li&从真实数据集中取一部分真实数据&img src=&///equation?tex=x_%7Breal%7D& alt=&x_{real}& eeimg=&1&&&/li&&li&将两者混合&img src=&///equation?tex=x%3Dx_%7Bfake%7D+%2B+x_%7Breal%7D& alt=&x=x_{fake} + x_{real}& eeimg=&1&&&/li&&li&将数据喂入判别部分&img src=&///equation?tex=D& alt=&D& eeimg=&1&& ,给定标签&img src=&///equation?tex=x_%7Bfake%7D%3D0& alt=&x_{fake}=0& eeimg=&1&&,&img src=&///equation?tex=x_%7Breal%7D%3D1& alt=&x_{real}=1& eeimg=&1&& (简单的二类分类器)&/li&&li&按照分类结果,回传loss&/li&&/ol&&p&在整个过程中,&img src=&///equation?tex=D& alt=&D& eeimg=&1&& 要尽可能的使&img src=&///equation?tex=D%28G%28z%29%29%3D0& alt=&D(G(z))=0& eeimg=&1&&,&img src=&///equation?tex=D%28x_%7Breal%7D%29%3D1& alt=&D(x_{real})=1& eeimg=&1&& (火眼晶晶,不错杀也不漏杀)。而&img src=&///equation?tex=G& alt=&G& eeimg=&1&& 则要使得&img src=&///equation?tex=D%28G%28z%29%29%3D1& alt=&D(G(z))=1& eeimg=&1&& ,即让生成的图片尽可能以假乱真。整个训练过程就像是两个玩家在相互对抗,也正是这个名字Adversarial的来源。在论文中&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Generative Adversarial Networks&i class=&icon-external&&&/i&&/a& ,Goodfellow从理论上证明了该算法的收敛性,以及在模型收敛时,生成数据具有和真实数据相同的分布(保证了模型效果)。&/p&&p&从研究角度,GAN给众多生成模型提供了一种新的训练思路,催生了许多后续作品。例如根据自己喜好定制二次元妹子(逃),根据文字生成对应描述图片(&a href=&///?target=https%3A///Newmu/dcgan_code& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Newmu/dcgan_code&i class=&icon-external&&&/i&&/a&, &a href=&///?target=https%3A///hanzhanggit/StackGAN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hanzhanggit/StackGAN&i class=&icon-external&&&/i&&/a&),甚至利用标签生成3D宜家家居模型(&a href=&///?target=https%3A///zck119/3dgan-release& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&zck119/3dgan-release&i class=&icon-external&&&/i&&/a&),这些作品的效果无一不令人惊叹。同时,难人可贵的是这篇论文有很强的数学论证,不同于前几年的套模型的结果说话,而是从理论上保证了模型的可靠性。虽然目前训练还时常碰到困难,后续已有更新工作改善该问题(WGAN, Loss Sensetive GAN, Least Square GAN),相信终有一日能克服。&/p&&p&从通用人工智能高层次来看,这个模型率先使用神经网络来指导神经网络,颇有一种奇妙的美感:仿佛是在辩日的两小儿一样,一开始两者都是懵懂的幼儿,但通过观察周围,相互讨论,逐渐进化出了对外界的认知。 这不正是吾等所期望的终极智能么 -- 机器的知识来源不再局限于人类,而是可以彼此之间相互交流相互学习。也难怪Yann Lecun赞叹GAN是机器学习近十年来最有意思的想法 &a href=&///?target=https%3A///%40devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/@devnag/gene&/span&&span class=&invisible&&rative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 。&/p&
资历不深,入坑一年的我仅从个人角度谈谈理解,希望能抛砖引玉。GAN对于人工智能的意义,可以从它名字的三部分说起:Generative Adversarial Networks。为了方便讲述,也缅怀过去两周在某论坛上水掉的时间,我先从Networks讲起。Networks:(深度)神经网络…
更新一段话,Quora上对于Yoshua Bengio的最新访谈,关于一个问题:&br&&strong&对于进入机器学习领域的年轻研究人员,你有什么建议?(&/strong&What advise do you have for young researchers entering the field of Machine Learning?)&br&他回答到:&br&Make sure you have a strong training in math and computer science (including the practical part, i.e., programming). Read books and (lots of) papers but that is not enough: you need to develop your intuitions by (a) &b&&i&programming a bunch of learning algorithms yourself, e.g., trying to reproduce existing papers&/i&&/b&, and (b) by learning to tune hyper-parameters and explore variants (in architecture, objective function, etc.), e.g., by participating in competitions or trying to improve on published results once you have been able to reproduce them. Then, find collaborators with whom you can brainstorm about ideas and share the workload involved in exploring and testing new ideas.
Working with an existing group is ideal, of course, or recruit your own students to work on this with you, if you are a faculty.&br&---------------------------------------原答案-------------------------------------------&br&实现很有必要,甚至一定要。都实现一遍倒是不必。&br&&br&1. 在掌握基本的算法流程、加深对算法的理解之外,实现机器学习算法能够帮助我们建立起一种直觉:数据--模型之间的关系。这一点可能有点玄学的味道...稍微往黑了点说,就是调参的直觉、模型选择的直觉、特征选择/设计的直觉等...经验有的时候是事半功倍的效果。&br&&br&2. 在实际应用场景中,其实经常会遇到需要实现一些特殊设计的算法。比如要实现某篇paper中的算法/或者自己跑实验,一般情况下这些算法并不是(甚至肯定不是)通用算法包提供的算法,一定要自己实现。这样的时候,如果以前有实现过基础的算法的经验,会有很大帮助。&br&&br&3. 实现基本的算法,帮助掌握算法流程。这样会更容易应对新的编程框架。&br&&br&4. 其实很多模型也有很多种解法。拿LR来说,常见的一阶的Gradient Descent、二阶的BFGS/L-BFGS之外(这些是好多库的默认方法),一阶的Back-tracking Line Search方法、Nesterov's Line Search等方法,实现起来(特别是分布式实现)比较复杂,让没有自己实现过任何机器学习算法的人来写。。。还是算了吧。。。&br&&br&5. 算法的细节:优化、高效计算等(矩阵乘法的加速等)在实际工作中是蛮重要的。因为机器学习在大规模数据下最大的挑战就是如何『算』得更快:收敛速度/计算时间、计算资源/机器开销等。所以得要知道在哪里有优化的空间才行。&br&&br&6. 但是全部实现一遍确实没必要,不过常用的算法的基本版还是要尽量都写一写的。&br&&br&。。。&br&其实第一条是最重要的。。。&br&&br&说了这么多有没有觉得不写一遍简直有罪?&br&&br&*随时修正答案,欢迎指出任何不足的地方!
更新一段话,Quora上对于Yoshua Bengio的最新访谈,关于一个问题: 对于进入机器学习领域的年轻研究人员,你有什么建议?(What advise do you have for young researchers entering the field of Machine Learning?) 他回答到: Make sure you have a str…
&p&现如今构建人工智能或机器学习系统比以往任何时候都要更加容易。普遍存在的尖端开源工具如 TensorFlow、Torch 和 Spark,再加上通过 AWS 的大规模计算力、Google Cloud 或其他供应商的云计算,这些都意味着你可以在下午休闲时间使用笔记本电脑去训练出最前沿的机器学习模型。&/p&&p&
虽然不算是人工智能训练的最前沿,但人工智能的无名英雄确实就是数据,许多许多标注或未标注的数据。研究部门和公司也都认识到数据民主化是加快人工智能的必要步骤。&/p&&p&
然而,涉及到机器学习或人工智能的大多数产品强烈依赖于那些通常没有开放的私有数据集,而本文将指出解决这种困境的办法。&/p&&p&
事实上,我们很难用一篇文章来说明哪些开放数据集是有用的,因为那些有用的开放数据集必须是可概念证明的,而什么数据集对产品或确认特征是有用的,在你收集你自己所有数据之前是不知道的。&/p&&p&
重要的是,如果数据集有良好的表现并不能保证其训练的机器学习系统在实际产品场景中表现良好。许多人在构建人工智能系统时常常忘了构建一个新人工智能解决方案或产品最困难的部分不是人工智能本身或算法,通常最困难的地方是数据收集和标注。标准数据集可以作为验证或构建更优良解决办法的良好起点。
&/p&&p&&b&计算机视觉&/b&&/p&&p&MNIST: 最通用的健全检查。25x25 的数据集,中心化,B&W 手写数字。这是个容易的任务——但是在 MNIST 有效,不等同于其本身是有效的。
地址:&a href=&///?target=http%3A///projects/mnist-in-csv/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/projects/m&/span&&span class=&invisible&&nist-in-csv/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&CIFAR 10 & CIFAR 100: 32x32 彩色图像。虽不再常用,但还是用了一次,可以是一项有趣的健全检查。
地址:&a href=&///?target=https%3A//www.cs.toronto.edu/%7Ekriz/cifar.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&cs.toronto.edu/~kriz/ci&/span&&span class=&invisible&&far.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&ImageNet: 新算法实际上的图像数据集。很多图片 API 公司从其 REST 接口获取标签,这些标签被怀疑与 ImageNet 的下一级 WordNet 的 1000 个范畴很接近。
地址:&a href=&///?target=http%3A//image-net.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&image-net.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&LSUN: 场景理解具有很多辅助任务(房间布置评估、显著性预测等)和一个相关竞争。
地址:&a href=&///?target=http%3A//lsun.cs.princeton.edu/2016/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&lsun.cs.princeton.edu/2&/span&&span class=&invisible&&016/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&PASCAL VOC: 通用图像分割/分类:对于构建真实世界的图像注释毫无用处,对于基线则意义重大。
地址:&a href=&///?target=http%3A//host.robots.ox.ac.uk/pascal/VOC/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&host.robots.ox.ac.uk/pa&/span&&span class=&invisible&&scal/VOC/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&SVHN: 来自谷歌街景视图(Google Street View)的门牌号数据集。把这想象成荒野之中的周期性 MNIST。
地址:&a href=&///?target=http%3A//ufldl.stanford.edu/housenumbers/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ufldl.stanford.edu/hous&/span&&span class=&invisible&&enumbers/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&MS COCO: 带有一个相关性竞争的通用图像理解/字幕。
地址:&a href=&///?target=http%3A//mscoco.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&mscoco.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Visual Genome: 非常详细的视觉知识库,并带有 100K 图像的深字幕。
地址:&a href=&///?target=http%3A//visualgenome.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&visualgenome.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Labeled Faces in the Wild:通过名称标识符,已经为被裁剪的面部区域(用 Viola-Jones)打了标签。现有人类的子集在数据集中有两个图像。对于这里做面部匹配系统训练的人来说,这很正常。
地址:&a href=&///?target=http%3A//vis-www.cs.umass.edu/lfw/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&vis-www.cs.umass.edu/lf&/span&&span class=&invisible&&w/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&&b&自然语言&/b&
文本分类数据集(2015 年来自 Zhang 等人):一个用于文本分类的合 8 个数据集为 1 个的大型数据集。这些是用于新文本分类的最常被报道的基线。样本大小从 120K 到 3.6M, 问题从 2 级到 14 级。数据集来自 DBPedia、Amazon、Yelp、Yahoo!、Sogou 和 AG。
地址&a href=&///?target=https%3A///drive/u/0/folders/0Bz8a_Dbh9Qhbfll6bVpmNUtUcFdjYmF2SEpmZUZUcVNiMUw1TWN6RDV3a0JHT3kxLVhVR2M& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/drive/&/span&&span class=&invisible&&u/0/folders/0Bz8a_Dbh9Qhbfll6bVpmNUtUcFdjYmF2SEpmZUZUcVNiMUw1TWN6RDV3a0JHT3kxLVhVR2M&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&WikiText:来自由 Salesforce MetaMind 精心策划的维基百科文章中的大型语言建模语料库。
地址:&a href=&///?target=http%3A//metamind.io/research/the-wikitext-long-term-dependency-language-modeling-dataset/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&metamind.io/research/th&/span&&span class=&invisible&&e-wikitext-long-term-dependency-language-modeling-dataset/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Question Pairs:从包含重复/语义相似性标签的 Quora 释放出来的第一个数据集。
地址:&a href=&///?target=https%3A///First-Quora-Dataset-Release-Question-Pairs& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/First-Qu&/span&&span class=&invisible&&ora-Dataset-Release-Question-Pairs&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&SQuAD: 斯坦福大学问答数据集(The Stanford Question Answering Dataset)——一个被广泛应用于问题回答和阅读理解的数据集,其中每个问题的答案形式是文本的一个片段或碎片。
地址:&a href=&///?target=https%3A//rajpurkar.github.io/SQuAD-explorer/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&rajpurkar.github.io/SQu&/span&&span class=&invisible&&AD-explorer/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&CMU Q/A Dataset: 手动生成的仿真陈述问题/回答与维基百科文章的难度评级相对应。
地址:&a href=&///?target=http%3A//www.cs.cmu.edu/%7Eark/QA-data/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cs.cmu.edu/~ark/QA-data&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Maluuba Datasets: 用于状态性自然语言理解研究的人工生成的精密数据集。
地址:&a href=&///?target=https%3A///& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Billion Words: 大型,有统一目标的语言建模数据集。常被用来训练诸如 word2vec 或 Glove 的分布式词表征。
地址:&a href=&///?target=http%3A//www.statmt.org/lm-benchmark/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&statmt.org/lm-benchmark&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Common Crawl: PB 级规模的网络爬行——常被用来学习词嵌入。可从 Amazon S3 上免费获取。由于它是 WWW 的抓取,同样也可以作为网络数据集来使用。
地址:&a href=&///?target=http%3A//commoncrawl.org/the-data/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&commoncrawl.org/the-dat&/span&&span class=&invisible&&a/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&bAbi: 来自 FAIR(Facebook AI Research)的合成式阅读理解与问答数据集。
地址:&a href=&///?target=https%3A///projects/babi/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/project&/span&&span class=&invisible&&s/babi/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&The Children’s Book Test:从来自古登堡计划的童书中提取(问题+上下文,回答)组的基线。这对问题回答、阅读理解和仿真陈述查询有用。
地址:&a href=&///?target=https%3A///projects/babi/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/project&/span&&span class=&invisible&&s/babi/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Stanford Sentiment Treebank: 标准的情感数据集,在每一个句子解析树的节点上带有细腻的情感注解。
地址:&a href=&///?target=http%3A//nlp.stanford.edu/sentiment/code.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&nlp.stanford.edu/sentim&/span&&span class=&invisible&&ent/code.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&20 Newsgroups: 文本分类经典数据集中的一个。通常可用作纯分类或任何 IR/索引算法的基准。
地址:&a href=&///?target=http%3A///%7Ejason/20Newsgroups/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/~jason/20News&/span&&span class=&invisible&&groups/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Reuters: 旧的,纯粹基于分类的数据集与来自新闻专线的文本。常用于教程。
地址:&a href=&///?target=https%3A//archive.ics.uci.edu/ml/datasets/Reuters-21578%2BText%2BCategorization%2BCollection& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&archive.ics.uci.edu/ml/&/span&&span class=&invisible&&datasets/Reuters-21578+Text+Categorization+Collection&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&IMDB:一个用于二元情感分类的更旧更小的数据集。
地址:&a href=&///?target=http%3A//ai.stanford.edu/%7Eamaas/data/sentiment/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ai.stanford.edu/~amaas/&/span&&span class=&invisible&&data/sentiment/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&UCI’s Spambase: 来自著名的 UCI 机器学习库较久的经典垃圾电子邮件数据集。由于数据集的策划细节,这可以是一个学习个性化过滤垃圾邮件的有趣基线。
地址:&a href=&///?target=https%3A//archive.ics.uci.edu/ml/datasets/Spambase& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&archive.ics.uci.edu/ml/&/span&&span class=&invisible&&datasets/Spambase&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&&b&语音&/b&
大多数语音识别数据集是有所有权的,这些数据为收集它们的公司带来了大量的价值,所以在这一领域里,许多可用的数据集都是比较旧的。
&/p&&p&2000 HUB5 English: 仅仅只包含英语的语音数据,最近百度发表的论文《深度语音:扩展端对端语音识别(Deep Speech: Scaling up end-to-end speech recognition)》就是使用了该语音数据集。
地址:&a href=&///?target=https%3A//catalog.ldc.upenn.edu/LDC2002T43& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&catalog.ldc.upenn.edu/L&/span&&span class=&invisible&&DC2002T43&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&LibriSpeech:包括文本和语音的有声读物数据集。它是近 500 小时由多人朗读清晰的各类有声读物数据集,且由包含文本和语音的书籍章节组织起结构。
地址:&a href=&///?target=http%3A//www.openslr.org/12/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&openslr.org/12/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&VoxForge:带口音的语音清洁数据集,特别是对于如期望对不同口音或腔调的语音有鲁棒性需求的系统很有用。
地址:&a href=&///?target=http%3A//www.voxforge.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&voxforge.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&TIMIT:只包含英语的语音识别数据集。
地址:&a href=&///?target=https%3A//catalog.ldc.upenn.edu/LDC93S1& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&catalog.ldc.upenn.edu/L&/span&&span class=&invisible&&DC93S1&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&CHIME:包含噪声的语音识别数据集。该数据集包含真实、模拟和清洁的语音记录。实际上是记录四个说话者在四个噪声源的情况下近 9000 份记录,模拟数据是在结合话语行为和清洁无噪语音记录的多环境下生成的。
地址:&a href=&///?target=http%3A//spandh.dcs.shef.ac.uk/chime_challenge/data.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&spandh.dcs.shef.ac.uk/c&/span&&span class=&invisible&&hime_challenge/data.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&TED-LIUM:TED 演讲的语音转录数据集。1495 份 TED 演讲的语音记录,并且这些语音记录有对应的全文本。
地址:&a href=&///?target=http%3A//www-lium.univ-lemans.fr/en/content/ted-lium-corpus& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&www-lium.univ-lemans.fr&/span&&span class=&invisible&&/en/content/ted-lium-corpus&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
推荐和排序系统
&/p&&p&Netflix Challenge:第一个主要 Kaggle 风格的数据库。因为存在隐私问题,只能非正式地获得授权。
地址:&a href=&///?target=http%3A///& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&MovieLens:各种电影的评论数据库,通常用于基线协同过滤(collaborative filtering baselines)。
地址:&a href=&///?target=https%3A//grouplens.org/datasets/movielens/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&grouplens.org/datasets/&/span&&span class=&invisible&&movielens/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Million Song Dataset:在 Kaggle 上大量、富元数据(metadata-rich)、开源的数据集,有利于人们试验混合推荐系统(hybrid recommendation systems)。
地址:&a href=&///?target=https%3A///c/msdchallenge& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/c/msdchallen&/span&&span class=&invisible&&ge&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Last.fm:音乐推荐数据集,该数据集能有权访问底层社交网络和其他元数据,而这样的数据集正对混合系统有巨大的作用。
地址:&a href=&///?target=http%3A//grouplens.org/datasets/hetrec-2011/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&grouplens.org/datasets/&/span&&span class=&invisible&&hetrec-2011/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
网络和图表
&/p&&p&Amazon Co-Purchasing 和 Amazon Reviews:从亚马逊以及相关产品评论数据网络爬取的如「用户买了这个同时也会买哪个」这样的语句。适合在互联网中进行推荐系统的测试。
地址:&a href=&///?target=http%3A//snap.stanford.edu/data/%23amazon& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&snap.stanford.edu/data/#&/span&&span class=&invisible&&amazon&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 和 &a href=&///?target=http%3A//snap.stanford.edu/data/amazon-meta.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&snap.stanford.edu/data/&/span&&span class=&invisible&&amazon-meta.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Friendster Social Network Dataset:在 Friendster 的重心转入到游戏网站之前,这家网站发布了包含 103,750,348 个用户好友列表的匿名数据集。
地址:&a href=&///?target=https%3A//archive.org/details/friendster-dataset-201107& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&archive.org/details/fri&/span&&span class=&invisible&&endster-dataset-201107&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
地理测绘数据库
&/p&&p&OpenStreetMap:免费许可的全球矢量数据集。其包含了旧版的美国人口统计局的 TIGER 数据。
地址:&a href=&///?target=http%3A//wiki.openstreetmap.org/wiki/Planet.osm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&wiki.openstreetmap.org/&/span&&span class=&invisible&&wiki/Planet.osm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&Landsat8:整个地球表面的卫星拍摄数据,每隔几周会更新一次。
地址:&a href=&///?target=https%3A//landsat.usgs.gov/landsat-8& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&landsat.usgs.gov/landsa&/span&&span class=&invisible&&t-8&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
&/p&&p&NEXRAD:多普雷达扫描的美国大气环境。
地址:&a href=&///?target=https%3A//www.ncdc.noaa.gov/data-access/radar-data/nexrad& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&ncdc.noaa.gov/data-acce&/span&&span class=&invisible&&ss/radar-data/nexrad&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
人们常常认为解决一个数据集上的问题就相当于对产品进行了一次完整的审视。因为我们可以使用这些数据集进行验证或证明一个概念,但是也不要忘了测试模型或原型是如何获取新的和更实际的数据来提高运算效果,获得优良产品的。数据驱动的成功公司通常从他们收集新数据、私有数据的能力中获得力量,从而以一种具有竞争力的方式提高他们的表现。
参考链接:&a href=&///?target=https%3A///startup-grind/fueling-the-ai-gold-rush-7ae%23.mdlhr7kod& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/startup-grin&/span&&span class=&invisible&&d/fueling-the-ai-gold-rush-7ae#.mdlhr7kod&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&
现如今构建人工智能或机器学习系统比以往任何时候都要更加容易。普遍存在的尖端开源工具如 TensorFlow、Torch 和 Spark,再加上通过 AWS 的大规模计算力、Google Cloud 或其他供应商的云计算,这些都意味着你可以在下午休闲时间使用笔记本电脑去训练出最前…
&p&趁着今天有空,简单写写notes,是从personal notes里直接贴过来的,夹杂了比较多的私货,而且可能有不太严谨的地方敬请见谅。&/p&&p&&br&&/p&&p&-----------------------------正文的分割线------------------------------&/p&&p&在我的知识体系内比较颠覆的一个paper,之前一直认为Single stage detector结果不够好的原因是使用的feature不够准确(使用一个位置上的feature),所以需要Roi Pooling这样的feature aggregation办法得到更准确的表示。但是这篇文章基本否认了这个观点,提出Single stage detector不好的原因完全在于:&/p&&ol&&li&&b&极度不平衡的正负样本比例: &/b&anchor近似于sliding window的方式会使正负样本接近1000:1,而且绝大部分负样本都是easy example,这就导致下面一个问题:&/li&&li&&b&gradient被easy example dominant的问题:&/b&往往这些easy example虽然loss很低,但由于数
量众多,对于loss依旧有很大贡献,从而导致收敛到不够好的一个结果。&/li&&/ol&&p&所以作者的解决方案也很直接:直接按照loss decay掉那些easy example的权重,这样使训练更加bias到更有意义的样本中去。很直接地,如下图所示:&/p&&p&&br&&/p&&img src=&/v2-a8d898d1dcc_b.png& data-rawwidth=&666& data-rawheight=&400& class=&origin_image zh-lightbox-thumb& width=&666& data-original=&/v2-a8d898d1dcc_r.png&&&p&&br&&/p&&p&实验中作者比较了已有的各种样本选择方式:&/p&&ol&&li&按照class比例加权重:最常用处理类别不平衡问题的方式&/li&&li&OHEM:只保留loss最高的那些样本,完全忽略掉简单样本&/li&&li&OHEM+按class比例sample:在前者基础上,再保证正负样本的比例(1:3)&/li&&/ol&&p&Focal loss各种吊打这三种方式,coco上AP的提升都在3个点左右,非常显著。值得注意的是,3的结果比2要更差,其实这也表明,其实正负样本不平衡不是最核心的因素,而是由这个因素导出的easy example dominant的问题。不过比较遗憾的是,作者并没有给出OHEM会让结果变差的一个合理解释,这其实也是很值得深挖的一点。&/p&&p&结果上,最好的模型(ResNet101+FPN)做到了single model39.1 AP,其余的model在speed和accuracy之间的tradeoff也都是在efficient frontier上。很有insight的工作,而且,如果你有一个实现正确的FPN,这篇文章也不难复现。&/p&&p&后续两个我比较关心的扩展点吧:&/p&&ol&&li&是否可以使用data driven的方式来学习data的权重?这样可以统一起OHEM和self paced learning这两个极端。Focal loss其实也可以算在这个框架中。这个其实是早就想做的一个idea,年初的时候msra有一篇文章用RL来做了这件事情,但是文章非常不成熟。&/li&&li&Mask RCNN类instance seg的方法是否也可以one shot?这个看上去非常有诱惑力~&/li&&li&如果在RPN中使用了Focal loss,那么后面再过RCNN性能是否可以有更一步提升?&/li&&/ol&
趁着今天有空,简单写写notes,是从personal notes里直接贴过来的,夹杂了比较多的私货,而且可能有不太严谨的地方敬请见谅。 -----------------------------正文的分割线------------------------------在我的知识体系内比较颠覆的一个paper,之前一直认为…
&p&利益相关,回答几点我感兴趣的,更多的还是直接去看 Paper 吧!本回答仅代表个人观点。&/p&&p&先放最新的结果:&/p&&img src=&/v2-a14b507c9a9_b.png& data-rawwidth=&598& data-rawheight=&254& class=&origin_image zh-lightbox-thumb& width=&598& data-original=&/v2-a14b507c9a9_r.png&&&p&&br&&/p&&p&&br&&/p&&blockquote&&b&Plug-in & Play&/b&&/blockquote&&p&我认为 ResNet 和 DenseNet 都很好的地方在于他们够简洁,在深网络里也好用。 residual connection / dense connection 之于 gradient vanishing problem ,就像是香菜之于菜肴一样,放了就好吃。曾经在组里的 slack 群上卖过一个萌:&/p&&p&&br&&/p&&img src=&/v2-c856ee670ca39eb6e43e73_b.png& data-rawwidth=&417& data-rawheight=&209& class=&content_image& width=&417&&&p&concatenation 操作就是一行话。&/p&&blockquote&&b&Feature 重用&/b&&/blockquote&&p&paper 最大的 intuition / 好处是 feature 重用,同时, pre-activation 的结构又让同一层的 feature 在每次被用到的时候都做了新的 normalization,根据 [2] 这篇文章的佐证,这类似于用了很少的计算量(batch-norm layer)来得到更丰富的 feature map。&/p&&p&&br&&/p&&blockquote&&b&Robustness&/b&&/blockquote&&p&还有一个优点是 feature 比较 robust,不同层之间依赖性不会太大,所以在浅层的 feature 上直接做 prediction,会比 ResNet 这样的结构好很多(如下图,给不同 Netowork 中间不同位置接 classifier,没有 dense connection 的网络准确率会相当差,ResNet 尚且如此,VGG-like 的就更糟了)。这后来成为了我们另外一篇做 cost-sensitive 的文章 MSDNet [3]。&/p&&p&&br&&/p&&img src=&/v2-5aaa7b58a2c556fc64e4c27f8a2ae010_b.png& data-rawwidth=&888& data-rawheight=&381& class=&origin_image zh-lightbox-thumb& width=&888& data-original=&/v2-5aaa7b58a2c556fc64e4c27f8a2ae010_r.png&&&p&&br&&/p&&p&&br&&/p&&blockquote&&b&显存!显存!显存!&/b&&/blockquote&&p&最后顺便回答一下被很多人吐槽的显存问题。&/p&&p&赶在 CVPR 开始前最后一分钟完成了 Memory-Efficient DenseNet 的 technical report,传送门:&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Memory-Efficient Implementation of DenseNets&i class=&icon-external&&&/i&&/a&&/p&&p&Dense Connection 的显存占用大的问题就像一个无冤无仇却冤魂不散的债主,不得不还。老板和我们在痛定思痛之后,在今年 NIPS ddl 之后搞了个长达一周的 hackathon 来解决这个问题 。:) &/p&&p&下面将扼要介绍一下为什么 DenseNet 理论上是省参数的却占用了更多的显存。&/p&&p&&br&&/p&&p&首先,无论是什么 framework 的 NN,都由 forward 和 backward 两部分构成。假设只考虑一个 feed-forward network,并且移除所有 in-place 操作(如 ReLU),那么内存依赖大概是这个样子的:&/p&&img src=&/v2-40d1f7aec4a999b03dfd39f_b.png& data-rawwidth=&522& data-rawheight=&352& class=&origin_image zh-lightbox-thumb& width=&522& data-original=&/v2-40d1f7aec4a999b03dfd39f_r.png&&&div class=&highlight&&&pre&&code class=&language-text&&input_i = fw_i(input_{i-1})
gradInput_i = bw_i(input_{i-1}, gradInput{i+1})
&/code&&/pre&&/div&&p&对于 Backward 来说,深红色的gradInput算完一块就可以扔掉(它的出度为1),这也是几乎所有16 年以后新framework都会做的 shareGradient 优化。(LuaTorch 默认没有)&/p&&p&但是浅红色的内存块因为要在 backward 的时候还会被用到,所以不能扔,那肿么办?[1] 说可以用时间换空间,即在需要用粉红块的时候,重新计算即可。而对于 DenseNet 来说,每个 DenseLayer (Concat-BN-ReLU-Conv),Concat 和 BN 两层的 output 全扔掉就可以省下很多内存,却只多花了 15% 的计算量。&/p&&p&&br&&/p&&img src=&/v2-d6e581c033ad8bfa31385c2_b.png& data-rawwidth=&2096& data-rawheight=&1116& class=&origin_image zh-lightbox-thumb& width=&2096& data-original=&/v2-d6e581c033ad8bfa31385c2_r.png&&&p&&br&&/p&&p&&br&&/p&&p&现在已经整理出来的干净代码有 Torch 版本,见 &a href=&///?target=https%3A///liuzhuang13/DenseNet/tree/master/models& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&liuzhuang13/DenseNet&i class=&icon-external&&&/i&&/a&,有不同 level 的优化,最多能省 70% 的显存,应该说是基本解决了问题,至于更优雅的写法就交给可爱可敬的 research engineers 解决吧!代码还有 Caffe、PyTorch 和 MXNet 版本的,至于为什么没有 Tensorflow,因为我们组没人想写啊(误)欢迎其他有兴趣的读者贡献其他 framework 的实现 :D&/p&&p&[1]: &a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Training Deep Nets with Sublinear Memory Cost&i class=&icon-external&&&/i&&/a&&/p&&p&[2]: &a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Multi-Bias Non-linear Activation in Deep Neural Networks&i class=&icon-external&&&/i&&/a&&/p&&p&[3]: &a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Multi-Scale Dense Convolutional Networks for Efficient Prediction&i class=&icon-external&&&/i&&/a&&/p&
利益相关,回答几点我感兴趣的,更多的还是直接去看 Paper 吧!本回答仅代表个人观点。先放最新的结果: Plug-in & Play我认为 ResNet 和 DenseNet 都很好的地方在于他们够简洁,在深网络里也好用。 residual connection / dense connection 之于 gradient …
已有帐号?
无法登录?
社交帐号登录

我要回帖

 

随机推荐