V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
begeekmyfriend
V2EX  ›  机器学习

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

  •  
  •   begeekmyfriend · 2018-08-25 08:12:01 +08:00 · 5660 次点击
    这是一个创建于 2281 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人深度学习一年级小白,语音合成方向。

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

    换句话讲,模型不用自己代码复现一遍,怎么知道自己的理解偏差在哪里呢?做一遍就知道很多很多问题。
    takato
        18
    takato  
       2018-08-25 13:41:07 +08:00
    tf 的 contrib 里,有一堆东西都是没什么人用过的,有些参数的设置也和论文有出入,真的还不如自己写。。。
    begeekmyfriend
        19
    begeekmyfriend  
    OP
       2018-08-25 13:42:22 +08:00
    @takato 就是因为 PyTorch 的那个项目(不是 PyTorch 本身)复现有瑕疵才问的,奈何作者跑路中
    begeekmyfriend
        20
    begeekmyfriend  
    OP
       2018-08-25 13:44:26 +08:00
    @takato 我使用了 TF 的一个高手魔改 API 版本终于复现了 state of the art,可见 TF 本身功能是没什么问题,但的确存在很多脑残设计。
    takato
        21
    takato  
       2018-08-25 13:44:39 +08:00
    @begeekmyfriend Pytorch 的用户群的确比较研究向。。跑路了去研究别的了也是正常的。23333。
    JeffKing
        22
    JeffKing  
       2018-08-25 14:04:34 +08:00 via iPhone
    难得碰见 tts 的同行啊
    xiaoshenke
        23
    xiaoshenke  
       2018-08-25 14:27:07 +08:00 via Android
    @lihongjie0209 自己啥都不懂就别说话憋着
    SorryChen
        24
    SorryChen  
       2018-08-25 14:52:05 +08:00 via iPhone
    cv 很多新论文第一方代码很多用 pytorch 了
    yangyaofei
        25
    yangyaofei  
       2018-08-25 18:14:50 +08:00 via Android
    @begeekmyfriend 这样啊……前几个月摆弄 seq2seq 时候也觉得每次加上 attention 就会有莫名的问题……在之前还觉得直接一个 wrapper 就搞定好强大…
    现在用 tensor2tensor 了,已经变成调包侠……
    frinstioAKL
        26
    frinstioAKL  
       2018-08-25 18:43:22 +08:00
    赞同楼主观点,python 的 tf 已经不是一个包了,简直就是向一门新的语言靠拢。很多文档是由代码注释自动生成的,然而写的跟屎一样,东缺西缺,用的时候经常得扒源码看。找个开源代码,简直一个人一个风格。现在已经习惯从底层 API 写一套自己的 wrapper 了,用高级 API 有的包装不好还经常变动。最难受的是很多隐藏的坑,很难发掘。比如 tf.image 插值里面 align_corners 默认为 false,而且实现的算法和主流的图像库都是不一样的; 好多函数偷偷建立了局部变量注释里面不写; 有些模块的 c++ 底层是有问题的,导致莫名其妙的性能损失等等。不过得赞叹的是,tf 真的是面向生产力环境的(和 pytorch 比起来,个人觉得)
    lichun
        27
    lichun  
       2018-08-25 18:55:37 +08:00   ❤️ 1
    https://github.com/keras-team/keras

    Deep Learning for humans
    Revenant
        28
    Revenant  
       2018-08-26 00:18:02 +08:00
    以前的 tf 的 API 真的难用,example 的代码写得风骚无比,理解难度很大
    尤其是 tf 还有改 API 名和代码的习惯...
    去年还碰到过一个坑,当时想看看 tf 的语音识别 example,到 github 中 down 下来后发现运行不了,审查代码半天发现原来 tf 只是声明了某个函数(应该是梅尔频谱的函数),但并没有实现,而这个 example 还写进了 tf 官方文档中
    northisland
        29
    northisland  
       2018-08-26 13:04:51 +08:00
    国人的 mxnet,你好白头鹰
    feiyuanqiu
        30
    feiyuanqiu  
       2018-08-27 20:45:09 +08:00
    @lhx2008 请教个问题,java 做人脸识别有什么比较好的库吗?现在用 python 的库,感觉又要学 python 一整套东西...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3593 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 10:23 · PVG 18:23 · LAX 02:23 · JFK 05:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.