【中文字幕】卡耐基梅隆大学?2018?秋季《深度学习导论》Bhiksha Raj 领衔主讲

开课时间:9月27日开始正式发布,更新节奏视官网课程而定
开课时长:28讲视频

突然就了解到了图像,或者语意分割是怎么实现的了,我们之前就说,一个三层的神经网络可以你和任何形状的的函数,只要这个神经网络足够深,或者输入的特征足够多,他就可以拟合出一个人的形状,并且对其进行分类,在圈内的东西是“人”,在圈外的东西是“非人”。

[展开全文]

深度学习可用于多个领域,物体识别,机器翻译,下棋等等

神经网络能做任何事情!

这门课不容易,要做很多很多的工作。

神经网络是模仿人类思考的方式,从而形成的一种结构。可以实现人类的各种能力。

?

[展开全文]

?

?

神经网络就相当于一个黑盒子,可以通过构建这个盒子,实现语言识别、视频描述、游戏决策。

起源:联结主义。

信息储存在神经元与神经元的连接中。

[展开全文]

这一节的内容是课程介绍。

神经网络就相当于一个黑盒子,可以通过构建这个盒子,实现语言识别、视频描述、游戏决策。

起源:联结主义。

信息储存在神经元与神经元的连接中。

?

[展开全文]

Neural Network is modelling the brain.

-?group of?Perceptorns, Multi-layer Perceptorn can slove XOR problem.

?

How to train this complex model ?

?

?

?

[展开全文]

Neural Networks

1. Introduction

- Neural Networks are taking over!

? - Speech Recognition

? - Machine Translation

? - Image segmentation and recognition

? - AlphaGo, AlphaZero

? - image to text

?

So what are neural networks??

-? Connectionist Machines

?

[展开全文]

?

  • 神经网络的应用:

图像理解;语音识别;游戏智能;

  • 输入与输出之间的联系(函数);

大脑:神经元连接;

信息存在于神经元的连接当中;

?

[展开全文]

链式求导法则

对所有值进行求和运算。

标量不用关心顺序。

有了这些值以后,就可以反向计算。

误差反向传播:

从后向前计算导数。从后进入网络,反向传播误差导数。

先计算输出神经元的导数,然后计算感知器放射输入的导数。

[展开全文]

vector notation:

Y表示网络最终的输出,即网络的响应。

使用一个阈值函数,比如sigmoid函数,计算y=1的概率。

若是multi-class output:one-hot表示(包含一个1,其他元素都是0):

输出是向量。

softmax层。

————————————————

误差反向传播:

我们会使用链式法则,来计算误差的梯度。

二分类问题:

收敛度量方式:

如果你想要1 0,网络输出是0 1,怎么办?

所以我们经常使用交叉熵来提高效率。

分两种情况:

1、d和y相等;2、d和y不相等。

d是desired output;y是实际输出。

1、当输出的期望d和与样本点实际的标签y相同的时候,散度函数Div(y,d)=0。

2、另d=1,y=0,

-dlogy=-1 * log(0)=-1 * (负无穷)=正无穷

————————————

多分类问题:

需要累加所有的-d * logy,当y和d相同的时候,散度函数Div(y,d)=0;当y和d不同的时候,假设每个分类结果完全不一样的时候,Div(y,d)的结果为无穷大。

只需要计算某一个类的偏导数,其他不用关心。

————————————————————

训练集中所有样本点散度的平均值,就是总误差。

在梯度下降中,每次迭代时,需要用到平均误差来修正其中的变量。在每次迭代中,需要利用上一次迭代的权重以及误差的偏导数来修正更新权重值。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

[展开全文]

回顾:

给定training set of input-output pairs:

就可以得到这整个数据集中的平均经验误差,然后取得最小值。这是最小化优化问题。

——————————————————

定义导数:

微小变化会在多大程度上影响输出?

若X是一个向量,dx指的是X在每一个方向上的变化。

公式在课件中。

关于梯度的定义。可以定义为行向量(通常),sometimes也可以定义为列向量。

