00:14
今天的主要内容呢,有这么几个,第一个是深度学习的简介。第二是框架的简介,为什么说要写说框架呢?啊,因为深度学习大家搞懂了之后,就好像是你拿着一本IP协议一样,你把IP协议搞懂了,但是你不可能从头开始开发,明白吧,一定有一个框架是支持你通过一些上层的一些应用,一些函数封装好的一些类,一些包,让你去调用,这个时候我们才可以更快的开发一个呃,一个一个程序是吧,可以帮你做一些健康性啊,包括这些容错性的一些检查,那么第三点呢,是叫CN。CNN呢,是最开始引爆这个深度神经网络的一个技术,CN是什么东西呢?叫卷积神经网络。
01:07
这是视觉,现在视觉里边基本用的所有的模型都是CN的模型,在图像,在语音领域里,如果现在还在用以前的机器学习的模型,然后不是用现在这种CN的这种深度学习模型的话,基本上已经全被淘汰了,已经在这个时代就已经不可行了,然后呢,第四个呢,我们要说的是这个语义理解相关的东西,就是自然语言处理相关的东西,主要讲的呢,是这个循环神经网络。也就是二人。循环神经网络啊,也是循环神经网络,三个这个字母,字母的这个合并在一块儿。CNN的和RN呢?呃,分别完完成了这个图像和文本的理解,那么值得一提的是啊,这个RN不仅完成了文本的理解,它还可以理解语音。
02:00
因为RN是循环神经网络,它是循环着往前的,对吧,只要你是一个时序的信号,它都可以理解。大家明白这概念吧,比如说古诗是一个实际信号,对吧。呃,音乐是一个时续信号,对吧?啊,说话语音是一个时续信号,那么很多都是一个时序信号,都可以理解对吧。我们昨天给大家简单说过那个深度学习的一个基本发展啊,呃,在这里面呢,我还得简单再给大家回顾一下,深度学习呢,在2006年的时候。就已经有了雏形,当时呢,有一个大神,这个就实际上比较牛的一个人叫hinton。他就是呃,带领他的学生非常孜孜不倦的做这个深度神经网络的研究,我们昨天说过,最开始我们出现了一个模型,叫什么胆汁机,对吧。感知机,感知机的最大的弱点在于什么地方?
03:03
还记得吗?解决不了抑货问题是吧?啊就比如这是个这两这两圈,这是圈,那抑货问题感知机就是一条直线,无论他如何去分,他都解决不了这个问题,对吧?但是呢,Kton他们不相信,他们觉得这个东西一定是未来发展的一个方向,所以呢,最开始他们做了很多年的冷板凳,但是呢,他们一直在这个研究这个神经网络,神经网络最开始有几个比较大的问题啊,第一个是参数数量巨大。为什么说传输数量巨大呢?大家想一想啊,假设我现在有一个神经网络。第一层呢有两个神经元,第二层呢又有两个神经元,第三层有两个神经元是吧。这这这三层神经网络加一块并不是六个神经元,并不是六个参数。大家能理解吗?第一个你可以连到第二个是吧,参数可以随便设置对吧,那连到它参数又可以随便设置W1W2对吧,第二个又可以W3W4对吧。
04:08
那还没算第二个分值,它可以量第一个,第二个,它每一个都可以连接,对吧?这个参数数量是极其巨大的,最开始我们用的计算机都是内存都是几十K是吧,后来好一点的,我们用的硬盘是10G20G的哈,2000年前后,然后呢,呃,我们用的内存呢,那个时候比较好的内存就是128兆的,128兆的内存呢,当时觉得很大,但是现在来看,128兆什么都做不了,对吧?什么都做不了,这个神经网络呢,128兆内存是根本就训练不了的。所以呢,Ton他们在2006年即使提出了一些算法和一些这个这些一些实现的一个基本理论,但是因为没有硬件资源。他提出这个理论,他也得不到结果。那明白是吧。那么为什么在2000呃,2012年的时候,神经网络突然大火了呢?因为我昨天给大家讲过啊。
05:05
在2010年的时候,我们很多的传统机器学习算法,类似于SDM,做这个人脸检测,行脸检测识别,做各种各样的工作,都是SVM啊,很多的SM,因为我们昨天讲过SVM是一个什么强分类器,对吧,它非常强,它这个能力非常非常强,再一个很强的一个分类器是什么?随机森林对不对。随机森林,包括这个LR,我们昨天讲过,这个老去,这个回归,对吧,都是我们讲过的,包括甚至包括现有回归,他们在两千一零年前后的时候已经集体平静了,比如说我做人脸表情识别,他最高的准确率达到70%,这可能是一个比较高的数字了啊,他最正常可能60%多,但是再也上不去了,无论无论做什么去,无论做什么样的工作,都没有办法让他上去。那么这个时候恰巧呢,我们知道哈杜和这个。
06:00
大数据框架是在这前后发明出来的,对吧,其实Google的那个GFS和他的map reduce是很早就有。对吧,大家知道是2003年2004年左右Google的,呃,三驾马车嘛,是吧,GFS是吧,还有一个什么big table,那顾客当年他做这三架马车的时候,很显然啊,他没有开源。所以导致他在后面一些年一些年里边哈,Google当时的那个没有现在影响力这么大。后来Google就吸引吸取了这个教训,他近些年不断的在开源各种各样的东西,比如说Java script v法引擎,对吧,比如说像特斯flow是吧。还有一些像其他的像那个库是吧,容器管理这些东西对吧。对吧,大家知道是吧,就是他不断的在开源各种各样的东西,让他这个影响力特别强大,所以这也是他现在一个策略啊。
07:03
那说到这,我们就就引出这个问题,当时hinton他做这个单机的这些训练效果都不好,那后来为什么2012年突然间深度神经网络就就爆发了呢?因为在那前后哈杜op大数据体系变得特别火。大家可以有印象,2012年左右的时候,那时候基本上都是什么,都是大数据是吧,2013年是吧,甚至到一四年大数据是不是火了好多年,到现在也一直在火着,对不对,你现在已经不能说他火不火了,他已经成为了一个基础的底层服务。这就像AI一样,AI可能未来也是成为这样一个东西,就是它,它不会说,再说他火是不火是必备的一个东西,它能叠在上面做数据分析,这个必备的东西,对吧,这样一个东西,那么当时出来了这个大数据这个体系,大数据呢,就导致这个呃,集群的这个扩展。而且随着这个硬件的发展呢,GPU在当年发展的速度也非常快,大家知道GPU有这个,一般现在有这个AMD和这个英伟达是吧?啊恩卡恩卡,呃,恩卡现在的性能比前几年已经快速了好多好多,而且它的市值也涨暴涨了很多,为什么呢?就是因为深度学习这个技术所推进的。
08:23
显卡相比CPU来说,它更适合矩阵运算。对,比如打个比方,我们的屏幕是吧,现在有各种各样的颜色,打游戏的时候有颜色,那么如果用CPU一个像素一个像素去算的话,你这个肯定是跟不上的,对吧?大家也有一个体验,说我如果这个机器没装显卡,打游戏就不行了,对吧,非常卡对吧?CPU虽然很强,但他擅长的是什么呢?指令判断和这个分值预测,逻辑运算,他不擅长这种矩阵运算。而屏幕上一幅图像就是一个矩阵,这个矩阵扔到显卡里去,它就能直接给你得到一个结果,明白吧。
09:02
就直接得到结果,不需要说CPU1点点计算,所以GPU特别适合矩阵运算。然后我昨天也说过,深度学习主要在做的什么事呢?就是矩阵运算,所以GPU和深度学习就相当于一拍即合。那具体有几年呢,也是发展的非常非常快啊,所以呢,现在的计算能力和这个存储能力都相比以前要大大提升了。计算和存储都大大提升了,所以呢,他们原来提出的一些模型和一些算法,在现在有可能得到实现了,明白,所以说现在到2012年这个深度学习特别火,所以看起来是一个偶然,其实也是个必然啊。传统机器学习昨天我们讲过啊,传统机器学习做数据的一个处理的时候是怎么做的呢?比如现在你看到一个大象和一个犀牛,你要把大象和犀牛分开,对吧。首先你要去总结一下,你要去做特征工程,它有牙对吧,它有角对吧,它的这个地方往往是比较壮一些,它的这个地方往往长一些,对吧,它耳朵很大是吧?对对对,然后呢,这个犀牛呢,这个这个眼睛可能比较小是吧,眼睛比较低,这个地方还有脚对吧。
10:15
你要做无数这样的特征工程。有一个特征工程之后呢,就像我们昨天给大家说的,有没有角是吧,零一是吧,那个眼睛大小是吧。0110是吧,那上面可能是大象,下面是犀牛。下面就是犀牛啊,我也不知道西怎么写,怎么打字,所以在这个时候呢,我们我们能看到我们的确总结出来很多特点,对吧?但是大家想一想,当你看这幅图像认为它是大象的时候,你是先分析这些点吗?肯定不是,对不对,甚至你会觉得捕捉到了这个脚,或者是捕捉到了这种皮肤的纹理,你就会觉得它是大象,那个是犀牛,对吧?你从来不会去思考那么细致,说他有个小,然后这个他有个牙,然后他的耳朵非常大,你不会想这么多事儿,但是呢,我们怎么让计算机去学习这个东西呢?我们如果不通过特征工程的办法,实际上在深度学习出来以前是没办法做的。
11:16
对吧,你没有办法做,你把这个图像全扔给计算机,想让大家想一想,LR能能接受这样的东西吗?对吧?老去回归能接受这样的东西吗?他接受不了,对不对?你把它,你把像素变成一一排矩阵变成一排点,的确可以接受,但是大家可想而知啊,这种做法它的它的准确率会非常低。因为大部分都是噪音,对不对,比如打比方,国家打个最简单的比方,大向向右平移了一点。大象车又平移了一点啊。上面是这个大象,那大家幻想一下,这个大象向向右平移了一点,如果你把图像变成一个一维的一个向量扔到逻辑回归里去做分类的话,那这个向量是不是整体平移了一点是吧?那前面肯定有些噪声补上了,那后面肯定砍掉了,从我们来看呢,这两个全是大象对不对?他俩全是大象,它俩没有任何区别,但是从LR这个模型来看呢,怎么样,向量发生了巨大的改变?
12:15
对吧?可以想一想线性方程组as as1加上BS,二加上C,假设这么一个方程组的话,你把S1 S2全往后串一位,相当于系数谁往前提一位,那能对吗?对吧?这个结果肯定天差地别,立马就错了,对吧?呃,而且用其他的各种模型,你这个事都是分不开的。所以呢,最开始呢,这个图像这块领域没有什么进展,然后呢,找工作也很难找,就很多人可能也觉得不太喜欢做图像啊,都做小孩就喜欢做别的去。嗯,机器学习呢,这个套路呢,就是说通过采集了很多数据,呃,样本数据,然后呢,去做了一个人工特征工程,再加上相对简单的这个数学模型,就昨天我们讲的L2啊,普做贝列斯啊,还有这个决策数。
13:04
大家虽然说公式推导上觉得自己推出也困难,但是理解起来并不困难,对不对,并不难,当然机器学习后面有难的模型,但是我们也没讲那么多,但是呢,我们这么说他基础能工作的模型呢,就没那么难。它实现对这个数据分布规律的学习和客观世界规律的一个建模,这个模型呢就比较弱,然后因为我们现在哈,这个互联网的这个数据量每天都是爆炸式的增长,对吧,我们每天有非常非常多的这个数据,那么很多人就会想,我数据这么这么这么多,我有什么办法能从数据里学到一些更高阶的一些特征,就不是我人总去总结,比如刚才那个犀牛和大象是吧,新大象我总是人去学,现在犀牛和大象在网上一搜,这个百度图片,你能搜出来一千一千张,1万张,那么我现在有了这么多数据,理论上讲计算机已经足够能区分出来什么是星球,什么是大象了嘛,对吧,不需我就做腾空对不对?从信息论的角度来说,我只要给他,他肯定会知道,因为肯定肯定是不一样的嘛,对吧。
14:08
那问题是怎么学的?这里面特呢,他们就提出了,呃,不是那个Google的那个李菲菲,他就提出了一个challenge,就一个活动,他怎么做呢?既然我有很多数据了,那我建一个数据库叫image。一个非常大的数据库image net建立起来之后呢,由全世界的人去中包的标注图片,对吧,比如说因为奈特今天收录了一张图片,那个呃,然后呢,他在这个假设他是这样的,有的人看起来是大海,那有的人有人人一就给他标一个大海对吧,第二人看以为是这个数字是吧,就标了一个数字,三个人取两个人,他的标注结果作为这个图片的一个什么标签。
15:00
这图片的标签明白吧,这个数据库呢,变得非常大,后面的,呃,总共呢,现在有100多万的一个数据,有很很多这这个呃,这个数据量在上,很多这个标注的数据在上面,然后呢,因为这个数据有了之后呢,大家就开始研究各各种各样的模型,就是说谁在image ne这个1000类的一个子集,这个分类上能做到最优的准确率,做这么一个比赛,这个比赛呢,就极大的刺激了这个深度学习的一个发展,到后面我们会说它这个网络的这个升级是怎么一步步做出来的啊。然后呢,这里面先让我们先回顾一个问题,就是说我们昨天讲过的,呃,感知机我们说过还是没问题,感知心不能解决抑或问题,对吧?好,不能解决抑货问题。这是它的图片不能解抑或问题是吧,为什么不能解决抑或问题呢?因为我们知道对感知机,呃,对这个一个抑或的一个矩阵。
16:03
这是一个异或的一个矩阵,就它做这个特征值分解,得到的是两个特征值,一个是零,一个是二,对吧,可以去算一下就知道了啊,大家可以试着用一用各种各样的方法去对它这个以后问题做这个分,呃,做这个超平面啊和这个分类。都不会得到很好的效果,然后呢,有人就会想用神经网络是不是可以。就提出了这么一个很奇怪的一个东西。是吧,大家看看这个神经网络怎么去实现这个事儿哈。首先呢,我们我们我们现在弄一个坐标系出来是吧,这个这个点我认为是零零对吧?好。S1S2嘛,对吧,没错,SS200。这个边呢,我让他是乘上0.5,当然这个具体值我也记不太清楚了,我们就让他先乘0.5看一看。零点。
17:03
如果乘完的话呢,这上面是零对吧,下面也是零,那么就分到了这个,呃,啊,这样乘负0.5,另外一个边乘负0.5。大家看看乘负零五负零五有什么有什么现象哈,如果全是零的话,乘完这两边都是零对不对?如果全是一,乘完这两边还是全是零对不对。如果是一。负一乘完这边是什么。这是一,这是负一,这是一对不对,这是一对不对,如果是负一,一乘完是什么?还是一对,一对吧。哎,我说错了,不是我说错了,不是一零啊,不是一负110,因为它的坐标系是这个地方是零原点是吧,一零。我们再重新写一下啊,这个地方是零零,那么零零。穿过来是这个地方写0.5,这个地方写负0.5。
18:04
这个地方是负0.50.5。如果是零乘过来这个地方是零,这个地方是零,对吧,如果是这个地方一一的话,乘了之后还是零是吧,还是零是吧,我们现在已经把这两个点放在一块了是吧,看起来不错是吧,对吧。但是呢,看另外一个点零一的时候。零假设这是零上,假设第一个是一,下边是零的话。一乘上这个0.5和零乘0.5变成什么0.5对吧?我们才算一是错的0.5,而另外一个点是,比如说零一的话。零一的话。对吧,这个乘完之后这个地方是多少。负0.5对吧?0.5,那么对于下面来说,它正好是对称的对吧?0.5和负0.5对吧?正好是对称的,这现在是现在我们有四个值,已经有了四个值了,如果你就把这个W1W2权重设成一,就让他们四个值都乘一,然后做一个加和的话。
19:07
四个结果全是零。对吧,你还是分不开。那不管你把这个W1W2做成什么样的权重,一和二还是三还是四,不管你怎么做,他们现在还是分不开,大家可以试一下。肯定还是分不开,这里边核心问题在于什么呢?我们昨天给大家讲过,这是一个非线性的问题。而你不断的在乘权重,这是一个什么线性变换?明白吧,这是个线性变换,通过线性变换永远不可能把非线性的问题解决掉,这是永远不可能的,不管你乘多少层乘,乘100层也没有用,对吧?而且线性变换乘100乘和乘一层是一样的。这个大家理解吗?比如说先乘二,再乘三和乘六是一个概念,乘矩阵也是一样的,你先乘一个矩阵P,再乘一个矩阵Q,全是线变化,中间什么都没干,就等于先乘一个矩阵,叫PQ。
20:02
对吧,还是线性变化,那么这里的关键的一个点在什么地方呢?我在这个地方加一个激活函数。所以奇函数可能我们我们随便加一个啊,比如说嗯,S吧,就S这个奇构函数。这个记入函数可以这么写啊,这个记录函数就叫呃,Min。零和它的Y。这个是,所以呢,负0.5被折过去了,被折成零了,明白吧。啊,这个负点五就被整数零了,对吧,所以呢,这两个点就被分到了什么0.5上去了。因为什么呢?因为因为你这个地方如果是负0.5的话,假设我这个地方是负0.5,我是强制给你折成零。明白吧,强制直升零,那下面这0.5没动,所以加起来是0.5对不对,对于反反向来说也一样,所以呢,我们把刚才我们看到这两个点已经分到了一个所叫0.5的一个区域里,对不对,这两个点分到了一个叫零的区域里,对不对。
21:06
我们就把一问题解决了。可以拿笔写写一下啊,不行的话回去,那这里的关键问题在什么地方呢?不在于你乘多少层,而在于你加了一个几乎函数,这个激活函数的图像是这样的。对吧,刚我说了负0.5强制化成零对不对。而0.5还是0.5,所以呢,就把呃一个负0.5就都给删掉了,对吧?上假如上面0.5,下面负0.5,那下面就等都不是,最下面这分量就没了,下面还是0.5对吧?上面负的下面正的,下面剩面没了,所以这两个点就被画到这个位置上去了,而这两个点就被画到这个位置上去,对吧?这样的话,我用一条直线把它一切不就开了吗?对吧。这这个地方理解了是吧。所以大家从这个地方开始要建立一个观念,就是什么是非线性。
22:03
嗯,如果你这个地方加一个C个目的函数其实也是可以的,你加其他任何函数都可以,只要你加的不是直线就行,明白吗。
我来说两句