DNN学习随笔

1,DNN源于早起人工智能联结主义学派,试图通过模拟人脑的机制,来实现人工智能。

2,DNN在计算机领域的研究和实现可以追溯到50、60年代的感知器算法,感知器算法是一个单层阶跃激活函数的神经元,用于解决二分类问题,能证明在样本线性可分的时候可以收敛。它无法解决XOR这样的线性不可分情况。70、80年代多层感知机发明,BP算法用来求解,理论上可以逼近任意连续函数,通常只有1个隐层,隐层多起来的时候参数太多收敛时间太长,效果也不好。直到最近几年,分布式存储和运算系统的发展,解决了运算存储资源的瓶颈,研究者也发现了增加深度比增加宽度有各种方面的优势,并且提出了各种优化算法,尤其是在图像、语音等多媒体领域的突破性进展,于是DNN火了。

3,现在DNN大致有3类:前馈网(包括普通MLP、CNN等)、反馈网(RNN等)以及能量网(RBM、DBN等)。训练算法基础是BP,不同在于激活函数选择上的差异(修正线性单元等)、权重初始化的差异(是否pre-training)等。主要解决训练过程中的梯度弥散或者爆炸,以及收敛速度和效果等问题。

4,先以MLP(多层感知机)为例理解BP算法:

一个n层的MLP,需要训练n-1个权重矩阵和偏执向量。wl,i,j代表第l层i,j元素的权值,deta wl,i,j代表梯度下降算法的权重更新量:

deta wl,i,j = yeta * deta l,i * xl,i,j

其中yeta是学习率,deta l,i表示第l层的i单元的误差项,xl,i,j表示l层的第i个元素的第j个输入。

大致推倒过程为,设误差为E,则E对wl,i,j求导:

E/wl,i,j = E/net l,i * net l,i/wl,i,j = E/net l,i * xl,i,j

分两种情况讨论:

1)l是输出层:

deta l,i = -E/net l,i = -E/oi * oi/net l,i

2)l是隐藏层:

deta l,i = E/net l,i = sum (E/net l+1,k * net l+1,k / net l,i)(根据链式法则,通过影响下游(l+1层)链接节点的净输入影响最终输出)

              = sum (-deta l+1,k * net l+1,k/ol,i * ol,i/net l,i)

              = sum (-deta l+1,k * wl,k,i * ol,i/netl,i)

deta l,i的计算过程中都会乘以激活函数的梯度ol,i/net l,i,当激活函数是sigmoid的时候,导数的取值范围在0-0.25之间,当误差沿着网络逐层回传的时候,会不断衰减,当网络层数比较多的时候,越靠前的权重更新越少,出现梯度弥散问题。

5,再看看CNN网络:

CNN受启发与生理上的感受野原理,来修改MLP中的层与层之间的全连接方式,使得连接方式更符合生物原理。由于采用局部连接,并且权值共享,因此可以大幅减少需要训练的参数规模,但是由于每个特征都由局部连接来自动抽取,会导致特征数目膨胀不利于后续的监督任务学习,所以又引入的池化,来对局部特征进行聚合采样,减少特征冗余增加监督学习任务的鲁棒性。举个例子:

假设有100*100的图像,我们需要借助DNN学习100个特征供后续的监督学习使用。如果采用MLP则需要学习10^6+100个参数。但是如果使用CNN,每个感受野感受5*5的片段,利用权值共享每个特征只需要学习5*5 + 1各参数,总共100*(5*5+1)个参数。参数个数降低了3个数量级。但是由于每个特征经过卷积之后,会输出(100-5+1)*(100-5+1)个局部特征值,100个特征就是100*96*96,特征个数增加了2个数量级,对后续的监督学习来讲是不利的。因此引入池化,对这100个特征里面的每组特征点进行下采样,比如max pooling取一个区域的最大值,average pooling取一个区域的均值。如果用8*8的感受野去采样,则最后特征数变为100*12*12,就可以把特征数限制在一个可以接受的合理范围内。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值