1、把斜率为0作为判断是否达到最小值的依据,是不够充分的。

2、我们真正可以用来检查是否达到最大值和最小值的方法是,首先找到那些导数值为0的点,在这些点中,找到驻点,检查二次导数,若二次导数为正,说明该点是最小值;若为负,则是最大值。

PS:驻点是什么?函数值在这一点停止变化,在驻点前后,函数值的改变的方向会发生变化,要么是先减后增,要么是先增后减。

3、因为函数存在拐点。二阶导数会在拐点处变为0。若某个点,导数为0,则并不一定是极小值点。

————————————————————

对于多变量函数,如何计算驻点?

你要计算梯度的每一项是否都是0。如果有一部分为0,另外一些不是0,那么函数在某一些方向上,还是会变化。

梯度是一个向量,是唯一能使函数值增加最快的方向。

Hessian矩阵:

对有多个输入参数的函数定义二阶偏导数,就是Hessian矩阵。对角线上的元素是对单个输入变量的二阶偏导数。

————————————————————

总结:如何找到极大极小值?

首先找到梯度为0的点的集合。然后计算这些候选点的Hessian矩阵,如果这个函数的Hessian矩阵是对称矩阵。如果矩阵的某个特征向量的特征值是正数,那么沿着这个特征向量的方向,将会得到极小值点。如果某个特征向量的特征值是负数,那么沿着这个方向,将会得到极大值点。

通俗点的解释就是:我们抵达了某个点,它的梯度为0,如果它是极小值点的话,那么Hessian矩阵的每一个特征值都必须是正数。

如果你想得到最大值点,需要计算Hessian矩阵,计算量大。

————————————————

实际中,给定一个初始猜测的X0,一步步迭代后,我们最终会到达导数为0的点,也就是说,一直迭代到函数值不再减小,那么导数就可以变为0。

初始化时,应该选择函数值不为0的点。

如果梯度为正,我们沿着梯度的负方向改变。

总结:

开始迭代后,你可以检查梯度是否为0,或函数值的改变量(两次迭代之间)在变小,直到一个特定的阈值。

表示网络的函数,必须对每一个参数都可微。这样就可以用梯度下降来最小化误差。

?

?

?

?

[展开全文]

更复杂的决策边界问题:

五边形问题。

NP难问题,给出一个问题,很简单就能够证明,要想得到一个答案,是不可行的。

理论可行,计算上不可行。

回到分类问题上,如果修改一点权重,是否是在向正确的方向移动呢?是否在朝着提升效果的方向上移动呢?当然不会!因为输出是一个符号函数,也许可以改变整个W,但是这个输出不会改变!当穿越训练实例时,才是改变输出的唯一方式!

larger problem时,也是一样:

输出是一个阶跃,直到穿越了一个实例,才会发生变化。因此,对于W的小调整,并不会告诉你输出发生了什么变化。所以感知机的规则不适合这里。

另外一个问题:正负线性不可分。

解决solution:

知道反馈,并调整参数。需要找到一个合适的激活函数,来替代当前的符号函数。可能需要一些更平滑的激活函数,这种函数可微分,在任何地方都具有非零导数。=>sigmoid

————————————————————

引入可微分激活函数:

sigmoid可微。当x改变多少,y就改变多少。把W增加一点点,可以得到Y的相应变化。

Y对于X和W是可微的。

w/输入的微小变化,会在多大程度上改变Y。整个网络都是可微的,包括它的所有参数和所有输入。

————————————————————

最小化期望误差:

在实际中,某些X的发生频率更高,另外一些X未出现过。我们希望更多地关注X更可能发生的地方,更少地去关注X不太可能发生的地方。换句话说,对于每一个X,不仅仅希望最小化误差,还根据X的概率来对这些误差进行加权。出现的概率大,则对最后结果影响的概率大。

针对训练数据,计算经验误差,这其实就是优化问题。

————————————————

总结:

多组合优化问题:使用非零导数的连续激活函数,使我们能够估计网络参数。

