李宏毅深度学习笔记(全连接、CNN、RNN)一

摘要

	最近在学习台大李宏毅老师的深度学习课程,感觉受到了醍醐灌顶式的学习。在这里记录一下学习笔记,一方面希望和大家多交流学习,一方面如果有不足的地方希望大家能指正。我将从三个最basic的网络连接:全联接层、卷积神经网络到循环神经网络三个方面结合李老师的PPT和自己的理解向大家展示。

目录

(1)Fully connected layer(全联接层)
(2)Convolutional/pooling layer(卷积/池化层)
(3)Recurrent structure(循环神经网络结构)

1.Fully connected layer

(1) 全连接网络基本结构

顾名思义,全联接层就是两个layer之间的神经元都是俩俩相连的。例如,现在有两层神经网络,如下图1所示
图1 Fully connected layer
两层神经网络分别为Layer l-1,Layer l。他们分别有N个结点,只是在这里为了表示区分,我们分别用 N l N_l Nl N l − 1 N_{l-1} Nl1来表示。每一层的 每一个结点的输出用 a i l a y e r a_i^{layer} ailayer表示,例如, a i l a_i^l ail,表示layer l层第i 个结点的输出。每一层的输出用向量 a l a y e r a^{layer} alayer表示,例如layer l的输出可以表示为 a l a^{l} al
以上就是全联接层的基础结构,那么全联接层两个神经层之间的神经元是如何两两相连的呢?——通过weight和bias来形成连接:具体表现如下图2所示:图2  fully connected layer
layer l-1 中每一个神经元都通过不同的权值和下一层的所有神经元相连。神经中间的连线可以理解为乘上了权值weight,这里需要说明的是 W i j l W_{ij}^l Wijl:下标ij代表weigth的方向由神经元j指向i(仅仅是为了方便后文推导公示),也就是前一个神经元结点指向后一个神经元结点。上标l:代表layer l-1指向layer l 。举个例子:layer l-1中1号神经元和layer l中各个神经元相连的weight可以表示为:( W 11 l W_{11}^l W11l W 21 l W_{21}^l W21l W 31 l W_{31}^l W31l W i 1 l W_{i1}^l Wi1l…),有 N l N_l Nl个。那么layer l-1中每个神经元和下一层的连接就可以表示为上图3所示:layer l-1中每个神经元和下一层的连接
W l W^l Wl的每一列,代表layer l-1中每一个结点和layer l中的连接,总共有 N l − 1 N_{l-1} Nl1列,因为layer l-1有 N l − 1 N_{l-1} Nl1个结点。每一列的长度为 N l N_l Nl个,因为layer l有 N l N_l Nl个结点。
biase是在上一层结点乘以权重之后加上的一个偏置值。如下图4所示:bias
现在我们清楚了weight和biase之后,可以来开始运算了。我们设 z i l z_i^l zil为layer l输入到第i个结点之前的值,也就是上一层的结点经过weight和biase运算之后的值。例如,layer l 中输入到第一个结点的 z 1 l z_1^l z1l值为:
z 1 l = w 11 l a 1 l − 1 + w 12 l a 2 l − 1 + . . . + b 1 l z_1^l=w_{11}^la_1^{l-1}+w_{12}^la_2^{l-1}+...+b_1^l z1l=w11la1l1+w12la2l1+...+b1l
依次类推:
z 2 l = w 21 l a 1 l − 1 + w 22 l a 2 l − 1 + . . . + b 2 l z_2^l=w_{21}^la_1^{l-1}+w_{22}^la_2^{l-1}+...+b_2^l z2l=w21la1l1+w22la2l1+...+b2l
z i l = w i 1 l a 1 l − 1 + w i 2 l a 2 l − 1 + . . . + b i l z_i^l=w_{i1}^la_1^{l-1}+w_{i2}^la_2^{l-1}+...+b_i^l zil=wi1la1l1+wi2la2l1+...+bil
这就是上一层结点和下一层结点的连接方式,为了总结出公示,我们做一个矩阵运算,如图5所示:
relations between layer outputs
得到z、a、b、w的关系:
z l = W l a l − 1 + b l z^l=W^la^{l-1}+b^l zl=Wlal1+bl进一步,得到下一层输出和上一层输出的关系:
a l = α ( z l ) a^l=\alpha(z^l) al=α(zl)
等价带换为向表示:
a l = α ( W l a l − 1 + b l ) a^l=\alpha(W^la^{l-1}+b^l) al=α(Wlal1+bl)
其中 α \alpha α为激活函数。

(2)总结:

两个全联接层之间的神经元是通过乘以weight和加上biase来实现两两连接的,参数数量较多,例如,如果输入图像是1001003,中间隐层神经元1000个,那么其中的参数就是:100 *100 *3 *1000 + 1000个,这样的参数是本来神经元的很多倍,如果神经元数目和隐层数量较多,参数数量将指数增加。为了减少参数数量,引出CNN。

2.Convolutional/pooling layer

(1)概述:

