本人深度学习一年级小白,语音合成方向。
对 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 上搬运高人的架构方案,节省了不少时间。