00:13
我们先说一下这个课程的背景,我们假设这个课程的同学呢是具有Python基础和高等数学基础的。高数呢,你可以记不住,但是呢,大概要有一个印象,现在的,呃,现在做程序员的好处呢,就是说什么东西都不用你自己写,你只要调就可以了,对这是好处,所以高数呢,你们也不用学的特别通,但是呢,印象你要懂,因为什么呢?当你面面对到一个问题的时候,你发现你的你的idea不work的时候,你一定要知道为什么这个idea不work,这个时候就需要你有算法和数学基础了,比如说你用了一个错误的一个数学工具去做一个,呃,应该是其他的数学工具解决的一个问题,你就做不成明白吧,然后呢,第二个是呢,不要求有深刻的算法基础,但对基本的数据结构和算法一定要了解。
01:06
大家在Python里边学过列表对吧?列表是什么?是数组对吧?是数组,那么数组是最简单的一种数据结构了对吧?数组是最简单的一种数据结构,它就是一个线性表,在数据结构里叫线性表,那么为什么叫线性表?因为它的元素都是并排着放在一块的,紧紧挨着的,那么还有一种稍微高级一点的数据结构呢,叫数,数是大家在面试里边基本上一定会考的题,二叉树一向翻转啊,便利是吧是吧?这些东西大家最好回去能补充一下这个基础啊。数说起来也很简单,就是有一个根,然后上面有两个子节点,当然就是二叉数啊,如果是平衡的话呢,那两边的这个层高呢,最最大的差距不不大于一,对吧,是一个平衡二叉数对吧?啊,然后呢,就是数,在数的基础上,还有一种稍微复杂一点的数据结构呢,就是图,打比方说微信我们都不要加好友了,对吧,那我不可我不可能加。
02:06
加成一个树形拓扑的好友吧,对吧,我是一个跟节点,你们都加我是吧,然后你们是第一级子定点,这这是传销是吧,这不是微信吧,微信是互相加好友,所以它是一个大的图,它是这样的,就是人和人之间都可以建立连接,对,都有连接,任何一个数据结构都涉及到一个两个问题,只有两个问题啊,第一个是遍历,第二是查找图呢,你也需要遍历,比如打比方说我们现在一个班里都是好友,那么你怎么把我们这个班里的同学用最快的速度遍利一次。大家可以想想这个问题,就我们这个班现在已经互相加好友了,但是肯定不是全连接的,不会是我们每个人和每个人都是好友,我们可能是互相这有有关系,好点的是好关系,不好一点可能不是好友啊,啊,那我现在随便给你一个节点,你怎么用最快的速度,或者说最短的路径,什么叫最短路径呢?就你不能说便利一个班,但是呢,你走了三四百步,这就很长了,你怎么用最快的路径把这个全班的人遍离一次。
03:10
这里边涉及到两个问题,一个是深度优先搜索,一个是广度优先搜索,面试里你肯定会问到,所以我我简单提一下,深诉的意思就是我先找到我第一个好友,然后呢,就着这个好友再找到他的第一个好友,然后就是这个好友的好友再找到他的第一个好友,就是像一个树一样,先把一条路径找到底,然后呢,因为找到底了,所以再往回一一个节点一个节点往回撤,撤到,因为第一个人已经找到最后一个好友了,对吧,这个好友已经没有,没有人再回找了。这个好友最后一个节点没有人,可以再去找,往回撤一个,再找这个人的第二个好友,然后把这个人的所有的好友都找,找遍以后再找上一个人的每一个好友,每次找到一个,再往下走一个,这是树形的深度优先搜索。明白吧,还有就是广度先搜索,广度先搜索呢,必须借助一个队列去实现,就是我先搜索我所有的好友,对,但是呢,我说我所有的好友怎么存呢?所以得放在一个队列里,然后呢,对这个队列开始便利,对每一个人找到他所有好友放在队列的尾部,不断的放,不断的放,当我把这个队列遍历完之后,就把所有人都搜索到,所以图这个地方还是比较困难一些的,然后呢,算法上稍微困难一点的呢,就是排序和动态规划。
04:33
动态规划里边有两个比较经典的问题,一个是最长公共子序列,一个是字符串的最长公共子串。咱们就拿最长公共子串来说吧,就是给你ABCDEFG和EFG这两个两个公的字符串是吧,让你找到这其中最长的公共的字串。这这这这个很简单,但是如果是AFG。
05:04
对吧,你要怎么去做呢?可能有些人就会说我去穷举,我先从A开始举,举不到下边的时候好了,这个我存下来。对吧,然后再换,再从B开始穷举,上面是ABCDEFG,下面是ABFG,对不对。有人就会这么做,先从A开始穷举,对上面每一次便利一个,然后那肯定便利到B就便利不下去了嘛,肯定便利不下去,所以是这是AB,我知道了它是ABB一个,然后再从B开始对上面变利,肯定变利到B又变利不下去了,B又是一个对吧,然后E又是一个啊EFG是一个,FG是一个,然后最后一个是G对吧?跟你说这模这个算法的复杂度非常非常高,大家如果在面试的时候,一旦你感觉到自己做那个东西啊,是一个二元的问题,就是左边一个东西,右边有个东西,并且你需要反复的对右边这个东西去遍历的时候。
06:00
这个时候你做的这个方法算法肯定不好,肯定不好,因为至少有一点啊,信息论里边讲的是我只要对上面这个字符串见到过一次,我就应该知道他的所有信息,对吧?而你现在对下边每一个字符串都对上面做了一次遍历,你想想多变了多少次?这个在数据量小的时候根本就无所谓,或者说我们群体包括人算都无所谓,但是你在公司里边处理的往往是那种上G的或者上T的数据,你这种去便利的话,很可能本来是两天能做完的事情,现在变成一年了,根本就做不完了,对吧?所以这个这个地方大家一定要有一些基本的一个概念,解决这种问题的最关键的算法就叫做动态规划,这个算法大家可以自己下去再看一下这个算法的基础。啊,还有这种,比如说一个楼梯有十十个台阶,我一次只能上一个或上两个,你有多少种上法,有些人就会说,我便利一下,看看有多少种上法是吧?实际上这也是不现实的,十个台阶呢,那你只有要么一次上一道,要么一次上两道,你有多少种上法?先通过对动态规划就可以很好的把这个问题解决掉。
07:10
这个算法的思想大家可以回去看一下啊,然后呢,递归这个这个这个这个东西给大家也简单提一下吧,就是大家知道递归在很大的程度上可以减少你程序的复杂度,比如打比方啊,比如说现在我有一个数,左边这个树呢是左子数,右边数是右子数。大家都了解这事,我现在要把这个数镜像的左右翻转。这个事情去怎么做呢?镜像左右翻转这套这道题是一个很经典的面试题啊,这种情况下递归就是非常好的一种工具,为什么呢?因为我如果写循环,我要不我要遍历好多次,对吧?而且我还要存好多信息,然后我完事之后我才要遍历右边这个,而且对于每一个节点我都要编利好多信息,这很痛苦,对不对?但是我用递归就很简单,递归怎么做呢?呃,就写一个函数,比如说那个写一个方程。
08:07
第一步是就假设它是root root不变对吧,因为你root是镜像嘛,Root不变对吧?然后呢,把root的左边left和右边怎么样对调right对调对对调完这个地方不就对调完了吗?然后之后呢,Return,直接写个return或者写什么,再去调那个函数function,然后呢,把left送进去,然后再return一个function把right送进去。这个这样的话,这个面试题就完事了,这样的话你整个写起来可能一分钟都不用,但如果你写循环的话,我估计半小时也写不出来,面试半会会看就傻了,OK,这就就这个题的话,一时我估计他就会说你二他说的反转都不会,这肯定不能要,对吧,所以大家那个Python这块下去一定要把这个基础再夯实一下,我们这两天的内容啊,其实是比较多的,呃,也给大家交个底,就是说嗯,学这个课呢,嗯,肯定是不可能第一次就学会,但是呢,大家可以通过这两次课先建立起来一个基础的一个观念,这个观念建立起来之后呢,在后续大家去做各种各样的事情的时候呢,你不会犯很大的错误。
09:18
至少你对数据是有敏感度的,而且当你在面面对一个同事的时候,比如说你工作五年以后,你发现,哎,我现在直接到瓶颈了,我想向数据分析,像人工智能方向去转,这个时候因为你之前五年就学过,所以你会有一个很长时间的一个基础的一个概念。你不会像刚学一样那么懵懂是吧?这个时候你再去同样学,你就会比别人快是吧?所以呢,这是我们这两天的课程的一个,呃目的哈,就是不希望大家就是学的特别透,但是呢,基本概念大家要了解,呃,这里面我们主要的这个课程资料呢,取自一些公开课,取自SKN和特斯flow的一些官方网站,特斯大家应该也了解啊啊,现在是比较最火的开源框架对吧,搞这个深度学习的呃,做Python是一定要知道这这两个这两个包的啊。
10:11
然后呢,斯坦福大学的CS224D和231N这样这个视觉的,还有一些这个自然语言处理的,然后以及G他的一些部分的代码仓库和一些网络和搜索引擎,也有部分资料和代码呢,那是我自己这边写的书籍呢,大家想阅读书籍的话,有这么几本,国内的话基本上就是看周世华,南京大学周世华的这个机学习。这本书写的比较晦涩啊,就是对大家现在这个水平来看呢,可能还是看不懂,然后还有就是就是李航的统计学习方法,然后还有一本国外的书,也叫PRML,呃,模式识别和机学习是吧,对和模式learning这样一个呃书,然后呢,还有一些其他的一些这个英文书,现在的书已经比去年我看已经多很多了,但是呢,真正要是想学到一些比较新的一些技术的话,最好还是多读读论文,对。
11:05
然后我们第一天的这个大纲呢,是简单给大家介绍一下这个人工智能的一个历史,然后第二部分呢,是人工智能的数学基础,这个数学基础吧,其实我并不是很想把它讲的很多,因为数学对大家来说呢,这个本身是搞理论的人去研究东西,我们不用,对吧,平时写情绪的时候从来没用过数学,但是如果数学基础大家不够好,我还是那一句话,你做很多问题的时候,很多很多事情的时候,你就不知道它的方向在哪里,你会犯一些根本性的原则性上的错误,以至于你这个工作根本就做不出来。像人工智能发展,像七八十年代的时候,比如打比方说做人脸检测,他的准确率可能只有20%,他一直做不上去,不管他用了什么样的优化方法,用了什么样的trick,用了什么样的这个小小的窍,肯定超过这个线,为什么超过这个线呢?就因为他这个数学逻辑,这个数学基础,他用这个方法本身就是有天花板平行,所以你再用各种各样的很很高大上的这个描描述啊,或者怎么样,他这个准确度都上不去,所以数学我一定要给大家简单讲一下,接下来呢,会给大家讲一下回归和分类,这两个词是大家第一次听说的,所以简单来说呢,回归呢,就是对连续值的建模。
12:28
分类呢,就是对离散式的项目。比如打比方,身高是什么?是回归男性和女性这分类,然后呢,接下来会讲一个比较重要的一个模型,叫决策数,接下来会讲一个呢,呃,可以这么说吧,不算很难,但是呢,在机器学习里还举足轻重的这样一个模型叫普素的斯,对。然后呢,我先开始我们这个人工智能代数的这样一个过程啊。
我来说两句