深度学习和计算机视觉的一些思考和总结

        做视觉和算法也有一年多了,是时候做一些必要的思考和总结。

        最初接触深度学习是这样的,老大打算做一个深度学习框架在云环境下自动化部署的一个项目。之前对云这块还比较熟悉,误打误撞开始接触前段比较火的深度学习领域。这个任务还是比较简单的,只要把一个深度学习训练任务的各个步骤串联起来放到kubernetes里面run起来就ok了。对深度学习训练的一些基本知识有了初步的印象,随机梯度下降,epoch,同步训练,参数服务器,等等。理解这些不需要太多专业领域知识。不过自己并不甘心与此,想拿些基础知识做下补充。结果一下子把自己带到坑里面去了。怎么进坑的呢,就是把good fellow写的《deep learning book》看起来了。

       现在要我总结起来,《deep learning book》这本书,对于搞工程的人来说,没必要看,这本书主要受众还是有做学术倾向的的人,并不适合工业界的人做入门。我上来先把前几章的数学基础补充了下。之前看过李航老师的《统计学习方法》,因为里面没怎么写数学基础知识,对于SVM、PCA等公式推导看的不太明白。所以拿到《deep learning book》感觉如果至宝。现在的结论是,前几章里面讲线性代数的部分还是有必要熟悉下,关于矩阵的知识分非常基础,几乎涉及到了全领域所有部分。但是对于统计相关的只是,倒是没必要一开始就深入那么多。因为本人是数学系出身,对理论和抽象的东西比较敏感。所以开始的时候花了很大的经历去理解贝叶斯统计,现在想想意识必要性不太高,而是这部分需要一段时间的积累,不是短时间内能理解的很深。另外,如果是做视觉,对贝叶斯统计这块可以不看的,如果是要搞NLP或者传统机器学习中概率图模型(时间序列分析),还是要把一些基础概念吃透的,比如马氏链,吉布斯采样,EM算法等等。

       正当恶补基础知识没有完成,还有点懵懂的时候,因为工作的需要,马上开始一个传统视觉算法性能优化的项目。刚开始要看论文,有点似懂非懂,公式推导部分肯定就略过了。不过看过代码之后,倒是对论文中描述的算法有个整体的理解了。计算机还是一门偏实践性科学,有了代码就有了理解。现在回顾起来,传统视觉算法还是比较容易入门的,大部分都是先用一些数学方法,比如hog提取特征出来,然后基于传统机器学习框架(线性、SVM、决策树)训练一个模型出来。反倒是深度学习的模型比较简单,复杂的数据预处理部分没了(hog harr sobel),傅里叶变换,滤波器等等都不要考虑。所有的问题都用神经网络解决。

       神经网络的拓扑结构,训练框架这块倒是没太多深的东西。几个经典模型论文读也不太难。坑比较深的还是模型训练。数据预处理的选择,优化算法的选择,优化算法的调参,模型预训练,loss函数的调优,这些可变或者可选的东西很多,不同的问题对于不同选择的敏感性可能不同。也许优化算法和预训练折腾半天,只是对于训练跌倒的epoch有影响,反而不如数据预处理的时候做个简单的垃圾数据清理。

     深度学习目前在一些关键的能力点,如检测、识别、语义分割等方面比传统方法有了突破性进展,已经达到甚至超过人类的水平。但是还有很多视觉问题是深度学习解决不了了,比如定位、跟踪等等,当然这方面传统方法也发展很多年了,也算比较成熟。最后还一个问题就是深度学习的方法很消耗性能,不少地方还需要结合传统方法,牺牲最终效果的同时减低成本,最终实现商业落地的可能性。

       回到商业落地的问题上,视觉的话还存在一个悖论,就是应用广泛,但是迫切性不高。虽然AI在视觉领域已经突破了科学理论的鸿沟,但往往落地的一些应用都是一些辅助性的功能,比如安防的人脸识别,零售领域的刷脸支付,客流分析。目前看到存在颠覆性的领域就一个---自动驾驶无人车,基于视觉方法的障碍识别。无人车也是是个非常复杂的工程问题,深度强化学习虽然很多,但目前的研究水平还无法在无人车的控制和决策上启动关键性作用。视觉的坑踩的感觉也是不少了,后面有时间的话研究下NLP和时间序列。

你可能感兴趣的:(算法)