那么卷积神经网络(convolutional Neural network)是如何实现减少参数的呢——通过局部感受野 和权值共享以及pooling来减少网络需要训 练的参数个数,下文做具体阐述。
我们先来看一个CNN的整体结构,其实就是fully connected的简化版,如图所示:
the whole cnn
输入一张图片,经过多个convolution和pooling的循环叠加,最后记过全联接层输出判断的结果。接下来我们对convolution和pooling做详细说明。

(2)convolution特性

卷积层有两个特征,这两个特性决定CNN适合处理图像相关的问题,也是用于 减少参数的关键技术。
特性一(局部感受野):some paterns are much smaller than the whole image.
why cnn for image
a neuron does not have to see the whole image to discover the pattern:比如说现在有一个neuron来判断是否有鸟嘴,只需要看到鸟嘴,就可以去判断出图片中是否有鸟的存在。那么只需要将image中的一部分像素丢给neuron, 只需要将图片中一部分丢给neuronn,就可以做需要做的事情。
特性二(权值共享):The same patterns appear in different regions
why cnn for image
就是同样是鸟嘴,如果用一个neuron去诊断左上有没有鸟嘴,一个neuron去诊断中间有没有鸟嘴,就太冗杂了,其实只需要用同一个neuron同一组参数可以诊断处出来,这样就可以减少layer中neuron的个数。这么说有点抽象,举一个例子:
在这里插入图片描述
现在有一个33的filter,也就是过滤器,其对角线都为1,其余地方为-1。有一个66的image,我们开始做卷积,也就是用filter中的元素和image中的像素点对应位置相乘相加,就是一个内积(inner products)的操作。设置步长stride= 1,也就是做一次内积之后移动步长为1的距离在做内积操作。就会得到右边4*4的矩阵。
需要注意的是:因为filter的特性,如果image中有一部分区域对角线全为1,那么内积出来的值就会很大。比如image左上和左下区域,内积之后的值都为3。也就是说,在同一个图片的不同区域,用同一个filter同一组参数就检测出来了。

(3)convolution实现过程

卷积过程也就是特征提取的过程。卷积的特征提取由卷积核(Convolution Kernel),也叫过滤器filter来实现,filter是一个矩阵,它以步长为任意长度的方式在图像上移动,并且做点乘加和运算,就是先做点乘,之后再求和。下图是3x3的卷积核(黄色部分)在5x5的图像上做卷积的过程(步长为1):在这里插入图片描述
需要注意的是:filter的个数以及其大小,都是我们自己决定的,但是并不是乱取的,举一个例子,要找到图片中某个pattern,其大小是33,那么这里用的filter就必须大于33。与之相反的是,filter里面的值是学出来的,也就是weight的值,是训练出来的。
feature map和原图像的区别:
1、经过卷积后得到的convolved feature 中每一个位置用一个或多个value来描述原图像的对应位置。比如上图中,feature map中左上角的一个value值4描述了原图像左上角33的部分。
2、如果filter是多个,就会得到较深的feature map,这样就会出现多个value值来描述原图像对应的位置。如下图所示:在这里插入环境片描述
此时filter为2,就会得到两张特征图,每一个位置就会有两个value值来描述原图像中对应的位置。
对彩色图片卷积:
彩色图片拥有三个channel,分别是R、G、B,也就意味着卷积核也需要和原图保持同样的通道数,这时候filter的形状像一个立方体,同样一个filter就会得到三张feature map,如下图所示:
在这里插入图片描述
卷积核越多,提取图片的特征就越深,可以更好的做分类和识别。
convolution vs fully connected:
卷积网络是全连接网络的简化版,如下图所示在这里插入图片描述
我们把image的每一个像素排成一个向量的形式(一列),全连接层的隐层每一个神经元都连接了image中所有的像素。
然而,在convolution中,隐层中的每一个神经元只连接image中的部分神经元,而且连接的权值便是filter中的值。如下图所示:在这里插入图片描述
如果采用3
3的filter,那么每一个神经元连接的image像素点就为9,也就是9个权重参数,并不想全连接层中那样,需要连接整个image。
### pooling
池化也叫做下采样,它是把卷积过后提取之后的特征看做一个矩阵,并在这个矩阵上划分出几个不重合的区域,然后在每个区域上计算该区域内特征的均值或最大值,然后用这些均值或最大值参与后续的训练。
这里介绍两种主要使用的池化方式:1,找出区域内的最大值。2.找每个区域的平均值。如下图所示:
在这里插入图片描述
max-pooling就是找出区域内的最大值,作为池化的输出。这个区域大小可以自己设定。与之相对应的mean-pooling就是找出区域内的均值。

(3)总结:

卷积层后面通常就会接一个池化层,池化层的作用就是将特征图缩小,目的也是为了减少计算量。通常一个CNN结构都是卷积和池化的不断迭代,然而经过每一次卷积池化操作后,都可以看成是新的image,然后再由下一层的卷积池化来提取特征,这样不断提取特征,就会得到更深的更好的特征,最后将得到的特征排列成向量做全连接,如下图所示:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值