定义网络输出之间的可区分散度。对于训练实例的期望输出,散度函数必须是可微分的,如果不是的话,即使整个网络是可微的,也会使网络崩溃。如果误差是不可微的,那我们就不能根据参数的调整,得到误差的变化趋势。

?

?

?

?

?

?

?

[展开全文]

通过增加深度,减少神经元的个数。

激活函数并不一定是阈值函数。

前馈网络:

一些输入数据被输入,通过运算符在这些单元上进行运算,他们的输出会在之后这些单元上进行运算,一直这样直到最后,信号永远不会返回到前面的任何单元。单向的/非循环的。

学习一个网络,就是指学习一个网络上的参数。(权重和偏置)

?

问题:

如何量化误差?

与误差的正负无关;误差的正负不能抵消。然后计算积分。

对g(x)抽样,得到输入-输出pair对。这些项中可能包含噪声。

PS:若对于一个特定的输入X,会得到不同的输出,这样,你从样本中学习到的关系,并不是独一无二的,就需要用噪声来重塑。

假设,关联是唯一的。对于任意一个X,都有唯一的D与之对应。

——————————————————

找到一个超平面,分离0/1点。

超平面通过零点,因此是线性的

=>进一步延伸,向量X的每一个元素与向量W正交。

=>W是一个向量,这个向量与平面上的每一个X正交。这个平面是所有X点的集合,这些点与W是垂直的。

=>|w| * |X| * cos 何时为正?W和X的夹角介于-90到+90之间时。

=>整个感知机算法,都是基于这两个简单的记号,1、w和平面正交;2、对于类别为正的实例,你想让W指向这个实例;对于负的实例,你想让W尽量远离这个实例。

?

算法:initial W,不管初始值是什么,都可以计算W和训练实例的内机,它们中的一部分会被正确分类,对于这些,不需要做任何事情;我们唯一需要调整W的时刻就是,当遇到一些实例被错误分类的时候。对这些被错误分类的实例来说,我们已经有了实际输出,就是对于每个训练实例的sign(W^T x),假设输出被错误分类了,该如何修正W呢?

只需要在实例被错误分类的时候,更新W。

如果正例被分到了错误的一边,我需要让W加上这个X,让W靠近这个正例;如果负例被分到了正确的一边,我需要让W减去这个X,让W远离这个负例。

?

?

?

?

?

?

?

[展开全文]

depth matters

相比于布尔门来说,阈门更加重要。

若限制MLP的深度D,则需要指数级别的单元。

————————————————

MLP作为classifier:

实际就是找到一个复杂的决策边界,边界内得到1,边界外得到0.

感知机只能具有线性边界。

一个隐藏层的MLP只能组成凸的多边形。

所以,无法得出非凸的边界。

随着不断增加边的数量,将会得到一个圆柱体,圆柱体内部的和为N,然后很快减小到N/2。

含有一个隐藏层的MLP,可以对任意一个分类器任意精度的边界建模,但是这将需要指数数量的神经元,神经元数量将接近无限。

上述阐述了deep的重要性。

——————————————————

MLP是一个通用布尔机器/通用分类函数/是一个两层或者一个隐层的通用分类器。

更深的网络需要更少的神经元。

————————————————————

优化depth/width

若第一层隐含层的感知机数量减少一半,则会丢失很多信息。没有方法可以从不完全的输入信息中恢复。

每一层必须足够宽,来捕获那一层所需要的信息。

一旦达到sigmoid阈值函数的饱和区,所有信息都丢失了,所以保留的信息,仅仅是离边界不是很远的信息。

现代神经网络很少用sigmoid(更饱和),在前面的层中,实际上不会传递信息。在最后一层,可以用sigmoid。

并不是说,sigmoid或者阈值函数是很差的激活函数,只是说,使用这些,你将会需要更多的神经元。

总结:提升网络容量的不同方法:deeper and wider。

使用分层的激活函数。如果在前面丢失了信息,后面的层中,将无法恢复。因此,应该尽可能不在前面的层中丢失信息。但是,简单地线性传递所有信息,也不能实现任何东西,实际上应该在每一个点上都做出决定。

