感觉作者应该问的问题是应该攻读图像处理好还是自然语言处理好(目前深度学习的两大分支)。当然深度学习也不完全包含这两个,比如自然语言处理(NLP)在之前都是用统计学方法处理的,这两年才流行起来用了深度学习。偶的研究方向和NLP相关,就重点说说NLP吧。
首先目前深度学习领域有两个最主流的模型CNN和RNN。CNN就是卷积神经网络,通常用在图像处理上,RNN是循环神经网络,自然语言领域用的比较多。作者说攻读深度学习,通常也需要找个小的点来攻读。比方NLP,也是个非常大的概念,在NLP这个大概念下,又有很小的一些方向,比方说问答系统(类似于聊天机器人),文档主题抽取,语音识别,机器翻译等等。还可以应用到其他领域,比如偶的方向是利用NLP做安全领域的一些事情,如bug定位,summarize code,漏洞检测等(代码本身也是一种语言)。
接下来说说入门的难度吧,无论自然语言处理也好,图像处理也好,本质上都是把图片或者语句转换成向量,然后对向量做一些处理。既然是转换成向量,就得提到特征提取。个人觉得自然语言处理的提取难度是大于图片的,毕竟语言这种东西还是比较抽象的东西。提取的方法比如说按照词频,高端点的有基于语义的word2vec,但是这种特征再怎么表示,也没有图片的像素点,或者图片二值化以后的特征来的直观明了。
但是NLP无疑是很容易入门的,为什么这么说呢,因为nlp现在有太多太多容易又好用的工具了。比方说word2vec,可以用的工具太多太多,偶最常用的就是gensim,基本上所有自然语言处理的算法都有api。如果想要解析语法树,可以用stanford corenlp。其他的很多就是简单的字符串处理。入门可以说很容易,你理解完概念之后就可以上手了。记得偶刚入坑的时候,第一个任务是实现14年一篇软工领域顶会的论文,完全是当做字符串处理,看懂论文就直接上手写代码了,都没用api(当然因为代码基础还可以,哈哈,吹个牛)。
但是想深入的话,无论是图像处理还是NLP都是非常难的,但是偶觉得,NLP更难。图像处理其实是个比较直观的东西,比如人脸识别,各种识别,很少涉及逻辑理解,但是NLP不一样,很多领域的任务都是基于理解,而且结果也很难评判,比方机器翻译,你生成一句句子,虽说有BLEU这种指标,但是具体好坏,偶觉得还是需要人阅读后来衡量的。
比方说上图,是最近研究的一个通过自然语言自动生成代码的一个基于Python ast的RNN(ACL 2017的论文的图),就是根据一句描述,生成代码,没错,偶研究的就是那些传说中能取代程序猿的东西(瞎扯淡),生成的东西,根本没有一个评判标准,不像图像,有一个确定的标签,这是个非常主观的东西。
另外通过这张图再说一点,上面这张图看起来很牛逼,什么attention Bi-directional LSTM RNN(注意力机制双向长短时记忆循环神经网络),什么基于Python AST(抽象语法树)的生成和应用规则,本质上都是一个RNN,做了一些不同的变种而已
第一次打那么多文字。。。希望能有帮助