前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【睡前碎语】是时候隐藏真正的技术了

【睡前碎语】是时候隐藏真正的技术了

作者头像
木羊
发布2022-04-11 18:01:27
3360
发布2022-04-11 18:01:27
举报
文章被收录于专栏:睡前机器学习

头条说的是Keras,我还想多说几句。

先说说框架。很多公号都热衷于对比深度学习的框架,但是我始终认为框架本身没有好坏,只有工作需要和使用习惯的不同。无论是TF还是Pytorch,都是很优秀的深度学习框架,而且二者还有一个特点:大体上一致,细节处略有不同。

很多初学者都会为入门框架的选择而烦恼。其实我倒觉得,最重要的不是选择,而是赶紧学起来。TF也好,Pytorch也好,包括没啥存在感的一堆“其它深度学习框架”,很多地方其实是相通的,有时候是功能相同,有时候干脆连名字都叫一样。

这个现象很正常,也很好解释。深度学习框架都是基于同一套深度学习理论,知识背景是完全一致的,深度学习的一些基本操作,譬如说卷积,又譬如说损失函数,无论是哪套框架都需要有对应的功能实现,在功能上趋同是必然的事。

简单来说,学会了一套框架,迁移到另一套框架上的成本,比学习两门都面向对象的编程语言还要低一点。

不过,深度学习框架要解决的不仅仅是学术问题,还有工程问题。因此,在细节上会有一些区别,还有一些特色的功能。业界有个笼统的说法,说学术界偏好Pytorch,而工业界喜欢Tensorflow,我是赞同这个说法的。

那么,究竟该怎么选择呢?俗话说得好,成年人是全都要,小孩子才做选择。既然不同的框架总体功能趋同,不妨都加以了解,再根据具体的任务需要,决定本次究竟选择哪款。

对于Keras,我还想多说两句。

就我个人来说,平时用Pytorch会多一些。原因也简单,深度学习框架都要依赖计算图,而早期的TF为了追求性能,支持的是静态计算图,在用户体验上做了很大牺牲,用人话来说就是用的我都快吐了。后来Pytorch出来,一用,那种爽快感感像极了被C艹虐了千百遍以后第一次接触到了Python,就一直用到了现在。

Keras呢其实用得很早,那时候连TF都还没出正式版,后端用的还是Theano。但是那时候的人也和今天一样,也非常纠结,说Keras确实封装得很好,用户体验大大提升,学习门槛也大大降低,但是毕竟是高层抽象,免不了要牺牲性能。今天在Tensorflow身上也能找到一模一样的话,历史果然就是在不断重复自身。

关键是那时候Theano已经是肉眼可见的明日黄花,大家都在转投学习曲线极其陡峭的TF,后来Keras好歹也支持TF了,可是我早被TF的陡峭曲线弄出了PTSD,早早地就转向了Pytorch。对于Keras+TF的组合只是作为了解性质地简单玩了一下,没有深入体验。

以前我还常抱怨一件事。

机器学习圈子有几本经典必读书,首推《机器学习实战:基于Scikit-learn与Tensorflow》。这是本入门书,看名字也知道,介绍了两套Python的机器学习库,分别是面向机器学习算法的Scikit-learn,和面向深度学习算法的Tensorflow。

《机器学习实战》封面印了个黑黄相间的爬行动物,所以官方叫蜥蜴书,我不喜欢蜥蜴,我喜欢壁虎,所以我管它叫壁虎书。壁虎书最大的特点是写得细,很多基本的概念和基础的操作,都不厌其烦地展开介绍,特别适合入门,所以业界口碑很好。

但是,以前我觉得有点遗憾。壁虎书选择Scikit-learn就不必说了,做机器学习都绕不开这个库,属于必选动作。但深度学习这块选择的是Tensorflow而不是Pytorch,对于一名TF的重度不爱好者,实在可以说是这本书的一点瑕疵。

不过,决定写Keras这篇文章以后,我决定做一件事:用Keras写一个GAN。做资料收集很容易,有现成的文档和材料,但是,要把微妙的“感受”说清楚就太难了,以己之长攻彼之短,只会带来无穷无尽的争执。

就我的经验来说,必须得真的做完一个项目,才能说清楚一门技术究竟有哪些优点和槽点。至于为什么要写GAN呢,也好说,GAN又有生成器又有判别器,机器学习的两大方向都包了,能够全面考察Keras的能力。

当然,最重要的一点是,壁虎书就有如何实现GAN的章节,而且新版的壁虎书在深度学习部分首选就是Keras,而不是原生的TF,实在写不出来还可以“致敬”一下。

感想我都已经写在了头条的文章里,这里我想补充一条。用过Scikit-learn的同学应该都知道,Scikit-learn的一大特点就是高度封装,把算法的数学细节都统统屏蔽,使用者只需要知道这套算法有哪些参数,然后依葫芦画瓢把参数弄过来传进去就好。

我之前就常说,机器学习是依据数学建立起来的,但学习机器学习是不是都需要把所有公式都手推一遍才能掌握,那就见仁见智。如果只是想要使用机器学习算法的能力,我认为更重要的是知道算法的原理,知道用到哪些参数,这些参数又会对最终效果发挥怎样的作用。

这些知识来源于对算法的理解和实践,恐怕手推公式也无法替代对这部分内容的学习,如果目的是使用机器学习,特别是通过Scikit-learn使用机器学习,可能反而更看重这部分内容。我专门写了一本书,叫《机器学习算法的数学原理和Python实现》来介绍。

Keras给了我同样的感觉。

Keras屏蔽了大量细节,连神经网络最具特色的BP机制都屏蔽了,你只需要把模型搭起来,模型就能自动进行BP跑训练。但是和Scikit-learn一样,该有的参数你得有,譬如说激活函数、损失函数和优化器,这些标准配置都得用户选好了传进去。

很多人诟病Keras,也是因为它过于“高级”,把细节都做了屏蔽处理。譬如说处理时序数据,只要把LSTM层添加进去,哪怕你还没搞清LSTM里面究竟有几个门,同样可以为所欲为。

在设计理念这一层,Keras实在像极了Scikit-learn,如果让Scikit-learn团队开发深度学习框架,很可能就是今天Keras这个样子。相比之下,Pytorch明显要更底层一点,很多具体的细节、机制,都必需要手工处理。

其实用Pytorch和Keras作比较是不合适的,Keras是前端高级库,Pytorch这边对标的,应该是FastAI才对。

现在我倒觉得,新版的《机器学习实战》分别用Scikit-learn和Keras来分别介绍机器学习和深度学习,实在是在合理不过的事。如果要我选择一款框架介绍深度学习,同时又要和Scikit-learn保持一致的风格,我也会选择Keras。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 睡前机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档