去年的这个时候我在博客园开通了技术博客。一晃一年过去了,这一年中我写了二十几篇原创,全是对音频开发中的知识和经验的总结。不高产,差不多一个月两篇的节奏。平时工作比较忙,基本都是利用周末时间写出来的。中途有一段时间特别忙,差点想放弃,庆幸还是坚持下来了。我想后面还会坚持下去,内容还是对我工作中知识和经验的总结。人们通常喜欢在一周年之际做一些总结,我也不例外,今天我来总结一下过去的一年在技术上我做了什么。总结下来主要做了三件事:音频开发、人工智能(AI) 学习、写技术博客。
1,音频开发
音频软件开发是我的本职工作,这一年中的绝大多数时间肯定是献给她了,毕竟她是我的衣食父母,我养家糊口得靠她呀。本职工作不仅要花绝大多数时间做,而且还要做好。去年这个时候我从APP语音开发切到Android手机平台上的音频软件开发,主要是在音频DSP上开发音频软件。那时我对手机平台不熟,对Android系统不熟,对DSP不熟,有很多新东西要学,也曾怀疑过自己选择做Android手机平台上音频软件的正确性。现在一年过去了,我觉得选择是正确的。虽然还是做音频开发,但是现在是在更主流更大众的Android手机平台上开发,扩展了知识面,而且主要是在底层的DSP上开发(DSP不像ARM那样频率高内存大,而是频率低内存小,这就要求在写代码时有更多的技巧,同样的事情在DSP上开发可能要比在ARM上多花不少时间,这对能力的要求更高),能力也提高了。这一年下来做了不少事情,我自己觉得主要有以下收获:
1)虽然还是做音频软件开发,但是已经切到在更主流的安卓手机平台上做音频。经过一年的实践,对安卓手机上音频相关的软硬件有了更深的理解。音频子系统可以说是安卓多媒体系统中最复杂的子系统了。外设多,有听筒(earpiece)、扬声器(speaker)、有线耳机、蓝牙耳机等。使用场景多,听音乐、录音、打电话等,其中打电话又分为传统语音通信和APP语音通信(如微信语音),传统语音通信又分为2/3G语音通信和4G VoLTE语音通信。要把这些都做好是非常不容易的。
2)丰富了我做语音通信解决方案的种类,使我对语音通信方案的掌控更加游刃有余。我以前做过有线语音通信方案,也做过APP语音通信方案,现在又做了安卓手机上的传统语音通信方案,知道了APP语音通信方案的底层是如何实现的。可以说是目前主要的语音通信方案都做过了。
3)做了语音和音乐融合的方案。以前做的音频方案要么是语音的,要么是音乐的,功能单一。现在在Android手机平台上做音频,语音和音乐都有,是一个融合方案,复杂度会比单一方案高些。
4)掌握了在DSP上做音频软件开发。DSP上软件开发和ARM上软件开发是有一些差异的,在DSP上编程要求比在ARM上高。从刚开始做时的不熟悉不习惯到现在的熟悉习惯,虽然还谈不上精通,毕竟才做了一年。
2,AI学习
如今技术更新快,做技术的人就得不停的学新东西。如果学习停止了,一不留神发现自己out了,更惨的是自己竞争力下降出局了。2016年alpha狗战胜围棋世界冠军极大的推动了机器学习/深度学习的普及,让更多人知道了这个领域以及它的巨大威力。语音识别/智能语音作为深度学习技术最早落地的方向之一,也获得了快速的发展,从传统的“GMM(高斯混合模型) + HMM(隐马尔科夫模型)”到GMM用DNN(深度神经网络)替代,再到HMM摒弃不用而用端到端的CTC和RNN(循环神经网络)/ CNN(卷积神经网络)只用了四五年的时间,而且现在还在快速的发展着。我做传统音频/语音开发这么多年,智能语音可是说是语音开发的一个新的方向,我有必要去学习掌握它,作为自己现有技能的一个扩展,不管未来有没有机会去做它,再说机会总是给有准备的人的,哈哈。
学习新技术是需要时间的。我平时工作比较忙,经常加班,工作时间是不可能学习工作内容以外的知识的。周末要带小孩参加英文等的学习,也有一些私事要处理,也没多少时间用来学习,只能利用上下班做地铁的时间学习了。主要是上班途中学习,一是早上头脑比较清醒,二是下班时忙了一天已经很累了,学习新知识效果不好,还要花点时间刷刷当天发生的新闻,包括科技的财经的等。人既要埋头工作,也要看外面的世界。我上下班单程要一个多小时,这点时间在地铁里戴上耳机听着音乐,同时打开iPad学着新知识。先从传统的利用“GMM+HMM”语音识别学起。GMM/HMM主要是概率统计方面的知识,刚开始看时有点晕,毕竟多年不看忘得差不多了。又把当年学时用的书翻了翻,恢复了大部分,再去看GMM/HMM好多了。经过了一段时间的学习,大体上搞明白了用“GMM+HMM”做语音识别的思想。
GMM/HMM学完后就准备学深度学习。深度学习说的通俗一点又不十分准确就是深层神经网络。我在十多年前读研时就简单学过神经网络,那时就知道经典的BP算法了。神经网络是导师的研究方向之一,我不是这个方向的就简单学了下。当时看着博士师兄们经常在实验室电脑上用matlab做训练,心想神经网络也就只能在高校里做研究出出论文用,想不到多年后大放光彩,这得感谢Hinton教授呀。这也从另一个方面说明目前只在高校里研究的一些东西随着研究的深入以及硬件能力的提高说不定日后就能成为工业界的热门技术呢。我又把神经网络认真学了一遍,同时又把高数里的一些知识点捡了起来,尤其是梯度。这些都掌握的差不多后就看起了被大家奉为圣经的书《深度学习》中文电子版。这本书前面有需要用到的数学基础知识的介绍,也有机器学习基础知识的介绍,但介绍的不是很详细,毕竟这些不是该书的重点,只是告诉读者要看该书需要这些基础知识。我之前没学过机器学习,《深度学习》里只是简单介绍了下机器学习的基础知识,我想还是先学习一下机器学习吧。找来了机器学习领域的大牛南京大学周志华教授的书《机器学习》(俗称西瓜书),把一些相关的知识强化了一下。再去看《深度学习》,好一些了,还是有些吃力,公式太多。网上看了一下大家对它的评价,偏学术。就把这本书大概看了一下,没有深究。后来在网上找到了针对深度学习入门的系列文章(见后面学习材料清单,作者根据这些写了一本书,叫《深度学习之美》,本月上市),讲的通俗易懂,我看了三四遍,基本上搞懂了。在这里推荐给想入门深度学习的朋友。经过这么长时间的学习,我的感觉是基本上扫盲半入门了,但是缺少实际项目的操练。现在智能语音主要在云端做,有在终端(尤其手机)做的趋势。我是在手机上做音频的,希望有机会在手机上做智能语音。下面列出我主要看过的书或者文档清单,如果有朋友想学这些,可以作为参考。
《HMM学习最佳范例》
《机器学习》 (南大周志华)
《深度学习》
一入侯门深似海,深度学习深几许(https://m.aliyun.com/yunqi/articles/86580)
3,写技术博客
为什么要写技术博客呢?主要是受一本书的启发,这本书叫《软技能--代码之外的生存指南》,会写乐于分享就是其中的一项软技能。写技术博客是对自己已有知识和经验的总结和归纳,便于日后温故而知新(一些知识点一段时间不用就忘记了,把它记下来后面再用到时看一下就恢复起来了),也把自己的知识和经验分享出来给有需要的朋友。现在做技术的提倡开源分享,现在你跟别人分享了,哪天你在其他方面有困难时别人也会跟你分享的。比如现在我在学智能语音相关的知识,看了很多博客,也是在分享别人的知识和经验。同时把知识和经验写出来,让同行看到你在这个领域的能力水平,说不定什么时候机会就出现呢。做技术也跟好酒一样,也怕巷子深呀。
在写技术博客前好久不写正规文章了。以前在外企会经常写技术文档,那都是英文的,而且有模板,写的大家(尤其外国同事)能看懂就行了。写技术博客是用中文写,讲清楚技术和经验是最基本的,最好图文并茂。由于好久不写文章,刚开始写时总感觉写不出来,随着写的文章越来越多,现在好多了。文章发表后就会伴随着喜悦或者失落。喜悦是文章得到了大家的认可和推荐,记得发表文章《》后不仅获得大家的认可,而且得到了博客园编辑的推荐,在主页上推荐了两天,两天内总共有近3000次的阅读量,也获得了17次的推荐,很是开心。失落是文章选题不好或者大家不熟悉,没什么阅读量,有时甚至在博客园主页没多久就被编辑撤下了。做事情总是希望被认可的。
我的博客主题是音频开发,不像其他技术领域那样,从业人员不多,我希望看我博客的人都能有收获,也希望跟更多的同行交流。不管阅读量的大小,我后面还会继续写下去,依旧是工作中音频相关知识和经验的总结和归纳。加油!努力!争取出更多高质量的文章!