(3)深度学习简介

回顾深度学习的历史:

深度学习的步骤:三步(大象放进冰箱)

在上面的步骤当中:

第一步是定义一个函数,其实就是一个Neural network。那这个Neural network是什么呢?

我们把这个Logistic Regression前后连接起来,然后把一个Logistic Regression(逻辑回归)称之为Neuron(神经元),那我们就得到了一个Neural network。

我们可以用不同的方法来连接这些Neural network,就会得到不同的structure。在这个Neural network有一大堆的Logistic Regression,每一个Logistic Regression都有自己的weight 和bias。

这些 weight 和bias(偏差)结合起来就是network的参数,用\theta来表示。

 那我们应给怎么样把Logistic Regression或者是Neuron(神经元)连接起来呢?

 有各种不同的方法,手动链接起来的,最常见的方法是:Fully Connected Feedforward Network

在这种方法中把神经元排成一排一排的(如图所示),每一个神经元都有自己的weight和bias。这个weight和bias是根据training data 找出来的,假设下图中蓝色的第一个神经元的weight是1,-2,bias是1,蓝色的第二个神经元的weight是-1 ,1,bias是0.现在的输入是1,-1,他的输出是0.98

接下来假设每一个神经元的weight和bias知道,我们就可以反复进行上面的运算得到如下的表示

 

如果输入是0,同样进行上面的运算,可以得到:

所以一个Neural network可以看作是一个函数(function),在知道神经元的weight和bias的情况下,他的输入是一个向量,输出也是一个向量。

举例来说:

 刚才的输入输出结果如上图所示, 我们把参数设上去之后,Neural network就是一个函数,但是如果不知道参数的设定的话,只是定出了神经网络的结构,其实就是定义了一个函数的设定,我们可以给network设定不同的参数,就变成不同的函数,把这些可能的函数连接起来就得到了一个 不同的参数组合(Function set.)。

我们可以把神经元排列成下图的形式:

每一排里面的神经元的数目会很多,每一个球代表一个神经元,每一层的神经元是相互连接的,第一排的输出直接给第二排做输入,以此类推。第一层的神经元需要一个输入,这个输入是一组向量,最后一层神经元的输出就是整个神经网络的输出。

Deep是什么意思呢?就是很多的Hidden Layers组成

哪有多少层Hidden Layers呢?

   

Network的运作我们常用Matrix Operation来表示

举例来说:

假设把上面的输入和每一个神经元的weight用矩阵的形式表示的话如上图所示,再用sigmoid得出输出。

一般来说,一个Neural network,假设我们说的第一个layer的weight全部集合起来当做矩阵W^{1},把他所有的bias集合起来当作向量b^{1},把第二个layer的weight集合起来当作W^{2},把他所有的bias集合起来当作b^{2},以此类推下去直到最后一个W^{L}b^{L}。现在输入一个x,那输出y是怎么算出来的呢?

 

所以Neural network的运算就是一连串的矩阵的运算,函数的x和y的关系是什么样的关系呢?

把上面的事情写成矩阵运算的好处就是可以用GPU加速,所以我们在做Neural network时写成矩阵运算的形式。

Output Layer

把输出层之前的部分和输入层之后的部分看作是一个新的feature  。

输出层所做的事情就是一个Multi-class classifier(多类分类器),是用前一个层的输出当作feature。这个Multi-class classifier所用的feature不是直接从x(输入)抽出来的,是经过很多的hidden layer,做了很复杂的转换以后,抽出一组特别好的feature。这组好的feature可能是能够separable(可分离),经过一连串的转换之后可以被Multi-class classifier(多类分类器)把他分类好。Multi-class classifier经过一个softmax function,我们把输出层也看作是一个Multi-class classifier,最后一层也会加上softmax。

 举例:

输入一张图片时手写的数字2,输出的是 这张输入的image是什么?

 对机器来说,输入的一张图片就是一个向量,假设这张图片是解析度是16×16的图片,有256个pixel(像素),堆积起来说就是一个256维的向量,在这张图片中,每一个像素就对应其中的dimension(方面)。

输出:neural network的输出,如果用softmax的话,他的输出就代表了一个概率分布,假设输出是10维的话,就可以把输出看作是对应到每一个数字的概率。也就是说每一个输出加上数字属于  图片的概率是多少。

 输出是2的概率是最大的0.7.

在这个示例中假设要解这个手写数字辨识的问题,唯一需要的就是一个function,这个function输入是一个256维的向量,输出是一个10维的向量,而这个function就是neural network。

总结来说,这个neural network的输入是一个256维的图片,输出设成10维的,在这个10维里面,每一个dimension都对应到一个数字,那这个network代表了一个可以拿来做手写数字的function set。这个network的结构就定义了一个function set.

接下来的事情就是用Gradient Descent去找一组参数,去挑选出一个最适合拿来做手写辨识的function,在这个过程当中,我们要做一些设计,对于network来说我们唯一的constraint只有输入时256维,输出时10维,但是中间要有几个hidden layer。每一个hidden layer要有多少的神经元是没有限制的,必须要自己设计他,前面的这一系列的操作就决定了function set时什么样的。

第二步:

定义一个function的好坏,在neural network里面,怎么决定一组参数的好坏呢?

 假设给定一组参数,我要做手写数字辨识,所以有一张图片跟他的标签(Label),这张图片告诉我们说他现在是一个多类分类器的问题。这个label 1告诉说现在的target是一个10维的向量,只有第一维对应的数字是1 ,其他的都是0,那输出这张图片的pixel,通过neural network以后会得到一个输出,这个 输出就是y,把target称之为\widehat{y},接下来的事情就是计算y和\widehat{y}

之间的cross entropy ,就是我们我们在做多类分类器的时候是一样的,接下来就是调整整个神经网络的参数,让cross entropy越小越好。

对于所有的训练数据集里面,不会只有一个数据,会有许多的数据

 

把所有的cross entropy全部加起来得到:

接下来做的事情就是在function set里面摘一个function,可以最小化Total Loss,或者是找一组network的参数写成\theta,也可以最小化Total Loss。

那如何最小化Total Loss呢?用到的方法就是Gradient Descent 

更新参数:

 这样就得到一组新的参数,这个过程就反复进行下去,这样就更新到了新的参数,在计算一下新参数的Gradient,根据计算得到的Gradient在进行上面的操作。

那这个Gradient descent的function式子长什么样子呢?

为什么要深度学习?任何一个function,他的输入时N维的向量,输出时一个M 维的向量,都可以用一个hidden layer的neural network来表示,只要hidden layer的神经元足够多,就可以表示成任何的function。

原创不易,转载请告知,内容中有错误的点,也请告知,随手笔记~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值