关于 AI 开源项目(深度学习)我的一点批判性思考(偏见)

2018-08-25 08:12:01 +08:00
 begeekmyfriend
本人深度学习一年级小白,语音合成方向。

对 TensorFlow 的批判。

当你发现最上层 API 达不到复现标准的时候,Tensorflow 的难用就体现出来——你不得不把源码里整个 class 搬过来,改造它的方法以适配你的应用,然后你又必须面对设计模式的各种坑,各种运行不起来(比如一个变量,你以为它是个对象,其实它只是个方法,并未求值)。对软件工程不熟悉的开发人员极不友好。若不是谷歌强大的 AI 生态,以及围绕生态培养起来的全世界数百名开发高手,这种框架真的没啥竞争力可言——首先,API 设计得太烂了,有时简直没法用,因为 API 根本不是严格以经典论文架构为导向而设计的;其次,过度依赖设计模式,对非软件出身的工程师不友好;最后调试困难,这点倒是难不倒我。最后个人忠告,注意力模型尽量不要用 AttentionWrapper,实践证明屎一样的 API。

对 PyTorch 的批判。

回过头批判 PyTorch。严格地讲不是对框架本身的批判,因为我没有深入基于 PyTorch 开发过。应用生态不是没有,但是跟 Tensorflow 实在没法比。以 Github 为例,一个中小型 AI 项目(复现经典论文为主),TF 项目的 issue 大概上百个,就算作者忙不过来,也有其他用户热心帮忙解答;而 PyTorch 项目能有二三十个 issue 就很不错了,我提了个 issue,近一个礼拜没人理我,作者跑路,用户冷淡,你让我一个人如何敢入坑?验证一下效果就是跑一整天啊,我可没这精力和耐心去开发调试,结果越来越不敢碰,以至于最终弃坑。PyTorch 生态毕竟还是要寄托于脸书,但脸书的 AI 产出跟谷歌相比还是差一个档次。至于国人的 MXNet ……算了,人生苦短,忘了它吧~

项目入手选择。

尽量选 issue 多的,这意味着参与的人多,人越多意味着质量越好。比如论文里的效果是理想值的话,个人开源项目复现到 60~70 分的一大堆,要想再提高 20 分就需要众多高手出谋划策,以及大批小白鼠反馈。这是集体智慧,我还没见过哪个高手单独能复现 90 分以上的。神经网络模型真是一门玄学。

一点调参经验。

当你的复现效果只有 60~70 分,还需要起码 20 分才理想,那几乎一定是架构出了问题,调参是解决不了的。反过来如果调参能够提升 20 分,那只能说明之前的参数设置是错的,这是一个 bug。而参数都是论文给出的,除非论文造假,否则参数 bug 的可能性几乎不存在。而高手往往是从架构设计中寻求突破的,建议你调参的都是平庸的方案。没错,我个人很少接受调参的建议,遇上瓶颈都是从 Github 上搬运高人的架构方案,节省了不少时间。
5512 次点击
所在节点    机器学习
30 条回复
WildCat
2018-08-25 08:17:29 +08:00
tf 的吐槽真的是深得我心。一个人一个写法,而且毫无软件工程
lhx2008
2018-08-25 08:39:01 +08:00
还是 dl4j 简单易懂,不过功能少不少
singerll
2018-08-25 08:43:25 +08:00
python 各种版本各种库真的心累。
q397064399
2018-08-25 08:59:29 +08:00
从中期来看,,所谓的 AI 人工智能 又要回落了, 这行本质上跟以前一样 并没有革命性的突破,居然还有人拿深度学习来炒币.. 币市纯粹大佬玩控的投机市场
yangyaofei
2018-08-25 09:47:47 +08:00
说说 Attention 那个为啥不好用?最近还想看看那个的源码呢
rpman
2018-08-25 10:16:08 +08:00
deep learning 之所以是 cs 而不是 stat 的人在做就是因为它很工程
begeekmyfriend
2018-08-25 10:16:10 +08:00
@yangyaofei https://github.com/keithito/tacotron/issues/170#issuecomment-389766623
说来话长,AttentionWrapper 简直是个 bug 设计。这些都是实践中总结对比出来的,可验证的。一下子我的训练数据少了很多,收敛也快了很多。
begeekmyfriend
2018-08-25 10:23:14 +08:00
@yangyaofei 说得再详细一点,AttentionWrapper 内部本身封装了一个 decoder RNN,但论文里的 decoder RNN 是需要自己设计的,没法子只能 AttentionWrapper 外面再做一个 decoder,但是我们还需要把 decoder 的输出反馈到 encoder 端,形成闭环,但是 AttentionWrapper 阻止了这种灵活性,只能把反馈接到 decoder 的输入端。总之无法严格实现论文的架构,所以只能把整个 Attention 类拷过来,打散自己搭建。
lihongjie0209
2018-08-25 10:26:14 +08:00
其次,过度依赖设计模式,对非软件出身的工程师不友好;--- 黑人问号, 这是你的缺点还是框架的缺点?
Weny
2018-08-25 10:35:19 +08:00
“过度依赖设计模式,对非软件出身的工程师不友好” 楼主的确是你在搞笑了,现在工程能力很厉害的高中生都一抓一大把,一个 cs major 的学生居然吐槽这个。软件工程不应该是基础功吗?
begeekmyfriend
2018-08-25 10:40:28 +08:00
@lihongjie0209 @Weny 第一、你们用过 Tensorflow 吗?第二、你们用过 TF 的 API 更深的地方吗?
lihongjie0209
2018-08-25 10:55:29 +08:00
@begeekmyfriend #11 懂点设计模式而已
iBaoger
2018-08-25 10:57:54 +08:00
老马,又见面了
begeekmyfriend
2018-08-25 11:02:53 +08:00
@iBaoger 阁下是?
Hzzone
2018-08-25 11:21:49 +08:00
目前来说我用过的最人类的是 Caffe(笑
iBaoger
2018-08-25 13:30:16 +08:00
takato
2018-08-25 13:40:12 +08:00
研究这种事情么,本身就不能指望很多人跟你一起做的。。所以 pytorch 的 issule 少也是正常。。

换句话讲,模型不用自己代码复现一遍,怎么知道自己的理解偏差在哪里呢?做一遍就知道很多很多问题。
takato
2018-08-25 13:41:07 +08:00
tf 的 contrib 里,有一堆东西都是没什么人用过的,有些参数的设置也和论文有出入,真的还不如自己写。。。
begeekmyfriend
2018-08-25 13:42:22 +08:00
@takato 就是因为 PyTorch 的那个项目(不是 PyTorch 本身)复现有瑕疵才问的,奈何作者跑路中
begeekmyfriend
2018-08-25 13:44:26 +08:00
@takato 我使用了 TF 的一个高手魔改 API 版本终于复现了 state of the art,可见 TF 本身功能是没什么问题,但的确存在很多脑残设计。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/483047

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX