深度学习目前进展和理解

来源:互联网 发布:微店怎么导入淘宝商品 编辑:程序博客网 时间:2024/05/22 04:48
%probability(概率论)


http://www.zhihu.com/question/29687860/answer/45794666?utm_campaign=rss&utm_medium=rss&utm_source=rss&utm_content=title
问:
 之前听到一种说法,什么统计学家不认同机器学习的观点,什么最后搞统计学的最后都去做机器学习了,具体记不清楚了,这两方在理念上有什么不一样的地方呢?
答:

         具体来说,机器学习应该是分为 probability base 和non-probability base的。当我们在意一个模型的可信性和精度的时候,刻画研究对象的probability distribution是重要的。但是相对于经典并且传统的统计,机器学习像是一个思想更开放的年轻人。non-probability base 部分的机器学习 不是 比统计学家 “更关心模型的预测能力”,而是比起关心模型可信性,“更关心模型的预测能力”。所以它摆脱了 研究probability distribution的束缚,用另外一些方式,for example,(online learning, active learning?)来进行预测。

       经典统计和机器学习分别在哪些领域有优势?
       在一些传统领域,工程实验,生物试验,社会调查,物理实验,我们能获得的数据量非常小,我们必须小心翼翼的对待我们的模型,从有限的数据中提取尽量可能多的信息。抑或是一些对参数很敏感的预测,差之毫厘失之千里,比如检验一个艾滋病新药物是否有效,来决定要不要投入funding去进行研发,我们就要用严谨的概率统计模型。
       但是在搜索引擎,淘宝用户购买信息,人脸特征识别等领域,我们能够获得很大量的数据,而且数据维度也非常高,用传统方式建模,很有可能维度高到严谨的function根本解不出来,机器学习的理论就非常有效了。
        machine learning调参的过程
       “grid search啊,grid search就是自动暴力调参,设置好要跑的参数让程序自动跑,跑一晚上第二天起来看哪个参数组合得到的结果最好。
可能对机器学习之所以有暴力调参的印象,多是由于deep learning的原因,这个现在很火,但绝大部分人没办法弄懂原理,什么ReLU,Dropout,BatchNormalization,估计没几个知道这些为什么会有用,看上去像拍脑袋想出来的,但反正是有用,想用好就只能凭感觉调参数了。

但是其他更成熟的模型,比如svm,ensemble,他们准确率高是有理论支撑的”
------------------------------------------------------------------------------------------以下是深度学习----------------------------------------------------------------------------------------------------------------------



---------------------------------------------------------------------------------------------深度学习的工具---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
torch7、theano、caffe
来源于知乎用户的回答:
链接:http://www.zhihu.com/question/34789475/answer/60700029
来源:知乎

总结:caffe用来实现只是用来实现cnn;torch7用来实现cnn和rnn都可以

      caffe的代码结构非常清晰,这也是我学C++看的第一份代码。如果要在caffe中加新的layer也很简单,基本上就是重载3个函数:setup,forward,backward。
       使用caffe训练模型基本上就是写写配置文件。另外caffe提供了很多牛人训练好的模型给你玩Home · BVLC/caffe Wiki · GitHubcaffe围绕cnn做了非常完备的工作,然而,正是因为caffe一开始的是为了实现一个高效的cnn训练框架,所以,也给自身带了一些限制:不能很方便得扩展到其它模型。caffe另外一个缺点就是接口一直没有稳定下来(目前好像还有重构计划),所以,导致我半年前写的代码现在都不能直接用了。这也是导致我学习torch7的原因之一,但不是主要原因。当然,每一个优秀的算法都值得为它实现一个优化的计算框架。
        再说torch7,理想中我最喜欢的的机器学习的库应该是实现并且优化了基本的计算单元,使用者可以很简单地在此基础上实现自己的算法,不用浪费精力在计算优化上面。而torch7恰好符合这种要求。核心的计算单元使用C或者cuda做了很好的优化。

torch 7核心代码用C/CUDA C,上层提供脚本(lua)语言调用,效率与caffe几乎没有差别,试验新想法时可能会快一点。另外,torch7构建的是一个生态系统,安装新的模型实现模块只需要luarocks install package. 比如:luarocks install rnn。之后就可以欢乐地使用rnn模型了。有很多学者在torch7的基本单元之上贡献了其它的模型。具体参考Cheatsheet · torch/torch7 Wiki · GitHub。另外,FB在今年CVPR的tutorial上明确提到,由于lua解释器的小巧,未来torch 7可以直接部署到手机上。torch7的缺点可能就是1. wrapper是lua语言,需要一点时间来学习。2. 优化新的计算单元可能会比较麻烦,backend修改起来会比较麻烦(这一点我不还确定)。
             总结一下:caffe是CNN模型的非常好的框架,方便、易用;torch7是机器学习一个非常好的框架,但是,学习曲线比caffe要陡峭一些。torch7更灵活,能搞定更多的机器学习算法模型。



链接:http://www.zhihu.com/question/34789475/answer/66375006
来源:知乎

我在刚开始用torch 7时也遇到过答主的这些问题,以下是我的一点心得。

