Billchenchina 标签 联系 友链

深夜牢骚:对(现代)机器学习的吐槽

Posted by Billchenchina on December 18, 2019

本文转自 https://t.me/taoky_days_notebook/448

深夜牢骚:对(现代)机器学习的吐槽

在被 Web 课的几个实验折腾之后,开始越来越不喜欢以深度学习为代表的,重度依赖硬件、数据集和调参的现代的机器学习算法了。原因如下(可能有事实性错误):

  • 非常依赖于高端硬件的性能,你至少也要有一块好的 GPU,否则 CPU 的计算时间至少就要到十几倍的样子。当然这可能对一部分人来说不是什么问题,但我(集显用户)对此是非常绝望的。我知道 Google Colab 可以用 GPU 和 TPU,不过在上面配环境也不是什么轻松的事情,连接一断,上传的自己的数据集什么的就都没有了。更何况有些模型就不是打算给个人用户去训练的,比如说 BERT: (https://github.com/google-research/bert)

The fine-tuning examples which use BERT-Base should be able to run on a GPU that has at least 12GB of RAM using the hyperparameters given.

可能未来(也有可能现在已经发生了),谁的硬件算力越强,谁在现代的机器学习领域就有越大的解释权。

  • 玄学的、「面向测试数据」的调参,找不到可解释性(当然这很可能是我的问题)。Web 的实验 2 是医疗文档的命名实体识别。基于上面提到的那个原因,我最后直接用了最简单的条件随机场(CRF),结果还凑合。不过我在加 features 的时候加入了部首之类的特征,然后我诡异地发现在某些情况下 F1 指标上升了,而另一些情况里下降了。最后我加入了拼音的 feature,但是一开始代码写错了,结果效果比我之后改对的代码还好。我无法解释模型为什么会变成这样子。

  • 糟糕的代码风格(这可能是中文社区的通病?),以及糟糕的兼容性。首先这次实验,由于我需要做中文的 NLP 任务,我不得不去找那些中文的介绍 BERT 等一堆东西的 repo, etc. 然后文档就是一团浆糊,代码还有一定几率跑不起来,要自己魔改(这里点名批评 https://github.com/macanv/BERT-BiLSTM-CRF-NER ,在 TensorFlow 1.14+ 会炸,解决方法是改成 tf.estimator.experimental.stop_if_no_decrease_hook),跑完也不知道效果到底是不是原作者想要表达的那个样子。

此外 TensorFlow 非常激进的 API 更新,也给运行以前的代码带来了很大的不方便。比如说 guesslang 依赖于一个很老的 tf 版本,那个版本不支持 Python 3.7,导致我在做 Web 开放实验的时候还不得不拉一个 Python 3.6 的 Docker 镜像下来再跑。就算跑起来了,也还有一堆 warnings 糊你脸上。

  • 上面几个问题一起,就导致了:某个学习算法看起来非常 promising,但下载下来之后要花半天时间配置正确的环境,然后拿自己的数据集一跑(根据硬件情况,短则几分钟,长则至少几小时+),结果远差于预期,然后调调参数:可能就好了,也有可能还是爆炸。如此循环。

  • 另外,实话讲,当初吸引我来 CS 的,并不是什么 AI 有多么厉害。基于以上的原因,我不喜欢现在一堆人都说自己要搞 AI 的风气。不过在我认识的同学里,有数学学得很好,做机器学习也很得心应手(至少和我比是这样的)的。我相信这样的混乱未来会有所改变。