?

?

?

?

?

?

?

?

?

?

?

?

[展开全文]

仿射和线性有什么区别?

线性:

f(ax+by)=af(x)+bf(y)(过原点)

仿射:

具备基本的线性特质,但是不穿过原点。是一个变形的线性超平面。

————————————————————

多层感知器:

一个网络很“深”的含义是:

有向图具有源和接收器。从源到接收器的最长路径就是图的深度。

如果我要用超过2个神经元来处理输入,就称之为一个深度网络。

————————————————————

可以组合任意布尔函数,只需要使用一个隐层。一层感知机就是普通的布尔函数。

————————————————————

MLP的多层神经元可以称为通用布尔函数。

它可以构造任意布尔函数。两层网络(一层隐含层)就可以组成任意一个布尔函数。

why deep?

如果只用一个隐藏层single,需要:

在一个隐含层中,至少需要2的N-1次方个感知机,可以表达一个布尔函数。

如果使用multiple layer呢?

N个变量的XOR可能需要3(N-1)个感知机。

所以,这就是deep的意义所在。

更好的表达:只需要2 * logN

————————————————————

网络的深度取决于函数。

如果固定了网络深度D,复杂度就变成指数型的了。若不固定网络深度D,复杂度就是线性的。

————————————————————

————————————————————

?

?

?

?

?

?

?

?

[展开全文]

近些年来,深度卷积神经网络(DCNN)在图像分类和识别上取得了很显著的提高。回顾从2014到2016这两年多的时间,先后涌现出了R-CNN,Fast R-CNN, Faster R-CNN, ION, HyperNet, SDP-CRC, YOLO,G-CNN, SSD等越来越快速和准确的目标检测方

R-CNN是较早地将DCNN用到目标检测中的方法。其中心思想是对图像中的各个候选区域先用DCNN进行特征提取并使用一个SVM进行分类,分类的结果是一个初略的检测结果,之后再次使用DCNN的特征,结合另一个SVM回归模型得到更精确的边界框。

[展开全文]

如何定义现代计算机的架构呢?

冯诺伊曼结构

当前的神经网络模型都属于连接机器。

————————————————————

里程碑之一:

兴奋性突触:能够激发神经元的突触,如果有足够的刺激,它们就会被激发。

抑制性突触:当一些信号传递过来,这个不会被激发,不管传递过来的是什么。

————————————————————

感知机模型:

simplified mathematical model

模型思想:如果你有一些输入元素进入一个网络单元,这个单元会以权重组合的方式操作这些输入。如果权重组合超过了一个阈值,这个神经元就会被激发,否则就不会被激发。

这个非常简单的结构是非常全能的。

Rosenblatt提出一种学习算法:

如果目前输出与期望输出不匹配,这两者的差异将会与当前输入相乘,并加到当前的权重上面。这种学习规则非常流行,在机器学习中,无时无刻都会用到。

感知机无法解决异或XOR问题。

单独的感知机单元的计算能力有限。但是如果组织成网络,计算能力就会非常强!

上述均是布尔学习模型。但我们的大脑不是布尔机器,我们的大脑输入基于各种实数。

————————————————————

感知机是可以处理实数输入的。

可以使用简单的线性函数模拟出布尔函数,而且可以通过对各种布尔函数的组合来构建无限的可能来完成给定的布尔型任务。

一旦你知道其工作原理,就能够构建任意复杂的布尔函数。

————————————————————

complex decision boundaries:如何设计网络?

应该把复杂的形状,拆解为多个一般性的基本凸函数图形,这样就能让每个子网络处理一个凸函数图形,然后将它们组合起来,来形成任意的复杂决策边界。

处理图像分类的情况:也是如此,神经网络的作用就是学习到这两个向量领域在高维的分界线。

————————————————————

总结:多层感知机能够连接多个计算模型以此来耦合复杂的布尔函数,但它本质上还是布尔模型,只是通过各种不同的线性函数的组合来实现这一点。

