个人简介
本人本科毕业于某985机械工程专业,学习了四年发现这个行业实在太过于枯燥,更实际的想法是当时觉得这个行业出去薪资待遇过低,因此保研到另一所985高校之后,选择了车辆工程专业,研究方向为:多车协同控制,多车编队驾驶。想着毕业之后能去一家做自动驾驶的公司,但是由于种种原因毕业之后没能进入到比较好的自动驾驶公司,去了一家做车联网的互联网企业(这个时候V2X领域刚发展起来不久,处于非常热门的阶段),2020年大半年的时间里主要负责C-V2X协议栈的开发以及基于V2X通信相关的预警算法开发,今年由于项目的原因开始接触激光雷达、相机等传感器标定算法的开发以及基于这些传感器实现高精度地图的建图算法开发。在硕士毕业的这一年半的时间里,还是很迷茫,一直是项目需要什么,就学习什么,然后就开始做,虽然接触了很多新的东西,但一直觉得自己学得不够深入,项目做完了就结束了。
因此,经过深思熟虑,我决定以后专注于人工智能方向的学习,每天不管多忙一定抽出一点时间学习该方向的知识,并且记录下来跟C站的各位大佬们一起学习交流,共同进步,希望看到本篇文章的各位能够点赞、关注一下博主,我会定期分享我的学习心得,保证每篇文章都干货满满,非常硬核!!!今天发表这篇文章就是想激励一下自己,希望自己能坚持下去,今天刚好也是1024程序员节,希望以后每年的今天都能看到自己的进步,看到更加专业的自己。文章当中如果各位大佬发现错误,也欢迎积极指出!!!
如何学习人工智能
要回答这个问题,首先必须要知道人工智能到底是什么,包含了哪些具体的研究领域。我们经常会听到人工智能、机器学习和深度学习这三个术语,很多人可能说不清楚这三个词之间到底是什么关系,它们的区别又是什么。这里先给大家科普一下,三者之间的关系可以用下面这幅图来说明。
人工智能是一门新理论、新技术、新方法和新思想不断涌现的前沿交叉学科,它是在控制论、信息论和系统论的基础上诞生的,涉及哲学、心理学、语言学、神经生理学、认知科学、计算机科学、信息科学、系统科学、数学以及各种工程学方法,这些学科为人工智能的研究提供了丰富的知识和研究方法。作为一门前沿交叉学科,人工智能的研究领域十分广泛,涉及机器学习、数据挖掘、知识发现、模式识别、计算机视觉、专家系统、自然语言理解、自动定理证明、自动程序设计、智能检索、多智能体、人工神经网络、博弈、机器人学、智能控制、智能决策支持系统等领域,相关研究成果也已广泛应用到生产、生活的各个方面。
机器学习(ML)是人工智能的核心,也是使机器具有智能的根本途径。学习是人类最重要的能力,通过学习,人们可以解决过去不能解决的问题。机器学习是研究机器怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。只有让计算机系统具有类似人的学习能力,才有可能实现人类智能水平的人工智能系统。因此,机器学习在人工智能中起着举足轻重的作用,机器学习是人工智能研究的核心问题之一,是当前人工智能理论研究和实际应用的非常活跃的研究领域。
深度学习(DL)则是机器学习的一个分支。在很多人工智能问题上,深度学习的方法突破了传统机器学习方法的瓶颈,推动了人工智能领域的快速发展。
从上面可以看出,人工智能领域涉及的分支实在是太多太多,不可能全都涉猎,因此,本人未来很长一段时间将主要集中在深度学习分支的学习。
学习人工智能需要哪些知识
本人并不想直接就上手DL的学习,一方面本人目前不着急证明自己,暂时还不考虑换工作,因此有足够的时间来扎实自己的基础,这样更有益于后面对DL或者ML的深入学习。对于学习人工智能而言,本人认为最基础的学科知识主要涉及数学和计算机。各种人工智能技术归根结底都建立在数学模型之上,要了解人工智能,首先要掌握必备的数学基础知识,如利用线性代数将研究对象形式化、通过概率论描述数据的统计规律等。另外,还需要对DL或者ML的各种基础知识、基本理论和经典算法进行不断的学习和积累,像神经网络、支持向量机、遗传算法等。随着科技的进步,更先进的新算法也在不断涌现,这些都需要我们不间断地学习并将之应用于业务实践中。
下面先列出DL或者ML中一些常用的算法,如下表所示。
算法 | 概述 |
---|---|
线性回归(LinearRegression)(Linear Regression)(LinearRegression) | 线性回归是一种通过属性的线性组合来进行预测的线性模型,其目的是找到一条直线、一个平面或更高维的超平面,使预测值与真实值之间的误差最小化 |
Logistic 回归(LogisticRegression)(Logistic Regression)(LogisticRegression) | Logistic 回归是一种分类模型,如二分类公式:P(Y=1∣x)=exp(w⋅x)1+exp(w⋅x) P\left ( Y=1 \mid x \right ) = \frac{exp\left ( w\cdot x \right )}{1+exp\left ( w\cdot x \right )} P(Y=1∣x)=1+exp(w⋅x)exp(w⋅x) P(Y=0∣x)=11+exp(w⋅x) P\left ( Y=0 \mid x \right ) = \frac{1}{1+exp\left ( w\cdot x \right )} P(Y=0∣x)=1+exp(w⋅x)1 根据给定的输入实例 xxx,分别求出 P(Y=1∣x)P\left ( Y=1 \mid x \right )P(Y=1∣x) 和 P(Y=0∣x)P\left ( Y=0 \mid x \right )P(Y=0∣x),比较这两个条件概率,将实例 xxx 分到概率值较大的那一类 |
决策树(DecisionTree)(Decision Tree)(DecisionTree) | 决策树从根节点开始对输入实例 xxx 的每一个特征进行测试,根据测试结果决策树将 xxx 分配到其子节点。每个子节点对应着该特征的一个取值,如此递归地对进行测试并分配,直至达到叶节点,最后将 xxx 分到叶节点的类中。通常特征选择的准则是信息增益或信息增益比 |
支持向量机(SupportVectorMachine,SVM)(Support Vector Machine , SVM) (SupportVectorMachine,SVM) | SVM的基本模型是二类分类模型,属于有监督学习,是在特征空间中找出一个超平面作为分类边界,对数据进行正确分类,且使每一类样本中距离分类边界最近的样本到分类边界的距离尽可能远,使分类误差最小化 |
朴素贝叶斯(NaiveBayes)(Naive Bayes) (NaiveBayes) | 在输入实例 xxx 的特征相互独立的前提下,根据下面的贝叶斯公式,预测结果属于类别的出现概率,哪个类别的后验概率最大,就认为该实例 xxx 属于哪个类别 P(Ci∣F1F2...Fn)=P(F1F2...Fn∣Ci)P(Ci)P(F1F2...Fn),i=1,2,...,mP\left ( C_{i} \mid F_{1}F_{2} ...F_{n} \right ) = \frac{P\left ( F_{1}F_{2} ...F_{n} \mid C_{i} \right )P\left ( C_{i}^{} \right )}{P\left ( F_{1}F_{2} ...F_{n} \right )},i=1,2,...,mP(Ci∣F1F2...Fn)=P(F1F2...Fn)P(F1F2...Fn∣Ci)P(Ci),i=1,2,...,m |
KKK最近邻算法(K−NearestNeighbors,KNN)(K-Nearest Neighbors,KNN) (K−NearestNeighbors,KNN) | KKK 最近算法会给定一个训练数据集,对新的输入实例 xxx,算法会在训练数据集中找到与 xxx 最邻近的 kkk 个实例,如果这 kkk 个实例大多数属于同一个类,就把实例 xxx 也分到这个类中。距离函数可以是欧式距离、曼哈顿距离、明式距离或汉明距离 |
随机森林(RandomForest,RF)( Random Forest , RF)(RandomForest,RF) | 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器。它的基本单元是决策树,每棵决策树并不完全相同,采用多个决策树的投票机制来决定最终分类。随机森林的构建包括数据的随机性选取和待选特征的随机选取 |
降维算法(DimensionalityReduction)(Dimensionality Reduction)(DimensionalityReduction) | 在机器学习中经常会碰到高维数据集中、数据样本稀疏、距离计算易出现特征之间的线性相关等困难,这时需要做降维处理。降维方法有很多,主要包括主成分分析(PCA)、线性判别分析(LDA)等 |
AdaBoost 算法(AdaptiveBoosting)(Adaptive Boosting)(AdaptiveBoosting) | AdaBoost 是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)的迭代算法。每一次迭代时,提高那些被前一轮分类器错误分类的数据的权值,降低那些被正确分类的数据的权值,最后将基本分类器的线性组合作为强分类器。给分类误差小的基本分类器以大的权重,给分类误差大的基本分类器以小的权重 |
最大期望算法(ExpectationMaximizationAlgorithm,EM)(Expectation Maximization Algorithm, EM)(ExpectationMaximizationAlgorithm,EM) | EM算法是针对含有隐变量的概率模型P(X,Z∣θ)P\left ( X,Z\mid \theta \right )P(X,Z∣θ)来估计参数 θ\thetaθ的选代算法、XXX 是观测变量的数据,ZZZ 是隐变量的数据,OOO 是模型参数。基本思想是首先随机初始化参数 θ\thetaθ、然后不断迭代寻找更优的参数 θ\thetaθ。每次迭代包括两步:EEE 步以当前参数 θ(i)\theta ^{\left ( i \right )}θ(i) 推断隐变量分布 P(Z∣X,θi)P\left ( Z\mid X, \theta ^{i} \right )P(Z∣X,θi),并计算出对数似然 lnP(Z∣X,θi)ln^{P\left ( Z\mid X, \theta ^{i} \right )}lnP(Z∣X,θi)关于 ZZZ 的期望,记作 ZiZ^{i}Zi;MMM步基于已观测变量 XXX 和当前隐变量 ZiZ^{i}Zi 对参数 θ(i)\theta ^{\left ( i \right )}θ(i) 做最大似然估计,使每次代得到的参数 θ\thetaθ 的似然函数 P(X∣θ)P\left ( X\mid \theta \right )P(X∣θ)比原来的似然函数大。 |
上面总结的算法可能还不全面,后面随着学习的深入会慢慢更新。上面的很多算法可能很多人现在还看不懂,不要着急,跟着我一起学习,那么将来的你一定会感谢现在努力学习的你!!!
从算法实践的角度来看,我们还需要掌握至少一门人工智能的编程语言,例如被称为机器学习最优秀的语言 Python
,具有语法简洁、易读易学、可移植性好、有丰富的库支持等优点, Python
采用强制缩进的方式也使代码具有极佳的可读性。用 Python
做科学计算的研究机构日益增多,一些知名大学已经采用 Python
来教授程序设计课程。众多开源的科学计算软件包都提供了 Python
的调用接口,而 Python
专用的科学计算扩展库更多,经典的科学计算扩展库 NumPy
、 SciPy
和 Matplotlib
分别为 Python
提供了快速数组处理、数值运算及绘图功能, Python
语言及其众多的扩展库所构成的开发环境十分适合工程技术人员、科研人处理实验数据、制作图表,甚至开发科学计算应用程序。另外, Python
完全免费,大家可以在任何计算机上免费安装 Python
及其绝大多数的扩展库。
虽然本人自认为自己的数学功底还不错,高考140+,本科参加全国大学数学建模竞赛国一,国际数学建模竞赛一等奖,但是很多知识点因为平时很少用,已经忘记得差不多了。因此接下来一段时间,我将首先再复习一遍微积分、矩阵理论、线性代数以及概率论等等,希望想学习人工智能方向的各位小伙伴也能跟我一起学习,扎实自己的数学功底。这一部分数学公式实在是太难编辑了,希望看到本篇文章的各位小伙伴能够三连支持一下!!!我也会在这篇博客实时更新我的学习目录,希望大家收藏起来哦!!!