1. 变量不检查,执行到中间某一步才报错。这有两种可能:张量尺寸不匹配,或者变量在使用前没有合适初始化/定义。首先,这两种错误都可以通过简单的调试排除(推荐环境:zbs-torch + mobdebug),而且他们很常见——即使经验丰富的研究者或程序员也会时不时掉坑里,所以不必对此过度担忧和困扰;其次,这两种错误在任何基于动态语软件包里面都难以避免——如果非要像C++那样引入静态类型检查,就失去了动态语言的灵活性。另外,恐怕caffe也没法在编译期捕捉张量尺寸不匹配这种错误(这个不太肯定,对caffe没有实际使用经验)。最后,如果答主实在喜欢谨慎,那就在lua代码里显式的assert好了:
assert(a) -- detect if a is definedassert( a:size(2) == 4 ) -- a must have 4 columns (size in dim 2)

2. dp(dpnn)包的问题。
这样的包虽然很傻瓜化,但是很多功能比如experiment感觉扩展性比较差,不能适应active learning甚至是reinforcement learning的场景。
Torch 7是一系列功能相互正交的包的总称,例如torch包封装了张量和运算,nn封装了神经网络, optim封装了优化算法...而dp并不是“官方”发布的包。个人认为dp有些设计过度。从编程角度来说,机器学习的业务逻辑比较简单,没必要引入那么多设计模式去表达;另外偏研究的代码需求变化太剧烈,引入那些设计模式也没法重用代码,比如答主所说的reinforcement learning,以及deep learning作为其它高层任务子模块的任何场景...这时,不如发挥lua脚本语言的优势,写一些糙快猛的代码迅速的得到结果评估效用——你会发现先前的好多想法根本行不通,业务逻辑代码又要大量修改...

3. Torch 7的张量操作复杂。这个没办法,要支持各种索引操作,肯定会复杂。

4. 字符串操作。类似于字符串分割这种任务,可以用penlight库的stringx(Torch 7安装时自带了),例如:
stringx = require('pl.stringx')str = 'one two thress'words = stringx.split(str)
如果还需要更复杂的自定义操作,lua的string和torch的tensor都可以暴露数据裸指针,可以在lua语言中对其直接操作,效率和手写C语言相差无几。




链接:http://www.zhihu.com/question/34789475/answer/60708085
来源:知乎
个人认为单从构建模型来说,torch已经是非常简便的了。CNN大概像这样就搭起来了(来源:tutorial_supervised_2_model):
-- parametersnstates = {16,256,128}fanin = {1,4}filtsize = 5poolsize = 2normkernel = image.gaussian1D(7)-- Container:model = nn.Sequential()-- stage 1 : filter bank -> squashing -> L2 pooling -> normalizationmodel:add(nn.SpatialConvolutionMap(nn.tables.random(nfeats, nstates[1], fanin[1]), filtsize, filtsize))model:add(nn.Tanh())model:add(nn.SpatialLPPooling(nstates[1],2,poolsize,poolsize,poolsize,poolsize))model:add(nn.SpatialSubtractiveNormalization(16, normkernel))-- stage 2 : filter bank -> squashing -> L2 pooling -> normalizationmodel:add(nn.SpatialConvolutionMap(nn.tables.random(nstates[1], nstates[2], fanin[2]), filtsize, filtsize))model:add(nn.Tanh())model:add(nn.SpatialLPPooling(nstates[2],2,poolsize,poolsize,poolsize,poolsize))model:add(nn.SpatialSubtractiveNormalization(nstates[2], normkernel))-- stage 3 : standard 2-layer neural networkmodel:add(nn.Reshape(nstates[2]*filtsize*filtsize))model:add(nn.Linear(nstates[2]*filtsize*filtsize, nstates[3]))model:add(nn.Tanh())model:add(nn.Linear(nstates[3], noutputs))

简单总结一下torch的优势:
1. 构建模型简单,一层层搭积木即可。
2. 高度模块化,一层就是一个模块,写新模块也方便,套用接口就行,用tensor运算不必写cuda也能用GPU。
3. 底层的tensor由C和cuda实现,速度不会比caffe差,甚至某些运算可能更快。
4. 使用GPU方便,把tensor数据送到GPU只要简单的 "tensor:cuda()"。
5. lua入门快,堪比python。
6. 很重要的一点,nngraph,理论上可以用nn里的模块实现任何DAG构造的网络,当然也包括RNN、LSTM之类的。

至于劣势:
1. 对于不少人来说,lua要新学。
2. 除了deep learning方面,其他好用的机器学习library较少。
3. 数据文件格式比较麻烦,一般原始数据没有torch专用的t7格式文件,需要通过mat等格式中转转换。

Lua这个脚本语言debug起来感觉非常吃力。现在的各种库代码还非常缺乏鲁棒性,对于输入往往没有任何assert检查,最后很可能是执行到某一步加法或者copy的时候才出现错误,使用者只能根据错误的stack recall 一步步地推测自己的代码到底是为什么出了问题(虽然知道自己代码是哪一行出了错)

















当前深度学习领域的学术研究可以包含四部分:优化(Optimization),泛化(Generalization),表达(Representation)以及应用(Applications)。除了应用(Applications)之外每个部分又可以分成实践和理论两个方面。




































































































0 0
原创粉丝点击