关于搭建深度神经网络的理解

关于搭建深度神经网络的理解

1.关于神经网络的初步理解
1.1 什么是神经网络?
神经网络可看做一个复合函数,输入一些数据,它便输出一些数据。
1.2 神经网络的基本构架
(1)单元/神经元
将单元看做一个盒子(函数),里面包含权重和偏置项,可以用线性函数y=mx+b来理解。将这个盒子两头打开,一头接收数据x,数据x首先进入盒子中,将权重m与数据x相乘,再向相乘的数据添加偏置项b,最后从另一头输出。然后使用激活函数将数据x的输出限制在一个范围内(多数情况下)。想象有多个这样的方程,从一个数据点传入数据,计算多个输出值,再传递到下一个单元。这样便组成了一个神经网络。
(2)连接/权重/参数
①是神经网络必须学习的数值
②权重:这些数字代表神经网络认为其在将权重与数据相乘之后应该添加的内容。它们经常出错,但神经网络随后也学习到最佳偏置项。
③超参数:将神经网络看作一台机器,那么改变机器行为的nob就是神经网络的超参数。超参数需要手动设置。
(3)偏置项
如果在写神经网络的代码的时候,要是把偏置项给漏掉了,那么神经网络很有可能变得很差,收敛很慢而且精度差,甚至可能陷入“僵死”状态无法收敛。因此,除非有非常确定的理由去掉偏置项b,否则不能忽略这个微小的数据。
2.深度神经网络模块的划分
(1)批量输入模块
(2)各种深度学习零件搭建的深度神经网络
(3)凸优化模块
3.深度神经网络的基本零件

3.1常用层
3.1.1 Dense层
即全连接层,对上一层的神经元进行全部连接,实现特征的非线性组合。也就是说全连接层中的每个神经元与其前一层的所有神经元全部连接在了一起。
3.1.2 Activation 层
即激发函数层,可以看做一个阀,如同人类神经元,接受足够的刺激才会做出应激反应,也就是说,上一个神经元输入的值的总和wx+b不够大时,这个激励函数就会抑制其输出信号,足够大时就激发神经元。
3.1.3 Dropout 层
Dropout 层一般加在全连接层,防止过拟合,提升模型泛化能力。首先理解了什么是过拟合,模型过拟合,就是虽然在训练集上表现得很好,但是在测试集中表现得恰好相反。比如说,我们建立好了一个模型来辨识小狗,给神经网络提供的训练样本全是二哈,经过多次迭代训练之后,模型训练好了,并且在训练集中表现得很好。基本上二哈身上的所有特点都涵括进去了,但是如果给神经网络一张泰日天的照片作为测试样本,那么该模型就不会认为这是一条可爱的小狗了,这样就造成了模型过拟合。而Dropout的思想是当一组参数经过某一层神经元的时候,去掉这一层上的一部分神经元,让参数只经过一部分神经元进行计算。去掉也并不是真正意义上的去除,只是让参数不经过一部分神经元计算而已。
3.1.4 Flatten 层
连接卷积层与Dense全连接层,类似于一个压缩器,压平输入的元素,把多维的输入一维化。

3.2 卷积层
3.2.1 卷积层概述
首先卷积(或内积)就是一种先把对应位置相乘然后再把结果相加的运算。卷积神经网络相比之前基于 Dense 层建立的神经网络,有所区别之处在于,卷积神经网络可以使用更少的参数,对局部特征有更好的理解。用于从图片中挖掘特征。卷积核如同权重与偏置项,都是在神经网络学习过程中逐步改变的。卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成
3.2.2 Conv2D函数
用一个滑动窗口(卷积核)对另一元素进行扫描。函数内容对扫描方式做了限制。
3.2.3 Cropping2D函数
对2D输入(图像)进行裁剪,(宽和高的方向上裁剪)。
3.2.4 ZeroPadding2D函数
顾名思义,在图像的边缘加上几层0。网上说Convolution2D 前最好加ZeroPadding2D,否则需要自己计算输入、kernel_size、strides三者之间的关系,如果不是倍数关系,会直接报错。
3.3 池化层
3.3.1 池化层概述
在卷积神经网络中,卷积层之间往往会加上一个池化层。池化层可以非常有效地缩小参数矩阵的尺寸,从而减少最后Dense层中的参数数量。而且使用池化层既可以加快计算速度又有防止过拟合的作用。
3.3.2 MaxPooling2D函数
MaxPooling 是一种减少模型冗余程度的方法,通过将输入矩阵进行分割,取一个最大值作为代表填入子矩阵。
3.3.3 AveragePooling2D函数
与 MaxPooling 类似,不同的是一个取最大值,一个是平均值。
3.3.4 GlobalAveragePooling2D函数
通常只会出现在卷积神经网络的最后一层,作为早期深度神经网络Flatten 层 + Dense 层结构的替代品。压缩数据精简数据的作用。
3.4 正则化层
3.4.1 正则化层概述
首先理解了什么是正则化,正则化其实就是规则化,可以理解为给需要训练的目标函数加上一些规则(限制),让他们不要自我膨胀。所以正则化层用来防止过拟合。
3.4.2 BatchNormalization
由于在训练神经网络的过程中,每一层的数据是不断更新的,由于数据的更新会导致下一层输入的分布情况发生改变,所以这就要求我们进行权重初始化,减小学习率。而BatchNormalization就是对网络中每一层的单个神经元输入,计算均值和方差后,再进行wx+b操作。
3.5 反卷积层
3.5.1 反卷积层概述
又称转置卷积。用矩阵来理解,卷积层时,正向和反向分别乘以C和CT。反卷积就是正向和反向分别乘以CT和C。反卷积有一种将输入的size变大的意思,一般情况下,输出的维度要大于输入的维度。虽然是想还原输入,但实际上是无法还原输入的,反卷积的权重可以进行学习得到。
3.5.2 UpSampling2D函数
相当于将输入图片的长宽各拉伸一倍,整个图片被放大了。
4. 批量输入模块
实现一个函数,每调用一次,就会读取指定张数的图片,将其转化成矩阵,返回输出。
5. 凸优化模块
使用基于批量梯度下降算法的凸优化模块,优化模型参数,就类似于愚公移山?

以上是一个作为初学者对搭建深度学习神经网络应有的知识和理解,对于大多数什么都不懂的萌新提供比较友好的理解方式。这里也不提供相关的代码理解,只是作为一个浅析!

你可能感兴趣的:(AI)