MLP能代表任意形状决策边界,MLP可以用来分类数据。

————————————————————

MLP——regression

如果想要的输出是连续的实数,而不是之前的布尔型0或者1,应该怎么做?

可以对任意函数进行建模。我们可以将这个函数理解为序列函数。可以让隐含层的感知机两两配对,每一对来配合某个阶跃函数在某个区域内的高度。然后以从左到右的顺序,总能得到一个输出值。甚至!可以让这种近似来得更加精确,即,让每个区间更窄,产生更多的区间。

总结:MLP作为连接型计算模型,是可以用来处理分类任务的,MLP同样可以用来对连续型函数进行建模。

神经网络其实就是多层感知机(MLP)。

MLP具有一定的记忆机制,目前看到的都是MLP的前向feedforward工作,但是,有一些循环网络,这种网络的某个单元输出会回到单元本身。

对神经网络进行计算:对概率分布进行计算等等。

AI任务只是一些能被神经网络建模的函数。

?

?

?

?

?

?

?

?

?

?

?

[展开全文]

我们的认知是基于什么产生的?

所有的一切都是依赖于神经元之间的连接来决定如何工作的。

神经网络可以根据不同的输入,产生不同的输出。

神经网络如何存储信息?如何学会存储信息?

[展开全文]

这里从导数讲到梯度,梯度是y随着x的变化最快增长的方向的表达,有了梯度就可以去逼近求解函数的极值点。

这里利用梯度下降的迭代方法来逼近极值点,这个算法一般肯定会找到一个局部极值,不一定是最小值。如果要求解全局最小,可以利用二阶导数的hassin矩阵去去除鞍点,但是这种计算量大。或者可以在函数的构造上下功夫,让函数是个凸函数。

本节用了很长的时间在讲述导数已经梯度的意义,而在最后得出结论和方法,并且列出了多个不同的激活函数及其导数情况。

[展开全文]

第二课笔记:本节课主要介绍了神经网络的发展历史。起源于对大脑神经元的模仿,最开始只是简单的单独感知机模型,可以完成与或非布尔运算,但是不能完成异或运算。之后将感知机组成网络,多层感知机就出现了!多层感知机可以联结多个计算模型以此来耦合复杂布尔函数。之后的发展便是从布尔型机器,到可以处理实数,从硬阈值到软阈值,至此MLP(多层感知机)可用于图像分类,甚至是复杂函数的拟合。

所谓往往越简单的越是强大!小小的感知机在组成MLP后,会有很强大的功能。

[展开全文]

?一个MLP进行拟合函数或者分类边界的过程,会变为一个组合优化的问题,在各种组合中找到符合目标的组合。那么如何优化呢?

这里如果继续用感知机的规则,首先出现的问题是w的微调整并不会影响原有的符号函数结果,即无法获知反馈情况,这时需要使用其他的激活函数来代替原有的符号函数。此时就解决了一个调整-结果告知的机制,能够获取调整的方向已经量度。这里的激活函数是平滑可微可导的,这本身就以为着激活函数可以捕捉输入和输出对应的微小变化和方向。这个过程就是非线性数据解析,如果MLP没有这样的操作,那么MLP无论多少层最后还是和一层一样。

这样的话,在MLP中如果W改变了一点,最终会在激活函数里面计算出Y对应改变多少,而y的输入为z,z=W.X。并且在这个过程中,网络层次和微分分解正好对应(前一层是后一层的输入),那么此时y可以感知全网所有wi的微小变化。

这时候接下来的任务就是利用这种感知能力去优化参数,即让误差最小就可以,这里可以看前面讲的那个散度函数的定义。 最后这个散度函数在计算的时候只需要对样本空间的误差期望进行计算,求出最小值去代替原有散度函数。

?

[展开全文]

进入小组观看课程

更多 >>
以下为该课程相关学习小组,您可以选择任意小组加入学习课程并交流

杠杆炒股-配资炒股资讯网-股票配资公司-在线配资门户-91快牛配资